Scraper Обновлено: 28 August, 2019

Полное руководство по бинарной классификации метрик

  Перевод   Ссылка на автора

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

Для каждой метрики или диаграммы я буду говорить о:

  • Чтоопределениеа такжеинтуицияза этим,
  • нетехническое объяснениедля заинтересованных сторон,
  • Как рассчитать/ построить это,
  • когдавы должныиспользуй это,

Я действительно хотел, чтобы этот пост был завершен (иш) и много освещался. Кроме того, я хотел, чтобы каждый раздел метрики содержал все, что вам нужно (повторяя некоторые вещи здесь и там), чтобы вы могли просто перейти к интересующей вас метрике и прочитать этот раздел в одиночку. Без дальнейших церемоний вот список понятий:

  1. Матрица путаницы
  2. Ложноположительный показатель | Ошибка типа I
  3. Ложный отрицательный показатель | Ошибка типа II
  4. Правда отрицательный показатель | специфичность
  5. Отрицательная прогностическая ценность
  6. Скорость ложных открытий
  7. Истинно положительный показатель | Напомним | чувствительность
  8. Положительная прогностическая ценность | точность
  9. точность
  10. Фбета, F1, F2
  11. Коэн Каппа
  12. Коэффициент корреляции Мэтьюса
  13. Кривая ROC и оценка ROC AUC
  14. Кривая точности-отзыва и средняя точность
  15. Потеря журнала
  16. Brier оценка (потеря)
  17. График накопленной прибыли
  18. Кривая лифта
  19. Диаграмма Колмогорова-Смирнова и статистика Колмогорова-Смирнова

Кроме того, я буду обсуждать несколько общих решений, связанных с метриками:

Я знаю, что это много, но если вы хотите, чтобы ваш гид был «идеальным», вы действительно должны пойти на это ».

Прежде чем мы начнем

Я думаю, что обычно легче понять такие вещи, как метрики классификации в контексте чего-то ощутимого. Вот почему я подготовил пример проблемы обнаружения мошенничества на основе недавнего конкуренция, Я выбрал43 функциии выборка66000 наблюденийиз исходного набора данных, регулирующегодоля положительного класса до 0,09,

Я обучил кучу классификаторов lightGBM с разными гиперпараметрами. Я только использовалlearning_rateа такжеn_estimatorsпараметры, потому что я хотел иметь интуицию о том, какая модель «действительно» лучше. В частности, я подозреваю, что модель с 10 деревьями хуже, чем модель с 100 деревьями. Конечно, по мере того, как у вас появляется все больше и больше деревьев и меньшая скорость обучения, становится все сложнее, но я старался не выходить за рамки этого.

Так что для комбинацииlearning_rateа такжеn_estimators,Я сделал следующее:

  • определенные значения гиперпараметра:
MODEL_PARAMS = {'random_state': 1234,    
'learning_rate': 0.1,
'n_estimators': 10}
  • Обучил модель по тренировочным данным:
model = lightgbm.LGBMClassifier(**MODEL_PARAMS)
model.fit(X_train, y_train)
  • предсказано по данным испытаний:
y_test_pred = model.predict_proba(X_test)
  • записал все метрики для каждого прогона:
log_binary_classification_metrics(y_test, y_test_pred)

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

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

Панель показателей эксперимента

Хорошо, теперь мы готовы поговорить об этих метриках классификации!


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

Это распространенный способ представления истинно положительных (tp), истинно отрицательных (tn), ложноположительных (fp) и ложноотрицательных (fn) прогнозов. Эти значения представлены в виде матрицы, где ось Y показывает истинные классы, а ось X показывает прогнозируемые классы.

Как рассчитать:

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

from sklearn.metrics import confusion_matrixy_pred_class = y_pred_pos > threshold
cm = confusion_matrix(y_true, y_pred_class)
tn, fp, fn, tp = cm.ravel()

Как это выглядит:

Посмотреть путаницу матрицы для лучшего эксперимента

Таким образом, в этом примере мы можем видеть, что 11918 прогнозов были настоящими отрицательными, 872 - истинными положительными, 82 - ложными и 333 - ложными отрицаниями. Также, как мы уже знаем, это несбалансированная проблема, но не сильно. Кстати, если вы хотите узнать больше о несбалансированных проблемах, я рекомендую взглянуть на это статья Тома Фосетта,

Когда его использовать:

  • Почти всегда. Мне нравится видеть номинальные значения, а не нормализованные, чтобы понять, как модель работает на разных, часто несбалансированных, классах.

2. Ложный положительный рейтинг | Ошибка типа I

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

Как рассчитать:

from sklearn.metrics import confusion_matrixy_pred_class = y_pred_pos > threshold
tn, fp, fn, tp = confusion_matrix(y_true, y_pred_class).ravel()
false_positive_rate = fp / (fp + tn)

Как модели оценивают в этой метрике (порог = 0,5):

Изучите показатели эксперимента

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

Как это зависит от порога:

Давайте посмотрим на Лучший эксперимент БИН-98,

Просмотр ложноположительных результатов (ошибка типа 1) по порогу для лучшего эксперимента

Очевидно, что если мы увеличим порог, только наблюдения с более высокими оценками будут классифицированы как положительные. В нашем примере мы видим, что для достижения идеального FPR 0 нам нужно увеличить порог до 0,83, но это, вероятно, будет означать лишь очень небольшое количество классифицированных прогнозов.

Когда его использовать:

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

3. Ложный отрицательный уровень | Ошибка типа II

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

Как рассчитать:

from sklearn.metrics import confusion_matrixy_pred_class = y_pred_pos > threshold
tn, fp, fn, tp = confusion_matrix(y_true, y_pred_class).ravel()
false_negative_rate = fn / (tp + fn)

Как модели оценивают в этой метрике (порог = 0,5):

Изучите показатели эксперимента

Мы видим, что в нашем примере ошибки типа 2 немного выше ошибок типа 1. Интересно, что в нашем эксперименте BIN-98, который имел самую низкую ошибку типа 1, была самая высокая ошибка типа 2. Существует простое объяснение, основанное на том факте, что наш набор данных является несбалансированным, и с ошибкой типа 2 у нас не будет истинных отрицательных значений в знаменателе.

Как это зависит от порога:

Давайте посмотрим на Лучший эксперимент БИН-101.

Просмотр ложноотрицательных результатов (ошибка типа 2) для лучшего эксперимента

Если мы уменьшим порог, все больше и больше наблюдений будут классифицироваться как положительные, и поэтому мы будем отмечать все как положительные (например, мошеннические). На самом деле мы можем получить FNR 0,083, уменьшив порог до 0,01.

Когда его использовать:

  • Обычно он используется не один, а с другой метрикой,
  • Если стоимость пропуска мошеннических транзакций высока, а ценность, которую вы получаете от пользователей, не подходит, вы можете сосредоточиться на этом числе.

4. Истинный отрицательный показатель | специфичность

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

Как рассчитать:

from sklearn.metrics import confusion_matrixy_pred_class = y_pred_pos > threshold
tn, fp, fn, tp = confusion_matrix(y_true, y_pred_class).ravel()
true_negative_rate = tn / (tn + fp)

Как модели оценивают в этой метрике (порог = 0,5):

Изучите показатели эксперимента

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

Как это зависит от порога:

Давайте посмотрим на Лучший эксперимент БИН-98.

Посмотреть истинный отрицательный показатель для лучшего эксперимента

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

Когда его использовать:

  • Обычно вы используете не один, а скорее как вспомогательную метрику,
  • Когда вы действительно хотите быть уверены, что вы правы, когда говорите, что-то безопасно. Типичным примером может служить врач, который говорит пациенту: «Вы здоровы». Ошибиться здесь и сказать больному, что он в безопасности и может пойти домой, - это то, чего вы можете избежать.

5. Отрицательная прогностическая ценность

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

Как рассчитать:

from sklearn.metrics import confusion_matrixy_pred_class = y_pred_pos > threshold
tn, fp, fn, tp = confusion_matrix(y_true, y_pred_class).ravel()
negative_predictive_value = tn/ (tn + fn)

Как модели оценивают в этой метрике (порог = 0,5):

Изучите показатели эксперимента

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

Как это зависит от порога:

Давайте посмотрим на Лучший эксперимент БИН-101.

Просмотр отрицательного прогностического значения по порогу для лучшего эксперимента

Чем выше пороговое значение, тем больше случаев классифицируется как отрицательное, и оценка снижается. Однако в нашем несбалансированном примере даже при очень высоком пороге отрицательная прогностическая ценность все еще хороша.

Когда его использовать:

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

6 Скорость ложных открытий

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

Как рассчитать:

from sklearn.metrics import confusion_matrixy_pred_class = y_pred_pos > threshold
tn, fp, fn, tp = confusion_matrix(y_true, y_pred_class).ravel()
false_discovery_rate = fp/ (tp + fp)

Как модели оценивают в этой метрике (порог = 0,5):

Изучите показатели эксперимента

Как это зависит от порога:

Давайте посмотрим на Лучший эксперимент БИН-98

Просмотр уровня ложных открытий для лучшего эксперимента

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


7. Истинный позитивный рейтинг | Напомним | чувствительность

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

Когда вы оптимизируете отзыв, вы хотитепосадить всех виновных в тюрьму,

Как рассчитать:

from sklearn.metrics import confusion_matrix, recall_scorey_pred_class = y_pred_pos > threshold
tn, fp, fn, tp = confusion_matrix(y_true, y_pred_class).ravel()
true_positive_rate = tp / (tp + fn)# or simplyrecall_score(y_true, y_pred_class)

Как модели оценивают в этой метрике (порог = 0,5):

Изучите показатели эксперимента

Наша лучшая модель может отозвать 0,72 мошеннических транзакций при пороге 0,5. разница в отзыве между нашими моделями довольно значительна, и мы можем ясно видеть лучшие и худшие модели. Конечно, для каждой модели мы можем отрегулировать порог для отзыва всех мошеннических транзакций.

Как это зависит от порога:

Давайте посмотрим на Лучший эксперимент БИН-101.

Просмотр истинного положительного показателя (отзыв) по порогу для лучшего эксперимента

Для порога 0,1 мы классифицируем подавляющее большинство транзакций как мошеннические и, следовательно, получаем действительно высокий отзыв 0,917. По мере увеличения порога, отзыв уменьшается.

Когда его использовать:

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

8. Положительная прогностическая ценность | точность

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

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

Как рассчитать:

from sklearn.metrics import confusion_matrix, precision_scorey_pred_class = y_pred_pos > threshold
tn, fp, fn, tp = confusion_matrix(y_true, y_pred_class).ravel()
positive_predictive_value = tp/ (tp + fp)# or simplyprecision_score(y_true, y_pred_class)

Как модели оценивают в этой метрике (порог = 0,5):

Изучите показатели эксперимента

Похоже, что все модели имеют довольно высокую точность на этом пороге, и «лучшая модель» - невероятно мелкий светлый GBM, который явно пахнет рыбой. Это важный вывод, если рассматривать только точность (или отзыв), то это может привести к выбору неоптимальной модели.

Конечно, для каждой модели мы можем отрегулировать порог для повышения точности, классифицируя лишь очень небольшую долю явно (для нашей модели) мошеннических транзакций.

Как это зависит от порога:

Давайте посмотрим на Лучший эксперимент БИН-98,

Просмотр положительного прогностического значения (точности) по порогу для лучшего эксперимента

Чем выше порог, тем выше точность, и с порогом 0,68 мы можем получить совершенно точную модель. При превышении этого порогового значения модель не классифицирует ничего как положительное, и поэтому мы не наносим ее на график.

Когда его использовать:

  • Опять же, обычно не имеет смысла использовать его отдельно, а скорее в сочетании с другими показателями, такими как отзыв.
  • Когда ложные оповещения стоят дорого, и вы действительно хотите, чтобы все положительные прогнозы стоили того, чтобы на них смотреть, вы должны оптимизировать их точность.

9. Точность

Он измеряет, сколько наблюдений, как положительных, так и отрицательных, были правильно классифицированы.

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

Как рассчитать:

from sklearn.metrics import confusion_matrix, accuracy_scorey_pred_class = y_pred_pos > threshold
tn, fp, fn, tp = confusion_matrix(y_true, y_pred_class).ravel()
accuracy = (tp + tn) / (tp + fp + fn + tn)# or simplyaccuracy_score(y_true, y_pred_class)

Как модели оценивают в этой метрике (порог = 0,5):

Изучите показатели эксперимента

Мы можем видеть, что для всех моделей, которые мы опередили фиктивную модель (все чистые транзакции) с большим отрывом, также модели, которые мы ожидаем улучшить, на самом деле на самом верху.

Как это зависит от порога:

Давайте посмотрим на Лучший эксперимент БИН-101.

Просмотр точности по порогу для лучшего эксперимента

С точностью вы действительно можете использовать графики, подобные приведенным выше, чтобы определить оптимальный порог В этом случае выбор чего-то чуть более стандартного 0,5 может немного увеличить оценку 0,9686-> 0,9688.

Когда его использовать:

  • Когда ваша проблема сбалансирована с использованием точности, это, как правило, хорошее начало. Дополнительным преимуществом является то, что это действительно легко объяснить нетехническим заинтересованным сторонам в вашем проекте,
  • Когда каждый класс одинаково важен для вас.

10. F-оценка

Проще говоря, он объединяет точность и отзыв в одну метрику. Чем выше оценка, тем лучше наша модель. Вы можете рассчитать это следующим образом:

При выборе бета в F-бетачем больше вы заботитесь о отзывесверх точностивысшая бетаВы должны выбрать. Например, с оценкой F1 мы одинаково заботимся об отзыве и точности с оценкой F2, отзыв для нас в два раза важнее.

Просмотр F-бета по порогу и бета для лучшего эксперимента

С 0 <бета<1 we care more about precision and so the higher the threshold the higher the Fbeta, when beta>1 наш оптимальный порог перемещается в сторону нижних порогов, а при бета = 1 он находится где-то посередине.

Как рассчитать:

from sklearn.metrics import fbeta_scorey_pred_class = y_pred_pos > threshold
fbeta_score(y_true, y_pred_class, beta)

F1 балл (бета = 1)

Это гармоничное среднее между точностью и отзывом.

Как модели оценивают в этой метрике (порог = 0,5):

Изучите показатели эксперимента

Как мы видим, сочетание точности и отзыва дало нам более реалистичное представление о наших моделях. Мы получаем 0,808 за лучшую и много возможностей для улучшения.

Что хорошо, так это то, что кажется, что наши модели правильно ранжируются с этими большими световыми модулями наверху.

Как это зависит от порога:

Давайте посмотрим на Лучший эксперимент БИН-101.

Просмотр F1 балла по порогу для лучшего эксперимента

Мы можемнастроить порог для оптимизации F1Гол. Обратите внимание, что как для точности, так и для напоминания вы можете получить отличные результаты, увеличив или уменьшив порог. Хорошо, что вы можетенайти сладкое местодля F1metric. Как видите, правильное определение порога может улучшить ваш результат на 0,8077-> 0,8121.

Когда его использовать:

  • В значительной степени в каждой проблеме бинарной классификации. Это мой показатель при работе над этими проблемами. Это может быть легко объяснено заинтересованным сторонам бизнеса.

Оценка F2 (бета = 2)

Это метрика, которая сочетает в себе точность и отзыв,2х акцент на отзыв,

Как модели оценивают в этой метрике (порог = 0,5):

Изучите экспериментальную метрику s

Этот показатель даже ниже для всех моделей, чем F1, но может быть увеличен путем значительного изменения порога.

Опять же, похоже, что наши модели правильно ранжируются, по крайней мере, в этом простом примере.

Как это зависит от порога:

Давайте посмотрим на Лучший эксперимент БИН-101.

Просмотр F2 по порогу для лучшего эксперимента

Мы можем видеть, что с более низким порогом и, следовательно, с большим количеством истинных положительных результатов мы получаем более высокий балл. Вы можете обычнонайти сладкое местоза порог. Возможный выигрыш от 0,755 -> 0,803 покажет, какважныйрегулировка порогаможет быть здесь.

Когда его использовать:

  • Я бы посоветовал использовать его при отзыве положительных наблюдений (мошеннических транзакций) важнее, чем быть точным, но вы все равно хотите иметь хороший и простой показатель, который сочетает в себе точность и отзыв.

11. Коэн Каппа Метрика

Проще говоря, Коэн Каппа говорит вам, насколько лучше ваша модель по сравнению со случайным классификатором, который предсказывает на основе частот классов.

Чтобы рассчитать его, нужно рассчитать две вещи: «наблюдаемое соглашение» (po) и «ожидаемое соглашение» (pe). Наблюдаемое согласие (po) - это просто то, как наши предсказания классификатора согласуются с основополагающей истиной, что означает, что это просто точность. Ожидаемое согласие (pe) - это то, как предсказания случайного классификатора, который выбирает в соответствии с частотами классов, согласуются с основной истинностью или точностью случайного классификатора.

С точки зрения интерпретации, мне нравится, что это расширяет что-то очень простое для объяснения (точность) на ситуации, когда ваш набор данных разбалансирован путем включения базового (фиктивного) классификатора.

Как рассчитать:

from sklearn.metrics import cohen_kappa_scorecohen_kappa_score(y_true, y_pred_class)

Как модели оценивают в этой метрике (порог = 0,5):

Изучите показатели эксперимента

Мы можем легко отличить худшие / лучшие модели по этой метрике. Кроме того, мы видим, что есть еще много возможностей для улучшения нашей лучшей модели.

Как это зависит от порога:

Давайте посмотрим на Лучший эксперимент БИН-101.

Посмотрите Коэн Каппа по порогу для лучшего эксперимента

С помощью графика, подобного приведенному выше, мы можем найти порог, который оптимизирует коэн каппа. В этом случае он находится на уровне 0,31, что дает нам некоторое улучшение на 0,7909 -> 0,7947 по сравнению со стандартным 0,5.

Когда его использовать:

  • Этот показатель не используется интенсивно в контексте классификации, но может действительно хорошо работать для несбалансированных задач и кажется отличным компаньоном / альтернативой точности.

12 Коэффициент корреляции Мэтьюса MCC

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

Кроме того, вы также можете рассчитать соотношение междуy_trueа такжеy_pred.

Как рассчитать:

from sklearn.metrics import matthews_corrcoefy_pred_class = y_pred_pos > threshold
matthews_corrcoef(y_true, y_pred_class)

Как модели оценивают в этой метрике (порог = 0,5):

Изучите показатели эксперимента

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

Как это зависит от порога:

Давайте посмотрим на Лучший эксперимент БИН-101.

Посмотрите коэффициент корреляции Мэтью по порогу для лучшего эксперимента

Мы можем настроить порог для оптимизации MCC. В нашем случае лучший результат - 0,53, но мне действительно нравится то, что он не очень чувствителен к изменениям пороговых значений.

Когда его использовать:

  • При работе над несбалансированными проблемами,
  • Когда вы хотите что-то легко интерпретируемое.

13. РПЦ АУК

РПЦ Кривая

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

Конечно, чем выше TPR и чем ниже FPR для каждого порога, тем лучше и тем лучше классификаторы, которые имеют кривые, которые являются более левыми.

Обширное обсуждение кривой ROC и оценки ROC AUC может быть найдено в этой статье Том Фосетт.

Как рассчитать:

from scikitplot.metrics import plot_rocfig, ax = plt.subplots()
plot_roc(y_true, y_pred, ax=ax)

Как это выглядит:

Например, глядя на Лучший эксперимент БИН-101:

Посмотреть кривую ROC для лучшего эксперимента

Мы можем видеть здоровую кривую ROC, смещенную к верхней левой стороне как для положительного, так и для отрицательного класса. Не ясно, какой из них работает лучше по всем направлениям, так как с FPR <~ 0,15 положительный класс выше, а с FPR ~ 0,15 отрицательный класс выше.

РПЦ АУК оценка

Чтобы получить одно число, которое говорит нам, насколько хороша наша кривая, мы можем вычислитьСубъективнаяUпод РПЦСурва, или РПЦ АУК оценка. Чем больше верхняя левая кривая, тем выше площадь и, следовательно, выше показатель ROC AUC.

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

Как рассчитать:

from sklearn.metrics import roc_auc_score

roc_auc = roc_auc_score(y_true, y_pred_pos)

Как модели оцениваются в этой метрике:

Изучите показатели эксперимента

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

Когда его использовать:

  • Выдолжен использовать этокогда вы в конечном итогезаботиться о рейтингепрогнозы и не обязательно о выводе хорошо откалиброванных вероятностей (читать Эта статья по Джейсон Браунли если вы хотите узнать о вероятности калибровки).
  • Вам следуетне использовать его, когдаваши данныесильно неуравновешенный, Это широко обсуждалось в Эта статья Takaya Saito и Marc Rehmsmeier, но интуиция такова: ложно положительный показатель для сильно несбалансированных наборов данных снижается из-за большого количества истинных отрицательных значений.
  • Вам следуетиспользуйте его, когда вы одинаково заботитесь о положительном и отрицательном классе, Это естественным образом расширяет обсуждение несбалансированных данных из последнего раздела. Если мы заботимся об истинных негативах так же, как и об истинных позитивах, тогда имеет смысл использовать ROC AUC.

14. Кривая точности-отзыва и оценка PR AUC

Кривая точного отзыва

Это кривая, которая объединяет точность (PPV) и отзыв (TPR) в одной визуализации. Для каждого порога вы рассчитываете PPV и TPR и строите их график. Чем выше ваша кривая по оси Y, тем выше производительность вашей модели.

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

Как рассчитать:

from scikitplot.metrics import plot_precision_recallfig, ax = plt.subplots()
plot_precision_recall(y_true, y_pred, ax=ax)

Как это выглядит:

Например, глядя на Лучший эксперимент БИН-101:

Посмотрите кривую Precision-Recall для лучшего эксперимента

Мы можем видеть, что для отрицательного класса мы сохраняем высокую точность и высокий отзыв почти во всем диапазоне порогов. Для положительного класса, однако, точность начинает падать, как только мы вспоминаем 0.2 истинных положительных значений и к тому времени, когда мы достигли 0 8, он уменьшается примерно до 0,7.

PR AUC оценка | Средняя точность

Аналогично баллу ROC AUC, вы можете рассчитатьСубъективнаяUТочное напоминаниеСЧтобы получить один номер, который дает вам информацию о производительности модели.

Вы также можете думать о PR AUC как о среднем показателе точности, рассчитанном для каждого порога отзыва.[0.0, 1.0], Вы также можете изменить это определение в соответствии с потребностями своего бизнеса, выбрав / обрезав пороги отзыва, если это необходимо.

Как рассчитать:

from sklearn.metrics import average_precision_scoreaverage_precision_score(y_true, y_pred_pos)

Как модели оцениваются в этой метрике:

Изучите показатели эксперимента

Модели, которые мы считаем «по-настоящему» лучше, на самом деле лучше в этой метрике, что, безусловно, хорошо. В целом, мы можем видеть высокие оценки, но гораздо менее оптимистично, чем ROC AUC (0,96+).

Когда его использовать:

  • когда ты хочешьсообщить о точности / вспомнить решениедругим заинтересованным сторонам и хотятвыберите порог, который соответствует бизнесупроблема.
  • когда ваши данныесильно неуравновешенный, Как упоминалось ранее, это широко обсуждалось в Эта статья Takaya Saito и Marc Rehmsmeier, но интуиция заключается в следующем: поскольку PR AUC фокусируется в основном на положительном классе (PPV и TPR), он меньше заботится о частом отрицательном классе.
  • когдавы больше заботитесь о положительном, чем о отрицательном классе, Если вас больше интересует положительный класс и, следовательно, PPV и TPR, вам следует использовать кривую Precision-Recall и PR AUC (средняя точность).

15. Потеря журнала

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

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

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

Так что наша модель очень сильно наказывается, когда мы уверены в том, что это неправда. Например, когда мы ставим оценку 0,9999 в отрицательное наблюдение, наша потеря прыгает через крышу. Вот почему иногда имеет смысл обрезать ваши прогнозы, чтобы уменьшить риск этого.

Если вы хотите узнать больше о потере журнала прочитайте эту статью по Даниэль Годой,

Как рассчитать:

from sklearn.metrics import log_losslog_loss(y_true, y_pred)

Как модели оцениваются в этой метрике:

Изучите показатели эксперимента

Трудно действительно увидеть сильное улучшение и понять, насколько сильна модель. Кроме того, модель, которая была выбрана как лучшая ранее (BIN-101), находится в середине пакета. Это может указывать на то, что использование потери журнала в качестве показателя производительности может быть рискованным предложением.

Когда его использовать:

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

16. Оценка Бриера (потеря)

Это мера того, насколько далеко ваши прогнозы лежат от истинных значений. Для одного наблюдения это просто гласит:

По сути, это среднеквадратичная ошибка в вероятностном пространстве, поэтому она обычно используется для калибровки вероятностей моделей машинного обучения. Если вы хотите узнать больше о вероятности калибровки, я рекомендую вам прочитать Эта статья по Джейсон Браунли,

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

Как рассчитать:

from sklearn.metrics import brier_score_lossbrier_score_loss(y_true, y_pred_pos)

Как модели оцениваются в этой метрике:

Изучите показатели эксперимента

Модель BIN-101 имеет лучшую калибровку, и для этой модели в среднем наши прогнозы были неверны на 0,16 (квадратный метр (0,0263309)).

Когда его использовать:

  • Когда тызаботиться о калиброванных вероятностях,

17. Диаграмма накопленной прибыли

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

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

Это позволяет легко увидеть преимущества использования вашей модели для целевых групп пользователей / учетных записей / транзакций, особенно если вы действительно хотите их отсортировать.

Как рассчитать:

from scikitplot.metrics import plot_cumulative_gainfig, ax = plt.subplots()
plot_cumulative_gain(y_true, y_pred, ax=ax)

Как это выглядит:

Давайте посмотрим на график совокупной прибыли от Лучший эксперимент БИН-101.

Посмотреть кумулятивную диаграмму усиления для лучшего эксперимента

Мы видим, что наш график прибылей очень быстро растет, поскольку мы увеличиваем выборку прогнозов с наивысшими оценками. К тому времени, как мы доберемся до 20-го процентиля, охвачено более 90% положительных случаев. Если бы мы использовали нашу модель для назначения возможных мошеннических транзакций для обработки, и нам нужно было расставить приоритеты, то использование этой диаграммы сообщит нам, где имеет смысл выбрать отсечение.

Когда его использовать:

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

18. Лифт Кривая

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

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

Как рассчитать:

from scikitplot.metrics import plot_lift_curvefig, ax = plt.subplots()
plot_lift_curve(y_true, y_pred, ax=ax)

Как это выглядит:

Давайте посмотрим на график подъема от Лучший эксперимент БИН-101.

Посмотреть кривую подъема для лучшего эксперимента

Таким образом, для первых 10% прогнозов наша модель более чем в 10 раз лучше случайной, для 20% - в 4 раза лучше и так далее.

Когда его использовать:

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

19. Колмогоровско-Смирновский сюжет + К.С. Статистика

Сюжет Колмогорова-Смирнова

Это помогает оценить разделение между распределением прогноза для положительного и отрицательного класса.

Для его создания вы:

  • сортировать свои наблюдения по баллам прогноза,
  • для каждой точки отсечки[0.0, 1.0]из отсортированного набора данных (глубины) вычислить соотношение истинных положительных и отрицательных значений в этой глубине,
  • нанесите эти дроби, положительные (глубина) / положительные (все), отрицательные (глубина) / отрицательные (все), по оси Y и глубину набора данных по оси X.

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

Хорошее объяснение графика KS и статистики KS можно найти в этом блоге Риаз Хан.

Как рассчитать:

from scikitplot.metrics import plot_ks_statisticfig, ax = plt.subplots()
plot_ks_statistic(y_true, y_pred, ax=ax)

Как это выглядит:

Давайте посмотрим на Лучший эксперимент БИН-101.

Посмотреть сюжет Колмогорова-Смирнова на лучший эксперимент

Таким образом, мы видим, что наибольшая разница находится в точке отсечения 0,034 верхних прогнозов. После этого порога он уменьшается умеренными темпами, поскольку мы увеличиваем процент лучших прогнозов, и около 0,8 он действительно очень быстро ухудшается. Таким образом, даже несмотря на то, что наилучшее разделение составляет 0,034, мы можем увеличить его, чтобы получить более позитивно классифицированные наблюдения.

Статистика Колмогорова-Смирнова

Если мы хотим взять график KS и получить одно число, которое мы можем использовать в качестве метрики, мы можем посмотреть все пороговые значения (отсечки набора данных) из графика KS и найти тот, для которого расстояние (расстояние) между распределениями истинного положительного и истинные отрицательные наблюдения самые высокие.

Если существует порог, для которого все вышеприведенные наблюдения являются действительно положительными, а все наблюдения ниже являются действительно отрицательными, мы получаем идеальную статистику KS, равную 1,0.

Как рассчитать:

from scikitplot.helpers import binary_ks_curve res = binary_ks_curve(y_true, y_pred_pos)
ks_stat = res[3]

Как модели оценивают в этой метрике (порог = 0,5):

Изучите показатели эксперимента

Используя статистику KS в качестве метрики, мы смогли присвоить BIN-101 лучшую модель, которую мы действительно ожидаем стать «действительно» лучшей моделью.

Когда его использовать:

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

Типичные метрические решения

Так какой показатель выбрать для своей проблемы?

Очевидно, что это зависит от проблемы, и, надеюсь, со всем, что вы уже узнали, вам будет легче.

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

Точность против Напомним

Это общий компромисс, где вы можете увеличить каждый за счет другого. В конечном итоге вы должны понять бизнес-проблему и связанные с этим расходы, чтобы ответить на этот вопрос.

Если вас больше интересует поиск как можно большего числа действительно положительных наблюдений и выдача ложных предупреждений, это не большая проблема, вы должны отдать приоритет отзыву.

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

В целом, я бы посоветовал использовать метрику, которая сочетает в себе как точность, так и отзыв, как Fbeta или Средняя точность Помните, что вы можете использовать бета-версию в Fbeta для увеличения веса при отзыве (бета> 1) или точности (0 <бета <1).


РПЦ АУК против PR АУК

Что общего между ROC AUC и PR AUC, так это то, что они оба смотрят на оценки прогнозирования классификационных моделей, а не на задания с пороговым значением класса. Отличие, однако, заключается в том, что ROC AUC смотрит на истинную положительную скорость (TPR) и ложноположительную скорость (FPR), в то время как PR AUC смотрит на положительную прогностическую ценность (PPV) и истинную положительную скорость TPR.

Поэтому, если вы больше заботитесь о позитивном классе, то лучше использовать PR AUC, который более чувствителен к улучшениям для позитивного класса. Одним из распространенных сценариев является сильно несбалансированный набор данных, в котором доля положительного класса, которую мы хотим найти (например, при обнаружении мошенничества), невелика. Я настоятельно рекомендую взглянуть на это ядро ​​kaggle для более длительной дискуссии по теме ROC AUC против PR AUC для несбалансированных наборов данных.

Если вы в равной степени заботитесь о положительном и отрицательном классе или ваш набор данных достаточно сбалансирован, то переход на ROC AUC - хорошая идея.


F1 счет против ROC AUC счет

Так что, если вам небезразличны прогнозы ранжирования, вам не нужны их как вероятности, откалиброванные по свойствам, и ваш набор данных не сильно сбалансирован, тогда я бы выбрал ROC AUC.

Если ваш набор данных несбалансирован, я бы подумал о том, чтобы использовать оценку F1 или кривую Precision-Recall и PR AUC. Дополнительная причина использования F1 (или Fbeta) заключается в том, что эти показатели легче интерпретировать заинтересованными сторонами.


Выводы

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

Наконец, мы рассмотрели несколько решений, касающихся выбора метрики, которую должен принять каждый, кто работает над проектами машинного обучения.

Надеемся, что со всеми этими знаниями вы будете в полной мере готовы решать проблемы, связанные с метрикой, в ваших будущих проектах!


Дополнительно

В этом разделе я добавил несколько дополнительных вещей, которые, на мой взгляд, могут оказаться полезными:

Метрические ранг корреляции

Из интереса я построил ранговые корреляции для всех числовых метрик, рассчитанных за 7 экспериментов (learning_rate,n_estimators). Помните, что они рассчитывались не при оптимальном пороговом значении для каждой метрики, а при стандартном пороговом значении 0,5.

Просмотр метрики корреляции для всех экспериментов

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

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

Помощник по ведению журнала

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

  • установить пакет:
pip install neptune-contrib[all]
  • импортировать и запускать:
import neptunecontrib.monitoring.metrics as npt_metrics 

npt_metrics.log_binary_classification_metrics(y_true, y_pred)
  • изучить все в приложении:
Посмотреть все метрики в экспериментальной панели

Полный код

Суть кода от GitHub

Вы также можете получить доступ к полный сценарий обучения здесь,


Метрическая таблица

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

Если вы хотите получить его, как только я его закончу, отправьте сообщение «Я хотел бы получить таблицу метрик» на jakub.czakon@neptune.ml.


Если вам понравилось это, вы можете найти больше сообщений на нашем Блог Нептуна ,

Вы также можете найти меня чирикать @NeptuneML или размещение на LinkedIn о ML и Data Science.