Рубрики
Без рубрики

Понимание кривых ROC с помощью Python

Автор оригинала: Guest Contributor.

В нынешнюю эпоху, когда Наука о данных/ИИ процветает, важно понять, как машинное обучение используется в отрасли для решения сложных бизнес-задач. Чтобы выбрать, какую модель машинного обучения следует использовать в производстве, выбирается метрика выбора, по которой оцениваются различные модели машинного обучения.

Одной из наиболее часто используемых метрик в настоящее время является кривая AUC-ROC (Площадь под кривой – Рабочие характеристики приемника). ROC-кривые довольно легко понять и оценить, если есть хорошее понимание матрицы путаницы и различных видов ошибок.

В этой статье я объясню следующие темы:

  • Введение в матрицу путаницы и различные статистические данные, вычисленные на ней
  • Определения TP, FN, TN, FP
  • Ошибки типа 1 и типа 2
  • Статистика, вычисленная по данным Recall, Precision, F-Score
  • Введение в кривую AUC ROC
  • Различные сценарии с ROC кривой и выбором модели
  • Пример кривой ROC с Python

Введение в матрицу путаницы

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

Матрица путаницы

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

Определения TP, FP, TN и FN

Давайте разберемся в терминологии, которую мы будем очень часто использовать и в понимании ROC-кривых:

  • TP Positive – Модель правильно предсказала положительный класс, чтобы быть положительным классом.
  • FP Positive – Модель неправильно предсказала отрицательный класс, чтобы быть положительным классом.
  • FN Negative – Модель неправильно предсказала положительный класс, чтобы быть отрицательным классом.
  • TN Negative – Модель правильно предсказала отрицательный класс, чтобы быть отрицательным классом.

Ошибки типа 1 и типа 2

Здесь можно выделить два типа ошибок:

  • Ошибка типа 1: Модель предсказала, что экземпляр будет положительным классом, но это неверно. Это Ложноположительный результат (FP).

  • Ошибка типа 2: Модель предсказала, что экземпляр будет отрицательным классом, но это неверно. Это ложное отрицание (FN).

Статистика, вычисленная по матрице путаницы

Для того чтобы оценить модель, вычисляются некоторые основные факты/статистические данные из представления матрицы путаницы.

Точность - Отзыв

Вспомните : Из всех положительных классов, сколько экземпляров, где определены правильно.

Recall = TP / (TP + FN)

Точность : Из всех предсказанных положительных примеров, сколько было предсказано правильно.

Precision = TP / (TP + FP)

F-Score : Исходя из точности и отзыва, F-Мера вычисляется и иногда используется в качестве метрики. F – Мера есть не что иное, как гармоническое среднее Точности и Отзыва.

F-Score = (2 * Recall * Precision) / (Recall + Precision)

Введение в кривую AUC – ROC

Кривая AUC–ROC является метрикой выбора модели для задачи классификации bi–multi class. ROC-это кривая вероятности для различных классов. ROC говорит нам, насколько хороша модель для различения данных классов с точки зрения предсказанной вероятности.

Типичная кривая ROC имеет ложноположительную скорость (FPR) на оси X и Истинную положительную скорость (TPR) на оси Y.

РПЦ

Область, охватываемая кривой, – это область между оранжевой линией (ROC) и осью. Эта область покрыта AUC. Чем больше охватываемая область, тем лучше модели машинного обучения различают данные классы. Идеальное значение для AUC-1.

Различные сценарии с ROC кривой и выбором модели

Сценарий №1 (Наилучший Сценарий)

Для любой классификационной модели наилучший сценарий-это когда существует четкое различие между двумя/всеми классами.

S1

На приведенном выше графике показана предсказанная вероятность класса для обоих классов 0 и 1. Порог равен 0,5, что означает, что если прогнозируемая вероятность класса для экземпляра меньше 0,5, то этот экземпляр прогнозируется как экземпляр класса 0. Если вероятность класса для экземпляра равна или больше 0,5, экземпляр классифицируется как экземпляр класса 1.

Кривая AUC-ROC для этого случая выглядит следующим образом.

S1 ROC

Как мы видим здесь, у нас есть четкое различие между этими двумя классами, в результате чего мы имеем AUC 1. Здесь достигается максимальная площадь между кривой ROC и базовой линией.

Сценарий № 2 (Случайная догадка)

В том случае, когда оба распределения классов просто имитируют друг друга, AUC равен 0,5. Другими словами, наша модель на 50% точна для экземпляров и их классификации. В этом случае модель вообще не обладает способностью к различению.

S2 ROC

Мы видим, что между этими двумя классами нет четкой дискриминации.

S2

Из диаграммы кривой ROC AUC видно, что площадь между ROC и осью равна 0,5. Это все еще не худшая модель, но она делает случайное предположение, как это сделал бы человек.

Сценарий № 3 (Наихудший Сценарий)

Если модель полностью неправильно классифицировала классы, это наихудший случай.

S3

Полностью противоположный наилучшему сценарию (сценарий № 1), в этом случае все экземпляры класса 1 неправильно классифицируются как класс 0, а все экземпляры класса 0 неправильно классифицируются как класс 1.

S3 РОК

В результате мы получаем AUC равным 0, что является наихудшим сценарием.

Сценарий № 4 (Отраслевой/Нормативный Сценарий)

В обычном отраслевом сценарии лучшие случаи никогда не наблюдаются. Мы никогда не получаем четкого различия между этими двумя классами.

S4

В этом случае, как уже отмечалось, мы имеем некоторое перекрытие, и это вносит ошибки типа 1 и типа 2 в прогноз модели. В этом случае мы получаем AUC где-то между 0,5 и 1.

Пример с Python

Давайте посмотрим пример ROC-кривых с некоторыми данными и классификатором в действии!

Шаг 1: Импорт библиотек

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
# roc curve and auc score
from sklearn.datasets import make_classification
from sklearn.neighbors import KNeighborsClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_curve
from sklearn.metrics import roc_auc_score

Шаг 2: Определение функции python для построения кривых ROC.

def plot_roc_curve(fpr, tpr):
    plt.plot(fpr, tpr, color='orange', label='ROC')
    plt.plot([0, 1], [0, 1], color='darkblue', linestyle='--')
    plt.xlabel('False Positive Rate')
    plt.ylabel('True Positive Rate')
    plt.title('Receiver Operating Characteristic (ROC) Curve')
    plt.legend()
    plt.show()

Шаг 3: Создайте образец данных.

data_X, class_label = make_classification(n_samples=1000, n_classes=2, weights=[1,1], random_state=1)

Шаг 4: Разделите данные на обучающие и тестовые субданные.

trainX, testX, trainy, testy = train_test_split(data_X, class_label, test_size=0.3, random_state=1)

Шаг 5: Установите модель на данные поезда.

model = RandomForestClassifier()
model.fit(trainX, trainy)

Шаг 6: Прогнозирование вероятностей для тестовых данных.

probs = model.predict_proba(testX)

Шаг 7: Сохраняйте вероятности только положительного класса.

probs = probs[:, 1]

Шаг 8: Вычислите балл AUC.

auc = roc_auc_score(testy, probs)
print('AUC: %.2f' % auc)

Выход:

AUC: 0.95

Шаг 9: Получите кривую ROC.

fpr, tpr, thresholds = roc_curve(testy, probs)

Шаг 10: Постройте кривую ROC, используя нашу определенную функцию

plot_roc_curve(fpr, tpr)

Выход:

Выход

Вывод

Кривая AUC-ROC является одной из наиболее часто используемых метрик для оценки производительности алгоритмов машинного обучения, особенно в тех случаях, когда мы имеем несбалансированные наборы данных. В этой статье мы подробно рассмотрим кривые ROC и связанные с ними понятия. Наконец, мы продемонстрировали, как ROC-кривые могут быть построены с помощью Python.