Статья Автор: Деникина Н.В., Деникин А.В.

Множественная линейная регрессия

Что такое множественная регрессия?

Множественная линейная регрессия (Multiple Linear Regression) — это расширение простой линейной регрессии для случая, когда у нас есть несколько независимых переменных (признаков), влияющих на целевую переменную.

Отличие от простой регрессии:


 
Простая регрессия Множественная регрессия
Один признак (X) Несколько признаков (X₁, X₂, ..., Xₙ)
y = w·x + b y = w₁·x₁ + w₂·x₂ + ... + wₙ·xₙ + b
Прямая линия на плоскости Гиперплоскость в многомерном пространстве
 

Математическая модель

Уравнение множественной регрессии:

y = w₁·x₁ + w₂·x₂ + w₃·x₃ + ... + wₙ·xₙ + b

Где:

  • y — целевая переменная (то, что предсказываем)
  • x₁, x₂, ..., xₙ — признаки (независимые переменные)
  • w₁, w₂, ..., wₙ — коэффициенты (веса) для каждого признака
  • b — свободный член (intercept, смещение)

В матричной форме:

y = X·w + b

Где:

  • X — матрица признаков размера (n_samples, n_features)
  • w — вектор коэффициентов размера (n_features,)
  • b — скаляр (одно число)

Практический пример

Представим, что мы предсказываем цену квартиры:

цена = 0.5·площадь + 8·комнаты - 0.3·этаж - 2·расстояние_до_метро + 15

Интерпретация:

  • 0.5 → каждый м² добавляет 0.5 тыс. руб.
  • 8 → каждая комната добавляет 8 тыс. руб.
  • -0.3 → каждый этаж вверх уменьшает цену на 0.3 тыс. руб.
  • -2 → каждый км до метро уменьшает цену на 2 тыс. руб.
  • 15 → базовая цена 15 тыс. руб.

Пример расчета:

Квартира: 60 м², 2 комнаты, 5 этаж, 1 км до метро

цена = 0.5·60 + 8·2 - 0.3·5 - 2·1 + 15
     = 30 + 16 - 1.5 - 2 + 15
     = 57.5 тыс. руб.

Реализация в sklearn

Базовый пример:

import numpy as np
from sklearn.linear_model import LinearRegression

# Данные: [площадь, комнаты, этаж, до_метро]
X = np.array([
    [50, 1, 3, 0.5],
    [60, 2, 5, 1.0],
    [70, 2, 7, 1.5],
    [80, 3, 4, 0.8],
])

# Целевая переменная: цена
y = np.array([35, 40, 43, 50])

# Создание и обучение модели
model = LinearRegression()
model.fit(X, y)

# Получение коэффициентов
print("Коэффициенты:", model.coef_)
# Например: [0.38, 2.0, -0.37, -1.9]

print("Intercept:", model.intercept_)
# Например: 14.5

# Предсказание
new_apartment = np.array([[65, 2, 6, 1.2]])
price = model.predict(new_apartment)
print(f"Цена: {price[0]:.2f} тыс. руб.")

Реализация того же только с pandas DataFrame:

from sklearn.linear_model import LinearRegression
import pandas as pd

# Данные в виде DataFrame
df = pd.DataFrame({
    'area': [50, 60, 70, 80],
    'rooms': [1, 2, 2, 3],
    'floor': [3, 5, 7, 4],
    'metro_distance': [0.5, 1.0, 1.5, 0.8],
    'price': [35, 40, 43, 50]
})

# Признаки и целевая переменная
X = df[['area', 'rooms', 'floor', 'metro_distance']]
y = df['price']

# Обучение
model = LinearRegression()
model.fit(X, y)

# Красивый вывод коэффициентов
for feature, coef in zip(X.columns, model.coef_):
    print(f"{feature}: {coef:.3f}")
Печать