Forensic Analytics dengan pandas – Benford’s Law

Salah satu alat yang populer dalam forensic analytics adalah Benford’s Law yang merumuskan distribusi angka depan pelbagai nilai (angka) yang kita temukan dalam keseharian kita.

Kode Lima Detik

import pandas as pd
import benford as bf

pd.options.display.float_format = '{:,}'.format

df = pd.read_excel('Chapter4_Figure4pt4_DataOnly.xlsx')
df2 = df[df['Amount'] >= 10]

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

Benford’s Law

Kumpulan angka di koran, besar tagihan listrik, nomor rumah, harga saham, tingkat kematian bahkan konstanta fisika dan matematika menunjukkan pola yang sama, yaitu distribusi digit awal tidak merata.

Untuk yang tidak alergi, berikut rumusan probabilitas kemunculan angka dan grafik distribusinya.

    \[ P(d) = \log_{10}( 1 + \frac{1}{d}) \]

Misal kita memiliki data angka yang muncul di koran selama seminggu, menurut Benford’s Law angka berawalan 1 (satu) seperti 1, 100, 1998 atau 10.567.876, frekuensi kemunculannya adalah 30,10%. Sementara frekuensi kemunculan angka berawalan 9 (sembilan) hanya sebanyak 4,58%.

Fenomena tersebut muncul di banyak tempat yang melibatkan kumpulan angka, tidak terkecuali angka finansial.

Meski dapat diterapkan pada banyak kumpulan angka, terdapat batasan kumpulan angka yang akan mengikuti pola pada Benford’s Law, yaitu.

  • Kumpulan angka tersebut merepresentasikan fakta atau kejadian, misalnya jumlah penduduk kota, panjang sungai, volume penjualan saham.
  • Tidak terdapat batasan minimum dan maksimum, seperti minimum/maksimum pembelian, nilai diskon (karena umumnya memiliki nilai maksimum). Tinggi manusia termasuk yang tidak memenuhi Benford’s Law karena sebab ini.
  • Bukan merupakan identitas, angka yang menjadi identitas (seperti NIK, Kode Pos, Nomor Rekening, No Telepon) umumnya memiliki pola tertentu sehingga tidak akan memenuhi Benford’s Law.

Selain batasan tersebut, Pak Nigrini juga menyarankan kumpulan angka berisi setidaknya 1.000 angka, kurang dari itu pengguna Benford’s Law harus bersedia menerima deviasi yang lebih besar (Nigrini, Forensic Analytics, p.99)

Tujuan

Kita akan melakukan First order test dari Buku Forensic Analytics, Chapter 5 page 99. Pengujian tersebut bertujuan menilai kesesuaian Benford’s Law pada:

  • first digits (angka pertama)
  • second digits (angka kedua)
  • first-two digits (dua angka pertama)

Jika divisualisasikan, hasilnya adalah seperti ini.

First digits
Second digits
First-two digits

Urgensi

Penyimpangan dari Benford’s Law merupakan indikator meningkatnya risiko fraud atau kesalahan. Menggunakan alat ini kita punya panduan memadai untuk mengambil sampel yang “menarik perhatian”.


Langkah Kerja

Karena masih akan menggunakan data pembayaran tagihan yang mengandung nilai negatif, kita akan memfilter hanya data USD10 ke atas. Kita perlu data bernilai \geq 10 karena nilai USD0 sampai USD9.99 terlalu kecil untuk menjadi sampel, selain karena first-two digits test tidak dapat dijalankan jika nilainya kurang dari 10.

Kode

Menariknya, sudah ada library Benford’s Law untuk Python. Menggunakannya, kita hampir tidak melakukan apa-apa lagi selain menyiapkan data. Library tersebut dapat diinstall langsung di Jupyter Notebook dengan perintah berikut.

!pip install benford_py

Kemudian library tersebut dapat langsung digunakan. Siapkan dulu data yang digunakan.

import pandas as pd
import benford as bf

pd.options.display.float_format = '{:,}'.format

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

Kita filter data hanya yang bernilai \geq 10 di kolom Amount.

df2 = df[df['Amount'] >= 10]

Data siap, lalu jalankan first digits test. Kita menggunakan fungsi first_digits dengan parameter digs=1 karena hanya menggunakan 1 digit awal.

f1d = bf.first_digits(df2['Amount'], digs=1)

Jika diperhatikan, dari grafik di atas proporsi masing-masing angka seperti angka 1 adalah sebesar 0,3290, angka 2 sebesar 0,1639 dan seterusnya. Hasil tersebut tidak sesuai dengan ekspektasi Benford’s Law yang diwakili oleh garis merah. Nilai berawalan angka 1, 5 dan 9 melebihi proporsi yang diminta oleh Benford’s Law.

Second digits test akan menguji angka kedua, misal pada angka 25,19 maka angka 5 yang akan diuji. Pengujian dapat dilakukan dengan fungsi second_digit seperti kode di bawah ini.

f2d = bf.second_digit(df2['Amount'])

First-two digits test menguji dua angka pertama, seperti pada angka 25,19 maka angka 25 yang akan diuji. Pengujian First-two digit dapat menggunakan fungsi first_digits namun parameter digs diisi dengan angka 2.

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

Library benford_py menyediakan berbagai fungsi seperti first_digits untuk mendapatkan n digit pertama, second_digit dan lainnya seperti menentukan confidence level. Dokumentasi selengkapnya dapat ditemukan di sini, contoh penggunaan silahkan melihat-lihat notebooks ini.

Selanjutnya

Pemeriksaan lebih lanjut terhadap transaksi dengan digit awal yang menyimpang dari Benford’s Law menjadi prioritas. Namun perlu dicatat, masih menurut Pak Nigrini, first digits test dan second digits test hanya dapat diandalkan untuk memberi tanda bahwa kumpulan angka yang kita miliki memiliki potensi masalah.

Jika kita memiliki 4 kumpulan angka, 3 kumpulan lolos dari first digits dan second digits dan 1 kumpulan angka memiliki penyimpangan dari Benford’s Law maka kita fokus pada 1 kumpulan angka tersebut. Namun pada kumpulan angka yang berpotensi bermasalah tersebut kita perlu menjalankan first-two digits test untuk mendapatkan angka yang menjadi fokus kita.

Berdasarkan pengalaman Pak Nigrini terdapat delapan panduan penggunaan first-two digits dalam forensic analytics (Forensic Analytics, p. 101):

  • Ditemukan proporsi angka 24 pada belanja perusahaan yang melebihi batasan Benford’s Law. Hal tersebut terjadi karena perusahaan tersebut mensyaratkan pegawai untuk men-submit voucher atas pembelanjaan dengan nilai USD25 ke atas. Pegawai cenderung menghindari pagu tersebut sehingga menggunakan angka di bawahnya. Menurut penulis, kondisi yang mirip di Indonesia adalah saat pembelanjaan yang mensyaratkan penggunaan materai. Karena nominal satu juta mensyaratkan penggunaan materai, pihak yang bertransaksi cenderung akan menggunakan angka di bawahnya, sehingga kita akan menemukan proporsi angka 99 (untuk 990.000) yang melebihi batasan Benford’s Law.
  • Peningkatan proporsi pada angka 48, 49, 98 dan 99 menandakan penggunaan nilai di bawah nilai psikologis seperti 100, 500, 1000 dan seterusnya.
  • Ditemukan proporsi tinggi atas angka di bawah level otorisasi internal. Misalnya perusahaan membolehkan manajer menengah untuk mengotorisasi pengeluaran harian sampai dengan 50 juta, peningkatan proporsi pada angka 48 atau 49 bisa jadi merupakan upaya untuk menghindari level nilai yang dibolehkan.
  • Terdapat peningkatan write-off kartu kredit pada angka 49. Mayoritas angka tersebut “diproduksi” oleh satu pegawai. Investigasi menemukan bahwa pegawai tersebut memiliki banyak “saudara” dan “teman” yang kartu kreditnya di-write off. Pegawai tersebut dapat mengotorisasi nilai maksimal USD5.000 sehingga saudara dan teman-temannya menggunakan sampai senilai di bawah itu (4.900an) lalu si pegawai mengotorisasi write off atas kartu kredit mereka.
  • Auditor menjalankan pengujian first-two digits persediaan dan pembayaran pada bulan yang berurutan. Hasilnya menunjukkan pola digit yang berbeda, pemeriksaan lebih lanjut menunjukkan bahwa banyak nilai persediaan di bulan pertama diproses secara keliru sehingga pembayaran di bulan berikutnya adalah nol.
  • Temuan oleh Inland Revenue (kantor pajak) di Inggris menunjukkan tingginya angka 14 pada pendapatan bisnis kecil. Investigasi menunjukkan bahwa banyak bisnis kecil yang “mengelola” pendapatan mereka sehingga di bawah 15.000 GBP. Sistem pajak Inggris memang membolehkan bisnis dengan pendapatan di bawah 15.000 GBP untuk mendapatkan pengembalian pajak.
  • Pegawai hanya diperkenankan menggunakan kartu belanja sampai dengan USD2.500, hal tersebut menyebabkan terjadi proporsi yang tidak sesuai Benford’s Law pada angka 24 (dari 2.400 sampai 2.499).
  • Akuntan menguji biaya yang direimburse oleh pegawai di kantornya, hasilnya menunjukkan angka 48 terlalu banyak. Investigasi lebih lanjut menemukan bahwa pegawai menagihkan biaya ngopi dan kuenya tiap pagi.

Referensi


Cover Photo by Luke Chesser on Unsplash

Leave a Reply

Your email address will not be published.