Теорема Баєса на практиці — апріорі, правдоподібність, апостеріорі
Викладена 1763 року в посмертному есеї преподобного Томаса Баєса й незалежно перевідкрита П'єром-Симоном Лапласом, теорема каже нам, як оновлювати оцінку ймовірності, коли надходять нові дані. Сьогодні вона лежить в основі спам-фільтрів, медичної діагностики, пошукових систем, машинного навчання та наукового оцінювання параметрів — усюди, де нам потрібно кількісно міркувати про невизначеність.
1. Умовна ймовірність
Умовна ймовірність P(A|B) — це ймовірність події A за умови, що B сталася. Якщо обмежити простір елементарних подій результатами, де виконується B, то P(A|B) — це частка тих результатів, що також задовольняють A:
Це можна переписати як правило добутку: P(A ∩ B) = P(A|B) · P(B). Ту саму сумісну ймовірність також можна записати як P(A ∩ B) = P(B|A) · P(A). Прирівнювання цих виразів дає теорему Баєса.
2. Виведення теореми Баєса
Почнімо з симетрії сумісної ймовірності:
∴ P(H|E) = P(E|H) · P(H) / P(E)
Це й усе. Теорема — не що інше, як правило добутку, застосоване двічі. Її сила випливає з вибору того, на що зумовлювати:
- H — це гіпотеза, що нас цікавить (модель, значення параметра, діагноз).
- E — це дані/свідчення (спостережувані дані, результат тесту, вимірювання).
Нормувальна стала P(E) обчислюється за формулою повної ймовірності сумуванням за всіма взаємовиключними гіпотезами Hi:
3. Апріорі, правдоподібність, апостеріорі, дані
Апріорі
У що ми вірили щодо H до того, як побачили дані. Кодує знання предметної області, попередні експерименти чи незнання.
Правдоподібність
Наскільки ймовірні дані, якщо гіпотеза H істинна? Це те, що модель передбачає для даних.
Апостеріорі
Наше оновлене переконання після врахування даних. Апріорі, зсунуте даними. Це стає новим апріорі для наступного оновлення.
Знаменник P(E) часто називають маргінальною правдоподібністю або свідченням моделі. Він однаковий для всіх гіпотез і діє як нормувальна стала, що забезпечує суму/інтеграл апостеріорного розподілу, рівний 1.
4. Приклад: точність медичного тесту
Хвороба вражає 1% населення. Тест має 99% чутливість (P(+|хвороба) = 0.99) і 98% специфічність (P(−|немає хвороби) = 0.98, тож P(+|немає хвороби) = 0.02). Яка ймовірність насправді мати хворобу за позитивного результату тесту?
P(+) = P(+|D)·P(D) + P(+|¬D)·P(¬D) = 0.99×0.01 + 0.02×0.99 = 0.0099 + 0.0198 = 0.0297
P(D|+) = 0.99×0.01 / 0.0297 ≈ 0.333
Попри високоточний тест, позитивний результат означає лише 33% шанс насправді мати хворобу — бо хвороба рідкісна (низьке апріорі). Це помилка базової частоти: ігнорування апріорі призводить до вкрай надмірно впевнених діагнозів. Баєсівський підхід робить це явним.
5. Спряжені апріорні розподіли — оновлення у замкненій формі
Коли апріорний та апостеріорний розподіли належать до одного й того ж сімейства розподілів, апріорі називають спряженим до правдоподібності. Це дозволяє баєсівське оновлення без чисельного інтегрування.
Бета-біноміальний: оцінювання зміщення монети
Припустімо, ми підкидаємо монету n разів і спостерігаємо k гербів. Правдоподібність — Binomial(n, θ). Якщо апріорі для зміщення θ є Beta(α, β), то апостеріорі також бета-розподіл:
// Середнє апостеріорі = (α+k)/(α+β+n) // Рівномірне апріорі: α=β=1 → середнє апостеріорі = (k+1)/(n+2) [згладжування Лапласа]
Інші спряжені пари
- Гаусова правдоподібність + гаусове апріорі → гаусове апостеріорі (лінійний фільтр Калмана)
- Пуассонова правдоподібність + гамма-апріорі → гамма-апостеріорі (оцінювання частоти подій)
- Категоріальна правдоподібність + апріорі Діріхле → апостеріорі Діріхле (мовні моделі)
- Експоненційна правдоподібність + гамма-апріорі → гамма-апостеріорі (аналіз виживаності)
6. Баєсівський проти частотного підходу
Дискусія філософська, але практичні наслідки реальні:
- Частотна (класична) статистика трактує ймовірність як довгострокову частоту в повторюваних експериментах. Параметри фіксовані, але невідомі; довірчі інтервали та p-значення описують властивості процедури, а не параметра.
- Баєсівська статистика трактує ймовірність як ступінь переконаності, який можна приписати окремим подіям і параметрам. Апостеріорі напряму відповідає на питання «зважаючи на те, що я спостерігав, наскільки ймовірне кожне значення θ?»
На практиці, за великого обсягу даних і відносно неінформативних апріорі, баєсівські та частотні точкові оцінки збігаються. Розходження найважливіше за розрідженості даних (де апріорі має значення), множинних порівнянь (де баєсівська ієрархія регуляризує автоматично) та послідовних експериментів (де баєсівське оновлення природне).
7. JavaScript: баєсівський підкид монети та наївний Баєс
Послідовне баєсівське оновлення зміщення монети
// Бета-розподіл для зміщення монети θ ∈ [0,1]
// Аналітичне оновлення: після спостереження [герби, решки] збільшуємо α і β.
class BetaCoinInference {
constructor(alpha = 1, beta = 1) { // рівномірне апріорі
this.alpha = alpha;
this.beta = beta;
}
observe(heads, tails) {
this.alpha += heads;
this.beta += tails;
}
get mean() { return this.alpha / (this.alpha + this.beta); }
get variance() {
const s = this.alpha + this.beta;
return (this.alpha * this.beta) / (s * s * (s + 1));
}
get credible95() {
// Грубий 95% HPD через нормальне наближення до бета-розподілу
const mu = this.mean;
const std = Math.sqrt(this.variance);
return [Math.max(0, mu - 1.96*std), Math.min(1, mu + 1.96*std)];
}
}
const coin = new BetaCoinInference();
coin.observe(3, 1);
console.log(coin.mean.toFixed(3)); // 0.800 (апріорі α=β=1, дані 3 герби 1 решка → α=4,β=2)
coin.observe(7, 9);
console.log(coin.mean.toFixed(3)); // 0.526 (загалом 10 гербів 10 решок → середнє близько 0.5)
console.log(coin.credible95); // [~0.36, ~0.69]
Наївний баєсівський спам-класифікатор
// Наївний Баєс: P(спам|слова) ∝ P(спам) × Π P(слово|спам)
// Припускає, що появи слів умовно незалежні за заданого класу.
class NaiveBayes {
constructor() {
this.counts = { spam: {}, ham: {} };
this.totals = { spam: 0, ham: 0 };
this.docCount= { spam: 0, ham: 0 };
}
train(text, label) {
this.docCount[label]++;
for (const word of text.toLowerCase().split(/\W+/)) {
if (!word) continue;
this.counts[label][word] = (this.counts[label][word] || 0) + 1;
this.totals[label]++;
}
}
_logP(word, label) {
// Згладжування Лапласа: додаємо 1 до кожного підрахунку слів
const vocabSize = Object.keys({...this.counts.spam, ...this.counts.ham}).length;
const count = (this.counts[label][word] || 0) + 1;
return Math.log(count / (this.totals[label] + vocabSize));
}
classify(text) {
const words = text.toLowerCase().split(/\W+/).filter(Boolean);
const total = this.docCount.spam + this.docCount.ham;
const logSpam = Math.log(this.docCount.spam / total)
+ words.reduce((s, w) => s + this._logP(w, 'spam'), 0);
const logHam = Math.log(this.docCount.ham / total)
+ words.reduce((s, w) => s + this._logP(w, 'ham'), 0);
return logSpam > logHam ? 'spam' : 'ham';
}
}
const nb = new NaiveBayes();
nb.train('free money win prize lottery', 'spam');
nb.train('click here to claim your reward', 'spam');
nb.train('meeting tomorrow at 3pm in the office', 'ham');
nb.train('please review the attached report', 'ham');
console.log(nb.classify('free prize money claim')); // 'spam' (спам)
console.log(nb.classify('office meeting agenda review')); // 'ham' (не спам)
8. Застосування в різних галузях
Фільтрація Калмана (навігація)
Фільтр Калмана — це оптимальний баєсівський оцінювач для лінійних гаусових систем. Кожен крок оновлення за вимірюванням застосовує теорему Баєса — множить гаусове апріорі на гаусову правдоподібність, щоб отримати гаусове апостеріорі — за допомогою матричних рівнянь у замкненій формі. GPS-приймачі, автопілоти літаків і локалізація роботів — усі вони використовують фільтри Калмана.
Баєсівські нейронні мережі
Замість навчання єдиного вектора ваг баєсівська нейронна мережа вчить апостеріорний розподіл над вагами. Це дає каліброване оцінювання невизначеності та природну регуляризацію (апостеріорі має пік в оцінці MAP, що дорівнює максимуму правдоподібності з L2-регуляризацією за гаусового апріорі). Варіаційне висновування та Monte Carlo dropout — практичні наближення.
A/B-тестування та оптимізація коефіцієнта конверсії
Замість очікування фіксованого обсягу вибірки та проведення частотного тесту баєсівське A/B-тестування безперервно оновлює апостеріорі над коефіцієнтами конверсії θA та θB. Ви можете обчислити P(θB > θA | дані) у будь-який момент і зупинитися раніше з повним кількісним вираженням впевненості — уникаючи водночас недостатньо потужних тестів і роздутих хибних спрацювань через довільну зупинку.
Інтерактивна ймовірність
Досліджуйте випадкові блукання, дошки Гальтона та центральну граничну теорему — і побачте, як апостеріорні розподіли звужуються зі зростанням обсягу вибірки.