Собесов

zadachi_ds: Зонт в дождь — Байес для прогноза погоды

Статистика и теорверBayesЛёгкаяJunior

Условие

В городе дождь идёт в 20% дней. Прогноз погоды правильно предсказывает дождь (когда он будет) в 90% случаев и правильно предсказывает «не будет дождя» (когда его не будет) в 85% случаев. Сегодня синоптики говорят: «будет дождь». Какова вероятность, что дождь действительно будет?

Решение

Обозначения

  • R — событие «дождь идёт» (rain). P(R) = 0.20.
  • — «нет дождя». P(R̄) = 0.80.
  • F — прогноз «будет дождь».
  • P(F | R) = 0.90 (sensitivity / true positive rate).
  • P(F̄ | R̄) = 0.85P(F | R̄) = 0.15 (false positive rate).

Нужно: P(R | F).

Формула Байеса

P(R | F) = P(F | R) · P(R) / P(F)

P(F) = P(F | R) · P(R) + P(F | R̄) · P(R̄)
     = 0.90 · 0.20 + 0.15 · 0.80
     = 0.18 + 0.12 = 0.30

P(R | F) = 0.18 / 0.30 = 0.60

Ответ: 60%

Интерпретация

Несмотря на «90% точность» прогноза дождя, апостериорная вероятность всего 60%, потому что:

  • Дождь редкий (20%), много дней без дождя.
  • 15% ложноположительных при 80% «не-дождевых» дней даёт 12% общего трафика «прогноз дождя, нет дождя».
  • 90% правильных при 20% «дождевых» дней даёт 18% общего трафика «прогноз дождя, есть дождь».

Из 100 прогнозов «дождь»: 18 правильных, 12 ложных → 60% правда.

Дерево событий

                   P(R) = 0.20
                  ┌─────────────── F  (0.90) → R∧F: 0.18  ✓ true positive
                  │              └ F̄ (0.10) → R∧F̄: 0.02
   100% дней ─────┤
                  │
                  └ P(R̄) = 0.80   F  (0.15) → R̄∧F: 0.12  ✗ false positive
                                  F̄ (0.85) → R̄∧F̄: 0.68

P(F) = 0.18 + 0.12 = 0.30 PPV = P(R | F) = 0.18 / 0.30 = 0.60

Аналогия с медицинскими тестами

Тот же расчёт: «sensitivity 90%, specificity 85%, prevalence 20% → PPV = 60%».

Если болезнь редкая (prevalence 1%):

PPV = (0.90 · 0.01) / (0.90 · 0.01 + 0.15 · 0.99)
    = 0.009 / 0.158 ≈ 5.7%

Положительный тест почти ничего не значит — отсюда «медицинский парадокс».

А если синоптики говорят «не будет дождя»

P(F̄)     = P(F̄|R) · P(R) + P(F̄|R̄) · P(R̄) = 0.10 · 0.20 + 0.85 · 0.80 = 0.70
P(R | F̄) = 0.02 / 0.70 = 0.0286
P(R̄ | F̄) = 0.68 / 0.70 = 0.9714

То есть «нет дождя» по прогнозу очень надёжно (97%) — отрицательный тест точный, потому что отрицательное состояние частое.

Подводные камни

  1. «90% точность» неопределена: точность чего? Sensitivity? Accuracy? Без уточнения — задача нерешаема.
  2. Apriori prevalence (20%) часто игнорируют. Без неё PPV не посчитать.
  3. accuracy = 0.90P(F | R) = 0.90: accuracy сводит обе ошибки в одно число; sensitivity/specificity — раздельно.
  4. P(R | F) ≠ P(F | R) — главная ошибка интуиции. Bayesian flip.
  5. Зависимости между днями: реальные прогнозы коррелируют — Markov цепь, не iid.
  6. Базовое отношение шансов: odds(R) = 0.2/0.8 = 0.25. После прогноза odds(R|F) = 0.25 · 6 = 1.5P = 0.6. (Likelihood ratio = 0.9 / 0.15 = 6).

Эталонный ответ

P(R | F) = P(F | R) · P(R) / [P(F|R) · P(R) + P(F|R̄) · P(R̄)]
         = 0.9 · 0.2 / (0.9 · 0.2 + 0.15 · 0.8)
         = 0.18 / 0.30 = 0.60

60% — несмотря на «высокую точность» прогноза. Причина: дождь редкий (20%), и доля ложноположительных оказывается соизмерима с долей true positives.

Главная ошибка интуиции: путать P(F | R) (sensitivity) и P(R | F) (PPV) — их связь даёт Байес и зависит от prevalence.

Хочешь увидеть разбор?

Зарегистрируйся бесплатно — откроется развёрнутое решение этой задачи и ещё 4 на выбор.

Зарегистрироваться и увидеть разбор
Уже есть аккаунт? Войти