Початкова віра

Баєсівський аналіз даних у Python

Michal Oleszak

Machine Learning Engineer

Апріорний розподіл

  • Апріорний розподіл відбиває те, що ми знаємо про параметр до спостереження даних:
    • нічого   →   рівномірний розподіл (усі значення однаково ймовірні)
    • старий апостеріорний   →   можна оновити новими даними

 

  • Можна взяти будь-який розподіл імовірностей як апріорний, щоб додати зовнішню інформацію в модель:
    • експертна думка
    • загальновідомі факти
    • попередні дослідження
    • субʼєктивне переконання
Баєсівський аналіз даних у Python

Вплив апріорного

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

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

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

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

Баєсівський аналіз даних у Python

Апріорний розподіл

  • Апріорний розподіл обираємо до того, як побачимо дані.
  • Вибір апріорного може вплинути на апостеріор (особливо за малого обсягу даних).
  • Щоб уникнути вибірковості, вибір апріорного має бути:
    • чітко задекларований,
    • обґрунтований: на попередніх дослідженнях, розумних припущеннях, експертній думці тощо.
Баєсівський аналіз даних у Python

Як обрати належний апріорний

Наша початкова віра: герб менш імовірний

Дзвоноподібна, але зміщена ліворуч щільність із піком близько 0,25.

Деякі варіанти кращі за інші!

 

Дзвоноподібна, але зміщена ліворуч щільність із піком близько 0,25, трохи вужча за попередню.

Баєсівський аналіз даних у Python

Спряжені апріорні

  • Деякі апріорні, помножені на певні правдоподібності, дають відомі апостеріорні.
  • Їх називають спряженими апріорними.
  • Для підкидання монети:
    • якщо обрати апріорний Beta(a, b),
    • тоді апостеріорний — Beta(#heads + a, #tosses - #heads + 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...