파이톤으로 본포드의 법칙을 해봤어요.
先のアメリカ合衆国大統領選挙において、こんな記事がありました。
벤포드 법칙(벤포드 법칙,Benford's law)은 자연계에 나타나는 많은 (전부가 아닌) 수치의 첫 번째 분포가 고르지 않고 특정한 분포이다.(위키백과에서)なるほど、これは面白い!
自分も試してみたくなったので、Pythonにてフルスクラッチ実装してみました。
우선 일본의 시내 정촌의 인구 분포, 면적, 인구 밀도가 본포드의 법칙에 부합되는지 조사해 보자.↓ 데이터는 아래 사이트를 사용했다.
https://www.e-stat.go.jp/stat-search/files?page=1&layout=datalist&toukei=00200521&tstat=000001049104
데이터 텍스트 "data.txt"는 이런 느낌의 탭으로 구분됩니다
data.txt
横浜市 3,724,844
大阪市 2,691,185
名古屋市 2,295,638
札幌市 1,952,356
福岡市 1,538,681
・・・
(略)
파이톤으로 쓴 코드는 이거예요.data_list = open('data.txt', encoding="utf-8")
head = [0,0,0,0,0,0,0,0,0,0]
pct = [0,0,0,0,0,0,0,0,0,0]
benford = [0, 30.1, 17.6, 12.5, 9.7, 7.9, 6.7, 5.8, 5.1, 4.6]
total = 0
for name_num in data_list:
name,num = name_num.split("\t")
num = int(num[0])
for xx in range(0, 10):
if num == 0:
head[0] += 1
break
elif xx == num:
head[xx] += 1
total += 1
break
with open("dataafter.txt", "a", encoding="utf8", errors="replace") as file:
for xx in range(1, 10):
pct[xx]=head[xx]/total * 100
file.write('{0}\t{1}\t{2:.1f}%\t{3}%\t{4:.1f}%\n'.format(xx,head[xx],pct[xx],benford[xx],pct[xx]-benford[xx]))
file.write('備考:0\t{0}\t--\n'.format(head[0]))
file.close()
유효 데이터 1916건에서 얻은 결과↓(dataafter.txt).1 590 30.9% 30.1% 0.8%
2 300 15.7% 17.6% -1.9%
3 254 13.3% 12.5% 0.8%
4 182 9.5% 9.7% -0.2%
5 159 8.3% 7.9% 0.4%
6 110 5.8% 6.7% -0.9%
7 125 6.5% 5.8% 0.7%
8 105 5.5% 5.1% 0.4%
9 87 4.6% 4.6% -0.0%
備考:0 4 --
おお!全て2%未満の誤差に収まりました!
※ 표에 대한 견해왼쪽부터.
처음에 나타난 숫자, 출현한 횟수, 출현한 비례, 본복덕의 법칙, 법칙과 차이.(4개 인구가 0인 자치체는 계산 범위 내에 있지 않다)
グラフにして見やすくするために、下記のコードを追加してみました。
import numpy as np
import matplotlib.pyplot as plt
left = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
height = np.array([pct![img.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384857/b592924f-3f3f-99dc-3155-da55f2492dd2.png)
[1], pct[2], pct[3], pct[4], pct[5], pct[6], pct[7], pct[8], pct[9]])
height2 = np.array([30.1, 17.6, 12.5, 9.7, 7.9, 6.7, 5.8, 5.1, 4.6])
plt.bar(left, height,tick_label=left,width=0.4)
plt.plot(left,height2,linestyle='solid',color='k',marker='^',label='B')
plt.title("ベンフォードの法則検証", fontname="meiryo")
plt.ylabel('パーセント',fontname="meiryo")
plt.savefig("img.png")
そのグラフがこれ
【인구】스트라이프는 인구의 첫 번째 자릿수 숫자 분포다.
접선 도표는 벤포드의 법칙이다.
그렇군요, 대체로 일치합니다.
dataafter.txt를 보기 위해 수동으로 표 형식을 수정합니다
첫 번째 숫자.
출현 횟수
출현율
법칙.
법칙과 다르다
메모
1
590
30.9%
30.1%
0.8%
2
300
15.7%
17.6%
-1.9%
← 최대 오차
3
254
13.3%
12.5%
0.8%
4
182
9.5%
9.7%
-0.2%
5
159
8.3%
7.9%
0.4%
6
110
5.8%
6.7%
-0.9%
7
125
6.5%
5.8%
0.7%
8
105
5.5%
5.1%
0.4%
9
87
4.6%
4.6%
-0.0%
【면적】
면적도 2% 미만의 오차가 줄었다!
첫 번째 숫자.
출현 횟수
출현율
법칙.
법칙과 다르다
메모
1
560
29.2%
30.1%
-0.9%
2
359
18.7%
17.6%
1.1%
← 최대 오차
3
238
12.4%
12.5%
-0.1%
4
179
9.3%
9.7%
-0.4%
5
143
7.5%
7.9%
-0.4%
6
138
7.2%
6.7%
0.5%
7
123
6.4%
5.8%
0.6%
8
97
5.1%
5.1%
-0.0%
9
79
4.1%
4.6%
-0.5%
[인구밀도]
인구밀도도 2% 미만의 오차!
첫 번째 숫자.
출현 횟수
출현율
법칙.
법칙과 다르다
메모
1
581
30.4%
30.1%
0.3%
2
332
17.4%
17.6%
-0.2%
3
217
11.4%
12.5%
-1.1%
← 최대 오차
4
175
9.2%
9.7%
-0.5%
5
168
8.8%
7.9%
0.9%
6
116
6.1%
6.7%
-0.6%
7
117
6.1%
5.8%
0.3%
8
110
5.8%
5.1%
0.7%
9
94
4.9%
4.6%
0.3%
なんと、人口、面積、人口密度が、全てベンフォードの法則通りの分布になってしまいました!
그럼에도 불구하고 면적은 의외다.나는 시마치촌의 면적이 그렇게 큰 편차가 없다고 생각하지만, 실제로는 매우 큰 차이가 있다.일본에서 가장 큰 기후현 고산시는 향천현과 오사카부보다 더 크다!
それでは、もっと身近なところで、自分の購入履歴で調査してみましょう。
2009년 이후 롯데와 아마존 등으로 산 물건, expedia 등의 여비를 복제한 이력서 계산...이 조사는 정말 지독하군요
で、出た結果が・・・
응?뭐가 이상해?!
이게 뭐야.
자신과 같은 괴짜도 벤포드 분석에서 이상한 결과가 나올 수 있을까?!・・・
첫 번째 숫자.
출현 횟수
출현율
법칙.
법칙과 다르다
메모
1
124
24.5%
30.1%
-5.6%
← 너무 적다!
2
81
16.0%
17.6%
-1.6%
3
59
11.6%
12.5%
-0.9%
4
47
9.3%
9.7%
-0.4%
5
44
8.7%
7.9%
0.8%
6
33
6.5%
6.7%
-0.2%
7
35
6.9%
5.8%
1.1%
8
44
8.7%
5.1%
3.6%
← 많은 것 같다
9
40
7.9%
4.6%
3.3%
← 많은 것 같다
・・・で、よく考えてみたら
물건을 살 때 자릿수 상승이 싫어서 8000엔이나 900엔 정도의 가격으로 통제...데이터는 자신의 나쁜 심보를 나타낸다
하지만 인위적인 생각에 섞이면 벤포드의 분석 결과는 부자연스러워진다!
「ベンフォードの法則」すげー!
이 외에도 본포드법은 주가, 하천 길이, 철도 등 모든 수치의 집합에도 적용된다.※ 키, 편차, IQ 수치 등 한 자릿수 또는 두 자릿수 범위에만 분포하는 물건은 사용할 수 없습니다.
한편, 본복덕의 법칙에 대해서도 의심스러운 의견이 있으므로 사용할 때 주의해야 한다.
하지만 이 법칙을 업무 중에 활용할 수 있을지 의문이다.
Reference
이 문제에 관하여(파이톤으로 본포드의 법칙을 해봤어요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/marchangx/items/263cb02cbe250a35214b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)