Как построить кривую ROC для логистической регрессии на Python?

ROC-кривая (Receiver Operating Characteristic) — это инструмент, широко используемый для оценки качества бинарных классификаторов. В контексте логистической регрессии, ROC-кривая помогает понять, насколько хорошо ваша модель различает два класса. Практическое знание построения ROC-кривой и расчета AUC (Area Under the Curve) является важным навыком для специалистов в области анализа данных, особенно в машинном обучении и статистическом анализе.

Основы логистической регрессии

Логистическая регрессия — это метод бинарной классификации, который предсказывает вероятность принадлежности наблюдения к одному из двух классов. Модель основывается на логистической функции, которая преобразует линейную комбинацию входных переменных в значение вероятности от 0 до 1.

Пример реализации логистической регрессии с использованием библиотеки scikit-learn:

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score

# Генерация случайных данных для примера
np.random.seed(0)
X = np.random.rand(100, 2)
y = (X[:, 0] + X[:, 1] > 1).astype(int)

# Разделение данных на обучающую и тестовую выборки
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# Создание и обучение модели логистической регрессии
model = LogisticRegression(solver='lbfgs')
model.fit(X_train, y_train)

# Предсказание и оценка точности модели
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy:.2f}')

Понимание ROC-кривой

ROC-кривая — это графическое представление, которое показывает зависимость между True Positive Rate (TPR) и False Positive Rate (FPR). TPR (также называемый чувствительностью) представляет собой долю истинно положительных наблюдений среди всех положительных, а FPR — долю ложных положительных среди всех отрицательных наблюдений.

Подготовка данных для построения ROC-кривой

Для построения ROC-кривой необходимо иметь предсказанные вероятности (а не классы) для каждой точки данных. Эти вероятности сравниваются с различными порогами для определения TPR и FPR.

Пример кода для подготовки данных с использованием pandas и traintestsplit:

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression

# Загрузка и подготовка данных
data = pd.read_csv('data.csv')
X = data[['feature1', 'feature2']]
y = data['target']

# Разделение данных на обучающую и тестовую выборки
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# Обучение модели логистической регрессии
model = LogisticRegression(solver='lbfgs')
model.fit(X_train, y_train)

Построение ROC-кривой на Python

Для построения ROC-кривой используется библиотека matplotlib и функция roc_curve из scikit-learn, которая вычисляет значения TPR и FPR.

Пример кода для построения ROC-кривой:

import matplotlib.pyplot as plt
from sklearn.metrics import roc_curve

# Получение предсказанных вероятностей
y_probs = model.predict_proba(X_test)[:, 1]

# Вычисление TPR и FPR
fpr, tpr, _ = roc_curve(y_test, y_probs)

# Построение ROC-кривой
plt.figure()
plt.plot(fpr, tpr, color='blue', label='ROC curve')
plt.plot([0, 1], [0, 1], color='gray', linestyle='--')
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver Operating Characteristic (ROC) Curve')
plt.legend()
plt.show()

Расчет AUC (Area Under the Curve)

AUC (Area Under the Curve) — это метрика, которая оценивает качество модели. AUC равна вероятности того, что случайно выбранное положительное наблюдение будет оценено выше случайно выбранного отрицательного.

Пример кода для расчета AUC:

from sklearn.metrics import roc_auc_score

# Вычисление AUC
auc = roc_auc_score(y_test, y_probs)
print(f'AUC: {auc:.2f}')

Применение ROC-кривых в медицине и маркетинге

ROC-кривые широко используются в медицине для оценки диагностических тестов. В маркетинге они применяются для оценки моделей предсказания оттока клиентов, успеха рекламных кампаний и других задач, связанных с классификацией.

Пример в медицине: диагностика болезней на основе тестов, где высокая чувствительность (TPR) крайне важна для снижения рисков пропуска болезни.

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

Общие ошибки и их исправление

  1. Использование предсказанных классов вместо вероятностей: ROC-кривая строится на основе вероятностей, а не предсказанных классов.
  2. Слишком маленький объем данных: Небольшой объем данных может привести к ненадежным оценкам метрик.
  3. Игнорирование несбалансированных данных: В случае несбалансированных данных TPR и FPR могут быть искажены.

Заключение

Понимание и использование ROC-кривой и AUC — важный навык для специалистов по анализу данных. Эти инструменты помогают лучше оценивать и сравнивать различные модели классификации, что крайне полезно в практических приложениях, таких как медицина и маркетинг.


Добавить комментарий