我的目标是通过使用先前答案的统计信息来动态确定测验中接下来要回答的问题
所以,我有:
我想以某种方式在公式中组合这些参数以为用户选择最合适的下一个问题
我该怎么办?
我的想法是首先给用户一个中位数难度的问题,然后检查用户分数是否低于最大分数的50%,然后获得具有25%难度的问题,否则获得75%的问题。然后在较小的限制(25-50%或50-75%等)上重复此模式
答案 0 :(得分:1)
让我们假设玩家具有固定的功能score = f(difficulty)
,该功能可以为每个难度提供预期的得分百分比。一旦知道了此功能,我们就可以将其求逆,并找到将给我们想要的预期分数的难度级别。
但是,该功能未知。但是我们以之前的问题的形式给出了此功能的示例。因此,我们可以将函数拟合到这些样本。如果您具有有关依存关系形式的知识,则可以将其包括在拟合函数的形式中。我将假设一个线性函数被截断:
score = f(difficulty) = max(0, min(m * difficulty + n, 1))
我们需要找到的两个参数是m
和n
。如果我们删除用户得分为100%或0%的所有示例问题,则可以忽略截断。然后,我们有一个构成线性方程组的样本列表:
score1 = m * difficulty1 + n
score2 = m * difficulty2 + n
score3 = m * difficulty3 + n
...
此系统通常没有解决方案。因此,我们可以求解最小二乘解。为此,我们将逐步构建一个2x2矩阵A
和一个表示系统b
的二维向量A * x = b
。我们将从零矩阵和零向量开始。对于每个问题,我们都会更新:
/ A11 A12 \ += / difficulty * difficulty difficulty \
\ A21 A22 / \ difficulty 1 /
/ b1 \ += / difficulty * score \
\ b2 / \ score /
一旦我们添加了至少两个问题,我们就可以解决:
m = (A12 * b2 - A22 * b1) / (A12 * A12 - A11 * A22)
n = (A12 * b1 - A11 * b2) / (A12 * A12 - A11 * A22)
我们可以找到预期得分P
的难度为:
difficulty = (P - n) / m
让我们举个例子。下表包含一些问题以及添加问题后函数的状态。
diff score | A11 A12 A22 b1 b2 | m n
--------------+----------------------------+-------------
70 0.3 | 4900 70 1 21 0.3 |
50 0.4 | 7400 120 2 41 0.7 | -0.005 0.65
40 0.5 | 9000 160 3 61 1.2 | -0.006 0.74
35 0.7 | 10225 195 4 85.5 1.9 | -0.010 0.96
这是拟合函数和示例问题:
如果我们想找到预期分数的难度,例如75%,我们得到:
difficulty(0.75) = 21.009