Bagaimana cara menghasilkan grafik finansial besar dengan pola pencucian uang?

gambar

Beberapa tahun yang lalu tim saya (kepatuhan di salah satu bank Swiss) dan saya memiliki tugas yang menarik untuk diterapkan - kami harus menghasilkan grafik acak besar dari transaksi keuangan antara klien, perusahaan dan ATM. Selain itu, kami ingin grafik ini berisi beberapa pencucian uang dan pola kejahatan keuangan lainnya bersama dengan deskripsi node seperti nama, alamat, mata uang dll. Jelas, semua data harus dibuat secara acak dari awal selama kami tidak dapat menggunakan data nyata apa pun karena alasan yang jelas.

Sebagai solusi, kami menulis generator yang ingin saya bagikan dengan Anda. Artikel ini menjelaskan mengapa kami membutuhkannya dan bagaimana generator ini bekerja, tetapi jika Anda tidak ingin membaca dan ingin mencobanya sendiri di sini adalah kodenya: https://github.com/MGrin/transactions-graph- generator . Saya berharap pengalaman kami akan membantu Anda semua.

Mengapa kami tertarik dengan generator seperti itu?


Tim kami memutuskan untuk mensponsori hackaton LauzHack. Salah satu syarat untuk sponsor adalah memberikan tugas bisnis nyata bagi para peserta, dan kebetulan pada saat yang sama kami memiliki proyek yang menarik terkait dengan penemuan pencucian uang di antara grafik transaksi. Tentu saja, kami memutuskan untuk memberikan tugas yang sama kepada para peserta hackaton.

Seperti yang saya katakan sebelumnya, kami tidak dapat menggunakan data nyata, jadi kami harus membuatnya. Untuk membuat tugas sedekat mungkin dengan dunia nyata, kami telah mendapatkan beberapa statistik dari data kami dan mencoba membuat data yang dihasilkan untuk mengikuti distribusi serupa. Kami juga tidak ingin memiliki grafik kecil - setiap hari kami bekerja dengan milyaran transaksi antara jutaan node, dan kami ingin memberikan kepada peserta kemampuan untuk mencoba ide-ide mereka pada skala yang sama.

Apa yang kita dapatkan sebagai hasilnya?


Kita dapat membuat generator grafik yang cukup cepat, menarik, dan dapat dikonfigurasi! Mari kita lihat lebih detail:

Jenis node


Peserta sistem keuangan kami yang dihasilkan:

  • Klien - akun klien bank abstrak. Berisi bidang-bidang seperti nama, email, usia, profesi, pendidikan, kebangsaan dan alamat.
  • Perusahaan - entitas bisnis dalam sistem keuangan kami. Berisi bidang seperti jenis, nama, dan negara.
  • ATM - titik keluar untuk uang dari grafik keuangan kami ke luar di mana itu tidak dapat dilacak lagi. Berisi koordinat GPS.
  • Transaction - catatan transfer uang antara 2 node grafik. Berisi pointer ke sumber dan target node, jumlah, mata uang dan tanggal dan waktu eksekusi.

Untuk menghasilkan data ini, kami menggunakan Mimesis , perpustakaan yang hebat untuk pembuatan data palsu.

Pembuatan grafik: entitas dasar


Generator dimulai dengan penciptaan entitas dasar - klien, perusahaan dan ATM. Script mengambil jumlah klien yang diinginkan sebagai input, dan berdasarkan nomor ini menghitung jumlah perusahaan dan ATM yang akan dihasilkan. Kami menyimpulkan bahwa jumlah perusahaan sama dengan 2,5% dari total jumlah klien, dan jumlah ATM sama dengan 0,05%. Parameter ini cukup rata-rata dan di-hardcode di dalam generator itu sendiri.

Semua informasi yang dihasilkan disimpan ke dalam file .csv. Menulis ke file-file ini dilakukan dengan batch k baris, k menjadi parameter yang dapat dikonfigurasi. Juga, setiap jenis node dihasilkan secara paralel untuk mempercepat seluruh proses.

Pembuatan grafik: tepi antara entitas


Setelah penciptaan entitas dasar, kami mulai menghubungkan mereka satu sama lain. Pada tahap ini kami belum menghasilkan transaksi, tetapi hanya fakta bahwa dua node terhubung. Kami melakukannya dengan cara ini untuk mempercepat proses dan bekerja sebagai berikut: jika ada keunggulan antara dua node akan ada sejumlah transaksi yang dipisahkan dalam waktu. Tanpa tepi - tidak ada transaksi sama sekali.

Probabilitas if dan edge antara dua node dan kemungkinan tipe edge adalah:

  • Klien -> Klien, p = 0,4%
  • Klien -> Perusahaan, p = 1%
  • Klien -> ATM, p = 3%
  • Perusahaan -> Klien, p = 0,5%

Probabilitas ini dapat dikonfigurasi menggunakan parameter generator.

Sama seperti node, semua tipe edge dihasilkan secara paralel dan ditulis dalam file dalam batch.

Pembuatan grafik: transaksi


Memiliki node dan edge memiliki distribusi yang diinginkan, kita dapat memulai pembuatan transaksi. Proses ini lurus ke depan untuk diterapkan tetapi cukup sulit untuk diparalelkan. Karena itu pada tahap ini hanya dua utas yang berfungsi - satu untuk pembuatan transaksi sumber klien, satu lagi - untuk pembuatan transaksi sumber perusahaan. Jumlah transaksi untuk keunggulan secara acak dan dipisahkan secara waktu secara acak.

Seperti apa pun di atas, transaksi yang dihasilkan ditulis dalam file .csv dalam batch.

Pembuatan grafik: pola


Di sinilah segalanya menjadi menarik. Kami mendefinisikan tiga pola yang ingin kami miliki dalam grafik kami:

  • Flow - sejumlah besar uang dikirim dari node sumber ke N node, dan mereka semua dari N node ini mengirim uang ke K node lain, dll. hingga lapisan terakhir dari jaringan ini akan mengirim semua uang yang diterima ke node target.
  • Circular - sejumlah besar uang akan melalui node yang berbeda dan kembali ke node sumber.
  • Waktu - beberapa jumlah ditransfer dari simpul A ke simpul B beberapa kali, dipisahkan oleh waktu pseudo-acak.

Mari kita temukan pola-pola ini satu per satu.

Mengalir


Kami mulai dengan memilih sejumlah lapisan jaringan. Dalam realisasi kami, ini adalah angka acak antara 2 dan 6, dan nilai-nilai ini tidak dapat dikonfigurasi. Kemudian kami secara acak memilih 2 node - sumber dan target. Juga jumlah yang akan dikeluarkan oleh node sumber secara acak dihasilkan sebagai 50.000 * acak () + 50000 * acak ().

Setiap peserta jaringan ini mengambil pembayaran untuk layanannya. Dalam realisasi kami, total pembayaran untuk seluruh penggunaan jaringan tidak akan melebihi 10% dari jumlah sumber.

Semua transaksi yang dihasilkan ditunda dalam waktu dari satu lapisan ke lapisan lainnya. Penundaannya acak dan tidak melebihi 5 hari.

Edaran


Mirip dengan pola aliran kecuali bahwa sumber dan target node adalah sama, dan hanya ada satu node per lapisan menengah.

Waktu


Pola termudah. Jumlah acak dikirim dari simpul A ke simpul B beberapa waktu (angka acak antara 5 dan 50, tidak dapat dikonfigurasi) dengan penundaan pseudo-acak antara transaksi.

Pengacakan transaksi akhir


Pada tahap ini kami memiliki sejumlah file .csv:

  • 3 file dengan informasi node (klien, perusahaan, ATM)
  • 4 file dengan transaksi: satu untuk transaksi biasa dan 3 untuk transaksi dari pola yang dihasilkan.

Ada skrip lain yang mengacak semua transaksi dan menyimpulkannya dalam satu file transaksi.

Apa yang harus dilakukan dengan output dari generator ini


Pada akhirnya kami memiliki 4 file .csv yang indah dengan node grafik dan transaksi. Kami dapat mengimpor grafik ini ke Neo4J atau menayangkannya di REST API - pada dasarnya kami bisa melakukan apa saja dengannya! Ukuran grafik bisa sebesar yang Anda inginkan (kami berakhir dengan menghasilkan grafik dengan 2 miliar klien dan butuh sekitar 8 jam di MacBook saya 2014).

Kami mendapat banyak umpan balik positif dari peserta hackaton serta beberapa solusi yang sangat baik untuk masalah pendeteksian pola dalam grafik besar.

Terima kasih atas waktu Anda, dan ini tautannya ke generator: https://github.com/MGrin/transactions-graph-generator

Source: https://habr.com/ru/post/id447798/


All Articles