كبير مولد الرسم البياني المعاملة مع أنماط النشاط الإجرامي

يوم جيد.


شبكة

قبل عامين ، واجه فريقنا (الامتثال في بنك سويسري) مهمة مثيرة للغاية: كان من الضروري إنشاء رسم بياني كبير للمعاملات بين العملاء والشركات وأجهزة الصراف الآلي ، وإضافة أنماط مشابهة لغسل الأموال وأنماط النشاط الإجرامي الأخرى إلى هذا الرسم البياني ، وإضافة الحد الأدنى أيضًا معلومات حول عقد هذا الرسم البياني - الأسماء والعناوين والوقت وما إلى ذلك بالطبع ، كان لابد من توليد جميع البيانات من نقطة الصفر ، دون استخدام بيانات العملاء الحالية.

لحل هذه المشكلة ، تمت كتابة مولد ، والذي أود مشاركته معك. تحت القص ، ستجد قصة تشرح سبب احتياجنا لها ، ووصفًا لتشغيل المولد. لفارغ الصبر - هنا يكمن الرمز . سأكون سعيدًا إذا كان شخص ما سيستفيد من تجربتنا.


لماذا نفعل مثل هذا الهراء؟


قرر فريقنا المشاركة كراع في Hauzathon LauzHack

. أحد شروط المشاركة في تنسيق الراعي هو توفير مهمة عمل حقيقية للمشاركين. في ذلك الوقت ، كان لدينا مشروع مثير للاهتمام للغاية يتعلق بأتمتة البحث عن الجرائم المالية وغسل الأموال بين معاملات عملائنا ، وبدون تردد ، قررنا تقديم نفس المهمة للمشاركين في hackathon.

لأسباب واضحة ، لم نتمكن من استخدام بيانات حقيقية ، لذلك كان علينا إنشاءها. لجعل المهمة أقرب ما تكون إلى الواقع ، نظرنا في إحصائيات البيانات الحقيقية وحاولنا ، قدر الإمكان ، تقريب البيانات المولدة من التوزيعات الحقيقية ، ولم نقم كذلك بكمية البيانات وتعقيدها - لم نكن بحاجة إلى حل يعمل على رسم بياني من 100 عقدة و 200 اتصال ، كنا نبحث عن حل قادر على معالجة الرسوم البيانية بحجم ملايين العقد ومليارات الاتصالات ، ومع مراعاة جميع المعلومات المتاحة حول العقد والاتصالات.


ماذا حصلنا؟


وحصلنا على سرعة كبيرة (معدلة لكمية البيانات) ، مولد مثير للاهتمام وقابل للتكوين! دعونا نفهم بالتفصيل


أنواع البيانات


نريد أن يكون لدينا رسم بياني للمعاملات المالية ، على التوالي ، والمشاركون المحتملون في هذا الرسم البياني هم:


  • عميل - يمكنك أن تقول حساب عميل مجردة للبنك. يوصف بالاسم والبريد الإلكتروني والعمر والعمل والآراء السياسية والجنسية والتعليم وعنوان الإقامة
  • الشركة هي كيان تجاري في النظام المالي. يتم تحديده حسب نوع الشركة والاسم والدولة.
  • أجهزة الصراف الآلي - تحدث تقريبًا ، نقاط خروج المال من الرسم البياني الذي نتحكم فيه. يحددها الإحداثيات الجغرافية.
  • المعاملة - حقيقة تحويل الأموال من عقدة من الرسم البياني إلى أخرى. يحددها عقدة البداية والنهاية والمبلغ والعملة والوقت.

لإنشاء هذه البيانات ، نستخدم Mimesis ، وهي مكتبة رائعة لإنشاء بيانات مزيفة.


إنشاء رسم بياني: الكيانات الأساسية


تحتاج أولاً إلى إنشاء جميع الكيانات الأساسية - العملاء والشركات وأجهزة الصراف الآلي. يأخذ البرنامج النصي عدد العملاء الذين ترغب في إنشائهم ، وعلى هذا الأساس يحسب عدد الشركات وأجهزة الصراف الآلي. وفقًا لبياناتنا ، يبلغ عدد الشركات التي لديها أي عدد كبير من المعاملات مع العملاء حوالي 2.5٪ من عدد العملاء ، ويبلغ عدد أجهزة الصراف الآلي 0.05٪ من عدد العملاء. هذه القيم معممة للغاية وغير قابلة للتكوين (سلكية في رمز المولد).


يتم حفظ جميع المعلومات في ملفات .csv. الكتابة إلى هذه الملفات تحدث على دفعات ، ك خطوط في وقت واحد. يتم تكوين هذه القيمة بواسطة وسيطات البرنامج النصي. أيضا ، يتم إنشاء ثلاثة أنواع من العقد بالتوازي.


إنشاء رسم بياني: اتصالات بين الكيانات


بعد إنشاء الكيانات الأساسية ، نبدأ في ربطها معًا. في هذه المرحلة ، لم نقم بعد بإنشاء المعاملات نفسها ، ولكن ببساطة حقيقة أن هناك علاقة بين العقد. تم ذلك لتسريع عملية إنشاء الرسم البياني بأكمله ويعمل تقريبًا على النحو التالي: إذا كانت العقدتان متصلتان ، فإننا نقوم بإنشاء عدد معين من المعاملات بينهما ، متناثرة في الوقت المناسب. إذا لم تكن متصلاً ، ولكن المعاملات بين هذه العقد غير موجودة.


يتم تكوين احتمال وجود اتصال بين العقدتين من خلال الوسائط ، يتم سرد القيم القياسية أدناه.


أنواع الاتصال الممكنة:


  • العميل -> العميل (ع = 0.4 ٪)
  • العميل -> الشركة (ع = 1 ٪)
  • العميل -> أجهزة الصراف الآلي (ع = 3 ٪)
  • الشركة -> العميل (ع = 0.5 ٪)

مثل العقد ، يتم إنشاء جميع أنواع الاتصالات بشكل متوازٍ ومكتوب إلى ملفاتها على دفعات.


إنشاء الرسم البياني: المعاملات


وجود العقد من الرسم البياني والعلاقات بينهما تقع تحت التوزيع المطلوب ، يمكننا أن نبدأ توليد المعاملات. العملية بسيطة للغاية في حد ذاتها ، ولكن موازاة ذلك أمر صعب للغاية. لذلك ، في هذه المرحلة ، لا يوجد سوى اثنين من التدفقات المستقلة - المعاملات التي تنشأ من العميل ، والمعاملات الناشئة من الشركة.


لا يحدث شيء مثير للاهتمام بشكل خاص في هذه المرحلة: يتم تشغيل البرنامج النصي من خلال قائمة الاتصالات وينشئ عددًا عشوائيًا من المعاملات لكل اتصال. هو مكتوب كل بنفس الطريقة - في ملفات .csv بواسطة الحزم.


إبداعات العد: أنماط


وهنا هناك نقاط مثيرة للاهتمام. أنواع أنماط السلوك التي أردنا الحصول عليها في العمود الأخير:


  • التدفق - ينتقل مبلغ كبير من عقدة إلى أخرى إلى أخرى ، كل واحدة من هذه العقد تنقل الأموال إلى المستوى التالي من العقد ، وهكذا ، حتى يرسل المستوى الأخير كل الأموال إلى مستلم واحد.
  • دائري - يذهب المبلغ في دائرة ويعود إلى المصدر.
  • الوقت - يذهب مبلغ معين من المال من عقدة إلى أخرى مع بعض التردد الثابت.

دعونا نلقي نظرة على كل من هذه الأنماط بمزيد من التفصيل:


تدفق


بادئ ذي بدء ، يتم تحديد عدد المستويات التي من خلالها يجب أن تذهب الأموال. في تطبيقنا ، هذا الرقم العشوائي بين 2 و 6 غير قابل للتكوين وسلكي في الكود. بعد ذلك ، يتم تحديد عقدتي الرسم البياني - المرسل والمستلم. يتم تحديد مبلغ عشوائي أيضًا ، والذي سيرسله المرسل إلى المستلم (وفقًا للمعادلة الذكية 50000 * random() + 50000 * random() ).


يتحمل كل عضو في هذه الشبكة نوعًا من الرسوم مقابل خدماتهم. في تطبيقنا ، سيكون الحد الأقصى لسعر تمرير الأموال عبر الشبكة هو 10 ٪ من المبلغ المحول من قبل المرسل.


تحتوي المعاملات المنشأة على تحول زمني للمعاملات النسبية لمستوى الشبكة السابق - أي يأتي المال أولاً إلى المستوى n-1 ، وعندها فقط ينتقل إلى المستوى n. يتم اختيار التأخير بشكل عشوائي في غضون 4-5 أيام. أيضا ، المعاملات التي تم إنشاؤها لها كميات عشوائية زائفة (محدودة من المبلغ الأولي ومع مراعاة الرسوم لكل عقدة)


دائري


يتم إنشاؤه وفقًا لمبدأ مشابه لـ Flow ، ولكن بدلاً من المرسل والمستقبل المختلفين وعدة مستويات في هذا النمط ، فإن المال يذهب في دائرة ويعود إلى العقدة الأصلية. جميع العقد الوسيطة تفرض رسومًا ، كما هو الحال مع Flow ، كما أن المعاملات لها إزاحة زمنية.


وقت


أبسط نمط. يتم إرسال مبلغ معين من المرسل إلى المستلم بعدد عشوائي من المرات (من 5 إلى 50 ، غير قابل للتكوين) مع نوبات زمنية شبه عشوائية.


تتم كتابة جميع المعاملات الجديدة بنفس الطريقة إلى ملفات .csv على دفعات.


الرسم البياني العشوائية وجمع جميع المعاملات في ملف واحد


في هذه المرحلة ، لدينا العديد من ملفات .csv:


  • 3 ملفات مع العقد (العملاء والشركات وأجهزة الصراف الآلي)
  • 4 ملفات المعاملات: واحد للمعاملات العادية و 3 تحتوي على أنماط.

يمزج البرنامج النصي الإضافي معاملات النمط مع المعاملات المنتظمة بحيث لا يمكن رؤية الأنماط في رسم بياني بالترتيب الذي يتم به تسجيل المعاملات في ملف.


وماذا تفعل مع كل هذا؟


في النهاية ، لدينا 4 ملفات جميلة مع العقد الرسم البياني والمعاملات بينهما. يمكنك الاستيراد إلى Neo4J ، ويمكنك التوزيع من خلال REST ، ولكن مهما كان ما يريده قلبك ، يمكنك القيام به.


بالنسبة لنا ، تلقينا ردود فعل إيجابية للغاية من المشاركين في hackathon ، وبعض الحلول المثيرة للاهتمام للغاية لإيجاد أنماط في الرسوم البيانية الضخمة.

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


All Articles