Как вычислить вероятность заболевания при положительном тесте с учетом чувствительности и специфичности
Что проверяют
Понимаете ли вы разницу между P(T+|D) и P(D|T+) и роль априорной вероятности. Это классическая ловушка base rate fallacy: при хорошем тесте и редкой болезни большая часть положительных результатов оказывается ложной. Следом спрашивают, что изменит второй положительный тест и как это связано с precision и recall.
Как отвечать
Назовите входные данные: чувствительность Se, доля положительных среди больных; специфичность Sp, доля отрицательных среди здоровых; распространённость p. По теореме Байеса:
def ppv(se, sp, p):
tp = se * p
fp = (1 - sp) * (1 - p)
return tp / (tp + fp)Проще всего объяснять на натуральных частотах. Пусть p = 1%, Se = 90%, Sp = 95%. Из 10 000 человек больны 100, из них тест поймает 90. Здоровых 9 900, и 5% из них, то есть 495, получат ложный плюс. Всего положительных 585, больных среди них 90: 90 / 585 ≈ 0.154, около 15%.
Дальше то, что отличает сильный ответ:
- второй тест: апостериорная вероятность становится новой априорной. Через отношение правдоподобия
LR+ = Se / (1 - Sp) = 18шансы90:495 ≈ 0.18превращаются в≈ 3.3, это около 77%. Верно только при условной независимости тестов; - связь с ML: чувствительность это recall, PPV это precision. Recall и специфичность от баланса классов не зависят, precision зависит, поэтому классификатор с высоким ROC AUC на редком классе даёт мало точных срабатываний;
- NPV: при низкой распространённости отрицательный результат, наоборот, почти наверняка верный.
Где спотыкаются
Отвечают «90%», подставляя чувствительность вместо искомой вероятности. Это та самая ошибка, ради которой задачу и задают.
Берут распространённость по всей популяции, когда на тест пришли люди с симптомами. У такой группы априорная вероятность выше, и PPV получается совсем другим.
Перемножают два прогона одного теста как независимые. На практике тест часто ошибается на одних и тех же людях, и второй плюс даёт меньше информации, чем обещает формула.