Tuesday, April 27, 2010

通过权重评分得到更美味的番茄炒蛋

哼哼,我首先声明这不是一篇cookbook文:)

在今天互联网上,我们可以广泛的看到用户反馈(评分)系统的身影.评价区间有1-10分的心理测评,自然也有超级简单的+/-法:譬如很赞一个美女的时候,你可以送个玫瑰或者番茄啥的,不以为然的时候更可以砸个鸡蛋过去.

举个例子,如果一篇文章写得很不错,有100个人参与评价,80个人给了1,20个人给了0,那么这篇文章的评分(rating)应该是0.8.越是很有可能以加粗高亮的方式推荐给其他用户,得到了很不错的点击率.这时,问题就出来了:rating值很高的资源就一定真的评价高么?

好吧,请允许我邪恶的想一下,如果某用户写了一篇文章,然后自己先给打几个1分.于是,史上最满意文章(rating值是1)就这样来到了我们的网站!

想象一下大多数新产生的资源不是得分极高(评价少,分数普遍高)就是得分极低(无人问津).这也是上述评分机制一个非常突出的缺陷.我们意识到:对于那些只有极少数评价的资源,他们的rating相较于那些有着极多评价的资源缺乏一定的certainty” or “believability

因此,我们需要"修正"一下这个计算方法:
  • 对于评价很少的资源,可以认为其本身既不受欢迎也没有啥争议(不能引起话题).它的rating更应该去接近去整体评价的平均水平;
  • 那些评价很多的资源,通过修正也更多的体现出"相对的高",也就是更多的接近其本来的rating.
那么,我们可以给所有资源的平均rating和特定评价资源的平均rating各引入一个权值.这个权值就是整体平均评价人数和资源评价人数.这里的整体平均评价人数的设定可以根据真实的计算得出(动态值),当然也可以自己根据喜好设定一个.值越小说明你对评分要求越不严格,影响rating所需要的票数越少;值越大说明你越在意样本过少所带来的负面影响,同时说明资源必须保证一定的人气.

br = ( (avg_num_votes * avg_rating) + (this_num_votes * this_rating) )/(avg_num_votes + this_num_votes)

其中:
  • avg_num_votes:整体平均评价人数
  • avg_rating:资源平均rating
  • this_num_votes:待评价资源人数
  • this_rating:待评价资源rating
    这也就是江湖上赫赫有名的贝叶斯评价(Bayesian probability),更多信息可以围观维基百科.
    实际上这种评分系统广泛适用于很多知名的WEB2.0站点.

    目前正在火热举行的 花儿朵朵等选秀活动,可以考虑在此基础上增加一个"人的可信度"(来鉴别社区、论坛的马甲号,具体可以采用积分等手段),这样或许对提高选手评价的准确性和有效性起到一定的积极作用,也可以衍生出更多有趣的现象.

    Saturday, April 24, 2010

    Thursday, April 15, 2010

    芒果圈SNS用户社交分析图谱[上]

    SNS(Social Networking Services,传说中的社会化网络服务)是当今互联网上很潮的一个应用.专指旨在帮助人们建立社会性网络的互联网应用服务.

    几乎各大互联网公司都推出了类似的产品,公司的芒果圈就是其中之一.上线运营小半年以来,各项指标都还不错,基本保持平稳增长趋势. 某个月黑风高的夜晚,我突然心血来潮,想看看社区当中用户的交往情况如何,也可以为下一阶段若干产品开发提供相关思路.

    从用户评论关系入手,通过数据库将数据做了格式化(csv),通过对偶来表示用户之间的交互:

    3,14822   //3号用户对14822号用户评论了一次哦
    4,14822
    14822,4
    5,14880

    这个简单的数据表示的关系图是这样的


    最终得到的数据大约有20万个左右这样的点,将所有的节点和边的关系映射出来之后得到:

    中间那个蓝色的点是我们的客服,围绕在周围的几乎就是社区的意见领袖了,大量的3-4节点自组织结构说明社区存在很多彼此熟悉的小圈子.看来初步验证了有人的地方就有江湖啊