TGViewer
Заскуль питона (Аналитика данных) Заскуль питона (Аналитика данных) @zasql_python · 8.93K subscribers
Post #530 3.81K
🟡 ROC-AUC кривая. Метрика оценки качества модели классификации в машинном обучении

Да чего там делать пост, берешь sklearn, делаешь импорт из metrics и погнал. Чем ближе к 1, тем лучше => выбираем. Но давайте разбираться более детальною.

ROC-AUC — это вероятность того, что наши положительные классы получили больший скор, чем отрицательные.

🔽 Пример: предположим, у нас есть следующая таблица.

| object | score value | y |
|--------|-------------|---|
| A | 0.92 | 1 |
| B | 0.81 | 1 |
| C | 0.74 | 0 |
| D | 0.63 | 1 |
| E | 0.41 | 0 |
| F | 0.27 | 0 |
| G | 0.18 | 0 |
| H | 0.05 | 1 |


✏️ Для каждого порога (в таблице значения) в отсортированной по скору таблице вычислим по строкам значения:

Для 1 строки считаем какие объекты попадают в score >= 0.92 — это один положительный класс. Среди всех положительных (4) => TPR = 1/4. При этом мы рассмотрели только один объект положительного класса => FPR = 0.

Для 2 строки считаем уже два объекта A, B. Это оба положительных класса. Среди всех положительных (4) => TPR = 2/4 = 1/2. Пока что объектов с классом 0 не попалось.

Для 3 строки считаем уже три объекта A, B, C. Смотрим на объект со скором >= 0.74. TPR по-прежнему = 1/2, а вот FPR увеличился, так как залетел новый объект с меткой 0. Среди всех отрицательных классов (4) => FPR = 1/4.


Далее считаем TPR, FPR для каждой из строк (Сколько объектов мы отнесли к положительному классу из всех возможных объектов класса).

По сути, мы отвечаем на вопрос: В скольких случаях скор, полученный по модели для положительных классов выше, чем для отрицательных.

Графически это выглядит как ступеньки (по оси X — FPR, по оси Y — TPR). При движении по трешхолдам для отнесения к классам смотрим как меняются значения TPR и FPR, кстати еще есть значения трешхолдов в самой библиотеке sklearn.

🧠 Чтобы посчитать вручную само значение:

Нужно взять все сочетания положительных и негативных классов и сравнить в каких случаях выше. Для нашего случая это:

1. A > C, A > E, A > F, A > G (пол.)
2. B > C, B > E, B > F, B > G (пол.)
3. C > D, C > H (нег.)
4. D > E, D > F, D > G (пол.)
5. E > H (нег.)
6. F > H (нег.)
6. G > H (нег.).

Считаем количество всех сочетаний: 16
Считаем количество правильных среди положительных: 11
ROC-AUC = 11/16 = 0.6875


Ограничения в ML

1. Не учитывает цену ошибок (FP = FN по важности)
2. Не даёт порог для принятия решения
3. Ломается при сильном дисбалансе
4. Игнорирует калибровку вероятностей
5. Одно число скрывает локальные ошибки


🐍 Как можно применять для аналитики

1. Если есть модель и мы хотим определить есть ли сигнал в данных (ROC-AUC > 0.5). То есть позволяют ли наши признаки сделать модель такую, чтобы она была лучше случайности.

2. Понять, какие фичи улучшают разделение между TP и FP. Например, при добавлении фичи ROC-AUC увеличился => появился новый сигнал.

3. Проверка эвристики против модели. Оправдано ли применение ML-модели в принципе или достаточно эвристику.

4. Сравнение сегментов / источников сигнала. Задача: понять, где модель работает.

5. Оценка классификации по неделям. Понимаем, что ROC-AUC по неделям деградирует => нужно добавить больше признаков для обобщения.

6. Сравнение разных таргетов. Один таргет лучше отделяется => он более предсказуем и устойчив

Если коротко: ROC-AUC отвечает на вопрос есть ли сигнал, а не как принимать решение

Понравился пост? Ставьте 🐳, пишите комментарии!

@zasql_python
  • 🐳 29
  • ❤ 14
More from @zasql_python
  1. Sep 20, 2026Хэй, чемпион! тут курс вышел бесплатный по статистике, который будет дополняться, записыва…
  2. Sep 15, 2026Починилось 😏 zasqlpython.ru
  3. Sep 15, 2026Сайт пока не работает, ждём 30 минут… @zasql_python
  4. Sep 13, 2026😏 Кто сейчас в поисках работы на ПЕРВУЮ работу по специальности аналитиком, что прикладыв…
  5. Sep 11, 2026😌 Пятница а это значит, пора немного поговорить об обновлениях 👀 Что нового на сайте: 😠…
  6. Sep 9, 2026🍌🍌🍌 Hi, unfortunately, we’re not ready to give you more money, but we are ready to give…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →