Дори за хора, които не се занимават с данни, терминът байесова статистика е популярен. Може да сте научили по време на дните си в университета като един от задължителните часове, които да вземете, без да осъзнавате колко важна е статистиката на Байес. Всъщност байесовската статистика не е просто конкретен метод или дори клас от методи; това е напълно различна парадигма за извършване на статистически анализ.

Защо байесова статистика?

Бейсовата статистика ви предоставя инструментите за актуализиране на вашите вярвания в доказателствата за нови данни, което е идея, която е често срещана в много сценарии от реалния свят, като например за проследяване на пандемии, прогнозиране на икономически тенденции или прогнозиране на изменението на климата. Те също така са гръбнакът на много от по-известните статистически модели, като Gaussian Process.



По-важното е, че изучаването на принципите на байесовата статистика може да бъде ценен актив за вас като учен по данни, защото ви дава нова перспектива за решаване на нови проблеми с динамични източници на данни от реалния свят.

Забележка: Това е втората публикация от планирана поредица от 5 части, обхващаща темата за байесовото статистическо програмиране.

  1. Първата публикация обхващаше основните теории за байесовската статистика и как да внедрим проста такава в Python.


2. Това ще ви запознае с байесовия извод и как да извършвате основни оценки на модела.

3.Третатачаст ще покрие специален тип байесов алгоритъм, наречен верига на Марков Монте Карло (MCMC).



4. Четвъртата част ще се основава на предишни публикации, за да изгради по-сложен байесов модел.

5. Пета част ще ви запознае с усъвършенстваните концепции за проверка и оценка на байесовия модел.

Съдържание:

  1. Обобщение
  2. Извод и прогноза
  3. Оценка на модела
  4. Анализ на чувствителността

Без повече шум, нека започнем въведението към публикацията за статистическото програмиране на Bayesian.

Обобщение

В първата публикация „тук“ обсъдих основния принцип на байесовата статистика, ключовите термини и как да внедря прост модел с помощта на PyMC3. Използваме примера с концентрацията на радон (токсичен газ), за да илюстрираме как работи байесовото програмиране в сценарий от реалния свят.

Ние ще ви информираме от мястото, където спряхме. Така че, ако искате да следвате тези стъпки по-подробно, моля, вижте моята първа публикация, преди да продължите.

  1. Инсталирайте зависимости (препоръчително е да използвате conda)
conda install -c conda-forge pymc3

2. Изтеглете нашите данни

!wget "https://raw.githubusercontent.com/fonnesbeck/mcmc_pydata_london_2019/master/data/radon.csv"

3. Вземете колоната, представляваща интерес (log_radon)

import pandas as pd
radon = pd.read_csv('./radon.csv', index_col=0)
anoka_radon = radon.query('county=="ANOKA"').log_radon

4. Изградете прост байесов модел

from pymc3 import Model, Normal, Uniform
with Model() as radon_model:
    μ = Normal(’μ’, mu=0, sd=10)
    σ = Uniform(’σ’, 0, 10)

5. Компилирайте и обучете модела

with radon_model:
    dist = Normal('dist', mu=μ, sd=σ, observed=anoka_radon)

6. Начертайте няколко произволни извадки от обучения модел на Bayes

from pymc3 import sample

with radon_model:
    samples = sample(1000, tune=1000, cores=2, random_seed=12)

Сега, след като сте наваксали с тези стъпки, нека да преминем към основните теми на тази публикация: Байесов извод и оценка

Извод и прогноза

Предвид нашия обучен байесов модел, можем да се опитаме да направим прогноза или заключение. Да предположим, че ни е интересно да разберем вероятността всяко домакинство в САЩ да бъде изложено на концентрация на log-radon над 1,1 (т.е. P(log-radon › 1,1)).

Можем да извършим постериорна вероятностна прогноза. Помните ли този човек от предишната ни публикация?

Но вместо да оценим параметър, θ (да се чете: тита), от нашите наблюдаеми данни, y, ние правим извод за концентрацията на логаритмичен радон (z)както следва.

И подобно на формулата на Бейс, можем да намерим вероятността за z при всички наблюдения, y, по следната формула.

Формулата за последващо прогнозиране ще обобщи вероятността за z дадени θпараметри, умножена по вероятността за всички θ дадени всички наблюдения y, за всички стойности от възможните θ

Използвайки PyMC3, първо вземаме проби от задното разпределение 1000 пъти, за да получим 1000 стойности на z (логаритмичен радон).

from pymc3 import sample_posterior_predictive

with radon_model:
    pp_samples = sample_posterior_predictive(samples, 1000)

След това можем да намерим средната стойност, за да извлечем вероятността.

radon_thres = 1.1
(pp_samples['dist'] > radon_thres).mean()
>>> 0.39105769230769233

Вероятността американско домакинство в ANOKA да има логаритмична концентрация на радон над 1,1 е приблизително 39,11%.

Оценка на модела

Но как да разберем дали нашият байесов модел е добър?

Един от основните методи за оценка би бил да сравним нашата прогноза с наблюдаваните данни. Можете да избирате от множество статистически тестове, като t-тест или F-тест, за да сравните сходството между двете „популации“.

За настоящия ни случай на употреба нека използваме графична визуализация, за да сравним как нашата прогноза се справя с емпиричната стойност.

Първо, нека намерим колекция от проби, която надвишава нашия праг на концентрация на логаритмичен радон от 1,1:

import seaborn as sns
import matplotlib.pyplot as plt
p_thresh = [(sample>1.1).mean() for sample in pp_samples['dist']]

След това начертаваме разпределението на тези проби с емпиричната стойност.

ax = sns.distplot(p_thresh)
plt.vlines((anoka_radon>1.1).mean(), *ax.set_ylim(), color='g')

Зелената вертикална линия илюстрира средната емпирична вероятност едно домакинство в ANOKA да има логаритмична концентрация на експозиция на радон, която е над 1,1, докато хистограмата представлява нашето извадково разпределение от обучения байесов модел.

Графикът предполага, че нашето първоначално предположение не е лошо, но има места за подобрения, за да накараме разпределението да се сближи с истинската емпирична стойност. Допълнителна фина настройка може да се извърши чрез:

  1. Променяйки нашите предположения относно разпределенията на вашите параметри,
  2. Експериментиране с различни начални стойности за нашия модел на Байс

Предишна чувствителност

Също така е важно да проверим чувствителността на нашите приоритети, избрани по-рано при изграждането на модела.

Това може да стане чрез изграждане на същия модел, но промяна на предишните дистрибуции, както следва.

from pymc3 import Flat, HalfCauchy, plot_posterior

with Model() as sensitivity_check:
    
    μ = Flat('μ')
    σ = HalfCauchy('σ', 5)
    
    dist = Normal('dist', mu=μ, sd=σ, observed=anoka_radon)
    
    sensitivity_samples = sample(1000, cores=2)

И след това начертаване на разпределението.

# Sensitivity evaluation distribution
plot_posterior(sensitivity_samples, var_names=['μ'], ref_val=1.1)

И сравнявайки го с оригинала.

# Original distribution
plot_posterior(samples, var_names=['μ'], ref_val=1.1)

Сравнявайки двата графика, изглежда, че предишните ни версии са нечувствителни към вариации (т.е. доста стабилни), подчертавайки, че сме една крачка към постигането на нашата цел! Единственото, което остава, е да направим допълнителни корекции на нашия модел, като постоянно експериментираме с различни предишни или начални стойности.

Мисли за раздяла

Обсъдихме как да правим изводи и да оценяваме нашите байесови модели. В следващата публикация ще разгледам основните процеси, които управляват байесовото статистическо програмиране, като алгоритъма на Монте Карло Марковска верига (MCMC), който ни помага да извършваме вземане на проби. Останете на линия!

Абонирайте се за моя имейл бюлетин:https://tinyurl.com/2npw2fnz където редовно обобщавам изследователски статии за ИИ на обикновен английски и красива визуализация.