Algorithm 根据之前的统计数据得出测验中下一个问题的公式
我的目标是通过使用以前答案的统计数据,动态地确定测验中的下一个问题 因此,我:Algorithm 根据之前的统计数据得出测验中下一个问题的公式,algorithm,math,statistics,data-analysis,analysis,Algorithm,Math,Statistics,Data Analysis,Analysis,我的目标是通过使用以前答案的统计数据,动态地确定测验中的下一个问题 因此,我: 难度问题字段(1-100) 你能得到的最大分数(256分) 用户已达到的问题分数(超出最大值x) 我想以某种方式将这些参数组合在公式中,为用户选择最合适的下一个问题 我怎么做 我的想法是给用户一个中等难度的问题作为第一个问题,然后检查用户的分数是否低于最高分数的50%,然后得到25%难度的问题,否则得到75%。然后在较小的时间段(25-50%或50-75%等)重复此模式。让我们假设玩家有一个固定的函数score=
- 难度问题字段(1-100)
- 你能得到的最大分数(256分)
- 用户已达到的问题分数(超出最大值x)
我的想法是给用户一个中等难度的问题作为第一个问题,然后检查用户的分数是否低于最高分数的50%,然后得到25%难度的问题,否则得到75%。然后在较小的时间段(25-50%或50-75%等)重复此模式。让我们假设玩家有一个固定的函数
score=f(难度)
,为每个难度提供预期的分数百分比。一旦我们知道了这个函数,我们就可以把它颠倒过来,找到给我们期望分数的难度等级
但是,该功能尚不清楚。但是我们有这个函数的例子,以我们前面的问题的形式。因此,我们可以对这些样本拟合一个函数。若你们知道依赖的形式,你们可以在拟合函数的形状中包含这些知识。我将简单地假设一个截断的线性函数:
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
和一个表示系统a*x=b
的二维向量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
你的系统的目标是什么?比如选择一个难度,很可能会让用户获得50%的可实现分数?@NicoSchertler yep,大约N%(我的意思可能不完全是50%)哇!非常感谢,这正是我想要的:)