本文系即将出版的《机器学习数学基础》中的“第5章概率”的“5.3.3 连续型随机分布”一节中“幂律分布”节选。本书将由电子工业出版社出版。相关主题网站:https://qiwsir.gitee.io/mathmetics/
微软曾在一篇报告中称,Windows和Office中80%的错误是由检测到的20%的错误导致的(参阅:https://www.crn.com/news/security/18821726/microsofts-ceo-80-20-rule-applies-to-bugs-not-just-features.htm?itc=refresh),这与著名的质量管理专家 Juran(Joseph M. Juran)利用帕雷托分布在1940年代的研究成果完全契合。
何谓帕雷托分布?1909年,意大利经济学家帕雷托(Vilfredo Federico Damaso Pareto)发布了他对社会财富分配的研究结果,即“20%的人占据了80%的社会财富”,并被概括为“ 80 / 20 80/20 80/20 ”法则,此结论的数学依据就是帕雷托分布。
设 X X X 为服从帕雷托分布的随机变量,则:
F ‾ ( x ) = P ( X > x ) = { ( x m x ) α ( x ≥ x m ) 1 ( x < x m ) (5.3.37) \overline F(x) = P(X \gt x) = \begin{cases}\left (\frac{x_m}{x} \right )^\alpha \quad & (x \ge x_m) \\ 1 &(x \lt x_m)\end{cases} \tag{5.3.37} F(x)=P(X>x)={(xxm)α1(x≥xm)(x<xm)(5.3.37)
其中, x m > 0 x_m \gt 0 xm>0 为随机变量 X X X 的最小可能值; α > 0 \alpha \gt 0 α>0 是控制函数曲线“长尾”形状的参数,也称为帕雷托系数。
注意(5.3.37)中使用的 F ‾ ( x ) \overline F(x) F(x) 符号,不同于5.3.2节中的(5.3.9)式的概率分布函数 F ( x ) F(x) F(x) ,其关系为 F ( x ) = 1 − F ‾ ( x ) F(x) = 1 - \overline F(x) F(x)=1−F(x) ,所以, X X X 所服从的概率分布函数为:
F ( x ) = { 1 − ( x m x ) α ( x ≥ x m ) 0 ( x < x m ) (5.3.38) F(x) = \begin{cases}1- \left (\frac{x_m}{x} \right)^\alpha \quad &(x \ge x_m) \\ 0 &(x \lt x_m)\end{cases} \tag{5.3.38} F(x)={1−(xxm)α0(x≥xm)(x<xm)(5.3.38)
对 F ( x ) F(x) F(x) 求导,得到概率密度函数:
f ( x ) = { α x m α x α + 1 ( x ≥ x m ) 0 ( x < x m ) (5.3.39) f(x) = \begin{cases}\frac{\alpha x_m^\alpha}{x^{\alpha+1}} \quad & (x\ge x_m) \\ 0 & (x\lt x_m) \end{cases} \tag{5.3.39} f(x)={xα+1αxmα0(x≥xm)(x<xm)(5.3.39)
图5-3-10是(5.3.39)式的图线,从图中可以看出公式中的 α \alpha α 对曲线形状的控制。
下面的程序中生成了服从帕雷托分布的数据,并绘制直方图,显示数据的分布特点(注意,生成下面的数据时, x m = 0 x_m =0 xm=0 )。
%matplotlib inline
import numpy as np
import seaborn as sns
ax = sns.distplot(np.random.pareto(a=1.16,size=1000), hist=True, kde=True)
ax.set(xlabel='Pareto', ylabel='Frequency')
输出图像:
社会财富分配是帕雷托分布的典型应用,下面创建一个服从帕雷托分布的工资模型示例。
from scipy.stats import pareto
alpha = 1.16
xmin = 1000
incomes = pareto(b=alpha, scale=xmin)
这里不妨以 1000 1000 1000 元作为最低值,即(5.3.39)式中的 x m = 1000 x_m = 1000 xm=1000 ,式中的 α = 1.16 \alpha = 1.16 α=1.16 ,这是一个超参数。这样,就创建了一个符合帕雷托分布的工资模型。
incomes.median()
# 输出
1817.6431200757233
在这个模型中,工资的中位数是 1817.64 1817.64 1817.64 元。平均工资呢?
incomes.mean()
# 输出
7250.000000000004
显然,符合帕雷托分布的工资的平均值和中位数差很多。如果工资符合正态分布,两者差距应该不大,然而现实世界就是这么残酷地帕雷托分布。所以,关注平均工资,只会“几家欢乐”“多家愁”。
如果你的工资达到了上面的均值,就是“几家欢乐”里的一员了,这个“几”是多少呢?
top_ratio= 1 - incomes.cdf(incomes.mean())
print(f'{round(top_ratio*100, 2)}%')
# 输出
10.05%
在这个模型中,就是前 10 % 10\% 10% ——恭喜发财。
将计算结果和前述绘制的图像结合,不难得知,在当前所构建的工资模型中,工资额度不高者数据量巨大,图中表现为右侧向横轴趋近,这种分布也称为长尾分布——“长尾”这个术语在商业领域被经常提及。
当然,这里只是一个理想的数学模型。
服从帕雷托分布的现象还很多,包括在网站中的操作行为也不能免于此。例如微博转发次数的分布特点,如图5-3-11所显示(张宁 等,《新浪微博转发数的幂律分布现象》,计算机时代,2015年第3期)。从图中可以看出,少数几篇微博转发量很高,绝大多数的转发量很低。
甚至于在语言学领域也出现了“长尾”现象。语言学家齐普夫(George K. Zipf)在研究英文单词出现的频率时发现,如果把单词出现的频率按由大到小的顺序排列,每个单词对应一个序号,则单词出现的频率与它的序号的常数次幂存在简单的反比关系:
P ( r ) ∼ r − α (5.3.40) P(r) \sim r^{-\alpha} \tag{5.3.40} P(r)∼r−α(5.3.40)
这种分布被称为齐普夫定律(Zipf’s law)。它表明在英语单词中,只有少数词汇被经常使用,绝大多数很少使用。事实上不止英语如此,以汉语为例,据统计, 1000 1000 1000 个常用字能覆盖约 92 % 92\% 92% 的书面资料, 2000 2000 2000 字可覆盖 98 % 98\% 98% 以上, 3000 3000 3000 字已到 99 % 99\% 99% ,而《汉语大字典》所收录的汉字为 54678 54678 54678 个。
(5.3.37)式和(5.3.40)式都是幂函数,我们将凡是符合这类形式概率分布的统称为幂律分布(power law distribution)——齐普夫和帕雷托都为幂律分布做出了重要贡献。在实践中,幂律分布除了这里介绍的帕雷托分布、齐普夫定律之外,还有其他形式。但不论具体形式如何,都可以概括为:
f ( x ) = C x − α (5.3.41) f(x) = Cx^{-\alpha}\tag{5.3.41} f(x)=Cx−α(5.3.41)
这就是连续型随机变量 X X X 的概率密度函数,称之为 X X X 服从以 α > 0 、 C \alpha \gt 0、 C α>0、C 为参数的幂律分布。其中, C C C 可以用 X X X 的最小可能值表示:
∵
1
=
∫
x
m
i
n
∞
f
(
x
)
d
x
=
C
∫
x
m
i
n
∞
x
−
α
d
x
=
C
1
−
α
[
x
−
α
+
1
]
x
m
i
n
∞
\because\quad1=\int_{x_{min}}^{\infty}f(x)dx=C\int_{x_{min}}^{\infty}x^{-\alpha}dx=\frac{C}{1-\alpha}\left [x^{-\alpha + 1}\right ]_{x_{min}}^\infty
∵1=∫xmin∞f(x)dx=C∫xmin∞x−αdx=1−αC[x−α+1]xmin∞
若
α
>
1
,
则
:
C
=
(
α
−
1
)
x
m
i
n
α
+
1
若 \quad \alpha \gt 1, \quad 则: C=(\alpha-1)x_{min}^{\alpha + 1}
若α>1,则:C=(α−1)xminα+1
∴
f
(
x
)
=
α
−
1
x
m
i
n
(
x
x
m
i
n
)
−
α
\therefore \quad f(x) = \frac{\alpha -1}{x_{min}}\left (\frac{x}{x_{min}} \right )^{-\alpha}
∴f(x)=xminα−1(xminx)−α
幂律分布表现了一种很强的不均衡、不平等,在网络、大数据时代,越来越受到关注,因为不均衡就也意味着机会。对此有兴趣的读者,除了从数学理论上了解之外,还可以继续深入研究,利用它从数据中挖掘新知。