Il grafico fornisce un riassunto visivo delle relazioni tra le variabili in correl_data
. I valori di correlazione vanno da -1 a 1, dove i valori più vicini a 1 indicano una forte correlazione positiva, i valori più vicini a -1 indicano una forte correlazione negativa e i valori intorno a 0 suggeriscono nessuna correlazione. È evidente che non c’è una forte correlazione tra le coppie di variabili, con nessuno dei valori di correlazione che supera 0.6.
Il passo successivo è calcolare i valori VIF per le variabili predittive. Il codice qui sotto calcola i valori per ciascuna variabile predittiva nel dataset per controllare la multicollinearità.
Innanzitutto, definisce X
rimuovendo la colonna target Performance
e aggiungendo un’intercetta. Poi, crea un DataFrame, datacamp_vif_data
, per memorizzare i nomi dei predittori e i loro valori VIF. Utilizzando un ciclo, calcola quindi il VIF per ciascun predittore con la variance_inflation_factor()
funzione, dove valori VIF più alti indicano la presenza di multicollinearità.
# Definisci le variabili predittive X = datacamp_retail_data.drop(columns=['Performance']) # Aggiungi una costante al modello (intercetta) X = add_constant(X) # Calcola il VIF per ciascuna caratteristica datacamp_vif_data = pd.DataFrame() datacamp_vif_data['Feature'] = X.columns datacamp_vif_data['VIF'] = [variance_inflation_factor(X.values, i) for i in range(X.shape[1])] print(datacamp_vif_data)
Output:
Output che mostra i valori VIF. Immagine dell’autore
Questo output mostra il valore VIF per ciascuna variabile predittiva, indicando i livelli di multicollinearità nel dataset. La riga const
rappresenta il termine di intercetta, con un VIF vicino a 1, il che significa che non ha multicollinearità. Tra le variabili predittive, Product_range
ha il VIF più alto (5.94), il che suggerisce che ha bisogno di misure correttive. Tutte le altre variabili predittive hanno valori VIF inferiori a 3, indicando una bassa multicollinearità.
Approccio manuale al calcolo del VIF
L’altro approccio consiste nel calcolare i valori separatamente regredendo ciascuna variabile indipendente rispetto alle altre variabili predittive.
Quindi, per ciascuna feature in retail_data
, imposta tale feature come la variabile dipendente (y) e le altre feature come variabili indipendenti (X). Viene quindi adattato un modello di regressione lineare per prevedere y utilizzando X, e il valore R-quadrato del modello viene utilizzato per calcolare il VIF utilizzando la formula che abbiamo discusso nella sezione iniziale.
Successivamente, ciascuna caratteristica e i relativi valori VIF corrispondenti sono memorizzati in un dizionario (vif_manual
), che viene poi convertito in un DataFrame (vif_manual_df
) per la visualizzazione.
datacamp_retail_data = retail_data.drop(columns=['Performance']) # Calcolo manuale del VIF vif_manual = {} for feature in retail_data.columns: # Definire la variabile target (caratteristica attuale) e i predittori (tutte le altre caratteristiche) y = datacamp_retail_data[feature] X = datacamp_retail_data.drop(columns=[feature]) # Addestrare il modello di regressione lineare model = LinearRegression().fit(X, y) # Calcolare il R-quadrato r_squared = model.score(X, y) # Calcolare il VIF vif = 1 / (1 - r_squared) vif_manual[feature] = vif # Convertire il dizionario in un DataFrame per una migliore visualizzazione vif_manual_df = pd.DataFrame(list(vif_manual.items()), columns=['Feature', 'VIF']) print(vif_manual_df)
Output:
Output che mostra i valori VIF. Immagine dell’Autore
L’output mostra ogni caratteristica insieme al suo valore VIF, aiutando a identificare potenziali problemi di multicollinearità. Si può vedere che il risultato è ovviamente lo stesso di quello che abbiamo ottenuto in precedenza; e così sarà la sua interpretazione, che è che la variabile Product_range
sta mostrando multicollinearità.
Fattore di inflazione della varianza in R
In questa sezione, ripeteremo l’esercizio del fattore di inflazione della varianza sopra nella sezione Python, specialmente per gli sviluppatori che lavorano con il linguaggio di programmazione R. Iniziamo caricando il dataset e le librerie necessarie.
library(tidyverse) library(car) library(corrplot) data <- read.csv('vif_data.csv') str(data)
Output:
Il passo successivo è calcolare la matrice di correlazione a coppie e visualizzarla con la mappa di calore. Le funzioni cor()
e corrplot
ci aiutano a completare questo compito.
# Rimuovere la colonna target predictors_data <- data[, !(names(data) %in% "Performance")] # Calcolare la matrice di correlazione correlation_matrix <- cor(predictors_data) # Tracciare la mappa di correlazione # Caricare le librerie necessarie library(ggplot2) library(reshape2) melted_corr_matrix <- melt(correlation_matrix) # Tracciare la mappa di calore con ggplot2 ggplot(data = melted_corr_matrix, aes(x = Var1, y = Var2, fill = value)) + geom_tile(color = "white") + scale_fill_gradient2(low = "blue", high = "red", mid = "white", midpoint = 0, limit = c(-1, 1), space = "Lab", name="Correlation") + theme_minimal() + # Tema minimale per un aspetto pulito theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) + labs(x = "", y = "") + # Rimuovere le etichette degli assi geom_text(aes(Var1, Var2, label = round(value, 2)), color = "black", size = 4) + theme(axis.text=element_text(size=15))
Output:
Correlazione tra le variabili. Immagine dell’Autore
Dal grafico di correlazione è evidente che non vi sia una forte correlazione a coppie tra le variabili, con nessuno dei valori di correlazione che supera anche 0,6. Ora calcoleremo i valori VIF e vedremo se ci sia qualcosa di preoccupante. La riga di codice seguente svolge questo compito.
# Adattare un modello di regressione model <- lm(Performance ~ Ambience + Customer_service + Offers + Product_range, data = data) # Calcolare il VIF vif(model)
Output:
Dall’output, possiamo vedere che tra le variabili predittive, solo la variabile Product_range
ha un valore VIF maggiore di 5, il che suggerisce una forte multicollinearità che necessita di misure correttive.
Approccio manuale al calcolo del VIF
L’altro approccio al calcolo del VIF sarebbe calcolare i valori VIF per ciascuna variabile separatamente regredendo ciascuna variabile indipendente contro le altre variabili predittive.
Questo viene eseguito nel codice sottostante, che utilizza la funzione sapply()
su ciascun predittore, dove ciascun predittore è impostato come variabile dipendente in un modello di regressione lineare con gli altri predittori come variabili indipendenti.
Il valore R-quadrato di ciascun modello viene quindi utilizzato per calcolare i valori VIF con la relativa formula. Infine, il risultato, vif_values
, visualizza il VIF per ciascun predittore, aiutando a identificare i problemi di multicollinearità.
# Calcolo del VIF per ciascun predittore manualmente predictors <- c("Ambience", "Customer_service", "Offers", "Product_range") vif_values <- sapply(predictors, function(pred) { formula <- as.formula(paste(pred, "~ .")) model <- lm(formula, data = data[, predictors]) 1 / (1 - summary(model)$r.squared) }) print(vif_values)
Output:
Otteniamo lo stesso risultato ed è evidente che la variabile Product_range
con un alto valore di VIF superiore a 5 necessita di intervento.
VIF vs. Matrice di Correlazione e Altri Metodi
Come riepilogo, ecco i metodi popolari per rilevare la multicollinearità:
- Valori elevati di VIF: Un valore elevato di VIF è un chiaro indicatore di multicollinearità. Quando questi valori superano determinate soglie, indicano che un predittore è fortemente correlato ad altri predittori, il che può influire sulla stabilità, affidabilità e prestazioni del modello.
- Matrici di correlazione: Esaminando una matrice di correlazione, è possibile vedere le correlazioni tra coppie di predittori. Alte correlazioni tra coppie suggeriscono la presenza di multicollinearità tra quei predittori specifici. Tuttavia, questo metodo rileva solo relazioni lineari dirette tra due variabili e potrebbe non individuare multicollinearità che coinvolge interazioni più complesse tra diverse variabili.
- Variazioni dei coefficienti: Se i coefficienti dei predittori cambiano significativamente quando si aggiungono o si rimuovono altre variabili dal modello, questo può essere un segno di multicollinearità. Tali fluttuazioni indicano che alcuni predittori potrebbero condividere informazioni comuni, rendendo più difficile identificare l’impatto unico di ciascuna variabile sull’outcome.
Tra tutti questi metodi, il VIF è particolarmente utile perché può rilevare la multicollinearità anche quando le correlazioni a coppie sono basse, come abbiamo visto nel nostro esempio. Ciò rende il VIF uno strumento più completo.
Idee aggiuntive su come affrontare i valori di VIF elevati
Se i valori di VIF indicano una forte multicollinearità e non si desidera necessariamente rimuovere la variabile, ci sono altre strategie più avanzate per mitigare la multicollinearità:
- Selezione delle caratteristiche: Rimuovere uno dei predittori altamente correlati e ricalcolare il VIF per vedere se aiuta a semplificare il modello e migliorare la stabilità.
- Analisi dei componenti principali (PCA): Utilizzare PCA per combinare i predittori in un insieme più piccolo di componenti non correlate. Questo trasforma le variabili originali in nuove variabili indipendenti e non correlate che catturano la maggior parte della variazione dei dati, aiutando ad affrontare la multicollinearità senza perdere informazioni preziose.
- Tecniche di regolarizzazione: Applica la regressione ridge o lasso, che aggiunge termini di penalizzazione al modello. Queste tecniche aiutano a ridurre la multicollinearità restringendo l’influenza delle variabili correlate, rendendo il modello più stabile e affidabile.
Conclusion
Conoscere come utilizzare il VIF è fondamentale per identificare e risolvere la multicollinearità, migliorando l’accuratezza e la chiarezza dei modelli di regressione. Controllare regolarmente i valori del VIF e applicare misure correttive quando necessario aiuta i professionisti dei dati e gli analisti a costruire modelli su cui possono fare affidamento. Questo approccio garantisce che l’effetto di ciascun predittore sia chiaro, rendendo più facile trarre conclusioni affidabili dal modello e prendere decisioni migliori basate sui risultati. Prendi il nostro percorso professionale di Scienziato del Machine Learning in Python per capire davvero come costruire modelli e utilizzarli. Inoltre, il completamento del programma valorizza il curriculum.
Source:
https://www.datacamp.com/tutorial/variance-inflation-factor