Analisis Device Graph: Menghubungkan Titik-Titik Antar Sesi
Bagaimana graph database mengungkap koneksi tersembunyi antar perangkat, memungkinkan deteksi multi-akun dan identifikasi fraud ring dalam skala besar.
Ketika seorang penipu tunggal mengoperasikan puluhan akun, masing-masing akun tampak sah jika dilihat secara terpisah. Setiap akun memiliki email unik, alamat IP yang masuk akal, pola penelusuran yang realistis. Deteksi berbasis aturan tradisional memeriksa setiap akun secara independen dan tidak menemukan apa pun yang mencurigakan. Koneksi antar akun — perangkat yang dipakai bersama, sesi yang tumpang tindih, sidik jari jaringan yang sama — tidak terlihat oleh sistem yang memproses akun satu per satu.
Mengapa Graph
Analisis device graph mengubah modelnya. Alih-alih mengevaluasi akun secara independen, kami membangun sebuah graph di mana node berupa perangkat, akun, alamat IP, dan sesi, sedangkan edge merepresentasikan koneksi yang teramati: "perangkat ini dipakai untuk membuat akun ini," "IP ini terlihat bersama perangkat ini," "kedua akun ini berbagi session cookie." Graph mengungkap struktur yang tidak dapat ditampilkan oleh tabel datar.
Sebuah fraud ring yang menggunakan 50 akun di 5 perangkat dan 3 alamat IP membentuk klaster yang khas dalam graph. Kepadatan klaster — banyak koneksi dalam sekelompok kecil node — merupakan sinyal yang kuat. Pengguna sah jarang berbagi perangkat dengan orang asing, dan koneksi akun-perangkat mereka membentuk struktur yang jarang dan menyerupai pohon, bukan klaster yang padat.
Arsitektur Graph Database
Kami menggunakan model property graph dengan empat tipe node: Device (diidentifikasi melalui visitor ID), Account (user ID Anda), Network (alamat IP + ASN), dan Session (peristiwa identifikasi individual). Edge membawa metadata: timestamp, confidence score, dan tipe peristiwa.
Graph disimpan dalam adjacency index yang dibangun khusus dan dioptimalkan untuk traversal 2 hop. Ketika peristiwa identifikasi baru tiba, kami menyisipkan peristiwa tersebut sebagai node Session, menghubungkannya ke node Device dan Network, lalu memeriksa apakah ada Account terkait yang memiliki koneksi ke perangkat lain. Operasi insert-and-query ini selesai dalam waktu kurang dari 5ms untuk graph dengan hingga 10 juta node.
Sebenarnya kami mencoba Neo4j terlebih dahulu. Ia bekerja dengan baik dalam pengembangan pada 100K node. Lalu kami memuat data produksi — 500M node — dan kueri Cypher yang tadinya memakan 2ms mulai memakan 800ms. David menghabiskan seminggu melakukan benchmark alternatif sebelum kami membangun adjacency index kami sendiri yang didukung RocksDB yang di-shard. Terkadang solusi kustom yang membosankan mengalahkan solusi jadi yang elegan.
Algoritma Clustering
Kami menerapkan dua algoritma clustering pada device graph:
Connected Components
Pendekatan paling sederhana: temukan semua node yang dapat dijangkau dari sebuah perangkat tertentu. Jika Device A terhubung ke Account 1 dan Account 2, dan Device B juga terhubung ke Account 2, maka Device A dan Device B berada dalam connected component yang sama. Ini mengidentifikasi semua akun yang berbagi koneksi perangkat secara transitif.
Connected components cepat dihitung tetapi dapat menghasilkan klaster yang sangat besar ketika perangkat sah yang dipakai bersama (komputer keluarga, terminal perpustakaan) menciptakan jembatan antar akun yang tidak berkaitan. Kami mengatasi hal ini dengan pembobotan edge — koneksi melalui lingkungan bersama yang dikenal mendapatkan bobot lebih rendah.
Community Detection
Untuk analisis yang lebih bernuansa, kami menjalankan community detection Louvain pada graph berbobot. Algoritma ini mempartisi graph menjadi komunitas-komunitas di mana koneksi intra-komunitas bersifat padat dan koneksi antar-komunitas bersifat jarang. Fraud ring membentuk komunitas yang rapat bahkan ketika terhubung ke graph yang lebih luas melalui infrastruktur bersama.
Algoritma Louvain berjalan dalam waktu O(n log n), sehingga praktis untuk graph dengan jutaan node. Kami menjalankannya secara inkremental — ketika edge baru ditambahkan, kami memperbarui penetapan komunitas secara lokal alih-alih menghitung ulang seluruh partisi.
Pola Dunia Nyata: Deteksi Fraud Ring
Sebuah platform gaming mengintegrasikan device graph API kami untuk mendeteksi fraud ring yang terorganisir. Dalam minggu pertama, graph mengungkap sebuah klaster berisi 127 akun yang terhubung melalui 8 perangkat dan 4 alamat IP. Akun-akun tersebut telah dibuat selama periode 3 bulan, masing-masing dengan email unik dan profil yang realistis. Deteksi berbasis aturan tidak menandai satu pun dari mereka.
Struktur graph-lah yang menjadi petunjuknya: 127 akun berbagi 8 perangkat menghasilkan rata-rata 15,8 akun per perangkat. Pengguna sah rata-rata memiliki 1,2 akun per perangkat di platform ini. Kepadatan klaster berada 47x di atas baseline — sinyal fraud yang tidak ambigu.
Performa dalam Skala Besar
Device graph produksi kami menangani 2,3 miliar node dan 8,1 miliar edge. Latensi insert adalah 2,4ms pada p99. Traversal dua hop (temukan semua akun yang terhubung ke sebuah perangkat melalui jalur apa pun sepanjang 2) selesai dalam 4,1ms pada p99. Pembaruan community detection memproses 50.000 edge baru per detik.
Graph di-shard berdasarkan hash device ID di 12 node, dengan setiap shard menampung sekitar 190 juta node. Faktor replikasi 3 memastikan ketersediaan. Kami mengambil snapshot graph setiap jam untuk pemulihan bencana dan menjalankan penghitungan ulang community detection penuh setiap hari sebagai pemeriksaan konsistensi terhadap pembaruan inkremental.
Integrasi
Device graph dapat diakses melalui dua antarmuka: query API real-time untuk pencarian individual (apakah perangkat ini terhubung ke akun lain?) dan batch export API untuk analitik (berikan semua klaster dengan lebih dari N akun). API real-time dirancang untuk keputusan fraud inline — lakukan kueri saat pembuatan akun untuk memeriksa apakah perangkat tersebut pernah melihat akun lain. Batch API menyuplai alur kerja investigasi tim data Anda.