Das Diagramm bietet eine visuelle Zusammenfassung der Beziehungen zwischen den Variablen in correl_data
. Die Korrelationswerte reichen von -1 bis 1, wobei Werte nahe 1 eine starke positive Korrelation anzeigen, Werte nahe -1 eine starke negative Korrelation anzeigen und Werte um 0 auf keine Korrelation hindeuten. Es ist offensichtlich, dass keine starken paarweisen Korrelationen zwischen den Variablen bestehen, da keiner der Korrelationswerte sogar größer als 0,6 ist.
Der nächste Schritt besteht darin, die VIF-Werte für die Prädiktorvariablen zu berechnen. Der folgende Code berechnet die Werte für jede Prädiktorvariable im Datensatz, um auf Multikollinearität zu prüfen.
Zunächst definiert er X
, indem die Zielspalte Performance
entfernt und ein Intercept hinzugefügt wird. Anschließend wird ein DataFrame datacamp_vif_data
erstellt, um die Prädiktorvariablennamen und ihre VIF-Werte zu speichern. Mithilfe einer Schleife berechnet er dann den VIF für jeden Prädiktor mit der variance_inflation_factor()
-Funktion, wobei höhere VIFs auf das Vorhandensein von Multikollinearität hinweisen.
# Definiere die Prädiktorvariablen X = datacamp_retail_data.drop(columns=['Performance']) # Füge dem Modell eine Konstante hinzu (Intercept) X = add_constant(X) # Berechne den VIF für jedes Merkmal 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)
Ausgabe:
Ausgabe der VIF-Werte. Bild von Autor
Dieser Output zeigt den VIF-Wert für jede Prädiktorvariable und gibt Aufschluss über die Multikollinearitätsniveaus im Datensatz. Die Zeile const
repräsentiert den Intercept-Term, mit einem VIF-Wert nahe bei 1, was bedeutet, dass keine Multikollinearität vorliegt. Unter den Prädiktorvariablen hat Product_range
den höchsten VIF-Wert (5,94), was darauf hinweist, dass hier Korrekturmaßnahmen erforderlich sind. Alle anderen Prädiktoren haben VIF-Werte unter 3, was auf geringe Multikollinearität hindeutet.
Manueller Ansatz zur VIF-Berechnung
Ein anderer Ansatz besteht darin, die Werte separat zu berechnen, indem jede unabhängige Variable gegen die anderen Prädiktorvariablen regressiert wird.
Das Verfahren funktioniert so, dass für jedes Merkmal in retail_data
dieses Merkmal als abhängige Variable (y) festgelegt wird und die verbleibenden Merkmale als unabhängige Variablen (X). Ein lineares Regressionsmodell wird dann angepasst, um y unter Verwendung von X vorherzusagen, und der R-Quadrat-Wert des Modells wird verwendet, um den VIF-Wert mithilfe der Formel zu berechnen, über die wir im ersten Abschnitt gesprochen haben.
Anschließend werden jede Funktion und ihre entsprechenden VIF-Werte in einem Wörterbuch (vif_manual
) gespeichert, das dann in ein DataFrame (vif_manual_df
) für die Anzeige umgewandelt wird.
datacamp_retail_data = retail_data.drop(columns=['Performance']) # Manuelle VIF-Berechnung vif_manual = {} for feature in retail_data.columns: # Definieren der Zielvariablen (aktuelle Funktion) und Prädiktoren (alle anderen Funktionen) y = datacamp_retail_data[feature] X = datacamp_retail_data.drop(columns=[feature]) # Passen des linearen Regressionsmodells an model = LinearRegression().fit(X, y) # Berechnen von R-Quadrat r_squared = model.score(X, y) # Berechnen von VIF vif = 1 / (1 - r_squared) vif_manual[feature] = vif # Das Wörterbuch in ein DataFrame für eine bessere Anzeige umwandeln vif_manual_df = pd.DataFrame(list(vif_manual.items()), columns=['Feature', 'VIF']) print(vif_manual_df)
Ausgabe:
Anzeige der VIF-Werte. Bild von Autor
Die Ausgabe zeigt jedes Merkmal zusammen mit seinem VIF-Wert, um potenzielle Multikollinearitätsprobleme zu identifizieren. Sie können sehen, dass das Ergebnis offensichtlich dasselbe ist wie oben; und so wird auch seine Interpretation sein, nämlich dass die Variable Produktbereich
Multikollinearität aufweist.
Varianzinflationsfaktor in R
In diesem Abschnitt werden wir die Übung des obigen Varianzinflationsfaktors im Python-Abschnitt wiederholen, insbesondere für Entwickler, die mit der R-Programmiersprache arbeiten. Wir beginnen damit, den Datensatz und die erforderlichen Bibliotheken zu laden.
library(tidyverse) library(car) library(corrplot) data <- read.csv('vif_data.csv') str(data)
Ausgabe:
Der nächste Schritt besteht darin, die paarweise Korrelationsmatrix zu berechnen und sie mit dem Heatmap zu visualisieren. Die Funktionen cor()
und corrplot
helfen uns dabei, diese Aufgabe zu erledigen.
# Entferne die Zielspalte predictors_data <- data[, !(names(data) %in% "Performance")] # Berechne die Korrelationsmatrix correlation_matrix <- cor(predictors_data) # Plotte das Korrelations-Heatmap # Lade erforderliche Bibliotheken library(ggplot2) library(reshape2) melted_corr_matrix <- melt(correlation_matrix) # Plotte das Heatmap mit 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() + # Minimal Theme für ein sauberes Aussehen theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) + labs(x = "", y = "") + # Entferne Achsenbeschriftungen geom_text(aes(Var1, Var2, label = round(value, 2)), color = "black", size = 4) + theme(axis.text=element_text(size=15))
Ausgabe:
Korrelation zwischen den Variablen. Bild von Autor
Es ist offensichtlich aus dem Korrelations-Heatmap, dass es keine starken paarweisen Korrelationen zwischen den Variablen gibt, wobei keine der Korrelationswerte sogar größer als 0,6 ist. Jetzt werden wir die VIF-Werte berechnen und sehen, ob es etwas Alarmierendes gibt. Die folgende Codezeile erledigt diese Aufgabe.
# Füge ein Regressionsmodell hinzu model <- lm(Performance ~ Ambience + Customer_service + Offers + Product_range, data = data) # Berechne VIF vif(model)
Ausgabe:
Aus der Ausgabe können wir sehen, dass unter den Prädiktorvariablen nur die Variable Product_range
einen VIF-Wert größer als 5 aufweist, was auf eine hohe Multikollinearität hinweist, die korrigierende Maßnahmen erfordert.
Manueller Ansatz zur VIF-Berechnung
Der andere Ansatz zur VIF-Berechnung wäre, die VIF-Werte für jede Variable separat zu berechnen, indem jede unabhängige Variable gegen die anderen Prädiktorvariablen regressiert wird.
Dies wird im folgenden Code durchgeführt, der die Funktion sapply()
über jeden Prädiktor verwendet, wobei jeder Prädiktor als abhängige Variable in einem linearen Regressionsmodell mit den anderen Prädiktoren als unabhängige Variablen festgelegt ist.
Der R-Quadrat-Wert jedes Modells wird dann verwendet, um die VIF-Werte mit seiner Formel zu berechnen. Schließlich zeigt das Ergebnis, vif_values
, den VIF-Wert für jeden Prädiktor an und hilft bei der Identifizierung von Multikollinearitätsproblemen.
# VIF-Berechnung für jeden Prädiktor manuell 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)
Ausgabe:
Wir erhalten das gleiche Ergebnis und es ist offensichtlich, dass die Variable Product_range
mit einem hohen VIF-Wert über 5 eingreifen muss.
VIF vs. Korrelationsmatrix und andere Methoden
Zur Zusammenfassung, hier sind die beliebten Methoden zur Erkennung von Multikollinearität:
- Hohe VIF-Werte: Ein hoher VIF-Wert ist ein deutlicher Indikator für Multikollinearität. Wenn diese Werte bestimmte Schwellenwerte überschreiten, deutet dies darauf hin, dass ein Prädiktor stark mit anderen Prädiktoren zusammenhängt, was die Stabilität, Zuverlässigkeit und Leistung des Modells beeinträchtigen kann.
- Korrelationsmatrizen: Durch die Untersuchung einer Korrelationsmatrix können Sie die paarweisen Korrelationen zwischen Prädiktoren sehen. Hohe paarweise Korrelationen deuten auf Multikollinearität zwischen diesen spezifischen Prädiktoren hin. Dieses Verfahren erkennt jedoch nur direkte lineare Beziehungen zwischen zwei Variablen und kann Multikollinearität übersehen, die komplexere Interaktionen zwischen mehreren Variablen beinhaltet.
- Koeffizientenänderungen: Wenn die Koeffizienten der Prädiktoren sich signifikant ändern, wenn Sie andere Variablen zum Modell hinzufügen oder entfernen, kann dies ein Anzeichen für Multikollinearität sein. Solche Schwankungen deuten darauf hin, dass bestimmte Prädiktoren möglicherweise gemeinsame Informationen teilen, was es schwieriger macht, den einzigartigen Einfluss jeder Variablen auf das Ergebnis zu identifizieren.
Unter all diesen Methoden ist der VIF besonders nützlich, da er Multikollinearität auch dann erkennen kann, wenn die paarweisen Korrelationen niedrig sind, wie wir in unserem eigenen Beispiel gesehen haben. Dies macht den VIF zu einem umfassenderen Werkzeug.
Zusätzliche Ideen, wie man hohe VIF-Werte angehen kann
Wenn die VIF-Werte auf eine hohe Multikollinearität hinweisen und Sie die Variable nicht unbedingt entfernen möchten, gibt es einige andere, fortgeschrittenere Strategien zur Minderung von Multikollinearität:
- Merkmalsauswahl: Entfernen Sie einen der stark korrelierten Prädiktoren und berechnen Sie erneut den VIF, um zu sehen, ob dies dazu beiträgt, das Modell zu vereinfachen und die Stabilität zu verbessern.
- Hauptkomponentenanalyse (PCA): Verwenden Sie PCA, um Ihre Prädiktoren in eine kleinere Menge unkorrelierter Komponenten zu kombinieren. Dies transformiert die ursprünglichen Variablen in neue, unabhängige und unkorrelierte Variablen, die den Großteil der Datenvariation erfassen und dabei helfen, Multikollinearität zu behandeln, ohne wertvolle Informationen zu verlieren.
- Regulierungstechniken: Wenden Sie Ridge- oder Lasso-Regression an, die Strafterme zum Modell hinzufügen. Diese Techniken helfen, Multikollinearität zu reduzieren, indem sie den Einfluss korrelierter Variablen verringern und das Modell stabiler und zuverlässiger machen.
Schluss
Zu wissen, wie man VIF verwendet, ist entscheidend, um Multikollinearität zu identifizieren und zu beheben, was die Genauigkeit und Klarheit von Regressionsmodellen verbessert. Durch regelmäßige Überprüfung der VIF-Werte und Anwendung von Korrekturmaßnahmen, wenn nötig, können Datenprofis und Analysten Modelle aufbauen, denen sie vertrauen können. Dieser Ansatz gewährleistet, dass der Effekt jedes Prädiktors klar ist, was es einfacher macht, verlässliche Schlussfolgerungen aus dem Modell zu ziehen und bessere Entscheidungen auf Grundlage der Ergebnisse zu treffen. Nehmen Sie an unserem Karriereweg Machine Learning Scientist in Python teil, um wirklich zu verstehen, wie man Modelle erstellt und verwendet. Außerdem sieht der Abschluss des Programms im Lebenslauf gut aus.
Source:
https://www.datacamp.com/tutorial/variance-inflation-factor