Comment calculer VIF en Python



La multicolinéarité dans l’analyse de régression se produit lorsque deux ou plusieurs variables explicatives 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, cela peut poser des problèmes lors de l’ajustement et de l’interprétation du modèle de régression.

Une façon de détecter la multicolinéarité consiste à utiliser une métrique connue sous le nom de facteur d’inflation de la variance (VIF) , qui mesure la corrélation et la force de la corrélation entre les variables explicatives dans un modèle de régression .

Ce tutoriel explique comment calculer VIF en Python.

Exemple : Calculer VIF en Python

Pour cet exemple, nous utiliserons un ensemble de données qui décrit les attributs de 10 joueurs de basket-ball :

import numpy as np
import pandas as pd

#create dataset
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 dataset
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 passes décisives et les rebonds comme variables explicatives.

Pour calculer le VIF pour chaque variable explicative 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 linear regression model using 'rating' as response variable 
y, X = dmatrices('rating ~ points+assists+rebounds', data=df, return_type='dataframe')

#calculate VIF for each explanatory variable
vif = pd.DataFrame()
vif['VIF'] = [variance_inflation_factor(X.values, i) for i in range(X.shape[1])]
vif['variable'] = X.columns

#view VIF for each explanatory variable 
vif

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

On peut observer les valeurs VIF pour chacune des variables explicatives :

  • 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.

Comment interpréter les valeurs VIF

La valeur de VIF commence à 1 et n’a pas de limite supérieure. Une règle générale pour interpréter les VIF est la suivante :

  • Une valeur de 1 indique qu’il n’y a aucune corrélation entre une variable explicative donnée et toute autre variable explicative du modèle.
  • Une valeur comprise entre 1 et 5 indique une corrélation modérée entre une variable explicative donnée et d’autres variables explicatives du modèle, mais elle n’est souvent pas suffisamment grave pour nécessiter une attention particulière.
  • Une valeur supérieure à 5 indique une corrélation potentiellement sévère entre une variable explicative donnée et d’autres variables explicatives du modèle. Dans ce cas, les estimations des coefficients et les valeurs p dans les résultats de la régression ne sont probablement pas fiables.

Étant donné que chacune des valeurs VIF des variables explicatives de notre modèle de régression est proche de 1, la multicolinéarité n’est pas un problème dans notre exemple.

Ajouter un commentaire

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