一堆从实际生活得出的数据中,以1为数字首位出现的概率约为总数的三成,而并不是我们靠直觉得出的 1/9 ,这就是本福特定律。
比方说,我们从1开始计数,1,2,3,4,5 …一直这么数下去,当我们数累了不数了,比方说我们数到19就不数了,那么显然以1为数字首位的数出现的概率要远远大于其它数,如果我们数到29不数了,那么显然以1或者以2作为数字首位的概率要远远大于其它数。意思就是,数字次序越靠后的,以它为首位出现的概率就越低。
我们可以用python作图来验证该定律:
import matplotlib.pyplot as plt
def firstDigital(x):
while x >= 10:
x //= 10
return x
if __name__ == "__main__":
n = 1
x = [1,2,3,4,5,6,7,8,9]
frequency = [0] * 9 #记录第一位数字中1-9数字出现次数
for i in range(1,100):
n *= i
m = firstDigital(n) - 1
frequency[m] += 1
plt.plot(x,frequency,"r-",linewidth=2)
plt.plot(x,frequency, "go", markersize=8)
for i in range(1,10):
plt.text(i,frequency[i-1]+0.3,frequency[i-1],ha = 'center',va = 'bottom',fontsize=12)
plt.grid(True)
plt.show()
上图统计的是从1到100!中以1到9为首位出现的概率。
上图统计的是从1到1000!中以1到9为首位出现的概率。
本福特定律多被用来验证数据是否有造假,但需要注意的是,本福特定律只对生活实际得到的数据,或者是顺序变化的数据起作用,倘若这些数据稍微被其它的随机函数所干扰,那么本福特定律将不再适用。