factor_analyzer는 파이썬에서 인자 분석을 할 수 있게 해주는 모듈이다. 이번 포스팅에서는 factor_analyzer를 이용한 인자 분석에 필요한 인자 적재 행렬과 인자 점수 등 인자 분석에 필요한 값들을 얻는 방법을 알아본다.
인자 분석에 대한 개념은 아래 포스팅을 참고하기 바란다.
40. 인자 분석(Factor Analysis)에 대해서 알아보자 with Python
factor_analyzer
1) 설치
먼저 pip 명령어를 이용하여 factor_analyzer를 설치한다.
pip install factor_analyzer
2) 인자 분석
여기서는 1888년 스위스의 프랑스어권 지방의 사회 경제적 지표 데이터에 대해서 인자 분석을 해보고자 한다.
데이터 엑셀 파일을 불러오고 나서 필요한 칼럼을 추출하고 표준화를 시켜준다.
import pandas as pd
from factor_analyzer import FactorAnalyzer
from factor_analyzer.factor_analyzer import calculate_bartlett_sphericity, calculate_kmo
df = pd.read_excel('../machine_learning/swiss.xlsx')
X = df.drop('Province', axis=1).values
X = (X - np.mean(X, axis=0))/np.std(X, axis=0, ddof=True) ## 표준화
(1) 인자 분석의 적절성 확인
인자 분석 전에 주어진 데이터가 인자 분석에 적합한지 즉, 공통 인자를 잘 찾아낼 수 있는지를 확인하는 테스트를 해보면 좋다.
factor_analyzer는 이를 위해 Bartlett’s Test, Kaiser-Meyer-Olkin Test를 제공하고 있다.
Bartlett’s Test는 주어진 데이터의 상관 행렬을 이용하여 단위행렬에 비하여 얼마나 다른지 검정한다. 귀무가설은 데이터의 상관 행렬이 단위행렬이라는 것이다. 즉, 변수간 상관성이 없다는 게 귀무가설인 것이다. 이때 Bartlett’s Test에서 계산된 $p$-Value가 작다면 귀무가설은 기각되고 인자 분석을 수행하게 되며 기각하지 못하면 애초에 변수간 상관성이 없으므로 인자 분석을 할 필요가 없게 된다.
Kaiser-Meyer-Olkin Test는 변수들의 분산 설명 비율을 이용하여 인자 분석의 적절성을 확인한다. Kaiser-Meyer-Olkin Test에서 계산된 설명 비율이 0.6보다 큰 경우 인자 분석을 수행하게 된다.
## 데이터 적절성 확인
_, p_value = calculate_bartlett_sphericity(X)
_, kmo_measure = calculate_kmo(X)
print('Bartlett’s Test: ', p_value)
print('Kaiser-Meyer-Olkin Test ', kmo_measure)
결과를 보니 해당 데이터는 인자 분석을 하기에 적절한 것으로 판단된다.
(2) 인자 분석 수행
FactorAnalyzer 클래스를 통해 인자 분석을 할 수 있다. 이때 공통 인자수는 n_factors로 지정하고 인자 회전 방법은 rotation을 이용하여 지정할 수 있다.
fa = FactorAnalyzer(n_factors=2, rotation='varimax').fit(X)
인자 적재 행렬은 loadings_ 속성을 통해 알 수 있다.
fa.loadings_ ## 인자 적재 행렬
또한 fit_transform 또는 transform을 이용하여 인자 점수를 알 수 있다.
fa.fit_transform(X) ## 인자 점수 또는 fa.transform(X)
array([[-0.57106763, 1.57415247],
[ 0.50216174, 1.128528 ],
[ 0.50076061, 1.92803565],
[ 0.10220439, 1.62204272],
''' 중략 '''
[-1.3807854 , -0.00566006],
[-2.58934232, -1.21095701],
[-0.16240936, -1.8491313 ],
[-1.15115104, -1.88573026]])
factor_analyzer는 공통성(communalities)과 특정 인자 분산(uniqueness)를 계산할 수 있다. get_communalities 메서드는 공통성을 get_uniquenesses은 특정 인자 분산을 계산하며 변수 개수 만큼의 길이를 갖는 배열을 반환한다.
print('공통성 :', fa.get_communalities())
print('특정 인자 분산 :', fa.get_uniquenesses())
- 참고 자료 -
Introduction to Factor Analysis in Python - https://www.datacamp.com/tutorial/introduction-factor-analysis
'프로그래밍 > 기타 Python 모듈' 카테고리의 다른 글
shapely 모듈에 대해서 알아보자 - 응용편 (0) | 2023.03.30 |
---|---|
shapely 모듈에 대해서 알아보자 - 기본편 (0) | 2023.03.29 |
dateutil 모듈을 이용하여 datetime 객체 다루기 (0) | 2023.03.25 |
[XGBoost] XGBoost의 개별 트리로부터 여러 정보(변수 출현 빈도, 예측) 계산하기(feat. get_boost) (0) | 2023.03.24 |
Pyinstaller 기본 - 이용하여 파이썬(.py) 파일을 실행 파일(.exe)로 만들기 (1) | 2023.03.17 |
댓글