
ROC кривая (Receiver Operating Characteristic) позволяет визуально оценить качество бинарного классификатора по соотношению истинно положительных и ложноположительных результатов. В Python построение ROC кривой обычно выполняется с использованием библиотек scikit-learn и matplotlib, что позволяет быстро получить наглядную оценку модели.
Для точного анализа важно использовать предсказанные вероятности, а не готовые классы, поскольку ROC кривая строится на основе пороговых значений, варьирующихся от 0 до 1. Практика показывает, что для небольших наборов данных (до 10 тысяч записей) train_test_split с параметром test_size=0.3 обеспечивает стабильное разделение на обучающую и тестовую выборки без смещения результатов.
При расчете площади под кривой (AUC) рекомендуется проверять несколько моделей одновременно, чтобы выявить оптимальный алгоритм для конкретной задачи. Например, LogisticRegression и RandomForestClassifier показывают различное распределение вероятностей, что наглядно отражается на форме ROC кривой и значении AUC.
В этой статье представлены практические примеры кода, начиная с подготовки данных, обучения классификатора и получения предсказаний, до построения графика ROC и расчета AUC. Такой подход позволяет сразу оценить качество модели и использовать полученные результаты для сравнения нескольких алгоритмов без дополнительной подготовки.
Установка и подключение необходимых библиотек для ROC анализа

Для построения ROC кривой в Python требуется несколько ключевых библиотек: scikit-learn для расчетов показателей классификации, matplotlib для визуализации и pandas для работы с данными. Их установка выполняется через pip:
Команды для установки:
| pip install scikit-learn |
| pip install matplotlib |
| pip install pandas |
После установки библиотеки необходимо подключить в коде. Для ROC анализа рекомендуется использовать следующий набор импортов:
| import pandas as pd |
| from sklearn.model_selection import train_test_split |
| from sklearn.metrics import roc_curve, roc_auc_score |
| from sklearn.linear_model import LogisticRegression |
| import matplotlib.pyplot as plt |
Использование конкретных классов и функций, таких как roc_curve и roc_auc_score, позволяет рассчитывать TPR, FPR и AUC без дополнительной подготовки данных. train_test_split помогает корректно разделить набор данных для обучения и тестирования модели, что критично для достоверности ROC кривой.
Подготовка данных и разделение на обучающую и тестовую выборки
Для построения ROC кривой необходимо иметь корректно подготовленные данные. Начинаем с загрузки набора данных с помощью pandas и проверки наличия пропущенных значений. Рекомендуется удалять или заполнять NaN значения, чтобы классификатор получал полный набор признаков.
Признаки и целевая переменная выделяются отдельно. Например, для набора данных с бинарной классификацией столбец target используется как целевая переменная, а остальные столбцы – признаки.
Разделение данных на обучающую и тестовую выборки выполняется функцией train_test_split. Практический подход: использовать test_size=0.3 и random_state=42 для воспроизводимости результатов:
Пример кода:
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
Такой разбор обеспечивает баланс между размером обучающей выборки для надежного обучения модели и размером тестовой выборки для точной оценки ROC кривой и AUC. Для несбалансированных классов рекомендуется дополнительно использовать параметр stratify=y, чтобы сохранить распределение классов в обеих выборках.
Обучение классификатора для построения ROC кривой

Для построения ROC кривой требуется классификатор, способный выдавать вероятности принадлежности объектов к классам. Наиболее распространенный выбор – LogisticRegression или RandomForestClassifier из библиотеки scikit-learn.
При использовании LogisticRegression рекомендуется установить параметр solver=’liblinear’ для небольших наборов данных и max_iter=1000, чтобы избежать сходимости:
Пример кода:
from sklearn.linear_model import LogisticRegression
model = LogisticRegression(solver=’liblinear’, max_iter=1000)
model.fit(X_train, y_train)
Для RandomForestClassifier важно настроить количество деревьев через параметр n_estimators и задать random_state=42 для воспроизводимости:
Пример кода:
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)
После обучения классификатора можно использовать метод predict_proba, который возвращает вероятности принадлежности объектов к классам. Эти значения необходимы для построения ROC кривой и расчета показателя AUC.
Вычисление вероятностей и предсказаний для ROC кривой

Для построения ROC кривой необходимы предсказанные вероятности принадлежности объектов к положительному классу. Используются следующие шаги:
- Применить метод predict_proba обученной модели к тестовой выборке.
- Выделить вероятности для положительного класса (обычно второй столбец массива).
- Использовать эти вероятности для расчета TPR, FPR и построения ROC кривой.
Пример кода:
- probs = model.predict_proba(X_test)
- y_probs = probs[:, 1] # вероятности положительного класса
Для моделей, не поддерживающих predict_proba, можно использовать decision_function для получения значений решающей функции. Эти значения также подходят для построения ROC кривой.
Рекомендации:
- Использовать вероятности, а не предсказанные классы, чтобы ROC кривая отражала чувствительность модели при различных порогах.
- Для несбалансированных классов проверять распределение вероятностей, чтобы избежать смещений в расчетах TPR и FPR.
- Сохранять массив вероятностей для последующих сравнений нескольких моделей.
Построение ROC кривой с помощью matplotlib и scikit-learn

Для построения ROC кривой используются функции roc_curve и auc из библиотеки scikit-learn. На вход передаются истинные значения классов и вероятности положительного класса.
Пример кода:
from sklearn.metrics import roc_curve, auc
fpr, tpr, thresholds = roc_curve(y_test, y_probs)
roc_auc = auc(fpr, tpr)
Для визуализации ROC кривой используется matplotlib:
Пример кода:
import matplotlib.pyplot as plt
plt.figure(figsize=(8,6))
plt.plot(fpr, tpr, color=’blue’, label=’ROC curve (AUC = %0.2f)’ % roc_auc)
plt.plot([0, 1], [0, 1], color=’gray’, linestyle=’—‘)
plt.xlabel(‘Ложноположительные результаты (FPR)’)
plt.ylabel(‘Истинноположительные результаты (TPR)’)
plt.title(‘ROC кривая’)
plt.legend(loc=’lower right’)
plt.show()
Рекомендации по построению:
- Использовать единый цвет и толщину линии для каждой модели при сравнении нескольких ROC кривых.
- Добавлять пунктирную линию y=x для визуального отображения случайного классификатора.
- Подписывать кривые с указанием значения AUC для быстрого сравнения моделей.
Расчет AUC и интерпретация результатов

AUC (Area Under Curve) отражает площадь под ROC кривой и показывает способность модели различать положительные и отрицательные классы. Значение AUC варьируется от 0 до 1, где 0.5 соответствует случайной модели, а 1 – идеальной классификации.
Для расчета используется функция roc_auc_score из scikit-learn:
Пример кода:
from sklearn.metrics import roc_auc_score
auc_value = roc_auc_score(y_test, y_probs)
print(‘AUC:’, auc_value)
Рекомендации по интерпретации:
- AUC ≥ 0.9 – высокая способность классификации;
- 0.7 ≤ AUC < 0.9 – средний уровень различения;
- 0.5 < AUC < 0.7 – низкая различимость классов.
Для сравнительного анализа нескольких моделей вычисляется AUC для каждой и строится ROC кривая с разными цветами, чтобы визуально определить, какая модель обеспечивает наибольшую точность при варьировании порога классификации.
Сравнение ROC кривых разных моделей классификации

Сравнение ROC кривых позволяет определить, какой классификатор лучше различает положительные и отрицательные классы при разных порогах. Для этого строятся кривые нескольких моделей на одной диаграмме и рассчитываются значения AUC.
Практический подход:
- Обучить несколько моделей на одной обучающей выборке.
- Вычислить вероятности положительного класса с помощью predict_proba или decision_function.
- Построить ROC кривые для каждой модели с разными цветами и добавить легенду с AUC.
Пример кода:
- fpr_lr, tpr_lr, _ = roc_curve(y_test, y_probs_lr)
- fpr_rf, tpr_rf, _ = roc_curve(y_test, y_probs_rf)
- plt.plot(fpr_lr, tpr_lr, label=’Logistic Regression AUC=%.2f’ % auc_lr)
- plt.plot(fpr_rf, tpr_rf, label=’Random Forest AUC=%.2f’ % auc_rf)
Рекомендации:
- Использовать одинаковый масштаб осей для корректного сравнения.
- Для несбалансированных классов проверять распределение положительных и отрицательных объектов.
- Сравнение AUC помогает быстро оценить относительное качество моделей без анализа отдельных точек кривых.
Сохранение и визуализация ROC кривой для отчета

После построения ROC кривой важно сохранить график для отчета или презентации. Для этого используется метод savefig из matplotlib с указанием формата файла и разрешения.
Пример кода:
plt.figure(figsize=(8,6))
plt.plot(fpr, tpr, color=’blue’, label=’ROC curve (AUC = %0.2f)’ % roc_auc)
plt.plot([0, 1], [0, 1], color=’gray’, linestyle=’—‘)
plt.xlabel(‘Ложноположительные результаты (FPR)’)
plt.ylabel(‘Истинноположительные результаты (TPR)’)
plt.title(‘ROC кривая’)
plt.legend(loc=’lower right’)
plt.savefig(‘roc_curve.png’, dpi=300)
plt.show()
Рекомендации по визуализации для отчета:
- Использовать разрешение не менее 300 dpi для печатной версии.
- Сохранять график в форматах PNG или PDF для совместимости с отчетами и презентациями.
- Добавлять подписи осей, легенду с указанием AUC и пунктирную линию y=x для наглядного отображения случайного классификатора.
- При сравнении нескольких моделей использовать разные цвета и стили линий для каждого классификатора.
Вопрос-ответ:
Что такое ROC кривая и для чего она используется в Python?
ROC кривая (Receiver Operating Characteristic) отображает зависимость истинноположительных (TPR) и ложноположительных (FPR) результатов классификатора при изменении порога. В Python ее строят с помощью библиотеки scikit-learn, что позволяет визуально оценить качество бинарной модели и сравнивать несколько алгоритмов по способности различать классы.
Какие данные нужны для построения ROC кривой?
Для построения ROC кривой необходимы два массива: y_true — истинные метки классов, и y_score — вероятности принадлежности объектов к положительному классу. Метки можно получить из столбца целевой переменной, а вероятности — с помощью метода predict_proba обученной модели. Для несбалансированных классов рекомендуется использовать параметр stratify при разделении выборки.
Как рассчитать AUC и что это показывает?
AUC (Area Under Curve) — площадь под ROC кривой, которая показывает способность модели различать положительные и отрицательные классы. Значение AUC варьируется от 0.5 до 1, где 0.5 соответствует случайной модели, а 1 — идеальной. В Python расчет выполняется через функцию roc_auc_score из scikit-learn, передавая туда истинные метки и вероятности.
Можно ли сравнивать несколько моделей на одной ROC кривой?
Да, можно строить ROC кривые разных моделей на одном графике для визуального сравнения. Для каждой модели вычисляются FPR и TPR, а затем кривые наносятся разными цветами с указанием AUC. Такой подход помогает определить, какая модель лучше различает классы при разных порогах классификации.
Как сохранить ROC кривую для отчета или презентации?
После построения графика с помощью matplotlib можно использовать метод savefig, указав имя файла и разрешение (например, dpi=300). Рекомендуется сохранять в форматах PNG или PDF, добавлять подписи осей, легенду с AUC и пунктирную линию y=x для наглядности. При сравнении нескольких моделей стоит использовать разные цвета и стили линий.
Как правильно подготовить данные для построения ROC кривой в Python?
Для построения ROC кривой необходимо разделить данные на признаки и целевую переменную. После этого следует разделить набор на обучающую и тестовую выборки с помощью train_test_split, желательно использовать параметр stratify, если классы несбалансированы. Все пропущенные значения должны быть удалены или заполнены, а категориальные признаки преобразованы в числовой формат. После обучения модели метод predict_proba позволяет получить вероятности положительного класса, необходимые для построения кривой.
Какие ошибки чаще всего возникают при построении ROC кривой и как их избежать?
Частая ошибка — использование предсказанных классов вместо вероятностей, что делает кривую некорректной. Еще одна ошибка — несбалансированные данные без параметра stratify, что искажает TPR и FPR. Также важно проверять размер тестовой выборки: слишком маленькая выборка может давать нестабильные значения AUC. Для моделей без predict_proba следует использовать decision_function. Правильная подготовка данных и использование вероятностей позволяют получить точную и информативную ROC кривую.
