Maison > Article > développement back-end > Détection et gestion des problèmes de multicolinéarité en régression à l'aide de Python
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.
Détecter la multicolinéarité
Gestion de la multicolinéarité
É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.
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 deDans 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)
VIF Factor Features 0 3.068988 Independent_var1 1 3.870567 Independent_var2 2 3.843753 Independent_var3
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)
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.
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!