Построение ROC кривой в Python с примерами кода

Как построить roc кривую python

Как построить roc кривую python

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 анализа

Для построения 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 кривой

Для построения 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 кривой

Для построения ROC кривой необходимы предсказанные вероятности принадлежности объектов к положительному классу. Используются следующие шаги:

  1. Применить метод predict_proba обученной модели к тестовой выборке.
  2. Выделить вероятности для положительного класса (обычно второй столбец массива).
  3. Использовать эти вероятности для расчета 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 кривой с помощью 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 и интерпретация результатов

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 кривых разных моделей классификации

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

Практический подход:

  1. Обучить несколько моделей на одной обучающей выборке.
  2. Вычислить вероятности положительного класса с помощью predict_proba или decision_function.
  3. Построить 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 кривой для отчета

После построения 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 кривую.

Ссылка на основную публикацию