Linear vs logistic regression на собеседовании Data Scientist

Готовься к собесу аналитика как в Duolingo
10 минут в день — SQL, Python, A/B, метрики. 1700+ вопросов в Telegram
Открыть Карьерник в Telegram

Карьерник — Duolingo для аналитиков: 10 минут в день тренируй SQL, Python, A/B, статистику, метрики и ещё 3 темы собеса. 1500+ вопросов в Telegram-боте. Бесплатно.

Зачем разбирать на собесе

Linear / logistic — два самых базовых алгоритма. На собесе DS обязательно: «выведи log-loss из MLE», «зачем sigmoid в logistic», «как интерпретировать коэффициент logistic regression», «когда linear regression врёт». Senior уровень — Bayesian regression, generalized linear models.

Главная боль без понимания — DS использует logistic regression, на вопрос «что такое odds» отвечает «вероятность» — это критическая ошибка интерпретации.

Linear regression: модель и MSE

Модель:

ŷ = w₀ + w₁·x₁ + w₂·x₂ + ... + wₙ·xₙ = w·x + b

Loss — MSE (Mean Squared Error):

MSE = (1/N) · Σ (yᵢ - ŷᵢ)²

Решение в закрытой форме:

w = (XᵀX)⁻¹ Xᵀy

Стоимость O(d³) на инверсию матрицы. На больших d (фичи) — gradient descent, иначе медленно или не влезает в память.

Вариации:

  • Ridge — L2 регуляризация: MSE + λ·||w||². Решение: w = (XᵀX + λI)⁻¹ Xᵀy. Помогает при мультиколлинеарности.
  • Lasso — L1: MSE + λ·||w||₁. Не имеет closed form — coordinate descent или proximal methods. Зануляет коэффициенты.
  • Elastic Net — комбинация L1 + L2.

Допущения:

  • Линейная связь между фичами и target.
  • Гомоскедастичность (постоянная дисперсия ошибок).
  • Нормальное распределение ошибок (для t-test'ов и CI).
  • Отсутствие мультиколлинеарности.
  • Независимость наблюдений.

Logistic regression: sigmoid и log-loss

Модель. Logistic regression предсказывает вероятность класса 1.

P(y=1 | x) = σ(w·x + b)
σ(z) = 1 / (1 + e^(-z))

σ — sigmoid, отображает любое число в (0, 1).

Loss — binary cross-entropy (log-loss):

L = -(1/N) Σ [yᵢ log(p̂ᵢ) + (1-yᵢ) log(1-p̂ᵢ)]

Нет closed form — gradient descent (или его варианты: SGD, Newton-Raphson, IRLS).

Multi-class: softmax регрессия (logistic regression для K классов).

P(y=k | x) = exp(wₖ·x) / Σⱼ exp(wⱼ·x)

MLE для обоих случаев

Оба регрессии можно вывести из maximum likelihood estimation.

Linear (с допущением y ~ N(w·x, σ²)):

log L = -(1/2σ²) Σ (yᵢ - w·xᵢ)² + const

Максимизация log-likelihood = минимизация MSE.

Logistic (Bernoulli y):

log L = Σ [yᵢ log(σ(w·xᵢ)) + (1-yᵢ) log(1-σ(w·xᵢ))]

Максимизация log-likelihood = минимизация log-loss.

Вывод на собесе. Senior-кандидаты должны вывести оба за 5 минут. Это базовый литмус-тест.

Регуляризация L1 / L2 / Elastic Net

В обоих случаях добавляется regularization term к loss:

  • L2 (Ridge): + λ · ||w||₂². Сжимает коэффициенты к нулю (но не до нуля). Хорошо при мультиколлинеарности и большом числе фич.
  • L1 (Lasso): + λ · ||w||₁. Зануляет «лишние» коэффициенты — полезно для feature selection.
  • Elastic Net: + α·||w||₁ + (1-α)·||w||₂². Компромисс — не такой жёсткий как L1, но с feature selection.

Где это в sklearn:

LogisticRegression(penalty='l2', C=1.0)        # C = 1/λ
LogisticRegression(penalty='l1', solver='liblinear')
LogisticRegression(penalty='elasticnet', l1_ratio=0.5, solver='saga')

Стандартизация фич обязательна — без неё регуляризация смещена в пользу больших scale.

Готовься к собесу аналитика как в Duolingo
10 минут в день — SQL, Python, A/B, метрики. 1700+ вопросов в Telegram
Открыть Карьерник в Telegram

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

Linear regression. wᵢ — на сколько изменится y при увеличении xᵢ на 1 при фиксированных остальных. Линейная и легко читаемая.

Logistic regression. Это критический момент.

log(odds(y=1)) = w·x + b
odds = P(y=1) / P(y=0) = exp(w·x + b)

wᵢ — изменение log-odds при увеличении xᵢ на 1. exp(wᵢ) — odds ratio.

Если w_age = 0.1, exp(0.1) ≈ 1.105
→ при увеличении возраста на 1 год odds того, что y=1, растёт в 1.105 раза
→ это НЕ "вероятность растёт на 10%"

Odds ratio vs probability: odds 4:1 — это P=0.8, не P=4. Путаница частая.

Marginal effect. На малых вероятностях (P → 0) odds ≈ probability. На P близких к 0.5 разница большая. Поэтому интерпретация в терминах вероятности нелинейна.

Допущения и проверка

Linear regression проверяй:

  • Q-Q plot residuals vs нормальное (нормальность).
  • Residuals vs predicted (гомоскедастичность).
  • VIF (Variance Inflation Factor) для мультиколлинеарности.
  • Durbin-Watson для автокорреляции (важно для time series).

Logistic regression проверяй:

  • Multicollinearity (VIF).
  • Linearity of logit — отношение log-odds к фичам линейно.
  • No outliers/high leverage points.
  • Adequate sample size — дефолт правило: ≥ 10 событий на каждую фичу (rule of thumb).

Частые ошибки

Считать wᵢ в logistic regression «изменением вероятности». Это log-odds, не вероятность. Используй exp(wᵢ) для odds ratio.

Не масштабировать фичи для regularization. L2 будет жёстче штрафовать колонки с большими значениями.

Linear regression на бинарном target. Может работать, но даёт предсказания вне [0,1] и нарушает гомоскедастичность. Используй logistic.

Logistic regression на multiclass без softmax. В sklearn по умолчанию OvR (one-vs-rest). Для true multinomial — multi_class='multinomial', solver='lbfgs'.

Игнорировать имбаланс. На сильном дисбалансе logistic regression смещена. Помогают class_weight='balanced', threshold-tuning, AP-метрики.

Делать feature selection на test. Lasso для feature selection нужно делать на train (или CV), не подсматривая test.

**Сравнивать coefficients без standardization.** Без нормализации w_ageиw_income` несравнимы по «важности».

Использовать R² на logistic. R² для regression. Для classification — log-loss, AUC, F1, accuracy (если сбалансировано).

Связанные темы

FAQ

Можно ли использовать MSE в logistic regression?

Технически — да, но получится non-convex loss с плохими свойствами. Log-loss выводится из MLE Bernoulli и даёт convex optimization.

Зачем sigmoid, а не другая функция?

Потому что sigmoid обратна к log-odds (logit link function). Это естественный link для Bernoulli в семействе GLM. Альтернативы — probit (CDF нормали), но интерпретация хуже.

Когда linear regression лучше деревьев?

На малых данных, при линейной связи, при нужде в интерпретации коэффициентов и доверительных интервалах. Деревья на маленьких данных переобучаются.

Что такое perfect separation в logistic?

Когда фича идеально разделяет классы — коэффициент стремится к бесконечности, loss идёт в 0 без сходимости. Лечение: регуляризация.

Линеарная регрессия может предсказать вне [0,1]?

Да, легко. Поэтому на binary target она плоха — предсказывает -0.3 или 1.5. Logistic ограничена sigmoid.

Это официальная информация?

Нет. Статья основана на классических работах (Hastie 2009 «ESL», Bishop 2006 «PRML»), документации scikit-learn.


Тренируйте Data Science — откройте тренажёр с 1500+ вопросами для собесов.