Kurz: Vytvorenie, vyhodnotenie a skóre modelu zisťovania podvodov
Tento kurz predstavuje komplexný príklad pracovného postupu synapse Data Science v službe Microsoft Fabric. Tento scenár vytvára model zisťovania podvodov s algoritmami strojového učenia trénovanými na historické údaje. Potom použije model na zisťovanie budúcich podvodných transakcií.
V tomto kurze sú obsiahnuté tieto kroky:
- Inštalácia vlastných knižníc
- Načítanie údajov
- Pochopenie a spracovanie údajov prostredníctvom prieskumnej analýzy údajov
- Použite scikit-learn na trénovanie modelu strojového učenia a sledovanie experimentov s funkciami toku MLflow a služby Fabric autologging
- Uloženie a registrácia modelu strojového učenia s najvyšším výkonom
- Načítajte model strojového učenia na bodovanie a na vytváranie predpovedí
Predpoklady
Získajte predplatné služby Microsoft Fabric . Alebo si zaregistrujte bezplatnú skúšobnú služby Microsoft Fabric.
Prihláste sa do služby Microsoft Fabric.
Pomocou prepínača skúseností v ľavej dolnej časti domovskej stránky sa prepnete na službu Fabric.
- Ak je to potrebné, vytvorte si podľa popisu v téme Vytvorenie jazera v službe Microsoft Fabric.
Sledovanie v poznámkovom bloke
Môžete si vybrať jednu z týchto možností, ktorú si môžete vyskúšať v notebooku:
- Otvorte a spustite vstavaný poznámkový blok.
- Nahrajte poznámkový blok z GitHubu.
Otvorenie vstavaného poznámkového bloku
Tento kurz sprevádza ukážkový poznámkový blok zisťovanie podvodov.
Ak chcete otvoriť vzorový poznámkový blok pre tento kurz, postupujte podľa pokynov v téme Príprava systému na kurzy dátovej vedy.
Uistite sa, že pripojiť lakehouse na notebook, ako začnete bežať kód.
Importovanie notebooku z GitHubu
Tento kurz sprevádza poznámkový blok AIsample – Fraud Detection.ipynb.
Ak chcete otvoriť sprievodný poznámkový blok pre tento kurz, postupujte podľa pokynov v téme Príprava systému na kurzy dátových vied na import notebooku do pracovného priestoru.
Ak by ste radšej skopírovali a prilepili kód z tejto stránky, môžete vytvoriť nový poznámkový blok.
Uistite sa, že pripojiť lakehouse k notebooku, ako začnete bežať kód.
Krok č. 1: Inštalácia vlastných knižníc
Na vývoj modelu strojového učenia alebo analýzu údajov ad hoc možno budete musieť rýchlo nainštalovať vlastnú knižnicu pre reláciu Apache Spark. Na inštaláciu knižníc máte dve možnosti.
- Ak chcete nainštalovať knižnicu iba v aktuálnom poznámkovom bloku, použite možnosti vnorenej inštalácie (
%pip
alebo%conda
). - Prípadne môžete vytvoriť prostredie služby Fabric, nainštalovať knižnice z verejných zdrojov alebo do neho nahrať vlastné knižnice a potom môže správca pracovného priestoru k prostrediu pripojiť ako predvolené prostredie pre pracovný priestor. Všetky knižnice v prostredí budú potom k dispozícii na použitie v poznámkových blokoch a definíciách úloh služby Spark v pracovnom priestore. Ďalšie informácie o prostrediach nájdete v téme vytvorenia, konfigurácie a používania prostredia v službe Microsoft Fabric.
V tomto kurze použite %pip install
na inštaláciu knižnice imblearn
v poznámkovom bloku.
Nota
Jadro PySpark sa reštartuje po spustení %pip install
. Pred spustením ďalších buniek nainštalujte potrebné knižnice.
# Use pip to install imblearn
%pip install imblearn
Krok č. 2: Načítanie údajov
Množina údajov zisťovania podvodov obsahuje transakcie kreditných kariet od septembra 2013, ktoré sa v priebehu dvoch dní uskutočnili v európskych držiteľoch kariet. Množina údajov obsahuje iba číselné funkcie z dôvodu transformácie hlavnej analýzy súčastí (PCA) použitej na pôvodné funkcie. PCA transformovala všetky funkcie okrem Time
a Amount
. Z dôvodu ochrany dôvernosti nemôžeme poskytnúť pôvodné funkcie ani ďalšie základné informácie o množine údajov.
Tieto podrobnosti popisujú množinu údajov:
- Funkcie
V1
,V2
,V3
, ...,V28
sú hlavné komponenty získané pomocou PCA - Funkcia
Time
obsahuje uplynulé sekundy medzi transakciou a prvou transakciou v množine údajov - Funkcia
Amount
je čiastka transakcie. Túto funkciu môžete použiť napríklad na výuku závislé od nákladov - Stĺpec
Class
je premenná odpovede (cieľ). Má hodnotu1
podvodov a v opačnom prípade0
hodnoty.
Iba 492 transakcií, z celkového počtu 284 807 transakcií, sú podvodné. Množina údajov sa veľmi nevyváži, pretože menšinová (podvodná) trieda predstavuje len približne 0,172% údajov.
Táto tabuľka zobrazuje ukážku údajov creditcard.csv:
Čas | 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 | Množstvo | Trieda |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
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" |
Stiahnite si množinu údajov a nahrajte ju do služby lakehouse
Definujte tieto parametre, aby ste mohli používať tento poznámkový blok s rôznymi množinami údajov:
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
Tento kód stiahne verejne dostupnú verziu množiny údajov a potom ju uloží v úložisku Fabric lakehouse.
Dôležitý
Uistite sa, že ste pred spustením pridali do notebooku. V opačnom prípade sa zobrazí chyba.
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.")
Nastavenie sledovania experimentov s MLflow
Proces sledovania experimentov uloží všetky relevantné informácie súvisiace s experimentom pre každý experiment, ktorý spustíte. Niekedy nemáte spôsob, ako získať lepšie výsledky pri spustení konkrétneho experimentu. V týchto prípadoch by ste mali experiment zastaviť a skúsiť nový.
Skúsenosti so službou Synapse Data Science v službe Microsoft Fabric zahŕňajú funkciu automatického označovania. Táto funkcia znižuje množstvo kódu potrebného na automatické zapisovanie parametrov, metrík a položiek modelu strojového učenia počas tréningu. Funkcia rozširuje možnosti automatického označovania toku MLflow. Má hlbokú integráciu v skúsenostiach z dátovej vedy.
Pomocou automatického označovania môžete jednoducho sledovať a porovnávať výkon rôznych modelov a experimentov bez toho, aby bolo potrebné manuálne sledovanie. Ďalšie informácie nájdete automatické označovanie v službe Microsoft Fabric.
Ak chcete zakázať automatické označovanie služby Microsoft Fabric v relácii poznámkového bloku, zavolajte mlflow.autolog()
a nastavte disable=True
:
# Set up MLflow for experiment tracking
import mlflow
mlflow.set_experiment(EXPERIMENT_NAME)
mlflow.autolog(disable=True) # Disable MLflow autologging
Prečítajte si nespracované údaje z jazera
Tento kód prečíta nespracované údaje z jazera:
df = (
spark.read.format("csv")
.option("header", "true")
.option("inferSchema", True)
.load(f"{DATA_FOLDER}/raw/{DATA_FILE}")
.cache()
)
Krok č. 3: Vykonanie prieskumnej analýzy údajov
V tejto časti najprv preskúmate nespracované údaje a štatistiky na vysokej úrovni. Ak chcete transformovať údaje, pretypujte stĺpce do správnych typov a skonvertujte ich z údajového rámca Spark na údajový rámec pandas, aby ste ich mohli jednoduchšie vizualizáciu skonvertovať. Nakoniec preskúmate a vizualizujete distribúcie tried v údajoch.
Zobrazenie nespracovaných údajov
Preskúmajte nespracované údaje a zobrazte si štatistiky vysokej úrovne pomocou príkazu
display
. Ďalšie informácie o vizualizácii údajov nájdete v téme Vizualizácia poznámkového blokov v službe Microsoft Fabric.display(df)
Vytlačte niektoré základné informácie o množine údajov:
# Print dataset basic information print("records read: " + str(df.count())) print("Schema: ") df.printSchema()
Transformácia údajov
Pretypovať stĺpce množiny údajov do správnych typov:
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)
Konvertujte údajový rámec Spark na údajový rámec Pandas na jednoduchšiu vizualizáciu a spracovanie:
df_pd = df.toPandas()
Preskúmanie distribúcie tried v množine údajov
Zobrazí distribúciu tried v množine údajov:
# 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')
Kód vráti toto rozdelenie triedy množiny údajov: 99,83%
No Frauds
a 0,17%Frauds
. Distribúcia tejto triedy ukazuje, že väčšina transakcií je neaudulentná. Pred trénovaním modelu je preto potrebné vopred poskytnúť údaje, aby sa zabránilo prepísaniu.Pomocou vykreslenia môžete v množine údajov zobraziť triednu nerovnováhu tým, že sa distribúcia podvodných a neaudulentných transakcií rozobrať:
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)
Zobraziť súhrn piatich čísel (minimálne skóre, prvý quartile, medián, tretí quartile a maximálne skóre) pre objem transakcie s vykreslenými políčkami:
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()
V prípade vysoko nevyvážených údajov nemusia rámčeky zobrazovať presné prehľady. Problém s
Class
nerovnováhou však môžete vyriešiť najprv a potom vytvoriť rovnaké vykreslenia, aby ste mali presnejšie prehľady.
Krok č. 4: Trénovanie a vyhodnotenie modelov
V tomto príklade trénujete model LightGBM na klasifikáciu transakcií podvodov. Model LightGBM trénujete na nevyváženej množine údajov aj na vyváženej množine údajov. Potom porovnajte výkon oboch modelov.
Príprava tréningových a testovacích množín údajov
Pred tréningom rozdeľte údaje do tréningových a testovacích množín údajov:
# 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]]
Použitie SMOTE na trénovateľskú množinu údajov
Knižnica imblearn
používa prístup Techniky oversampling syntetickej menšiny (SMOTE) na riešenie problému nevyváženej klasifikácie. Nevyvážená klasifikácia sa vyskytne, keď je k dispozícii príliš málo príkladov menšinovej triedy, aby model efektívne naučil rozhodovaciu hranicu. SMOTE je najpoužívanejší prístup na synchronizáciu nových vzoriek pre menšinové triedy.
Použite SMOTE iba na tréningová množinu údajov namiesto testovacej množiny údajov. Keď model skóre pomocou testovacích údajov, je potrebné približné hodnoty výkonu modelu na nezosobnených údajoch vo výrobe. Na aproximáciu sa vaše testovacie údaje spoliehajú na pôvodnú nevyváženú distribúciu, aby čo najužšie reprezentovali produkčné údaje.
# 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)
Ďalšie informácie o SMOTE nájdete na referenčnej stránke scikit-learn pre metódu SMOTE, kde aj príručku pre používateľov s súpravou scikit-learn o prepájaní zdrojov.
Trénovanie modelov strojového učenia a spúšťanie experimentov
Apache Spark v službe Microsoft Fabric umožňuje strojové učenie s veľkým objemom údajov. Pomocou Apache Spark môžete získať cenné prehľady z veľkého množstva štruktúrovaných, neštruktúrovaných a rýchlo sa pohybujúcich údajov.
Na trénovanie modelov strojového učenia so službou Apache Spark v službe Microsoft Fabric máte k dispozícii niekoľko možností: Apache Spark MLlib, SynapseML a ďalšie knižnice typu open-source. Ďalšie informácie nájdete
Experiment strojového učenia slúži ako primárna jednotka organizácie a kontroly pre všetky súvisiace spustenia strojového učenia. Spustenie zodpovedá jedinému vykonaniu kódu modelu. Strojové učenie sledovanie experimentov zahŕňa správu všetkých experimentov a ich súčastí, ako sú parametre, metriky, modely a ďalšie artefakty.
Na sledovanie experimentov môžete usporiadať všetky požadované súčasti konkrétneho experimentu strojového učenia. Vďaka uloženým experimentom môžete tiež jednoducho reprodukovať predchádzajúce výsledky. Ďalšie informácie o experimentoch strojového učenia nájdete v téme pokusoch strojového učenia v službe Microsoft Fabric.
Ak chcete sledovať ďalšie metriky, parametre a súbory, nastavte
exclusive=False
na aktualizáciu konfigurácie automatického označovania toku MLflow:mlflow.autolog(exclusive=False)
Trénujte dva modely pomocou LightGBM. Jeden model zvláda nevyváženú množinu údajov a druhý model zvláda vyváženú množinu údajov (cez SMOTE). Potom porovnajte výkon týchto dvoch modelov.
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), ], )
Určenie dôležitosti funkcie na školenie
Určenie dôležitosti funkcií pre model, ktorý ste natrénovali v nevyváženej množine údajov:
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")
Určte dôležitosť funkcie pre model, ktorý ste trénovali na vyvážených údajoch. SMOTE generované vyvážené dáta:
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")
Ak chcete trénovať model s nevyváženou množinou údajov, dôležité funkcie majú v porovnaní s modelom trénovaným s vyváženou množinou údajov významné rozdiely.
Vyhodnotenie modelov
V tomto príklade vyhodnotíte dva trénované modely:
-
model
sú trénované na nespracovaných a nevyvážených údajoch -
smote_model
trénované na vyvážených údajoch
Metriky výpočtového modelu
Definujte funkciu
prediction_to_spark
, ktorá vykonáva predpovede, a konvertuje výsledky predpovede na údajový rámec Spark. Následne môžete pomocou SynapseMLvypočítať štatistiky modelu z výsledkov predpovede.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
Pomocou funkcie
prediction_to_spark
môžete vykonávať predpovede s dvomi modelmi,model
asmote_model
:predictions = prediction_to_spark(model, test) smote_predictions = prediction_to_spark(smote_model, test) predictions.limit(10).toPandas()
Výpočtové metriky pre tieto dva modely:
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)
Vyhodnotenie výkonu modelu pomocou matice zmätku
Matica zmätok zobrazuje počet
- skutočne pozitívne (TP)
- skutočne negatívne (TN)
- falošne pozitívne (FP)
- falošne negatívne (FN)
hodnota, ktorú model vyprodukuje, keď sa ohodnotí testovacími údajmi. V prípade binárnej klasifikácie model vráti maticu 2x2
zmätok. V prípade multitriednej klasifikácie model vráti maticu nxn
zmätok, kde n
predstavuje počet tried.
Maticu zmätku použite na sumarizáciu výkonu trénovaných modelov strojového učenia na testovacích údajoch:
# 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)
Vykreslenie matice zmätku pre predpovede
smote_model
(trénované na vyvážených údajoch):# 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")
Vykreslenie matice zmätku pre predpovede
model
(trénované na nespracovaných, nevyvážených údajoch):with mlflow.start_run(run_id=raw_run.info.run_id): ax = plot(cm) mlflow.log_figure(ax.figure, "ConfusionMatrix.png")
Vyhodnotenie výkonu modelu pomocou AUC-ROC a mierok AUPRC
Oblasť pod prevádzkovou charakteristikou prijímača krivky (AUC-ROC) posudzuje výkon binárnych klasifikátorov. Graf AUC-ROC vizualizuje kompromis medzi skutočne pozitívnou sadzbou (TPR) a falošne pozitívnou sadzbou (FPR).
V niektorých prípadoch je vhodnejšie vyhodnotiť klasifikant na základe mierky Oblasť pod Precision-Recall krivky (AUPRC). Krivka AUPRC kombinuje tieto sadzby:
- Presnosť alebo kladná prediktívna hodnota (PPV)
- Odvolanie alebo TPR
Na vyhodnotenie výkonu pomocou mierok AUC-ROC a AUPRC:
Definujte funkciu, ktorá vráti AUC-ROC a mierky 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
Do denníka zapíšte metriky AUC-ROC a AUPRC pre model, ktorý ste trénovali na nevyvážené údaje:
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})
Do denníka zapíšte metriky AUC-ROC a AUPRC pre model, ktorý ste trénovali na vyvážené údaje:
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})
Model trénovaný na vyvážených údajoch vracia vyššiu AUC-ROC a hodnoty AUPRC v porovnaní s modelom trénovaným na nevyvážených údajoch. Na základe týchto opatrení sa zdá, že SMOTE je efektívnou technikou na zvýšenie výkonu modelu pri práci s vysoko nevyváženými údajmi.
Ako ukazuje nasledujúci obrázok, každý experiment sa zapíše do denníka s príslušným názvom. Parametre experimentu a metriky výkonu môžete sledovať vo svojom pracovnom priestore.
Tento obrázok zobrazuje metriky výkonu pre model trénovaný na vyváženej množine údajov (v verzii 2):
Môžete vybrať Verzie 1 a zobrazia sa metriky pre model trénovaný v nevyváženej množine údajov. Keď porovnávate metriky, verzia AUROC je vyššia pre model trénovaný s vyváženou množinou údajov. Tieto výsledky naznačujú, že tento model lepšie správne predpovedá triedy 0
ako 0
a predpovedá triedy 1
ako 1
.
Krok č. 5: Registrácia modelov
Na registráciu dvoch modelov použite 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)
Krok č. 6: Uloženie výsledkov predpovede
Microsoft Fabric umožňuje používateľom využiť modely strojového učenia pomocou PREDICT
škálovateľnej funkcie. Táto funkcia podporuje dávkové bodovanie (alebo odvodenie dávky) v akomkoľvek výpočtovom nástroji.
Predpovede dávky môžete vytvárať priamo z poznámkového bloku služby Microsoft Fabric alebo zo stránky položky modelu. Ďalšie informácie o PREDICT
nájdete v téme Skóre modelov pomocou funkcie PREDICT v službe Microsoft Fabric.
Načítajte model s lepším výkonom (verzia 2) na bodovanie šarží a vygenerujte výsledky predpovede:
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)
Uložiť predpovede do lakehouse:
# Save the predictions to the lakehouse batch_predictions.write.format("delta").mode("overwrite").save(f"{DATA_FOLDER}/predictions/batch_predictions")