матрица ошибок.
тебе пришёл положительный тест. интуиция смотрит на его точность и делает вывод. но вывод — это не тест. это тест, наложенный на то, насколько редко то, что он ищет. и весь расчёт умещается в таблицу из четырёх клеток.
| тема | матрица ошибок · precision · recall · байес · базовая частота · аналитика |
| читать | ~7 минут |
| связано | Байес · ошибка базовой частоты · A/B · условная вероятность · покер |
Любой тест — медицинский, антифрод, A/B, собеседование — даёт сигнал: сработал или нет. И первое, что хочется сделать с сигналом, — поверить ему пропорционально точности. Тест точен на 99%, сработал → я на 99% уверен. Это и есть главная ошибка: ты оцениваешь тест, а нужно оценивать гипотезу при условии теста. А гипотеза зависит не только от того, как точен прибор, но и от того, насколько редко то, что он ищет.
До теста у тебя уже есть два числа. Первое — априор, базовая частота: насколько вообще распространено то, что ты ищешь, ещё до всякой проверки. Болезнь у одного из тысячи, фрод у одной транзакции из десяти тысяч, реальный эффект у одной фичи из пяти. Второе — поведение теста: как часто он срабатывает на настоящем и как часто ошибается на пустом. Эти два числа — всё, что нужно. Беда в том, что интуиция держит в голове только второе и теряет первое.
Чтобы не терять, разложи мир на таблицу два на два — матрицу ошибок. Берёшь популяцию и делишь дважды: по правде (гипотеза верна / неверна) и по тесту (сработал / нет). Получаются четыре клетки: верный плюс (болен и пойман), ложный плюс (здоров, но тест звенит), пропуск (болен, но тест молчит), верный минус (здоров и чисто). Вся арифметика Байеса — это просто заполнение этих клеток: априор задаёт, сколько всего в каждом столбце, а поведение теста — как столбец делится между строками.
Матрица заставляет выписать знаменатель. Именно его интуиция и забывает.
Теперь главное. Когда тест сработал, ты в строке «плюс» — и вопрос лишь в том, какую долю этой строки занимает верный плюс. P(гипотеза | плюс) = верный плюс ÷ (верный плюс + ложный плюс). Это и есть теорема Байеса, прочитанная по матрице1. И вот где ломается интуиция: ложных плюсов обычно много не потому, что тест плох, а потому, что пустого большинства огромно. Один процент ошибки на миллионе здоровых — это десять тысяч ложных тревог, легко перекрывающих сотню настоящих больных. Редкое событие топит точный тест2.
Отсюда вывод, который злит: одно число «точность» почти всегда врёт. Точность мешает в кучу все четыре клетки, а тебе нужны две разные дроби. Точность среди пойманных — какая часть сигналов настоящая (precision). И полнота — какую часть настоящих ты вообще поймал (recall)3. При одной и той же «точности теста» precision может быть и 90%, и 2% — всё решает базовая частота. Поэтому детектор фрода с гордым «99% accuracy» на редком фроде выдаёт почти один шум.
Апостериор одного теста становится априором для следующего — так копятся улики. Второй независимый тест умножает шансы ещё раз; на языке матрицы ты просто сужаешь строку. Поэтому несколько слабых согласованных сигналов вместе бьют сильнее одного яркого, а один яркий сигнал о редком событии всё равно оставляет тебя в сомнении4. Обновление мнения — не прыжок, а движение по клеткам: каждый тест сдвигает тебя на свой вес, не больше.
Для аналитика матрица — рабочий инструмент, а не картинка из учебника. Алерты, скоринг, антифрод, медскрининг, A/B — всюду одна и та же таблица и один и тот же провал: оптимизируют «общую точность», а живут потом в ложных тревогах. Если база редкая — проектируй на precision, считай, сколько ложных плюсов вынесет команда, и не верь ни одному «N% точности» без знаменателя.
Матрица ошибок — это смирение, переведённое в арифметику. Она не даёт соврать себе, что сигнал и есть истина: заставляет выписать, сколько всего вокруг, и только потом делить. Тест не сообщает тебе правду — он сдвигает твой априор на заранее известную величину. Кто держит в голове все четыре клетки, меняет мнение ровно настолько, насколько весит улика. Кто видит только ту клетку, что загорелась, — обманывается уверенно и каждый раз.