Все материалы
Продуктовая аналитикагайдсредний

Чувствительность и специфичность теста: расчёт на примере

Чувствительность и специфичность теста, PPV и NPV на синтетических данных. Распространённость, пороги, интервалы и перенос в антифрод с кодом Python.

КейсПрактика24 сентября 2026 г.12 мин

Лаборатория сообщает чувствительность 85% и специфичность 97%. Кажется, положительный результат должен почти наверняка означать наличие искомого состояния. Но в условной группе, где это состояние встречается редко, большинство положительных результатов окажутся ложными. Ошибка не в формуле теста: перепутаны условные вероятности. Разберём чувствительность и специфичность на собственных синтетических данных, затем применим тот же расчёт к сигналам антифрода. Пример не описывает реальный медицинский тест.

Короткий ответ: четыре показателя с разными знаменателями

  • Чувствительность — доля положительных результатов среди людей с состоянием. Специфичность — доля отрицательных результатов среди людей без него.
  • PPV — доля действительно имеющих состояние среди положительных результатов. NPV — доля не имеющих состояния среди отрицательных.
  • PPV и NPV зависят от распространённости состояния в проверяемой популяции. Высокая специфичность не гарантирует высокий PPV при редком состоянии.
  • Все показатели относятся к определённому порогу, способу измерения и составу выборки. Показывайте таблицу частот, интервалы и правила получения эталонного ответа.

Матрица ошибок: от людей к вероятностям

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

Пусть в синтетической выборке 10 000 независимых участников. Состояние по заранее определённому эталону есть у 200, у остальных 9800 его нет. Мы задаём чувствительность 85% и специфичность 97% и рассчитываем ожидаемые частоты; они специально получаются целыми. У 170 участников с состоянием тест положителен, у 30 отрицателен. Среди остальных 294 получат ложноположительный ответ, 9506 — верный отрицательный.

TP, true positive, — 170 совпавших положительных ответов. FN, false negative, — 30 пропусков состояния. FP, false positive, — 294 ложные тревоги. TN, true negative, — 9506 совпавших отрицательных ответов. Порядок ячеек в разных пакетах различается, поэтому сохраните подписи строк и столбцов. Не переносите четыре числа в функцию по памяти: транспонирование меняет условие, относительно которого вычисляется доля.

Чувствительность равна TP / (TP + FN), специфичность — TN / (TN + FP). Эти знаменатели определяются эталонным состоянием. Для PPV нужен другой знаменатель: TP + FP, все положительные ответы теста. В нашем примере PPV = 170 / 464 ≈ 36,64%. То есть заданные 85% и 97% совместимы с тем, что подтверждается заметно меньше половины положительных сигналов.

Условная популяция, распространённость 2%
ТестСостояние естьСостояния нетВсего
Положительный170 (TP)294 (FP)464
Отрицательный30 (FN)9506 (TN)9536
Всего200980010000

Почему распространённость меняет смысл положительного ответа

Теперь проверим такую же по размеру условную группу, где состояние есть у 20%, сохранив чувствительность и специфичность. Получаем 1700 истинных положительных, 300 ложноотрицательных, 240 ложноположительных и 7760 истинных отрицательных. PPV вырастает до 87,63%. Мы не улучшали измерение: изменили соотношение людей с состоянием и без него перед применением теста.

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

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

PPV, NPV и формула Байеса

Для распространённости π положительная прогностическая ценность равна Se × π / [Se × π + (1 − Sp) × (1 − π)]. В числителе доля всей популяции, у которой одновременно есть состояние и положительный тест. Знаменатель добавляет долю ложных тревог. Такая запись объясняет, почему нельзя заменить PPV чувствительностью: они обусловлены разными событиями.

Отрицательная прогностическая ценность рассчитывается аналогично по отрицательным результатам. При распространённости 2% наш NPV составляет 99,69%, при 20% — 96,28%. Высокий NPV при редком состоянии частично возникает из-за большого числа людей без него. Сам по себе этот процент не сообщает, сколько случаев тест пропустил: для этого вернитесь к FN и чувствительности.

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

Вероятность состояния среди положительных ответов
PPV = Se × π / [Se × π + (1 − Sp) × (1 − π)]

π — доля состояния в целевой популяции; Se и Sp относятся к этому порогу и условиям.

Воспроизводимый расчёт Python

Код ниже полностью задаёт размер популяции и параметры. Он строит частоты для двух распространённостей и для дополнительного порога, затем печатает PPV, NPV и долю всех правильных ответов. Эта доля, accuracy, в первых двух сценариях равна 96,76% и 94,60%. Более высокая accuracy у редкого состояния не означает, что положительный результат там надёжнее: PPV как раз гораздо ниже.

Мы также вычисляем интервалы Уилсона. Поскольку частоты сконструированы из заданных вероятностей, интервалы здесь показывают, что получилось бы при анализе такой наблюдённой таблицы как биномиальной выборки. Это учебная демонстрация неопределённости, а не неопределённость самих заданных параметров модели. В реальном исследовании частоты являются результатом наблюдений, и предпосылки независимости нужно проверять.

Для чувствительности 170/200 интервал примерно 79,39–89,29%, для специфичности 9506/9800 — 96,64–97,32%. Разная ширина закономерна: чувствительность оценивалась по 200 участникам с состоянием, специфичность — по 9800 без него. Сообщать для обеих мер только общий размер исследования значит скрыть, сколько информации фактически поддерживает каждую оценку.

pythonМатрица ошибок и интервалы
from statsmodels.stats.proportion import proportion_confint

n = 10000
for prev, sens, spec in [(.02,.85,.97),(.20,.85,.97),(.02,.70,.99)]:
    positive = round(n*prev)
    tp, tn = round(positive*sens), round((n-positive)*spec)
    fn, fp = positive-tp, n-positive-tn
    ppv, npv = tp/(tp+fp), tn/(tn+fn)
    print("prevalence,sensitivity,specificity",prev,sens,spec)
    print("TP,FN,FP,TN",tp,fn,fp,tn)
    print("PPV,NPV,accuracy",ppv,npv,(tp+tn)/n)
    print("LR+, LR-",sens/(1-spec),(1-sens)/spec)
    print("Wilson sensitivity",proportion_confint(tp,tp+fn,method="wilson"))
    print("Wilson specificity",proportion_confint(tn,tn+fp,method="wilson"))
    print("Wilson PPV",proportion_confint(tp,tp+fp,method="wilson"))

Порог: меньше ложных тревог, больше пропусков

Представим более строгий порог того же условного сигнала: чувствительность становится 70%, специфичность 99%. При распространённости 2% получаем 140 истинных положительных, 60 пропусков, 98 ложных тревог и 9702 истинных отрицательных. PPV повышается до 58,82%, но число пропущенных состояний удваивается относительно исходного сценария. Эти параметры заданы для иллюстрации компромисса, а не оценены по реальному распределению измерений.

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

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

Синтетические сценарии, 10 000 наблюдений каждый
РаспространённостьSe / SpTP / FPFNPPV
2%85% / 97%170 / 2943036,64%
20%85% / 97%1700 / 24030087,63%
2%70% / 99%140 / 986058,82%

Отношения правдоподобия: ещё один способ пересчёта

Положительное отношение правдоподобия LR+ равно Se / (1 − Sp), отрицательное LR− — (1 − Se) / Sp. Для исходного сценария получаются примерно 28,33 и 0,1546. Эти коэффициенты переводят предтестовые шансы в послетестовые умножением. После этого шансы нужно обратно преобразовать в вероятность; просто умножать вероятность на LR нельзя.

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

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

Эталон и способ отбора определяют качество оценки

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

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

Если у одного участника много тестов, обычный биномиальный интервал по всем пробам будет игнорировать зависимость. Можно выбрать заранее определённое измерение на человека или применить подход, учитывающий повторения. Аналог в продукте — десятки транзакций одного аккаунта. Разделение train/test по транзакциям без разделения аккаунтов способно поместить почти одинаковую информацию по обе стороны проверки.

Перенос на антифрод: precision и recall

Назовём положительным классом подтверждённое нарушение, положительным ответом — сигнал модели. Тогда чувствительность соответствует recall, а PPV — precision. Специфичность показывает долю добросовестных случаев без тревоги. Все числа основной таблицы можно прочитать как 10 000 условных аккаунтов, среди которых 200 нарушителей: модель найдёт 170, пропустит 30 и направит на проверку 294 добросовестных.

В таком потоке проверяющие получат 464 сигнала. Precision 36,64% означает, что значительная часть очереди не подтвердится. При более строгом условном пороге очередь сократится до 238 сигналов, из них подтвердятся 140. Решение зависит от пропускной способности и ущерба, а не только от максимального precision. Отчёт должен показать одновременно объём очереди и пропущенные нарушения, иначе оптимизация одной метрики скроет цену улучшения.

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

Как переносить тест в новую популяцию

Перед пересчётом уточните источник новой распространённости: независимая выборка, полная разметка потока или сценарное предположение. Если это предположение, покажите диапазон сценариев. Число после запятой в PPV не делает неизвестную базовую долю известной. В нашем примере 2% и 20% выбраны сознательно для сравнения, а не представлены как оценка какой-либо болезни или рынка.

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

Как сравнить два теста на одних участниках

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

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

Ошибки, которые стоит искать в отчёте

  • Подставлять чувствительность вместо вероятности состояния после положительного теста. Последствие: положительным результатам приписывают слишком высокую уверенность.
  • Сообщать accuracy без доли положительного класса. Последствие: большое число правильных отрицательных скрывает пропуски редкого события.
  • Выбирать порог и проверять его на тех же наблюдениях. Последствие: итог завышен из-за подстройки под шум выборки.
  • Проверять эталоном только положительные ответы. Последствие: ложноотрицательные случаи остаются невидимыми, recall нельзя честно оценить.
  • Считать незавершённое расследование отрицательной меткой. Последствие: качество зависит от скорости обработки, а не только от модели.
  • Переносить PPV из специально отобранной группы на общий поток. Последствие: очередь и доля подтверждений прогнозируются по чужой распространённости.

Что почитать и как оформить результат

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

В обзоре Петри и Сэбина есть маршрут чтения основных статистических понятий. Для продуктовых классификаторов продолжите материалом о precision, recall и ROC AUC; для неопределённости — разбором доверительных интервалов. Обзор книг по доказательной медицине помогает оценить дизайн проверки и применимость результата, когда одного численного расчёта уже недостаточно.

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

Продолжить чтение
Вся библиотека