Формула Байеса на пальцах
Если ты увидишь страшную формулу
и захочешь убежать — спокойно. Сейчас разберём её на пальцах. По сути, это здравый смысл, записанный в виде дроби.
Главная идея Байеса
Заголовок раздела «Главная идея Байеса»Формула Байеса отвечает на вопрос:
Я думал, что событие A вероятно с такой-то частотой. Потом увидел наблюдение B. Как мне обновить свою оценку A?
В нашем случае:
- A = «ученик овладел навыком»
- B = «ученик решил задачу правильно»
Мы хотим вычислить — вероятность A при условии B.
Две коробки
Заголовок раздела «Две коробки»Представим, что мы сами не знаем — знает ли ученик навык. Поделим учеников на две коробки:
%%{init: {'theme': 'base','flowchart': {'nodeSpacing': 96,'rankSpacing': 108,'padding': 40,'curve': 'basis','useMaxWidth': true}}}%%
flowchart LR
Pop["Совокупность (1.0)"]
Pop -->|"P(L)"| K[Знают навык]
Pop -->|"1 - P(L)"| NK[Не знают]
K -->|"1 - P(S)"| KR[Знает и верно]
K -->|"P(S)"| KW[Знает, ошибся slip]
NK -->|"P(G)"| NKR[Не знает, угадал]
NK -->|"1 - P(G)"| NKW[Не знает, не угадал]
Если поставить численные значения:
- → 20% «знают», 80% «не знают»;
- → из «знающих» 90% решат правильно, 10% «оплошают»;
- → из «не знающих» 20% угадают, 80% ошибутся.
Получаем 4 ячейки:
| Решит правильно | Решит неправильно | |
|---|---|---|
| Знает () | ||
| Не знает () | ||
| Сумма | 0.34 | 0.66 |
Сумма всех ячеек = — это полная вероятность.
Что значит «решил правильно»
Заголовок раздела «Что значит «решил правильно»»Когда мы наблюдаем «правильно решил», мы переключаемся в столбец «решит правильно» — итого 0.34 на всех учеников.
Из этих 0.34, какая доля приходится на «знающих»?
Это и есть формула Байеса — числитель «знает И решил», знаменатель «всего решивших».
В общем виде:
И аналогично для «неправильно»:
Числовая проверка
Заголовок раздела «Числовая проверка»Возьмём наш пример: , , . Ученик ответил правильно.
С 0.2 уверенность подскочила до 0.529 — почти «50/50, скорее знает».
Что если он ответил неправильно?
Уверенность упала почти до нуля.
Почему модель так агрессивно «разыгрывается» на одной задаче
Заголовок раздела «Почему модель так агрессивно «разыгрывается» на одной задаче»Заметь: при ошибка роняет уверенность с 0.2 до 0.027 — почти в 8 раз. Это правильно:
Если мы и так почти не верили в Ваню, и он ошибся — это ровно то, что мы ожидали. Уверенность правильно укрепляется в направлении «не знает».
А вот при (мы уже уверены, что ученик знает) одна ошибка понижает только до ~0.61 — модель относится к этому как к slip’у и не паникует. Проверь сам:
Это и есть умное обновление.
Шаг 2: дополнение «можно научиться по ходу»
Заголовок раздела «Шаг 2: дополнение «можно научиться по ходу»»После применения формулы Байеса (мы её называем posterior) делаем ещё один маленький шаг:
Это значит:
Даже если posterior говорит, что ты не знал — у тебя был шанс научиться прямо в этой задаче с вероятностью .
С :
И для случая «ошибся»:
Итог: вся математика BKT
Заголовок раздела «Итог: вся математика BKT»Это всё. Вся модель.
// Шаг 1. Posterior через формулу Байеса.posterior = correct ? (pL * (1 - pSlip)) / (pL * (1 - pSlip) + (1 - pL) * pGuess) : (pL * pSlip) / (pL * pSlip + (1 - pL) * (1 - pGuess));
// Шаг 2. Обновление с учётом возможности доучиться.pL_new = posterior + (1 - posterior) * pTransit;Ровно так это и реализовано в web/lib/bkt.ts — функция bktUpdate. См. главу с разбором кода.
Поиграй: «два ящика» руками
Заголовок раздела «Поиграй: «два ящика» руками»Все 4 ячейки 2×2 таблицы — на одном квадрате. Двигай ползунки и нажимай кнопку «решил/ошибся». Подсветка покажет, какая часть «выживает» после наблюдения, и формула посчитает posterior.
Это тот же Bayes step-by-step, что и сверху, только без алгебры — ты просто видишь, какая площадь соответствует наблюдению.
В следующей главе — обе формулы рядом и intuition pumps, в главе 7 — полный численный пример из 8 задач.