Benford’s Law is het verschijnsel dat in een dataverzameling van getallen de eerste cijfers van deze getallen op een speciale wijze verdeeld blijken te zijn. Je zou wellicht verwachten dat elk eerste cijfer van 1 tot en met 9 een even grote kans heeft om voor te komen, maar dat blijkt niet het geval te zijn.
In werkelijkheid komt het cijfer 1 vaker voor en het cijfer 9 het minst vaak. Volgens Benford’s Law ziet de verdeling er zo uit:
Dit kan gebruikt wordt om onregelmatigheden, vervorming van data of frauduleuze handelingen te ontdekken. Door de verdeling van de eerste cijfers van een dataset te vergelijken met de verdeling volgens Benford’s Law kunnen onregelmatigheden ontdekt worden, die verder onderzocht moeten worden.
De ISACA (Information Systems Audit and Control Association) heeft een uitstekend artikel geschreven met een uitleg over het gebruik van Benford’s Law te vinden via de volgende link: https://www.isaca.org/Journal/archives/2011/Volume-3/Pages/Understanding-and-Applying-Benfords-Law.aspx
In deze blog laat ik zien hoe je Benford’s Law toepast in een Power BI dashboard.
Stap 1 Toevoegen Benford’s distributie tabel
Open in Power BI de Query Editor. Maak via New Source een ‘Blank Query’ aan.
Hernoem de query naar Benford’s law/
Start de Advanced Editor.
Voer de volgende code in:
[code]let
Stap1 = Table.RenameColumns(Table.FromList(List.Numbers(1,9), Splitter.SplitByNothing()),{{“Column1”, “Cijfer”}}),
Stap2 = Table.AddColumn(Stap1, “Log10″, each Number.Log10(1+1/[Cijfer]), type number),
#”Renamed Columns” = Table.RenameColumns(Stap2,{{“Log10”, “Verwacht percentage”}})
in
#”Renamed Columns”
[/code]Het resultaat is een tabel met Benford’s distributie:
Eerste cijfers bronbestand
Als bron bestand heb ik een auditfile vanuit een financieel administratie pakket gebruikt.
Het bronbestand heet in dit voorbeeld trLine2016:
[code]Stap3= trLine2016,
[/code]Middels de optie Add column – > extract -> First character heb ik van elk getal het eerste cijfer in een aparte kolom genaamd ‘Digit’ geplaatst.
Groeperen en tellen van werkelijke aantallen
Met de volgende code groeperen we de getallen in de kolom Digit en berekenen we het aantal keer dat het getal voorkomt in de kolom Actual:
[code]Stap4 = Table.Group(Stap3, {“Digit”}, {{“Actual”, each Table.RowCount(_), type number}}),
[/code]
Berekenen totaal
In de volgende stap rekenen we het totaal aantal getallen uit, zodat we de verdeling per cijfer kunnen uitrekenen.
Hiervoor gebruiken we de volgende code:
Stap5 = Table.Group(Stap4, {}, {{“AllOccurences”, each List.Sum([Actual]), type number}}),
AllOccurences = Stap5{0}[AllOccurences],
[/code]
Samenvoegen met Benford’s distributie
In stap 6 voegen we per getal de verwachte waarde volgende Benford’s distributie samen met de werkelijke aantallen per cijfer:
[code]Stap6 = Table.NestedJoin(Stap4,{“Digit”},#”Benford’s law”,{“Cijfer”}, “NewColumn”,JoinKind.RightOuter),
#”Expanded NewColumn” = Table.ExpandTableColumn(Stap6, “NewColumn”, {“Cijfer”, “Verwacht percentage”},
{“NewColumn.Cijfer”, “NewColumn.Verwacht percentage”}),
#”Renamed Columns” = Table.RenameColumns(#”Expanded NewColumn”,{{“NewColumn.Verwacht percentage”, “Verwacht percentage”}}),
[/code]
Verwachte aantallen
In volgende stap rekenen we de verwachte aantallen per cijfer uit door het totaal aantal getallen te vermenigvuldigen met Benford’s distributie. Onderweg verwijderen we ook twee kolommen die we niet meer nodig hebben.
[code]Stap7 = Table.RemoveColumns(#”Renamed Columns”,{“NewColumn.Cijfer”}),
Stap8 = Table.AddColumn(Stap7, “Verwacht”, each [Verwacht percentage]*AllOccurences, type number),
Stap9 = Table.RemoveColumns(Stap8,{“Verwacht percentage”})
[/code]
Visualiseren in Power BI
We hebben nu genoeg data om Benford’s Law te visualiseren in Power BI.
Voeg een Bar Line and column stacked visual toe aan het rapport.
Voeg de data velden toe aan de vsualisatie:
- Digit onder Shared Axis
- Actual onder Column values
- Verwacht onder Line Values
Power BI laat nu een mooie grafiek zien van de werkelijke en verwachte verdeling van de eerste cijfers volgens Benford’s Law.
3 reacties. Reactie plaatsen
What an manual labor required.
I use CaseWare IDEA and there are 7 different tests on digits available on Benford ‘ Law…..
Hi Desmond,
Het is inderdaad wel bewerkelijk.
Ik ken de mogelijkheden van IDEA inderdaad ook. IDEA heeft verder echter weinig visualisatie mogelijkheden. Ten minste niet in de versies waar ik mee gewerkt heb.
In een vervolg blog ook de mogelijkheden van R script in combinatie met Power BI en Benford’s Law laten zien.
Zie http://blog.smartinsight.nu/benfords-law-met-r-script-in-power-bi/