Comment tester la multicolinéarité en Python



Dans l’analyse de régression, la multicolinéarité se produit lorsque deux ou plusieurs variables prédictives sont fortement corrélées les unes aux autres, de sorte qu’elles ne fournissent pas d’informations uniques ou indépendantes dans le modèle de régression.

Si le degré de corrélation est suffisamment élevé entre les variables prédictives, cela peut poser des problèmes lors de l’ajustement et de l’interprétation du modèle de régression.

Le moyen le plus simple de détecter la multicolinéarité dans un modèle de régression consiste à calculer une métrique connue sous le nom de facteur d’inflation de la variance, souvent abrégé VIF .

VIF mesure la force de la corrélation entre les variables prédictives dans un modèle. Il prend une valeur comprise entre 1 et l’infini positif.

Nous utilisons les règles empiriques suivantes pour interpréter les valeurs VIF :

  • VIF = 1 : il n’existe aucune corrélation entre une variable prédictive donnée et toute autre variable prédictive du modèle.
  • VIF entre 1 et 5 : il existe une corrélation modérée entre une variable prédictive donnée et d’autres variables prédictives du modèle.
  • VIF > 5 : il existe une forte corrélation entre une variable prédictive donnée et d’autres variables prédictives dans le modèle.

L’exemple suivant montre comment détecter la multicolinéarité dans un modèle de régression en Python en calculant les valeurs VIF pour chaque variable prédictive du modèle.

Exemple : test de multicolinéarité en Python

Supposons que nous ayons le DataFrame pandas suivant qui contient des informations sur divers joueurs de basket-ball :

import pandas as pd

#create DataFrame
df = pd.DataFrame({'rating': [90, 85, 82, 88, 94, 90, 76, 75, 87, 86],
                   'points': [25, 20, 14, 16, 27, 20, 12, 15, 14, 19],
                   'assists': [5, 7, 7, 8, 5, 7, 6, 9, 9, 5],
                   'rebounds': [11, 8, 10, 6, 6, 9, 6, 10, 10, 7]})

#view DataFrame
print(df)

	rating	points	assists	rebounds
0	90	25	5	11
1	85	20	7	8
2	82	14	7	10
3	88	16	8	6
4	94	27	5	6
5	90	20	7	9
6	76	12	6	6
7	75	15	9	10
8	87	14	9	10
9	86	19	5	7

Supposons que nous souhaitions ajuster un modèle de régression linéaire multiple en utilisant la notation comme variable de réponse et les points , les assistances et les rebonds comme variables prédictives.

Pour calculer le VIF pour chaque variable prédictive du modèle, nous pouvons utiliser la fonction variance_inflation_factor() de la bibliothèque statsmodels :

from patsy import dmatrices
from statsmodels.stats.outliers_influence import variance_inflation_factor

#find design matrix for regression model using 'rating' as response variable 
y, X = dmatrices('rating ~ points+assists+rebounds', data=df, return_type='dataframe')

#create DataFrame to hold VIF values
vif_df = pd.DataFrame()
vif_df['variable'] = X.columns 

#calculate VIF for each predictor variable 
vif_df['VIF'] = [variance_inflation_factor(X.values, i) for i in range(X.shape[1])]

#view VIF for each predictor variable 
print(vif_df)

	       VIF	 variable
0	101.258171	Intercept
1	  1.763977	   points
2	  1.959104	  assists
3	  1.175030	 rebounds

Nous pouvons voir les valeurs VIF pour chacune des variables prédictives :

  • points : 1,76
  • passes décisives : 1,96
  • rebonds : 1,18

Remarque : Ignorez le VIF pour « Interception » dans le modèle car cette valeur n’est pas pertinente.

Étant donné que chacune des valeurs VIF des variables prédictives du modèle est proche de 1, la multicolinéarité ne pose pas de problème dans le modèle.

Ressources additionnelles

Les didacticiels suivants expliquent comment effectuer d’autres tâches courantes en Python :

Comment effectuer une régression linéaire simple en Python
Comment effectuer une régression linéaire multiple en Python
Comment créer un tracé résiduel en Python

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *