Vai al contenuto principale

Introduzione all’analisi fattoriale in Python

In questo tutorial imparerai le basi dell’analisi fattoriale e come implementarla in Python.
Aggiornato 29 set 2026  · 10 min leggi

Scopri con l'IA

ChatGPTClaudePerplexity

L’analisi fattoriale (FA) è un metodo di analisi esplorativa dei dati usato per individuare fattori sottostanti o variabili latenti a partire da un insieme di variabili osservate. Aiuta l’interpretazione dei dati riducendo il numero di variabili. Estrae la massima varianza comune da tutte le variabili e la condensa in un punteggio comune.

L’analisi fattoriale è ampiamente utilizzata in ricerche di mercato, pubblicità, psicologia, finanza e ricerca operativa. I ricercatori di mercato la usano per identificare i clienti sensibili al prezzo, individuare le caratteristiche del brand che influenzano le scelte dei consumatori e comprendere i criteri di selezione dei canali per la distribuzione.

Analisi fattoriale

L’analisi fattoriale è un modello statistico lineare. Viene usata per spiegare la varianza tra le variabili osservate e condensare un insieme di variabili osservate in variabili non osservate chiamate fattori. Le variabili osservate sono modellate come combinazioni lineari di fattori e termini di errore (Fonte). Un fattore o variabile latente è associato a più variabili osservate che presentano schemi di risposta comuni. Ogni fattore spiega una certa quota di varianza nelle variabili osservate. Aiuta l’interpretazione dei dati riducendo il numero di variabili.

L’analisi fattoriale è un metodo per verificare se un certo numero di variabili di interesse X1, X2,……, Xl, sono linearmente collegate a un numero più piccolo di fattori non osservabili F1, F2,……, Fk.

Fonte: questa immagine è stata ricreata da un’immagine trovata in appunti di analisi fattoriale. L’immagine offre una vista completa dell’analisi fattoriale.

Assunzioni:

  1. Non ci sono outlier nei dati.
  2. La dimensione del campione dovrebbe essere maggiore del numero di fattori.
  3. Non deve esserci multicollinearità perfetta.
  4. Non dovrebbe esserci omoschedasticità tra le variabili.

Tipi di analisi fattoriale

  • Analisi fattoriale esplorativa: è l’approccio più usato tra i ricercatori sociali e di management. L’assunzione di base è che qualsiasi variabile osservata possa essere direttamente associata a qualsiasi fattore.
  • Analisi fattoriale confermativa (CFA): l’assunzione di base è che ogni fattore sia associato a un insieme specifico di variabili osservate. La CFA conferma quanto atteso sulla base del modello.

Come funziona l’analisi fattoriale?

L’obiettivo principale dell’analisi fattoriale è ridurre il numero di variabili osservate e trovare variabili non osservabili. Queste variabili non osservate aiutano il ricercatore di mercato a trarre conclusioni dal sondaggio. Questa conversione delle variabili osservate in variabili non osservate può essere ottenuta in due passaggi:

  • Estrazione dei fattori: in questo passaggio, il numero di fattori e l’approccio di estrazione sono selezionati usando metodi di partizionamento della varianza, come l’analisi delle componenti principali e l’analisi dei fattori comuni.
  • Rotazione dei fattori: in questo passaggio, la rotazione cerca di convertire i fattori in fattori non correlati — l’obiettivo principale è migliorare l’interpretabilità complessiva. Esistono molti metodi di rotazione, ad esempio: Varimax, Quartimax e Promax.

Terminologia

Cos’è un fattore?

Un fattore è una variabile latente che descrive l’associazione tra più variabili osservate. Il numero massimo di fattori è pari al numero di variabili osservate. Ogni fattore spiega una certa quota di varianza nelle variabili osservate. I fattori con la minore varianza vengono eliminati. I fattori sono noti anche come variabili latenti, nascoste, non osservate o ipotetiche.

Cosa sono i factor loadings?

I factor loadings sono una matrice che mostra la relazione di ciascuna variabile con il fattore sottostante. Mostra il coefficiente di correlazione tra variabile osservata e fattore. Indica la varianza spiegata dalle variabili osservate.

Cosa sono gli autovalori (Eigenvalues)?

Gli autovalori rappresentano la varianza spiegata da ciascun fattore rispetto alla varianza totale. Sono noti anche come radici caratteristiche.

Cosa sono le comunalità (Communalities)?

Le comunalità sono la somma dei loadings al quadrato per ciascuna variabile. Rappresentano la varianza comune. Vanno da 0 a 1 e valori vicini a 1 indicano più varianza.

Cos’è la rotazione dei fattori?

La rotazione è uno strumento per una migliore interpretazione dell’analisi fattoriale. La rotazione può essere ortogonale o obliqua. Ridistribuisce le comunalità con uno schema di loadings più chiaro.

Scelta del numero di fattori

Il criterio di Kaiser è un approccio analitico basato sulla selezione del fattore che spiega una quota più significativa di varianza. L’autovalore è un buon criterio per determinare il numero di fattori. In generale, un autovalore maggiore di 1 è considerato criterio di selezione della caratteristica.

L’approccio grafico si basa sulla rappresentazione visiva degli autovalori dei fattori, chiamata anche scree plot. Questo scree plot aiuta a determinare il numero di fattori nel punto in cui la curva forma un “gomito”.

Fonte

Analisi fattoriale vs Principal Component Analysis

  • Le componenti PCA spiegano la massima quantità di varianza, mentre l’analisi fattoriale spiega la covarianza nei dati.
  • Le componenti PCA sono completamente ortogonali tra loro, mentre l’analisi fattoriale non richiede fattori ortogonali.
  • La componente PCA è una combinazione lineare delle variabili osservate, mentre in FA le variabili osservate sono combinazioni lineari della variabile non osservata o fattore.
  • Le componenti PCA sono difficili da interpretare. In FA, i fattori sottostanti possono essere etichettati e interpretati.
  • La PCA è un metodo di riduzione della dimensionalità, mentre l’analisi fattoriale è un metodo a variabili latenti.
  • La PCA è un tipo di analisi fattoriale. La PCA è osservazionale, mentre la FA è una tecnica di modellazione.

Fonte

Analisi fattoriale in Python con il pacchetto factor_analyzer

Importare le librerie necessarie

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

Caricare i dati

Eseguiamo l’analisi fattoriale su BFI (dataset basato su un progetto di valutazione della personalità), raccolto usando una scala di risposta a 6 punti: 1 Molto impreciso, 2 Moderatamente impreciso, 3 Leggermente impreciso, 4 Leggermente preciso, 5 Moderatamente preciso e 6 Molto preciso. Puoi anche scaricare questo dataset dal seguente link: https://vincentarelbundock.github.io/Rdatasets/datasets.html

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

Preprocessare i dati

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 righe × 25 colonne

Test di adeguatezza

Prima di eseguire l’analisi fattoriale, devi valutare la “fattorizzabilità” del dataset. Fattorizzabilità significa: "possiamo trovare dei fattori nel dataset?". Esistono due metodi per verificare la fattorizzabilità o l’adeguatezza del campionamento:

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

Il test di Bartlett di sfericità verifica se le variabili osservate sono intercorrelate usando la matrice di correlazione osservata rispetto alla matrice identità. Se il test risulta statisticamente non significativo, non dovresti impiegare un’analisi fattoriale.

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)

In questo test di Bartlett, il p-value è 0. Il test è risultato statisticamente significativo, indicando che la matrice di correlazione osservata non è una matrice identità.

Il test Kaiser-Meyer-Olkin (KMO) misura l’idoneità dei dati all’analisi fattoriale. Determina l’adeguatezza per ciascuna variabile osservata e per l’intero modello. Il KMO stima la proporzione di varianza tra tutte le variabili osservate. Una proporzione inferiore è più adatta all’analisi fattoriale. I valori KMO variano tra 0 e 1. Un valore KMO inferiore a 0,6 è considerato inadeguato.

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

Il KMO complessivo per i nostri dati è 0,84, che è eccellente. Questo valore indica che puoi procedere con l’analisi fattoriale pianificata.

Scelta del numero di fattori

Per scegliere il numero di fattori, puoi usare il criterio di Kaiser e lo scree plot. Entrambi si basano sugli autovalori.

# 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

Qui puoi vedere che solo per 6 fattori gli autovalori sono maggiori di uno. Significa che dobbiamo scegliere solo 6 fattori (o variabili non osservate).

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

Il metodo dello scree plot traccia una linea per ciascun fattore e i suoi autovalori. Il numero di autovalori maggiori di uno è considerato il numero di fattori.

Qui puoi vedere che solo per 6 fattori gli autovalori sono maggiori di uno. Significa che dobbiamo scegliere solo 6 fattori (o variabili non osservate).

Esecuzione dell’analisi fattoriale

# 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
  • Il Fattore 1 ha alti loadings per E1, E2, E3, E4 ed E5 (Estroversione)
  • Il Fattore 2 ha alti loadings per N1, N2, N3, N4 e N5 (Nevroticismo)
  • Il Fattore 3 ha alti loadings per C1, C2, C3, C4 e C5 (Coscienziosità)
  • Il Fattore 4 ha alti loadings per O1, O2, O3, O4 e O5 (Apertura mentale)
  • Il Fattore 5 ha alti loadings per A1, A2, A3, A4 e A5 (Amicalità)
  • Il Fattore 6 non ha alti loadings per nessuna variabile ed è difficilmente interpretabile. È meglio considerare solo cinque fattori.

Eseguiamo l’analisi fattoriale con 5 fattori.

# 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 totale il 42% della varianza cumulativa è spiegata dai 5 fattori.

Pro e contro dell’analisi fattoriale

L’analisi fattoriale esplora grandi dataset e trova associazioni interconnesse. Riduce le variabili osservate in poche variabili non osservate o identifica gruppi di variabili intercorrelate, aiutando i ricercatori di mercato a sintetizzare le situazioni di mercato e trovare le relazioni nascoste tra gusti, preferenze e influenze culturali dei consumatori. Inoltre, aiuta a migliorare i questionari per sondaggi futuri. I fattori rendono più naturale l’interpretazione dei dati.

I risultati dell’analisi fattoriale possono essere controversi. Le interpretazioni possono essere oggetto di discussione perché dalla stessa struttura fattoriale possono derivare più interpretazioni. Dopo l’identificazione dei fattori, l’assegnazione dei nomi richiede conoscenza del dominio.

Conclusione

Congratulazioni, sei arrivato alla fine di questo tutorial!

In questo tutorial hai imparato cos’è l’analisi fattoriale, i diversi tipi di analisi fattoriale, come funziona l’analisi fattoriale, la terminologia di base, come scegliere il numero di fattori, il confronto tra principal component analysis e analisi fattoriale, l’implementazione in Python usando il pacchetto FactorAnalyzer e i pro e contro dell’analisi fattoriale.

Sarei felice di ricevere feedback o domande. Puoi lasciare un commento con la tua domanda e farò del mio meglio per rispondere.

Se vuoi approfondire i fattori in Python, segui il corso di DataCamp Unsupervised Learning in Python.

Argomenti
Python
Data Science

Corsi Python

Corso

Introduzione a Python

4 ore
7.1M
Impara le basi dell’analisi dei dati con Python in sole 4 ore. Questo corso online ti introduce all’interfaccia di Python e ai pacchetti più usati.
Vedi i dettagliRight Arrow
Inizia Il Corso
Mostra altroRight Arrow
Correlato

blog

Tokenizzazione nel NLP: come funziona, sfide e casi d'uso

Guida al preprocessing NLP nel machine learning. Copriamo spaCy, i transformer di Hugging Face e come funziona la tokenizzazione in casi d'uso reali.
Abid Ali Awan's photo

Abid Ali Awan

10 min

blog

Che cos'è Snowflake? Guida per principianti alla piattaforma dati cloud

Esplora le basi di Snowflake, la piattaforma dati cloud. Scopri la sua architettura, le sue funzionalità e come integrarla nelle tue pipeline di dati.
Tim Lu's photo

Tim Lu

12 min

blog

I 15 migliori server MCP remoti che ogni AI builder dovrebbe conoscere nel 2026

Scopri i 15 migliori server MCP remoti che stanno trasformando lo sviluppo AI nel 2026. Scopri come migliorano automazione, ragionamento, sicurezza e velocità dei workflow.
Abid Ali Awan's photo

Abid Ali Awan

15 min

Mostra AltroMostra Altro