Задачи с несколькими навыками
Задача — это набор навыков
Заголовок раздела «Задача — это набор навыков»Реальная задача из учебника редко проверяет один микро-навык. Например:
требует одновременно:
linear_eq.expand_brackets(раскрытие скобок),arith.signs(умножение на отрицательное число),linear_eq.move_to_one_side(перенос через равно),linear_eq.divide_by_coefficient(деление на коэффициент).
Если у Ивана один из этих навыков на нуле — задача проваливается, даже если остальные на 0.95.
Как объединить по нескольким навыкам
Заголовок раздела «Как объединить P(solve)P(\text{solve})P(solve) по нескольким навыкам»У нас есть для каждого навыка . Как получить общую — для всей задачи?
Вариант A: арифметическое среднее (плохо)
Заголовок раздела «Вариант A: арифметическое среднее (плохо)»Возьмём задачу с 3 навыками: , , .
Получилось 0.70 — выглядит отлично. Селектор скажет: «эта задача в самой ZPD, дай её Ивану». Но в реальности Иван не справится: он гарантированно споткнётся на навыке 3, в котором у него только 0.20.
Арифметическое среднее скрывает слабое звено. Это плохо.
Вариант B: геометрическое среднее (правильно)
Заголовок раздела «Вариант B: геометрическое среднее (правильно)»На том же примере:
GM = 0.565 — гораздо ниже AM. Селектор увидит, что задача далеко не в ZPD (closeness всё-таки немалая), и возможно выберет что-то получше.
Почему GM «штрафует» слабое звено сильнее
Заголовок раздела «Почему GM «штрафует» слабое звено сильнее»Если хоть один из множителей маленький, всё произведение маленькое. Геометрическое среднее наследует это свойство. Это аналог «слабого звена цепи» — задача проваливается, если хоть один навык подведёт.
Сравнительная таблица
Заголовок раздела «Сравнительная таблица»| AM | GM | |||
|---|---|---|---|---|
| 0.5 | 0.5 | 0.5 | 0.500 | 0.500 |
| 0.7 | 0.7 | 0.7 | 0.700 | 0.700 |
| 0.9 | 0.9 | 0.3 | 0.700 | 0.624 |
| 0.95 | 0.95 | 0.2 | 0.700 | 0.503 |
| 0.99 | 0.99 | 0.1 | 0.693 | 0.461 |
| 0.5 | 0.5 | 0.05 | 0.350 | 0.171 |
Чем больше разрыв между сильным и слабым навыком, тем сильнее GM ниже AM. Это и есть то, что нам нужно.
Поиграй: AM vs GM vs min
Заголовок раздела «Поиграй: AM vs GM vs min»Двигай ползунки трёх и сравнивай три способа агрегации рядом. Особенно интересно: подвинь P₁=P₂=0.95, а P₃ — от 0.05 до 1.0. Заметишь, как GM «ловит» слабое звено, а AM его прячет.
Когда хоть одно P низкое — GM падает резко, AM — нет. min — слишком жёстко. GM — компромисс «слабого звена», который нам нужен.
Реализация
Заголовок раздела «Реализация»В коде web/lib/bkt.ts мы считаем GM через сумму логарифмов для
численной стабильности (произведения маленьких чисел могут получить
underflow):
const perSkillPL: Record<MicroSkillId, number> = {}; let logSum = 0; for (const skillId of task.microskills) { const pL = state.mastery[skillId] ?? params.pInit; perSkillPL[skillId] = pL; logSum += Math.log(Math.max(1e-6, pSolve(pL, params))); } const pSolveJoint = Math.exp(logSum / task.microskills.length);Тонкость: Math.max(1e-6, ...) защищает от . На
практике никогда не должно быть строго 0 (благодаря
), но защита бесплатна.
Альтернативы и почему мы их не взяли
Заголовок раздела «Альтернативы и почему мы их не взяли»| Метод | Идея | Почему не взяли |
|---|---|---|
| Минимум | «Задача провалится на самом слабом навыке» | Слишком жёстко; сильные навыки немного компенсируют слабые в реальности |
| Произведение | Каждый навык — независимое событие | Ровно то же, что -я степень GM; для разных задачи нельзя сравнивать |
| Гармоническое среднее | Тоже подавляет слабое звено | Сложнее объяснить, такая же по эффекту как GM |
| Многомерная логистика | Регрессия по навыкам | Нужны параметры на пары навыков — для разметки нужно много данных |
GM — это простой, интерпретируемый и математически обоснованный компромисс.
Что делать, если у задачи 5+ навыков
Заголовок раздела «Что делать, если у задачи 5+ навыков»Чем больше навыков, тем сильнее «штраф за разнобой». Это OK для начальной школы, но для длинных задач (10+ навыков) GM становится слишком пессимистичным.
В нашем плане для хака мы намеренно ограничиваем задачи 2-4 микро-навыками. Если задача требует 7+ — это значит её надо разбить на отдельные шаги (по одному микро-навыку) или это просто слишком большая задача для адаптивной модели.
Если спросят про multi-skill задачи
Заголовок раздела «Если спросят про multi-skill задачи»«Мы используем геометрическое среднее по микро-навыкам — это означает, что задача проваливается, если хоть один навык подведёт. Это лучше отражает реальность, чем простое усреднение, и формально мотивировано: соответствует независимым событиям провала.»