Что такое регрессия для аналитика

Коротко

Регрессия — метод поиска зависимости между переменными.

Y = f(X) + шум

Где Y — что хотим предсказать, X — что известно.

Для аналитика — инструмент для поиска связей: «какие факторы влияют на revenue?», «что двигает retention?».

Линейная регрессия

Самый простой вид:

Y = a + b₁·X₁ + b₂·X₂ + ... + bₙ·Xₙ + ε
  • Y — target (выручка).
  • X — features (реклама, сезон, платформа).
  • b — коэффициенты.
  • ε — ошибка.

Пример

import pandas as pd
from sklearn.linear_model import LinearRegression

df = pd.read_csv('sales.csv')
X = df[['marketing_spend', 'num_promotions', 'day_of_week']]
y = df['revenue']

model = LinearRegression()
model.fit(X, y)

print('Коэффициенты:', model.coef_)
print('Intercept:', model.intercept_)
print('R²:', model.score(X, y))

Интерпретация коэффициентов

  • b₁ = 5 — увеличение marketing_spend на 1 руб даёт +5 руб revenue.
  • b₂ = -2 — каждая промо-акция снижает revenue на 2 руб.

Важно: это связь, не обязательно причинность. Корреляция vs причинность.

Больше таких примеров с разборами — в Telegram-тренажёре. Короткие сессии, прогресс по темам, объяснения после каждого ответа.

R² (коэффициент детерминации)

Насколько модель объясняет данные (0 до 1):

  • R² = 0.9 — 90% вариации объяснено. Отличная модель.
  • R² = 0.3 — 30%. Средне.
  • R² = 0.05 — плохо.

Внимание: R² можно искусственно «раздуть» добавлением features. Лучше adjusted R².

Логистическая регрессия

Для бинарных target (купит / не купит, churn / not churn):

P(Y=1) = 1 / (1 + exp(-(a + b·X)))

Возвращает вероятность, не число.

from sklearn.linear_model import LogisticRegression

model = LogisticRegression()
model.fit(X, y_binary)
probabilities = model.predict_proba(X_test)[:, 1]

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

Несколько independent переменных:

Y = a + b₁·X₁ + b₂·X₂ + b₃·X₃

Классика. Позволяет контролировать переменные: «как marketing_spend влияет на revenue, при прочих равных».

Типы регрессий

Тип Для чего
Linear Непрерывный Y
Logistic Бинарный Y (0/1)
Poisson Счётчики (количество)
Multinomial Многокатегориальный Y
Ridge / Lasso Регуляризированная (для многих features)
Polynomial Нелинейная зависимость

Проверки модели

1. Residuals

Разница между предсказанием и реальностью. Должны быть нормально распределены, без паттерна.

residuals = y - model.predict(X)
import matplotlib.pyplot as plt
plt.scatter(model.predict(X), residuals)

2. Multicollinearity

Features не должны сильно коррелировать между собой.

import numpy as np
corr = X.corr()
# Ищем корреляции > 0.8

3. Значимость коэффициентов (p-value)

import statsmodels.api as sm
X_ = sm.add_constant(X)
model = sm.OLS(y, X_).fit()
print(model.summary())
# Смотрим p-value для каждого коэффициента

Если готовишься к собесу — бот @kariernik_bot закрывает 80% технических вопросов. SQL, Python, A/B, продуктовые метрики — всё в одном месте.

Зачем аналитику

1. Explaining

«Какие факторы влияют на метрику?» — коэффициенты дают ответ.

2. Forecasting

Предсказание будущих значений (revenue на следующий месяц).

3. Attribution

Multi-touch атрибуция маркетинга — через multivariate регрессию.

4. A/B как регрессия

A/B с ковариатами — регрессия даёт более точный lift, чем простое сравнение средних.

Ограничения

1. Только линейная связь

Если Y зависит от X квадратично или экспоненциально — линейная регрессия не поймает.

Решение: polynomial regression или nonlinear models.

2. Чувствительна к выбросам

Один outlier может сильно сместить коэффициенты.

3. Требует много наблюдений

Для надёжных коэффициентов нужно n ≥ 10 на каждую feature.

4. Не показывает причинность

«Регрессия показала, что мороженое коррелирует с утоплениями» — это не значит, что мороженое топит. Лето топит и мороженое, и людей.

Сложность для аналитика

  • Junior: знать, что такое регрессия, как применить sklearn.
  • Middle: интерпретировать коэффициенты, проверять предположения.
  • Senior: regularization, multicollinearity, feature engineering.

Для чистого DS — деревья и градиентный бустинг часто вытесняют регрессию. Для аналитика — регрессия остаётся потому что интерпретируема.

Читайте также

FAQ

Линейная или логистическая?

Зависит от Y. Непрерывный (revenue) → линейная. Бинарный (churn / no churn) → логистическая.

R² хороший с 0.3?

Зависит от домена. В социальных науках 0.3 — хорошо. В экономике/маркетинге ожидают выше.

Когда не использовать регрессию?

Если связь очевидно нелинейная. Используйте Decision Tree или XGBoost.

sklearn или statsmodels?

sklearn — для ML-предсказаний. statsmodels — для интерпретации (p-values, stderr, CI). Для аналитики чаще statsmodels.