Перейти к содержимому

Численный пример — Иван и скобки

Задача: проследить, как меняется P(L)P(L) навыка «раскрытие скобок» у Ивана после каждой задачи.

Иван открывает первую задачу с раскрытием скобок. Раньше он эту тему не проходил.

  • P(L0)=0.2P(L_0) = 0.2 — априорная уверенность («скорее не знает»).
  • P(S)=0.1P(S) = 0.1, P(G)=0.2P(G) = 0.2, P(T)=0.1P(T) = 0.1 — литературные дефолты.

Применяем формулу posterior для correct:

Ppost=0.2⋅0.90.2⋅0.9+0.8⋅0.2=0.180.34≈0.529P_{\text{post}} = \frac{0.2 \cdot 0.9}{0.2 \cdot 0.9 + 0.8 \cdot 0.2} = \frac{0.18}{0.34} \approx 0.529

Learning step:

P(L1)=0.529+(1−0.529)⋅0.1≈0.576P(L_1) = 0.529 + (1 - 0.529) \cdot 0.1 \approx 0.576

0.20 → 0.58. Уверенность подскочила почти втрое после одной задачи. Это правильно: априорно мы почти не знали, теперь у нас есть сильный позитивный сигнал.

Теперь P(L)=0.576P(L) = 0.576.

Ppost=0.576⋅0.90.576⋅0.9+0.424⋅0.2=0.5180.518+0.085≈0.859P_{\text{post}} = \frac{0.576 \cdot 0.9}{0.576 \cdot 0.9 + 0.424 \cdot 0.2} = \frac{0.518}{0.518 + 0.085} \approx 0.859 P(L2)=0.859+(1−0.859)⋅0.1≈0.873P(L_2) = 0.859 + (1 - 0.859) \cdot 0.1 \approx 0.873

0.58 → 0.87. Ещё одна правильная — модель почти уверена.

P(L)=0.873P(L) = 0.873. Применяем formula для wrong:

Ppost=0.873⋅0.10.873⋅0.1+0.127⋅0.9=0.08730.0873+0.1143≈0.433P_{\text{post}} = \frac{0.873 \cdot 0.1}{0.873 \cdot 0.1 + 0.127 \cdot 0.9} = \frac{0.0873}{0.0873 + 0.1143} \approx 0.433 P(L3)=0.433+(1−0.433)⋅0.1≈0.490P(L_3) = 0.433 + (1 - 0.433) \cdot 0.1 \approx 0.490

0.87 → 0.49. Заметное падение, но не до нуля. Модель видит ошибку и говорит:

Был на 0.87 — это могла быть невнимательность (slip). Снижаю до 0.49. Жду следующей задачи.

P(L)=0.490P(L) = 0.490.

Ppost=0.490⋅0.90.490⋅0.9+0.510⋅0.2=0.4410.441+0.102≈0.812P_{\text{post}} = \frac{0.490 \cdot 0.9}{0.490 \cdot 0.9 + 0.510 \cdot 0.2} = \frac{0.441}{0.441 + 0.102} \approx 0.812 P(L4)=0.812+(1−0.812)⋅0.1≈0.831P(L_4) = 0.812 + (1 - 0.812) \cdot 0.1 \approx 0.831

0.49 → 0.83. Реабилитация.

Задача 5 — ошибся (вторая ошибка подряд после восстановления)

Заголовок раздела «Задача 5 — ошибся (вторая ошибка подряд после восстановления)»

P(L)=0.831P(L) = 0.831.

Ppost=0.831⋅0.10.831⋅0.1+0.169⋅0.9=0.08310.0831+0.1521≈0.353P_{\text{post}} = \frac{0.831 \cdot 0.1}{0.831 \cdot 0.1 + 0.169 \cdot 0.9} = \frac{0.0831}{0.0831 + 0.1521} \approx 0.353 P(L5)=0.353+(1−0.353)⋅0.1≈0.418P(L_5) = 0.353 + (1 - 0.353) \cdot 0.1 \approx 0.418

0.83 → 0.42. Снова падение.

P(L)=0.418P(L) = 0.418.

Ppost=0.418⋅0.10.418⋅0.1+0.582⋅0.9=0.04180.0418+0.5238≈0.074P_{\text{post}} = \frac{0.418 \cdot 0.1}{0.418 \cdot 0.1 + 0.582 \cdot 0.9} = \frac{0.0418}{0.0418 + 0.5238} \approx 0.074 P(L6)=0.074+(1−0.074)⋅0.1≈0.166P(L_6) = 0.074 + (1 - 0.074) \cdot 0.1 \approx 0.166

0.42 → 0.17. Третья ошибка подряд — модель уверенно говорит: ученик навыком не владеет, slip объясняет одну ошибку, не три.

Это и есть «понимание не случайной ошибки vs реального пробела».

ШагОтветP(L)P(L) доposteriorP(L)P(L) после
0———0.200
1✓0.2000.5290.576
2✓0.5760.8590.873
3✗0.8730.4330.490
4✓0.4900.8120.831
5✗0.8310.3530.418
6✗0.4180.0740.166
P(L)
1.0 ┤
0.9 ┤ ●
0.8 ┤
0.7 ┤
0.6 ┤● ●
0.5 ┤
0.4 ┤ ● ●
0.3 ┤
0.2 ┤● ●
0.1 ┤
0.0 ┴──┬──┬──┬──┬──┬──┬──┬─────
0 1 2 3 4 5 6
шаг
  1. Серия правильных (1-2) → быстро поднимает уверенность.
  2. Одна ошибка на высокой уверенности → объясняется как slip, модель «не теряет голову».
  3. Серия ошибок (5-6) → модель уверенно опускает оценку, потому что slip двух подряд маловероятен.
  4. Volatility в районе P(L)≈0.5P(L) \approx 0.5 — это правильно, у модели мало уверенности.

В главе 8 мы посмотрим, как из этой истории P(L)P(L) выбирается следующая задача для Ивана. Скорее всего, после такой картины — задача попроще на тот же навык, чтобы закрепить, а не идти дальше.

Эти числа точно совпадают с реализацией в web/lib/bkt.ts. Полный прогон в Python с графиком — будет в Notebook 1 — BKT from scratch.