본문 바로가기
프로그래밍/기타 Python 모듈

factor_analyzer 모듈을 이용한 인자 분석

by 부자 꽁냥이 2023. 5. 6.

factor_analyzer는 파이썬에서 인자 분석을 할 수 있게 해주는 모듈이다. 이번 포스팅에서는 factor_analyzer를 이용한 인자 분석에 필요한 인자 적재 행렬과 인자 점수 등 인자 분석에 필요한 값들을 얻는 방법을 알아본다.

 

인자 분석에 대한 개념은 아래 포스팅을 참고하기 바란다.

 

40. 인자 분석(Factor Analysis)에 대해서 알아보자 with Python

 

40. 인자 분석(Factor Analysis)에 대해서 알아보자 with Python

이번 포스팅에서는 다변량 분석 기법의 하나인 인자 분석(Factor Analysis)에 대한 개념과 파이썬으로 구현하는 방법에 대해서 알아보고자 한다. - 목차 - 1. 인자 분석(Factor Analysis)이란? 2. 인자 분석(

zephyrus1111.tistory.com


   factor_analyzer

1) 설치

먼저 pip 명령어를 이용하여 factor_analyzer를 설치한다.

 

pip install factor_analyzer

2) 인자 분석

여기서는 1888년 스위스의 프랑스어권 지방의 사회 경제적 지표 데이터에 대해서 인자 분석을 해보고자 한다. 

 

swiss.xlsx
0.01MB

 

데이터 엑셀 파일을 불러오고 나서 필요한 칼럼을 추출하고 표준화를 시켜준다. 

 

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


댓글


맨 위로