250x250
Link
๋‚˜์˜ GitHub Contribution ๊ทธ๋ž˜ํ”„
Loading data ...
Notice
Recent Posts
Recent Comments
๊ด€๋ฆฌ ๋ฉ”๋‰ด

Data Science LAB

[Python] ํƒ์ƒ‰์  ์š”์ธ๋ถ„์„ (FA) ๋ณธ๋ฌธ

๐Ÿ›  Machine Learning/๊ธฐ์ดˆ ํ†ต๊ณ„

[Python] ํƒ์ƒ‰์  ์š”์ธ๋ถ„์„ (FA)

ใ…… ใ…œ ใ…” ใ…‡ 2022. 9. 19. 03:29
728x90

ํƒ์ƒ‰์  ์š”์ธ๋ถ„์„

- ์š”์ธ๋ถ„์„ (FA)์€ ๊ด€์ฐฐ๋œ ๋ณ€์ˆ˜ ์ง‘ํ•ฉ์—์„œ ๊ฐ€์žฅ ์˜ํ–ฅ๋ ฅ ์žˆ๋Š” ๊ธฐ๋ณธ ์š”์ธ ๋˜๋Š” ์ž ์žฌ ๋ณ€์ˆ˜๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ํƒ์ƒ‰์  ๋ฐ์ดํ„ฐ ๋ถ„์„ ๋ฐฉ๋ฒ•์ด๋‹ค .
- ๋ณ€์ˆ˜ ์ˆ˜๋ฅผ ์ค„์—ฌ ๋ฐ์ดํ„ฐ ํ•ด์„์— ๋„์›€์„ ์ค€๋‹ค.
- ๋ชจ๋“  ๋ณ€์ˆ˜์—์„œ ์ตœ๋Œ€ ๊ณต๋ถ„์‚ฐ์„ ์ถ”์ถœํ•˜์—ฌ ๊ณตํ†ต ์ ์ˆ˜์— ๋„ฃ๋Š”๋‹ค.
- ์š”์ธ ๋ถ„์„์€ ์‹œ์žฅ ์กฐ์‚ฌ, ๊ด‘๊ณ , ์‹ฌ๋ฆฌํ•™, ๊ธˆ์œต ๋ฐ ์šด์˜ ์—ฐ๊ตฌ์— ๋„๋ฆฌ ์‚ฌ์šฉ๋จ

 

 

 

ํƒ์ƒ‰์  ์š”์ธ ๋ถ„์„ ๋ฐฉ๋ฒ•

1. ๋ณ€์ˆ˜๊ฐ„์˜ ์ƒ๊ด€ํ–‰๋ ฌ๋กœ๋ถ€ํ„ฐ ๊ณตํ†ต ์š”์ธ ๋„์ถœ

2. ๊ณตํ†ต ์š”์ธ์„ ์ด์šฉํ•ด ๋ณ€์ˆ˜๊ฐ„์˜ ์ƒ๊ด€๊ด€๊ณ„ ์„ค๋ช…

3. ์š”์ธ ๋ถ€ํ•˜๋Ÿ‰(factor loading)์ด ์ ˆ๋Œ“๊ฐ’ 0.3 ์ด์ƒ์ด๋ฉด ์œ ์˜ํ•˜๋‹ค๊ณ  ํŒ๋‹จ

 

 

 

ํƒ์ƒ‰์  ์š”์ธ ๋ถ„์„์˜ ๋ชฉ์ 

1. ์ž๋ฃŒ ์š”์•ฝ : ๋ณ€์ˆ˜๋“ค์„ ๋ช‡๊ฐœ์˜ ๊ณตํ†ต๋œ ๋ณ€์ธ์œผ๋กœ ๋ฌถ์Œ

2. ์ถœ์ •๋„๊ตฌ ํƒ€๋‹น์„ฑ ๊ฒ€์ • : ๋ณ€์ธ๋“ค์ด ๋™์ผํ•œ ์š”์ธ์œผ๋กœ ๋ฌถ์ด๋Š”์ง€๋ฅผ ํ™•์ธ

3. ๋ณ€์ธ ๊ตฌ์กฐ ํŒŒ์•… : ๋ณ€์ˆ˜๋“ค์˜ ์ƒํ˜ธ ๊ด€๊ณ„๋ฅผ ํŒŒ์•…

4. ๋ถˆํ•„์š”ํ•œ ๋ณ€์ธ ์ œ๊ฑฐ : ์ค‘์š”๋„๋‚˜ ์„ค๋ช…๋ ฅ์ด ๋‚ฎ์€ ๋ณ€์ˆ˜๋ฅผ ์ œ๊ฑฐ

5. ํšŒ๊ท€๋ถ„์„์ด๋‚˜ ํŒ๋ณ„๋ถ„์„์˜ ์„ค๋ช…๋ณ€์ˆ˜ ์„ ํƒ

 

 

PCA(์ฃผ์„ฑ๋ถ„๋ถ„์„)๊ณผ์˜ ์ฐจ์ด์ 

- PCA ์„ฑ๋ถ„์€ ์ตœ๋Œ€ ๋ถ„์‚ฐ๋Ÿ‰์„ ์„ค๋ช…, ์š”์ธ๋ถ„์„์€ ๋ฐ์ดํ„ฐ์˜ ๊ณต๋ถ„์‚ฐ ์„ค๋ช…

- PCA ๊ตฌ์„ฑ ์š”์†Œ๋Š” ์„œ๋กœ ์™„์ „ํžˆ ์ง๊ตํ•˜์ง€๋งŒ ์š”์ธ ๋ถ„์„์—์„œ๋Š” ๋ฐ˜๋“œ์‹œ ์ง๊ตํ•˜์ง„ ์•Š์Œ

- PCA ์„ฑ๋ถ„์€ ๊ด€์ฐฐ๋œ ๋ณ€์ˆ˜์˜ ์„ ํ˜• ์กฐํ•ฉ์ด์ง€๋งŒ, ์š”์ธ๋ถ„์„์—์„œ ๊ด€์ฐฐ๋œ ๋ณ€์ˆ˜๋Š” ๊ด€์ฐฐ๋˜์ง€ ์•Š์€ ๋ณ€์ˆ˜ ๋˜๋Š” ์š”์ธ์˜ ์„ ํ˜• ์กฐํ•ฉ

- PCA ๊ตฌ์„ฑ ์š”์†Œ๋Š” ํ•ด์„ํ•  ์ˆ˜ ์—†์ง€๋งŒ ์š”์ธ๋ถ„์„์˜ ๊ธฐ๋ณธ ์š”์†Œ๋Š” ๋ผ๋ฒจ๋ง ๋ฐ ํ•ด์„ ๊ฐ€๋Šฅ

- PCA๋Š” ์ผ์ข…์˜ ์ฐจ์› ๊ฐ์†Œ ๋ฐฉ๋ฒ•์ด์ง€๋งŒ ์š”์ธ๋ถ„์„์€ ์ž ์žฌ ๋ณ€์ˆ˜ ๋ฐฉ๋ฒ•

- PCA๋Š” ๊ด€์ฐฐ์ด์ง€๋งŒ FA๋Š” ๋ชจ๋ธ๋ง ๊ธฐ์ˆ 

 

 

 

ํƒ์ƒ‰์  ์š”์ธ ๋ถ„์„ ์‹ค์Šต

- ๋ถ„์„์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์ „์— ๋ฐ์ดํ„ฐ์…‹์˜ ์š”์ธ์„ฑ์„ ํ‰๊ฐ€ํ•ด์•ผํ•œ๋‹ค.

1.  Bartlett ๊ฒ€์ •

  : p-value๊ฐ€ 0.05๋ณด๋‹ค ์ž‘์œผ๋ฉด ํƒ์ƒ‰์  ์š”์ธ๋ถ„์„์— ์ ํ•ฉํ•œ ๋ฐ์ดํ„ฐ๋ผ๊ณ  ํŒ๋‹จํ•œ๋‹ค.

#!pip install factor-analyzer
from factor_analyzer.factor_analyzer import calculate_bartlett_sphericity 

ana = df3.drop(columns = 'group')
chi, p = calculate_bartlett_sphericity(ana)
p

# 0.12271947500271495

 

 

 

 

 

2. Kaiser-Meyer-Olkin(KMO) ๊ฒ€์ •

  • ๊ด€์ธก๋œ ๊ฐ ๋ณ€์ˆ˜์™€ ์ „์ฒด ๋ชจ๋ธ์— ๋Œ€ํ•œ ์ ์ ˆ์„ฑ์„ ๊ฒฐ์ •
  • KMO๋Š” ๊ด€์ธก๋œ ๋ชจ๋“  ๋ณ€์ˆ˜ ๊ฐ„์˜ ๋ถ„์‚ฐ ๋น„์œจ์„ ์ถ”์ •
  • Bartlett๊ณผ ๋‹ฌ๋ฆฌ p๊ฐ’์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ํŒ๋‹จ์˜ ๊ธฐ์ค€์ด ๋”ฐ๋กœ ์žˆ์Œ
  • 0.6 ๋ฏธ๋งŒ์˜ KMO ๊ฐ’์€ ๋ถ€์ ์ ˆํ•˜๋‹ค๊ณ  ํŒ๋‹จํ•˜๋ฉฐ 0.8 ์ด์ƒ์ด๋ฉด ์šฐ์ˆ˜ํ•˜๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ์Œ
  • KMO test๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ณ€์ˆ˜๊ฐ€ ์ตœ์†Œ 3๊ฐœ ์ด์ƒ
from factor_analyzer.factor_analyzer import calculate_kmo
kmo_all, kmo_model = calculate_kmo(ana)
kmo_model

# 0.4906789809649262

 

 

 

3. ์š”์ธ ์ˆ˜ ์„ ํƒ

from factor_analyzer import FactorAnalyzer
fa = FactorAnalyzer(n_factors = len(ana.columns), rotation = None)
fa.fit(ana)

# Eigen๊ฐ’ ์ฒดํฌ
ev, v = fa.get_eigenvalues()
ev

plt.scatter(range(1, ana.shape[1]+1), ev)
plt.plot(range(1, ana.shape[1] + 1), ev)
plt.title('Scree Plot')
plt.xlabel('Factors')
plt.ylabel('Eigenvalue')
plt.grid()
plt.show()

 

 

- Eigen๊ฐ’์ด 1 ์ด์ƒ์ด๊ฑฐ๋‚˜ ๊ทธ๋ž˜ํ”„ ๊ธฐ์šธ๊ธฐ๊ฐ€ ์™„๋งŒํ•ด์ง€๊ธฐ ์ „๊นŒ์ง€ ๋‚˜๋ˆ„์–ด์•ผ ๋ฐ์ดํ„ฐ ๊ฒฐํ•จ์„ ์ตœ์†Œํ™”ํ•จ

- 10 ์—์„œ Eigenvalue๊ฐ€ 1์ด ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธ

 

 

 

4. ํƒ์ƒ‰์  ์š”์ธ๋ถ„์„ ์‹ค์‹œ

fa = FactorAnalyzer(n_factors = 10, rotation = 'varimax')
fa.fit(ana)

efa_result = pd.DataFrame(fa.loadings_, index = ana.columns)
efa_result

 

 

 

- heatmap์œผ๋กœ ์‹œ๊ฐํ™”

plt.figure(figsize = (6,10))
sns.heatmap(efa_result, cmap = 'Blues', annot=True, fmt='.2f')

 

 

728x90
Comments