Εκμάθηση: Δημιουργία, αξιολόγηση και βαθμολογία ενός μοντέλου εντοπισμού απάτης
Αυτό το εκπαιδευτικό βοήθημα παρουσιάζει ένα τελικό παράδειγμα μιας ροής εργασιών Synapse Data Science, στο Microsoft Fabric. Το σενάριο δημιουργεί ένα μοντέλο εντοπισμού απάτης με αλγόριθμους εκμάθησης μηχανής εκπαιδευμένους σε ιστορικά δεδομένα. Στη συνέχεια, χρησιμοποιεί το μοντέλο για να εντοπίσει μελλοντικές δόλιες συναλλαγές.
Αυτό το εκπαιδευτικό βοήθημα καλύπτει τα εξής βήματα:
- Εγκατάσταση προσαρμοσμένων βιβλιοθηκών
- Φόρτωση των δεδομένων
- Κατανόηση και επεξεργασία των δεδομένων μέσω διερευνητικής ανάλυσης δεδομένων
- Χρησιμοποιήστε το scikit-learn για να εκπαιδεύσετε ένα μοντέλο εκμάθησης μηχανής και να παρακολουθήσετε πειράματα με τις δυνατότητες MLflow και Fabric Autologging
- Αποθήκευση και καταχώρηση του μοντέλου εκμάθησης μηχανής που έχει τις υψηλότερες επιδόσεις
- Φόρτωση του μοντέλου εκμάθησης μηχανής για βαθμολόγηση και για πρόβλεψη
Προαπαιτούμενα στοιχεία
Λάβετε μια συνδρομή Microsoft Fabric. Εναλλακτικά, εγγραφείτε για μια δωρεάν δοκιμαστική έκδοση του Microsoft Fabric.
Εισέλθετε στο Microsoft Fabric.
Χρησιμοποιήστε την εναλλαγή εμπειρίας στην αριστερή πλευρά της αρχικής σελίδας σας για να μεταβείτε στην εμπειρία Synapse Data Science.
- Εάν είναι απαραίτητο, δημιουργήστε μια λίμνη Microsoft Fabric όπως περιγράφεται στο θέμα Δημιουργία ενός lakehouse στο Microsoft Fabric.
Παρακολούθηση σε σημειωματάριο
Μπορείτε να κάνετε μία από αυτές τις επιλογές για να ακολουθήσετε τις οδηγίες σε ένα σημειωματάριο:
- Άνοιγμα και εκτέλεση του ενσωματωμένου σημειωματάριου στην εμπειρία επιστήμης δεδομένων
- Αποστείλετε το σημειωματάριό σας από το GitHub στην εμπειρία επιστήμης δεδομένων
Άνοιγμα του ενσωματωμένου σημειωματάριου
Το δείγμα σημειωματάριου εντοπισμού απάτης συνοδεύει αυτό το πρόγραμμα εκμάθησης.
Για να ανοίξετε το ενσωματωμένο δείγμα σημειωματάριου της εκμάθησης στην εμπειρία Synapse Data Science:
Μεταβείτε στην αρχική σελίδα Synapse Data Science.
Επιλέξτε Χρήση δείγματος.
Επιλέξτε το αντίστοιχο δείγμα:
- Από την προεπιλεγμένη καρτέλα Ροές εργασιών από άκρο σε τέλος (Python ), εάν το δείγμα αφορά ένα πρόγραμμα εκμάθησης Python.
- Από την καρτέλα Ολοκληρωμένες ροές εργασιών (R), εάν το δείγμα αφορά μια εκμάθηση R.
- Από την καρτέλα Γρήγορα προγράμματα εκμάθησης , εάν το δείγμα προορίζεται για μια γρήγορη εκμάθηση.
Επισυνάψτε μια λίμνη στο σημειωματάριο προτού ξεκινήσετε την εκτέλεση κώδικα.
Εισαγωγή του σημειωματάριου από το 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 για ευκολότερη απεικόνιση. Τέλος, εξερευνάτε και απεικονίζετε τις κατανομές κλάσης στα δεδομένα.
Εμφάνιση ανεπεξέργαστων δεδομένων
Εξερευνήστε τα ανεπεξέργαστα δεδομένα και προβάλετε στατιστικά στοιχεία υψηλού επιπέδου με την
display
εντολή . Για περισσότερες πληροφορίες σχετικά με την απεικόνιση δεδομένων, ανατρέξτε στο θέμα Απεικόνιση σημειωματάριου στο Microsoft Fabric.display(df)
Εκτυπώστε ορισμένες βασικές πληροφορίες σχετικά με το σύνολο δεδομένων:
# Print dataset basic information print("records read: " + str(df.count())) print("Schema: ") df.printSchema()
Μετασχηματισμός των δεδομένων
Μετατρέψτε τις στήλες συνόλου δεδομένων στους σωστούς τύπους:
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)
Μετατρέψτε το Spark DataFrame σε ένα dataFrame pandas για ευκολότερη απεικόνιση και επεξεργασία:
df_pd = df.toPandas()
Εξερεύνηση της κατανομής κλάσης στο σύνολο δεδομένων
Εμφανίζει την κατανομή κλάσης στο σύνολο δεδομένων:
# 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
. Αυτή η κατανομή κλάσης δείχνει ότι οι περισσότερες συναλλαγές δεν είναι καταχθλήσεις. Επομένως, απαιτείται προεπεξεργασία δεδομένων πριν από την εκπαίδευση του μοντέλου, για να αποφευχθεί η υπερπροσάρτηση.Χρησιμοποιήστε ένα γράφημα για να εμφανίσετε την ανισορροπία κλάσης στο σύνολο δεδομένων, προβάλλοντας την κατανομή των δόλιων έναντι των μη καταλογισμένων συναλλαγών:
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)
Εμφανίστε τη σύνοψη πέντε αριθμών (ελάχιστη βαθμολογία, πρώτο τεταρτημόριο, διάμεσος, τρίτο τεταρτημόριο και μέγιστη βαθμολογία) για το ποσό συναλλαγής, με γραφήματα πλαισίου:
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.
Για να παρακολουθήσετε περισσότερα μετρικά, παραμέτρους και αρχεία, ορίστε
exclusive=False
την ενημέρωση της ρύθμισης παραμέτρων αυτόματης καταχώρησης MLflow:mlflow.autolog(exclusive=False)
Εκπαιδεύστε δύο μοντέλα με το 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), ], )
Προσδιορίστε τη σημασία της δυνατότητας για την εκπαίδευση
Προσδιορίστε τη σημασία της δυνατότητας για το μοντέλο που έχετε εκπαιδεύσει στο μη ισορροπημένο σύνολο δεδομένων:
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")
Προσδιορίστε τη σημασία της δυνατότητας για το μοντέλο που έχετε εκπαιδεύσει σε ισορροπημένα δεδομένα. Ο 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
εκπαίδευση σε ισορροπημένα δεδομένα
Μετρικά υπολογιστικού μοντέλου
Καθορίστε μια
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
Χρησιμοποιήστε τη
prediction_to_spark
συνάρτηση για να εκτελέσετε προβλέψεις με τα δύο μοντέλα,model
καιsmote_model
:predictions = prediction_to_spark(model, test) smote_predictions = prediction_to_spark(smote_model, test) predictions.limit(10).toPandas()
Υπολογιστικά μετρικά για τα δύο μοντέλα:
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
είναι ο αριθμός των κλάσεων.
Χρησιμοποιήστε μια μήτρα σύγχυσης για να συνοψίσετε τις επιδόσεις των εκπαιδευμένων μοντέλων εκμάθησης μηχανής στα δεδομένα δοκιμής:
# 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)
Σχεδίαση της μήτρας σύγχυσης για τις προβλέψεις του
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")
Σχεδιάστε τη μήτρα σύγχυσης για τις προβλέψεις του
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:
Καθορίστε μια συνάρτηση που επιστρέφει τις μετρήσεις 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
Καταγράψτε τα μετρικά 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})
Καταγράψτε τα μετρικά 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 φαίνεται σαν μια αποτελεσματική τεχνική για τη βελτίωση των επιδόσεων του μοντέλου όταν εργάζεστε με εξαιρετικά μη ισορροπωμένα δεδομένα.
Όπως δείχνει η επόμενη εικόνα, οποιοδήποτε πείραμα καταγράφεται με το αντίστοιχο όνομά του. Μπορείτε να παρακολουθήσετε τις παραμέτρους του πειράματος και τα μετρικά επιδόσεων στον χώρο εργασίας σας.
Αυτή η εικόνα εμφανίζει τα μετρικά επιδόσεων για το μοντέλο που έχει εκπαιδευτεί στο ισορροπημένο σύνολο δεδομένων (στην έκδοση 2):
Μπορείτε να επιλέξετε Έκδοση 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.
Φορτώστε το μοντέλο με καλύτερες επιδόσεις (Έκδοση 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)
Αποθήκευση προβλέψεων στο lakehouse:
# Save the predictions to the lakehouse batch_predictions.write.format("delta").mode("overwrite").save(f"{DATA_FOLDER}/predictions/batch_predictions")
Σχετικό περιεχόμενο
Σχόλια
https://aka.ms/ContentUserFeedback.
Σύντομα διαθέσιμα: Καθ' όλη τη διάρκεια του 2024 θα καταργήσουμε σταδιακά τα ζητήματα GitHub ως μηχανισμό ανάδρασης για το περιεχόμενο και θα το αντικαταστήσουμε με ένα νέο σύστημα ανάδρασης. Για περισσότερες πληροφορίες, ανατρέξτε στο θέμα:Υποβολή και προβολή σχολίων για