Априорное убеждение

Байесовский анализ данных на Python

Michal Oleszak

Machine Learning Engineer

Априорное распределение

  • Априорное распределение отражает знания о параметре до наблюдения данных:
    • ничего не известно   →   равномерное распределение (все значения равновероятны)
    • старое апостериорное   →   можно обновить с новыми данными

 

  • В качестве априорного можно выбрать любое вероятностное распределение — для включения внешней информации в модель:
    • мнение эксперта
    • общеизвестные факты
    • предыдущие исследования
    • субъективное убеждение
Байесовский анализ данных на Python

Влияние априорного распределения

Два графика плотности, наложенных друг на друга: один для априорного распределения, другой для апостериорного. Априорное — равномерное, апостериорное — колоколообразное, чуть выше.

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

Два графика плотности, наложенных друг на друга: один для априорного распределения, другой для апостериорного. Априорное — равномерное, апостериорное — колоколообразное, значительно выше.

Два графика плотности, наложенных друг на друга: один для априорного распределения, другой для апостериорного. Априорное — равномерное, апостериорное — колоколообразное, очень высокое.

Байесовский анализ данных на Python

Априорное распределение

  • Априорное распределение выбирается до наблюдения данных.
  • Выбор априорного может влиять на апостериорные результаты (особенно при малом объёме данных).
  • Чтобы избежать предвзятого выбора, априорное должно быть:
    • явно задокументировано,
    • обосновано: предыдущими исследованиями, разумными допущениями, мнением экспертов и т. д.
Байесовский анализ данных на Python

Выбор подходящего априорного

Наше априорное убеждение: орёл маловероятен

Колоколообразный, но смещённый влево график плотности с пиком около 0,25.

Одни варианты выбора лучше других!

 

Колоколообразный, но смещённый влево график плотности с пиком около 0,25, чуть уже предыдущего.

Байесовский анализ данных на Python

Сопряжённые априорные

  • Некоторые априорные, умноженные на конкретные функции правдоподобия, дают известные апостериорные распределения.
  • Они называются сопряжёнными априорными.
  • В случае подбрасывания монеты:
    • если выбрать априорное Beta(a, b),
    • то апостериорное равно Beta(#орлов + a, #бросков - #орлов + b)
  • Можно сделать выборку из апостериорного с помощью numpy.
  • get_heads_prob() из главы 1:
    def get_heads_prob(tosses):
      num_heads = np.sum(tosses)
      # prior: Beta(1,1)
      return np.random.beta(num_heads + 1, len(tosses) - num_heads + 1, 1000)
    
Байесовский анализ данных на Python

Два способа получить апостериорное распределение

Симуляция

  • Если апостериорное известно, можно сделать из него выборку с помощью numpy:
    draws = np.random.beta(2, 4, 1000)
    
  • Результат — массив из 1000 апостериорных значений:
    array([0.05941031, ..., 0.70015975])
    
  • Визуализировать можно с помощью
    sns.kdeplot(draws)
    

Вычисление

  • Если апостериорное неизвестно, его можно вычислить методом сеточной аппроксимации.
  • Результат — апостериорная вероятность для каждого узла сетки:
           head_prob  posterior_prob
    0           0.00        0.009901
    1           0.01        0.003624
               ...           ...
    10199       0.99        0.003624
    10200       1.00        0.009901
    
  • Визуализировать можно с помощью
    sns.lineplot(df["head_prob"], df["posterior_prob"])
    
Байесовский анализ данных на Python

Давайте потренируемся!

Байесовский анализ данных на Python

Preparing Video For Download...