Νοημοσύνη δεδομένων Πλάτωνα.
Κάθετη Αναζήτηση & Αι.

Δημιουργήστε μια λύση ανίχνευσης απάτης σε πραγματικό χρόνο που βασίζεται σε GNN χρησιμοποιώντας το Amazon SageMaker, το Amazon Neptune και τη Βιβλιοθήκη Deep Graph

Ημερομηνία:

Οι δόλιες δραστηριότητες επηρεάζουν σοβαρά πολλούς κλάδους, όπως το ηλεκτρονικό εμπόριο, τα μέσα κοινωνικής δικτύωσης και τις χρηματοοικονομικές υπηρεσίες. Οι απάτες θα μπορούσαν να προκαλέσουν σημαντική ζημία για τις επιχειρήσεις και τους καταναλωτές. Οι Αμερικανοί καταναλωτές ανέφεραν ότι έχασαν περισσότερα από 5.8 δισεκατομμύρια δολάρια λόγω απάτης το 2021, αύξηση άνω του 70% σε σχέση με το 2020. Πολλές τεχνικές έχουν χρησιμοποιηθεί για τον εντοπισμό απατεώνων—φίλτρα που βασίζονται σε κανόνες, ανίχνευση ανωμαλιών και μοντέλα μηχανικής μάθησης (ML), για να αναφέρουμε μερικές.

Στα δεδομένα του πραγματικού κόσμου, οι οντότητες συχνά περιλαμβάνουν πλούσιες σχέσεις με άλλες οντότητες. Μια τέτοια δομή γραφήματος μπορεί να παρέχει πολύτιμες πληροφορίες για την ανίχνευση ανωμαλιών. Για παράδειγμα, στο παρακάτω σχήμα, οι χρήστες συνδέονται μέσω κοινόχρηστων οντοτήτων, όπως αναγνωριστικά Wi-Fi, φυσικές τοποθεσίες και αριθμοί τηλεφώνου. Λόγω του μεγάλου αριθμού μοναδικών τιμών αυτών των οντοτήτων, όπως οι αριθμοί τηλεφώνου, είναι δύσκολο να χρησιμοποιηθούν στα παραδοσιακά μοντέλα που βασίζονται σε χαρακτηριστικά—για παράδειγμα, η κωδικοποίηση με ένα μόνο τρόπο όλων των τηλεφωνικών αριθμών δεν θα ήταν βιώσιμη. Ωστόσο, τέτοιες σχέσεις θα μπορούσαν να βοηθήσουν στην πρόβλεψη εάν ένας χρήστης είναι απατεώνας. Εάν ένας χρήστης έχει μοιραστεί πολλές οντότητες με έναν γνωστό απατεώνα, ο χρήστης είναι πιο πιθανό να είναι απατεώνας.

Πρόσφατα, το νευρωνικό δίκτυο γραφημάτων (GNN) έχει γίνει μια δημοφιλής μέθοδος για τον εντοπισμό απάτης. Τα μοντέλα GNN μπορούν να συνδυάσουν τόσο τη δομή του γραφήματος όσο και τα χαρακτηριστικά των κόμβων ή των ακμών, όπως χρήστες ή συναλλαγές, για να μάθουν ουσιαστικές αναπαραστάσεις για να διακρίνουν κακόβουλους χρήστες και συμβάντα από τα νόμιμα. Αυτή η ικανότητα είναι ζωτικής σημασίας για τον εντοπισμό απατών όπου οι απατεώνες συνεργάζονται για να κρύψουν τα ανώμαλα χαρακτηριστικά τους αλλά αφήνουν κάποια ίχνη σχέσεων.

Οι τρέχουσες λύσεις GNN βασίζονται κυρίως στην εκπαίδευση χωρίς σύνδεση και τη λειτουργία συμπερασμάτων, που εντοπίζουν απατεώνες μετά από κακόβουλα συμβάντα και απώλειες. Ωστόσο, η σύλληψη δόλιων χρηστών και δραστηριοτήτων σε πραγματικό χρόνο είναι ζωτικής σημασίας για την αποφυγή απωλειών. Αυτό ισχύει ιδιαίτερα σε επιχειρηματικές περιπτώσεις όπου υπάρχει μόνο μία ευκαιρία να αποτραπούν δόλιες δραστηριότητες. Για παράδειγμα, σε ορισμένες πλατφόρμες ηλεκτρονικού εμπορίου, η εγγραφή λογαριασμού είναι ανοιχτή. Οι απατεώνες μπορούν να συμπεριφέρονται κακόβουλα μόνο μία φορά με έναν λογαριασμό και να μην χρησιμοποιήσουν ποτέ ξανά τον ίδιο λογαριασμό.

Η πρόβλεψη των απατεώνων σε πραγματικό χρόνο είναι σημαντική. Η οικοδόμηση μιας τέτοιας λύσης, ωστόσο, είναι πρόκληση. Επειδή τα GNN εξακολουθούν να είναι νέα στον κλάδο, υπάρχουν περιορισμένοι διαδικτυακοί πόροι για τη μετατροπή μοντέλων GNN από παρτίδα σε υπηρεσία πραγματικού χρόνου. Επιπλέον, είναι δύσκολο να κατασκευαστεί ένας αγωγός δεδομένων ροής που μπορεί να τροφοδοτήσει εισερχόμενα συμβάντα σε ένα API υπηρεσίας GNN σε πραγματικό χρόνο. Εξ όσων γνωρίζουν οι συγγραφείς, δεν διατίθενται αρχιτεκτονικές και παραδείγματα αναφοράς για λύσεις συμπερασμάτων σε πραγματικό χρόνο που βασίζονται σε GNN από τη στιγμή που γράφεται αυτό το άρθρο.

Για να βοηθήσουμε τους προγραμματιστές να εφαρμόσουν GNN στον εντοπισμό απάτης σε πραγματικό χρόνο, αυτή η ανάρτηση δείχνει πώς να τα χρησιμοποιήσετε Amazon Ποσειδώνας, Amazon Sage Maker, και το Βιβλιοθήκη Deep Graph (DGL), μεταξύ άλλων υπηρεσιών AWS, για την κατασκευή μιας ολοκληρωμένης λύσης για ανίχνευση απάτης σε πραγματικό χρόνο χρησιμοποιώντας μοντέλα GNN.

Εστιάζουμε σε τέσσερις εργασίες:

  • Επεξεργασία ενός πίνακα δεδομένων συναλλαγών σε ένα ετερογενές σύνολο δεδομένων γραφήματος
  • Εκπαίδευση μοντέλου GNN χρησιμοποιώντας το SageMaker
  • Ανάπτυξη των εκπαιδευμένων μοντέλων GNN ως τελικό σημείο του SageMaker
  • Επίδειξη συμπερασμάτων σε πραγματικό χρόνο για εισερχόμενες συναλλαγές

Αυτή η ανάρτηση επεκτείνει την προηγούμενη εργασία στο Εντοπισμός απάτης σε ετερογενή δίκτυα χρησιμοποιώντας το Amazon SageMaker και το Deep Graph Library, το οποίο εστιάζει στις δύο πρώτες εργασίες. Μπορείτε να ανατρέξετε σε αυτήν την ανάρτηση για περισσότερες λεπτομέρειες σχετικά με ετερογενή γραφήματα, GNN και ημι-εποπτευόμενη εκπαίδευση των GNN.

Οι επιχειρήσεις που αναζητούν μια πλήρως διαχειριζόμενη υπηρεσία AWS AI για ανίχνευση απάτης μπορούν επίσης να χρησιμοποιήσουν Ανιχνευτής απάτης Amazon, γεγονός που καθιστά εύκολο τον εντοπισμό δυνητικά δόλιων διαδικτυακών δραστηριοτήτων, όπως η δημιουργία ψεύτικων λογαριασμών ή η ηλεκτρονική απάτη πληρωμών.

Επισκόπηση λύσεων

Αυτή η λύση περιέχει δύο κύρια μέρη.

Το πρώτο μέρος είναι ένας αγωγός που επεξεργάζεται τα δεδομένα, εκπαιδεύει μοντέλα GNN και αναπτύσσει τα εκπαιδευμένα μοντέλα. Χρησιμοποιεί Κόλλα AWS για την επεξεργασία των δεδομένων συναλλαγής και αποθηκεύει τα επεξεργασμένα δεδομένα και στα δύο Amazon Ποσειδώνας και Απλή υπηρεσία αποθήκευσης Amazon (Amazon S3). Στη συνέχεια, ενεργοποιείται μια εργασία εκπαίδευσης του SageMaker για να εκπαιδεύσει ένα μοντέλο GNN στα δεδομένα που είναι αποθηκευμένα στο Amazon S3 για να προβλέψει εάν μια συναλλαγή είναι δόλια. Το εκπαιδευμένο μοντέλο μαζί με άλλα περιουσιακά στοιχεία αποθηκεύονται πίσω στο Amazon S3 μετά την ολοκλήρωση της εργασίας εκπαίδευσης. Τέλος, το αποθηκευμένο μοντέλο αναπτύσσεται ως τελικό σημείο του SageMaker. Ο αγωγός ενορχηστρώνεται από Λειτουργίες βημάτων AWS, όπως φαίνεται στο παρακάτω σχήμα.

Το δεύτερο μέρος της λύσης υλοποιεί τον εντοπισμό δόλιας συναλλαγής σε πραγματικό χρόνο. Ξεκινά από ένα RESTful API που ρωτά τη βάση δεδομένων γραφήματος στον Neptune για να εξαγάγει το υπογράφημα που σχετίζεται με μια εισερχόμενη συναλλαγή. Διαθέτει επίσης μια διαδικτυακή πύλη που μπορεί να προσομοιώσει επιχειρηματικές δραστηριότητες, δημιουργώντας διαδικτυακές συναλλαγές τόσο με δόλιες όσο και με νόμιμες. Η διαδικτυακή πύλη παρέχει ζωντανή απεικόνιση του εντοπισμού απάτης. Αυτό το μέρος χρησιμοποιεί Amazon CloudFront, Ενίσχυση AWS, AWS AppSync, Amazon API Gateway, Λειτουργίες βημάτων και Amazon DocumentDB για τη γρήγορη κατασκευή της διαδικτυακής εφαρμογής. Το παρακάτω διάγραμμα απεικονίζει τη διαδικασία συμπερασμάτων σε πραγματικό χρόνο και την δικτυακή πύλη.

Η εφαρμογή αυτής της λύσης, μαζί με ένα AWS CloudFormation Το πρότυπο που μπορεί να εκκινήσει την αρχιτεκτονική στον λογαριασμό σας AWS, είναι δημόσια διαθέσιμο μέσω των παρακάτω GitHub repo.

Επεξεργασία δεδομένων

Σε αυτήν την ενότητα, περιγράφουμε εν συντομία πώς να επεξεργαστούμε ένα παράδειγμα δεδομένων και να το μετατρέψουμε από ακατέργαστους πίνακες σε ένα γράφημα με σχέσεις που προσδιορίζονται μεταξύ διαφορετικών στηλών.

Αυτή η λύση χρησιμοποιεί το ίδιο σύνολο δεδομένων, το Δεδομένα απάτης IEEE-CIS, όπως και η προηγούμενη ανάρτηση Εντοπισμός απάτης σε ετερογενή δίκτυα χρησιμοποιώντας το Amazon SageMaker και το Deep Graph Library. Επομένως, η βασική αρχή της διαδικασίας δεδομένων είναι η ίδια. Εν συντομία, το σύνολο δεδομένων απάτης περιλαμβάνει έναν πίνακα συναλλαγών και έναν πίνακα ταυτοτήτων, με σχεδόν 500,000 ανώνυμες εγγραφές συναλλαγών μαζί με πληροφορίες συμφραζομένων (για παράδειγμα, συσκευές που χρησιμοποιούνται σε συναλλαγές). Ορισμένες συναλλαγές έχουν μια δυαδική ετικέτα, η οποία υποδεικνύει εάν μια συναλλαγή είναι δόλια. Καθήκον μας είναι να προβλέψουμε ποιες συναλλαγές χωρίς ετικέτα είναι δόλιες και ποιες νόμιμες.

Το παρακάτω σχήμα απεικονίζει τη γενική διαδικασία του τρόπου μετατροπής των πινάκων IEEE σε ένα ετερογενές γράφημα. Αρχικά εξάγουμε δύο στήλες από κάθε πίνακα. Μία στήλη είναι πάντα η στήλη ID συναλλαγής, όπου ορίζουμε κάθε μοναδικό TransactionID ως έναν κόμβο. Μια άλλη στήλη επιλέγεται από τις κατηγορικές στήλες, όπως οι στήλες ProductCD και id_03, όπου κάθε μοναδική κατηγορία ορίστηκε ως κόμβος. Εάν ένα TransactionID και μια μοναδική κατηγορία εμφανίζονται στην ίδια σειρά, τα συνδέουμε με ένα άκρο. Με αυτόν τον τρόπο, μετατρέπουμε δύο στήλες σε έναν πίνακα σε ένα διμερές. Στη συνέχεια συνδυάζουμε αυτά τα διμερή μαζί με τους κόμβους TransactionID, όπου οι ίδιοι κόμβοι TransactionID συγχωνεύονται σε έναν μοναδικό κόμβο. Μετά από αυτό το βήμα, έχουμε ένα ετερογενές γράφημα κατασκευασμένο από διμερή.

Για τις υπόλοιπες στήλες που δεν χρησιμοποιούνται για τη δημιουργία του γραφήματος, τις ενώνουμε μεταξύ τους ως χαρακτηριστικό των κόμβων TransactionID. Οι τιμές TransactionID που έχουν τις τιμές isFraud χρησιμοποιούνται ως ετικέτα για την εκπαίδευση μοντέλων. Με βάση αυτό το ετερογενές γράφημα, η εργασία μας γίνεται μια εργασία ταξινόμησης κόμβων των κόμβων TransactionID. Για περισσότερες λεπτομέρειες σχετικά με την προετοιμασία των δεδομένων γραφήματος για εκπαίδευση GNN, ανατρέξτε στο Εξαγωγή χαρακτηριστικών και Κατασκευάζοντας το γράφημα ενότητες της προηγούμενης ανάρτησης ιστολογίου.

Ο κώδικας που χρησιμοποιείται σε αυτήν τη λύση είναι διαθέσιμος στο src/scripts/glue-etl.py. Μπορείτε επίσης να πειραματιστείτε με την επεξεργασία δεδομένων μέσω του σημειωματάριου Jupyter src/sagemaker/01.FD_SL_Process_IEEE-CIS_Dataset.ipynb.

Αντί της μη αυτόματης επεξεργασίας των δεδομένων, όπως έγινε στην προηγούμενη ανάρτηση, αυτή η λύση χρησιμοποιεί μια πλήρως αυτόματη διοχέτευση ενορχηστρωμένη από Step Functions και AWS Glue που υποστηρίζει την παράλληλη επεξεργασία τεράστιων συνόλων δεδομένων μέσω του Apache Spark. Η ροή εργασίας Step Functions είναι γραμμένη Κιτ ανάπτυξης AWS Cloud (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, αυτή η ροή εργασίας φορτώνει επίσης τα δεδομένα γραφήματος στον Ποσειδώνα για τη διεξαγωγή συμπερασμάτων σε πραγματικό χρόνο αργότερα. Αυτή η διαδικασία φόρτωσης δεδομένων παρτίδας παρουσιάζεται στο ακόλουθο απόσπασμα κώδικα:

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 στη λειτουργία Bring Your Own Container (BYOC). Σας επιτρέπει να συσκευάζετε τα σενάρια εκπαίδευσης μοντέλων και τις εξαρτήσεις σας σε μια εικόνα Docker, την οποία χρησιμοποιεί για τη δημιουργία παρουσιών εκπαίδευσης του SageMaker. Η μέθοδος BYOC θα μπορούσε να εξοικονομήσει σημαντική προσπάθεια για τη δημιουργία του εκπαιδευτικού περιβάλλοντος. Σε src/sagemaker/02.FD_SL_Build_Training_Container_Test_Local.ipynb, μπορείτε να βρείτε λεπτομέρειες για την εκπαίδευση του μοντέλου GNN.

Εικόνα Docker

Το πρώτο μέρος του αρχείου σημειωματάριου 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 για την εκπαίδευση του μοντέλου. Η Βιβλιοθήκη Deep Graph (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 ως το backend πλαίσιο βαθιάς εκμάθησης, για την κατασκευή και την εκπαίδευση του GNN. Το SageMaker διευκολύνει την εκπαίδευση μοντέλων GNN με την προσαρμοσμένη εικόνα Docker, η οποία είναι ένα όρισμα εισαγωγής του εκτιμητή SageMaker. Για περισσότερες πληροφορίες σχετικά με την εκπαίδευση GNN με το DGL στο SageMaker, βλ Εκπαιδεύστε ένα δίκτυο Deep Graph.

Το SageMaker Python SDK χρησιμοποιεί Εκτιμητής για να ενσωματώσετε την εκπαίδευση στο SageMaker, το οποίο εκτελεί προσαρμοσμένα κοντέινερ Docker συμβατά με το SageMaker, επιτρέποντάς σας να εκτελέσετε τους δικούς σας αλγόριθμους ML χρησιμοποιώντας το SageMaker Python SDK. Το ακόλουθο απόσπασμα κώδικα δείχνει την εκπαίδευση του μοντέλου με το SageMaker (είτε σε τοπικό περιβάλλον είτε σε περιπτώσεις cloud):

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 Η μέθοδος είναι μια λίστα με δύο αριθμούς, που υποδεικνύουν τα logit για την κλάση 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 που ενορχηστρώθηκε από τις λειτουργίες Step για ολόκληρη τη ροή εργασίας, συμπεριλαμβανομένης της επεξεργασίας δεδομένων, της εκπαίδευσης του μοντέλου και της ανάπτυξης ενός τελικού σημείου συμπερασμάτων. Ολόκληρος ο αγωγός υλοποιείται από ένα AWS CDK εφαρμογή, το οποίο μπορεί εύκολα να αναπαραχθεί σε διαφορετικές Περιοχές και λογαριασμούς.

Συμπεράσματα σε πραγματικό χρόνο

Όταν φθάνει μια νέα συναλλαγή, για να εκτελέσουμε πρόβλεψη σε πραγματικό χρόνο, πρέπει να ολοκληρώσουμε τέσσερα βήματα:

  1. Εισαγωγή κόμβου και ακμής – Εξάγετε τις πληροφορίες της συναλλαγής, όπως το TransactionID και το ProductCD ως κόμβους και άκρες, και εισάγετε τους νέους κόμβους στα υπάρχοντα δεδομένα γραφήματος που είναι αποθηκευμένα στη βάση δεδομένων του Neptune.
  2. Εξαγωγή υπογραφών – Ορίστε τον προς πρόβλεψη κόμβο συναλλαγής ως κεντρικό κόμβο και εξάγετε ένα υπογράφημα n-hop σύμφωνα με τις απαιτήσεις εισόδου του μοντέλου GNN.
  3. Εξαγωγή χαρακτηριστικών – Για τους κόμβους και τις ακμές του υπογράφου, εξάγετε τα σχετικά χαρακτηριστικά τους.
  4. Καλέστε το τελικό σημείο συμπερασμάτων – Συσκευάστε το υπογράφημα και τις δυνατότητες στα περιεχόμενα ενός αιτήματος και, στη συνέχεια, στείλτε το αίτημα στο τελικό σημείο συμπερασμάτων.

Σε αυτή τη λύση, υλοποιούμε ένα RESTful API για την επίτευξη δόλιας πρόβλεψης σε πραγματικό χρόνο που περιγράφεται στα προηγούμενα βήματα. Δείτε τον παρακάτω ψευδοκώδικα για προβλέψεις σε πραγματικό χρόνο. Η πλήρης εφαρμογή βρίσκεται σε εξέλιξη το πλήρες αρχείο πηγαίου κώδικα.

Για πρόβλεψη σε πραγματικό χρόνο, τα τρία πρώτα βήματα απαιτούν χαμηλότερο λανθάνοντα χρόνο. Επομένως, μια βάση δεδομένων γραφήματος είναι η βέλτιστη επιλογή για αυτές τις εργασίες, ιδιαίτερα για την εξαγωγή υπογραφών, η οποία θα μπορούσε να επιτευχθεί αποτελεσματικά με ερωτήματα βάσης δεδομένων γραφημάτων. Οι υπογραμμισμένες συναρτήσεις που υποστηρίζουν τον ψευδοκώδικα βασίζονται στα ερωτήματα gremlin του Neptune.

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. Αυτή η λύση έχει τρία σημαντικά πλεονεκτήματα:

  • Έχει καλή απόδοση όσον αφορά την ακρίβεια πρόβλεψης και τις μετρήσεις AUC
  • Μπορεί να εκτελέσει συμπεράσματα σε πραγματικό χρόνο μέσω ροής MLOps pipeline και τελικών σημείων SageMaker
  • Αυτοματοποιεί τη συνολική διαδικασία ανάπτυξης με το παρεχόμενο πρότυπο CloudFormation, έτσι ώστε οι ενδιαφερόμενοι προγραμματιστές να μπορούν εύκολα να δοκιμάσουν αυτήν τη λύση με προσαρμοσμένα δεδομένα στον λογαριασμό τους

Για περισσότερες λεπτομέρειες σχετικά με τη λύση, ανατρέξτε στο GitHub repo.

Αφού αναπτύξετε αυτήν τη λύση, συνιστούμε να προσαρμόσετε τον κώδικα επεξεργασίας δεδομένων ώστε να ταιριάζει στη δική σας μορφή δεδομένων και να τροποποιήσετε τον μηχανισμό συμπερασμάτων σε πραγματικό χρόνο, διατηρώντας αμετάβλητο το μοντέλο GNN. Σημειώστε ότι χωρίζουμε το συμπέρασμα σε πραγματικό χρόνο σε τέσσερα βήματα χωρίς περαιτέρω βελτιστοποίηση του λανθάνοντος χρόνου. Αυτά τα τέσσερα βήματα χρειάζονται λίγα δευτερόλεπτα για να λάβετε μια πρόβλεψη για το σύνολο δεδομένων επίδειξης. Πιστεύουμε ότι η βελτιστοποίηση του σχεδίου σχήματος δεδομένων γραφήματος Neptune και των ερωτημάτων για την εξαγωγή υπογραφών και χαρακτηριστικών μπορεί να μειώσει σημαντικά τον λανθάνοντα χρόνο συμπερασμάτων.


Σχετικά με τους συγγραφείς

Τζια Τζανγκ είναι ένας εφαρμοσμένος επιστήμονας που χρησιμοποιεί τεχνικές μηχανικής μάθησης για να βοηθήσει τους πελάτες να λύσουν διάφορα προβλήματα, όπως ανίχνευση απάτης, δημιουργία εικόνων διακόσμησης και πολλά άλλα. Έχει αναπτύξει με επιτυχία τη μηχανική μάθηση που βασίζεται σε γραφήματα, ιδιαίτερα το νευρωνικό δίκτυο γραφημάτων, λύσεις για πελάτες στην Κίνα, τις ΗΠΑ και τη Σιγκαπούρη. Ως διαφωτιστής των δυνατοτήτων γραφημάτων του AWS, ο Zhang έχει κάνει πολλές δημόσιες παρουσιάσεις σχετικά με το GNN, τη Βιβλιοθήκη Deep Graph (DGL), το Amazon Neptune και άλλες υπηρεσίες AWS.

Μενγκσίν Ζου είναι διευθυντής των Solutions Architects στο AWS, με έμφαση στο σχεδιασμό και την ανάπτυξη επαναχρησιμοποιήσιμων λύσεων AWS. Ασχολείται με την ανάπτυξη λογισμικού για πολλά χρόνια και είναι υπεύθυνος για πολλές startup ομάδες διαφόρων μεγεθών. Είναι επίσης υποστηρικτής του λογισμικού ανοιχτού κώδικα και ήταν μέλος του Eclipse Committer.

Haozhu Wang είναι επιστήμονας ερευνητής στο Amazon ML Solutions Lab, όπου συνεπικεφαλής του Reinforcement Learning Vertical. Βοηθά τους πελάτες να δημιουργήσουν προηγμένες λύσεις μηχανικής εκμάθησης με την πιο πρόσφατη έρευνα για την εκμάθηση γραφημάτων, την επεξεργασία φυσικής γλώσσας, την ενισχυτική εκμάθηση και την AutoML. Ο Haozhu έλαβε το διδακτορικό του στην Ηλεκτρολογία και Μηχανική Υπολογιστών από το Πανεπιστήμιο του Μίσιγκαν.

spot_img

Τελευταία Νοημοσύνη

spot_img

Συνομιλία με μας

Γεια σου! Πώς μπορώ να σε βοηθήσω?