硕鼠的博客站

范路的博客主站,时而会发些东西。

用户打分的算法

 

以前办比赛的时候遇到过一个问题,就是作品如果让用户来打分,就会出现有些作品只有几个人、甚至是一个人打分,但平均分数极高;而有些作品打分的人数很多,但平均分却不是很高。感觉按照普通平均分的方式来计算好像不是很公平。投票要省事儿得多,投票算的是累加。打分的话,如果有一个作品被打了很多5分制的1分,累加起来,可能也会比那个只有几个人打5分的数量多,所以肯定是不能累加的。

上学的时候,数学没有学好,于是只能去请教别人。感觉应该不是一个很复杂的统计问题。老婆是医学院的英语老师,于是就求她去问了问她的学生。

她的一个学生看来我的问题之后,表示这确实是一个最基础的统计学问题,并给出了一个医药方面的类似统计例子。

 

有两个医疗方案,进行临床试验,并统计否定率。

 

甲方案

乙方案

不喜欢

220

20

喜欢

9780

980

合计

10000

1000

否定率

22‰

20‰

 

从表面上看,甲方案的否定率(22‰)高,应当放弃。但这里的问题就和我们用户打分时遇到的问题很相近了:

甲乙两个方案的评价人数过于悬殊,因此某些不可忽略因素的构成差异十分容易造成假象。

 

比如现在考虑选举者的年龄分层

年龄组(岁)

甲方案

乙方案

评选人数

不喜欢人数

否定率(‰)

评选人数

不喜欢人数

否定率(‰)

<45

4000

40

10.0

800

10

12.5

≥45

6000

180

30.0

200

10

50.0

合计

10000

220

22.0

1000

20

20.0

这个时候就需要用率的标准化,也就是说需要让每个年龄段评价两个方案的人数一致。

怎么让人数一致呢,比较常见的做法是用各个分层的总人数代替之前的人数,比如4000+800=4800,换句话说就是假设找4800个小于45岁的人从新来评价甲乙两个方案。

年龄组(岁)(1)

标准人口数(2)

甲方案

乙方案

否定率(‰)(3)

预期否定数(4)=(2)(3)

否定率(‰)(5)

预期否定数(6)=(2)(5)

<45

4800

10.0

48

12.5

60

≥45

6200

30.0

186

50.0

310

合计

11000

18.0*

234

27.5*

370

标准化后的甲方案否定率:234/11000×1000‰=21.2‰

标准化后的乙方案否定率:370/11000×1000‰=33.6‰

这时候,明显乙的否定率(33.6‰)远远高于甲的(21.2‰),卡方检验也可以证明差别有统计学意义。换句话说,乙方案由于样本量较小,且有参选人中年轻人比例过高(80%),导致否定率较低,实际上乙方案在中年大叔中是不受欢迎的!

以上是不完全假设,因为谁也不能保证“某些不可忽略因素”都能被找到并且分层出来。

以上的这个例子,是学习医学的人提供的例子。

那么网络投票怎么办呢?关键还是在于如何划分打分用户的来源。我们恐怕很难搞清楚用户的年龄和性别。具体考虑哪些不可忽略的因素,又忽略哪些因素呢?这肯定没法做到绝对公平。而且,他给的例子计算的是否定率,而用户打分打回来的肯定是5分制或10分制、百分制的一个数字。估计在统计学里面应该还会有更加贴近的这种应用的算法。但是我觉得可以直接采用一些相对公平的简单方式来进行处理。

我的想法是这样的。首先,增加用户打分时的操作成本是不可取的,也就是说让用户提供额外的个人信息,以便我们来进行分类,这是不可取的。因为,这有可能会极大的降低用户打分的数量。

那么,我们可以使用的,也就是用户打分时的IP地址了。可以通过IP地址来分辨出用户来自于哪个地区。全国有三十几个省级行政区划,如果按照这个来分的话,好像又太过细碎,而且各个省级行政区划之间的发展平衡度差异极大。也许可以对这些数据进行合并,将一些参与人数很多的省份,和参与人数很少的省份进行合并,最终形成五到十个相对平衡的区域,海外投票如果有的话,根据数量可以放在一起,也可以加入到某个地区的票里面。毕竟这里需要的只是一个完整的统计数字,并不像苹果的AppStore那样,需要考虑到给各个国家和地区出分别的排行榜。

将所有的打分数据人工的分为五到十个相对平衡的区域之后,再按照上面的那个方法,分别计算出,给予各个分值的人数,占的总比例。最后,我们能够得到的就将是,百分之几的人给了5分、百分之多少的人,给了4分,等等。现在,每一个作品打各种分值的人数的百分比加起来,肯定不会等于百分之百。比如:一个作品进行5分制得评分,经过上面那个公式计算之后,可能计算出:

打分比例 分数
4% 5
3% 4
10% 3
3% 2
0% 1

计算得出:(3%*2+10%*3+3%*4+4%*5)/(3%+10%+3%+4%)=3.4

也就是说,这个作品的平均得分是3.4分。

 

这种计算方式,可以部分的解决网上打分的计算问题。这里面还有一个问题,就是有些作品的传播做得很不好,在某些区域里面就没有任何一个人给他打分。那么如果是一个互联网或移动互联网的应用,没有达到传播效果的话,肯定是不行的。可以将该地区起始平均分设置在一个比较低的位置,比如是2分,这个地区参与所有项目打分的有效人次,如果是1000人的话,那么没有在这个地区得到任何一个分数的作品,就可以按照这个作品在其得到过打分的区域里面的平均打分率,在这个区域中得到那么多个2分。也就是说这个作品,在其他区域,平均得到打分的几率是10%,也就是说会有10%的人给这个作品打分,那么在这个区域1000人次参与,却没有任何人给它打分的区域中得到10个2分。

以后是不是会将这套计分算法用在其他比赛中,还不确定。如果有些比赛遇到了此类问题,倒是不妨拿来一试。任何方法肯定都无法保证绝对的公平性,只能尽量公平,以后即使真的有机会去应用这套计分方式,也肯定还会根据具体的情况进行参数上的调整。

本人没有学过统计专业,上学的时候统计方面的东西学得也很是一般。这里也仅仅是拿着一个道听途说的公式来生搬硬套。如果有什么不对的地方欢迎指正,没准以后某此比赛上,这套东西就能用上,不要让我这个连半瓶子醋都没有的人,耽误了那些参赛者的热情。

 

You can leave a response, or trackback from your own site.

Leave a Reply

Close Bitnami banner
Bitnami