Что такое логистическая регрессия
Что проверяют
Понимаете ли вы, что логистическая регрессия это модель классификации с вероятностью на выходе, как она обучается и как читать её коэффициенты. Следом обычно спрашивают, почему функция потерь не MSE, или как быть с несбалансированными классами.
Как отвечать
Модель берёт линейную комбинацию z = w·x + b и пропускает её через сигмоиду 1 / (1 + e^(-z)), получая вероятность класса 1. Эквивалентно: логарифм шансов (logit) линейно зависит от признаков, поэтому граница решений это гиперплоскость.
- обучение: максимизация правдоподобия, то есть минимизация log loss (бинарной кросс-энтропии). Она выпуклая, минимум один, но формулы для него нет, веса ищут численно: L-BFGS, метод Ньютона, SGD;
- почему не MSE: вместе с сигмоидой квадратичная ошибка теряет выпуклость, а градиент затухает на уверенных ошибках;
- коэффициенты:
exp(w_i)это отношение шансов при росте признака на единицу. Влияние на саму вероятность нелинейно и зависит от точки; - порог: 0.5 не закон, его подбирают по precision и recall, а качество смотрят по ROC AUC, PR AUC, log loss;
- много классов: softmax (multinomial) или one-vs-rest.
В scikit-learn LogisticRegression по умолчанию регуляризована L2 с C=1.0, где C обратна силе штрафа. Поэтому признаки масштабируют StandardScaler в Pipeline, иначе штраф бьёт по ним неравномерно. Для дисбаланса есть class_weight="balanced". Нужны p-значения и доверительные интервалы, берут Logit из statsmodels, sklearn их не считает.
Нелинейность модель сама не ловит, её добавляют признаками: взаимодействия, полиномы, биннинг. Зато она быстрая, интерпретируемая и обычно неплохо откалибрована, поэтому живёт в скоринге и служит бейзлайном.
Где спотыкаются
Говорят, что это регрессия для предсказания чисел. Название историческое, по сути это классификатор.
Забывают про регуляризацию по умолчанию и удивляются, что коэффициенты sklearn не совпадают со statsmodels. Туда же сравнение весов у немасштабированных признаков.
Оценивают модель по accuracy при 2% положительного класса. Модель, которая всегда отвечает «0», получит 98% и будет бесполезна.