如何判断一些数据是否造假呢?
有一个有趣的方法叫做本福特定律。
在自然生活中有许多数据,例如各个国家的人口、GDP、国土面积,甚至是视频网站的播放量、元素的半衰期等,这些数据的首位数可能是 1、2、3、4、5、6、7、8、9,通常人们会以为每个数字打头的概率都相同,都是1~9,但实际上,科学家本福特等人发现:数字 1 打头的概率超过 30%。
如果一组数据不满足本福特定律,那很有可能是因为人为修改而得来的~假数据~。
例如有人曾经对 XX 公司的财报进行统计,发现不满足本福特定律。
自然界为什么会有这么神奇的定律呢?接下来我们就来看一看吧。
什么叫本福特定律?
本福特定律(Benford's law),说明一堆从实际生活得出的数据中,以 1 为首位数字的数的出现概率约为总数的三成,接近直觉得出之期望值 1/9 的 3 倍。推广来说,越大的数,以它为首几位的数出现的概率就越低。它可用于检查各种数据是否有造假。
(摘录自维基百科)
数学上的定义
本福特定律说明在b进位制中,以数n起头的数出现的概率为 logb(n+1)−logb(n)。本福特定律不但适用于个位数字,连多位的数也可用。
应用
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 年伊朗总统大选中有造假。
数据
- 李永乐老师的视频播放量:78/266=29.3%
- 国家地区人口:67/235=28.5%
- GDP :60/197=30.5%
- 国土面积:59/216=27.3%
- 斐波那契数列(前):45/154=29.2%
- 放射性元素的半衰期。
证明
本福特定律,不是严格的定律。
- 增长量正比于存量。
Go 夜读数据 - 实践分析
接下来,我们就以 Go 夜读每一期在 YouTube 和 Bilibili 还是那个的播放量为例来分析一下吧。
数据来自于 2019-11-17 17:00:00 左右,后面几期的数据来源于 2019-12-15(仅供参考)。
期数 | 名称 | YouTube 播放量 | Bilibili 播放量 |
---|---|---|---|
71 | go-ini 配置库评析 | 80 | 422 |
70 | Go 中不常注意的各种细节集锦 | 260 | 924 |
69 | DevOps 之路 基于 Go 语言周边生态打造的行业技术中台 | 335 | 1084 |
68 | 网络知识十全大补丸 | 551 | 2002 |
67 | SQL 连接池分析 | 244 | 1053 |
66 | #Paper Reading CSP 理解顺序进程间通信 | 134 | 467 |
65 | Go 原生网络模型 vs 异步 Reactor 模型 | 143 | 564 |
64 | 深入浅出 Golang Runtime | 393 | 1163 |
63 | Go 编码风格阅读与讨论 | 232 | 619 |
62 | Go-Micro 微服务框架 Part 1 | 391 | 1366 |
61 | Go Modules、Go Module Proxy 和 goproxy.cn | 395 | 1384 |
60 | IPFS 星际文件系统 144 | 716 | |
59 | #Paper Reading Real-world Go Concurrency Bugs | 168 | 519 |
58 | What’s new in Go 1.13? | 444 | 893 |
57 | sync/semaphore 源码浅析 | 113 | 449 |
56 | channel & select 源码分析 | 435 | 1651 |
55 | Go&WebAssembly 简介 | 158 | 686 |
54 | TiDB SQL 兼容性测试工具简介 | 82 | 287 |
53 | delete from map in go | 115 | 315 |
52 | httprouter 简介 | 183 | 808 |
51 | sync/errgroup | 160 | 481 |
50 | GoLand Tips & Tricks | 775 | 1449 |
49 | TiDB Transaction | 126 | 376 |
48 | TiDB Compiler | 276 | 379 |
47 | TiDB Executor | 149 | 475 |
46 | TiDB Source Code Overview | 753 | 941 |
45 | goim 架构设计与源码分析 | 428 | 985 |
44 | Go map 源码阅读分析 | 289 | 940 |
43 | gomonkey 框架设计与应用实践 | 193 | 660 |
42 | An Introduction to Failpoint Design | 257 | 366 |
41 | golint 及 golangci-lint 的介绍和使用 | 292 | 329 |
40 | atomic.Value 的使用和源码分析 | 165 | 372 |
39 | init function 使用分析 | 175 | 429 |
38 | kubernetes scheduler 源码阅读 | 211 | 641 |
37 | 从 serverless 的一个设计说起 | 338 | 693 |
36 | k8s context 实践源码阅读 | 207 | 544 |
35 | context 包源码阅读 | 455 | 1294 |
34 | plan9 汇编入门,带你打通应用和底层 by Xargin | 1124 | 1668 |
33 | Go defer 和逃逸分析 | 328 | 468 |
32 | etcd raft 源码阅读 | 1065 | 1534 |
31 | flag 包源码阅读 | 140 | 338 |
30 | go mod 源码阅读 part 4 | 70 | 351 |
29 | Go opentracing jaeger 集成及源码分析 | 243 | 436 |
28 | go mod 源码阅读 part 3 | 75 | 206 |
27 | go mod 源码阅读 part 2 | 98 | 349 |
26 | 手把手教你基于 Github+Netlify 构建自动化持续集成的技术团队博客 | 225 | 998 |
25 | TSDB 引擎介绍,对比及存储细节 | 166 | 663 |
24 | go mod 源码阅读 part 1 | 292 | 683 |
23 | Drone 简单介绍和部分源码分析 | 319 | 347 |
22 | Go 开发工具讨论 | 529 | 861 |
21 | Go errors 处理及 zap 源码分析 | 275 | 492 |
20 | go test 及测试覆盖率 | 161 | 459 |
19 | 如何开发一个简单高性能的http router及gorouter源码分析 | 314 | 571 |
18 | 去中心化加密通信框架 CovenantSQL/DH-RPC的设计 | 198 | 231 |
17 | grpc 开发及 grpcp 的源码分析 | 1381 | 3822 |
16 | OpenFaas 介绍及源码分析 | 258 | 224 |
15 | 多路复用资源池组件剖析 | 370 | 465 |
14 | sync.Pool 源码分析及适用场景 | 517 | 417 |
13 | Kubernetes 入门指南 | 4297 | 1311 |
12 | golang 中 goroutine 的调度 | 1342 | 1027 |
11 | Golang 代码质量持续检测实践 | 714 | 679 |
10 | http 包源码阅读 part3 | 246 | 999 |
8 | http 包源码阅读 part2 | 295 | 1002 |
7 | http 包源码阅读 part1 | 1615 | 568 |
YouTube 总播放量:25520,平均播放量:425,播放量最多的是:《Kubernetes 入门指南》,4297,播放量最少的是:《go mod 源码阅读 part 4 》,70。 Bilibili 总播放量:44860,平均播放量:747,播放量最多的是:《grpc 开发及 grpcp 的源码分析》,3822,播放量最少的是:《go mod 源码阅读 part 3》,206。
数据总期数为 60 期,其中:
数字开头 | YouTube 有多少期 | 占比 | Bilibili 有多少期 | 占比 |
---|---|---|---|---|
1 | 23 | 38.3% | 12 | 20% |
2 | 14 | 23.3% | 4 | 6.7% |
3 | 8 | 13.3% | 11 | 18.3 |
4 | 5 | 8.3% | 12 | 20% |
5 | 2 | 3.3% | 5 | 8.3% |
6 | 0 | 0% | 8 | 13.3% |
7 | 5 | 8.3% | 1 | 1.67% |
8 | 2 | 3.3% | 3 | 5% |
9 | 1 | 1.67% | 4 | 6.67% |
表格看起来不直观,我将其转换为柱状图:
从表格看出,在 Bilibili 上的播放量是不满足本福特定律的,从而我们是否也可以得知 Bilibili 存在数据造假呢?(纯粹的定律猜测,实际情况无法验证。)
参考资料
茶歇驿站
一个可以让你停下来看一看,在茶歇之余给你帮助的小站,这里的内容主要是后端技术,个人管理,团队管理,以及其他个人杂想。