Zelfstudie: Een fraudedetectiemodel maken, evalueren en beoordelen
In deze zelfstudie vindt u een end-to-end-voorbeeld van een Synapse Data Science-werkstroom in Microsoft Fabric. In het scenario wordt een fraudedetectiemodel gebouwd met machine learning-algoritmen die zijn getraind op historische gegevens. Vervolgens wordt het model gebruikt om toekomstige frauduleuze transacties te detecteren.
In deze zelfstudie worden de volgende stappen behandeld:
- Aangepaste bibliotheken installeren
- De gegevens laden
- De gegevens begrijpen en verwerken via experimentele gegevensanalyse
- Scikit-learn gebruiken om een machine learning-model te trainen en experimenten bij te houden met de functies MLflow en Fabric Autologging
- Sla het machine learning-model op en registreer dit met de hoogste prestaties
- Het machine learning-model laden om te scoren en voorspellingen te doen
Voorwaarden
Een Microsoft Fabric-abonnementophalen. Of meld u aan voor een gratis microsoft Fabric-proefversie.
Meld u aan bij Microsoft Fabric-.
Gebruik de ervaringswisselaar aan de linkerkant van de startpagina om over te schakelen naar Fabric.
- Maak indien nodig een Microsoft Fabric Lakehouse zoals beschreven in Een lakehouse maken in Microsoft Fabric.
Volg mee in een notitieblok
U kunt een van deze opties kiezen om te volgen in een notitieboek.
- Open en voer het ingebouwde notebook uit.
- Upload uw notebook vanuit GitHub.
Het ingebouwde notebook openen
Het voorbeeld Fraudedetectie notitieboek begeleidt deze zelfstudie.
Als u het voorbeeldnotitieblok voor deze zelfstudie wilt openen, volgt u de instructies in Uw systeem voorbereiden op zelfstudies voor gegevenswetenschap.
Zorg ervoor dat je een lakehouse koppelt aan het notebook voordat je begint met het uitvoeren van code.
Het notebook importeren vanuit GitHub
De AIsample - Fraud Detection.ipynb notebook begeleidt deze zelfstudie.
Als u het bijbehorende notitieblok voor deze zelfstudie wilt openen, volgt u de instructies in Uw systeem voorbereiden op zelfstudies voor gegevenswetenschap om het notebook in uw werkruimte te importeren.
Als u liever de code van deze pagina kopieert en plakt, kunt u een nieuw notitieblok maken.
Zorg ervoor dat een lakehouse aan het notebook koppelen voordat u begint met het uitvoeren van code.
Stap 1: Aangepaste bibliotheken installeren
Voor het ontwikkelen van machine learning-modellen of ad-hocgegevensanalyse moet u mogelijk snel een aangepaste bibliotheek voor uw Apache Spark-sessie installeren. U hebt twee opties om bibliotheken te installeren.
- Gebruik de inline-installatiemogelijkheden (
%pip
of%conda
) van uw notitieblok om alleen een bibliotheek in uw huidige notitieblok te installeren. - U kunt ook een Fabric-omgeving maken, bibliotheken installeren uit openbare bronnen of aangepaste bibliotheken ernaar uploaden. Vervolgens kan uw werkruimtebeheerder de omgeving als standaard voor de werkruimte koppelen. Alle bibliotheken in de omgeving zijn vervolgens beschikbaar voor gebruik in notebooks en Spark-taakdefinities in de werkruimte. Zie een omgeving maken, configureren en gebruiken in Microsoft Fabricvoor meer informatie over omgevingen.
Voor deze zelfstudie gebruikt u %pip install
om de imblearn
-bibliotheek in uw notebook te installeren.
Notitie
De PySpark-kernel wordt opnieuw opgestart nadat %pip install
wordt uitgevoerd. Installeer de benodigde bibliotheken voordat u andere cellen uitvoert.
# Use pip to install imblearn
%pip install imblearn
Stap 2: de gegevens laden
De gegevensset voor fraudedetectie bevat creditcardtransacties, van september 2013, die Europese kaarthouders in de loop van twee dagen hebben gemaakt. De gegevensset bevat alleen numerieke functies vanwege een PCA-transformatie (Principal Component Analysis) die is toegepast op de oorspronkelijke functies. PCA heeft alle functies getransformeerd, met uitzondering van Time
en Amount
. Om vertrouwelijkheid te beschermen, kunnen we de oorspronkelijke functies of meer achtergrondinformatie over de gegevensset niet opgeven.
Deze details beschrijven de gegevensset:
- De
V1
,V2
,V3
, ...,V28
functies zijn de belangrijkste onderdelen die zijn verkregen met PCA - De
Time
-functie bevat de verstreken seconden tussen een transactie en de eerste transactie in de gegevensset - De
Amount
-functie is het transactiebedrag. U kunt deze functie gebruiken voor voorbeeldafhankelijke, kostengevoelige training - De kolom
Class
is de antwoordvariabele (doelvariabele). Het heeft de waarde1
voor fraude en0
anders
Slechts 492 transacties, van de 284.807 transacties, zijn frauduleus. De gegevensset is zeer onevenwichtig, omdat de minderheidsklasse (frauduleus) slechts ongeveer 0,172% van de gegevens bevat.
In deze tabel ziet u een voorbeeld van de creditcard.csv gegevens:
Tijd | 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 | Aantal | Klas |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
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" |
De gegevensset downloaden en uploaden naar het lakehouse
Definieer deze parameters, zodat u dit notebook kunt gebruiken met verschillende gegevenssets:
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
Met deze code wordt een openbaar beschikbare versie van de gegevensset gedownload en vervolgens opgeslagen in een Fabric Lakehouse.
Belangrijk
Zorg ervoor dat u een lakehouse- aan het notebook toevoegt voordat u het uitvoert. Anders krijgt u een foutmelding.
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-experiment-tracking instellen
In het proces voor het bijhouden van experimenten worden alle relevante experimentgerelateerde informatie opgeslagen voor elk experiment dat u uitvoert. Soms hebt u geen manier om betere resultaten te verkrijgen wanneer u een specifiek experiment uitvoert. In die gevallen moet u het experiment stoppen en een nieuw experiment proberen.
De Synapse Data Science-ervaring in Microsoft Fabric bevat een functie voor automatisch aanmelden. Deze functie vermindert de hoeveelheid code die nodig is om de parameters, metrische gegevens en items van een machine learning-model automatisch te registreren tijdens de training. De functie breidt de mogelijkheden voor automatische aanmelding van MLflow uit. Het heeft een diepgaande integratie in de Data Science-ervaring.
Met automatische logboekregistratie kunt u eenvoudig de prestaties van verschillende modellen en experimenten bijhouden en vergelijken, zonder dat u handmatig hoeft bij te houden. Zie Autologging in Microsoft Fabricvoor meer informatie.
Als u automatische aanmelding van Microsoft Fabric in een notebooksessie wilt uitschakelen, roept u mlflow.autolog()
aan en stelt u disable=True
in:
# Set up MLflow for experiment tracking
import mlflow
mlflow.set_experiment(EXPERIMENT_NAME)
mlflow.autolog(disable=True) # Disable MLflow autologging
Ruwe gegevens lezen uit het lakehouse
Met deze code worden onbewerkte gegevens uit lakehouse gelezen:
df = (
spark.read.format("csv")
.option("header", "true")
.option("inferSchema", True)
.load(f"{DATA_FOLDER}/raw/{DATA_FILE}")
.cache()
)
Stap 3: Verkennende gegevensanalyse uitvoeren
In deze sectie verkent u eerst de onbewerkte gegevens en statistieken op hoog niveau. Als u de gegevens vervolgens wilt transformeren, cast u de kolommen naar de juiste typen en converteert u deze vanuit het Spark DataFrame naar een pandas DataFrame voor eenvoudigere visualisatie. Ten slotte verkent en visualiseert u de klassedistributies in de gegevens.
De onbewerkte gegevens weergeven
Verken de onbewerkte gegevens en bekijk statistieken op hoog niveau met de opdracht
display
. Voor meer informatie over gegevensvisualisatie, zie Notebook-visualisatie in Microsoft Fabric.display(df)
Enkele basisinformatie over de gegevensset afdrukken:
# Print dataset basic information print("records read: " + str(df.count())) print("Schema: ") df.printSchema()
De gegevens transformeren
Zet de kolommen van de gegevensset om naar de juiste typen.
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)
Converteer het Spark DataFrame naar een Pandas DataFrame voor eenvoudigere visualisatie en verwerking:
df_pd = df.toPandas()
De klassedistributie in de gegevensset verkennen
Geef de klassedistributie weer in de gegevensset:
# 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')
De code retourneert deze distributie van gegevenssetklassen: 99,83%
No Frauds
en 0,17%Frauds
. Deze klassedistributie toont dat de meeste transacties niet-frauduleus zijn. Daarom is gegevensvoorverwerking vereist voordat het model wordt getraind, om overfitting te voorkomen.Gebruik een plot om de onbalans van de klasse in de gegevensset weer te geven door de distributie van frauduleuze versus niet-frauduleuze transacties weer te geven:
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)
De samenvatting van vijf getallen (minimumscore, eerste kwartiel, mediaan, derde kwartiel en maximumscore) weergeven voor het transactiebedrag, met boxplots:
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()
Voor zeer onevenwichtige gegevens tonen boxplots mogelijk geen nauwkeurige inzichten. U kunt echter eerst het
Class
onevenwichtsprobleem oplossen en vervolgens dezelfde grafieken maken voor nauwkeurigere inzichten.
Stap 4: De modellen trainen en evalueren
Hier traint u een LightGBM-model om de fraudetransacties te classificeren. U traint een LightGBM-model op zowel de onevenwichtige gegevensset als de evenwichtige gegevensset. Vervolgens vergelijkt u de prestaties van beide modellen.
Trainings- en testgegevenssets voorbereiden
Voordat u gaat trainen, splitst u de gegevens op in de trainings- en testgegevenssets:
# 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 toepassen op de trainingsgegevensset
De imblearn
-bibliotheek maakt gebruik van de Synthetic Minority Oversampling Technique (SMOTE) methode om het probleem van onevenwichtige classificatie aan te pakken. Onevenwichtige classificatie treedt op wanneer er te weinig voorbeelden van de minderheidsklasse beschikbaar zijn, zodat een model de beslissingsgrens effectief kan leren. SMOTE is de meest gebruikte benadering om nieuwe steekproeven voor de minderheidsklasse te synthetiseren.
Pas SMOTE alleen toe op de trainingsgegevensset in plaats van de testgegevensset. Wanneer u het model met de testgegevens beoordeelt, hebt u een benadering van de modelprestaties nodig voor niet-gezien gegevens in de productieomgeving. Voor een geldige benadering zijn uw testgegevens afhankelijk van de oorspronkelijke onevenwichtige verdeling om productiegegevens zo dicht mogelijk weer te geven.
# 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)
Voor meer informatie over SMOTE, zie de scikit-learn referentiepagina voor de SMOTE-methode en de scikit-learn-gebruikershandleiding voor oversampling-bronnen .
Machine Learning-modellen trainen en experimenten uitvoeren
Apache Spark, in Microsoft Fabric, maakt machine learning mogelijk met big data. Met Apache Spark kunt u waardevolle inzichten verkrijgen uit grote hoeveelheden gestructureerde, ongestructureerde en snel veranderende gegevens.
U hebt verschillende beschikbare opties voor het trainen van machine learning-modellen met Apache Spark in Microsoft Fabric: Apache Spark MLlib, SynapseML en andere opensourcebibliotheken. Zie Machine Learning-modellen trainen in Microsoft Fabricvoor meer informatie.
Een machine learning-experiment fungeert als de primaire eenheid van de organisatie en controle voor alle gerelateerde machine learning-uitvoeringen. Een run komt overeen met een enkele uitvoering van de modelcode. Machine learning experimenttracking omvat het beheer van alle experimenten en hun onderdelen, zoals parameters, metrische gegevens, modellen en andere artefacten.
Voor het bijhouden van experimenten kunt u alle vereiste onderdelen van een specifiek machine learning-experiment organiseren. Daarnaast kunt u eenvoudig eerdere resultaten reproduceren met opgeslagen experimenten. Zie Machine Learning-experimenten in Microsoft Fabricvoor meer informatie over machine learning-experimenten.
Als u meer metrische gegevens, parameters en bestanden wilt bijhouden, stelt u
exclusive=False
in om de configuratie voor automatische aanmelding van MLflow bij te werken:mlflow.autolog(exclusive=False)
Train twee modellen met LightGBM. Het ene model verwerkt de onevenwichtige gegevensset en het andere model verwerkt de evenwichtige gegevensset (via SMOTE). Vergelijk vervolgens de prestaties van de twee modellen.
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), ], )
Het belang van functies voor training bepalen
Bepaal het belang van functies voor het model dat u hebt getraind op de onevenwichtige gegevensset:
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")
Bepaal het belang van functies voor het model dat u hebt getraind op evenwichtige gegevens. SMOTE heeft de evenwichtige gegevens gegenereerd:
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")
Als u een model wilt trainen met de onevenwichtige gegevensset, hebben de belangrijke functies aanzienlijke verschillen in vergelijking met een model dat is getraind met de evenwichtige gegevensset.
De modellen evalueren
Hier evalueert u de twee getrainde modellen:
-
model
getraind op onbewerkte, onevenwichtige gegevens -
smote_model
getraind op evenwichtige gegevens
Metrische gegevens van rekenmodel
Definieer een
prediction_to_spark
-functie die voorspellingen uitvoert en converteert de voorspellingsresultaten naar een Spark DataFrame. Vervolgens kunt u modelstatistieken berekenen voor de voorspellingsresultaten met 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
Gebruik de functie
prediction_to_spark
om voorspellingen uit te voeren met de twee modellen,model
ensmote_model
:predictions = prediction_to_spark(model, test) smote_predictions = prediction_to_spark(smote_model, test) predictions.limit(10).toPandas()
Reken metrische gegevens voor de twee modellen:
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)
Modelprestaties evalueren met een verwarringsmatrix
Een verwarringsmatrix geeft het aantal
- true positives (TP)
- terechte negatieven (TN)
- vals-positieven (FP)
- vals-negatieven (FN)
dat een model produceert wanneer het beoordeeld wordt met testgegevens. Voor binaire classificatie retourneert het model een 2x2
verwarringsmatrix. Voor classificatie met meerdere klassen retourneert het model een nxn
verwarringsmatrix, waarbij n
het aantal klassen is.
Gebruik een verwarringsmatrix om de prestaties van de getrainde machine learning-modellen op de testgegevens samen te vatten:
# 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)
Teken de verwarringsmatrix voor de voorspellingen van
smote_model
(getraind op gebalanceerde gegevens):# 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")
Plot de verwarringsmatrix voor de voorspellingen van
model
(getraind op onbewerkte, onevenwichtige gegevens):with mlflow.start_run(run_id=raw_run.info.run_id): ax = plot(cm) mlflow.log_figure(ax.figure, "ConfusionMatrix.png")
Modelprestaties evalueren met AUC-ROC en AUPRC-metingen
De maatstaaf Area Under the Curve Receiver Operating Characteristic (AUC-ROC) beoordeelt de prestaties van binaire classificatiesystemen. De AUC-ROC-grafiek visualiseert de afweging tussen het positief percentage (TPR) en het vals positief percentage (FPR).
In sommige gevallen is het beter om uw classificatie te evalueren op basis van de meting Area Under the Precision-Recall Curve (AUPRC). De AUPRC-curve combineert deze tarieven:
- De precisie of de positieve voorspellende waarde (PPV)
- De terugroeping, of TPR
Prestaties evalueren met de AUC-ROC- en AUPRC-metingen:
Definieer een functie die de AUC-ROC en AUPRC-metingen retourneert:
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
Registreer de metrische gegevens AUC-ROC en AUPRC voor het model dat u hebt getraind op onevenwichtige gegevens:
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})
Registreer de metrische gegevens van AUC-ROC en AUPRC voor het model dat u hebt getraind op evenwichtige gegevens:
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})
Het model dat is getraind op de evenwichtige gegevens retourneert hogere AUC-ROC en AUPRC-waarden vergeleken met het model dat is getraind op de onbalansgegevens. Op basis van deze maatregelen lijkt SMOTE een effectieve techniek om de modelprestaties te verbeteren bij het werken met zeer onevenwichtige gegevens.
Zoals in de volgende afbeelding wordt weergegeven, wordt elk experiment geregistreerd met de bijbehorende naam. U kunt de experimentparameters en metrische prestatiegegevens in uw werkruimte bijhouden.
In deze afbeelding ziet u de metrische prestatiegegevens voor het model dat is getraind op de evenwichtige gegevensset (in versie 2):
U kunt versie 1 selecteren om de metrische gegevens voor het model te zien dat is getraind op de onevenwichtige gegevensset. Wanneer u de metrische gegevens vergelijkt, is de AUROC hoger voor het model dat is getraind met de evenwichtige gegevensset. Deze resultaten geven aan dat dit model beter is bij het correct voorspellen van 0
klassen als 0
en het voorspellen van 1
klassen als 1
.
Stap 5: De modellen registreren
Gebruik MLflow om de twee modellen te registreren:
# 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)
Stap 6: de voorspellingsresultaten opslaan
Met Microsoft Fabric kunnen gebruikers machine learning-modellen operationeel maken met de PREDICT
schaalbare functie. Deze functie ondersteunt batchverwerking (of batchinferentie) op elke rekenmachine.
U kunt batchvoorspellingen rechtstreeks genereren vanuit het Microsoft Fabric-notebook of op de itempagina van een model. Voor meer informatie over PREDICT
, zie Modellen beoordelen met PREDICT in Microsoft Fabric.
Laad het beter presterende model (versie 2) voor batchgewijs scoren en genereer de voorspellingsresultaten:
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)
Voorspellingen opslaan in lakehouse:
# Save the predictions to the lakehouse batch_predictions.write.format("delta").mode("overwrite").save(f"{DATA_FOLDER}/predictions/batch_predictions")