站点正在导入数据,暂时处于只读模式:这段时间里无法登录,也不能发帖或回复。

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

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

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

我们假设注册考试需要回答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%)

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

相关数学知识:

期望值

3
  1. kittydog
    kittydog

    为什么要把简单的事情搞这么复杂?你要的只是一种过滤水军的门槛,又不是入学考试。

    说实话,大部分人对这种论坛,请他来他都懒的点开看

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

    @kittydog <#132010> 我就是喜欢把简单的事情搞复杂,关你屁事啊?

    说实话:

    2
  3. kittydog
    kittydog

    @Ambulance <#132012> 你的回答说明两点:

    1.性格比较自卑,很难接受别人的意见

    2.脾气比较急躁,素质修养也较差,出口就来句脏话

    如果你想要做成事情,比如给客户介绍或汇报,一定要养成把复杂的事情变简单的习惯,不是每个人都有闲心听长篇大论的。

    4
  4. 葱侠123
    葱侠123

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

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

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

    1. 好为人师,不懂装懂

    2. 颐使气指,以己度人

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

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

    3
  6. 天下无贼
    天下无贼

    @kittydog <#132010>

    为什么要把简单的事情搞这么复杂?你要的只是一种过滤水军的门槛,又不是入学考试。说实话,大部分人对这种论坛,请他来他都懒的点开看

    说句不客气的,2047现在的人气根本不会有什么水军看得上的………………

    1
  7. thphd
    thphd2047前站长

    @kittydog <#132010> @天下无贼 <#132021> 我也说句不客气的,迷雾通论坛欢迎两位。community.geph.io

    3
  8. 爱狗却养猫饭丝
    爱狗却养猫

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

    我有两个建议:

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

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

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

    @爱狗却养猫 <#132141>

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

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

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

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

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

    1
  10. 爱狗却养猫饭丝
    爱狗却养猫

    @Ambulance <#132175> 我竟然直接忽略了那段60%的话!自罚一杯。

  11. Lhermitte到家打我电话
    Lhermitte一歪脖子背就痛

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

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

    5