用户学习效果评测

前言

最近在做一个分析用户学习效果的项目。具体的说,对于一个用户$u_1$, 他在学习的过程中做了一些题目,那么如何通过这个信息去评价他当前的水平呢?

这个问题简单的考虑的话,直接取平均分就可以了——这当然是不行的,因为在我们的应用场景中,用户不会去完成所有的题目,更常见的情况是:在数万量级的题目中,用户只回答了其中的几道题。 还有个办法是对每个题目分析用户的答题情况(比如答题平均分),然后再反推用户的能力。 这样做法的依然会有问题。 因为新手都会回答比较简单的一些题目,而高手则倾向于回答难度更高的题目,导致的结果就是在每个题目下,答题人的能力水平是有差别,分数也就不再具有参考价值。

思路

在学术界,对于此类问题,一般采用IRT(item response theory)来解决,然而目前IRT没有较好的应对大数据集的开源工具(常用的是R语言实现的的LTM包),并且IRT模型只评价学生答题的对错,对于连续的值则无能为力。而我们往往要分析百万量级以上的用户和对应的数万量级的题目,并且答题分数是连续的。
而我想到方法则是矩阵分解。因为问题事实上可以看做是推荐的问题。在常见的基于协同过滤的推荐系统中,有如下评分矩阵:

i1 i2 i3 i4
u1 2 3
u2 1 3
u3 2 4

在这个矩阵中,i1~i4表示物品,u1~u3表示用户,元素表示用户对某个物品的评分。推荐系统中,我们试图补全这个矩阵,即预测用户对商品的评分,然后把评分较高的物品推荐给用户。矩阵分解就是补全评分矩阵最常用的方法。评分矩阵为$M_{3\times4}$,假设这4个物品包含了2个维度的隐含属性,则$M=PU$,其中$P_{3\times2}$表示用户对两个隐含属性的感兴趣程度,$U_{2\times4}$表示物品和两个隐含属性的联系。

对应到学习效果评估中,也有一个用户答题的得分矩阵,其中题目可以看做是推荐中的物品,答题得分看做是用户对物品的评分,用户的技能可以认为是隐含属性。通过矩阵分解,我们可以得到用户对各个技能的掌握程度P和问题对应的技能U。然后,可以预测用户未回答题目的得分,从而评估用户的实际水平。

按照这个思路,我做了一些相关实验,取用户三个月的数据作为训练数据,并预测其未来的答题成绩,得到结果的RMSE约为7.67(百分制)

改进

后来发现这个方法已经有人尝试过了,在论文MATRIX AND TENSOR FACTORIZATION FOR PREDICTING STUDENT PERFORMANCE中,作者在传统矩阵分解模型上做了一些改进。