Weiter zum Inhalt

Einführung in die Faktorenanalyse in Python

In diesem Tutorial lernst du die Grundlagen der Faktorenanalyse und wie du sie in Python umsetzt.
Aktualisiert 18. Sept. 2026  · 10 Min. lesen

Mit KI erkunden

ChatGPTClaudePerplexity

Die Faktorenanalyse (FA) ist ein exploratives Verfahren der Datenanalyse, mit dem einflussreiche zugrunde liegende Faktoren bzw. latente Variablen aus einer Menge beobachteter Variablen identifiziert werden. Sie unterstützt die Dateninterpretation, indem sie die Anzahl der Variablen reduziert. Dabei wird die maximale gemeinsame Varianz aus allen Variablen extrahiert und in einem gemeinsamen Score zusammengeführt.

Faktorenanalyse wird breit in Marktforschung, Werbung, Psychologie, Finanzen und Operations Research eingesetzt. Marktforscher nutzen sie, um preissensible Kundinnen und Kunden zu identifizieren, Markenmerkmale zu erkennen, die die Wahl beeinflussen, und die Kriterien der Kanalwahl für den Vertrieb besser zu verstehen.

Faktorenanalyse

Die Faktorenanalyse ist ein lineares statistisches Modell. Sie erklärt die Varianz unter beobachteten Variablen und verdichtet sie zu unbeobachteten Variablen, den sogenannten Faktoren. Beobachtete Variablen werden als lineare Kombination aus Faktoren und Fehlert ermen modelliert (Quelle). Ein Faktor bzw. eine latente Variable ist mit mehreren beobachteten Variablen verknüpft, die ähnliche Antwortmuster aufweisen. Jeder Faktor erklärt einen bestimmten Anteil der Varianz der beobachteten Variablen. Er unterstützt die Interpretation, indem er die Anzahl der Variablen reduziert.

Die Faktorenanalyse prüft, ob mehrere interessierende Variablen X1, X2, …, Xl linear mit einer kleineren Zahl unbeobachteter Faktoren F1, F2, …, Fk zusammenhängen.

Quelle: Diese Abbildung wurde nach einer Grafik aus Notizen zur Faktorenanalyse nachgestellt. Sie vermittelt einen Gesamtüberblick über die Faktorenanalyse.

Annahmen:

  1. Es gibt keine Ausreißer in den Daten.
  2. Die Stichprobengröße sollte größer als die Anzahl der Faktoren sein.
  3. Keine perfekte Multikollinearität.
  4. Keine Homoskedastizität zwischen den Variablen.

Arten der Faktorenanalyse

  • Explorative Faktorenanalyse (EFA): Der gängigste Ansatz in den Sozial- und Wirtschaftswissenschaften. Grundannahme: Jede beobachtete Variable kann potenziell mit jedem Faktor zusammenhängen.
  • Konfirmatorische Faktorenanalyse (CFA): Grundannahme: Jeder Faktor ist einem bestimmten Set beobachteter Variablen zugeordnet. CFA prüft, ob das erwartete Modell zu den Daten passt.

Wie funktioniert die Faktorenanalyse?

Ziel der Faktorenanalyse ist es, die Anzahl beobachteter Variablen zu reduzieren und unbeobachtete Variablen zu finden. Diese latenten Variablen helfen Marktforscherinnen und -forschern, Umfragen zu interpretieren. Die Umwandlung beobachteter in unbeobachtete Variablen erfolgt in zwei Schritten:

  • Faktorextraktion: In diesem Schritt werden Anzahl der Faktoren und das Extraktionsverfahren anhand von Varianzzerlegungsmethoden wie Hauptkomponentenanalyse und gemeinsamer Faktorenanalyse gewählt.
  • Faktorenrotation: In diesem Schritt werden die Faktoren rotiert, um unkorrelierte bzw. klarere Faktoren zu erhalten — Ziel ist eine bessere Interpretierbarkeit. Häufige Rotationsmethoden sind z. B. Varimax, Quartimax und Promax.

Begriffe

Was ist ein Faktor?

Ein Faktor ist eine latente Variable, die die Zusammenhänge zwischen mehreren beobachteten Variablen beschreibt. Die maximale Anzahl an Faktoren entspricht der Anzahl der beobachteten Variablen. Jeder Faktor erklärt einen Teil der Varianz der beobachteten Variablen. Faktoren mit sehr geringer erklärter Varianz werden verworfen. Synonyme sind latente, verborgene, unbeobachtete oder hypothetische Variablen.

Was sind Faktorladungen?

Die Faktorladungsmatrix zeigt die Beziehung jeder Variable zu den zugrunde liegenden Faktoren. Sie enthält die Korrelationskoeffizienten zwischen beobachteter Variable und Faktor und damit auch, wie viel Varianz die beobachteten Variablen erklären.

Was sind Eigenwerte?

Eigenwerte geben an, wie viel Varianz jeder Faktor von der Gesamtvarianz erklärt. Sie heißen auch charakteristische Wurzeln.

Was sind Kommunalitäten?

Kommunalitäten sind die Summe der quadrierten Ladungen je Variable. Sie repräsentieren die gemeinsame Varianz. Der Wert liegt zwischen 0 und 1; je näher an 1, desto mehr Varianz wird erklärt.

Was ist Faktorenrotation?

Rotation ist ein Werkzeug für eine bessere Interpretation. Sie kann orthogonal oder schiefwinklig (oblique) sein und verteilt die Kommunalitäten so um, dass ein klareres Ladungsmuster entsteht.

Auswahl der Faktoranzahl

Das Kaiser-Kriterium ist ein analytischer Ansatz: Faktoren mit einem größeren Anteil erklärter Varianz werden ausgewählt. Der Eigenwert ist ein gutes Kriterium für die Bestimmung der Faktoranzahl. Üblicherweise werden Faktoren mit einem Eigenwert größer als 1 beibehalten.

Der grafische Ansatz basiert auf der Visualisierung der Eigenwerte in einem Scree-Plot. Der Knick in der Kurve zeigt, wie viele Faktoren sinnvoll sind.

Quelle

Faktorenanalyse vs. Principal Component Analysis

  • PCA-Komponenten erklären die maximale Varianz, während die Faktorenanalyse die Kovarianz in den Daten erklärt.
  • PCA-Komponenten sind zueinander orthogonal, die Faktorenanalyse erfordert keine Orthogonalität.
  • PCA-Komponenten sind lineare Kombinationen der beobachteten Variablen; bei FA sind die beobachteten Variablen lineare Kombinationen der latenten Variablen/Faktoren.
  • PCA-Komponenten sind oft schwer zu interpretieren. In der FA sind die zugrunde liegenden Faktoren benennbar und interpretierbar.
  • PCA ist ein Verfahren zur Dimensionsreduktion, die Faktorenanalyse ein Verfahren für latente Variablen.
  • PCA kann als Sonderfall der Faktorenanalyse gesehen werden. PCA ist beobachtungsbasiert, FA ein Modellierungsansatz.

Quelle

Faktorenanalyse in Python mit dem Paket factor_analyzer

Benötigte Bibliotheken importieren

# Import required libraries
import pandas as pd
from sklearn.datasets import load_iris
from factor_analyzer import FactorAnalyzer
import matplotlib.pyplot as plt

Daten laden

Wir führen die Faktorenanalyse am BFI-Datensatz (Persönlichkeitsfragebogen) durch, erhoben auf einer 6-Punkte-Skala: 1 Sehr unzutreffend, 2 Eher unzutreffend, 3 Leicht unzutreffend, 4 Leicht zutreffend, 5 Eher zutreffend, 6 Sehr zutreffend. Du kannst den Datensatz unter folgendem Link herunterladen: https://vincentarelbundock.github.io/Rdatasets/datasets.html

df= pd.read_csv("bfi.csv")

Daten vorverarbeiten

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 Zeilen × 25 Spalten

Eignungstest

Bevor du eine Faktorenanalyse durchführst, solltest du die "Faktorisierbarkeit" deines Datensatzes prüfen. Faktorisierbarkeit bedeutet: Können wir in den Daten Faktoren finden? Zwei gängige Verfahren zur Prüfung der Eignung bzw. Stichprobenadäquanz sind:

  • Bartlett-Test
  • Kaiser-Meyer-Olkin-Test

Der Bartlett-Test auf Sphärizität prüft anhand der Korrelationsmatrix gegen die Einheitsmatrix, ob die beobachteten Variablen überhaupt miteinander korrelieren. Fällt der Test nicht signifikant aus, sollte keine Faktorenanalyse angewandt werden.

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)

Im Bartlett-Test ist der p-Wert 0. Der Test ist hochsignifikant und zeigt, dass die beobachtete Korrelationsmatrix keine Einheitsmatrix ist.

Kaiser-Meyer-Olkin- (KMO-)Test misst die Eignung der Daten für die Faktorenanalyse. Er bewertet die Adäquanz für jede beobachtete Variable und für das Gesamtmodell. KMO schätzt den Anteil der Varianz, der durch gemeinsame Faktoren erklärt wird. Ein höherer Anteil ist günstiger. KMO-Werte liegen zwischen 0 und 1; Werte unter 0,6 gelten als unzureichend.

from factor_analyzer.factor_analyzer import calculate_kmo
kmo_all,kmo_model=calculate_kmo(df)
kmo_model
0.8486452309468382

Der gesamte KMO für unsere Daten beträgt 0,84 — ein ausgezeichneter Wert. Du kannst also mit der geplanten Faktorenanalyse fortfahren.

Anzahl der Faktoren bestimmen

Zur Bestimmung der Faktoranzahl kannst du das Kaiser-Kriterium und den Scree-Plot nutzen. Beide basieren auf Eigenwerten.

# 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

Hier sind nur für 6 Faktoren die Eigenwerte größer als 1. Das heißt, wir sollten 6 Faktoren (latente Variablen) auswählen.

# 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()

Der Scree-Plot zeigt pro Faktor seinen Eigenwert. Die Anzahl der Eigenwerte > 1 wird als Anzahl der Faktoren herangezogen.

Hier sind nur für 6 Faktoren die Eigenwerte größer als 1. Das heißt, wir sollten 6 Faktoren (latente Variablen) auswählen.

Faktorenanalyse durchführen

# 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
  • Faktor 1 hat hohe Ladungen für E1, E2, E3, E4 und E5 (Extraversion).
  • Faktor 2 hat hohe Ladungen für N1, N2, N3, N4 und N5 (Neurotizismus).
  • Faktor 3 hat hohe Ladungen für C1, C2, C3, C4 und C5 (Gewissenhaftigkeit).
  • Faktor 4 hat hohe Ladungen für O1, O2, O3, O4 und O5 (Offenheit).
  • Faktor 5 hat hohe Ladungen für A1, A2, A3, A4 und A5 (Verträglichkeit).
  • Faktor 6 weist keine klar hohen Ladungen auf und ist schwer interpretierbar. Es ist sinnvoll, nur fünf Faktoren zu verwenden.

Lass uns die Faktorenanalyse mit 5 Faktoren durchführen.

# 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

In Summe erklären die 5 Faktoren 42% der Varianz.

Vor- und Nachteile der Faktorenanalyse

Die Faktorenanalyse untersucht große Datensätze und findet verbundene Zusammenhänge. Sie reduziert beobachtete Variablen auf wenige latente Variablen oder identifiziert Gruppen zusammenhängender Variablen. So lassen sich Marktsituationen verdichten und verborgene Beziehungen in Geschmack, Präferenzen und kulturellem Einfluss der Konsumentinnen und Konsumenten aufdecken. Außerdem hilft sie, Fragebögen für künftige Erhebungen zu verbessern. Faktoren erleichtern eine natürliche Interpretation der Daten.

Die Ergebnisse der Faktorenanalyse sind teils umstritten. Interpretationen können variieren, weil sich ein und dieselben Faktoren unterschiedlich deuten lassen. Nach der Identifikation und Benennung der Faktoren ist Domänenwissen gefragt.

Fazit

Glückwunsch, du hast das Ende dieses Tutorials erreicht!

Du hast gelernt, was Faktorenanalyse ist, welche Arten es gibt, wie sie funktioniert, zentrale Begriffe, wie du die Anzahl der Faktoren bestimmst, den Vergleich zwischen Principal Component Analysis und Faktorenanalyse, die Umsetzung in Python mit dem Paket FactorAnalyzer sowie die Vor- und Nachteile der Methode.

Ich freue mich auf Feedback und Fragen. Stell sie gerne in den Kommentaren, und ich gebe mein Bestes, sie zu beantworten.

Wenn du mehr über Faktoren in Python lernen möchtest, schau dir den DataCamp-Kurs Unsupervised Learning in Python an.

Themen
Python
Datenwissenschaft

Python-Kurse

Kurs

Einführung in Python

4 Std.
7M
Lerne in nur vier Stunden die Grundlagen der Datenanalyse mit Python und entdecke beliebte Python-Pakete.
Details anzeigenRight Arrow
Kurs Starten
Mehr anzeigenRight Arrow