Forensic Analytics dengan Pandas – Benford’s Law The Second-Order

Pengantar

Tulisan sebelumnya telah mengeksplorasi Benford’s Law pada transaksi keuangan. Namun ada sedikit catatan saat menggunakan Benford’s Law, yaitu sebenarnya hampir tidak ada data set yang benar-benar memenuhi Benford’s Law. Apalagi jika kita menggunakan alat statistik seperti Z-statistic, chi-square, Kolmogorov-Smirnoff hanya menoleransi deviasi yang kecil.

Karenanya Pak Nigrini menawarkan metode lain penggunaan Benford’s Law, yaitu The second-order test. Pola digit yang dihasilkan pengujian ini akan sangat dekat dengan pola digit yang diharapkan Benford’s Law.

Menurut penulis, kecuali Anda sedang menyusun paper untuk dipublikasi, bersidang tesis atau mempertahankan desertasi, tidak perlu terlalu pusing memikirkan hal-hal di atas.

Apalagi jika penggunaan Benford’s Law hanya merupakan pintu masuk saja saat mengambil sampel. Hukum Benford dan metode turunannya kita gunakan secara pragmatis saja, sebagai panduan menentukan data mana yang layak menjadi perhatian atau memprofil data yang kita miliki.


The Second-order Test

The second-order test of Benford’s Law berdasarkan pola digit dan beda antar elemen data (yang telah) urut. Menggunakan metode ini, kita dapat mengaplikasikan Benford’s Law pada hampir semua data set.

Pak Nigrini menyarankan mengukur kesesuaian dengan Benford’s Law dengan membuat keputusan subyektif atau menggunakan Mean Absoulute Deviaton (MAD). MAD tidak menggunakan N (jumlah data) dalam perhitungan sehingga cocok untuk kita yang menggunakan data set besar, karena kesesuaian dengan Benford’s Law menjadi tidak terlalu sensitif terhadap perubahan kecil.

Tujuan

Kita akan menghasilkan grafik seperti ini, yang disadur dari figure 7.7 Forensic Analytics p. 140.

Grafik tersebut adalah visualisasi dari metode The second-order test pada data pembayaran tagihan, masih dari buku yang sama.

Urgensi

Metode ini terutama berguna bagi manajemen dan auditor internal karena dapat mendeteksi kesalahan dan ketidakteraturan yang tidak terdeteksi oleh prosedur tradisional.


Langkah Kerja

Data pembayaran tagihan dapat diunduh di sini. Langkah pertama, setelah me-load library dan data tentunya, adalah menambahkan sebuah kolom berisi selisih data n dan n-1. Untungnya keseluruhan proses ini sangat mudah menggunakan pandas dan benford_py.

Kode

Instalasi Library

Jika belum pernah, dapat langsung melalui Jupyter Notebook dengan kode berikut.

!pip install pandas
!pip install benford_py

Impor Library dan Data

import pandas as pd
import benford as bf

df = pd.read_excel('Chapter4_Figure4pt4_DataOnly.xlsx')

Menyalin Kolom yang Dibutuhkan dan Urutkan Nilainya

Urutkan data menggunakan fungsi sort_values dan salin data menggunakan copy.

df2 = df.sort_values(by=['Amount'])[['Amount']].copy()

Buat Kolom Bantu Berisi Selisih Nilai

Kolom “diff” berisi selisih nilai baris ke-n dan baris n – 1 hasilnya dibulatkan menjadi dua angka di belakang koma dengan fungsi round. Setelah itu kalikan dengan 1.000. Perkalian dengan seribu ini untuk memastikan bahwa angka yang didapatkan cukup besar sehingga dapat diproses, karena kita akan menggunakan two-digit test yang mensyaratkan ada dua bilangan bulat.

Untuk mendapatkan nilai dari baris sebelumnya, pandas menyediakan fungsi shift.

df2['diff'] = round((df2['Amount'] - df2.shift(-1)['Amount']), 2) * 1000

Benford’s Law

Penjelasan singkat mengenai library benford_py dapat dibaca di tulisan sebelumnya. Jika perlu penjelasan lebih lanjut dapat membaca dokumentasi resmi atau contoh notebook yang diberikan.

f12d = bf.first_digits(df2['diff'], digs=2)

Selanjutnya

Grafik di atas menunjukkan sangat tinggi angka 10 diikuti 20, 30 dan seterusnya. Hal ini disebabkan antara lain karena padatnya angka yang kita proses. Dari 189.470 data yang kita proses, sebanyak 139.105 diantaranya bernilai 10 sampai 1.000.

Dari 139.105 nilai tersebut, 39.897 diantaranya merupakan angka yang unik.

Hal tersebut mendorong kita untuk berpikir bahwa jarak antar angka pasti pendek sekali, terbukti sebanyak 21.579 angka hanya berjarak 0,01, 7.329 angka berjarak 0,02 dan seterusnya seperti gambar di bawah.

Temuan ini menjelaskan kenapa nilai 10, 20 dan seterusnya sangat tinggi pada grafik (0,01 dikali 1.000 adalah 10).

Menggunakan second-order test kita lebih paham mengenai data (finansial) yang kita punyai. Perilaku nilai kecil (desimal) dapat tergambarkan. Data yang kita uji juga terlihat normal karena jarak paling sering terjadi adalah 0,01. Pada tulisan selanjutnya kita akan menggunakan second-order test pada data lain, untuk menunjukkan perbedaan dan temuan yang dapat kita temui dari penggunaan metode ini.


Cover Image by Thomas B. from Pixabay

One Reply to “Forensic Analytics dengan Pandas – Benford’s Law The Second-Order”

Leave a Reply

Your email address will not be published. Required fields are marked *