요인 분석(Factor Analysis)이란? AI에서 공통 변동과 변수별 잡음을 나누는 방법
TL;DR
요인 분석은 여러 관측 변수의 공분산을 적은 잠재 요인과 변수마다 다른 고유 잡음으로 설명하는 확률 모델입니다. 함께 움직이는 부분을 요인의 선형 결합으로 나타내고 각 변수에 남는 변동을 따로 추정합니다. 요인 로딩은 변수와 요인의 연결 계수이고 요인 점수는 사례별 잠재값의 추정입니다. 요인에 이름을 붙이거나 축을 회전해도 실제 원인을 발견했다거나 예측 성능이 좋아졌다고 단정하지 않습니다.
핵심 3줄 요약
- 핵심 1
공통 변동과 고유 잡음을 나눕니다. 관측 변수마다 다른 잡음 분산을 허용하는 잠재 선형 모델입니다. - 핵심 2
로딩과 점수는 다릅니다. 로딩은 변수별 계수이고 점수는 각 사례에서 추정한 요인의 값입니다. - 핵심 3
회전과 성능을 따로 봅니다. 회전은 해석을 돕지만 검증 성능이나 인과관계까지 보장하지 않습니다.
이 글에서 다룰 내용
- 요인 분석의 한 문장 정의
- 두 측정값으로 이해하는 공통 변동과 잡음
- 잠재 요인·로딩·잡음 분산의 작동 원리
- 요인 수·회전·변환·로그우도의 뜻
- PCA·ICA·특징 선택과의 차이
- 실전 사용처와 훈련·검증 체크리스트
- 가정·식별·인과 해석·분포 변화의 주의점
요인 분석을 한 문장으로 정의하면 무엇인가요?
요인 분석은 관측된 여러 수치 변수의 공분산을 소수의 잠재 요인의 선형 결합과 변수별 고유 오차로 설명하는 비지도 확률 모델입니다.
영문명은 Factor Analysis이며 FA로 줄여 씁니다. 인자 분석이라는 번역도 같은 개념을 가리킵니다. 잠재 요인은 직접 측정하지 않은 변수입니다. 로딩은 그 요인이 관측 변수에 어떤 계수로 연결되는지 나타냅니다. 요인이 반드시 실제로 존재하는 하나의 원인이라는 뜻은 아닙니다.
이 글은 scikit-learn FactorAnalysis의 가우시안 요인 모델을 기준으로 설명합니다. 요인은 평균 0·단위 공분산의 정규분포를 따르고 잡음은 평균 0의 대각 공분산을 가정합니다. 잡음 분산은 변수마다 다를 수 있습니다. 다른 요인 분석 도구의 추정법·회전법·확인적 모델까지 같은 API로 옮기지 않습니다.
한 줄 정리: 함께 변하는 부분은 적은 요인으로 설명하고 각 변수에 남는 변동은 고유 잡음으로 따로 다룹니다.
쉬운 예시로 이해해 볼까요?
감자나라ai님이 같은 상태를 측정하는 센서 두 개를 살핀다고 가정해 보겠습니다. 첫 센서는 잠재 요인을 계수 1로, 둘째 센서는 계수 2로 반영합니다. 요인의 분산을 1로 두고 고유 잡음 분산을 각각 0.25와 1로 정하면 다음 관계가 나옵니다. 이해를 돕기 위해 직접 정한 모델입니다.
- 첫 센서의 전체 분산:
1 × 1 + 0.25 = 1.25입니다. 공통 요인 몫과 고유 잡음을 더합니다. - 둘째 센서의 전체 분산:
2 × 2 + 1 = 5입니다. 같은 요인을 더 크게 반영하고 잡음도 다릅니다. - 두 센서의 공분산:
1 × 2 = 2입니다. 이 모델에서 서로 독립인 고유 잡음은 센서 사이 공분산에 보탬이 되지 않습니다.
Python의 정확한 분수 연산으로 확인한 공분산 행렬은 첫 행이 1.25와 2, 둘째 행이 2와 5입니다. 이는 고정한 계수의 계산 예시이며 실제 센서 데이터나 FactorAnalysis를 학습해 얻은 결과가 아닙니다. 자료에서 로딩과 잡음 분산을 추정하는 일은 별도의 학습 단계입니다.
요인 점수도 로딩과 다릅니다. 같은 모델에서 평균을 뺀 관측값이 1과 2라면 잠재 요인의 조건부 평균은
8/9
로 계산됩니다. 관측값을 계수로 단순히 나눠 요인이 정확히 1이라고 정하지 않습니다. 변수별 잡음과 요인의 사전분포를 함께 고려한 추정이기 때문입니다.
쉬운 예시: 두 센서가 함께 움직이는 이유를 공통 요인으로 모델링하되, 센서마다 따로 흔들리는 정도도 남겨 둡니다.
왜 AI에서 요인 분석이 중요한가요?
여러 특징의 공통 패턴을 요약합니다
서로 연관된 측정 열이 많으면 관측값의 관계를 하나씩 읽기 어렵습니다. 적은 요인과 로딩을 살펴보면 어떤 변수들이 공통 방향을 반영하는지 탐색합니다. 원본 열 몇 개를 삭제하는 작업과 달리 여러 변수를 함께 쓰는 잠재 표현입니다. 요인 수를 줄일 때 정보 손실도 확인합니다.
특징별 잡음의 차이를 모델에 넣습니다
어떤 센서는 안정적이고 다른 센서는 더 많이 흔들릴 수 있습니다. 요인 분석은 각 변수의 고유 잡음 분산을 따로 추정합니다. 공식 모델 선택 예제는 잡음 크기가 같은 자료와 다른 자료를 나눠 확률적 PCA와 비교합니다. 해당 합성 자료의 차이를 보여 주는 예제이지 모든 업무에서 요인 분석이 우수하다는 증거는 아닙니다.
새 자료를 확률 모델로 평가합니다
학습한 모델은 새로운 사례의 로그우도를 계산합니다. 같은 입력 변수와 같은 전처리 조건에서 요인 수별 검증 점수를 비교할 근거가 됩니다. 자료의 단위나 변수 수를 바꾸면 확률밀도의 척도도 달라지므로 다른 조건의 숫자를 그대로 순위로 만들지 않습니다.
핵심 인사이트: 요인 분석을 고르는 이유는 작은 좌표가 나온다는 사실보다 공통 구조와 변수별 잡음을 구분하는 모델 가정에 있습니다.
요인 분석은 어떤 순서로 작동하나요?
1. 평균·요인·잡음의 관계를 정합니다
관측값을 평균, 잠재 요인의 선형 결합, 고유 잡음의 합으로 봅니다. 요인과 잡음은 서로 독립인 가우시안 변수이며 잡음끼리의 공분산은 0으로 둡니다. 관측 변수들이 서로 독립이라는 뜻은 아닙니다. 변수들이 같은 요인을 반영하면 공분산이 생깁니다.
2. 로딩과 잡음 분산을 추정합니다
FactorAnalysis는 입력의 특징별 평균을 빼고 SVD 기반 반복 계산으로 최대우도 로딩과 잡음 분산을 추정합니다. 내부 중심화는 표준편차를 모두 1로 맞추는 표준화와 다릅니다. 단위 조정이 필요한지 먼저 정하고 훈련 자료의 전처리 통계만 사용합니다.
확인한 구현은 로그우도 증가가 허용값보다 작으면 반복을 멈춥니다. 최대 반복 횟수까지 도달하면 수렴 경고를 냅니다. 반복이 끝났다는 사실, 모델 가정이 맞는지, 보지 않은 자료에서 잘 작동하는지는 서로 다른 점검 항목입니다.
3. 공분산과 사례별 요인 점수를 계산합니다
모델의 공분산은 로딩으로 만든 공통 부분과 고유 잡음의 대각 행렬을 더한 값입니다. scikit-learn에서는
components_.T @ components_ + diag(noise_variance_)
형태입니다. 공통 부분이 저랭크여도 잡음을 더한 전체 공분산까지 반드시 저랭크인 것은 아닙니다.
학습된 모델의 transform은 입력을 보고 잠재 요인의 조건부 평균을 계산합니다. 단순한 역행렬로 원래 요인을 완전히 되찾는 과정이 아닙니다. 새 입력에도 저장된 평균·로딩·잡음 분산을 사용하며 입력 열의 순서와 단위가 학습 때와 같아야 합니다.
주요 설정과 결과는 어떻게 읽나요?
요인 수와 반복 설정을 구분합니다
n_components
는 잠재 요인의 개수입니다. 기본값 None이면 입력 특징 수를 사용하므로 기본 설정만으로 차원이 줄어든다고 생각하면 안 됩니다. 요인 수 후보를 정해 검증 로그우도와 후속 작업의 성능을 비교합니다. 알려진 원인의 수를 자동으로 찾아 확정하는 설정도 아닙니다.
tol
은 로그우도 증가에 관한 종료 허용값이며 기본값은 0.01입니다.
max_iter
의 기본값은 1000입니다. 요인 수와 반복 한도는 다른 역할입니다. 경고가 나면 데이터·요인 수·풀이 방법을 먼저 확인하고 횟수만 늘려 해결했다고 보고하지 않습니다.
로딩·고유 분산·점수의 모양을 봅니다
components_
의 모양은 요인 수 × 입력 특징 수입니다. 사용자 가이드의 변수 × 요인 로딩 행렬과 전치 관계입니다. API의 분산 관련 짧은 속성 설명을 PCA의 직교 축·설명 분산 순서로 읽지 말고, 잠재값에서 관측값으로 연결되는 로딩과 공분산 계산을 기준으로 해석합니다.
noise_variance_
는 변수별 고유 잡음의 분산입니다. 표준편차나 한 사례의 오차가 아닙니다. transform 결과는 사례 수 × 요인 수의 점수이며
score(X)
는 평균 로그우도입니다. 분류 정확도·회귀 결정계수·잠재 요인의 신뢰 점수와 구분합니다.
회전은 로딩 해석을 돕는 선택입니다
기본
rotation=None
은 추가 회전을 하지 않습니다. 이 API는
rotation="varimax"
와
rotation="quartimax"
를 지원하며 확인한 구현은 직교 회전을 적용합니다. Varimax는 제곱 로딩의 분산을 크게 하는 기준으로 더 단순한 패턴을 찾습니다. 작은 값이 모두 정확히 0이 되는 특징 선택은 아닙니다.
직교 회전은 로딩의 표현을 바꾸지만 공통 공분산을 유지합니다. 공식 Iris 예제도 회전이 잠재 공간의 예측 가치를 본질적으로 높이는 작업은 아니라고 설명합니다. 다른 도구의 비직교 회전이나 확인적 요인 분석의 제약까지 이 옵션이 지원한다고 확대하지 않습니다.
요인 분석과 헷갈리는 용어는 무엇이 다른가요?
PCA·확률적 PCA와의 차이
주성분 분석(PCA)는 관측 데이터의 전체 분산이 큰 직교 방향을 찾습니다. 요인 분석은 잠재 요인과 고유 잡음의 확률 모델을 맞춥니다. 같은 잠재 선형 모델에서 잡음 분산을 모든 변수에 동일하게 제한하면 확률적 PCA가 됩니다. 일반 PCA의 분산 최대화 설명과 잡음 가정을 사용하는 확률적 설명을 구분합니다.
ICA·NMF와의 차이
독립 성분 분석(ICA)는 비가우시안 독립 원천의 혼합을 분리하는 데 초점을 둡니다. 여기의 요인 분석은 가우시안 요인과 변수별 고유 잡음을 사용합니다. 비음수 행렬 분해(NMF)는 음이 아닌 행렬을 음이 아닌 부분 표현으로 근사합니다. 요인 로딩과 점수에는 양수만 허용하는 같은 제약이 없습니다.
특징 선택·인과 추론과의 차이
특징 선택은 원본 열에서 일부를 남기고 요인 분석은 여러 열의 잠재 표현을 만듭니다. 요인이라는 이름도 원인을 입증하지 않습니다. 변수들이 함께 변하는 구조를 모델링하는 일과 어떤 개입이 결과를 바꾸는지 확인하는 인과 추론은 필요한 가정과 증거가 다릅니다.
비교 정리: PCA는 전체 분산의 방향, ICA는 비가우시안 독립 원천, 요인 분석은 공통 요인과 변수별 고유 잡음의 공분산 모델을 중심으로 읽습니다.
실전에서는 어디에 쓰이나요?
여러 수치 측정값의 잠재 패턴을 살핍니다
공식 회전 예제는 Iris의 여러 길이·너비 특징을 표준화한 뒤 PCA, 회전 없는 요인 분석, Varimax 회전 결과를 비교합니다. 변수별 로딩을 보고 어떤 특징이 같은 요인에 연결되는지 살핍니다. 도표의 요인 이름은 분석자가 붙인 해석이며 그 이름 자체가 생물학적 원인의 증명은 아닙니다.
공분산 모델과 후속 입력 후보를 비교합니다
변수별 잡음이 다른 센서 자료나 서로 연관된 수치 특징에서 잠재 표현을 검토할 수 있습니다. 요인 점수를 분류·회귀의 입력으로 쓰려면 원본 특징과 PCA를 쓰는 기준 모델을 유지합니다. 공분산 적합이 좋아졌어도 목표 정답에 유용한 정보가 남았는지는 독립된 평가로 확인합니다.
요인 분석을 적용할 때 어떤 순서로 확인하나요?
1. 표본과 변수의 의미를 정합니다
한 행의 측정 대상, 열의 단위, 결측값·중복·이상치를 확인합니다. 이름이 숫자로 저장된 범주 코드를 연속 측정값으로 취급하지 않습니다. 선형 관계와 가우시안 모델이 출발점으로 적절한지 살피고 자료가 시간순이라면 미래 사례가 훈련에 섞이지 않게 나눕니다.
2. 분할 안에서 전처리와 모델을 맞춥니다
훈련·검증·테스트 경계를 먼저 고정합니다. 결측값 처리와 선택적인 표준화, 요인 분석을 파이프라인에 넣고 교차 검증의 훈련 폴드마다 다시 학습합니다. 라벨을 쓰지 않아도 전체 자료의 평균과 공분산을 미리 사용하면 독립 평가의 경계가 깨집니다.
3. 요인 수·풀이·회전 조건을 기록합니다
요인 수 후보, 반복 허용값, SVD 방법, 난수 시드, 회전 유무를 남깁니다. 기본 SVD 방법은 randomized이며 lapack을 선택할 수도 있습니다. 무작위 풀이를 쓸 때 시드는 반복 비교를 돕습니다. 서로 다른 전처리 조건의 로그우도를 같은 기준처럼 섞지 않습니다.
4. 검증 점수와 해석 안정성을 대조합니다
보지 않은 자료의 로그우도, 후속 예측 성능, 로딩 패턴, 고유 잡음 분산을 함께 확인합니다. 재학습 때 요인 축은 회전하거나 순서·부호가 달라질 수 있으므로 첫 열끼리만 비교하지 않습니다. 배포할 때 전처리와 학습 모델을 함께 보관하고 새 입력의 열·단위·범위를 검사합니다.
실전 팁: 로딩표만 저장하지 말고 평균·잡음 분산·전처리·요인 수·검증 결과를 같은 모델 버전으로 묶으세요.
사용할 때 무엇을 주의해야 하나요?
첫째, 대각 잡음 가정을 점검합니다. 변수별 고유 잡음이 서로 연관된다면 공통 요인만으로 그 구조를 설명하려다 잘못 해석할 수 있습니다. 적합된 공분산과 관측 관계를 대조하고 남는 상관이나 특이한 사례를 검토합니다. 잡음 분산이 다르다는 설정만으로 모든 잡음 구조를 표현하지는 못합니다.
둘째, 요인 로딩을 원인이나 중요도 순위로 단정하지 않습니다. 큰 계수는 모델의 연결을 나타냅니다. 예측 대상에 대한 영향이나 개입 효과를 곧바로 뜻하지 않습니다. 입력 단위와 회전 조건도 로딩을 바꾸므로 표 하나로 개인의 능력·위험도를 확정하지 않습니다.
셋째, 요인 점수를 완전한 복원값으로 읽지 않습니다. 점수는 관측값과 모델 가정으로 추정한 잠재 요인의 조건부 평균입니다. 고유 잡음까지 원래대로 되찾는 값이 아닙니다. 변환된 열들이 언제나 PCA처럼 표본상 비상관이거나 설명 분산 순서라고 가정하지 않습니다.
넷째, 가정과 계산 상태를 숨기지 않습니다. 표본 부족, 큰 이상치, 과도한 요인 수, 훈련과 배포의 분포 차이를 확인합니다. 수렴 경고나 거의 0인 잡음 분산은 검토 대상으로 남깁니다. 회전으로 보기 좋은 표가 나왔다는 이유만으로 이런 문제를 해결했다고 보고하지 않습니다.
주의: 요인 분석은 모델 가정 아래 공분산을 설명합니다. 요인의 실재성·인과 의미·새 자료의 품질·후속 성능은 각각 다른 증거로 검증합니다.
자주 묻는 질문
Q1. 요인 분석과 인자 분석은 같은 말인가요?
이 글에서 두 이름은 Factor Analysis를 가리킵니다. FA라는 약어만 보고 다른 기술과 같다고 판단하지 말고 확장 이름과 모델 정의를 확인합니다. scikit-learn FactorAnalysis의 설정을 다른 통계 도구에 그대로 적용하지 않습니다.
Q2. 요인 분석은 정답 라벨을 사용하나요?
설명한 FactorAnalysis는 입력 특징으로 모델을 맞추며 fit의 y는 사용하지 않습니다. 알려진 라벨을 그림에 붙이거나 요인 점수를 분류기에 넣는 후속 단계와 구분합니다. 비지도 모델도 평가 자료를 미리 포함하면 누수가 생길 수 있습니다.
Q3. 요인 수를 지정하지 않아도 차원이 줄어드나요?
기본 n_components=None은 입력 특징 수를 요인 수로 사용합니다. 적은 표현이 목적이라면 후보 개수를 지정해 검증합니다. 요인 수는 군집 수나 자동으로 확정된 실제 원인의 개수가 아닙니다.
Q4. Varimax를 쓰면 예측 성능도 좋아지나요?
그렇게 보장하지 않습니다. 확인한 직교 회전은 공통 공분산을 유지하면서 로딩의 표현을 바꿉니다. 해석이 쉬운 패턴과 독립 평가 성능은 따로 비교합니다. 회전 조건이 다른 요인 번호끼리 직접 비교하는 것도 피합니다.
Q5. 고유 잡음 분산은 표준편차인가요?
아닙니다. noise_variance_는 관측 변수마다 추정한 분산입니다. 표준편차가 필요하면 분산의 제곱근을 사용합니다. 이 값은 사례별 예측 오차나 요인 점수의 불확실성 구간과도 같지 않습니다.
Q6. 새 데이터를 기존 요인 공간에 넣을 수 있나요?
학습한 모델의 transform으로 잠재 요인의 조건부 평균을 계산합니다. 저장된 평균·로딩·잡음 분산과 같은 전처리를 사용합니다. 새로운 변수나 다른 단위의 입력을 그대로 넣지 않으며 훈련 분포와의 차이를 점검합니다.
출처
마무리
요인 분석은 관측 변수의 공분산을 적은 잠재 요인의 공통 부분과 변수별 고유 잡음으로 나누는 확률 모델입니다. 로딩과 사례별 점수, 잡음 분산과 표준편차, 회전과 예측 평가를 구분하면 결과를 더 정확히 읽습니다.
처음에는 작은 자료에서 변수의 단위와 모델 가정을 확인하세요. 분할 안에서 전처리와 요인 분석을 학습하고 여러 요인 수를 같은 기준으로 비교합니다. 로딩에 이름을 붙이기 전에 검증 점수와 원본 사례로 돌아가며, 새 입력에는 저장된 변환 계약을 적용하는 것이 마지막 점검입니다.
