Сформулируйте и выпишите определение что такое roc auc.

Бинарная ROC AUC — площадь под ROC-кривой, эквивалентная доле правильно упорядоченных пар «позитив — негатив» с половиной балла за равные scores. Один класс не даёт определённой AUC.

Короткий ответ

Что ответить на собеседовании

Бинарная ROC AUC — площадь под ROC-кривой, эквивалентная доле правильно упорядоченных пар «позитив — негатив» с половиной балла за равные scores. Один класс не даёт определённой AUC.

Подробный разбор

Ответ с пояснениями

Условие

Сформулируйте и выпишите определение что такое roc auc.

Как считается roc auc score?

Напишите функцию, которая вычисляет roc_auc_score согласно выписанному определению.

А для произвольного числа классов с заданным порядком приоритета?

Модель работает следующим образом

y_score[i] >= threshold -> y_pred[i] = 1

y_score[i] < threshold -> y_pred[i] = 0

def test_roc_aur_score(): y_true = [0, 0, 0, 1, 0, 0] y_score = [0.2, 0.4, 0.31, 0.6, 0.3, 0.7] res_metric = roc_auc_score(y_true, y_score) assert res_metric == 0.8

y_true = [0, 1, 0, 0, 0, 1]
y_score = [0.7, 0.6, 0.31, 0.31, 0.3, 0.2]
res_metric = roc_auc_score(y_true, y_score)
assert res_metric == 0.375

y_true = [0, 0, 0, 1, 0, 0]
y_score = [0.2, 0.4, 0.31, 0.8, 0.3, 0.7]
res_metric = roc_auc_score(y_true, y_score)
assert res_metric == 1

y_true = [0, 0, 0, 0, 0, 0]
y_score = [0.2, 0.4, 0.31, 0.8, 0.3, 0.7]
res_metric = roc_auc_score(y_true, y_score)
assert res_metric == 0

Бонусные тесты для нескольких классов

y_true = [0, 1, 0, 0.5, 0, 1] y_score = [0.7, 0.6, 0.31, 0.31, 0.3, 0.2] res_metric = roc_auc_score(y_true, y_score) assert res_metric == 0.[phone]

y_true = [0, 0.1, 0.2, 0.3, 0.4, 0.6] y_score = [0, 0.1, 0.2, 0.3, 0.4, 0.6] res_metric = roc_auc_score(y_true, y_score) assert res_metric == 1

Ответ

Бинарная ROC AUC — площадь под ROC-кривой, эквивалентная доле правильно упорядоченных пар «позитив — негатив» с половиной балла за равные scores. Один класс не даёт определённой AUC.

Для упорядоченных классов можно явно выбрать обобщение: сравнивать все пары разных классов, считая больший класс приоритетнее. Это ordinal concordance, а не стандартный multiclass OvR/OvO. Ниже O(n²) по времени и O(1) дополнительной памяти; при отсутствии сравнимых пар возвращается 0 только ради соглашения теста.

def roc_auc_score(y_true, y_score):
    if len(y_true) != len(y_score):
        raise ValueError('Разные размеры')
    wins = 0.0
    pairs = 0
    for i in range(len(y_true)):
        for j in range(len(y_true)):
            if y_true[i] > y_true[j]:
                pairs += 1
                wins += (y_score[i] > y_score[j]) + 0.5 * (y_score[i] == y_score[j])
    return wins / pairs if pairs else 0.0

Предполагаются конечные числовые scores и метки в порядке приоритета. Для первого бонусного примера получается 9/22; ожидаемое значение в исходнике повреждено. Для одинаково возрастающих меток и scores результат 1.

Источник: scikit-learn.org.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее