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

Четыре числа BKT

BKT — это всего четыре числа на каждый навык. Если их понять — поняли половину модели.

СимволИмяСмыслДефолт
P(L0)P(L_0)Initial knowledgeаприорная уверенность, что ученик уже знает навык до первой попытки0.2
P(T)P(T)Transitвероятность научиться за одну попытку (даже если ошибся)0.1
P(S)P(S)Slip«знал, но ошибся по невнимательности»0.1
P(G)P(G)Guess«не знал, но угадал / интуитивно правильно ответил»0.2
Дефолты параметров на одной шкале

Литературные значения Corbett–Anderson: обычно лежат в коридоре 0.1–0.2 — модель остаётся устойчивой.

Каждое из чисел отвечает на один конкретный вопрос, без которого модель ломается.

P(L0)P(L_0) — куда поставить ученика на старте

Заголовок раздела «P(L0)P(L_0)P(L0​) — куда поставить ученика на старте»

До первого ответа мы про конкретного Ваню ничего не знаем. Ставим средне-низкое значение (он только начал тему):

P(L0)=0.2P(L_0) = 0.2

Можно поднять до 0.4–0.5, если ученик уже силён в пререквизитах. Можно опустить до 0.1, если он только что пришёл из 7-го класса. На демо мы держим один дефолт для всех — упрощает разметку.

P(T)P(T) — может ли ученик научиться по ходу решения

Заголовок раздела «P(T)P(T)P(T) — может ли ученик научиться по ходу решения»

Очень важная штука. Без P(T)P(T) модель «застывает»: ученик решает 100 задач, не растёт, и единственный способ повысить P(L)P(L) — серия правильных ответов.

С P(T)>0P(T) > 0 модель говорит:

Даже если ты ошибся — у тебя был шанс в процессе что-то понять. Поэтому я чуть-чуть подниму уверенность в твоём владении навыком.

P(T)=0.1P(T) = 0.1 — литературный дефолт. На каждой попытке прибавляем 10% шанса «сдвинуться к знанию».

Без slip’а одна ошибка обнуляет уверенность модели:

Ученик ответил неправильно ⇒ он не знает.

Но это вранье. Каждый из нас иногда:

  • путает знак;
  • неправильно списывает условие;
  • торопится и считает в уме;
  • невнимателен после 4-й задачи подряд.

P(S)=0.1P(S) = 0.1 говорит модели:

10% правильных решающих всё равно ошибаются. Не паникуй на одной ошибке.

В результате одна ошибка снижает уверенность, но не до нуля.

Зеркальный к slip:

  • задача с выбором из 4 ответов даёт 25% шанса угадать вслепую;
  • иногда ученик «случайно» подставляет правильное значение;
  • бывают задачи, где можно вычислить результат, не понимая механизма.

P(G)=0.2P(G) = 0.2:

20% правильных ответов могут не отражать настоящее знание. Не впадай в эйфорию на одном угадывании.

В результате один правильный ответ повышает уверенность, но не до 1.0.

Это литературные дефолты из работ по BKT с 1995 года (Corbett & Anderson, User Modeling and User-Adapted Interaction). Они работают на широком спектре предметов (математика, грамматика, программирование) при отсутствии конкретных данных.

В реальном продакшне их можно (и нужно) подгонять автоматически на исторических ответах учеников через алгоритм EM (Expectation-Maximization). Это разбирается в Notebook 3 — EM fitting.

«Почему P(S)=0.1P(S) = 0.1, а не P(S)=0.15P(S) = 0.15

Готовый ответ:

Это литературные дефолты из классических работ по BKT. На реальных данных их подгоняют через EM-алгоритм, мы это запланировали в roadmap. Для MVP важно зафиксировать разумную базу — изменение в районе 0.05–0.15 качественно картину не меняет.

Что произойдёт, если параметры сильно не такие

Заголовок раздела «Что произойдёт, если параметры сильно не такие»

Полное исследование чувствительности — в Notebook 2 — Parameter sensitivity. Краткий спойлер:

  • P(G)=0.5P(G) = 0.5 — модель «не верит» правильным ответам, P(L)P(L) почти не растёт. Учеников будет «гонять по тренировке» бесконечно.
  • P(S)=0.5P(S) = 0.5 — модель «не верит» неправильным ответам, P(L)P(L) почти не падает. Слабые ученики получают слишком сложные задачи.
  • P(T)=0P(T) = 0 — ученик не учится, может только демонстрировать знания. Никакого реального обучения не моделируется.
  • P(T)=0.5P(T) = 0.5 — ученик учится «бегом», достигает 0.95 за 2-3 задачи. Реалистично только для очень мотивированных взрослых.

Дефолты 0.2 / 0.1 / 0.1 / 0.2 — золотая середина.

Поиграй: как P(S)P(S) и P(G)P(G) влияют на кривую P(solve)P(\text{solve})

Заголовок раздела «Поиграй: как P(S)P(S)P(S) и P(G)P(G)P(G) влияют на кривую P(solve)P(\text{solve})P(solve)»

Двигай ползунки и наблюдай: P(G)P(G) — это левый край прямой (чему равна вероятность решения, когда P(L)=0P(L)=0), а 1P(S)1 - P(S)правый (потолок при P(L)=1P(L)=1). Между ними — наклон, который равен 1P(S)P(G)1 - P(S) - P(G).

Прямая. P(solve) при P(L)=0 равно P(G), при P(L)=1 равно 1−P(S). Наклон = 1−P(S)−P(G).

Если P(S)+P(G)1P(S) + P(G) \to 1 (например 0.5/0.5) — кривая плоская, и тогда наблюдение «решил/не решил» ничего не говорит о P(L)P(L). В этом случае BKT не работает.

Теперь, когда у нас есть состояние (P(L)P(L)) и параметры (P(T)/P(S)/P(G)P(T)/P(S)/P(G)), можно перейти к формуле обновления — самой математике BKT. Это следующая глава.