Логистическая регрессия для аналитика
Карьерник — квиз-тренажёр в 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+ вопросами для собесов.