डिवाइस ग्राफ़ विश्लेषण: सेशनों के बीच बिंदुओं को जोड़ना
ग्राफ़ डेटाबेस कैसे डिवाइसों के बीच छिपे कनेक्शन उजागर करते हैं, जिससे बड़े पैमाने पर मल्टी-अकाउंट डिटेक्शन और फ़्रॉड रिंग की पहचान संभव होती है।
जब एक ही फ़्रॉडस्टर दर्जनों अकाउंट चलाता है, तो अलग-अलग देखने पर हर अकाउंट वैध लगता है। हर एक के पास एक अनूठा ईमेल, एक प्रशंसनीय IP पता, यथार्थवादी ब्राउज़िंग पैटर्न होता है। पारंपरिक नियम-आधारित डिटेक्शन हर अकाउंट को स्वतंत्र रूप से जाँचता है और कुछ भी संदिग्ध नहीं पाता। अकाउंटों के बीच के कनेक्शन — साझा डिवाइस, ओवरलैपिंग सेशन, समान नेटवर्क फ़िंगरप्रिंट — उन सिस्टमों के लिए अदृश्य होते हैं जो एक बार में एक अकाउंट प्रोसेस करते हैं।
ग्राफ़ क्यों
डिवाइस ग्राफ़ विश्लेषण इस मॉडल को बदल देता है। अकाउंटों को स्वतंत्र रूप से परखने के बजाय, हम एक ग्राफ़ बनाते हैं जहाँ नोड्स होते हैं डिवाइस, अकाउंट, IP पते और सेशन, और एजेज़ देखे गए कनेक्शनों को दर्शाते हैं: "यह डिवाइस इस अकाउंट को बनाने के लिए इस्तेमाल हुआ," "यह IP इस डिवाइस के साथ देखा गया," "इन दो अकाउंटों ने एक सेशन कुकी साझा की।" ग्राफ़ वह संरचना उजागर करता है जो सपाट टेबल नहीं कर सकतीं।
एक फ़्रॉड रिंग जो 5 डिवाइस और 3 IP पतों पर 50 अकाउंट चलाती है, ग्राफ़ में एक विशिष्ट क्लस्टर बनाती है। क्लस्टर घनत्व — नोड्स के एक छोटे समूह के भीतर कई कनेक्शन — एक मज़बूत संकेत है। वैध उपयोगकर्ता शायद ही कभी अजनबियों के साथ डिवाइस साझा करते हैं, और उनके अकाउंट-डिवाइस कनेक्शन घने क्लस्टर के बजाय विरल, वृक्ष-जैसी संरचनाएँ बनाते हैं।
ग्राफ़ डेटाबेस आर्किटेक्चर
हम चार नोड प्रकारों के साथ एक प्रॉपर्टी ग्राफ़ मॉडल का उपयोग करते हैं: Device (विज़िटर ID से पहचाना गया), Account (आपका यूज़र ID), Network (IP पता + ASN), और Session (व्यक्तिगत पहचान इवेंट)। एजेज़ मेटाडेटा ले जाते हैं: टाइमस्टैम्प, कॉन्फ़िडेंस स्कोर, और इवेंट प्रकार।
ग्राफ़ को 2-हॉप ट्रैवर्सल के लिए ऑप्टिमाइज़ किए गए एक विशेष-निर्मित अडजेसेंसी इंडेक्स में संग्रहीत किया जाता है। जब कोई नया पहचान इवेंट आता है, तो हम इवेंट को एक Session नोड के रूप में इंसर्ट करते हैं, इसे Device और Network नोड्स से जोड़ते हैं, और जाँचते हैं कि क्या किसी लिंक्ड Account के अन्य डिवाइसों से कनेक्शन हैं। यह इंसर्ट-एंड-क्वेरी ऑपरेशन 1 करोड़ नोड्स तक के ग्राफ़ के लिए 5ms से कम में पूरा होता है।
हमने वास्तव में पहले Neo4j आज़माया। यह डेवलपमेंट में 100K नोड्स के साथ बढ़िया काम कर रहा था। फिर हमने प्रोडक्शन डेटा लोड किया — 500M नोड्स — और Cypher क्वेरी जो 2ms लेती थीं, 800ms लेने लगीं। डेविड ने शार्डेड RocksDB द्वारा समर्थित अपना अडजेसेंसी इंडेक्स बनाने से पहले एक हफ़्ता विकल्पों को बेंचमार्क करने में बिताया। कभी-कभी साधारण, कस्टम समाधान सुरुचिपूर्ण, तैयार समाधान को मात दे देता है।
क्लस्टरिंग एल्गोरिदम
हम डिवाइस ग्राफ़ पर दो क्लस्टरिंग एल्गोरिदम लागू करते हैं:
Connected Components
सबसे सरल तरीका: किसी दिए गए डिवाइस से पहुँच योग्य सभी नोड्स खोजें। यदि Device A, Account 1 और Account 2 से जुड़ा है, और Device B भी Account 2 से जुड़ा है, तो Devices A और B एक ही connected component में हैं। यह उन सभी अकाउंटों की पहचान करता है जो कोई भी ट्रांज़िटिव डिवाइस कनेक्शन साझा करते हैं।
Connected components गणना करने में तेज़ हैं, पर जब वैध साझा डिवाइस (परिवार के कंप्यूटर, लाइब्रेरी टर्मिनल) असंबंधित अकाउंटों के बीच पुल बनाते हैं तो ये बहुत बड़े क्लस्टर उत्पन्न कर सकते हैं। हम इसे एज वेटिंग से संभालते हैं — ज्ञात साझा वातावरणों के माध्यम से बने कनेक्शनों को कम वेट मिलता है।
Community Detection
अधिक सूक्ष्म विश्लेषण के लिए, हम वेटेड ग्राफ़ पर Louvain community detection चलाते हैं। यह एल्गोरिदम ग्राफ़ को समुदायों में विभाजित करता है जहाँ समुदाय-भीतरी कनेक्शन घने होते हैं और समुदाय-बीच कनेक्शन विरल होते हैं। फ़्रॉड रिंग तब भी घने समुदाय बनाती हैं जब वे साझा इन्फ़्रास्ट्रक्चर के माध्यम से व्यापक ग्राफ़ से जुड़ी हों।
Louvain एल्गोरिदम O(n log n) समय में चलता है, जो इसे लाखों नोड्स वाले ग्राफ़ के लिए व्यावहारिक बनाता है। हम इसे इंक्रीमेंटल रूप से चलाते हैं — जब नए एजेज़ जोड़े जाते हैं, तो हम पूरे विभाजन की फिर से गणना करने के बजाय समुदाय असाइनमेंट को स्थानीय रूप से अपडेट करते हैं।
वास्तविक-दुनिया पैटर्न: फ़्रॉड रिंग डिटेक्शन
एक गेमिंग प्लेटफ़ॉर्म ने संगठित फ़्रॉड रिंग का पता लगाने के लिए हमारे डिवाइस ग्राफ़ API को इंटीग्रेट किया। पहले ही हफ़्ते में, ग्राफ़ ने 8 डिवाइस और 4 IP पतों के माध्यम से जुड़े 127 अकाउंट का एक क्लस्टर उजागर किया। अकाउंट 3 महीने की अवधि में बनाए गए थे, प्रत्येक एक अनूठे ईमेल और यथार्थवादी प्रोफ़ाइल के साथ। नियम-आधारित डिटेक्शन ने इनमें से शून्य को फ़्लैग किया था।
ग्राफ़ संरचना ही सुराग थी: 8 डिवाइस साझा करने वाले 127 अकाउंट प्रति डिवाइस औसतन 15.8 अकाउंट उत्पन्न करते हैं। इस प्लेटफ़ॉर्म पर वैध उपयोगकर्ता प्रति डिवाइस औसतन 1.2 अकाउंट रखते हैं। क्लस्टर घनत्व बेसलाइन से 47 गुना अधिक था — एक स्पष्ट फ़्रॉड संकेत।
बड़े पैमाने पर प्रदर्शन
हमारा प्रोडक्शन डिवाइस ग्राफ़ 2.3 अरब नोड्स और 8.1 अरब एजेज़ संभालता है। इंसर्ट लेटेंसी p99 पर 2.4ms है। टू-हॉप ट्रैवर्सल (लंबाई 2 के किसी भी पथ के माध्यम से किसी डिवाइस से जुड़े सभी अकाउंट खोजें) p99 पर 4.1ms में पूरा होता है। Community detection अपडेट प्रति सेकंड 50,000 नए एजेज़ प्रोसेस करते हैं।
ग्राफ़ को डिवाइस ID हैश द्वारा 12 नोड्स में शार्ड किया गया है, जिसमें प्रत्येक शार्ड लगभग 19 करोड़ नोड्स रखता है। 3 का रेप्लिकेशन फ़ैक्टर उपलब्धता सुनिश्चित करता है। हम डिज़ास्टर रिकवरी के लिए हर घंटे ग्राफ़ का स्नैपशॉट लेते हैं और इंक्रीमेंटल अपडेट के विरुद्ध निरंतरता जाँच के रूप में रोज़ाना पूर्ण community detection पुनर्गणना चलाते हैं।
इंटीग्रेशन
डिवाइस ग्राफ़ दो इंटरफ़ेस के माध्यम से सुलभ है: व्यक्तिगत लुकअप के लिए एक रियल-टाइम क्वेरी API (क्या यह डिवाइस अन्य अकाउंटों से जुड़ा है?) और एनालिटिक्स के लिए एक बैच एक्सपोर्ट API (मुझे N से अधिक अकाउंट वाले सभी क्लस्टर दें)। रियल-टाइम API इनलाइन फ़्रॉड निर्णयों के लिए डिज़ाइन किया गया है — अकाउंट बनाने के दौरान क्वेरी करें ताकि जाँचा जा सके कि डिवाइस ने अन्य अकाउंट देखे हैं या नहीं। बैच API आपकी डेटा टीम के जाँच वर्कफ़्लो को फ़ीड करता है।