شعار زيفيرنت

إنشاء حل للكشف عن الاحتيال في الوقت الفعلي قائم على GNN باستخدام Amazon SageMaker و Amazon Neptune و Deep Graph Library

التاريخ:

تؤثر الأنشطة الاحتيالية بشدة على العديد من الصناعات ، مثل التجارة الإلكترونية ووسائل التواصل الاجتماعي والخدمات المالية. يمكن أن تتسبب عمليات الاحتيال في خسارة كبيرة للشركات والمستهلكين. أفاد المستهلكون الأمريكيون أنهم خسروا أكثر من 5.8 مليار دولار بسبب عمليات الاحتيال في عام 2021 ، بزيادة أكثر من 70٪ عن عام 2020. تم استخدام العديد من الأساليب لاكتشاف المحتالين - على سبيل المثال لا الحصر ، عوامل التصفية المستندة إلى القواعد واكتشاف الأخطاء ونماذج التعلم الآلي.

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

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

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

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

لمساعدة المطورين في تطبيق GNNs على اكتشاف الاحتيال في الوقت الفعلي ، يوضح هذا المنشور كيفية الاستخدام أمازون نبتون, الأمازون SageMaker، و مكتبة الرسم البياني العميق (DGL)، من بين خدمات AWS الأخرى ، لإنشاء حل شامل للكشف عن الاحتيال في الوقت الفعلي باستخدام نماذج GNN.

نحن نركز على أربع مهام:

  • معالجة مجموعة بيانات المعاملات المجدولة في مجموعة بيانات الرسم البياني غير المتجانسة
  • تدريب نموذج GNN باستخدام SageMaker
  • نشر نماذج GNN المدربة كنقطة نهاية SageMaker
  • إظهار الاستدلال في الوقت الحقيقي للمعاملات الواردة

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

يمكن أيضًا للشركات التي تبحث عن خدمة AWS AI مُدارة بالكامل للكشف عن الاحتيال استخدامها كاشف احتيال الأمازون، مما يجعل من السهل تحديد الأنشطة الاحتيالية المحتملة عبر الإنترنت ، مثل إنشاء حسابات وهمية أو الاحتيال في الدفع عبر الإنترنت.

حل نظرة عامة

يحتوي هذا الحل على جزئين رئيسيين.

الجزء الأول عبارة عن خط أنابيب يعالج البيانات ، ويدرب نماذج GNN ، وينشر النماذج المدربة. يستخدم غراء AWS لمعالجة بيانات المعاملة ، وحفظ البيانات المعالجة لكليهما أمازون نبتون و خدمة تخزين أمازون البسيطة (أمازون S3). بعد ذلك ، يتم تشغيل وظيفة تدريب SageMaker لتدريب نموذج GNN على البيانات المحفوظة في Amazon S3 للتنبؤ بما إذا كانت المعاملة احتيالية. يتم حفظ النموذج المدرب إلى جانب الأصول الأخرى مرة أخرى في Amazon S3 عند الانتهاء من مهمة التدريب. أخيرًا ، يتم نشر النموذج المحفوظ كنقطة نهاية SageMaker. يتم تنظيم خط الأنابيب بواسطة وظائف خطوة AWS، كما هو موضح في الشكل التالي.

يقوم الجزء الثاني من الحل بتنفيذ الكشف عن المعاملات الاحتيالية في الوقت الفعلي. يبدأ من RESTful API الذي يستعلم عن قاعدة بيانات الرسم البياني في Neptune لاستخراج الرسم البياني الفرعي المتعلق بمعاملة واردة. كما أن لديها بوابة ويب يمكنها محاكاة الأنشطة التجارية ، وإنشاء معاملات عبر الإنترنت مع المعاملات الاحتيالية والشرعية. توفر بوابة الويب تصورًا حيًا لاكتشاف الاحتيال. يستخدم هذا الجزء الأمازون CloudFront, تضخيم AWS, أوس أبسينك, بوابة أمازون APIو Step Functions و أمازون دوكومنت دي بي لبناء تطبيق الويب بسرعة. يوضح الرسم البياني التالي عملية الاستدلال في الوقت الفعلي وبوابة الويب.

تنفيذ هذا الحل ، جنبا إلى جنب مع تكوين سحابة AWS القالب الذي يمكنه تشغيل البنية في حساب AWS الخاص بك ، متاح للجمهور من خلال ما يلي جيثب ريبو.

معالجة البيانات

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

يستخدم هذا الحل نفس مجموعة البيانات ، ملف مجموعة بيانات الاحتيال IEEE-CIS، كالمنشور السابق كشف الاحتيال في الشبكات غير المتجانسة باستخدام Amazon SageMaker ومكتبة الرسم البياني العميق. لذلك ، فإن المبدأ الأساسي لعملية البيانات هو نفسه. باختصار ، تتضمن مجموعة بيانات الاحتيال جدول المعاملات وجدول الهويات ، الذي يحتوي على ما يقرب من 500,000 سجل معاملات مجهولة المصدر إلى جانب المعلومات السياقية (على سبيل المثال ، الأجهزة المستخدمة في المعاملات). تحتوي بعض المعاملات على ملصق ثنائي ، يشير إلى ما إذا كانت المعاملة احتيالية. مهمتنا هي التنبؤ بالمعاملات غير المصنفة التي تعتبر احتيالية وأيها مشروعة.

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

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

الكود المستخدم في هذا الحل متاح في src/scripts/glue-etl.py. يمكنك أيضًا تجربة معالجة البيانات من خلال دفتر Jupyter src/sagemaker/01.FD_SL_Process_IEEE-CIS_Dataset.ipynb.

بدلاً من معالجة البيانات يدويًا ، كما حدث في المنشور السابق ، يستخدم هذا الحل خط أنابيب أوتوماتيكيًا بالكامل يتم تنظيمه بواسطة Step Functions و AWS Glue الذي يدعم معالجة مجموعات البيانات الضخمة بالتوازي عبر Apache Spark. تمت كتابة سير عمل وظائف الخطوة مجموعة تطوير سحابة AWS (AWS CDK). ما يلي هو أ مقتطف الشفرة لإنشاء سير العمل هذا:

import { LambdaInvoke, GlueStartJobRun } from 'aws-cdk-lib/aws-stepfunctions-tasks';
    
    const parametersNormalizeTask = new LambdaInvoke(this, 'Parameters normalize', {
      lambdaFunction: parametersNormalizeFn,
      integrationPattern: IntegrationPattern.REQUEST_RESPONSE,
    });
    
    ...
    
    const dataProcessTask = new GlueStartJobRun(this, 'Data Process', {
      integrationPattern: IntegrationPattern.RUN_JOB,
      glueJobName: etlConstruct.jobName,
      timeout: Duration.hours(5),
      resultPath: '$.dataProcessOutput',
    });
    
    ...    
    
    const definition = parametersNormalizeTask
      .next(dataIngestTask)
      .next(dataCatalogCrawlerTask)
      .next(dataProcessTask)
      .next(hyperParaTask)
      .next(trainingJobTask)
      .next(runLoadGraphDataTask)
      .next(modelRepackagingTask)
      .next(createModelTask)
      .next(createEndpointConfigTask)
      .next(checkEndpointTask)
      .next(endpointChoice);

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

from neptune_python_utils.endpoints import Endpoints
from neptune_python_utils.bulkload import BulkLoad

...

bulkload = BulkLoad(
        source=targetDataPath,
        endpoints=endpoints,
        role=args.neptune_iam_role_arn,
        region=args.region,
        update_single_cardinality_properties=True,
        fail_on_error=True)
        
load_status = bulkload.load_async()
status, json = load_status.status(details=True, errors=True)
load_status.wait()

تدريب نموذج GNN

بعد حفظ بيانات الرسم البياني لتدريب النموذج في Amazon S3 ، أ وظيفة تدريب SageMaker، الذي يتم فرض رسوم عليه فقط عند تشغيل وظيفة التدريب ، يتم تشغيله لبدء عملية تدريب نموذج GNN في وضع إحضار الحاوية الخاصة بك (BYOC). يسمح لك بتعبئة البرامج النصية للتدريب النموذجي والتبعيات في صورة Docker ، والتي تستخدمها لإنشاء مثيلات تدريب SageMaker. يمكن أن توفر طريقة BYOC جهدًا كبيرًا في إعداد بيئة التدريب. في src/sagemaker/02.FD_SL_Build_Training_Container_Test_Local.ipynb، يمكنك العثور على تفاصيل تدريب نموذج GNN.

صورة عامل ميناء

الجزء الأول من ملف دفتر ملاحظات Jupyter هو إنشاء صورة Docker التدريبية (انظر مقتطف الشفرة التالي):

*!* aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 763104351884.dkr.ecr.us-east-1.amazonaws.com
image_name *=* 'fraud-detection-with-gnn-on-dgl/training'
*!* docker build -t $image_name ./FD_SL_DGL/gnn_fraud_detection_dgl

استخدمنا صورة تستند إلى PyTorch لتدريب النموذج. يتم تثبيت مكتبة الرسم البياني العميق (DGL) والاعتمادات الأخرى عند إنشاء صورة Docker. رمز نموذج GNN في ملف src/sagemaker/FD_SL_DGL/gnn_fraud_detection_dgl يتم نسخ المجلد إلى الصورة أيضًا.

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

معلمات هايبر

لتدريب GNN ، نحتاج إلى تحديد عدد قليل من المعلمات الفائقة قبل عملية التدريب ، مثل أسماء ملفات الرسم البياني الذي تم إنشاؤه وعدد طبقات نماذج GNN وعهود التدريب والمحسِّن ومعلمات التحسين والمزيد. انظر التعليمات البرمجية التالية لمجموعة فرعية من التكوينات:

edges *=* ","*.*join(map(*lambda* x: x*.*split("/")[*-*1], [file *for* file *in* processed_files *if* "relation" *in* file]))

params *=* {'nodes' : 'features.csv',
          'edges': edges,
          'labels': 'tags.csv',
          'embedding-size': 64,
          'n-layers': 2,
          'n-epochs': 10,
          'optimizer': 'adam',
          'lr': 1e-2}

لمزيد من المعلومات حول جميع المعلمات التشعبية وقيمها الافتراضية ، راجع estimator_fns.py في ال src/sagemaker/FD_SL_DGL/gnn_fraud_detection_dgl المجلد.

تدريب نموذجي مع SageMaker

بعد إنشاء صورة Docker الحاوية المخصصة ، نستخدم البيانات المعالجة مسبقًا لتدريب نموذج GNN الخاص بنا باستخدام المعلمات الفائقة التي حددناها. تستخدم وظيفة التدريب DGL ، مع PyTorch كإطار عمل التعلم العميق للخلفية ، لبناء وتدريب GNN. يجعل SageMaker من السهل تدريب نماذج GNN باستخدام صورة Docker المخصصة ، والتي تعد وسيطة إدخال لمقدر SageMaker. لمزيد من المعلومات حول تدريب GNNs باستخدام DGL على SageMaker ، راجع تدريب شبكة الرسم البياني العميق.

يستخدم SageMaker Python SDK ملفات مقدر لتلخيص التدريب على SageMaker ، الذي يدير حاويات Docker المخصصة المتوافقة مع SageMaker ، مما يتيح لك تشغيل خوارزميات ML الخاصة بك باستخدام SageMaker Python SDK. يوضح مقتطف الشفرة التالي تدريب النموذج باستخدام SageMaker (إما في بيئة محلية أو في حالات سحابية):

from sagemaker.estimator import Estimator
from time import strftime, gmtime
from sagemaker.local import LocalSession

localSageMakerSession = LocalSession(boto_session=boto3.session.Session(region_name=current_region))
estimator = Estimator(image_uri=image_name,
                      role=sagemaker_exec_role,
                      instance_count=1,
                      instance_type='local',
                      hyperparameters=params,
                      output_path=output_path,
                      sagemaker_session=localSageMakerSession)

training_job_name = "{}-{}".format('GNN-FD-SL-DGL-Train', strftime("%Y-%m-%d-%H-%M-%S", gmtime()))
print(training_job_name)

estimator.fit({'train': processed_data}, job_name=training_job_name)

بعد التدريب ، يتم عرض أداء نموذج GNN في مجموعة الاختبار مثل النواتج التالية. نموذج RGCN يمكن أن يحقق حوالي 0.87 AUC وأكثر من 95٪ دقة. للمقارنة بين طراز RGCN ونماذج ML الأخرى ، يرجى الرجوع إلى النتائج قسم منشور المدونة السابق لمزيد من التفاصيل.

Epoch 00099 | Time(s) 7.9413 | Loss 0.1023 | f1 0.3745
Metrics
Confusion Matrix:
                        labels positive labels negative
    predicted positive  4343            576
    predicted negative  13494           454019

    f1: 0.3817, precision: 0.8829, recall: 0.2435, acc: 0.9702, roc: 0.8704, pr: 0.4782, ap: 0.4782

Finished Model training

عند الانتهاء من تدريب النموذج ، يقوم SageMaker بحزم النموذج المدرب جنبًا إلى جنب مع الأصول الأخرى ، بما في ذلك عمليات دمج العقدة المدربة ، في ملف ZIP ثم تحميله إلى موقع S3 محدد. بعد ذلك ، نناقش نشر النموذج المدرب للكشف عن الاحتيال في الوقت الفعلي.

نشر نموذج GNN

يجعل SageMaker نشر نماذج ML المدربة أمرًا بسيطًا. في هذه المرحلة ، نستخدم فئة SageMaker PyTorchModel لنشر النموذج المدرب ، لأن نموذج DGL الخاص بنا يعتمد على PyTorch كإطار عمل للخلفية. يمكنك العثور على رمز النشر في ملف src/sagemaker/03.FD_SL_Endpoint_Deployment.ipynb ملف.

إلى جانب ملف النموذج والأصول المدربة ، يتطلب SageMaker ملف نقطة دخول لنشر نموذج مخصص. يتم تشغيل ملف نقطة الإدخال وتخزينه في ذاكرة مثيل نقطة نهاية الاستدلال للرد على طلب الاستدلال. في حالتنا ، ملف نقطة الدخول هو fd_sl_deployment_entry_point.py ملف في src/sagemaker/FD_SL_DGL/code المجلد ، والذي يؤدي أربع وظائف رئيسية:

  • تلقي الطلبات وتحليل محتويات الطلبات للحصول على العقد التي سيتم توقعها والبيانات المرتبطة بها
  • قم بتحويل البيانات إلى رسم بياني غير متجانس DGL كمدخل لنموذج RGCN
  • قم بإجراء الاستدلال في الوقت الفعلي عبر نموذج RGCN المدرب
  • إعادة نتائج التوقع للطالب

باتباع اصطلاحات SageMaker ، يتم تنفيذ أول وظيفتين في ملف input_fn طريقة. انظر إلى الكود التالي (للتبسيط ، نحذف بعض كود التعليق):

def input_fn(request_body, request_content_type='application/json'):

    # --------------------- receive request ------------------------------------------------ #
    input_data = json.loads(request_body)

    subgraph_dict = input_data['graph']
    n_feats = input_data['n_feats']
    target_id = input_data['target_id']

    graph, new_n_feats, new_pred_target_id = recreate_graph_data(subgraph_dict, n_feats, target_id)

    return (graph, new_n_feats, new_pred_target_id)

ثم يتم تمرير الرسم البياني والميزات DGL المُنشأة إلى ملف predict_fn طريقة لتحقيق الوظيفة الثالثة. predict_fn يأخذ وسيطتي إدخال: مخرجات input_fn والنموذج المدرب. انظر الكود التالي:

def predict_fn(input_data, model):

    # ---------------------  Inference ------------------------------------------------ #
    graph, new_n_feats, new_pred_target_id = input_data

    with th.no_grad():
        logits = model(graph, new_n_feats)
        res = logits[new_pred_target_id].cpu().detach().numpy()

    return res[1]

النموذج المستخدم في perdict_fn تم إنشاؤها بواسطة model_fn الطريقة عندما يتم استدعاء نقطة النهاية في المرة الأولى. الوظيفة model_fn يقوم بتحميل ملف النموذج المحفوظ والأصول المرتبطة به من ملف model_dir وسيطة ومجلد نموذج SageMaker. انظر الكود التالي:

def model_fn(model_dir):

    # ------------------ Loading model -------------------
    ntype_dict, etypes, in_size, hidden_size, out_size, n_layers, embedding_size = 
    initialize_arguments(os.path.join(BASE_PATH, 'metadata.pkl'))

    rgcn_model = HeteroRGCN(ntype_dict, etypes, in_size, hidden_size, out_size, n_layers, embedding_size)

    stat_dict = th.load('model.pth')

    rgcn_model.load_state_dict(stat_dict)

    return rgcn_model

خرج ملف predict_fn الطريقة هي قائمة من رقمين ، تشير إلى سجلات للفئة 0 والفئة 1 ، حيث يعني 0 شرعي ويعني 1 احتيالي. يأخذ SageMaker هذه القائمة ويمررها إلى طريقة داخلية تسمى output_fn لإكمال الوظيفة النهائية.

لنشر نموذج GNN الخاص بنا ، قمنا أولاً بلف نموذج GNN في فئة SageMaker PyTorchModel مع ملف نقطة الإدخال والمعلمات الأخرى (مسار ملف ZIP المحفوظ ، وإصدار إطار عمل PyTorch ، وإصدار Python ، وما إلى ذلك). ثم نسمي طريقة النشر الخاصة بها مع إعدادات المثيل. انظر الكود التالي:

env = {
    'SAGEMAKER_MODEL_SERVER_WORKERS': '1'
}

print(f'Use model {repackged_model_path}')

sagemakerSession = sm.session.Session(boto3.session.Session(region_name=current_region))
fd_sl_model = PyTorchModel(model_data=repackged_model_path, 
                           role=sagemaker_exec_role,
                           entry_point='./FD_SL_DGL/code/fd_sl_deployment_entry_point.py',
                           framework_version='1.6.0',
                           py_version='py3',
                           predictor_cls=JSONPredictor,
                           env=env,
                           sagemaker_session=sagemakerSession)
                           
fd_sl_predictor *=* fd_sl_model*.*deploy(instance_type*=*'ml.c5.4xlarge',
                                     initial_instance_count*=*1,)

توضح الإجراءات ومقتطفات التعليمات البرمجية السابقة كيفية نشر نموذج GNN الخاص بك كنقطة نهاية للاستدلال عبر الإنترنت من دفتر ملاحظات Jupyter. ومع ذلك ، بالنسبة للإنتاج ، نوصي باستخدام خط أنابيب MLOps المذكور سابقًا والمنسق بواسطة وظائف الخطوة لسير العمل بأكمله ، بما في ذلك معالجة البيانات ، وتدريب النموذج ، ونشر نقطة نهاية للاستدلال. يتم تنفيذ خط الأنابيب بالكامل بواسطة AWS CDK استمارتنا، والتي يمكن تكرارها بسهولة في مناطق وحسابات مختلفة.

الاستدلال في الوقت الحقيقي

عند وصول معاملة جديدة ، لإجراء التنبؤ في الوقت الفعلي ، نحتاج إلى إكمال أربع خطوات:

  1. العقدة وإدخال الحافة - استخرج معلومات المعاملة مثل معرف المعاملة و ProductCD كعقد وحواف ، وأدخل العقد الجديدة في بيانات الرسم البياني الموجودة المخزنة في قاعدة بيانات Neptune.
  2. استخراج الرسم البياني - اضبط عقدة المعاملة التي سيتم التنبؤ بها كعقدة مركزية ، واستخرج الرسم البياني الفرعي n-hop وفقًا لمتطلبات إدخال نموذج GNN.
  3. ميزة استخراج - بالنسبة للعقد والحواف في الرسم البياني الفرعي ، قم باستخراج الميزات المرتبطة بها.
  4. اتصل بنقطة نهاية الاستنتاج - قم بتعبئة الرسم البياني الفرعي والميزات في محتويات طلب ، ثم أرسل الطلب إلى نقطة نهاية الاستدلال.

في هذا الحل ، نقوم بتنفيذ RESTful API لتحقيق التنبؤ بالاحتيال في الوقت الفعلي الموضح في الخطوات السابقة. راجع الكود الزائف التالي للتنبؤات في الوقت الفعلي. التنفيذ الكامل في ملف شفرة المصدر الكامل.

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

def handler(event, context):
    
    graph_input = GraphModelClient(endpoints)
    
    # Step 1: node and edge insertion
    trans_dict, identity_dict, target_id, transaction_value_cols, union_li_cols = 
        load_data_from_event(event, transactions_id_cols, transactions_cat_cols, dummied_col)
    graph_input.insert_new_transaction_vertex_and_edge(trans_dict, identity_dict , target_id, vertex_type = 'Transaction')
    
    
    # Setp 2: subgraph extraction
    subgraph_dict, transaction_embed_value_dict = 
        graph_input.query_target_subgraph(target_id, trans_dict, transaction_value_cols, union_li_cols, dummied_col)
    

    # Step 3 & 4: feature extraction & call the inference endpoint
    transaction_id = int(target_id[(target_id.find('-')+1):])
    pred_prob = invoke_endpoint_with_idx(endpointname = ENDPOINT_NAME, target_id = transaction_id, subgraph_dict = subgraph_dict, n_feats = transaction_embed_value_dict)
       
    function_res = {
                    'id': event['transaction_data'][0]['TransactionID'],
                    'flag': pred_prob > MODEL_BTW,
                    'pred_prob': pred_prob
                    }
       
    return function_res

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

في الوضع التحويلي ، تتعايش العقد والحواف المتوقعة مع العقد والحواف المسمى أثناء التدريب. تحددها النماذج قبل الاستدلال ، ويمكن استنتاجها في التدريب. يتم تدريب النماذج في الوضع الاستقرائي على الرسم البياني التدريبي ولكنها تحتاج إلى التنبؤ بالعقد غير المرئية (تلك الموجودة في دوائر منقطة حمراء على اليمين) مع جيرانها المرتبطين بها ، والتي قد تكون عُقدًا جديدة ، مثل عقدة المثلث الرمادي على اليمين.

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

بالإضافة إلى ذلك ، يوفر هذا الحل بوابة ويب (كما هو موضح في لقطة الشاشة التالية) لإظهار التنبؤات الاحتيالية في الوقت الفعلي من وجهة نظر مشغلي الأعمال. يمكنه إنشاء المعاملات المحاكاة عبر الإنترنت ، وتوفير تصور حي لمعلومات المعاملات الاحتيالية المكتشفة.

تنظيف

عندما تنتهي من استكشاف الحل ، يمكنك ذلك تنظيف الموارد لتجنب تكبد الرسوم.

وفي الختام

في هذا المنشور ، أوضحنا كيفية إنشاء حل للكشف عن الاحتيال في الوقت الفعلي قائم على GNN باستخدام SageMaker و Neptune و DGL. هذا الحل له ثلاث مزايا رئيسية:

  • لديه أداء جيد من حيث دقة التنبؤ ومقاييس الجامعة الأمريكية بالقاهرة
  • يمكنه إجراء الاستدلال في الوقت الفعلي عبر خط أنابيب MLOps المتدفق ونقاط نهاية SageMaker
  • يقوم بأتمتة عملية النشر الإجمالية باستخدام نموذج CloudFormation المقدم بحيث يمكن للمطورين المهتمين اختبار هذا الحل بسهولة باستخدام البيانات المخصصة في حساباتهم

لمزيد من التفاصيل حول الحل ، راجع جيثب ريبو.

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


عن المؤلفين

جيان تشانغ هو عالم تطبيقي يستخدم تقنيات التعلم الآلي لمساعدة العملاء في حل المشكلات المختلفة ، مثل اكتشاف الاحتيال وإنشاء صور الزخرفة والمزيد. لقد نجح في تطوير التعلم الآلي القائم على الرسم البياني ، وخاصة الشبكة العصبية للرسم البياني ، وحلول للعملاء في الصين والولايات المتحدة الأمريكية وسنغافورة. بصفته منيرًا لقدرات الرسم البياني في AWS ، قدم Zhang العديد من العروض التقديمية العامة حول GNN ومكتبة الرسم البياني العميق (DGL) و Amazon Neptune وخدمات AWS الأخرى.

مينجكسين تشو هو مدير Solutions Architects في AWS ، مع التركيز على تصميم حلول AWS القابلة لإعادة الاستخدام وتطويرها. شارك في تطوير البرمجيات لسنوات عديدة وكان مسؤولاً عن العديد من فرق بدء التشغيل من مختلف الأحجام. وهو أيضًا مدافع عن البرامج مفتوحة المصدر وكان Eclipse Committer.

Haozhu وانغ هو عالم أبحاث في Amazon ML Solutions Lab ، حيث شارك في قيادة قطاع التعلم المعزز. يساعد العملاء على بناء حلول متقدمة للتعلم الآلي من خلال أحدث الأبحاث حول تعلم الرسم البياني ومعالجة اللغة الطبيعية والتعلم المعزز و AutoML. حصل Haozhu على درجة الدكتوراه في الهندسة الكهربائية وهندسة الحاسبات من جامعة ميشيغان.

بقعة_صورة

أحدث المعلومات الاستخباراتية

بقعة_صورة