Skip to content

Tasks with multiple skills

Real textbook items rarely test one micro-skill. Example:

2(x3)=102(x − 3) = 10

needs simultaneously:

  • linear_eq.expand_brackets,
  • arith.signs,
  • linear_eq.move_to_one_side,
  • linear_eq.divide_by_coefficient.

If Ivan has zero mastery on any one — the task fails even if others sit at 0.95.

Combining P(solve)P(\text{solve}) across skills

Section titled “Combining P(solve)P(\text{solve})P(solve) across skills”

We have per-skill P(solvei)P(\text{solve}_i). What’s joint P(solvejoint)P(\text{solve}_{\text{joint}}) for the whole task?

PAM=1ni=1nP(solvei)P_{\text{AM}} = \frac{1}{n} \sum_{i=1}^{n} P(\text{solve}_i)

Three skills: P1=0.95P_1 = 0.95, P2=0.95P_2 = 0.95, P3=0.20P_3 = 0.20.

PAM=0.95+0.95+0.203=0.70P_{\text{AM}} = \frac{0.95 + 0.95 + 0.20}{3} = 0.70

Looks perfect — selector screams ZPD. Yet Ivan will almost certainly fail — skill 3 sits at 0.20.

Arithmetic mean hides the weak link.

PGM=exp(1ni=1nlogP(solvei))=i=1nP(solvei)nP_{\text{GM}} = \exp\left(\frac{1}{n} \sum_{i=1}^{n} \log P(\text{solve}_i)\right) = \sqrt[n]{\prod_{i=1}^{n} P(\text{solve}_i)}

Same example:

PGM=0.950.950.203=0.180530.565P_{\text{GM}} = \sqrt[3]{0.95 \cdot 0.95 \cdot 0.20} = \sqrt[3]{0.1805} \approx 0.565

GM 0.565 — much lower than AM. Selector sees it’s not really in ZPD (|0.5650.70.565 - 0.7| still sizable) and may pick something better.

If any factor is tiny, the whole product shrinks. Geometric mean inherits that — chain analogy: one weak link snaps the chain.

P1P_1P2P_2P3P_3AMGM
0.50.50.50.5000.500
0.70.70.70.7000.700
0.90.90.30.7000.624
0.950.950.20.7000.503
0.990.990.10.6930.461
0.50.50.050.3500.171

The wider the gap between strong and weak skills, the further GM drops below AM — exactly what we want.

Slide three P(solve)P(\text{solve}) sliders side by side. Especially fun: keep P₁=P₂=0.95 and sweep P₃ from 0.05 to 1.0 — GM exposes the weak skill; AM hides it.

A task with three micro-skills. Move the sliders and watch how the different aggregation methods behave.
Arith. mean
0.700
Geom. mean (ours)
0.565
min
0.200

When even one P is low, GM drops sharply but AM doesn’t. min is too harsh. GM is the «weakest-link» compromise we need.

In web/lib/bkt.ts we compute GM via sum of logs for numerical stability (tiny products 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);

Note: Math.max(1e-6, ...) guards log(0)=\log(0) = -\infty. In practice P(solve)P(\text{solve}) stays > 0 thanks to P(G)>0P(G) > 0, but the clamp is cheap insurance.

MethodIdeaWhy not
Minimum minPi\min P_ifailure follows weakest skillToo harsh; strong skills slightly cushion weak ones in reality
Product Pi\prod P_iindependence storySame as GM raised to nnth power; incomparable across different nn
Harmonic meanalso suppresses weak linksHarder to pitch; similar effect to GM
Multidimensional logisticregress on skill pairsNeeds pairwise parameters — heavy data appetite

GM — simple, interpretable, mathematically motivated compromise.

More skills ⇒ stronger “scatter penalty.” Fine for elementary items; for long multi-step problems (10+ skills) GM can get overly pessimistic.

Hackathon plan: cap tasks at 2–4 micro-skills. If an item needs 7+ — split into steps (one micro-skill each) or admit it’s too large for adaptive modeling.

“We aggregate with geometric mean across micro-skills — so the task fails if any required skill fails. That matches reality better than plain averaging, and corresponds to treating failures as independent events.”

The same calculation runs against the real matrix on the Progression matrix → Selector simulator page — 9 micro-skills and 20 tasks from the «Defineerimine» topic (curated by Andri Suga). Click “Strong +/−, weak ×/÷” and watch the geometric mean drag down exactly the tasks where the weakened skill is one of the core ones.

Companion project — Tom Kabel’s MATx. Once a student has the modeling down (our 9-microskill defining-skills matrix), equations like 2(x3)=102(x-3)=10 still need to be solved — that’s a different domain, and Tom has already built a tool for it. The 9↔9 mapping is on the Bridge to MATx page.