上一篇:《有多少人会点赞?》
提出问题
在上次的文章中,我们简单讨论了多少人会喜欢的问题。
这当然是一个很大的问题的很小的一部分,关于这个很大的问题,可以看很久以前写的文章:《点赞动力学》。
今天是在上一次文章的基础上,来问一个反过来的问题:如果我们已经知道有多少人、其中多少人为这个事物点了赞,那么我们如何来确定究竟有多少人真正喜欢这个东西呢?
这似乎很搞哦。。。
解决问题
上文主要是计算了人们给特定事物点赞的概率,有了这个概率,我们就可以通过二项式分布来“猜测”会有多少人点赞:
其中p是点赞的概率,我们已经计算了出来。
这个东西实际给出的,就是如果已经知道了n和p,那么可以求出点赞数x的一个分布。
今天的问题其实反了过来:如果我们已经知道了n和x,那么求p的一个分布。
x的分布是一个二项式分布,p的分布则是一个β分布,而且就是通过上面的式子再做一个归一化得到的:
或者写为:
从分布曲线上来看,二项式分布和β分布很接近——其实前者就是后者的离散化。
因此,如果我们知道了总人数n和点赞的人数x,那么这篇文章被喜欢的概率分布就有了。可问题到此还没有结束——难道就简单地求一个平均值么?
事实上,随着样本数量n的不同,平均值相等的情况也可以与很多不同的分布,比如下面这些分布曲线:
这些都是x/n=0.3的β分布,从高到低n分别为100、50、30、20、10
所以,为了可以更好地反映分布,光有一个平均值是不行的。
不妨考虑这么两个值:当整个分布的概率密度等于最大概率密度的1/e时的两个上下边界值。
如果将这里的1/e换位1/2的话,这个其实就是通讯和模拟电路里面的半波宽。
另一方面,1/e的地方也就是分布的Wilson熵最大的地方。
这里,为了解决这个问题,我们引入这么一个辅助函数:
其中pb=x/n。
下面的问题就是求解方程:
这里由于x和n-x都是整数,所以这个方程是一个代数方程而不是超越方程(如果是已知p求解x,那就是超越方程了)。但即便是一个代数方程,由于五次开始不存在通用的求解公式,而这里x和n-x显然都远大于5,所以这个方程不可简单求解。。。
要解决这个问题,一个有效的方式是寻找这个函数的近似,要求就是两者足够相似,同时又方便求解。
别说,这样的函数还真被找到了:
这俩人有多像呢?看下面的图:
n=10,x=7
n=50,x=35
n=100,x=70
n=1000,x=700
基本上,从100开始,两者就已经几乎无法分辨了。
这下,半波宽的问题就很容易解决了:
由于n一般很大,所以也可以用Taylor展开写作:
当然,由于这个结果是基于那个近似分布曲线的,所以我们需要代回到真正的β分布中,来看看是不是真的正好到最大概率密度的1/e。
结果还算不错,但依然有误差,所以通过调节,最后可以选择下面这个结果,它在n大于100的时候足够接近我们所要的结果,而在n只有几十的时候也可以有不错的近似:
为什么选择这样的调节?
这个是通过看分布曲线和边值数据试出来的,俗称瞎猜。
比如在n=100,x=70的情况下,原来的计算结果给出的下边界结果为0.356826,上边界结果为0.386835,经过调节后则上下边界的结果分别为0.364572和0.364388,而我们想要的数值是0.367879。可以接受。
于是,关于最初的问题,我们现在有三个值可以作为参考:
平均值、下边界值和上边界值。
接下来,如果你有一系列的文章,每篇文章都有一定的人阅读和一定的人喜欢,就可以利用这个下边界值来做排序——嗯,这也就是新闻排序中的Wilson算法(当然,由于我懒得去查Wilson的原文,也懒得去鼓捣别的近似函数,所以我这里采用的近似函数所给出的Wilson熵最大值的位置和对应的Wilson排序系数就和真正的Wilson算法有点差别了,不过思路还是一样的嘛~~~)。
下面的问题
上面的所有计算都是建立在所有的阅读和点赞都是随机事件的情况下。
有两类事件这里没有考虑:
1,由于排序的引入导致的马太效应;
2,恶意刷榜。
前者大概还能用算法来消除一定的影响,后者就免谈了,这不是算法能解决的问题。
当然了,在知道p的分布的情况下,是否可能逆推出上一篇文章中所说的群体品味分布和文章格调值,这就是另一个问题了。
如果你觉得这篇东西写得还行,愿意打赏我一口咖啡,请戳打赏页~~
本文遵守创作共享CC BY-NC-SA 3.0协议**
网友评论