Условие
Тест на редкую болезнь: чувствительность 99%, специфичность 95%. Распространённость болезни 1 на 10 000. Юзер получил положительный тест. Какова вероятность, что он действительно болен?
Решение
Формула Байеса
P(D | +) = P(+ | D) × P(D) / P(+)
Где:
P(+ | D)= sensitivity = 0.99P(D)= prior = 1/10000 = 0.0001P(+ | not D)= 1 - specificity = 0.05P(+)= P(+|D)·P(D) + P(+|notD)·P(notD) = 0.99×0.0001 + 0.05×0.9999 = 0.000099 + 0.04999 = 0.05009
P(D | +) = 0.000099 / 0.05009 ≈ 0.00198 ≈ 0.2%
Интуитивно
В выборке 1 000 000 человек:
- 100 больных (prior 0.0001), из них 99 тестов положительных.
- 999 900 здоровых, из них 5% = 49 995 ложно-положительных.
- Всего «+»: 99 + 49 995 = 50 094.
- Из них реально больны: 99.
99 / 50094 ≈ 0.2%
Урок: low prior + high false positive rate = ловушка
Даже при «99% sensitive», для редкого события positive predictive value (PPV) низкая. Это не баг теста — это математика.
Как улучшить
- Тест на pre-screened группе (высокий prior). Скрининг здоровых — низкий PPV.
- Confirmatory test: повторный/другой тест — если оба «+», PPV резко выше.
- Calibrated thresholds: повысить порог теста, упасть в sensitivity, но поднять specificity.
Аналогия в продуктовых задачах
- Anti-fraud: 99% accuracy при 0.1% fraud → большинство «flagged» — false positive.
- Bot detection.
- Spam filter.
- Churn predictor.
Подводные камни
- Путают
P(+ | D)(sensitivity) иP(D | +)(PPV). Это разные величины. - Sensitivity и specificity — характеристики теста, не зависят от prior. PPV/NPV — зависят.
- На рекламируемой «99% accuracy» (например, у COVID-теста) люди путают: точность ≠ PPV для редких событий.
- На сбалансированной выборке (50/50) PPV ≈ sensitivity. На несбалансированной всё другое.
- Sequential testing (2 теста подряд) умножает «+ | not D» если тесты независимы — что часто не так.
Эталонный ответ
P(D|+) = P(+|D)·P(D) / P(+). При prior 1/10000, sens 99%, spec 95% → PPV ≈ 0.2%. Главный урок: высокая accuracy ≠ хорошая PPV для редких событий — base rate fallacy.