Κοινή χρήση μέσω


Εκμάθηση: Δημιουργία, αξιολόγηση και βαθμολογία ενός μοντέλου εντοπισμού απάτης

Αυτό το εκπαιδευτικό βοήθημα παρουσιάζει ένα τελικό παράδειγμα μιας ροής εργασιών Synapse Data Science, στο Microsoft Fabric. Το σενάριο δημιουργεί ένα μοντέλο εντοπισμού απάτης με αλγόριθμους εκμάθησης μηχανής εκπαιδευμένους σε ιστορικά δεδομένα. Στη συνέχεια, χρησιμοποιεί το μοντέλο για να εντοπίσει μελλοντικές δόλιες συναλλαγές.

Αυτό το εκπαιδευτικό βοήθημα καλύπτει τα εξής βήματα:

  • Εγκατάσταση προσαρμοσμένων βιβλιοθηκών
  • Φόρτωση των δεδομένων
  • Κατανόηση και επεξεργασία των δεδομένων μέσω διερευνητικής ανάλυσης δεδομένων
  • Χρησιμοποιήστε το scikit-learn για να εκπαιδεύσετε ένα μοντέλο εκμάθησης μηχανής και να παρακολουθήσετε πειράματα με τις δυνατότητες MLflow και Fabric Autologging
  • Αποθήκευση και καταχώρηση του μοντέλου εκμάθησης μηχανής που έχει τις υψηλότερες επιδόσεις
  • Φόρτωση του μοντέλου εκμάθησης μηχανής για βαθμολόγηση και για πρόβλεψη

Προαπαιτούμενα στοιχεία

  • Λάβετε μια συνδρομή Microsoft Fabric. Εναλλακτικά, εγγραφείτε για μια δωρεάν δοκιμαστική έκδοση του Microsoft Fabric.

  • Εισέλθετε στο Microsoft Fabric.

  • Χρησιμοποιήστε την εναλλαγή εμπειρίας στην αριστερή πλευρά της αρχικής σελίδας σας για να μεταβείτε στην εμπειρία Synapse Data Science.

    Screenshot of the experience switcher menu, showing where to select Data Science.

Παρακολούθηση σε σημειωματάριο

Μπορείτε να κάνετε μία από αυτές τις επιλογές για να ακολουθήσετε τις οδηγίες σε ένα σημειωματάριο:

  • Άνοιγμα και εκτέλεση του ενσωματωμένου σημειωματάριου στην εμπειρία επιστήμης δεδομένων
  • Αποστείλετε το σημειωματάριό σας από το GitHub στην εμπειρία επιστήμης δεδομένων

Άνοιγμα του ενσωματωμένου σημειωματάριου

Το δείγμα σημειωματάριου εντοπισμού απάτης συνοδεύει αυτό το πρόγραμμα εκμάθησης.

Για να ανοίξετε το ενσωματωμένο δείγμα σημειωματάριου της εκμάθησης στην εμπειρία Synapse Data Science:

  1. Μεταβείτε στην αρχική σελίδα Synapse Data Science.

  2. Επιλέξτε Χρήση δείγματος.

  3. Επιλέξτε το αντίστοιχο δείγμα:

    • Από την προεπιλεγμένη καρτέλα Ροές εργασιών από άκρο σε τέλος (Python ), εάν το δείγμα αφορά ένα πρόγραμμα εκμάθησης Python.
    • Από την καρτέλα Ολοκληρωμένες ροές εργασιών (R), εάν το δείγμα αφορά μια εκμάθηση R.
    • Από την καρτέλα Γρήγορα προγράμματα εκμάθησης , εάν το δείγμα προορίζεται για μια γρήγορη εκμάθηση.
  4. Επισυνάψτε μια λίμνη στο σημειωματάριο προτού ξεκινήσετε την εκτέλεση κώδικα.

Εισαγωγή του σημειωματάριου από το GitHub

Το σημειωματάριο AIsample - Fraud Detection.ipynb συνοδεύει αυτό το πρόγραμμα εκμάθησης.

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

Εάν προτιμάτε να αντιγράψετε και να επικολλήσετε τον κώδικα από αυτή τη σελίδα, μπορείτε να δημιουργήσετε ένα νέο σημειωματάριο.

Φροντίστε να επισυνάψετε ένα lakehouse στο σημειωματάριο προτού ξεκινήσετε την εκτέλεση κώδικα.

Βήμα 1: Εγκατάσταση προσαρμοσμένων βιβλιοθηκών

Για την ανάπτυξη μοντέλου εκμάθησης μηχανής ή την ανάλυση δεδομένων ad-hoc, ίσως χρειαστεί να εγκαταστήσετε γρήγορα μια προσαρμοσμένη βιβλιοθήκη για την περίοδο λειτουργίας Apache Spark. Έχετε δύο επιλογές για την εγκατάσταση βιβλιοθηκών.

  • Χρησιμοποιήστε τις δυνατότητες ενσωματωμένης εγκατάστασης (%pip ή %conda) του σημειωματάριού σας για να εγκαταστήσετε μια βιβλιοθήκη, μόνο στο τρέχον σημειωματάριό σας.
  • Εναλλακτικά, μπορείτε να δημιουργήσετε ένα περιβάλλον Fabric, να εγκαταστήσετε βιβλιοθήκες από δημόσιες προελεύσεις ή να αποστείλετε προσαρμοσμένες βιβλιοθήκες σε αυτό και, στη συνέχεια, ο διαχειριστής του χώρου εργασίας σας μπορεί να συνδέσει το περιβάλλον ως προεπιλογή για τον χώρο εργασίας. Στη συνέχεια, όλες οι βιβλιοθήκες στο περιβάλλον θα γίνουν διαθέσιμες για χρήση σε οποιαδήποτε σημειωματάρια και ορισμούς εργασίας Spark στον χώρο εργασίας. Για περισσότερες πληροφορίες σχετικά με τα περιβάλλοντα, ανατρέξτε στο θέμα Δημιουργία, ρύθμιση παραμέτρων και χρήση περιβάλλοντος στο Microsoft Fabric.

Για αυτό το εκπαιδευτικό βοήθημα, χρησιμοποιήστε %pip install την για να εγκαταστήσετε τη imblearn βιβλιοθήκη στο σημειωματάριό σας.

Σημείωμα

Ο πυρήνας PySpark επανεκκινείται μετά από %pip install εκτελέσεις. Εγκαταστήστε τις απαραίτητες βιβλιοθήκες πριν εκτελέσετε οποιαδήποτε άλλα κελιά.

# Use pip to install imblearn
%pip install imblearn

Βήμα 2: Φόρτωση των δεδομένων

Το σύνολο δεδομένων εντοπισμού απάτης περιέχει συναλλαγές με πιστωτικές κάρτες, από τον Σεπτέμβριο του 2013, τις οποίες πραγματοποίησαν ευρωπαίοι κάτοχοι καρτών κατά τη διάρκεια δύο ημερών. Το σύνολο δεδομένων περιέχει μόνο αριθμητικές δυνατότητες, εξαιτίας ενός μετασχηματισμού "Ανάλυση κύριων στοιχείων" (PCA) που εφαρμόζεται στις αρχικές δυνατότητες. Το PCA μετασχηματίζει όλες τις δυνατότητες εκτός από το Time και Amount. Για την προστασία της εμπιστευτικότητας, δεν μπορούμε να παρέχουμε τις αρχικές δυνατότητες ή περισσότερες πληροφορίες ιστορικού σχετικά με το σύνολο δεδομένων.

Αυτές οι λεπτομέρειες περιγράφουν το σύνολο δεδομένων:

  • Οι V1δυνατότητες , V2, V3..., V28 είναι τα κύρια στοιχεία που λαμβάνονται με το PCA
  • Η Time δυνατότητα περιέχει τα δευτερόλεπτα που έχουν παρέλθει μεταξύ μιας συναλλαγής και της πρώτης συναλλαγής στο σύνολο δεδομένων
  • Η Amount δυνατότητα είναι το ποσό συναλλαγής. Μπορείτε να χρησιμοποιήσετε αυτήν τη δυνατότητα για εκμάθηση που εξαρτάται από το παράδειγμα και είναι ευαίσθητη στο κόστος
  • Η Class στήλη είναι η μεταβλητή απόκρισης (στόχος). Έχει την αξία 1 για απάτη και 0 για άλλα

Μόνο 492 συναλλαγές, από τις 284.807 συναλλαγές συνολικά, είναι δόλιες. Το σύνολο δεδομένων είναι εξαιρετικά μη ισορροπικό, επειδή η κλάση μειονότητας (δόλια) αντιπροσωπεύει μόνο το 0,172% των δεδομένων.

Αυτός ο πίνακας εμφανίζει μια προεπισκόπηση των creditcard.csv δεδομένων:

Χρόνος V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16 V17 V18 V19 V20 V21 V22 V23 V24 V25 V26 V27 V28 Ποσό Κλάση
0 -1.3598071336738 -0.0727811733098497 2.53634673796914 1.37815522427443 -0.338320769942518 0.462387777762292 0.239598554061257 0.0986979012610507 0.363786969611213 0.0907941719789316 -0.551599533260813 -0.617800855762348 -0.991389847235408 -0.311169353699879 1.46817697209427 -0.470400525259478 0.207971241929242 0.0257905801985591 0.403992960255733 0.251412098239705 -0.018306777944153 0.277837575558899 -0.110473910188767 0.0669280749146731 0.128539358273528 -0.189114843888824 0.133558376740387 -0.0210530534538215 149.62 "0"
0 1.19185711131486 0.26615071205963 0.16648011335321 0.448154078460911 0.0600176492822243 -0.0823608088155687 -0.0788029833323113 0.0851016549148104 -0.255425128109186 -0.166974414004614 1.61272666105479 1.06523531137287 0.48909501589608 -0.143772296441519 0.635558093258208 0.463917041022171 -0.114804663102346 -0.183361270123994 -0.145783041325259 -0.0690831352230203 -0.225775248033138 -0.638671952771851 0.101288021253234 -0.339846475529127 0.167170404418143 0.125894532368176 -0.00898309914322813 0.0147241691924927 2.69 "0"

Λήψη του συνόλου δεδομένων και αποστολή στο lakehouse

Καθορίστε αυτές τις παραμέτρους, ώστε να μπορείτε να χρησιμοποιήσετε αυτό το σημειωματάριο με διαφορετικά σύνολα δεδομένων:

IS_CUSTOM_DATA = False  # If True, the dataset has to be uploaded manually

TARGET_COL = "Class"  # Target column name
IS_SAMPLE = False  # If True, use only <SAMPLE_ROWS> rows of data for training; otherwise, use all data
SAMPLE_ROWS = 5000  # If IS_SAMPLE is True, use only this number of rows for training

DATA_FOLDER = "Files/fraud-detection/"  # Folder with data files
DATA_FILE = "creditcard.csv"  # Data file name

EXPERIMENT_NAME = "aisample-fraud"  # MLflow experiment name

Αυτός ο κώδικας κάνει λήψη μιας δημόσια διαθέσιμης έκδοσης του συνόλου δεδομένων και, στη συνέχεια, τον αποθηκεύει σε μια λίμνη Fabric.

Σημαντικό

Φροντίστε να προσθέσετε ένα lakehouse στο σημειωματάριο προτού το εκτελέσετε. Διαφορετικά, θα λάβετε ένα σφάλμα.

if not IS_CUSTOM_DATA:
    # Download data files into the lakehouse if they're not already there
    import os, requests

    remote_url = "https://synapseaisolutionsa.blob.core.windows.net/public/Credit_Card_Fraud_Detection"
    fname = "creditcard.csv"
    download_path = f"/lakehouse/default/{DATA_FOLDER}/raw"

    if not os.path.exists("/lakehouse/default"):
        raise FileNotFoundError("Default lakehouse not found, please add a lakehouse and restart the session.")
    os.makedirs(download_path, exist_ok=True)
    if not os.path.exists(f"{download_path}/{fname}"):
        r = requests.get(f"{remote_url}/{fname}", timeout=30)
        with open(f"{download_path}/{fname}", "wb") as f:
            f.write(r.content)
    print("Downloaded demo data files into lakehouse.")

Ρύθμιση παρακολούθησης πειραμάτων MLflow

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

Η εμπειρία Synapse Data Science στο Microsoft Fabric περιλαμβάνει μια δυνατότητα αυτόματης καταχώρησης. Αυτή η δυνατότητα μειώνει την ποσότητα κώδικα που απαιτείται για την αυτόματη καταγραφή των παραμέτρων, των μετρικών και των στοιχείων ενός μοντέλου εκμάθησης μηχανής κατά τη διάρκεια της εκπαίδευσης. Η δυνατότητα επεκτείνει τις δυνατότητες αυτόματης καταχώρησης ροής ML. Διαθέτει βαθιά ενοποίηση με την εμπειρία της επιστήμης δεδομένων.

Με την αυτόματη καταγραφή, μπορείτε εύκολα να παρακολουθείτε και να συγκρίνετε τις επιδόσεις διαφορετικών μοντέλων και πειραμάτων, χωρίς την ανάγκη μη αυτόματης παρακολούθησης. Για περισσότερες πληροφορίες, ανατρέξτε στο θέμα Αυτόματη καταχώρηση στο Microsoft Fabric.

Για να απενεργοποιήσετε την αυτόματη καταχώρηση του Microsoft Fabric σε μια περίοδο λειτουργίας σημειωματάριου, καλέστε mlflow.autolog() και ορίστε disable=True:

# Set up MLflow for experiment tracking
import mlflow

mlflow.set_experiment(EXPERIMENT_NAME)
mlflow.autolog(disable=True)  # Disable MLflow autologging

Ανάγνωση ανεπεξέργαστων δεδομένων από το lakehouse

Αυτός ο κώδικας διαβάζει ανεπεξέργαστα δεδομένα από το lakehouse:

df = (
    spark.read.format("csv")
    .option("header", "true")
    .option("inferSchema", True)
    .load(f"{DATA_FOLDER}/raw/{DATA_FILE}")
    .cache()
)

Βήμα 3: Εκτέλεση διερευνητικής ανάλυσης δεδομένων

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

Εμφάνιση ανεπεξέργαστων δεδομένων

  1. Εξερευνήστε τα ανεπεξέργαστα δεδομένα και προβάλετε στατιστικά στοιχεία υψηλού επιπέδου με την display εντολή . Για περισσότερες πληροφορίες σχετικά με την απεικόνιση δεδομένων, ανατρέξτε στο θέμα Απεικόνιση σημειωματάριου στο Microsoft Fabric.

    display(df)
    
  2. Εκτυπώστε ορισμένες βασικές πληροφορίες σχετικά με το σύνολο δεδομένων:

    # Print dataset basic information
    print("records read: " + str(df.count()))
    print("Schema: ")
    df.printSchema()
    

Μετασχηματισμός των δεδομένων

  1. Μετατρέψτε τις στήλες συνόλου δεδομένων στους σωστούς τύπους:

    import pyspark.sql.functions as F
    
    df_columns = df.columns
    df_columns.remove(TARGET_COL)
    
    # Ensure that TARGET_COL is the last column
    df = df.select(df_columns + [TARGET_COL]).withColumn(TARGET_COL, F.col(TARGET_COL).cast("int"))
    
    if IS_SAMPLE:
        df = df.limit(SAMPLE_ROWS)
    
  2. Μετατρέψτε το Spark DataFrame σε ένα dataFrame pandas για ευκολότερη απεικόνιση και επεξεργασία:

    df_pd = df.toPandas()
    

Εξερεύνηση της κατανομής κλάσης στο σύνολο δεδομένων

  1. Εμφανίζει την κατανομή κλάσης στο σύνολο δεδομένων:

    # The distribution of classes in the dataset
    print('No Frauds', round(df_pd['Class'].value_counts()[0]/len(df_pd) * 100,2), '% of the dataset')
    print('Frauds', round(df_pd['Class'].value_counts()[1]/len(df_pd) * 100,2), '% of the dataset')
    

    Ο κώδικας επιστρέφει αυτήν την κατανομή κλάσης συνόλου δεδομένων: 99,83% No Frauds και 0,17% Frauds. Αυτή η κατανομή κλάσης δείχνει ότι οι περισσότερες συναλλαγές δεν είναι καταχθλήσεις. Επομένως, απαιτείται προεπεξεργασία δεδομένων πριν από την εκπαίδευση του μοντέλου, για να αποφευχθεί η υπερπροσάρτηση.

  2. Χρησιμοποιήστε ένα γράφημα για να εμφανίσετε την ανισορροπία κλάσης στο σύνολο δεδομένων, προβάλλοντας την κατανομή των δόλιων έναντι των μη καταλογισμένων συναλλαγών:

    import seaborn as sns
    import matplotlib.pyplot as plt
    
    colors = ["#0101DF", "#DF0101"]
    sns.countplot(x='Class', data=df_pd, palette=colors) 
    plt.title('Class Distributions \n (0: No Fraud || 1: Fraud)', fontsize=10)
    
  3. Εμφανίστε τη σύνοψη πέντε αριθμών (ελάχιστη βαθμολογία, πρώτο τεταρτημόριο, διάμεσος, τρίτο τεταρτημόριο και μέγιστη βαθμολογία) για το ποσό συναλλαγής, με γραφήματα πλαισίου:

    fig, (ax1, ax2) = plt.subplots(ncols=2, figsize=(12,5))
    s = sns.boxplot(ax = ax1, x="Class", y="Amount", hue="Class",data=df_pd, palette="PRGn", showfliers=True) # Remove outliers from the plot
    s = sns.boxplot(ax = ax2, x="Class", y="Amount", hue="Class",data=df_pd, palette="PRGn", showfliers=False) # Keep outliers from the plot
    plt.show()
    

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

Βήμα 4: Εκπαίδευση και αξιολόγηση των μοντέλων

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

Προετοιμασία συνόλων δεδομένων εκπαίδευσης και δοκιμής

Πριν από την εκπαίδευση, διαιρέστε τα δεδομένα στα σύνολα δεδομένων εκπαίδευσης και δοκιμής:

# Split the dataset into training and testing sets
from sklearn.model_selection import train_test_split

train, test = train_test_split(df_pd, test_size=0.15)
feature_cols = [c for c in df_pd.columns.tolist() if c not in [TARGET_COL]]

Εφαρμογή SMOTE στο σύνολο δεδομένων εκπαίδευσης

Η imblearn βιβλιοθήκη χρησιμοποιεί την προσέγγιση Της Τεχνικής Υπερχρησιμοποιήσεων Συνθετικής Μειονότητας (SMOTE) για την αντιμετώπιση του προβλήματος της μη ισορροπημένης ταξινόμησης. Η μη ισορροπημένη ταξινόμηση συμβαίνει όταν υπάρχουν πολύ λίγα παραδείγματα της μειονοτικής κλάσης, για να μάθει ένα μοντέλο αποτελεσματικά τα όρια της απόφασης. Η SMOTE είναι η πλέον ευρέως χρησιμοποιούμενη προσέγγιση για τη σύνθεση νέων δειγμάτων της μειονοτικής τάξης.

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

# Apply SMOTE to the training data
import pandas as pd
from collections import Counter
from imblearn.over_sampling import SMOTE

X = train[feature_cols]
y = train[TARGET_COL]
print("Original dataset shape %s" % Counter(y))

sm = SMOTE(random_state=42)
X_res, y_res = sm.fit_resample(X, y)
print("Resampled dataset shape %s" % Counter(y_res))

new_train = pd.concat([X_res, y_res], axis=1)

Για περισσότερες πληροφορίες σχετικά με τον SMOTE, ανατρέξτε στη σελίδα αναφοράς της επιστημονικής εκμάθησης για τη μέθοδο SMOTE και τον οδηγό χρήσης της επιστημονικής εκμάθησης σχετικά με την υπερ-χρήση πόρων.

Εκπαίδευση μοντέλων εκμάθησης μηχανής και εκτέλεση πειραμάτων

Το Apache Spark, στο Microsoft Fabric, επιτρέπει την εκμάθηση μηχανής με μεγάλα δεδομένα. Με το Apache Spark, μπορείτε να λάβετε πολύτιμες δεδομενικές πληροφορίες από μεγάλους όγκους δομημένων, μη δομημένων και ταχέως κινούμενων δεδομένων.

Έχετε διάφορες διαθέσιμες επιλογές για την εκπαίδευση μοντέλων εκμάθησης μηχανής με το Apache Spark στο Microsoft Fabric: Apache Spark MLlib, SynapseML και άλλες βιβλιοθήκες ανοιχτού κώδικα. Για περισσότερες πληροφορίες, ανατρέξτε στο θέμα Εκπαίδευση μοντέλων εκμάθησης μηχανής στο Microsoft Fabric.

Ένα πείραμα εκμάθησης μηχανής χρησιμεύει ως η κύρια μονάδα οργανισμού και ελέγχου για όλες τις σχετικές εκτελέσεις εκμάθησης μηχανής. Μια εκτέλεση αντιστοιχεί σε μία μόνο εκτέλεση κώδικα μοντέλου. Η παρακολούθηση πειραμάτων εκμάθησης μηχανής περιλαμβάνει τη διαχείριση όλων των πειραμάτων και των στοιχείων τους, όπως παραμέτρους, μετρικά, μοντέλα και άλλα αντικείμενα σχεδίασης.

Για παρακολούθηση πειραμάτων, μπορείτε να οργανώσετε όλα τα απαιτούμενα στοιχεία ενός συγκεκριμένου πειράματος εκμάθησης μηχανής. Επιπλέον, μπορείτε εύκολα να αναπαραγάγετε προηγούμενα αποτελέσματα με αποθηκευμένα πειράματα. Για περισσότερες πληροφορίες σχετικά με τα πειράματα εκμάθησης μηχανής, ανατρέξτε στο θέμα Πειράματα εκμάθησης μηχανής στο Microsoft Fabric.

  1. Για να παρακολουθήσετε περισσότερα μετρικά, παραμέτρους και αρχεία, ορίστε exclusive=False την ενημέρωση της ρύθμισης παραμέτρων αυτόματης καταχώρησης MLflow:

    mlflow.autolog(exclusive=False)
    
  2. Εκπαιδεύστε δύο μοντέλα με το LightGBM. Το ένα μοντέλο χειρίζεται το μη ισορροπημένο σύνολο δεδομένων και το άλλο μοντέλο χειρίζεται το ισορροπημένο σύνολο δεδομένων (μέσω SMOTE). Στη συνέχεια, συγκρίνετε τις επιδόσεις των δύο μοντέλων.

    import lightgbm as lgb
    
    model = lgb.LGBMClassifier(objective="binary") # Imbalanced dataset
    smote_model = lgb.LGBMClassifier(objective="binary") # Balanced dataset
    
    # Train LightGBM for both imbalanced and balanced datasets and define the evaluation metrics
    print("Start training with imbalanced data:\n")
    with mlflow.start_run(run_name="raw_data") as raw_run:
        model = model.fit(
            train[feature_cols],
            train[TARGET_COL],
            eval_set=[(test[feature_cols], test[TARGET_COL])],
            eval_metric="auc",
            callbacks=[
                lgb.log_evaluation(10),
            ],
        )
    
    print(f"\n\nStart training with balanced data:\n")
    with mlflow.start_run(run_name="smote_data") as smote_run:
        smote_model = smote_model.fit(
            new_train[feature_cols],
            new_train[TARGET_COL],
            eval_set=[(test[feature_cols], test[TARGET_COL])],
            eval_metric="auc",
            callbacks=[
                lgb.log_evaluation(10),
            ],
        )
    

Προσδιορίστε τη σημασία της δυνατότητας για την εκπαίδευση

  1. Προσδιορίστε τη σημασία της δυνατότητας για το μοντέλο που έχετε εκπαιδεύσει στο μη ισορροπημένο σύνολο δεδομένων:

    with mlflow.start_run(run_id=raw_run.info.run_id):
        importance = lgb.plot_importance(
            model, title="Feature importance for imbalanced data"
        )
        importance.figure.savefig("feauture_importance.png")
        mlflow.log_figure(importance.figure, "feature_importance.png")
    
  2. Προσδιορίστε τη σημασία της δυνατότητας για το μοντέλο που έχετε εκπαιδεύσει σε ισορροπημένα δεδομένα. Ο SMOTE δημιούργησε τα ισορροπημένα δεδομένα:

    with mlflow.start_run(run_id=smote_run.info.run_id):
        smote_importance = lgb.plot_importance(
            smote_model, title="Feature importance for balanced (via SMOTE) data"
        )
        smote_importance.figure.savefig("feauture_importance_smote.png")
        mlflow.log_figure(smote_importance.figure, "feauture_importance_smote.png")
    

Για να εκπαιδεύσετε ένα μοντέλο με το μη ισορροπημένο σύνολο δεδομένων, οι σημαντικές δυνατότητες έχουν σημαντικές διαφορές σε σύγκριση με ένα μοντέλο που έχει εκπαιδευτεί με το ισορροπημένο σύνολο δεδομένων.

Αξιολόγηση των μοντέλων

Εδώ, αξιολογείτε τα δύο εκπαιδευμένα μοντέλα:

  • model εκπαίδευση σε ανεπεξέργαστα, μη ισορροπημένα δεδομένα
  • smote_model εκπαίδευση σε ισορροπημένα δεδομένα

Μετρικά υπολογιστικού μοντέλου

  1. Καθορίστε μια prediction_to_spark συνάρτηση που εκτελεί προβλέψεις και μετατρέπει τα αποτελέσματα πρόβλεψης σε ένα Spark DataFrame. Στη συνέχεια, μπορείτε να υπολογίσετε στατιστικά στοιχεία μοντέλου στα αποτελέσματα πρόβλεψης με το SynapseML.

    from pyspark.sql.functions import col
    from pyspark.sql.types import IntegerType, DoubleType
    
    def prediction_to_spark(model, test):
        predictions = model.predict(test[feature_cols], num_iteration=model.best_iteration_)
        predictions = tuple(zip(test[TARGET_COL].tolist(), predictions.tolist()))
        dataColumns = [TARGET_COL, "prediction"]
        predictions = (
            spark.createDataFrame(data=predictions, schema=dataColumns)
            .withColumn(TARGET_COL, col(TARGET_COL).cast(IntegerType()))
            .withColumn("prediction", col("prediction").cast(DoubleType()))
        )
    
        return predictions
    
  2. Χρησιμοποιήστε τη prediction_to_spark συνάρτηση για να εκτελέσετε προβλέψεις με τα δύο μοντέλα, model και smote_model:

    predictions = prediction_to_spark(model, test)
    smote_predictions = prediction_to_spark(smote_model, test)
    predictions.limit(10).toPandas()
    
  3. Υπολογιστικά μετρικά για τα δύο μοντέλα:

    from synapse.ml.train import ComputeModelStatistics
    
    metrics = ComputeModelStatistics(
        evaluationMetric="classification", labelCol=TARGET_COL, scoredLabelsCol="prediction"
    ).transform(predictions)
    
    smote_metrics = ComputeModelStatistics(
        evaluationMetric="classification", labelCol=TARGET_COL, scoredLabelsCol="prediction"
    ).transform(smote_predictions)
    display(metrics)
    

Αξιολόγηση απόδοσης μοντέλου με πίνακα σύγχυσης

Μια μήτρα σύγχυσης εμφανίζει τον αριθμό των

  • αληθώς θετικά (TP)
  • αληθώς αρνητικά (TN)
  • ψευδώς θετικά (FP)
  • ψευδώς αρνητικά (FN)

ότι ένα μοντέλο παράγει όταν βαθμολογηθεί με δεδομένα δοκιμής. Για τη δυαδική ταξινόμηση, το μοντέλο επιστρέφει μια 2x2 μήτρα σύγχυσης. Για ταξινόμηση πολλών κλάσεων, το μοντέλο επιστρέφει μια nxn μήτρα σύγχυσης, όπου n είναι ο αριθμός των κλάσεων.

  1. Χρησιμοποιήστε μια μήτρα σύγχυσης για να συνοψίσετε τις επιδόσεις των εκπαιδευμένων μοντέλων εκμάθησης μηχανής στα δεδομένα δοκιμής:

    # Collect confusion matrix values
    cm = metrics.select("confusion_matrix").collect()[0][0].toArray()
    smote_cm = smote_metrics.select("confusion_matrix").collect()[0][0].toArray()
    print(cm)
    
  2. Σχεδίαση της μήτρας σύγχυσης για τις προβλέψεις του smote_model (με εκπαίδευση σε ισορροπημένα δεδομένα):

    # Plot the confusion matrix
    import seaborn as sns
    
    def plot(cm):
        """
        Plot the confusion matrix.
        """
        sns.set(rc={"figure.figsize": (5, 3.5)})
        ax = sns.heatmap(cm, annot=True, fmt=".20g")
        ax.set_title("Confusion Matrix")
        ax.set_xlabel("Predicted label")
        ax.set_ylabel("True label")
        return ax
    
    with mlflow.start_run(run_id=smote_run.info.run_id):
        ax = plot(smote_cm)
        mlflow.log_figure(ax.figure, "ConfusionMatrix.png")
    
  3. Σχεδιάστε τη μήτρα σύγχυσης για τις προβλέψεις του model (εκπαιδευμένες σε ανεπεξέργαστα, μη ισορροπημένα δεδομένα):

    with mlflow.start_run(run_id=raw_run.info.run_id):
        ax = plot(cm)
        mlflow.log_figure(ax.figure, "ConfusionMatrix.png")
    

Αξιολογήστε την απόδοση του μοντέλου με μετρήσεις AUC-ROC και AUPRC

Το χαρακτηριστικό λειτουργίας Area Under the Curve Receiver (AUC-ROC) αξιολογεί την απόδοση των δυαδικών ταξινομητών. Το γράφημα AUC-ROC απεικονίζει την ανταλλαγή μεταξύ του αληθώς θετικού ρυθμού (TPR) και του ψευδώς θετικού ρυθμού (FPR).

Σε ορισμένες περιπτώσεις, είναι πιο κατάλληλο να αξιολογήσετε τον ταξινομητή σας με βάση τη μέτρηση Περιοχή κάτω από την καμπύλη ακρίβειας-ανάκλησης (AUPRC). Η καμπύλη AUPRC συνδυάζει αυτούς τους ρυθμούς:

  • Η ακρίβεια ή η θετική προγνωστική τιμή (PPV)
  • Η ανάκληση ή TPR

Για να αξιολογήσετε τις επιδόσεις με τις μετρήσεις AUC-ROC και AUPRC:

  1. Καθορίστε μια συνάρτηση που επιστρέφει τις μετρήσεις AUC-ROC και AUPRC:

    from pyspark.ml.evaluation import BinaryClassificationEvaluator
    
    def evaluate(predictions):
        """
        Evaluate the model by computing AUROC and AUPRC with the predictions.
        """
    
        # Initialize the binary evaluator
        evaluator = BinaryClassificationEvaluator(rawPredictionCol="prediction", labelCol=TARGET_COL)
    
        _evaluator = lambda metric: evaluator.setMetricName(metric).evaluate(predictions)
    
        # Calculate AUROC, baseline 0.5
        auroc = _evaluator("areaUnderROC")
        print(f"The AUROC is: {auroc:.4f}")
    
        # Calculate AUPRC, baseline positive rate (0.172% in the data)
        auprc = _evaluator("areaUnderPR")
        print(f"The AUPRC is: {auprc:.4f}")
    
        return auroc, auprc    
    
  2. Καταγράψτε τα μετρικά AUC-ROC και AUPRC για το μοντέλο που έχετε εκπαιδεύσει σε μη ισορροπμένα δεδομένα:

    with mlflow.start_run(run_id=raw_run.info.run_id):
        auroc, auprc = evaluate(predictions)
        mlflow.log_metrics({"AUPRC": auprc, "AUROC": auroc})
        mlflow.log_params({"Data_Enhancement": "None", "DATA_FILE": DATA_FILE})
    
  3. Καταγράψτε τα μετρικά AUC-ROC και AUPRC για το μοντέλο που έχετε εκπαιδεύσει σε ισορροπημένα δεδομένα:

    with mlflow.start_run(run_id=smote_run.info.run_id):
        auroc, auprc = evaluate(smote_predictions)
        mlflow.log_metrics({"AUPRC": auprc, "AUROC": auroc})
        mlflow.log_params({"Data_Enhancement": "SMOTE", "DATA_FILE": DATA_FILE})
    

Το μοντέλο που έχει εκπαιδευτεί με τα ισορροπημένα δεδομένα επιστρέφει υψηλότερες τιμές AUC-ROC και AUPRC σε σύγκριση με το μοντέλο που έχει εκπαιδευτεί με τα μη ισορροπημένα δεδομένα. Με βάση αυτές τις μετρήσεις, ο SMOTE φαίνεται σαν μια αποτελεσματική τεχνική για τη βελτίωση των επιδόσεων του μοντέλου όταν εργάζεστε με εξαιρετικά μη ισορροπωμένα δεδομένα.

Όπως δείχνει η επόμενη εικόνα, οποιοδήποτε πείραμα καταγράφεται με το αντίστοιχο όνομά του. Μπορείτε να παρακολουθήσετε τις παραμέτρους του πειράματος και τα μετρικά επιδόσεων στον χώρο εργασίας σας.

Screenshot of the tracked experiment.

Αυτή η εικόνα εμφανίζει τα μετρικά επιδόσεων για το μοντέλο που έχει εκπαιδευτεί στο ισορροπημένο σύνολο δεδομένων (στην έκδοση 2):

Screenshot of logged model performance metrics and model parameters.

Μπορείτε να επιλέξετε Έκδοση 1 για να δείτε τα μετρικά για το μοντέλο που έχει εκπαιδευτεί στο μη ισορροπημένο σύνολο δεδομένων. Όταν συγκρίνετε τα μετρικά, η AUROC είναι υψηλότερη για το μοντέλο που έχει εκπαιδευτεί με το ισορροπημένο σύνολο δεδομένων. Αυτά τα αποτελέσματα υποδεικνύουν ότι αυτό το μοντέλο είναι καλύτερο στην ορθή πρόβλεψη 0 των κλάσεων ως 0και στην 1 πρόβλεψη κλάσεων ως 1.

Βήμα 5: Καταχώρηση των μοντέλων

Χρησιμοποιήστε τη ροή MLflow για να καταχωρήσετε τα δύο μοντέλα:

# Register the model
registered_model_name = f"{EXPERIMENT_NAME}-lightgbm"

raw_model_uri = "runs:/{}/model".format(raw_run.info.run_id)
mlflow.register_model(raw_model_uri, registered_model_name)

smote_model_uri = "runs:/{}/model".format(smote_run.info.run_id)
mlflow.register_model(smote_model_uri, registered_model_name)

Βήμα 6: Αποθήκευση των αποτελεσμάτων πρόβλεψης

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

Μπορείτε να δημιουργήσετε προβλέψεις δέσμης απευθείας από το σημειωματάριο Microsoft Fabric ή από τη σελίδα στοιχείων ενός μοντέλου. Για περισσότερες πληροφορίες σχετικά με το PREDICT, ανατρέξτε στο θέμα Βαθμολόγηση μοντέλου με την PREDICT στο Microsoft Fabric.

  1. Φορτώστε το μοντέλο με καλύτερες επιδόσεις (Έκδοση 2) για βαθμολόγηση δέσμης και δημιουργήστε τα αποτελέσματα της πρόβλεψης:

    from synapse.ml.predict import MLFlowTransformer
    
    spark.conf.set("spark.synapse.ml.predict.enabled", "true")
    
    model = MLFlowTransformer(
        inputCols=feature_cols,
        outputCol="prediction",
        modelName=f"{EXPERIMENT_NAME}-lightgbm",
        modelVersion=2,
    )
    
    test_spark = spark.createDataFrame(data=test, schema=test.columns.to_list())
    
    batch_predictions = model.transform(test_spark)
    
  2. Αποθήκευση προβλέψεων στο lakehouse:

    # Save the predictions to the lakehouse
    batch_predictions.write.format("delta").mode("overwrite").save(f"{DATA_FOLDER}/predictions/batch_predictions")