论生成新用户注册试卷的算法
注:本文仅提供一种生成论坛注册考题算法的思路,具体实现仍然有很多细节需要进一步确定。
我们假设注册考试需要回答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%)
(更换正确率最高的试题)
相关数学知识:
kittydog 为什么要把简单的事情搞这么复杂?你要的只是一种过滤水军的门槛,又不是入学考试。
说实话,大部分人对这种论坛,请他来他都懒的点开看
kittydog @Ambulance <#132012> 你的回答说明两点:
1.性格比较自卑,很难接受别人的意见
2.脾气比较急躁,素质修养也较差,出口就来句脏话
如果你想要做成事情,比如给客户介绍或汇报,一定要养成把复杂的事情变简单的习惯,不是每个人都有闲心听长篇大论的。
葱侠123 防机器人的话我觉得验证码就够了,防五毛的话关键还是看它的言论。
爱狗却养猫 非常有意思的构想。手动点赞。
我有两个建议:
-
“如果通过考试的期望值为80分的话,那么就意味着剩下8题的总期望值就应为75分。”这样的话每道题的期望值是0.9375,也就是需要93.75%的正确率;结果就是只能抽取简单的旧题,而难度稍高一些的旧题无法进入试卷。就此的建议是不要把新题的期望值加入算法中(这样就不用做任何假设),只看旧题的总期望值。
-
~~每题的难度系数如果采用所有做题人的正确率,则目标对象是“所有试图注册2047的人”。假设某种极端情况,有人用机器来随机刷题,从而将所有题目的正确率都调低,趋向于25%,这就会导致算法无法选出一套通过率大于等于80%的试卷。因此,我建议题目的难度系数只采用达到一定分数以上的trials(例如60/100分)中的数据。这样的目标对象是“试图注册2047并且更有可能达到合格分数的人”。~~楼主已经将此考虑在内。
-
Ambulance夫人必自侮,然後人侮之;家必自毀,而後人毀之;國必自伐,而後人伐之。 @爱狗却养猫 <#132141>
第一点我还是比较倾向于将新题期望值包括在内。因为每道新题都用2.5的最低期望本身就已经是极端情况,现实中的实际期望可能会至少去到5,使已有题的总期望值下降。另外通过考试的期望值也可以从80下调。
当然这个还是要实际测试一下,大致就可以定出一个经验值了。
第二点设计算法时已经考虑到了:
为了避免机器人用户捣乱,只有答题正确率达到60%,即答对6题以上的用户,才统计其每一道题的回答(同样,答题正确率可以和期望通过率挂钩浮动)。如果设想得更深入一点,甚至通过考试的期望值也可以随着题库的整体难度上下浮动。当然这个就实在太过复杂,需要严谨地搞建模,
坠痛苦的就是把鸭嘴笔这个水弄到里面爱狗却养猫 @Ambulance <#132175> 我竟然直接忽略了那段60%的话!自罚一杯。
Lhermitte一歪脖子背就痛 以我的理解站长希望是防fool,并不是针对水军(水军全是fool,fool不全是水军)或者五毛(五毛和fool有correlation,但是五毛不一定是fool,fool也不一定是五毛)。
因此我觉得说防水军/五毛不需要这些题目的用户可能没搞清楚重点。
