Mnohonásobná lineární regrese: model s více předpovědními proměnnými v Pythonu
Mnohonásobná lineární regrese rozšiřuje jednoduchou regresi o více nezávislých proměnných. Model vytváří hyperplochu ve vícerozměrném prostoru pro předpovídání cílové proměnné Y na základě předpovědních proměnných X1–Xn. Koeficienty βi ukazují izolovaný dopad každého faktoru při pevně daných ostatních. Na datové sadě Advertising předpovídáme prodeje podle rozpočtů TV, rozhlasu a novin.
Matematická formulace
Rovnice modelu:
Y = β₀ + β₁X₁ + β₂X₂ + ⋯ + βₙXₙ + ε
β₀ — průsečík, βi — koeficienty regrese, ε — rezidua. Optimální hodnoty β se počítají metodou nejmenších čtverců:
β̂ = (XᵀX)⁻¹Xᵀy
X — rozšířená matice znaků (s jedničkovým sloupcem), y — vektor cílových hodnot. Předpokládá se lineární závislost a homoskedasticita reziduí.
Příprava dat
Rozdělte data na trénovací/testovací (80/20), aby bylo možné ohodnotit schopnost obecného použití a zabránit přeučení. Pro kategoriální znaky použijte One-Hot kódování. Standardizujte znaky pomocí StandardScaler pro lepší interpretaci koeficientů.
Klíčové kroky přípravy:
- Zkontrolujte chybějící hodnoty a odlehlé body.
- Zakódujte kategoriální proměnné.
- Rozdělte výběr:
train_test_split(X, y, test_size=0.2, random_state=42). - Normalizujte:
StandardScaler().fit_transform(X_train).
Implementace na datové sadě Advertising
Datová sada: 200 pozorování, prodeje (Sales) z rozpočtů TV, rozhlasu, novin.
Import a načtení
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"Velikost dat: {df.shape}")
Prvních několik řádků:
| TV | Radio | Newspaper | Sales |
|-------|-------|-----------|-------|
| 230.1 | 37.8 | 69.2 | 22.1 |
| 44.5 | 39.3 | 45.1 | 10.4 |
EDA a korelace
Statistika:
| | TV | Radio | Newspaper | Sales |
|-------|--------|-------|-----------|-------|
| mean | 147.04 | 23.26 | 30.55 | 14.02 |
| std | 85.85 | 14.85 | 21.78 | 5.22 |
Korelace s Sales: TV (0,78), Radio (0,58), Newspaper (0,23).
Scatter grafy ukazují silnou lineární závislost mezi TV-Sales a Radio-Sales, slabou u Newspaper.
Trénování modelu
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"Průsečík: {model.intercept_:.4f}")
for name, coef in zip(X.columns, model.coef_):
print(f"{name}: {coef:.4f}")
Výsledek:
- Průsečík: 2,9791
- TV: 0,0447
- Radio: 0,1892
- Newspaper: 0,0028
Interpretace: Každý přírůstek 1 000 $ v rozpočtu TV znamená přírůstek o 44,7 prodejů, u rozhlasu o 189,2; noviny jsou statisticky nevýznamné.
Hodnocení modelu
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}")
Metriky:
- MSE: 3,17
- RMSE: 1,78
- MAE: 1,46
- R²: 0,8994
R² = 0,90 znamená, že model vysvětluje 90 % variability. RMSE a MAE poskytují měřítko chyby v jednotkách prodejů.
Diagnostika reziduí
- Histogram reziduí: symetrický kolem 0.
- Rezidua vs předpovědi: žádné vzory (homoskedasticita).
- Body na scatter grafu y_test vs y_pred leží blízko diagonály.
Co je důležité
- Mnohonásobná regrese izoluje efekt předpovědních proměnných, kontroluje konfondery.
- Koeficient Newspaper ≈ 0 ukazuje jeho nevýznamnost v modelu.
- R² = 0,90 — vysoká vysvětlivost, ale ověřte multikolinearitu pomocí VIF.
- Vždy analyzujte rezidua pro ověření předpokladů linearity a normálnosti.
- Standardizace není nutná pro OLS, ale užitečná pro interpretaci.
— Editorial Team
Zatím žádné komentáře.