Maison >développement back-end >Tutoriel Python >Détection et gestion des problèmes de multicolinéarité en régression à l'aide de Python

Détection et gestion des problèmes de multicolinéarité en régression à l'aide de Python

王林
王林avant
2023-08-18 15:05:201759parcourir

La multicolinéarité fait référence au degré élevé d'intercorrélation entre les variables indépendantes dans le modèle de régression. Cela peut conduire à des coefficients inexacts dans le modèle, ce qui rend difficile l'évaluation de l'impact de différentes variables indépendantes sur la variable dépendante. Dans ce cas, il est nécessaire d'identifier et de gérer la multicolinéarité du modèle de régression et de combiner différentes procédures et leurs résultats, que nous expliquerons étape par étape.

Méthode

  • Détecter la multicolinéarité

  • Gestion de la multicolinéarité

Algorithme

Étape 1 − Importer les bibliothèques nécessaires

Étape 2 - Charger les données dans les pandas Dataframes

Étape 3 - Créer une matrice de corrélation à l'aide de prédicteurs

Étape 4 − Créez une carte thermique de la matrice de corrélation pour visualiser la corrélation

Étape 5 - Calculez le facteur d'inflation de la variance pour chaque prédicteur de la sortie

Étape 6 − Déterminer le prédicteur

Étape 7 - Le prédicteur doit être supprimé

Étape 8 - Réexécutez le modèle de régression

Étape 9 - Vérifiez à nouveau.

Méthode 1 : Détection de la multicolinéarité

Utilisez la fonction corr() du package pandas pour déterminer la matrice de corrélation des variables indépendantes. Utilisez la bibliothèque Seaborn pour générer des cartes thermiques afin d'afficher la matrice de corrélation. Utilisez la fonction variance_inflation_factor() du package statsmodels pour déterminer le facteur d'inflation de la variance (VIF) pour chaque variable indépendante. Un VIF supérieur à 5 ou 10 indique une multicolinéarité élevée.

La traduction chinoise de

Exemple-1

est :

Exemple-1

Dans ce code, une fois les données chargées dans le Pandas DataFrame, la variable prédictive X et la variable dépendante y sont séparées. Pour calculer le VIF pour chaque variable prédictive, nous utilisons la fonction variation_inflation_factor() du package statsmodels. Dans la dernière étape du processus, nous stockons les valeurs VIF ainsi que les noms des prédicteurs dans un tout nouveau Pandas DataFrame, puis affichons les résultats. À l'aide de ce code, un tableau contenant le nom de la variable et la valeur VIF pour chaque variable prédictive sera généré. Lorsqu'une variable a une valeur VIF élevée (supérieure à 5 ou 10, selon la situation), il est important d'analyser la variable plus en profondeur.

import pandas as pd
from statsmodels.stats.outliers_influence import variance_inflation_factor

# Load data into a pandas DataFrame
data = pd.read_csv("mydata.csv")

# Select independent variables
X = data[['independent_var1', 'independent_var2', 'independent_var3']]

# Calculate VIF for each independent variable
vif = pd.DataFrame()
vif["VIF Factor"] = [variance_inflation_factor(X.values, i) for i in range(X.shape[1])]
vif["features"] = X.columns

# Print the VIF results
print(vif)

Sortie

VIF  Factor      Features 
0    3.068988    Independent_var1
1    3.870567    Independent_var2
2    3.843753    Independent_var3

Méthode 2 : Gérer la multicolinéarité

Excluez du modèle une ou plusieurs variables indépendantes fortement corrélées. L'analyse en composantes principales (ACP) peut être utilisée pour combiner des variables indépendantes hautement corrélées en une seule variable. Des méthodes de régularisation telles que la régression ridge ou la régression lasso peuvent être utilisées pour réduire l'impact de variables indépendantes fortement corrélées sur les coefficients du modèle. En utilisant l'approche ci-dessus, l'exemple de code suivant peut être utilisé pour identifier et résoudre les problèmes de multicolinéarité −

import pandas as pd
import seaborn as sns
from statsmodels.stats.outliers_influence import variance_inflation_factor
from sklearn.decomposition import PCA
from sklearn.linear_model import Ridge

# Load the data into a pandas DataFrame
data = pd.read_csv('data.csv')

# Calculate the correlation matrix
corr_matrix = data.corr()

# Create a heatmap to visualize the correlation matrix
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm')

# Check for VIF for each independent variable
for i in range(data.shape[1]-1):
   vif = variance_inflation_factor(data.values, i)
   print('VIF for variable {}: {:.2f}'.format(i, vif))

# Remove highly correlated independent variables
data = data.drop(['var1', 'var2'], axis=1)

# Use PCA to combine highly correlated independent variables
pca = PCA(n_components=1)
data['pca'] = pca.fit_transform(data[['var1', 'var2']])

# Use Ridge regression to reduce the impact of highly correlated independent variables
X = data.drop('dependent_var', axis=1)
y = data['dependent_var']
ridge = Ridge(alpha=0.1)
ridge.fit(X, y)

Cette fonction ne génère aucune autre sortie que la sortie de la valeur VIF de chaque variable indépendante. L'exécution de ce code affichera uniquement les valeurs VIF pour chaque variable indépendante ; aucun graphique ni performance du modèle ne sera imprimé.

Dans cet exemple, les données sont d'abord chargées dans un DataFrame pandas, puis la matrice de corrélation est calculée et enfin une carte thermique est créée pour afficher la matrice de corrélation. Nous avons ensuite éliminé les facteurs indépendants présentant des corrélations élevées après avoir testé le VIF de chaque variable indépendante. Nous utilisons la régression de crête pour réduire l'impact des variables indépendantes hautement corrélées sur les coefficients du modèle et utilisons l'analyse en composantes principales pour combiner des variables indépendantes hautement corrélées en une seule variable.

import pandas as pd

#create DataFrame
df = pd.DataFrame({'rating': [90, 85, 82, 18, 14, 90, 16, 75, 87, 86],
         'points': [22, 10, 34, 46, 27, 20, 12, 15, 14, 19],
         'assists': [1, 3, 5, 6, 5, 7, 6, 9, 9, 5],
         'rebounds': [11, 8, 10, 6, 3, 4, 4, 10, 10, 7]})

#view DataFrame
print(df)

Sortie

   rating  points  assists  rebounds
0      90      22        1        11
1      85      10        3         8
2      82      34        5        10
3      18      46        6         6
4      14      27        5         3
5      90      20        7         4
6      16      12        6         4
7      75      15        9        10
8      87      14        9        10
9      86      19        5         7

À l'aide du package Pandas, une structure de données de tableau appelée DataFrame peut être générée via ce programme Python. Les dimensions spécifiques comprennent quatre colonnes différentes : passes décisives, rebonds, points et notes. La bibliothèque est importée au début du code et est appelée "pd" par la suite pour réduire la complexité. Un DataFrame est finalement construit en exécutant la méthode pd.DataFrame() dans la deuxième ligne de code.

Utilisez la méthode print() sur la troisième ligne de code pour imprimer le DataFrame sur la console. Les valeurs de chaque colonne forment la définition de la liste et servent de clés et de valeurs pour la fonction de saisie du dictionnaire. Les informations sur chaque joueur sont affichées sous forme de tableau, avec des statistiques comprenant des points, des passes décisives et des rebonds disposés en colonnes, chaque ligne représentant un joueur.

Conclusion

En résumé, lorsque deux variables prédictives ou plus dans un modèle sont fortement corrélées les unes aux autres, on parle de multicolinéarité. Cette situation peut rendre difficile l’interprétation des résultats du modèle. Dans ce cas, il est difficile de déterminer comment chaque variable prédictive unique affecte la variable de résultat.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer