728x90

 

벤포드 법칙(Benford's law)?

실세계에서 존재하는 많은 수치 데이터의 10진법 값에서 수의 첫째 자리의 확률분포를 관찰한 결과로 첫째 자리 숫자가 작을 확률이 크다는 법칙이다.

 

 

 

 
[wikipedia: Benford's law] 벤포드의 법칙을 따르는 수들의 첫째 자리 숫자의 분포. 각 막대의 높이는 데이터에 등장하는 수가 해당하는 숫자로 시작할 확률(%)를 의미한다.

위 표와 마찬가지로 수치 데이터의 수들 중 첫째 자리가 1인 수가 가장 많고 9를 가진수가 가장 적다.

만약 이를 따르지 않을 시 그 수치 데이터는 임의로 조작되었다고 할 수 있다.

(하지만 정확한건 아니므로 참고만 하자)


벤포드 라이브러리 설치

pip install benfordslaw

 

cmd에 입력하기.


전체 코드

import pandas as pd
from benfordslaw import benfordslaw

df = pd.read_csv('test.csv')

num_of_cases = df.groupby('Classe')['rv'].max()
n_top = num_of_cases.nlargest(10).index

def benford(classe, pos):
    global df
    df_n = df[df.Classe == classe]
    data = df_n['basic']
    bl = benfordslaw(alpha=0.05, method='ks', pos=pos, verbose=3)
    results = bl.fit(data) # 분석
    bl.plot(title=classe+ ', pos: '+str(pos))
for classe in n_top:
    benford(classe, 1)

CSV 파일을 읽은 후 자료를 분류하는 방식이며,

자료가 다수일 경우가 있기 때문에 자료들을 Classe 별로 나눈 후 Classe들의 기준값(rv)들을 이용하여 출력 순서를 정하도록 설계하였습니다.


자료 분석

https://ncv.kdca.go.kr/vaccineStatus.es?mid=a11710000000 

 

코로나19 백신 및 예방접종

질병관리청 코로나19 백신 및 예방접종 정보안내

ncv.kdca.go.kr

 

질병관리청 자료
질병관리청 자료 우: 분석할 CSV

질병관리청에서 나오는 "백신별 일일 접종 현황" 중 1차 전체 백신 접종률(2022.10.20 ~ 2021.02.26)의 자료를 분석해 보았습니다.

Classe: 분류 (ex) 나라, 지역, 부서)
rv: Classe의 종류가 많을 경우 출력순서(높은순으로 출력됨)
basic: 분석할 수치 데이터

 


 

분석 결과

 

 
빨간 점: 이상적인 벤포드 그래프

 

...

...

물론 100% 신뢰는 할 수 없습니다...

(2022.10.20 ~ 2021.02.26) 총 604개의 수치 데이터를 분석했는데... 그래프가 깔끔하지 않네요..

뭐.. 표본이 적은 것도 안인데 이런 결과가 나왔네요..

 

(100% 정확한 건 아니므로 참고만 하자)


100% 확실한 거짓 판별 프로그램이 아니기 때문에 어디까지나 참고용입니다.

 

BP_v2.0

https://github.com/FURY312/BP_v2.0.git

 

GitHub - FURY312/BP_v2.0: 벤포드의 법칙

벤포드의 법칙. Contribute to FURY312/BP_v2.0 development by creating an account on GitHub.

github.com


 

 

블로그 쓸려고 테스트하면서 안 건데 한셀에서는 분석 기능이 이미 있네요.. ㅋㅋ

 

 
한셀 분석결과

 

 

728x90