Zpět na domů

Vícenásobná regrese v Pythonu: scikit-learn

Článek rozebírá vícenásobnou lineární regresí na datasetu Advertising. Jsou popsány matematické základy, příprava dat, trénování modelu LinearRegression, metriky kvality (R²=0.90) a diagnostika reziduí.

Postavte vícenásobnou regresí: TV, Radio, Sales
Advertisement 728x90

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ₙ + ε

Google AdInline article slot

β₀ — 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í.

Google AdInline article slot

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.

Google AdInline article slot

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

Advertisement 728x90

Číst dál