根据以前的统计数据在测验中得到下一个问题的公式

时间:2018-10-07 09:39:54

标签: algorithm math statistics data-analysis analysis

我的目标是通过使用先前答案的统计信息来动态确定测验中接下来要回答的问题

所以,我有:

  • 困难领域(1-100)
  • 您可以质疑的最高分数(设为256)
  • 得分用户有问题(最多x项)

我想以某种方式在公式中组合这些参数以为用户选择最合适的下一个问题

我该怎么办?

我的想法是首先给用户一个中位数难度的问题,然后检查用户分数是否低于最大分数的50%,然后获得具有25%难度的问题,否则获得75%的问题。然后在较小的限制(25-50%或50-75%等)上重复此模式

1 个答案:

答案 0 :(得分:1)

让我们假设玩家具有固定的功能score = f(difficulty),该功能可以为每个难度提供预期的得分百分比。一旦知道了此功能,我们就可以将其求逆,并找到将给我们想要的预期分数的难度级别。

但是,该功能未知。但是我们以之前的问题的形式给出了此功能的示例。因此,我们可以将函数拟合到这些样本。如果您具有有关依存关系形式的知识,则可以将其包括在拟合函数的形式中。我将假设一个线性函数被截断:

score = f(difficulty) = max(0, min(m * difficulty + n, 1))

我们需要找到的两个参数是mn。如果我们删除用户得分为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

这是拟合函数和示例问题:

Fitted Function

如果我们想找到预期分数的难度,例如75%,我们得到:

difficulty(0.75) = 21.009