Trénování a vyhodnocení modelu prognózování časových řad

V tomto poznámkovém bloku vytvoříme program pro předpověď dat časových řad, která mají sezónní cykly. Datovou sadu prodeje vlastností NYC používáme s daty od roku 2003 do roku 2015, kterou na portálu NYC Open Data Portal publikovalo oddělení NYC Finance.

Požadavky

Sledování v poznámkovém bloku

V poznámkovém bloku můžete postupovat jedním ze dvou způsobů:

  • Otevřete a spusťte integrovaný poznámkový blok v prostředí Datová Věda Synapse.
  • Nahrajte poznámkový blok z GitHubu do prostředí synapse Datová Věda.

Otevření integrovaného poznámkového bloku

Ukázkový poznámkový blok časové řady doprovází tento kurz.

Otevření integrovaného ukázkového poznámkového bloku kurzu v prostředí Datová Věda Synapse:

  1. Přejděte na domovskou stránku Synapse Datová Věda.

  2. Vyberte Použít ukázku.

  3. Vyberte odpovídající ukázku:

    • Pokud je ukázka pro kurz Pythonu, na výchozí kartě Kompletní pracovní postupy (Python ).
    • Pokud je ukázka kurzu jazyka R, na kartě Kompletní pracovní postupy (R).
    • Pokud je ukázka pro rychlý kurz, na kartě Rychlé kurzy .
  4. Než začnete spouštět kód, připojte k poznámkovému bloku lakehouse.

Import poznámkového bloku z GitHubu

AIsample – Time Series Forecasting.ipynb je poznámkový blok, který doprovází tento kurz.

Pokud chcete otevřít doprovodný poznámkový blok pro tento kurz, postupujte podle pokynů v části Příprava systému na kurzy datových věd a importujte poznámkový blok do pracovního prostoru.

Pokud byste raději zkopírovali a vložili kód z této stránky, můžete vytvořit nový poznámkový blok.

Než začnete spouštět kód, nezapomeňte k poznámkovému bloku připojit lakehouse.

Krok 1: Instalace vlastních knihoven

Při vývoji modelu strojového učení nebo zpracování ad hoc analýzy dat možná budete muset rychle nainstalovat vlastní knihovnu (například prophet v tomto poznámkovém bloku) pro relaci Apache Sparku. K tomu máte dvě možnosti.

  1. K rychlému zahájení práce s novými knihovnami můžete použít možnosti in-line instalace (například %pip, %condaatd.). Tím se nainstalují jenom vlastní knihovny v aktuálním poznámkovém bloku, ne v pracovním prostoru.
# Use pip to install libraries
%pip install <library name>

# Use conda to install libraries
%conda install <library name>
  1. Alternativně můžete vytvořit prostředí Infrastruktury, nainstalovat knihovny z veřejných zdrojů nebo do něj nahrát vlastní knihovny a správce pracovního prostoru pak může prostředí připojit jako výchozí pro pracovní prostor. Všechny knihovny v prostředí se pak zpřístupní pro použití v poznámkových blocích a definicích úloh Sparku v pracovním prostoru. Další informace o prostředích najdete v tématu vytvoření, konfigurace a použití prostředí v Microsoft Fabric.

Pro tento poznámkový blok použijete %pip install k instalaci prophet knihovny. Jádro PySpark se restartuje po %pip install. To znamená, že před spuštěním jiných buněk musíte knihovnu nainstalovat.

# Use pip to install Prophet
%pip install prophet

Krok 2: Načtení dat

Datová sada

Tento poznámkový blok používá datovou sadu dat prodejů vlastností NYC. Zabývá se daty z roku 2003 až 2015, které zveřejnilo oddělení financí NYC na portálu NYC Open Data Portal.

Datová sada obsahuje záznam o každém prodeji budovy na trhu nemovitostí v New Yorku během 13 let. Definice sloupců v datové sadě najdete v glosáři termínů pro soubory prodejů vlastností.

Čtvrti Okolí building_class_category tax_class block Mnoho eastment building_class_at_present adresa apartment_number zip_code residential_units commercial_units total_units land_square_feet gross_square_feet year_built tax_class_at_time_of_sale building_class_at_time_of_sale sale_price sale_date
Manhattan ABECEDNÍ MĚSTO 07 PRONÁJMŮ - WALKUP APARTMÁNY 0,0 384.0 17.0 C4 225 VÝCHOD 2ND STREET 10009.0 10.0 0,0 10.0 2145.0 6670.0 1900.0 2.0 C4 275000.0 2007-06-19
Manhattan ABECEDNÍ MĚSTO 07 PRONÁJMŮ - WALKUP APARTMÁNY 2.0 405.0 12.0 C7 508 EAST 12TH STREET 10009.0 28.0 2.0 30.0 3872.0 15428.0 1930.0 2.0 C7 7794005.0 2007-05-21

Cílem je vytvořit model, který na základě historických dat předpovídá měsíční celkové prodeje. K tomu použijete proroka, open source knihovnu prognóz, kterou vyvinul Facebook. Prorok je založen na doplňkovém modelu, kde nelineární trendy odpovídají denním, týdenním a ročním sezónním efektům a efektům svátků. Prorok funguje nejlépe u datových sad časových řad, které mají silné sezónní účinky, a několik sezón historických dat. Kromě toho Prorok robustně zpracovává chybějící data a odlehlé hodnoty dat.

Prorok používá rozkladný model časových řad, který se skládá ze tří součástí:

  • trend: Prorok předpokládá konstantní míru růstu s automatickým výběrem bodu změny.
  • sezónnost: Ve výchozím nastavení používá Prorok Fourier Series k přizpůsobení týdenní a roční sezónnosti.
  • svátky: Prorok vyžaduje všechny minulé a budoucí výskyty svátků. Pokud se v budoucnu neopakuje svátek, Prorok ji do prognózy nezahrne.

Tento poznámkový blok agreguje data měsíčně, takže přeskočí svátky.

Další informace o technikách modelování Proroka najdete v oficiálním dokumentu .

Stažení datové sady a nahrání do jezera

Zdroj dat se skládá z 15 .csv souborů. Tyto soubory obsahují záznamy o prodeji nemovitostí z pěti obvodů v New Yorku v letech 2003 až 2015. Pro usnadnění je nyc_property_sales.tar soubor obsahovat všechny tyto .csv soubory a zkomprimovat je do jednoho souboru. Veřejně dostupné úložiště objektů blob hostuje tento .tar soubor.

Tip

Pomocí parametrů zobrazených v této buňce kódu můžete tento poznámkový blok snadno použít na různé datové sady.

URL = "https://synapseaisolutionsa.blob.core.windows.net/public/NYC_Property_Sales_Dataset/"
TAR_FILE_NAME = "nyc_property_sales.tar"
DATA_FOLDER = "Files/NYC_Property_Sales_Dataset"
TAR_FILE_PATH = f"/lakehouse/default/{DATA_FOLDER}/tar/"
CSV_FILE_PATH = f"/lakehouse/default/{DATA_FOLDER}/csv/"

EXPERIMENT_NAME = "aisample-timeseries" # MLflow experiment name

Tento kód stáhne veřejně dostupnou verzi datové sady a pak uloží tuto datovou sadu do Fabric Lakehouse.

Důležité

Než ho spustíte, nezapomeňte do poznámkového bloku přidat lakehouse . Pokud to neuděláte, dojde k chybě.

import os

if not os.path.exists("/lakehouse/default"):
    # Add a lakehouse if the notebook has no default lakehouse
    # A new notebook will not link to any lakehouse by default
    raise FileNotFoundError(
        "Default lakehouse not found, please add a lakehouse for the notebook."
    )
else:
    # Verify whether or not the required files are already in the lakehouse, and if not, download and unzip
    if not os.path.exists(f"{TAR_FILE_PATH}{TAR_FILE_NAME}"):
        os.makedirs(TAR_FILE_PATH, exist_ok=True)
        os.system(f"wget {URL}{TAR_FILE_NAME} -O {TAR_FILE_PATH}{TAR_FILE_NAME}")

    os.makedirs(CSV_FILE_PATH, exist_ok=True)
    os.system(f"tar -zxvf {TAR_FILE_PATH}{TAR_FILE_NAME} -C {CSV_FILE_PATH}")

Spusťte záznam doby běhu tohoto poznámkového bloku.

# Record the notebook running time
import time

ts = time.time()

Nastavení sledování experimentu MLflow

Pokud chcete rozšířit možnosti protokolování MLflow, automatické protokolování automaticky zaznamenává hodnoty vstupních parametrů a výstupních metrik modelu strojového učení během trénování. Tyto informace se pak zaprotokolují do pracovního prostoru, kde k němu mají přístup a vizualizovat rozhraní API MLflow nebo odpovídající experiment v pracovním prostoru. Další informace o automatickém přihlašování najdete v tomto zdroji .

# Set up the MLflow experiment
import mlflow

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

Poznámka:

Pokud chcete v relaci poznámkového bloku zakázat automatické protokolování Microsoft Fabric, zavolejte mlflow.autolog() a nastavte disable=True.

Čtení nezpracovaných dat kalendářních dat z jezera

df = (
    spark.read.format("csv")
    .option("header", "true")
    .load("Files/NYC_Property_Sales_Dataset/csv")
)

Krok 3: Zahájení průzkumné analýzy dat

Pokud chcete datovou sadu zkontrolovat, můžete ručně prozkoumat podmnožinu dat, abyste získali lepší přehled o ní. Funkci můžete použít display k tisku datového rámce. Zobrazení grafů můžete také zobrazit, abyste mohli snadno vizualizovat podmnožinu datové sady.

display(df)

Ruční kontrola datové sady vede k několika dřívějším pozorováním:

  • Instance prodejních cen ve výši 0,00 USD Podle glosáře termínů to znamená převod vlastnictví bez hotovosti. Jinými slovy, v transakci nedošlo k žádnému peněžnímu toku. Z datové sady byste měli odebrat prodeje s hodnotami 0,00 sales_price USD.

  • Datová sada pokrývá různé třídy sestavení. Tento poznámkový blok se ale zaměří na obytné budovy, které jsou podle glosáře termínů označené jako typ "A". Datovou sadu byste měli filtrovat tak, aby zahrnovala pouze obytné budovy. Uděláte to tak, že zahrnete sloupce building_class_at_time_of_sale nebo building_class_at_present sloupce. Data musíte zahrnout building_class_at_time_of_sale pouze.

  • Datová sada obsahuje instance, ve kterých total_units se hodnoty rovnají 0 nebo gross_square_feet hodnoty 0. Měli byste odebrat všechny instance, kde total_units nebo gross_square_units hodnoty jsou rovny 0.

  • Některé sloupce – například apartment_number, , tax_class, build_class_at_presentatd. – obsahují chybějící hodnoty nebo hodnoty NULL. Předpokládejme, že chybějící data zahrnují administrativní chyby nebo neexistující data. Analýza nezávisí na těchto chybějících hodnotách, takže je můžete ignorovat.

  • Sloupec sale_price se uloží jako řetězec s předpendovaným znakem "$". Pokud chcete pokračovat v analýze, představuje tento sloupec jako číslo. Sloupec byste měli přetypovat sale_price jako celé číslo.

Převod a filtrování typů

Pokud chcete některé zjištěné problémy vyřešit, naimportujte požadované knihovny.

# Import libraries
import pyspark.sql.functions as F
from pyspark.sql.types import *

Přetypování prodejních dat z řetězce na celé číslo

Regulární výrazy slouží k oddělení číselné části řetězce od znaku dolaru (například v řetězci 300 000 Kč, rozdělení "$" a "300 000") a následné přetypování číselné části jako celé číslo.

Dále vyfiltrujte data tak, aby zahrnovala pouze instance, které splňují všechny tyto podmínky:

  1. Je sales_price větší než 0.
  2. Je total_units větší než 0.
  3. Je gross_square_feet větší než 0.
  4. Typ building_class_at_time_of_sale A
df = df.withColumn(
    "sale_price", F.regexp_replace("sale_price", "[$,]", "").cast(IntegerType())
)
df = df.select("*").where(
    'sale_price > 0 and total_units > 0 and gross_square_feet > 0 and building_class_at_time_of_sale like "A%"'
)

Agregace měsíčně

Datový prostředek sleduje prodeje nemovitostí každý den, ale tento přístup je pro tento poznámkový blok příliš podrobný. Místo toho agregujte data měsíčně.

Nejprve změňte hodnoty kalendářních dat tak, aby zobrazovaly pouze data měsíce a roku. Hodnoty kalendářních dat by stále obsahovaly data o roce. Můžete rozlišovat mezi například prosinec 2005 a prosinec 2006.

Kromě toho ponechte pouze sloupce relevantní pro analýzu. Patří mezi ně sales_price, gross_square_feettotal_unitsa sales_date. Musíte také přejmenovat sales_date na month.

monthly_sale_df = df.select(
    "sale_price",
    "total_units",
    "gross_square_feet",
    F.date_format("sale_date", "yyyy-MM").alias("month"),
)
display(monthly_sale_df)

Agregujte sale_pricetotal_units hodnoty a gross_square_feet hodnoty podle měsíců. Potom seskupte data podle montha sečtěte všechny hodnoty v rámci každé skupiny.

summary_df = (
    monthly_sale_df.groupBy("month")
    .agg(
        F.sum("sale_price").alias("total_sales"),
        F.sum("total_units").alias("units"),
        F.sum("gross_square_feet").alias("square_feet"),
    )
    .orderBy("month")
)

display(summary_df)

Převod Pyspark na Pandas

Datové rámce Pyspark zpracovávají velké datové sady dobře. Vzhledem k agregaci dat je však velikost datového rámce menší. To naznačuje, že teď můžete použít datové rámce pandas.

Tento kód přetypuje datovou sadu z datového rámce pyspark na datový rámec pandas.

import pandas as pd

df_pandas = summary_df.toPandas()
display(df_pandas)

Vizualizace

Pokud chcete lépe porozumět datům, můžete prozkoumat trend obchodu s nemovitostmi v New Yorku. To vede k přehledům potenciálních vzorů a trendů sezónnosti. Další informace o vizualizaci dat Microsoft Fabric najdete v tomto prostředku.

import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np

f, (ax1, ax2) = plt.subplots(2, 1, figsize=(35, 10))
plt.sca(ax1)
plt.xticks(np.arange(0, 15 * 12, step=12))
plt.ticklabel_format(style="plain", axis="y")
sns.lineplot(x="month", y="total_sales", data=df_pandas)
plt.ylabel("Total Sales")
plt.xlabel("Time")
plt.title("Total Property Sales by Month")

plt.sca(ax2)
plt.xticks(np.arange(0, 15 * 12, step=12))
plt.ticklabel_format(style="plain", axis="y")
sns.lineplot(x="month", y="square_feet", data=df_pandas)
plt.ylabel("Total Square Feet")
plt.xlabel("Time")
plt.title("Total Property Square Feet Sold by Month")
plt.show()

Shrnutí pozorování z průzkumné analýzy dat

  • Data zobrazují jasný opakující se vzor v ročním tempu; to znamená, že data mají roční sezónnost.
  • Letní měsíce mají v porovnání s zimními měsíci vyšší objem prodeje.
  • Ve srovnání let s vysokým prodejem a roky s nízkým prodejem je rozdíl výnosů mezi vysokými prodejními měsíci a nízkými prodejními měsíci ve vysokých prodejních letech vyšší než v absolutních letech – rozdíl výnosů mezi vysokými prodejními měsíci a nízkými prodejními měsíci v letech s nízkým prodejem.

Například v roce 2004 je rozdíl výnosů mezi nejvyšším a nejnižším měsícem prodeje přibližně:

$900,000,000 - $500,000,000 = $400,000,000

V roce 2011 se výpočet rozdílu výnosů týká:

$400,000,000 - $300,000,000 = $100,000,000

To se stane důležité později, když se musíte rozhodnout mezi efekty násobení a sčítání sezónnosti.

Krok 4: Trénování a sledování modelů

Fitování modelů

Vstup proroka je vždy datový rámec se dvěma sloupci. Jeden vstupní sloupec je časový sloupec s názvem dsa jeden vstupní sloupec je sloupec s hodnotou s názvem y. Sloupec času by měl mít formát data, času nebo data datetime (například YYYY_MM). Datová sada zde splňuje danou podmínku. Sloupec hodnoty musí být číselný formát dat.

Pro přizpůsobení modelu musíte přejmenovat pouze sloupec času na ds sloupec hodnoty a hodnotu na ya předat data Prorokovi. Další informace najdete v dokumentaci k rozhraní PYTHON API pro Proroka.

df_pandas["ds"] = pd.to_datetime(df_pandas["month"])
df_pandas["y"] = df_pandas["total_sales"]

Prorok se řídí konvencí scikit-learn . Nejprve vytvořte novou instanci Proroka, nastavte určité parametry (napříkladseasonality_mode) a pak se do této instance vešel do datové sady.

  • I když konstantní doplňkový faktor je výchozím efektem sezónnosti pro Proroka, měli byste pro parametr efektu sezónnosti použít sezónnost násobení . Analýza v předchozí části ukázala, že kvůli změnám amplitudy sezónnosti se jednoduchá přídatná sezónnost vůbec nevejde do dat.

  • Nastavte parametr weekly_seasonality na vypnutý, protože data byla agregována podle měsíce. V důsledku toho nejsou týdenní data dostupná.

  • Pomocí metod Markov Chain Monte Carlo (MCMC) můžete zachytit odhady nejistoty sezónnosti. Ve výchozím nastavení může Prorok poskytnout odhady nejistoty o trendu a pozorování šumu, ale ne pro sezónnost. MCMC vyžaduje více času zpracování, ale umožňuje algoritmus poskytovat odhady nejistoty o sezónnosti a trendu a šumu pozorování. Další informace najdete v dokumentaci k intervalu nejistoty proroka.

  • Pomocí parametru changepoint_prior_scale vylaďte citlivost detekce automatického bodu změn. Algoritmus Prorok se automaticky pokusí najít instance v datech, kde se trajektorie náhle mění. Může být obtížné najít správnou hodnotu. Pokud chcete tento problém vyřešit, můžete vyzkoušet různé hodnoty a pak vybrat model s nejlepším výkonem. Další informace najdete v dokumentaci ke změnám trendu proroka.

from prophet import Prophet

def fit_model(dataframe, seasonality_mode, weekly_seasonality, chpt_prior, mcmc_samples):
    m = Prophet(
        seasonality_mode=seasonality_mode,
        weekly_seasonality=weekly_seasonality,
        changepoint_prior_scale=chpt_prior,
        mcmc_samples=mcmc_samples,
    )
    m.fit(dataframe)
    return m

Křížové ověření

Prorok má integrovaný nástroj pro křížové ověřování. Tento nástroj může odhadnout chybu prognózování a najít model s nejlepším výkonem.

Technika křížového ověření může ověřit efektivitu modelu. Tato technika trénuje model na podmnožině datové sady a spouští testy na dříve nezoznané podmnožině datové sady. Tato technika může zkontrolovat, jak dobře statistický model generalizuje nezávislou datovou sadu.

Pro křížové ověření si vyhraďte konkrétní ukázku datové sady, která nebyla součástí trénovací datové sady. Potom před nasazením otestujte natrénovaný model na této ukázce. Tento přístup ale nefunguje pro data časových řad, protože pokud model viděl data z měsíců leden 2005 a březen 2005 a pokusíte se předpovědět pro měsíc únor 2005, může model v podstatě podvést, protože by mohl zjistit, kde trend dat vede. Ve skutečných aplikacích je cílem předpovídat budoucnost, protože neznámé oblasti.

Abyste to zvládli, a aby byl test spolehlivý, rozdělte datovou sadu na základě kalendářních dat. Pro trénování použijte datovou sadu až do určitého data (například prvních 11 let) a pak pro predikci použijte zbývající nepozorná data.

V tomto scénáři začněte s 11 lety trénovacích dat a pak pomocí ročního horizontu proveďte měsíční předpovědi. Konkrétně trénovací data obsahují vše od roku 2003 do roku 2013. Pak první spuštění zpracovává předpovědi pro leden 2014 až leden 2015. Další spuštění zpracovává předpovědi pro únor 2014 až únor 2015 atd.

Tento postup opakujte pro každý ze tří natrénovaných modelů, abyste zjistili, který model nejlépe funguje. Potom tyto předpovědi porovnejte s hodnotami z reálného světa, abyste vytvořili kvalitu předpovědi nejlepšího modelu.

from prophet.diagnostics import cross_validation
from prophet.diagnostics import performance_metrics

def evaluation(m):
    df_cv = cross_validation(m, initial="4017 days", period="30 days", horizon="365 days")
    df_p = performance_metrics(df_cv, monthly=True)
    future = m.make_future_dataframe(periods=12, freq="M")
    forecast = m.predict(future)
    return df_p, future, forecast

Log model s MLflow

Protokolujte modely, abyste měli přehled o svých parametrech a uložili modely pro pozdější použití. Všechny relevantní informace o modelu se zaprotokolují v pracovním prostoru pod názvem experimentu. Model, parametry a metriky společně s položkami automatickéhologování MLflow se uloží do jednoho spuštění MLflow.

# Setup MLflow
from mlflow.models.signature import infer_signature

Provádění experimentů

Experiment strojového učení slouží jako primární jednotka organizace a řízení pro všechna související spuštění strojového učení. Spuštění odpovídá jedinému spuštění kódu modelu. Sledování experimentů strojového učení odkazuje na správu všech různých experimentů a jejich součástí. To zahrnuje parametry, metriky, modely a další artefakty a pomáhá organizovat požadované součásti konkrétního experimentu strojového učení. Sledování experimentů strojového učení také umožňuje snadné duplikování minulých výsledků s uloženými experimenty. Přečtěte si další informace o experimentech strojového učení v Microsoft Fabric. Jakmile určíte kroky, které chcete zahrnout (například přizpůsobení a vyhodnocení modelu Prorok v tomto poznámkovém bloku), můžete experiment spustit.

model_name = f"{EXPERIMENT_NAME}-prophet"

models = []
df_metrics = []
forecasts = []
seasonality_mode = "multiplicative"
weekly_seasonality = False
changepoint_priors = [0.01, 0.05, 0.1]
mcmc_samples = 100

for chpt_prior in changepoint_priors:
    with mlflow.start_run(run_name=f"prophet_changepoint_{chpt_prior}"):
        # init model and fit
        m = fit_model(df_pandas, seasonality_mode, weekly_seasonality, chpt_prior, mcmc_samples)
        models.append(m)
        # Validation
        df_p, future, forecast = evaluation(m)
        df_metrics.append(df_p)
        forecasts.append(forecast)
        # Log model and parameters with MLflow
        mlflow.prophet.log_model(
            m,
            model_name,
            registered_model_name=model_name,
            signature=infer_signature(future, forecast),
        )
        mlflow.log_params(
            {
                "seasonality_mode": seasonality_mode,
                "mcmc_samples": mcmc_samples,
                "weekly_seasonality": weekly_seasonality,
                "changepoint_prior": chpt_prior,
            }
        )
        metrics = df_p.mean().to_dict()
        metrics.pop("horizon")
        mlflow.log_metrics(metrics)

Screenshot of the properties panel.

Vizualizace modelu pomocí Proroka

Prorok má integrované vizualizační funkce, které můžou zobrazit výsledky přizpůsobení modelu.

Černé tečky označují datové body, které se používají k trénování modelu. Modrá čára je předpověď a světle modrá oblast zobrazuje intervaly nejistoty. Vytvořili jste tři modely s různými changepoint_prior_scale hodnotami. Předpovědi těchto tří modelů se zobrazují ve výsledcích tohoto bloku kódu.

for idx, pack in enumerate(zip(models, forecasts)):
    m, forecast = pack
    fig = m.plot(forecast)
    fig.suptitle(f"changepoint = {changepoint_priors[idx]}")

Nejmenší changepoint_prior_scale hodnota v prvním grafu vede k podurčení změn trendu. changepoint_prior_scale Největší v třetím grafu by mohlo vést k přeurčení. Zdá se tedy, že druhý graf je optimální volbou. To znamená, že druhý model je nejvhodnější.

Prorok může také snadno vizualizovat základní trendy a sezónnosti. Vizualizace druhého modelu se zobrazují ve výsledcích tohoto bloku kódu.

BEST_MODEL_INDEX = 1  # Set the best model index according to the previous results
fig2 = models[BEST_MODEL_INDEX].plot_components(forecast)

Screenshot of a graph of yearly trends in the pricing data.

V těchto grafech světle modré stínování odráží nejistotu. Horní graf znázorňuje silný, dlouhodobý oscilující trend. Za několik let se objem prodeje zvyšuje a klesá. Dolní graf ukazuje, že prodeje mají tendenci k vrcholu v únoru a září, přičemž v těchto měsících dosáhnou maximálních hodnot pro rok. Krátce po těchto měsících v březnu a říjnu spadají na minimální hodnoty roku.

Vyhodnoťte výkon modelů pomocí různých metrik, například:

  • Střední kvadratická chyba (MSE)
  • Odmocněná střední kvadratická chyba (RMSE)
  • střední absolutní chyba (MAE)
  • střední absolutní procentuální chyba (MAPE)
  • medián absolutní procentuální chyby (MDAPE)
  • symetrická střední absolutní procentuální chyba (SMAPE)

Vyhodnoťte pokrytí pomocí yhat_lower a yhat_upper odhadů. Všimněte si různých horizontů, ve kterých předpovídáte jeden rok v budoucnu, 12krát.

display(df_metrics[BEST_MODEL_INDEX])

S metrikou MAPE pro tento model prognózování se předpovědi, které rozšiřují o jeden měsíc do budoucna, obvykle zahrnují chyby přibližně 8 %. U předpovědí o jeden rok později se ale chyba zvýší na přibližně 10 %.

Krok 5: Určení skóre modelu a uložení výsledků předpovědi

Teď vyhodnotte model a uložte výsledky předpovědi.

Vytváření předpovědí pomocí Predict Transformeru

Teď můžete model načíst a použít ho k předpovědím. Uživatelé můžou zprovoznit modely strojového učení pomocí funkce PREDICT, škálovatelné funkce Microsoft Fabric, která podporuje dávkové bodování v jakémkoli výpočetním modulu. Další informace o PREDICTslužbě Microsoft Fabric a o tom, jak ho používat v rámci Microsoft Fabric, najdete v tomto prostředku.

from synapse.ml.predict import MLFlowTransformer

spark.conf.set("spark.synapse.ml.predict.enabled", "true")

model = MLFlowTransformer(
    inputCols=future.columns.values,
    outputCol="prediction",
    modelName=f"{EXPERIMENT_NAME}-prophet",
    modelVersion=BEST_MODEL_INDEX,
)

test_spark = spark.createDataFrame(data=future, schema=future.columns.to_list())

batch_predictions = model.transform(test_spark)

display(batch_predictions)
# Code for saving predictions into lakehouse
batch_predictions.write.format("delta").mode("overwrite").save(
    f"{DATA_FOLDER}/predictions/batch_predictions"
)
# Determine the entire runtime
print(f"Full run cost {int(time.time() - ts)} seconds.")