jerryxjr1220 发表于 2017-2-28 09:24:33

[python应用分享] python模拟神奇的本福特法则

在分享之前,先介绍一下背景,可能很多鱼油还不知道“本福特法则”,这条神奇的法则到目前还未被完全的数学证明,更多的只是依据统计得出的推测结论,如果哪位鱼油有能力证明“本福特法则”那么说不定明年的诺贝尔奖就是你啦!{:10_254:}

根据维基百科的定义:
本福特定律,也称为本福特法則,说明一堆从实际生活得出的数据中,以1为首位数字的数的出现概率约为总数的三成,接近直觉得出之期望值1/9的3倍。推广来说,越大的数,以它为首几位的数出现的概率就越低。它可用于检查各种数据是否有造假。
本福特定律说明在 b进位制中,以数n起头的数出现的概率为log b(n+1)-log b(n)} 。
本福特定律不但适用于个位数字,连多位的数也可用。
在十进制首位数字的出现概率(%,小数点后一个位):
d        p
1        30.1%
2        17.6%
3        12.5%
4        9.7%
5        7.9%
6        6.7%
7        5.8%
8        5.1%
9        4.6%

不完整的解释
一组平均增长的数据开始时,增长得较慢,由最初的数字a增长到另一个数字 a+1起首的数的时间,必然比a+1起首的数增长到 a+2,需要更多时间,所以出现率就更高了。
从数数目来说,顺序从1开始数,1,2,3,...,9,从这点终结的话,所有数起首的机会似乎相同,但9之后的两位数10至19,以1起首的数又大大抛离了其他数了。而下一堆9起首的数出现之前,必然会经过一堆以2,3,4,...,8起首的数。若果这样数法有个终结点,以1起首的数的出现率一般都比9大。
这个定律的严格证明,可以参见Hill, T. P. "A Statistical Derivation of the Significant-Digit Law." Stat. Sci. 10, 354-363, 1996.。

应用
1972年,Hal Varian提出这个定律来用作检查支持某些公共计划的经济数据有否欺瞒之处。1992年,Mark J. Nigrini便在其博士论文"The Detection of Income Tax Evasion Through an Analysis of Digital Frequencies."(Ph.D. thesis. Cincinnati, OH: University of Cincinnati, 1992.)提出以它检查是否有伪帐。
推而广之,它能用于在会计、金融甚至选举中出现的数据。例如,它被用于说明2009年伊朗总统大选中内贾德的造假。
若所用的数据有指定数值范围;或不是以概率分布出现的数据,如正态分布的数据;这个定律则不准确。

历史
1881年,天文学家西蒙·纽康发现对数表包含以1起首的数那首几页较其他页破烂。可是,亦可以以任何书起首数页也会较破烂这个观点解释。这个故事可能是虚构的。
1938年,物理学家法蘭克·本福特重新发现这个现象,还通过了检查许多数据来证实这点。
2009年,西班牙数学家在素数中发现了一种新模式,并且惊讶于为何现在才为人发现。虽然素数一般被认为是随机分布的,但西班牙数学家发现素数数列中每个素数的首位数字有明显的分布规律,它可以被描述了素数的本福特定律。这项新发现除了提供对素数属性的新洞见之外,还能应用于欺骗检测和股票市场分析等领域。

所以,如果你怀疑某上市公司的报表作假,你可以拿它当年的报表数据,与本福特法则进行对比,如果得到的结果不能在一定误差范围内符合本福特法则,则很有可能这份报表是人为造假的(或者至少是进过人为修饰过的)。同样,任何城市的门牌号(以1开头的号码约占总数的3成)也服从本福特法则;世界上237个国家的人口数量(以1开头的数量约占总数的3成)也符合本福特法则。

另外还有神奇的一点,本福特法则不受单位限制,无论你转换什么单位,本福特法则都成立(例如:世界上主要河流的长度服从本福特法则,那么无论你是用米/千米或者英里/英寸,它们都服从本福特法则)。

下面让我们用python来模拟推导这个神奇的本福特法则:(在一定误差范围内服从本福特法则)
**** Hidden Message *****

ooxx7788 发表于 2017-2-28 10:31:12

好像很神奇啊!那是不是所有人的身高也符合本福特法则呢?
难道1米以上的2米一下的人占总人口的30%?感觉不止吧!

jerryxjr1220 发表于 2017-2-28 10:35:22

ooxx7788 发表于 2017-2-28 10:31
好像很神奇啊!那是不是所有人的身高也符合本福特法则呢?
难道1米以上的2米一下的人占总人口的30%?感觉 ...

你说对了,全人类的身高还真的符合本福特法则,只不过统计的范围是全部人口,包括婴儿、小孩和大人。

jerryxjr1220 发表于 2017-2-28 10:55:40

本帖最后由 jerryxjr1220 于 2017-2-28 10:58 编辑

据说当年安然公司财务造假的财务报表就不服从本福特法则,一般人为的伪造数据,喜欢用的数字4、5、6居多(统计结果),因为中位性的数字容易掩盖并不会造成进位或者退位等数量级改变的问题。而事实上,真实的数据以1开头的约占所有数据的30%左右,这是与我们直觉非常不同的。
而且,要人为的伪造大量数据并且完全符合本福特法则,又要符合逻辑,是非常困难的。

如果可以拿到特朗普去年选举的投票数据,可以帮它计算一下,看看是否符合本福特法则{:5_109:}

tmkuej 发表于 2017-2-28 12:30:42

这个东西听说过.听过是很牛逼的东西

逗逼小龙 发表于 2017-2-28 23:43:57

dd

qaz123765 发表于 2017-7-10 19:01:31

看起来很niubility

hdfjoe 发表于 2019-2-12 14:45:16

s

keeper99 发表于 2019-11-17 15:15:28

看看哟 内容不错

akaduoduo 发表于 2020-1-3 16:25:12

感谢分享!

q23452346 发表于 2020-6-14 21:22:38

这个东西听说过.听过是很牛逼的东西,拿源码泡一泡

danieldaimian 发表于 2020-9-21 10:44:28

真的厉害

yu674644780 发表于 2020-12-16 13:47:58

6666博主牛逼

Simon_Xia 发表于 2020-12-16 14:13:13

听着很牛逼

咪哆唻 发表于 2021-1-26 08:45:22

谢谢

muzi679 发表于 2021-5-4 17:51:42

了解下

邻家的小夜子 发表于 2021-8-30 09:06:38

看看学习

pythongogo123 发表于 2021-11-11 00:53:20

{:5_106:}

Ansdskrl 发表于 2022-4-21 23:46:45

这个定律好神奇啊

zhaoyuanfeng 发表于 2022-12-28 10:53:05

看看神奇的本福特
页: [1]
查看完整版本: [python应用分享] python模拟神奇的本福特法则