Jaa


Opetusohjelma: Kohotusmallin luominen, harjoittaminen ja arvioiminen

Tässä opetusohjelmassa esitellään päästä päähän -esimerkki Synapse Data Science -työnkulusta Microsoft Fabricissa. Opit luomaan, kouluttamaan ja arvioimaan kohotusmalleja ja käyttämään kohotuksen mallinnustekniikoita.

Edellytykset

  • Microsoft Fabric -muistikirjojen tunteminen
  • Tämän muistikirjan lakehouse, tähän esimerkkiin tallennustila. Lisätietoja on kohdassa Lisää lakehouse muistikirjaasi

Seuraa mukana muistikirjassa

Voit seurata muistikirjassa kahdella tavalla:

  • Avaa ja suorita sisäinen muistikirja Synapse Data Science -kokemuksessa
  • Lataa muistikirjasi GitHubista Synapse Data Science -kokemukseen

Avaa sisäinen muistikirja

Tämän opetusohjelman mukana on esimerkki uplift-mallinnusmuistikirjasta. Siirry kohtaan Opetusohjelman sisäänrakennetun näytemuistikirjan avaamiseksi Synapse Data Science -kokemuksesta:1. Siirry Synapse Data Science -aloitussivulle. 1. Valitse Käytä mallia. 1. Valitse vastaava malli:* Oletusarvoisesta Päästä päähän -työnkulut (Python) -välilehdestä, jos malli on tarkoitettu Python-opetusohjelmaa varten. * Päästä päähän -työnkulut (R) -välilehdeltä, jos malli on R-opetusohjelmaa varten. * Nopeat opetusohjelmat -välilehdestä, jos malli on tarkoitettu nopeaan opetusohjelmaan.1. Liitä muistikirjaan lakehouse, ennen kuin aloitat koodin suorittamisen. Saat lisätietoja sisäänrakennettujen mallimuistikirjojen käyttämisestä opetusohjelmia varten.

Opetusohjelman sisäinen näytemuistikirja avataan Synapse Data Science -kokemuksesta seuraavasti:

  1. Siirry Synapse Data Science -aloitussivulle

  2. Valitse Käytä mallia

  3. Valitse vastaava malli:

    1. Oletusarvoisen Päästä päähän -työnkulkujen (Python) välilehdestä, jos malli on tarkoitettu Python-opetusohjelmaa varten
    2. Jos malli on R-opetusohjelmaa varten, päästä päähän -työnkulkujen (R) välilehdeltä
    3. Pikaopetusohjelmat-välilehdestä, jos malli on pikaopetusohjelmaa varten
  4. Liitä lakehouse muistikirjaan ennen kuin aloitat koodin suorittamisen

Tuo muistikirja GitHubista

Tämän opetusohjelman mukana on AIsample - Uplift Modeling.ipynb -muistikirja.

Jos haluat avata tämän opetusohjelman liitteenä olevan muistikirjan, tuo muistikirja työtilaasi noudattamalla ohjeita kohdassa Järjestelmän valmisteleminen datatieteen opetusohjelmia varten.

Voit luoda uuden muistikirjan , jos haluat kopioida ja liittää koodin tältä sivulta.

Muista liittää lakehouse muistikirjaan ennen kuin aloitat koodin suorittamisen.

Vaihe 1: Lataa tiedot

Tietojoukko

Criteo AI Lab loi tietojoukon. Kyseisessä tietojoukossa on 13 miljoonaa riviä. Jokainen rivi edustaa yhtä käyttäjää. Jokaisella rivillä on 12 ominaisuutta, hoitoilmaisin ja kaksi binaaritunnistetta, jotka sisältävät vierailun ja muunnoksen.

Näyttökuva, jossa näkyy Criteo AI Lab -tietojoukon rakenne.

  • f0 – f11: ominaisuusarvot (tiheät, kelluvat arvot)
  • treatment: oliko käyttäjä satunnaisesti hoitokohde (esimerkiksi mainos) (1 = hoito, 0 = ohjausobjekti)
  • conversion: onko muuntaminen tapahtunut (esimerkiksi tehnyt oston) käyttäjälle (binaarinen, selite)
  • visit: onko käyttäjälle tehty muunto (esimerkiksi tehty osto) (binaarinen, selite)

Lainaukset

Tässä muistikirjassa käytetty tietojoukko edellyttää tätä BibTex-lainausmerkkiä:

@inproceedings{Diemert2018,
author = {{Diemert Eustache, Betlei Artem} and Renaudin, Christophe and Massih-Reza, Amini},
title={A Large Scale Benchmark for Uplift Modeling},
publisher = {ACM},
booktitle = {Proceedings of the AdKDD and TargetAd Workshop, KDD, London,United Kingdom, August, 20, 2018},
year = {2018}
}

Vihje

Määrittämällä seuraavat parametrit voit käyttää tätä muistikirjaa eri tietojoukoissa helposti.

IS_CUSTOM_DATA = False  # If True, the user must upload the dataset manually
DATA_FOLDER = "Files/uplift-modelling"
DATA_FILE = "criteo-research-uplift-v2.1.csv"

# Data schema
FEATURE_COLUMNS = [f"f{i}" for i in range(12)]
TREATMENT_COLUMN = "treatment"
LABEL_COLUMN = "visit"

EXPERIMENT_NAME = "aisample-upliftmodelling"  # MLflow experiment name

Tuontikirjastot

Ennen käsittelyä sinun on tuotava pakolliset Spark- ja SynapseML-kirjastot. Sinun täytyy tuoda myös tietojen visualisoinnin kirjasto , esimerkiksi Seaborn, Python-tietojen visualisoinnin kirjasto. Tietojen visualisointikirjasto tarjoaa korkean tason käyttöliittymän visuaalisten resurssien luomiseen DataFrame-kehyksissä ja matriiseissa. Lue lisätietoja Sparkista, SynapseML:stä ja Seabornista.

import os
import gzip

import pyspark.sql.functions as F
from pyspark.sql.window import Window
from pyspark.sql.types import *

import numpy as np
import pandas as pd

import matplotlib as mpl
import matplotlib.pyplot as plt
import matplotlib.style as style
import seaborn as sns

%matplotlib inline

from synapse.ml.featurize import Featurize
from synapse.ml.core.spark import FluentAPI
from synapse.ml.lightgbm import *
from synapse.ml.train import ComputeModelStatistics

import mlflow

Lataa tietojoukko ja lataa se Lakehouseen

Tämä koodi lataa tietojoukosta julkisesti saatavilla olevan version ja tallentaa sitten kyseisen tietoresurssin Fabric lakehouse -järjestelmään.

Tärkeä

Varmista, että lisäät muistikirjaan lakehousen , ennen kuin suoritat sen. Jos näin ei tehdä, tuloksena on virhe.

if not IS_CUSTOM_DATA:
    # Download demo data files into lakehouse if not exist
    import os, requests

    remote_url = "http://go.criteo.net/criteo-research-uplift-v2.1.csv.gz"
    download_file = "criteo-research-uplift-v2.1.csv.gz"
    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}/{DATA_FILE}"):
        r = requests.get(f"{remote_url}", timeout=30)
        with open(f"{download_path}/{download_file}", "wb") as f:
            f.write(r.content)
        with gzip.open(f"{download_path}/{download_file}", "rb") as fin:
            with open(f"{download_path}/{DATA_FILE}", "wb") as fout:
                fout.write(fin.read())
    print("Downloaded demo data files into lakehouse.")

Aloita muistikirjan suorituspalvelun tallennus.

# Record the notebook running time
import time

ts = time.time()

MLflow-kokeilujen seurannan määrittäminen

Jos haluat laajentaa MLflow-kirjaustoimintoja, automaattinen käyttöönotto tallentaa automaattisesti koneoppimismallin syöteparametrien arvot ja tulostemittarit sen harjoittamisen aikana. Nämä tiedot kirjataan sitten työtilaan, jossa MLflow-ohjelmointirajapinnat tai niitä vastaavat kokeilut työtilassa voivat käyttää ja visualisoida niitä. Tässä resurssissa on lisätietoja automaattisesta lokista.

# Set up the MLflow experiment
import mlflow

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

Muistiinpano

Jos haluat poistaa Microsoft Fabricin automaattisen lokerauksen käytöstä muistikirjaistunnossa, kutsu mlflow.autolog() ja määritä disable=True.

Tietojen lukeminen Lakehousesta

Lue raakatiedot Lakehouse Files - osiosta ja lisää sarakkeita eri päivämääräosille. Samoja tietoja käytetään ositetun delta-taulukon luomiseen.

raw_df = spark.read.csv(f"{DATA_FOLDER}/raw/{DATA_FILE}", header=True, inferSchema=True).cache()

Vaihe 2: Valmisteleva tietoanalyysi

Komennon display avulla voit tarkastella tietojoukkoa koskevia korkean tason tilastotietoja. Voit myös näyttää kaavionäkymät, joiden avulla voit helposti visualisoida tietojoukon alijoukkoja.

display(raw_df.limit(20))

Tarkista käyvien käyttäjien prosenttiosuus, muuntavien käyttäjien prosenttiosuus ja kääntyvien kävijöiden prosenttiosuus.

raw_df.select(
    F.mean("visit").alias("Percentage of users that visit"),
    F.mean("conversion").alias("Percentage of users that convert"),
    (F.sum("conversion") / F.sum("visit")).alias("Percentage of visitors that convert"),
).show()

Analyysin mukaan 4,9 % hoitoryhmän käyttäjistä - käyttäjät, jotka saivat hoidon tai mainonnan - vieraili verkkokaupassa. Vain 3,8 prosenttia kontrolliryhmän käyttäjistä - käyttäjät, jotka eivät koskaan saaneet hoitoa tai joita ei koskaan tarjottu tai paljastettu mainonnalle - tekivät samoin. Lisäksi 0,31 % kaikista hoitoryhmän käyttäjistä muunsi tai teki oston - ja vain 0,19 % hallintaryhmän käyttäjistä teki niin. Tämän seurauksena oston tehneiden kävijöiden, jotka olivat myös hoitoryhmän jäseniä, muuntamisaste on 6,36 %, kun taas hallintaryhmän käyttäjien muuntamisaste on vain 5,07%*. Näiden tulosten perusteella hoito voi mahdollisesti parantaa vierailunopeutta noin 1%, ja kävijöiden muuntamisnopeutta noin 1,3%. Hoito johtaa merkittävään parannukseen.

Vaihe 3: Määritä malli harjoittamista varten

Valmistele koulutus ja testaa tietojoukkoja

Tässä esimerkissä sovitat Featurize-muuntimen raw_df DataFrame-kehykseen, jotta voit poimia ominaisuuksia määritetyistä syötesarakkeista ja tulostaa nämä ominaisuudet uuteen sarakkeeseen nimeltä features.

Tulokseksi saatava DataFrame tallennetaan uuteen DataFrame-kehykseen, jonka nimi dfon .

transformer = Featurize().setOutputCol("features").setInputCols(FEATURE_COLUMNS).fit(raw_df)
df = transformer.transform(raw_df)
# Split the DataFrame into training and test sets, with a 80/20 ratio and a seed of 42
train_df, test_df = df.randomSplit([0.8, 0.2], seed=42)

# Print the training and test dataset sizes
print("Size of train dataset: %d" % train_df.count())
print("Size of test dataset: %d" % test_df.count())

# Group the training dataset by the treatment column, and count the number of occurrences of each value
train_df.groupby(TREATMENT_COLUMN).count().show()

Käsittelyn ja tietojoukkojen hallinnan valmisteleminen

Kun olet luonut harjoitus- ja testitietojoukot, sinun täytyy muodostaa myös hoito- ja hallintatietojoukot, jotta voit harjoittaa koneoppimismalleja nousun mittaamiseksi.

# Extract the treatment and control DataFrames
treatment_train_df = train_df.where(f"{TREATMENT_COLUMN} > 0")
control_train_df = train_df.where(f"{TREATMENT_COLUMN} = 0")

Nyt kun olet valmistellut tietosi, voit jatkaa mallin harjoittamista LightGBM:llä.

Uplift-mallinnus: T-Learner LightGBM:llä

Metaoppijat ovat joukko algoritmeja, jotka on kehitetty koneoppimisalgoritmien, kuten LightGBM: n, Xgboostin, päälle. Ne auttavat arvioimaan ehdollista keskimääräistä hoitovaikutusta tai CATE:ta. T-learner on meta-oppija, joka ei käytä yksittäistä mallia. Sen sijaan T-learner käyttää yhtä mallia käsittelymuuttujaa kohden. Siksi kehitetään kaksi mallia, ja meta-oppijaan viitataan T-learner-parametrina. T-learner käyttää useita koneoppimismalleja ratkaistakseen ongelman, joka ilmenee, kun hän hylkää hoidon kokonaan pakottamalla oppijan jakamaan sen ensimmäisen kerran.

mlflow.autolog(exclusive=False)
classifier = (
    LightGBMClassifier(dataTransferMode="bulk")
    .setFeaturesCol("features")  # Set the column name for features
    .setNumLeaves(10)  # Set the number of leaves in each decision tree
    .setNumIterations(100)  # Set the number of boosting iterations
    .setObjective("binary")  # Set the objective function for binary classification
    .setLabelCol(LABEL_COLUMN)  # Set the column name for the label
)

# Start a new MLflow run with the name "uplift"
active_run = mlflow.start_run(run_name="uplift")

# Start a new nested MLflow run with the name "treatment"
with mlflow.start_run(run_name="treatment", nested=True) as treatment_run:
    treatment_run_id = treatment_run.info.run_id  # Get the ID of the treatment run
    treatment_model = classifier.fit(treatment_train_df)  # Fit the classifier on the treatment training data

# Start a new nested MLflow run with the name "control"
with mlflow.start_run(run_name="control", nested=True) as control_run:
    control_run_id = control_run.info.run_id  # Get the ID of the control run
    control_model = classifier.fit(control_train_df)  # Fit the classifier on the control training data
     

Käytä ennusteena testitietojoukkoa

Tässä käytetään treatment_model - ja control_model-parametria, jotka on molemmat määritetty aiemmin, testitietojoukon muuntamiseen test_df . Sitten lasket ennustetun nousun. Määrität ennustetun nousun siten, että se eroaa ennustetun hoitotuloksen ja ennustetun ohjausobjektituloksen välillä. Mitä suurempi tämä ennustettu kohotusero, sitä parempi on hoidon tehokkuus (esimerkiksi mainonta) yksilössä tai alaryhmässä.

getPred = F.udf(lambda v: float(v[1]), FloatType())

# Cache the resulting DataFrame for easier access
test_pred_df = (
    test_df.mlTransform(treatment_model)
    .withColumn("treatment_pred", getPred("probability"))
    .drop("rawPrediction", "probability", "prediction")
    .mlTransform(control_model)
    .withColumn("control_pred", getPred("probability"))
    .drop("rawPrediction", "probability", "prediction")
    .withColumn("pred_uplift", F.col("treatment_pred") - F.col("control_pred"))
    .select(TREATMENT_COLUMN, LABEL_COLUMN, "treatment_pred", "control_pred", "pred_uplift")
    .cache()
)

# Display the first twenty rows of the resulting DataFrame
display(test_pred_df.limit(20))

Mallin arvioinnin suorittaminen

Koska yksittäisten henkilöiden todellista nousua ei voida tarkkailla, sinun on mitattava henkilön ryhmän kohenemista. Käytät Uplift-käyrää, joka piirtää todellisen, kumulatiivisen nousun koko väestöön.

Näyttökuva kaaviosta, jossa näkyy normalisoitu kohotusmallin käyrä verrattuna satunnaiseen hoitoon.

X-akseli edustaa hoitoa varten valitun populaation suhdetta. Arvo 0 ei viittaa siihen, että hoitoryhmää ei tarjota - kukaan ei altistu hoidolle tai tarjoa sitä. Arvo 1 viittaa täyteen hoitoryhmään - kaikki altistuvat hoidolle tai heille tarjotaan. Y-akselilla näkyy nostuksen mittari. Tarkoituksena on löytää hoitoryhmän koko tai prosenttiosuus väestöstä, joka tarjottaisiin tai altistettaisiin hoidolle (esimerkiksi mainonta). Tämä lähestymistapa optimoi kohdevalinnan tuloksen optimoimiseksi.

Aseta ensin testin DataFrame-järjestys järjestykseen ennustetun nousun mukaan. Ennustettu kohotus on ennustetun hoitotuloksen ja ennustetun hallinnan tuloksen välinen ero.

# Compute the percentage rank of the predicted uplift values in descending order, and display the top twenty rows
test_ranked_df = test_pred_df.withColumn("percent_rank", F.percent_rank().over(Window.orderBy(F.desc("pred_uplift"))))

display(test_ranked_df.limit(20))

Laske seuraavaksi käyntien kumulatiivinen prosenttiosuus sekä hoito- että ohjausryhmissä.

# Calculate the number of control and treatment samples
C = test_ranked_df.where(f"{TREATMENT_COLUMN} == 0").count()
T = test_ranked_df.where(f"{TREATMENT_COLUMN} != 0").count()

# Add columns to the DataFrame to calculate the control and treatment cumulative sum
test_ranked_df = (
    test_ranked_df.withColumn(
        "control_label",
        F.when(F.col(TREATMENT_COLUMN) == 0, F.col(LABEL_COLUMN)).otherwise(0),
    )
    .withColumn(
        "treatment_label",
        F.when(F.col(TREATMENT_COLUMN) != 0, F.col(LABEL_COLUMN)).otherwise(0),
    )
    .withColumn(
        "control_cumsum",
        F.sum("control_label").over(Window.orderBy("percent_rank")) / C,
    )
    .withColumn(
        "treatment_cumsum",
        F.sum("treatment_label").over(Window.orderBy("percent_rank")) / T,
    )
)

# Display the first 20 rows of the dataframe
display(test_ranked_df.limit(20))

Laske lopuksi kunkin prosenttiosuuden kohdalla ryhmän nousu erotuksena käsittelyn ja ohjausobjektiryhmien välisen käyntien kumulatiivisen prosenttiosuuden välillä.

test_ranked_df = test_ranked_df.withColumn("group_uplift", F.col("treatment_cumsum") - F.col("control_cumsum")).cache()
display(test_ranked_df.limit(20))

Piirtää nyt testitietojoukon ennusteen kohotuskäyrän. PySpark-tietokehys on muunnettava Pandas DataFrame -kehykseksi ennen piirtämistä.

def uplift_plot(uplift_df):
    """
    Plot the uplift curve
    """
    gain_x = uplift_df.percent_rank
    gain_y = uplift_df.group_uplift
    # Plot the data
    fig = plt.figure(figsize=(10, 6))
    mpl.rcParams["font.size"] = 8

    ax = plt.plot(gain_x, gain_y, color="#2077B4", label="Normalized Uplift Model")

    plt.plot(
        [0, gain_x.max()],
        [0, gain_y.max()],
        "--",
        color="tab:orange",
        label="Random Treatment",
    )
    plt.legend()
    plt.xlabel("Porportion Targeted")
    plt.ylabel("Uplift")
    plt.grid()

    return fig, ax


test_ranked_pd_df = test_ranked_df.select(["pred_uplift", "percent_rank", "group_uplift"]).toPandas()
fig, ax = uplift_plot(test_ranked_pd_df)

mlflow.log_figure(fig, "UpliftCurve.png")

Näyttökuva kaaviosta, jossa näkyy normalisoitu kohotusmallin käyrä verrattuna satunnaiseen hoitoon.

X-akseli edustaa hoitoa varten valitun populaation suhdetta. Arvo 0 ei viittaa siihen, että hoitoryhmää ei tarjota - kukaan ei altistu hoidolle tai tarjoa sitä. Arvo 1 viittaa täyteen hoitoryhmään - kaikki altistuvat hoidolle tai heille tarjotaan. Y-akselilla näkyy nostuksen mittari. Tarkoituksena on löytää hoitoryhmän koko tai prosenttiosuus väestöstä, joka tarjottaisiin tai altistettaisiin hoidolle (esimerkiksi mainonta). Tämä lähestymistapa optimoi kohdevalinnan tuloksen optimoimiseksi.

Aseta ensin testin DataFrame-järjestys järjestykseen ennustetun nousun mukaan. Ennustettu kohotus on ennustetun hoitotuloksen ja ennustetun hallinnan tuloksen välinen ero.

# Compute the percentage rank of the predicted uplift values in descending order, and display the top twenty rows
test_ranked_df = test_pred_df.withColumn("percent_rank", F.percent_rank().over(Window.orderBy(F.desc("pred_uplift"))))

display(test_ranked_df.limit(20))

Laske seuraavaksi käyntien kumulatiivinen prosenttiosuus sekä hoito- että ohjausryhmissä.

# Calculate the number of control and treatment samples
C = test_ranked_df.where(f"{TREATMENT_COLUMN} == 0").count()
T = test_ranked_df.where(f"{TREATMENT_COLUMN} != 0").count()

# Add columns to the DataFrame to calculate the control and treatment cumulative sum
test_ranked_df = (
    test_ranked_df.withColumn(
        "control_label",
        F.when(F.col(TREATMENT_COLUMN) == 0, F.col(LABEL_COLUMN)).otherwise(0),
    )
    .withColumn(
        "treatment_label",
        F.when(F.col(TREATMENT_COLUMN) != 0, F.col(LABEL_COLUMN)).otherwise(0),
    )
    .withColumn(
        "control_cumsum",
        F.sum("control_label").over(Window.orderBy("percent_rank")) / C,
    )
    .withColumn(
        "treatment_cumsum",
        F.sum("treatment_label").over(Window.orderBy("percent_rank")) / T,
    )
)

# Display the first 20 rows of the dataframe
display(test_ranked_df.limit(20))

Laske lopuksi kunkin prosenttiosuuden kohdalla ryhmän nousu erotuksena käsittelyn ja ohjausobjektiryhmien välisen käyntien kumulatiivisen prosenttiosuuden välillä.

test_ranked_df = test_ranked_df.withColumn("group_uplift", F.col("treatment_cumsum") - F.col("control_cumsum")).cache()
display(test_ranked_df.limit(20))

Piirtää nyt testitietojoukon ennusteen kohotuskäyrän. PySpark-tietokehys on muunnettava Pandas DataFrame -kehykseksi ennen piirtämistä.

def uplift_plot(uplift_df):
    """
    Plot the uplift curve
    """
    gain_x = uplift_df.percent_rank
    gain_y = uplift_df.group_uplift
    # Plot the data
    fig = plt.figure(figsize=(10, 6))
    mpl.rcParams["font.size"] = 8

    ax = plt.plot(gain_x, gain_y, color="#2077B4", label="Normalized Uplift Model")

    plt.plot(
        [0, gain_x.max()],
        [0, gain_y.max()],
        "--",
        color="tab:orange",
        label="Random Treatment",
    )
    plt.legend()
    plt.xlabel("Porportion Targeted")
    plt.ylabel("Uplift")
    plt.grid()

    return fig, ax


test_ranked_pd_df = test_ranked_df.select(["pred_uplift", "percent_rank", "group_uplift"]).toPandas()
fig, ax = uplift_plot(test_ranked_pd_df)

mlflow.log_figure(fig, "UpliftCurve.png")

Näyttökuva kaaviosta, jossa näkyy normalisoitu kohotusmallin käyrä verrattuna satunnaiseen hoitoon.

Analyysi ja kohotuskäyrä osoittavat, että ennusteen mukaan paremmuusjärjestyksessä 20 prosentin populaatiolla olisi suuri voitto, jos he saisivat hoitoa. Tämä tarkoittaa sitä, että 20 % väestöstä edustaa taivutettavia ryhmiä. Tämän vuoksi voit määrittää hoitoryhmän halutun koon katkaisupistemääräksi 20 %, jotta kohdevalinta-asiakkaat voidaan tunnistaa suurimmasta vaikutuksesta.

cutoff_percentage = 0.2
cutoff_score = test_ranked_pd_df.iloc[int(len(test_ranked_pd_df) * cutoff_percentage)][
    "pred_uplift"
]

print("Uplift scores that exceed {:.4f} map to Persuadables.".format(cutoff_score))
mlflow.log_metrics(
    {"cutoff_score": cutoff_score, "cutoff_percentage": cutoff_percentage}
)

Vaihe 4: rekisteröi lopullinen koneoppimismalli

MLflow-painikkeilla voit seurata ja kirjata lokiin kaikki hoito- ja ohjausryhmien kokeet. Tämä seuranta ja kirjaaminen sisältävät vastaavat parametrit, mittarit ja mallit. Nämä tiedot kirjataan kokeilun nimellä työtilassa myöhempää käyttöä varten.

# Register the model
treatment_model_uri = "runs:/{}/model".format(treatment_run_id)
mlflow.register_model(treatment_model_uri, f"{EXPERIMENT_NAME}-treatmentmodel")

control_model_uri = "runs:/{}/model".format(control_run_id)
mlflow.register_model(control_model_uri, f"{EXPERIMENT_NAME}-controlmodel")

mlflow.end_run()

Voit tarkastella kokeitasi:

  1. Valitse vasemmassa paneelissa työtilasi.
  2. Etsi ja valitse kokeilun nimi, tässä tapauksessa aisample-upliftmodelling.

Näyttökuvassa näkyvät erinomaiset mallinnuskokeilutulokset.

Vaihe 5: Tallenna ennustetulokset

Microsoft Fabric tarjoaa PREDICT-skaalattavan funktion, joka tukee erän pisteytystä missä tahansa laskentamoduulissa. Sen avulla asiakkaat voivat operationalisoida koneoppimismalleja. Käyttäjät voivat luoda eräennusteita suoraan muistikirjasta tai tietyn mallin kohdesivulta. Tässä resurssissa on lisätietoja PREDICT-funktiosta ja siitä, miten voit käyttää PREDICT-funktiota Microsoft Fabricissa.

# Load the model back
loaded_treatmentmodel = mlflow.spark.load_model(treatment_model_uri, dfs_tmpdir="Files/spark")
loaded_controlmodel = mlflow.spark.load_model(control_model_uri, dfs_tmpdir="Files/spark")

# Make predictions
batch_predictions_treatment = loaded_treatmentmodel.transform(test_df)
batch_predictions_control = loaded_controlmodel.transform(test_df)
batch_predictions_treatment.show(5)
# Save the predictions in the lakehouse
batch_predictions_treatment.write.format("delta").mode("overwrite").save(
    f"{DATA_FOLDER}/predictions/batch_predictions_treatment"
)
batch_predictions_control.write.format("delta").mode("overwrite").save(
    f"{DATA_FOLDER}/predictions/batch_predictions_control"
)
# Determine the entire runtime
print(f"Full run cost {int(time.time() - ts)} seconds.")