Kurs
Faktör Analizi (FA), gözlemlenen değişkenler kümesinden etkili temel faktörleri veya örtük değişkenleri aramak için kullanılan keşifsel bir veri analizi yöntemidir. Değişken sayısını azaltarak verilerin yorumlanmasına yardımcı olur. Tüm değişkenlerden maksimum ortak varyansı çıkarır ve bunları ortak bir skora dönüştürür.
Faktör analizi pazar araştırması, reklamcılık, psikoloji, finans ve yöneylem araştırmalarında yaygın olarak kullanılır. Pazar araştırmacıları, fiyat duyarlı müşterileri belirlemek, tüketici tercihini etkileyen marka özelliklerini saptamak ve dağıtım kanalı için kanal seçimi kriterlerini anlamak için faktör analizinden yararlanır.
Faktör Analizi
Faktör analizi doğrusal bir istatistiksel modeldir. Gözlemlenen değişkenler arasındaki varyansı açıklamak ve gözlemlenen değişkenler kümesini faktör adı verilen gözlemlenmeyen değişkenlere yoğunlaştırmak için kullanılır. Gözlemlenen değişkenler, faktörler ve hata terimlerinin doğrusal bir birleşimi olarak modellenir (Kaynak). Faktör veya örtük değişken, ortak yanıt kalıplarına sahip birden çok gözlemlenen değişkenle ilişkilidir. Her faktör, gözlemlenen değişkenlerde belirli bir miktar varyansı açıklar. Değişken sayısını azaltarak verilerin yorumlanmasına yardımcı olur.
Faktör analizi, X1, X2,……, Xl gibi bir dizi ilgi çekici değişkenin, daha küçük sayıda gözlemlenmeyen faktörle F1, F2,……, Fk doğrusal olarak ilişkili olup olmadığını araştırma yöntemidir.
Kaynak: Bu görsel, faktör analizi notlarında bulduğum bir görsel baz alınarak yeniden oluşturulmuştur. Görsel, faktör analizine genel bir bakış sunar.
Varsayımlar:
- Verilerde aykırı değer bulunmamalıdır.
- Örneklem büyüklüğü, faktör sayısından büyük olmalıdır.
- Mükemmel çoklu doğrusal bağlantı olmamalıdır.
- Değişkenler arasında homoskedastisite olmamalıdır.
Faktör Analizi Türleri
- Keşfedici Faktör Analizi: Sosyal ve yönetim araştırmacıları arasında en popüler faktör analizi yaklaşımıdır. Temel varsayımı, herhangi bir gözlemlenen değişkenin herhangi bir faktörle doğrudan ilişkili olabileceğidir.
- Doğrulayıcı Faktör Analizi (CFA): Temel varsayımı, her faktörün belirli bir gözlemlenen değişkenler kümesiyle ilişkili olduğudur. CFA, temel varsayımlar doğrultusunda bekleneni doğrular.
Faktör Analizi Nasıl Çalışır?
Faktör analizinin birincil amacı, gözlemlenen değişkenlerin sayısını azaltmak ve gözlemlenmeyen değişkenleri bulmaktır. Bu gözlemlenmeyen değişkenler, pazar araştırmacısının anketten sonuç çıkarmasına yardımcı olur. Gözlemlenen değişkenlerin gözlemlenmeyen değişkenlere dönüştürülmesi iki adımda gerçekleştirilebilir:
- Faktör Çıkarımı: Bu adımda, ana bileşenler analizi ve ortak faktör analizi gibi varyans paylaştırma yöntemleri kullanılarak çıkarılacak faktör sayısı ve çıkarım yaklaşımı seçilir.
- Faktör Rotasyonu: Bu adımda, rotasyon faktörleri ilişkisiz (uncorrelated) hale getirmeye çalışır — bu adımın ana hedefi genel yorumlanabilirliği artırmaktır. Varimax rotasyonu, Quartimax rotasyonu ve Promax rotasyonu gibi birçok rotasyon yöntemi mevcuttur.
Terminoloji
Faktör nedir?
Faktör, çok sayıda gözlemlenen değişken arasındaki ilişkiyi tanımlayan bir örtük değişkendir. Maksimum faktör sayısı, gözlemlenen değişken sayısına eşittir. Her faktör, gözlemlenen değişkenlerde belirli bir varyansı açıklar. En düşük varyansa sahip faktörler elenir. Faktörler, örtük değişken, gizli değişken, gözlemlenmeyen değişken veya varsayımsal değişken olarak da bilinir.
Faktör yükleri nedir?
Faktör yükü, her bir değişkenin altta yatan faktörle ilişkisini gösteren bir matristir. Gözlemlenen değişken ile faktör arasındaki korelasyon katsayısını gösterir. Gözlemlenen değişkenlerce açıklanan varyansı ifade eder.
Özdeğer (Eigenvalue) nedir?
Özdeğerler, toplam varyanstan her bir faktörün açıkladığı varyansı temsil eder. Karakteristik kökler olarak da bilinir.
Komünaliteler (Communalities) nedir?
Komünaliteler, her bir değişken için kareler toplamı yükleridir. Ortak varyansı temsil eder. 0 ile 1 arasında değişir ve 1’e yakın değer daha fazla varyansı ifade eder.
Faktör Rotasyonu nedir?
Rotasyon, faktör analizinin daha iyi yorumlanması için bir araçtır. Rotasyon ortogonal veya oblik olabilir. Yüklerde net bir desenle komünaliteleri yeniden dağıtır.
Faktör Sayısını Seçme
Kaiser ölçütü, daha büyük bir varyans oranı açıklayan faktörün seçileceği analitik bir yaklaşımdır. Özdeğer, faktör sayısını belirlemek için iyi bir ölçüttür. Genellikle, 1’den büyük özdeğer bir özelliğin (faktörün) seçim ölçütü olarak kabul edilir.
Grafiksel yaklaşım, faktörlerin özdeğerlerinin görsel gösterimine, yani scree plot’a dayanır. Bu scree grafiği, eğrinin dirsek yaptığı yerdeki faktör sayısını belirlememize yardımcı olur.
Faktör Analizi ve Temel Bileşenler Analizi Karşılaştırması
- PCA bileşenleri maksimum varyansı açıklarken, faktör analizi verideki kovaryansı açıklar.
- PCA bileşenleri tamamen ortogonaldir, oysa faktör analizinde faktörlerin ortogonal olması gerekmez.
- PCA bileşeni, gözlemlenen değişkenlerin doğrusal bir birleşimidir; FA’da ise gözlemlenen değişkenler, gözlemlenmeyen değişkenlerin veya faktörlerin doğrusal birleşimleridir.
- PCA bileşenleri yorumlanamaz. FA’da altta yatan faktörler isimlendirilebilir ve yorumlanabilir.
- PCA bir tür boyut indirgeme yöntemiyken, faktör analizi bir örtük değişken yöntemidir.
- PCA, faktör analizinin bir türüdür. PCA gözlemsel bir yöntemken FA bir modelleme tekniğidir.
factor_analyzer paketiyle Python’da Faktör Analizi
Gerekli Kütüphaneleri İçe Aktarın
# Import required libraries
import pandas as pd
from sklearn.datasets import load_iris
from factor_analyzer import FactorAnalyzer
import matplotlib.pyplot as plt
Veri Yükleme
BFI (kişilik değerlendirme projesine dayalı veri kümesi) üzerinde, 6 puanlık yanıt ölçeği kullanılarak toplanmış verilerle faktör analizi yapalım: 1 Çok Yanlış, 2 Orta Derecede Yanlış, 3 Biraz Yanlış, 4 Biraz Doğru, 5 Orta Derecede Doğru ve 6 Çok Doğru. Bu veri setini şu bağlantıdan da indirebilirsiniz: https://vincentarelbundock.github.io/Rdatasets/datasets.html
df= pd.read_csv("bfi.csv")
Veriyi Ön İşleme
df.columns
Index(['A1', 'A2', 'A3', 'A4', 'A5', 'C1', 'C2', 'C3', 'C4', 'C5', 'E1', 'E2',
'E3', 'E4', 'E5', 'N1', 'N2', 'N3', 'N4', 'N5', 'O1', 'O2', 'O3', 'O4',
'O5', 'gender', 'education', 'age'],
dtype='object')
# Dropping unnecessary columns
df.drop(['gender', 'education', 'age'],axis=1,inplace=True)
# Dropping missing values rows
df.dropna(inplace=True)
df.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 2436 entries, 0 to 2799
Data columns (total 25 columns):
A1 2436 non-null float64
A2 2436 non-null float64
A3 2436 non-null float64
A4 2436 non-null float64
A5 2436 non-null float64
C1 2436 non-null float64
C2 2436 non-null float64
C3 2436 non-null float64
C4 2436 non-null float64
C5 2436 non-null float64
E1 2436 non-null float64
E2 2436 non-null float64
E3 2436 non-null float64
E4 2436 non-null float64
E5 2436 non-null float64
N1 2436 non-null float64
N2 2436 non-null float64
N3 2436 non-null float64
N4 2436 non-null float64
N5 2436 non-null float64
O1 2436 non-null float64
O2 2436 non-null int64
O3 2436 non-null float64
O4 2436 non-null float64
O5 2436 non-null float64
dtypes: float64(24), int64(1)
memory usage: 494.8 KB
df.head()
| A1 | A2 | A3 | A4 | A5 | C1 | C2 | C3 | C4 | C5 | ... | N1 | N2 | N3 | N4 | N5 | O1 | O2 | O3 | O4 | O5 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 2.0 | 4.0 | 3.0 | 4.0 | 4.0 | 2.0 | 3.0 | 3.0 | 4.0 | 4.0 | ... | 3.0 | 4.0 | 2.0 | 2.0 | 3.0 | 3.0 | 6 | 3.0 | 4.0 | 3.0 |
| 1 | 2.0 | 4.0 | 5.0 | 2.0 | 5.0 | 5.0 | 4.0 | 4.0 | 3.0 | 4.0 | ... | 3.0 | 3.0 | 3.0 | 5.0 | 5.0 | 4.0 | 2 | 4.0 | 3.0 | 3.0 |
| 2 | 5.0 | 4.0 | 5.0 | 4.0 | 4.0 | 4.0 | 5.0 | 4.0 | 2.0 | 5.0 | ... | 4.0 | 5.0 | 4.0 | 2.0 | 3.0 | 4.0 | 2 | 5.0 | 5.0 | 2.0 |
| 3 | 4.0 | 4.0 | 6.0 | 5.0 | 5.0 | 4.0 | 4.0 | 3.0 | 5.0 | 5.0 | ... | 2.0 | 5.0 | 2.0 | 4.0 | 1.0 | 3.0 | 3 | 4.0 | 3.0 | 5.0 |
| 4 | 2.0 | 3.0 | 3.0 | 4.0 | 5.0 | 4.0 | 4.0 | 5.0 | 3.0 | 2.0 | ... | 2.0 | 3.0 | 4.0 | 4.0 | 3.0 | 3.0 | 3 | 4.0 | 3.0 | 3.0 |
5 satır × 25 sütun
Yeterlilik Testi
Faktör analizi yapmadan önce veri kümenizin “faktörlenebilirliğini” değerlendirmeniz gerekir. Faktörlenebilirlik, "veri kümesinde faktörler bulunabilir mi?" anlamına gelir. Faktörlenebilirliği veya örneklem yeterliliğini kontrol etmek için iki yöntem vardır:
- Bartlett Testi
- Kaiser-Meyer-Olkin Testi
Kürelik için Bartlett testi, gözlenen korelasyon matrisini birim matrisle karşılaştırarak gözlemlenen değişkenlerin birbirleriyle korelasyonlu olup olmadığını kontrol eder. Test istatistiksel olarak anlamsız çıkarsa faktör analizi uygulamamalısınız.
from factor_analyzer.factor_analyzer import calculate_bartlett_sphericity
chi_square_value,p_value=calculate_bartlett_sphericity(df)
chi_square_value, p_value
(18146.065577234807, 0.0)
Bu Bartlett testinde p-değeri 0’dır. Test istatistiksel olarak anlamlı çıkmış, bu da gözlenen korelasyon matrisinin birim matris olmadığını göstermektedir.
Kaiser-Meyer-Olkin (KMO) Testi, verinin faktör analizine uygunluğunu ölçer. Her bir gözlemlenen değişken ve tüm model için yeterliliği belirler. KMO, tüm gözlemlenen değişkenler arasındaki varyansın oranını tahmin eder. Daha düşük oran, faktör analizi için daha uygundur. KMO değerleri 0 ile 1 arasında değişir. 0,6’dan küçük KMO değeri yetersiz kabul edilir.
from factor_analyzer.factor_analyzer import calculate_kmo
kmo_all,kmo_model=calculate_kmo(df)
kmo_model
0.8486452309468382
Verilerimiz için genel KMO 0,84’tür ve bu mükemmeldir. Bu değer, planladığınız faktör analizine devam edebileceğinizi göstermektedir.
Faktör Sayısını Seçme
Faktör sayısını seçmek için Kaiser ölçütünü ve scree grafiğini kullanabilirsiniz. Her ikisi de özdeğerlere dayanır.
# Create factor analysis object and perform factor analysis
fa = FactorAnalyzer()
fa.analyze(df, 25, rotation=None)
# Check Eigenvalues
ev, v = fa.get_eigenvalues()
ev
| Original_Eigenvalues | |
|---|---|
| 0 | 5.134311 |
| 1 | 2.751887 |
| 2 | 2.142702 |
| 3 | 1.852328 |
| 4 | 1.548163 |
| 5 | 1.073582 |
| 6 | 0.839539 |
| 7 | 0.799206 |
| 8 | 0.718989 |
| 9 | 0.688089 |
| 10 | 0.676373 |
| 11 | 0.651800 |
| 12 | 0.623253 |
| 13 | 0.596563 |
| 14 | 0.563091 |
| 15 | 0.543305 |
| 16 | 0.514518 |
| 17 | 0.494503 |
| 18 | 0.482640 |
| 19 | 0.448921 |
| 20 | 0.423366 |
| 21 | 0.400671 |
| 22 | 0.387804 |
| 23 | 0.381857 |
| 24 | 0.262539 |
Burada yalnızca 6 faktör için özdeğerlerin birden büyük olduğunu görebilirsiniz. Bu, yalnızca 6 faktörü (veya gözlemlenmeyen değişkeni) seçmemiz gerektiği anlamına gelir.
# Create scree plot using matplotlib
plt.scatter(range(1,df.shape[1]+1),ev)
plt.plot(range(1,df.shape[1]+1),ev)
plt.title('Scree Plot')
plt.xlabel('Factors')
plt.ylabel('Eigenvalue')
plt.grid()
plt.show()
Scree grafiği yöntemi, her faktör ve özdeğeri için bir doğru çizer. Birden büyük özdeğer sayısı, faktör sayısı olarak kabul edilir.
Burada yalnızca 6 faktör için özdeğerlerin birden büyük olduğunu görebilirsiniz. Bu, yalnızca 6 faktörü (veya gözlemlenmeyen değişkeni) seçmemiz gerektiği anlamına gelir.
Faktör Analizi Uygulama
# Create factor analysis object and perform factor analysis
fa = FactorAnalyzer()
fa.analyze(df, 6, rotation="varimax")
fa.loadings
| Factor1 | Factor2 | Factor3 | Factor4 | Factor5 | Factor6 | |
|---|---|---|---|---|---|---|
| A1 | 0.040783 | 0.095220 | 0.048734 | -0.113057 | -0.530987 | 0.161216 |
| A2 | 0.235538 | 0.033131 | 0.133714 | 0.063734 | 0.661141 | -0.006244 |
| A3 | 0.343008 | -0.009621 | 0.121353 | 0.033990 | 0.605933 | 0.160106 |
| A4 | 0.219717 | -0.081518 | 0.235140 | -0.125338 | 0.404594 | 0.086356 |
| A5 | 0.414458 | -0.149616 | 0.106382 | 0.030977 | 0.469698 | 0.236519 |
| C1 | 0.077248 | -0.004358 | 0.554582 | 0.190124 | 0.007511 | 0.095035 |
| C2 | 0.038370 | 0.068330 | 0.674545 | 0.087593 | 0.057055 | 0.152775 |
| C3 | 0.031867 | -0.039994 | 0.551164 | -0.011338 | 0.101282 | 0.008996 |
| C4 | -0.066241 | 0.216283 | -0.638475 | -0.143846 | -0.102617 | 0.318359 |
| C5 | -0.180812 | 0.284187 | -0.544838 | 0.025837 | -0.059955 | 0.132423 |
| E1 | -0.590451 | 0.022280 | 0.053915 | -0.071205 | -0.130851 | 0.156583 |
| E2 | -0.684578 | 0.233624 | -0.088497 | -0.045561 | -0.116716 | 0.115065 |
| E3 | 0.556774 | -0.000895 | 0.103390 | 0.241180 | 0.179396 | 0.267291 |
| E4 | 0.658395 | -0.136788 | 0.113798 | -0.107808 | 0.241143 | 0.158513 |
| E5 | 0.507535 | 0.034490 | 0.309813 | 0.200821 | 0.078804 | 0.008747 |
| N1 | 0.068011 | 0.805806 | -0.051264 | -0.074977 | -0.174849 | -0.096266 |
| N2 | 0.022958 | 0.789832 | -0.037477 | 0.006726 | -0.141134 | -0.139823 |
| N3 | -0.065687 | 0.725081 | -0.059039 | -0.010664 | -0.019184 | 0.062495 |
| N4 | -0.345072 | 0.578319 | -0.162174 | 0.062916 | 0.000403 | 0.147551 |
| N5 | -0.161675 | 0.523097 | -0.025305 | -0.161892 | 0.090125 | 0.120049 |
| O1 | 0.225339 | -0.020004 | 0.133201 | 0.479477 | 0.005178 | 0.218690 |
| O2 | -0.001982 | 0.156230 | -0.086047 | -0.496640 | 0.043989 | 0.134693 |
| O3 | 0.325954 | 0.011851 | 0.093880 | 0.566128 | 0.076642 | 0.210777 |
| O4 | -0.177746 | 0.207281 | -0.005671 | 0.349227 | 0.133656 | 0.178068 |
| O5 | -0.014221 | 0.063234 | -0.047059 | -0.576743 | -0.057561 | 0.135936 |
- Faktör 1, E1,E2,E3,E4 ve E5 için yüksek faktör yüklerine sahiptir (Dışadönüklük)
- Faktör 2, N1,N2,N3,N4 ve N5 için yüksek faktör yüklerine sahiptir (Nevrotiklik)
- Faktör 3, C1,C2,C3,C4 ve C5 için yüksek faktör yüklerine sahiptir (Sorumluluk)
- Faktör 4, O1,O2,O3,O4 ve O5 için yüksek faktör yüklerine sahiptir (Açıklık)
- Faktör 5, A1,A2,A3,A4 ve A5 için yüksek faktör yüklerine sahiptir (Uyumluluk)
- Faktör 6, hiçbir değişkende yüksek yüklemelere sahip değildir ve kolayca yorumlanamaz. Yalnızca beş faktör almak daha iyidir.
Beş faktör için faktör analizi yapalım.
# Create factor analysis object and perform factor analysis using 5 factors
fa = FactorAnalyzer()
fa.analyze(df, 5, rotation="varimax")
fa.loadings
| Factor1 | Factor2 | Factor3 | Factor4 | Factor5 | |
|---|---|---|---|---|---|
| A1 | 0.040465 | 0.111126 | 0.022798 | -0.077931 | -0.428166 |
| A2 | 0.213716 | 0.029588 | 0.139037 | 0.062139 | 0.626946 |
| A3 | 0.317848 | 0.009357 | 0.109331 | 0.056196 | 0.650743 |
| A4 | 0.204566 | -0.066476 | 0.230584 | -0.112700 | 0.435624 |
| A5 | 0.393034 | -0.122113 | 0.087869 | 0.066708 | 0.537087 |
| C1 | 0.070184 | 0.010416 | 0.545824 | 0.209584 | 0.038878 |
| C2 | 0.033270 | 0.089574 | 0.648731 | 0.115434 | 0.102782 |
| C3 | 0.023907 | -0.030855 | 0.557036 | -0.005183 | 0.111578 |
| C4 | -0.064984 | 0.240410 | -0.633806 | -0.107535 | -0.037498 |
| C5 | -0.176395 | 0.290318 | -0.562467 | 0.036822 | -0.047525 |
| E1 | -0.574835 | 0.042819 | 0.033144 | -0.058795 | -0.104813 |
| E2 | -0.678731 | 0.244743 | -0.102483 | -0.042010 | -0.112517 |
| E3 | 0.536816 | 0.024180 | 0.083010 | 0.280877 | 0.257906 |
| E4 | 0.646833 | -0.115614 | 0.102023 | -0.073422 | 0.306101 |
| E5 | 0.504069 | 0.036145 | 0.312899 | 0.213739 | 0.090354 |
| N1 | 0.078923 | 0.786807 | -0.045997 | -0.084704 | -0.216363 |
| N2 | 0.027301 | 0.754109 | -0.030568 | -0.010304 | -0.193744 |
| N3 | -0.061430 | 0.731721 | -0.067084 | -0.004217 | -0.027712 |
| N4 | -0.345388 | 0.590602 | -0.178902 | 0.075225 | 0.005886 |
| N5 | -0.161291 | 0.537858 | -0.037309 | -0.149769 | 0.100931 |
| O1 | 0.213005 | -0.002224 | 0.115080 | 0.504907 | 0.061550 |
| O2 | 0.004560 | 0.175788 | -0.099729 | -0.468925 | 0.081809 |
| O3 | 0.310956 | 0.026736 | 0.076873 | 0.596007 | 0.126889 |
| O4 | -0.191196 | 0.220582 | -0.021906 | 0.369012 | 0.155475 |
| O5 | -0.005347 | 0.085401 | -0.062730 | -0.533778 | -0.010384 |
# Get variance of each factors
fa.get_factor_variance()
| Factor1 | Factor2 | Factor3 | Factor4 | Factor5 | |
|---|---|---|---|---|---|
| SS Loadings | 2.473090 | 2.709633 | 2.041106 | 1.522153 | 1.844498 |
| Proportion Var | 0.098924 | 0.108385 | 0.081644 | 0.060886 | 0.073780 |
| Cumulative Var | 0.098924 | 0.207309 | 0.288953 | 0.349839 | 0.423619 |
Toplamda 5 faktör tarafından açıklanan kümülatif varyans %42’dir.
Faktör Analizinin Artıları ve Eksileri
Faktör analizi, büyük veri kümelerini keşfeder ve birbiriyle bağlantılı ilişkileri bulur. Gözlemlenen değişkenleri birkaç gözlemlenmeyen değişkene indirger veya birbiriyle ilişkili değişken gruplarını tanımlar; bu da pazar araştırmacılarının pazar durumlarını sadeleştirmesine ve tüketici zevki, tercihi ve kültürel etki arasındaki gizli ilişkileri bulmasına yardımcı olur. Ayrıca gelecekteki anketler için anket formunun iyileştirilmesine katkı sağlar. Faktörler, verilerin daha doğal biçimde yorumlanmasını sağlar.
Faktör analizi sonuçları tartışmalıdır. Yorumları tartışmaya açıktır çünkü aynı veri faktörlerinden birden fazla yorum yapılabilir. Faktörlerin belirlenmesi ve adlandırılması, alan bilgisi gerektirir.
Sonuç
Tebrikler, bu eğitimin sonuna geldiniz!
Bu eğitimde faktör analizinin ne olduğunu, faktör analizi türlerini, faktör analizinin nasıl çalıştığını, temel faktör analizi terminolojisini, faktör sayısının seçimini, temel bileşenler analizi ile faktör analizinin karşılaştırmasını, Python’da FactorAnalyzer paketiyle uygulamayı ve faktör analizinin artılarını/eksilerini öğrendiniz.
Geri bildirim veya sorularınızı duymayı çok isterim. Yorum bırakarak sorunuzu iletebilirsiniz; yanıtlamak için elimden gelenin en iyisini yapacağım.
Python’da faktörler hakkında daha fazla bilgi edinmek isterseniz DataCamp’in Python’da Denetimsiz Öğrenme kursunu inceleyin.
