Forensic Analytics dengan Pandas – Benford’s Law The Second-Order Bagian II
Pengantar
Dari tulisan sebelumnya, masih lindap, bahkan untuk penulis, kegunaan praksis dari The Second-Order test. Menurut Pak Nigrini di Data Diagnostics Using Second-Order Tests of Benford’s Law kegunaan the second-order test adalah untuk mendeteksi kesalahan seperti:
- anomalies occurring in data downloads
- rounded data
- the use of regression output in place of actual transactional data
- the use of statistically generated data in place of actual transactional data
- inaccurate ranking in data that is assumed to be ordered from smallest to largest
Jenis kesalahan yang sulit dideteksi oleh statistik deskriptif yang biasa kita gunakan. Dalam Forensic Analytics Pak Nigrini menyertakan contoh kasus lain untuk penggunaan the second-order test ini yaitu data entri jurnal sebuah perusahaan. Menggunakan data itu, kita akan menguji salah satu kesalahan yang dapat dideteksi menggunakan the second-order test.
The Second-Order Test
Metode ini adalah pengembangan dari Benford’s Law dimana alih-alih digunakan langsung pada kumpulan angka A, Hukum Benford diaplikasikan pada data turunan dari kumpulan angka A.
Tujuan
Singkatnya kita akan membuat grafik seperti ini, menggunakan pandas. Grafik ini disadur dari figure 7.9 Forensic Analytics p. 142.
Grafik tersebut akan kita interpretasikan dan bandingkan dengan temuan kita sebelumnya.
Urgensi
Karena kegunaan, versi Pak Nigrini, yang telah disebutkan di atas, alat ini tepat digunakan oleh Auditor Internal untuk mendeteksi kesalahan atau ketidakteraturan pada data yang dimiliki.
Langkah Kerja
Data yang akan kita gunakan adalah journal entry data yang dapat diunduh di sini. Langkah yang kita gunakan mirip seperti pada tulisan sebelumnya, hanya saja pembulatan akan menggunakan tiga angka di belakang koma.
Hasil pengujian the second-order pada journal entry data akan kita bandingkan dengan invoices paid data pada tulisan sebelumnya.
Kode
Load library dan data
import pandas as pd import benford as bf df = pd.read_excel('Figure7-09_SecondOrder.xlsx', sheet_name='Data')
Urutkan Data, Salin sebagai DataFrame Baru dan Ambil Hanya Kolom Tertentu
df2 = df.sort_values(by=['Amount'])[['Amount']].copy()
Buat Kolom diff Berisi Selisih Nilai Baris n dan n – 1
Kita melakukan pembulatan 3 angka di belakang koma pada hasil selisih baris n dan n – 1, kemudian kalikan 1.000.
df2['diff'] = round((df2['Amount'] - df2.shift(-1)['Amount']), 3) * 1000
Benford’s Law
f12d = bf.first_digits(df2['diff'], digs=2)
Selanjutnya
Jika dibandingkan hasil the second-order test pada invoices paid (dilakukan di tulisan sebelumnya) dan hasil pengujian yang sama pada data journal entry, terlihat perbedaan mencolok.
Pada invoices paid data distribusi angka 10 paling tinggi, kemudian diikuti angka 20, 30 dan seterusnya. Sedangka pada journal entry data, tertinggi adalah angka 90, kemudian menurun dari 18 sampai 99.
Pengujian lebih lanjut menjelaskan keanehan ini, pada journal entry data diketahui terdapat kesalahan pembulatan dimana angka ke-3 di belakang koma masing mengandung angka selain 0.
Untuk melihat itu, kita buat sebuah kolom bantu bernama “tail” yang berisi 3 angka di belakang koma. Kode yang dapat digunakan.
new = df2['Amount'].astype(str).str.split('.', n=1, expand=True) df2['tail'] = new[1]
Kemudian filter data hanya yang mengandung 3 angka pada tail.
Seperti terlihat, pada kolom Amount atau tail terdapat angka di belakang koma bernilai 003, 343, 499 atau 535. Nilai tersebut jika dikurangi dengan baris sebelumnya tentu menghasilkan nilai yang akan bertentangan dengan pola Benford’s Law.
Terlihat the Second-order test dapat mendeteksi kesalahan rounded data pada journal entry data. Jika kesalahan tersebut terjadi karena sistem yang digunakan, tentu rekomendasinya adalah dengan memperbaiki sistem agar menggunakan pembulatan yang sesuai.
Karena jenis kesalahan yang dapat dideteksi oleh the second-order test sehingga metode ini tepat digunakan oleh internal auditor.
Cover Image by Ivan Ivankovic from Pixabay