PowerLaw현상의 한가지. FirstDigitLaw라고도 한다. Benfords_law

http://mathworld.wolfram.com/BenfordsLaw.html

자연계에 존재하는 모든 "수치"값들의 첫째자리는 PowerLaw를 따른다는 법칙. "1"이 될 확률이 대략 30%

http://upload.wikimedia.org/wikipedia/commons/thumb/4/46/Rozklad_benforda.svg/512px-Rozklad_benforda.svg.png

자네가 지금 가지고 있는 금액이 총 얼마야? 라는 질문의 답의 첫째자리숫자는 대략 30%는 1 이어야 한다. 그렇지 않다면 거짓이라는 얘기.

ExcelVba 스크립트 (특정 파일의 모든 쉬트의 수치값들에 대해, 레포트 쉬트를 작성함. 현재 예외처리 미흡.)

Sub makeBenfordsReport()
    Dim FirstDigits(1 To 9) As Integer
    For i = 1 To 9
        FirstDigits(i) = 0
    Next i
    
    On Error Resume Next
    For Each Worksheet In Worksheets
        For Each rngCell In Worksheet.UsedRange
            FirstDigit = Left(rngCell.Value, 1)
            FirstDigits(FirstDigit) = FirstDigits(FirstDigit) + 1
        Next rngCell
    Next Worksheet
 
    Sheets.Add
    ActiveSheet.Name = "BenfordsReport"
    For i = 1 To 9
        ActiveSheet.Cells(i, 1) = FirstDigits(i)
    Next i
End Sub


반농담으로 회계장부에 있는 숫자들을 분석해서 비리 여부를 밝히는 시스템을 만들어보자는 얘기를 했었죠. ; )--안용열

BenfordsLaw (last edited 2012-06-12 11:18:12 by 61)