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
Získejte předplatné Microsoft Fabric. Nebo si zaregistrujte bezplatnou zkušební verzi Microsoft Fabricu.
Přihlaste se k Microsoft Fabric.
Použijte přepínač prostředí v levém dolním rohu vaší domovské stránky k přepnutí na Fabric.
- Znalost poznámkových bloků Microsoft Fabric
- Jezero pro ukládání dat pro tento příklad. Další informace najdete v tématu Přidání jezerahouse do poznámkového bloku.
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.
- Nahrajte poznámkový blok z GitHubu.
Otevření integrovaného poznámkového bloku
Ukázkový poznámkový blok časové řady doprovází tento kurz.
Pokud chcete otevřít ukázkový poznámkový blok pro tento kurz, postupujte podle pokynů v Příprava systému na kurzy datových věd.
Než začnete spouštět kód, nezapomeňte k poznámkovému bloku připojit 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 tématu Příprava systému na kurzy datových věd, abyste poznámkový blok importovali do svého 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.
- K rychlému zahájení práce s novými knihovnami můžete použít možnosti in-line instalace (například
%pip
,%conda
atd.). 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>
- 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í.
čtvrť | sousedství | building_class_category | tax_class | block | moc | 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
nebobuilding_class_at_present
sloupce. Data musíte zahrnoutbuilding_class_at_time_of_sale
pouze.Datová sada obsahuje instance, ve kterých
total_units
se hodnoty rovnají 0 nebogross_square_feet
hodnoty 0. Měli byste odebrat všechny instance, kdetotal_units
nebogross_square_units
hodnoty jsou rovny 0.Některé sloupce – například
apartment_number
, ,tax_class
,build_class_at_present
atd. – 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řetypovatsale_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
Pomocí regulárních výrazů oddělte číselnou část řetězce od znaku dolaru (například v řetězci $300,000
, rozdělení $
a 300,000
) a potom číselnou část přetypujte jako celé číslo.
Dále vyfiltrujte data tak, aby zahrnovala pouze instance, které splňují všechny tyto podmínky:
- Je
sales_price
větší než 0. - Je
total_units
větší než 0. - Je
gross_square_feet
větší než 0. - 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
, total_units
gross_square_feet
a 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_price
total_units
hodnoty a gross_square_feet
hodnoty podle měsíců. Potom seskupte data podle month
a 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 ds
a 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 y
a 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)
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ší.
Vizualizace trendů a sezónnosti pomocí Proroka
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)
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 PREDICT
služ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.")