Лекция 5. Логистическая регрессия и
вероятностная классификация
Цель лекции. Изучить принципы логистической регрессии как
алгоритма классификации, понять механизм вычисления вероятностей принадлежности
объектов к определённому классу. Рассмотреть сигмоидную функцию, логиты,
бинарную кросс-энтропию, порог классификации, калибровку вероятностей и
особенности работы с несбалансированными данными.
Ключевые понятия: логистическая регрессия, бинарная классификация,
сигмоида, логит, отношение шансов, бинарная кросс-энтропия, порог
классификации, матрица ошибок, калибровка вероятностей, дисбаланс классов.
1. Логистическая регрессия: назначение и
принцип работы
Логистическая регрессия (Logistic
Regression) — алгоритм машинного обучения с учителем,
предназначенный для решения задач классификации. Несмотря на название, он
прогнозирует не непрерывную величину, а вероятность принадлежности объекта к
классу.
Например, модель может определять, является ли
письмо спамом, вернёт ли клиент кредит или уйдёт ли пользователь из сервиса.
При бинарной классификации целевая переменная
принимает два значения:
![]()
Значение 0 обычно обозначает отрицательный
класс, а значение 1 — положительный.
Сначала модель вычисляет линейную комбинацию
признаков:

Здесь
—
линейная комбинация,
—
свободный коэффициент,
—
коэффициенты модели,
—
признаки,
—
количество признаков. Затем значение
преобразуется в вероятность с помощью
сигмоидной функции.
Схема работы: признаки → линейная комбинация →
сигмоида → вероятность класса.
2. Сигмоидная функция и вероятностная
интерпретация
Сигмоидная функция (Sigmoid
Function) преобразует любое действительное число в
значение от 0 до 1:
![]()
Вероятность положительного класса:
![]()
Вероятность отрицательного класса:
![]()
Сигмоида имеет S-образную форму. При
вероятность равна 0,5. При росте
она
приближается к 1, при уменьшении — к 0.
|
Значение z |
Вероятность |
|
−3 |
0,047 |
|
−1 |
0,269 |
|
0 |
0,500 |
|
1 |
0,731 |
|
3 |
0,953 |
Если модель прогнозирует вероятность ухода
клиента 0,85, это означает оценочную вероятность ухода 85%. Насколько хорошо
такие оценки соответствуют реальным частотам событий, показывает калибровка.
Логиты и отношение шансов
Отношение шансов (Odds) определяется формулой:
![]()
Логарифм отношения шансов называется логитом
(Logit):
![]()
В логистической регрессии логит линейно зависит
от признаков:
![]()
Коэффициент
показывает изменение логарифма шансов при увеличении
признака на одну единицу при неизменных остальных признаках. Величина
показывает, во сколько раз при этом изменяются
шансы. Вероятность и шансы — не одно и то же.
3. Обучение модели и бинарная
кросс-энтропия
Для обучения логистической регрессии
используется бинарная кросс-энтропия (Binary Cross-Entropy, BCE). Она
измеряет несоответствие прогнозируемых вероятностей фактическим классам.
Для одного наблюдения:
![]()
Для обучающей выборки из
наблюдений:

Если фактический класс равен 1:
![]()
Если фактический класс равен 0:
![]()
Модель получает небольшой штраф за высокую
вероятность правильного класса и большой штраф за уверенный неправильный
прогноз. Например, для объекта класса 1 вероятность 0,95 приводит к небольшой
потере, а 0,05 — к большой.
В ходе обучения коэффициенты подбираются
численными методами оптимизации. Часто применяется и регуляризация,
ограничивающая величину коэффициентов.
4. Порог классификации и оценка
результатов
Логистическая регрессия возвращает
вероятность, однако для принятия решения часто требуется конкретный класс. Для
этого используется порог классификации
:
![]()
Стандартный порог — 0,5, но он не
всегда оптимален. Например, снижение порога при выявлении мошенничества
помогает обнаружить больше подозрительных операций, но может увеличить число
ложных предупреждений.
Матрица ошибок
|
|
Прогноз: 0 |
Прогноз: 1 |
|
Фактический класс: 0 |
TN — истинно отрицательные |
FP — ложноположительные |
|
Фактический класс: 1 |
FN — ложноотрицательные |
TP — истинно положительные |
Precision показывает долю действительно положительных
объектов среди предсказанных положительных:
![]()
Recall показывает долю обнаруженных положительных
объектов среди всех фактически положительных:
![]()
F1-мера объединяет Precision и Recall:
![]()
Формулы предполагают ненулевые
знаменатели. Выбор порога зависит от того, какая ошибка имеет более серьёзные
последствия.
5. Калибровка вероятностей и дисбаланс классов
Калибровка вероятностей
Калибровка (Calibration) показывает соответствие прогнозируемых
вероятностей фактической частоте событий. Если модель хорошо откалибрована,
среди достаточно большого числа объектов с прогнозом около 0,8 событие должно
происходить примерно в 80% случаев.
Калибровку исследуют с помощью графика
надёжности (Reliability Diagram), сопоставляющего прогнозируемые вероятности и
наблюдаемые частоты. Она особенно важна в задачах оценки риска.
Дисбаланс классов (Class Imbalance) возникает, когда один класс встречается
намного чаще другого.
Например, среди 10 000 банковских операций
только 100 являются мошенническими:
![]()
Модель, всегда предсказывающая отсутствие
мошенничества, покажет Accuracy 99%, но не обнаружит ни одного мошеннического
случая.
Поэтому при дисбалансе важно анализировать
Precision, Recall, F1 и последствия ошибок. В scikit-learn можно использовать
веса классов через параметр class_weight.
6.
Практическая реализация на Python
Библиотека scikit-learn
предоставляет класс LogisticRegression. Рассмотрим пример обучения бинарного
классификатора.
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import (
accuracy_score, precision_score,
recall_score, confusion_matrix
)
X, y = make_classification(
n_samples=500,
n_features=5,
n_informative=3,
n_redundant=0,
random_state=42
)
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42,
stratify=y
)
model = make_pipeline(
StandardScaler(),
LogisticRegression(max_iter=1000)
)
model.fit(X_train, y_train)
probabilities = model.predict_proba(X_test)[:, 1]
threshold = 0.5
predictions = (probabilities >= threshold).astype(int)
print("Accuracy:", accuracy_score(y_test, predictions))
print("Precision:", precision_score(y_test, predictions))
print("Recall:", recall_score(y_test, predictions))
print("Confusion matrix:")
print(confusion_matrix(y_test, predictions))
print("Первые 5 вероятностей:", probabilities[:5])
В примере создаётся искусственный
набор данных и выполняется разделение на обучающую и тестовую выборки. Параметр
stratify=y помогает сохранить пропорции классов. Pipeline объединяет
стандартизацию признаков и модель. Метод fit() обучает модель, а
predict_proba() возвращает вероятности классов.
Для исследования влияния порога
можно выполнить дополнительный эксперимент:
for threshold in [0.3, 0.5, 0.7]:
predictions = (probabilities >=
threshold).astype(int)
print(f"\nПорог:
{threshold}")
print("Precision:",
precision_score(
y_test, predictions,
zero_division=0
))
print("Recall:",
recall_score(
y_test, predictions,
zero_division=0
))
Уменьшение порога обычно позволяет
обнаруживать больше положительных объектов, но может увеличивать число
ложноположительных прогнозов. Порог следует выбирать на валидационных данных, а
не подбирать по окончательной тестовой выборке.
7. Практическое значение и выводы
Логистическая регрессия широко
применяется в бинарной классификации благодаря простоте, эффективности и
интерпретируемости.
В отличие от линейной регрессии, она
оценивает вероятность принадлежности к классу. Для этого линейная комбинация
признаков преобразуется сигмоидной функцией. Обучение основано на минимизации
бинарной кросс-энтропии.
Окончательный класс определяется
порогом, который следует выбирать с учётом стоимости ошибок. При использовании
модели важно учитывать калибровку вероятностей и дисбаланс классов.
Главный результат лекции: понимание того, как логистическая регрессия
вычисляет вероятности, обучается с помощью бинарной кросс-энтропии и использует
порог для принятия решения.