Εκμάθηση: Δημιουργία, αξιολόγηση και βαθμολογία ενός μοντέλου εντοπισμού απάτης
Αυτό το εκπαιδευτικό βοήθημα παρουσιάζει ένα τελικό παράδειγμα μιας ροής εργασιών Synapse Data Science, στο Microsoft Fabric. Το σενάριο δημιουργεί ένα μοντέλο εντοπισμού απάτης με αλγόριθμους εκμάθησης μηχανής εκπαιδευμένους σε ιστορικά δεδομένα. Στη συνέχεια, χρησιμοποιεί το μοντέλο για να εντοπίσει μελλοντικές δόλιες συναλλαγές.
Αυτό το εκπαιδευτικό βοήθημα καλύπτει τα εξής βήματα:
- Εγκατάσταση προσαρμοσμένων βιβλιοθηκών
- Φόρτωση των δεδομένων
- Κατανόηση και επεξεργασία των δεδομένων μέσω διερευνητικής ανάλυσης δεδομένων
- Χρησιμοποιήστε το scikit-learn για να εκπαιδεύσετε ένα μοντέλο εκμάθησης μηχανής και να παρακολουθήσετε πειράματα με τις δυνατότητες MLflow και Fabric Autologging
- Αποθήκευση και καταχώρηση του μοντέλου εκμάθησης μηχανής που έχει τις υψηλότερες επιδόσεις
- Φόρτωση του μοντέλου εκμάθησης μηχανής για βαθμολόγηση και για πρόβλεψη
Προϋποθέσεις
Λάβετε μια συνδρομής Microsoft Fabric . Εναλλακτικά, εγγραφείτε για μια δωρεάν δοκιμαστική έκδοση microsoft Fabric.
Εισέλθετε για να το Microsoft Fabric.
Χρησιμοποιήστε την εναλλαγή εμπειρίας στην κάτω αριστερή πλευρά της αρχικής σελίδας σας για να μεταβείτε σε Fabric.
- Εάν είναι απαραίτητο, δημιουργήστε μια λίμνη Microsoft Fabric όπως περιγράφεται στο Δημιουργία ενός lakehouse στο Microsoft Fabric.
Παρακολούθηση σε σημειωματάριο
Μπορείτε να κάνετε μία από αυτές τις επιλογές για να ακολουθήσετε τις οδηγίες σε ένα σημειωματάριο:
- Ανοίξτε και εκτελέστε το ενσωματωμένο σημειωματάριο.
- Αποστείλετε το σημειωματάριό σας από το GitHub.
Άνοιγμα του ενσωματωμένου σημειωματάριου
Το δείγμα τον εντοπισμό απάτης σημειωματάριο συνοδεύει αυτό το πρόγραμμα εκμάθησης.
Για να ανοίξετε το δείγμα σημειωματάριου για αυτό το εκπαιδευτικό βοήθημα, ακολουθήστε τις οδηγίες στο Προετοιμασία του συστήματός σας για εκπαιδευτικά βοηθήματα επιστήμης δεδομένων.
Βεβαιωθείτε ότι επισυνάψετε μια λίμνη στο σημειωματάριο προτού ξεκινήσετε την εκτέλεση κώδικα.
Εισαγωγή του σημειωματάριου από το GitHub
Το σημειωματάριο AIsample - Fraud Detection.ipynb συνοδεύει αυτό το πρόγραμμα εκμάθησης.
Για να ανοίξετε το σημειωματάριο που συνοδεύει αυτό το εκπαιδευτικό βοήθημα, ακολουθήστε τις οδηγίες στο Προετοιμασία του συστήματός σας για εκπαιδευτικά βοηθήματα επιστήμης δεδομένων, να εισαγάγετε το σημειωματάριο στον χώρο εργασίας σας.
Εάν προτιμάτε να αντιγράψετε και να επικολλήσετε τον κώδικα από αυτήν τη σελίδα, μπορείτε να δημιουργήσετε ένα νέο σημειωματάριο.
Βεβαιωθείτε ότι επισυνάψετε μια λίμνη στο σημειωματάριο προτού ξεκινήσετε την εκτέλεση κώδικα.
Βήμα 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, ανατρέξτε στη σελίδα αναφοράς scikit-learn για τη μέθοδο SMOTE και στο οδηγίες χρήσης scikit-learn σχετικά με την υπερβολική χρήση πόρων.
Εκπαίδευση μοντέλων εκμάθησης μηχανής και εκτέλεση πειραμάτων
Το 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).
Σε ορισμένες περιπτώσεις, είναι πιο κατάλληλο να αξιολογήσετε τον ταξινομητή σας με βάση τη μέτρηση Περιοχή κάτω από την Precision-Recall καμπύλης (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")
Σχετικό περιεχόμενο
- Πώς μπορείτε να χρησιμοποιήσετε σημειωματάρια Microsoft Fabric
- μοντέλο εκμάθησης μηχανής στο Microsoft Fabric
- Εκπαίδευση μοντέλων εκμάθησης μηχανής
- πειράματα εκμάθησης μηχανής στο Microsoft Fabric