Misure di collinearità

Un altro approccio per identificare la multicollinearità è tramite il Variance Inflation Factor. Il VIF indica la percentuale della varianza gonfiata per il coefficiente di ogni variabile. Partendo da un valore di 1 (nessuna collinearità), un VIF tra 1-5 indica una collinearità moderata, mentre valori superiori a 5 indicano un’alta collinearità. Alcuni casi in cui un VIF elevato sarebbe accettabile includono l’uso di termini di interazione, termini polinomiali, o variabili dummy (variabili nominali con tre o più categorie). Le matrici di correlazione permettono di identificare la correlazione tra le coppie di variabili mentre il VIF permette la valutazione complessiva della multicollinearità. La matrice di correlazione per la maggior parte delle variabili continue è presentata di seguito per evidenziare le varie coppie di variabili collineari. Il VIF può essere calcolato utilizzando il pacchetto statsmodels; il blocco di codice sottostante presenta i valori VIF con le variabili collineari incluse (a sinistra) e rimosse (a destra).

matrice di correlazione per le variabili continue; Coefficiente di Kendall (immagine dell’autore)
# Setting the predictor variables
X_o = df_wdummy]
X_r1 = df_wdummy]#
from statsmodels.stats.outliers_influence import variance_inflation_factorvif = pd.Series()], index=X_o.columns,
name='vif_full')
vif_r = pd.Series()], index=X_r1.columns,
name='vif_collinear_rvmd')
pd.concat(, axis=1)

Valori VIF per le variabili predittrici (immagine dell’autore)

I valori VIF corrispondono alla matrice di correlazione; per esempio, coppia di variabili NOX e INDUS, il coefficiente di correlazione è sopra 0.5 (0,61), e i rispettivi valori VIF sono superiori a 5. La rimozione delle variabili collineari RAD e NOX ha migliorato le cifre VIF. Eliminare le variabili collineari solo in base alla cifra VIF più alta non è un modo garantito per costruire il modello più performante, come elaborato nella prossima sezione.

Costruiamo un modello di base eliminando tutte le variabili collineari identificate nella matrice di correlazione (mostrata sopra), in attesa che TAX e RAD siano eliminate successivamente.

# Baseline variables 
X_bl = df_wdummy]
y_bl = df_wdummy# Explore mitigating multi-collinearity
vif_bl = pd.Series()], index=X_bl.columns,
name='vif_bl')X_noTAX = X_bl.drop(,axis=1)
X_noRAD = X_bl.drop(,axis=1)
vif_noTAX = pd.Series()],
index=X_noTAX.columns, name='vif_noTAX')
vif_noRAD = pd.Series()],
index=X_noRAD.columns, name='vif_noRAD')
pd.concat(, axis=1)

Valutazione dei dati VIF delle variabili predittive nel modello di base (immagine dell’autore)

Mentre sembra che eliminare la variabile TAX sulla base del VIF sia meglio, un approccio prudente è quello di controllare tramite la metrica R-squared aggiustata (aggiustata per il numero di predittori, la metrica aumenta solo se la prossima variabile aggiunta migliora il modello più di quanto ci si aspetterebbe dal caso).

# Without TAX
model = sm.OLS(y, sm.add_constant(X_noTAX)).fit()
print_model = model.summary()
print(print_model)

Sommario delle metriche del modello (senza TAX) (immagine dell’autore)
# Without RAD
model = sm.OLS(y, sm.add_constant(X_noRAD)).fit()
print_model = model.summary()
print(print_model)

Sommario delle metriche del modello (senza RAD) (immagine dell’autore)

Dalla cifra più alta corretta R-quadrato aggiustato, possiamo dedurre che il modello funziona meglio con la variabile RAD eliminata! Una volta risolto il problema della multicollinearità, il prossimo passo potrebbe essere quello di esplorare l’aggiunta di termini di interazione per aumentare potenzialmente le prestazioni del modello.

Lascia un commento