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

Карьерник — квиз-тренажёр в Telegram с 1500+ вопросами для собесов аналитика. SQL, Python, A/B, метрики. Бесплатно.

Зачем это знать

«Предскажите, купит ли пользователь премиум» — classification problem. Linear regression не подходит (Y binary), нужна logistic. Она — основа churn prediction, fraud detection, conversion modeling.

Middle-аналитик без knowledge logistic regression — редкость в product / marketing analytics.

Короткое объяснение

Logistic regression предсказывает вероятность принадлежности к классу (0/1).

Вместо линейной:

P(Y = 1) = 1 / (1 + e^(-(β0 + β1 × X1 + ...)))

Это sigmoid function — превращает линейную combination в probability [0, 1].

Почему не linear

Linear regression для binary Y:

  • Predicts выходит за [0, 1]
  • Residuals не normal
  • Variance не constant

Logistic решает все три.

Odds и log-odds

Odds

Шансы: P / (1-P).

Если P = 0.8, odds = 4 (4-to-1).

Log-odds

log(P / (1-P)) — логарифм шансов.

Logistic regression моделирует log-odds линейно:

log(P / (1-P)) = β0 + β1 × X1 + ...

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

β1 = 0.5 для X1:

log-odds растёт на 0.5 при увеличении X1 на 1.

Odds multiply на e^0.5 ≈ 1.65 (на 65% больше).

Т.е. «+1 unit of X1 → odds × 1.65».

Odds ratio

e^β — odds ratio. Часто репортится.

OR = 2 → «в 2 раза выше шанс» при +1 unit X.

OR = 0.5 → «в 2 раза ниже шанс».

Пример: churn prediction

log(P_churn / (1-P_churn)) = -2 + 0.5 × months - 0.3 × premium
  • Intercept -2: base log-odds low (low churn if X = 0)
  • months +0.5: каждый месяц → odds × 1.65
  • premium -0.3: premium users → odds × 0.74 (на 26% ниже)

В Python

from sklearn.linear_model import LogisticRegression

model = LogisticRegression().fit(X, y)
prob = model.predict_proba(X_new)[:, 1]  # вероятность класса 1

Или statsmodels:

import statsmodels.api as sm

X = sm.add_constant(X)
model = sm.Logit(y, X).fit()
print(model.summary())
print(np.exp(model.params))  # odds ratios

Оценка качества

Confusion matrix

Pred 0 Pred 1
True 0 TN FP
True 1 FN TP

Метрики

  • Accuracy: (TP + TN) / total
  • Precision: TP / (TP + FP) — «из positive предсказаний — сколько верные»
  • Recall: TP / (TP + FN) — «из actual positives — сколько поймали»
  • F1: harmonic mean precision и recall
  • AUC-ROC: качество ranking

Imbalanced classes → accuracy врёт. Use AUC, F1.

Threshold

Default 0.5. Менять для precision/recall trade-off:

  • Threshold 0.3: больше поймаем (recall ↑), больше FP (precision ↓)
  • Threshold 0.7: меньше поймаем, но точнее

Business-decision, не statistical.

Regularization

L1 (Lasso) — feature selection. L2 (Ridge) — shrinkage.

Используется против overfitting.

Multiclass

Для > 2 классов:

  • One-vs-rest: K binary classifiers
  • Multinomial logistic (softmax)

Assumptions

Легче чем linear:

  • Log-odds linear в X
  • Independence observations
  • No multicollinearity

Не требует normality.

Когда использовать

  • Binary Y (churn, conversion, fraud)
  • Hazard в survival
  • Начало любой classification task (baseline)

Интерпретируемость > performance — logistic beats xgboost.

На собесе

«Когда logistic?» Binary Y, нужна probability, важна интерпретируемость.

«Как интерпретировать coefficient?» Через odds ratio (e^β).

«Отличие от linear?» Predicts probability, sigmoid transform log-odds.

«AUC vs Accuracy?» AUC для imbalanced, ranking quality. Accuracy — для balanced classes.

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

Игнорировать class imbalance

Default threshold 0.5 на 99/1 imbalance → все predicts 0.

Only accuracy

На imbalanced — trivial. Use AUC, F1.

Без scaling features

Regularized logistic чувствителен к scale.

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

FAQ

Probabilities калиброваны?

Обычно ok, но может быть miscalibration. Platt scaling или isotonic regression fix.

Multi-class как?

Multinomial logistic (softmax) или OvR.

Linear или logistic для churn?

Logistic — Y binary.


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