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


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

  • 그럴듯합니다. ExcelVba함수같은것으로 만들어서 체크해보는 것도 괜찮겠네요. 어쩌면 그런 기능이 이미 있는지도... 잠깐 찾아봤는데, 대부분의 ExcelVba자료는 유료네요. --yong27, 2005-05-23

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

web biohackers.net