Le graphique fournit un résumé visuel des relations entre les variables dans correl_data
. Les valeurs de corrélation vont de -1 à 1, où les valeurs proches de 1 indiquent une forte corrélation positive, les valeurs proches de -1 indiquent une forte corrélation négative, et les valeurs autour de 0 suggèrent aucune corrélation. Il est évident qu’il n’y a pas de corrélation forte entre les variables, aucun des valeurs de corrélation n’étant supérieur à 0,6.
La prochaine étape consiste à calculer les valeurs VIF pour les variables prédictives. Le code ci-dessous calcule les valeurs pour chaque variable prédictive dans l’ensemble de données pour vérifier la multicollinéarité.
Tout d’abord, il définit X
en supprimant la colonne cible Performance
et en ajoutant une constante. Ensuite, il crée un DataFrame, datacamp_vif_data
, pour stocker les noms des prédicteurs et leurs valeurs VIF. En utilisant une boucle, il calcule ensuite le VIF pour chaque prédicteur avec la fonction variance_inflation_factor()
, où des VIF plus élevés indiquent la présence de multicollinéarité.
# Définir les variables prédictives X = datacamp_retail_data.drop(columns=['Performance']) # Ajouter une constante au modèle (intercept) X = add_constant(X) # Calculer le VIF pour chaque caractéristique 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)
Sortie:
Sortie montrant les valeurs VIF. Image par l’auteur
Ce résultat montre la valeur du VIF pour chaque variable prédictive, indiquant les niveaux de multicolinéarité dans l’ensemble de données. La ligne const
représente le terme d’interception, avec un VIF proche de 1, ce qui signifie qu’il n’a pas de multicolinéarité. Parmi les variables prédictives, Product_range
a le VIF le plus élevé (5,94), ce qui suggère qu’il a besoin de mesures correctives. Toutes les autres variables prédictives ont des valeurs de VIF inférieures à 3, indiquant une faible multicolinéarité.
Approche manuelle du calcul du VIF
L’autre approche consiste à calculer les valeurs séparément en régressant chaque variable indépendante par rapport aux autres variables prédictives.
Donc, pour chaque caractéristique dans retail_data
, elle définit cette caractéristique comme la variable dépendante (y) et les caractéristiques restantes comme variables indépendantes (X). Un modèle de régression linéaire est ensuite ajusté pour prédire y en utilisant X, et la valeur de R carré du modèle est utilisée pour calculer le VIF en utilisant la formule que nous avons discutée dans la section initiale.
Par la suite, chaque caractéristique et ses valeurs VIF correspondantes sont stockées dans un dictionnaire (vif_manual
), qui est ensuite converti en un DataFrame (vif_manual_df
) pour affichage.
datacamp_retail_data = retail_data.drop(columns=['Performance']) # Calcul Manuel du VIF vif_manual = {} for feature in retail_data.columns: # Définir la variable cible (caractéristique actuelle) et les prédicteurs (toutes les autres caractéristiques) y = datacamp_retail_data[feature] X = datacamp_retail_data.drop(columns=[feature]) # Ajuster le modèle de régression linéaire model = LinearRegression().fit(X, y) # Calculer R-carré r_squared = model.score(X, y) # Calculer le VIF vif = 1 / (1 - r_squared) vif_manual[feature] = vif # Convertir le dictionnaire en DataFrame pour un meilleur affichage vif_manual_df = pd.DataFrame(list(vif_manual.items()), columns=['Feature', 'VIF']) print(vif_manual_df)
Sortie :
Sortie montrant les valeurs VIF. Image par l’Auteur
La sortie montre chaque fonctionnalité avec sa valeur VIF, ce qui permet d’identifier d’éventuels problèmes de multicolinéarité. Vous pouvez voir que le résultat est clairement le même que celui que nous avons obtenu précédemment; et donc son interprétation sera que la variable Product_range
présente de la multicolinéarité.
Facteur d’inflation de la variance en R
Dans cette section, nous allons répéter l’exercice du facteur d’inflation de la variance ci-dessus dans la section Python, notamment pour les développeurs qui travaillent avec le langage de programmation R. Nous commençons par charger l’ensemble de données et les bibliothèques nécessaires.
library(tidyverse) library(car) library(corrplot) data <- read.csv('vif_data.csv') str(data)
Sortie:
La prochaine étape consiste à calculer la matrice de corrélation par paires et à la visualiser avec le heatmap. Les fonctions cor()
et corrplot
nous aident à accomplir cette tâche.
# Supprimer la colonne cible predictors_data <- data[, !(names(data) %in% "Performance")] # Calculer la matrice de corrélation correlation_matrix <- cor(predictors_data) # Tracer la carte de chaleur de corrélation # Charger les bibliothèques nécessaires library(ggplot2) library(reshape2) melted_corr_matrix <- melt(correlation_matrix) # Tracer la carte de chaleur avec 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() + # Thème minimal pour un aspect propre theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) + labs(x = "", y = "") + # Supprimer les étiquettes des axes geom_text(aes(Var1, Var2, label = round(value, 2)), color = "black", size = 4) + theme(axis.text=element_text(size=15))
Sortie:
Corrélation entre les variables. Image par l’auteur
Il est évident à partir de la carte de chaleur de corrélation qu’il n’y a pas de corrélation forte en paire parmi les variables, aucun des valeurs de corrélation n’étant même supérieur à 0,6. Maintenant, nous allons calculer les valeurs de VIF et voir s’il y a quelque chose d’alarmant. La ligne de code suivante effectue cette tâche.
# Adapter un modèle de régression model <- lm(Performance ~ Ambience + Customer_service + Offers + Product_range, data = data) # Calculer le VIF vif(model)
Sortie :
D’après la sortie, nous pouvons voir que parmi les variables prédictives, seule la variable Product_range
a une valeur VIF supérieure à 5, ce qui suggère une forte multicolinéarité nécessitant des mesures correctives.
Approche manuelle pour le calcul du VIF
L’autre approche pour le calcul du VIF consisterait à calculer les valeurs VIF pour chaque variable séparément en régressant chaque variable indépendante contre les autres variables prédictives.
Cela est effectué dans le code ci-dessous, qui utilise la fonction sapply()
pour chaque prédicteur, où chaque prédicteur est défini comme la variable dépendante dans un modèle de régression linéaire avec les autres prédicteurs comme variables indépendantes.
La valeur R-carré de chaque modèle est ensuite utilisée pour calculer les valeurs VIF avec sa formule. Enfin, le résultat, vif_values
, affiche le VIF pour chaque prédicteur, aidant à identifier les problèmes de multicolinéarité.
# Calcul du VIF pour chaque prédicteur manuellement 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)
Sortie :
Nous obtenons le même résultat et il est évident que la variable Product_range
avec une valeur VIF élevée au-dessus de 5 nécessite une intervention.
VIF vs. Matrice de Corrélation et Autres Méthodes
En résumé, voici les méthodes populaires pour détecter la multicolinéarité :
- Valeurs VIF élevées: Une valeur VIF élevée est un indicateur clair de la multicolinéarité. Lorsque ces valeurs dépassent certains seuils, elles indiquent qu’un prédicteur est fortement lié à d’autres prédicteurs, ce qui peut affecter la stabilité, la fiabilité et les performances du modèle.
- Matrices de corrélation: En examinant une matrice de corrélation, vous pouvez voir les corrélations par paires entre les prédicteurs. Des corrélations par paires élevées suggèrent une multicolinéarité entre ces prédicteurs spécifiques. Cependant, cette méthode ne détecte que les relations linéaires directes entre deux variables et peut passer à côté de la multicolinéarité impliquant des interactions plus complexes entre plusieurs variables.
- Changements de Coefficient: Si les coefficients des prédicteurs changent de manière significative lorsque vous ajoutez ou supprimez d’autres variables du modèle, cela peut être un signe de multicolinéarité. De telles fluctuations indiquent que certains prédicteurs peuvent partager des informations communes, rendant plus difficile l’identification de l’impact unique de chaque variable sur le résultat.
Parmi toutes ces méthodes, le VIF est particulièrement utile car il peut détecter la multicolinéarité même lorsque les corrélations par paires sont faibles, comme nous l’avons vu dans notre exemple. Cela fait du VIF un outil plus complet.
Idées Supplémentaires sur la Façon de Gérer les Valeurs Élevées de VIF
Si les valeurs de VIF indiquent une multicolinéarité élevée, et que vous ne voulez pas nécessairement simplement supprimer la variable, il existe d’autres stratégies plus avancées pour atténuer la multicolinéarité:
- Sélection des caractéristiques: Supprimez l’un des prédicteurs fortement corrélés, et recalculez le VIF pour voir si cela contribue à simplifier le modèle et à améliorer sa stabilité.
- Analyse en composantes principales (ACP): Utilisez l’ACP pour combiner vos prédicteurs en un ensemble plus restreint de composantes non corrélées. Cela transforme les variables originales en nouvelles variables indépendantes et non corrélées qui capturent la plupart des variations des données, aidant ainsi à traiter la multicolinéarité sans perdre d’informations précieuses.
- Techniques de régularisation: Appliquer une régression ridge ou lasso, qui ajoutent des termes de pénalité au modèle. Ces techniques aident à réduire la multicolinéarité en réduisant l’influence des variables corrélées, rendant le modèle plus stable et fiable.
Conclusion
Savoir comment utiliser le VIF est essentiel pour identifier et corriger la multicollinéarité, ce qui améliore la précision et la clarté des modèles de régression. Vérifier régulièrement les valeurs de VIF et appliquer des mesures correctives lorsque nécessaire aide les professionnels des données et les analystes à construire des modèles en qui ils peuvent avoir confiance. Cette approche garantit que l’effet de chaque prédicteur est clair, facilitant ainsi la formulation de conclusions fiables à partir du modèle et la prise de meilleures décisions basées sur les résultats. Prenez notre parcours professionnel Scientifique en Machine Learning en Python pour vraiment comprendre comment construire des modèles et les utiliser. De plus, l’achèvement du programme est un atout indéniable sur un CV.
Source:
https://www.datacamp.com/tutorial/variance-inflation-factor