Качество классификации и второй проект

Матрица ошибок: TP, FP, TN, FN

Содержание курса

Ошибка перепутанных строк и столбцов: как различить FP и FN в массиве

Самая частая ошибка при чтении матрицы — перепутать cm[0,1] и cm[1,0]. Логика кажется симметричной: оба индекса «не на главной диагонали», оба — ошибки. Но смысл у них разный.

Разберём по определению индекса: первый индекс — строка — это истинный класс, второй индекс — столбец — это предсказанный класс.

  • cm[0, 1]: истинный класс 0, предсказан класс 1 → FP (ложная тревога).
  • cm[1, 0]: истинный класс 1, предсказан класс 0 → FN (пропуск).

Если перепутать и написать fn = cm[0, 1], счётчик пропусков окажется неверным — и все метрики, которые строятся на FN, дадут неправильный результат.

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

# На этих данных: y_true=[0,0,1,1,0,1,0,1,1,0], y_pred=[0,1,1,0,0,1,0,1,0,0]
# cm = [[4 1]
#        [2 3]]

tn = cm[0, 0]  # истинный 0, предсказан 0  → TN = 4
fp = cm[0, 1]  # истинный 0, предсказан 1  → FP = 1
fn = cm[1, 0]  # истинный 1, предсказан 0  → FN = 2
tp = cm[1, 1]  # истинный 1, предсказан 1  → TP = 3

Комментарий к каждой строке — это и есть первичная проверка: он буквально читается как «строка соответствует истинному классу X, столбец — предсказанному классу Y». Если комментарий совпадает с определением FP или FN — присвоение верно.

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

# строка 1 содержит все объекты с истинным классом 1
assert fn + tp == sum(1 for y in y_true if y == 1)  # 2 + 3 == 5

Эта проверка подтверждает, что матрица построена корректно и строки не перепутаны местами. Она не гарантирует, что именно fn получила ячейку cm[1,0], а не cm[1,1]: если переставить имена fn и tp между собой, сумма не изменится. Поэтому правило индекса («строка = истинный класс, столбец = предсказанный класс») остаётся основным — проверка суммы лишь подкрепляет его.

Аналогично строка 0 должна суммироваться в число реальных отрицательных объектов: tn + fp == 5.