文章
树洞

论生成新用户注册试卷的算法

Ambulance 阿弥陀佛
Ambulance  ·  2021年3月19日 夫人必自侮,然後人侮之;家必自毀,而後人毀之;國必自伐,而後人伐之。

注:本文仅提供一种生成论坛注册考题算法的思路,具体实现仍然有很多细节需要进一步确定。

我们假设注册考试需要回答10道题,答对8道题为合格,即期望的通过率为80%(这个期望通过率可以根据实际情况随时调整)。

首先,题库中的每一道考题都需要统计其正确率。为了避免机器人用户捣乱,只有答题正确率达到60%,即答对6题以上的用户,才统计其每一道题的回答(同样,答题正确率可以和期望通过率挂钩浮动)。

10道题的总分为100,每题10分。如果设定的期望通过率为80%,那么就意味着,在题库中随机抽取题目时,将每道题的正确率乘以每题分数(10分),并算出总和,如果高于80分的话就可以生成一套比较合理的试卷。当然,为了设计方便,实际中可以上下浮动5%,即总和在75-85这个区间就可以视作是合理的结果。

如果随机抽取出的题目难度过大,分数过低,那么就删去正确率最低的题目,换成正确率较高的题目,循环直到生成出符合标准的试卷为止,反之亦然。

以上是基本的思路。然而这里还有一个问题需要完善:对于答题人数过少,无法统计正确率的新题,该如何处理?

因此以下改进这个算法:

改进的思路是,在10题中,插入若干道新考题。当然,插入的新考题越多,对试卷难度造成不可预期的波动就会越大。这里建议插入1-2题比较合理。

假设每道考题有且仅有四个选项,那么在即使瞎猜的情况下,也会有至少25%的正确率。那么,插入2道新题,这2题的得分期望值就在5-20分之间。由于新题的难度无法预计,我们就按照最坏的情况进行处理,即认为这2题的总期望值为5分。如果通过考试的期望值为80分的话,那么就意味着剩下8题的总期望值就应为75分。

进一步地说,如果某题的正确率在40%以下,可以认为是比较难的题目。如果低于25%,属于过难,就可以删除出题库。(25%这条线同样可以适当上浮)

总结一下,算法可以概括为:

在题库中随机抽取8道已有题+2道新题

得分期望值 = SUM(每道已有题的正确率 * 10) + 25% * 10 * 新题的数量 // 25% * 10为每道新题的最小期望

while(得分期望值 < 期望分数线 * 95% || 得分期望值 > 期望分数线 * 105%)

if (得分期望值 < 期望分数线 * 95%)

(更换正确率最低的试题)

else if (得分期望值 > 期望分数线 * 105%)

(更换正确率最高的试题)

相关数学知识:

期望值

菜单
  1. kittydog  
    内容已删除
    内容已被作者本人或管理员删除。 如有疑问,请点击菜单按钮,查看管理日志以了解原因。
  2. Ambulance 阿弥陀佛
    Ambulance   夫人必自侮,然後人侮之;家必自毀,而後人毀之;國必自伐,而後人伐之。
    内容已删除
    内容已被作者本人或管理员删除。 如有疑问,请点击菜单按钮,查看管理日志以了解原因。
  3. kittydog  
    内容已删除
    内容已被作者本人或管理员删除。 如有疑问,请点击菜单按钮,查看管理日志以了解原因。
  4. 葱侠123  

    防机器人的话我觉得验证码就够了,防五毛的话关键还是看它的言论。

  5. Ambulance 阿弥陀佛
    Ambulance   夫人必自侮,然後人侮之;家必自毀,而後人毀之;國必自伐,而後人伐之。

    @kittydog #132015 你的回答也说明两点:

    1. 好为人师,不懂装懂

    2. 颐使气指,以己度人

    你不是我的客户,也不是我的领导,也没出钱给我,我凭什么要关心你是不是看得懂?

    既然你这么喜欢指点别人,那么希望你也好好反省一下,是不是自己一开始说话的方式过于失礼。

  6. 天下无贼  
    内容已删除
    内容已被作者本人或管理员删除。 如有疑问,请点击菜单按钮,查看管理日志以了解原因。
  7. thphd   2047前站长
    内容已删除
    内容已被作者本人或管理员删除。 如有疑问,请点击菜单按钮,查看管理日志以了解原因。
  8. 爱狗却养猫 饭丝
    爱狗却养猫  

    非常有意思的构想。手动点赞。

    我有两个建议:

    1. “如果通过考试的期望值为80分的话,那么就意味着剩下8题的总期望值就应为75分。”这样的话每道题的期望值是0.9375,也就是需要93.75%的正确率;结果就是只能抽取简单的旧题,而难度稍高一些的旧题无法进入试卷。就此的建议是不要把新题的期望值加入算法中(这样就不用做任何假设),只看旧题的总期望值

    2. 每题的难度系数如果采用所有做题人的正确率,则目标对象是“所有试图注册2047的人”。假设某种极端情况,有人用机器来随机刷题,从而将所有题目的正确率都调低,趋向于25%,这就会导致算法无法选出一套通过率大于等于80%的试卷。因此,我建议题目的难度系数只采用达到一定分数以上的trials(例如60/100分)中的数据。这样的目标对象是“试图注册2047并且更有可能达到合格分数的人”。楼主已经将此考虑在内。

  9. Ambulance 阿弥陀佛
    Ambulance   夫人必自侮,然後人侮之;家必自毀,而後人毀之;國必自伐,而後人伐之。

    @爱狗却养猫 #132141

    第一点我还是比较倾向于将新题期望值包括在内。因为每道新题都用2.5的最低期望本身就已经是极端情况,现实中的实际期望可能会至少去到5,使已有题的总期望值下降。另外通过考试的期望值也可以从80下调。

    当然这个还是要实际测试一下,大致就可以定出一个经验值了。

    第二点设计算法时已经考虑到了:

    为了避免机器人用户捣乱,只有答题正确率达到60%,即答对6题以上的用户,才统计其每一道题的回答(同样,答题正确率可以和期望通过率挂钩浮动)。

    如果设想得更深入一点,甚至通过考试的期望值也可以随着题库的整体难度上下浮动。当然这个就实在太过复杂,需要严谨地搞建模,坠痛苦的就是把鸭嘴笔这个水弄到里面

  10. 爱狗却养猫 饭丝
    爱狗却养猫  
  11. Lhermitte 到家打我电话
    Lhermitte   一歪脖子背就痛

    以我的理解站长希望是防fool,并不是针对水军(水军全是fool,fool不全是水军)或者五毛(五毛和fool有correlation,但是五毛不一定是fool,fool也不一定是五毛)。

    因此我觉得说防水军/五毛不需要这些题目的用户可能没搞清楚重点。