Лекция 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. Практическое значение и выводы

Логистическая регрессия широко применяется в бинарной классификации благодаря простоте, эффективности и интерпретируемости.

В отличие от линейной регрессии, она оценивает вероятность принадлежности к классу. Для этого линейная комбинация признаков преобразуется сигмоидной функцией. Обучение основано на минимизации бинарной кросс-энтропии.

Окончательный класс определяется порогом, который следует выбирать с учётом стоимости ошибок. При использовании модели важно учитывать калибровку вероятностей и дисбаланс классов.

Главный результат лекции: понимание того, как логистическая регрессия вычисляет вероятности, обучается с помощью бинарной кросс-энтропии и использует порог для принятия решения.