Mehrfachlineare Regression in Python: Modellierung mit mehreren Prädiktoren
Die mehrfachlineare Regression erweitert die einfache Regression, indem sie mehrere unabhängige Variablen einbezieht. Das Modell passt eine Hyperebene im mehrdimensionalen Raum an, um die Zielvariable Y basierend auf den Prädiktoren X₁ bis Xₙ vorherzusagen. Jeder Koeffizient βᵢ spiegelt den isolierten Einfluss seiner jeweiligen Variable wider, während alle anderen Variablen konstant gehalten werden. Anhand des Advertising-Datensatzes prognostizieren wir den Umsatz anhand der Budgets für TV-, Radio- und Zeitungsanzeigen.
Mathematische Formulierung
Die Modellgleichung lautet:
Y = β₀ + β₁X₁ + β₂X₂ + ⋯ + βₙXₙ + ε
β₀ ist der Achsenabschnitt, βᵢ sind die Regressionskoeffizienten und ε steht für die Residuen. Die optimalen β-Werte werden mittels der Methode der kleinsten Quadrate (OLS) berechnet:
β̂ = (XᵀX)⁻¹Xᵀy
Hierbei ist X die erweiterte Merkmalsmatrix (mit einer Spalte aus Einsen) und y der Zielvektor. Zu den zentralen Annahmen gehören lineare Beziehungen sowie Homoskedastizität der Residuen.
Datenvorbereitung
Teilen Sie die Daten in Trainings- und Testsets (80/20), um die Generalisierungsfähigkeit zu bewerten und Überanpassung zu vermeiden. Wenden Sie One-Hot-Encoding für kategoriale Merkmale an und verwenden Sie StandardScaler zur Standardisierung numerischer Features – dies verbessert die Interpretierbarkeit der Koeffizienten.
Wichtige Schritte der Vorbereitung:
- Überprüfung auf fehlende Werte und Ausreißer.
- Kodierung kategorialer Variablen.
- Aufteilung des Datensatzes:
train_test_split(X, y, test_size=0.2, random_state=42). - Skalierung der Merkmale:
StandardScaler().fit_transform(X_train).
Implementierung am Advertising-Datensatz
Daten: 200 Beobachtungen, Vorhersage von Sales basierend auf TV-, Radio- und Zeitungsanzeigenbudgets.
Import und Datenladen
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score, mean_absolute_error
plt.style.use('seaborn-v0_8-whitegrid')
sns.set_palette("husl")
df = pd.read_csv("Advertising.csv")
if 'Unnamed: 0' in df.columns:
df = df.drop('Unnamed: 0', axis=1)
df.columns = ['TV', 'Radio', 'Newspaper', 'Sales']
print(df.head())
print(f"Datenmenge: {df.shape}")
Erste Zeilen:
| TV | Radio | Newspaper | Sales |
|-------|-------|-----------|-------|
| 230.1 | 37.8 | 69.2 | 22.1 |
| 44.5 | 39.3 | 45.1 | 10.4 |
EDA und Korrelationen
Zusammenfassende Statistiken:
| | TV | Radio | Newspaper | Sales |
|-------|--------|-------|-----------|-------|
| mean | 147.04 | 23.26 | 30.55 | 14.02 |
| std | 85.85 | 14.85 | 21.78 | 5.22 |
Korrelation mit Sales: TV (0,78), Radio (0,58), Newspaper (0,23).
Streuplott-Diagramme zeigen starke lineare Beziehungen zwischen TV-Sales und Radio-Sales, aber nur eine schwache Verbindung für Newspaper.
Modelltraining
X = df[['TV', 'Radio', 'Newspaper']]
y = df['Sales']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
model = LinearRegression()
model.fit(X_train, y_train)
print(f"Achsenabschnitt: {model.intercept_:.4f}")
for name, coef in zip(X.columns, model.coef_):
print(f"{name}: {coef:.4f}")
Ergebnisse:
- Achsenabschnitt: 2,9791
- TV: 0,0447
- Radio: 0,1892
- Newspaper: 0,0028
Interpretation: Bei jeder Erhöhung der TV-Anzeigen um 1.000 € steigt der Umsatz um etwa 44,7 Einheiten; Radio bringt etwa 189,2 zusätzliche Einheiten. Newspaper hat praktisch keinen Einfluss.
Modellbewertung
y_pred = model.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
rmse = np.sqrt(mse)
mae = mean_absolute_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print(f"MSE: {mse:.2f}, RMSE: {rmse:.2f}, MAE: {mae:.2f}, R²: {r2:.4f}")
Metriken:
- MSE: 3,17
- RMSE: 1,78
- MAE: 1,46
- R²: 0,8994
Ein R² von 0,90 bedeutet, dass das Modell 90 % der Varianz im Umsatz erklärt. RMSE und MAE geben die Fehlergröße in realen Umsatz-Einheiten an.
Residuenanalyse
- Histogramm der Residuen: symmetrisch um null.
- Residuen vs. Vorhersagen: keine erkennbaren Muster (Homoskedastizität).
- Streudiagramm aus tatsächlichen vs. vorhergesagten Werten zeigt Punkte dicht entlang der Diagonalen.
Wichtige Erkenntnisse
- Die mehrfache Regression isoliert die Effekte einzelner Prädiktoren, während Konfundierer kontrolliert werden.
- Der nahezu Null-Koeffizient für Newspaper deutet darauf hin, dass es wenig prognostische Wert beisteuert.
- R² = 0,90 zeigt starke erklärende Kraft, doch immer VIF zur Prüfung von Multikollinearität prüfen.
- Residuen immer analysieren, um Annahmen der Linearität und Normalverteilung zu validieren.
- Skalierung ist für OLS nicht zwingend erforderlich, verbessert aber die Interpretierbarkeit der Koeffizienten.
— Editorial Team
Noch keine Kommentare.