Nastavení automatického strojového učení pro trénování modelu prognózování časových řad pomocí Pythonu
PLATÍ PRO: Sada Python SDK azure-ai-ml v2 (aktuální)
V tomto článku se dozvíte, jak nastavit trénování automatického strojového učení pro modely prognózování časových řad pomocí automatizovaného strojového učení Azure Machine Learning v sadě Python SDK služby Azure Machine Learning.
Uděláte to takto:
- Připravte data na trénování.
- Nakonfigurujte konkrétní parametry časové řady v úloze prognózování.
- Získejte předpovědi z natrénovaných modelů časových řad.
Informace o nízkém využití kódu najdete v tématu Kurz: Prognóza poptávky pomocí automatizovaného strojového učení, kde najdete příklad prognózování časových řad s využitím automatizovaného strojového učení v studio Azure Machine Learning.
AutoML používá k vytváření prognóz standardní modely strojového učení spolu s dobře známými modely časových řad. Náš přístup zahrnuje několik kontextových proměnných a jejich vztah mezi sebou během trénování. Vzhledem k tomu, že prognózu může ovlivnit více faktorů, tato metoda se dobře přizpůsobí scénářům prognózování z reálného světa. Například při prognózování prodeje můžou společně ovlivnit výsledek prodeje interakce historických trendů, směnného kurzu a ceny. Další podrobnosti najdete v našem článku o metodologii prognózování.
Požadavky
Pro tento článek potřebujete,
Pracovní prostor služby Azure Machine Learning. Informace o vytvoření pracovního prostoru najdete v tématu Vytvoření prostředků pracovního prostoru.
Možnost spouštět trénovací úlohy Automatického strojového učení. Podrobnosti najdete v návodu k nastavení automatického strojového učení.
Trénovací a ověřovací data
Vstupní data pro prognózování autoML musí obsahovat platné časové řady v tabulkovém formátu. Každá proměnná musí mít v tabulce dat vlastní odpovídající sloupec. AutoML vyžaduje aspoň dva sloupce: sloupec času představující časovou osu a cílový sloupec , který je množství, které se má předpovídat. Jiné sloupce můžou sloužit jako predikce. Další podrobnosti najdete v tématu o tom, jak AutoML používá vaše data.
Důležité
Při trénování modelu pro prognózování budoucích hodnot zajistěte, aby při spouštění předpovědí pro zamýšlený horizont bylo možné použít všechny funkce použité v trénování.
Například funkce pro aktuální cenu akcií může výrazně zvýšit přesnost trénování. Pokud však máte v úmyslu předpovídat s dlouhým horizontem, nemusí být možné přesně předpovědět budoucí hodnoty akcií odpovídající budoucím bodům časových řad a přesnost modelu by mohla utrpět.
Úlohy prognózování autoML vyžadují, aby trénovací data byla reprezentována jako objekt MLTable . Tabulka MLTable určuje zdroj dat a kroky pro načtení dat. Další informace a případy použití najdete v návodu MLTable. Jako jednoduchý příklad předpokládejme, že trénovací data jsou obsažená v souboru CSV v místním adresáři ./train_data/timeseries_train.csv
. Novou tabulku MLTable můžete definovat zkopírováním následujícího kódu YAML do nového souboru ./train_data/MLTable
:
$schema: https://azuremlschemas.azureedge.net/latest/MLTable.schema.json
type: mltable
paths:
- file: ./timeseries_train.csv
transformations:
- read_delimited:
delimiter: ','
encoding: ascii
Pomocí sady Python SDK služby Azure Machine Learning teď můžete definovat vstupní datový objekt, který se vyžaduje ke spuštění trénovací úlohy:
from azure.ai.ml.constants import AssetTypes
from azure.ai.ml import Input
# Training MLTable defined locally, with local data to be uploaded
my_training_data_input = Input(
type=AssetTypes.MLTABLE, path="./train_data"
)
Ověřovací data můžete zadat podobným způsobem vytvořením objektu MLTable a vstupního datového objektu. Případně pokud nezadáte ověřovací data, AutoML automaticky vytvoří rozdělení křížového ověření z trénovacích dat, která se použijí pro výběr modelu. Další podrobnosti najdete v našem článku o výběru modelu prognózy . Podrobnosti o tom, kolik trénovacích dat potřebujete k úspěšnému trénování modelu prognózy, najdete také v požadavcích na délku trénovacích dat.
Přečtěte si další informace o tom, jak AutoML používá křížové ověření, aby se zabránilo nadměrnému přizpůsobení.
Výpočetní prostředí pro spuštění experimentu
AutoML ke spuštění trénovací úlohy používá Azure Machine Learning Compute, což je plně spravovaný výpočetní prostředek. V následujícím příkladu se vytvoří výpočetní cluster s názvem cpu-compute
:
from azure.ai.ml.entities import AmlCompute
# specify aml compute name.
cpu_compute_target = "cpu-cluster"
try:
ml_client.compute.get(cpu_compute_target)
except Exception:
print("Creating a new cpu compute target...")
compute = AmlCompute(
name=cpu_compute_target, size="STANDARD_D2_V2", min_instances=0, max_instances=4
)
ml_client.compute.begin_create_or_update(compute).result()
Konfigurace experimentu
Existuje několik možností, které můžete použít ke konfiguraci experimentu prognózování automatického strojového učení. Tyto parametry konfigurace se nastavují v metodě úlohy automl.forecasting(). Můžete také nastavit nastavení trénování úloh a ukončit kritéria pomocí funkcí set_training() a set_limits().
Následující příklad ukazuje, jak vytvořit úlohu prognózování s normalizovanou střední odmocněnou kvadratickou chybou jako primární metrikou a automaticky nakonfigurovanými křížovými ověřeními:
from azure.ai.ml import automl
# note that the below is a code snippet -- you might have to modify the variable values to run it successfully
forecasting_job = automl.forecasting(
compute=compute_name,
experiment_name=exp_name,
training_data=my_training_data_input,
target_column_name=target_column_name,
primary_metric="NormalizedRootMeanSquaredError",
n_cross_validations="auto",
)
# Limits are all optional
forecasting_job.set_limits(
timeout_minutes=120,
trial_timeout_minutes=30,
max_concurrent_trials=4,
)
Nastavení konfigurace
Úlohy prognózování mají mnoho nastavení, která jsou specifická pro prognózování. K nastavení parametrů prognózy použijte metodu set_forecast_settings() funkce ForecastingJob. V následujícím příkladu zadáme název sloupce času v trénovacích datech a nastavíme horizont prognózy:
# Forecasting specific configuration
forecasting_job.set_forecast_settings(
time_column_name=time_column_name,
forecast_horizon=24
)
Název sloupce času je povinné nastavení a obecně byste měli nastavit horizont prognózy podle vašeho scénáře předpovědi. Pokud data obsahují více časových řad, můžete zadat názvy sloupců ID časové řady. Tyto sloupce při seskupování definují jednotlivé řady. Předpokládejme například, že máte data skládající se z hodinových prodejů z různých obchodů a značek. Následující ukázka ukazuje, jak nastavit sloupce ID časové řady za předpokladu, že data obsahují sloupce s názvy "store" a "brand":
# Forecasting specific configuration
# Add time series IDs for store and brand
forecasting_job.set_forecast_settings(
..., # other settings
time_series_id_column_names=['store', 'brand']
)
AutoML se pokusí automaticky rozpoznat sloupce ID časové řady ve vašich datech, pokud nejsou zadány žádné.
Další nastavení jsou volitelná a projděte si je v části s volitelnými nastaveními .
Volitelná nastavení
Volitelné konfigurace jsou k dispozici pro úlohy prognózování, jako je povolení hlubokého učení a určení cílové agregace průběžných oken. Úplný seznam parametrů je k dispozici v dokumentaci k rozhraní api forecast_settings.
Nastavení hledání modelu
Existují dvě volitelná nastavení, která řídí prostor modelu, kde autoML hledá nejlepší model, allowed_training_algorithms
a blocked_training_algorithms
. Pokud chcete omezit vyhledávací prostor na danou sadu tříd modelu, použijte allowed_training_algorithms jako v následující ukázce:
# Only search ExponentialSmoothing and ElasticNet models
forecasting_job.set_training(
allowed_training_algorithms=["ExponentialSmoothing", "ElasticNet"]
)
V tomto případě úloha prognózování vyhledává pouze třídy modelu Exponential Smoothing a Elastic Net. Pokud chcete z vyhledávacího prostoru odebrat danou sadu tříd modelu, použijte blocked_training_algorithms jako v následující ukázce:
# Search over all model classes except Prophet
forecasting_job.set_training(
blocked_training_algorithms=["Prophet"]
)
Teď hledá práci ve všech modelových třídách s výjimkou Proroka. Seznam názvů modelů prognóz, které jsou přijímány v a blocked_training_algorithms
, najdete v allowed_training_algorithms
tématu Podporované modely prognózování a podporované regresní modely.
Povolení hlubokého učení
AutoML se dodává s vlastním modelem hluboké neurální sítě (DNN) s názvem TCNForecaster
. Tento model je dočasná konvoluční síť neboli TCN, která používá běžné metody úloh zpracování obrazu při modelování časových řad. Konkrétně jednorozměrné "kauzální" konvoluce tvoří páteř sítě a umožňují modelu učit se komplexním vzorům po dlouhou dobu v historii trénování. Další podrobnosti najdete v našem článku TCNForecaster.
TCNForecaster často dosahuje vyšší přesnosti než standardní modely časových řad, pokud jsou v historii trénování tisíce nebo více pozorování. Trénování a zametání modelů TCNForecaster ale také trvá déle kvůli jejich vyšší kapacitě.
V autoML můžete povolit TCNForecaster nastavením příznaku enable_dnn_training
v metodě set_training() následujícím způsobem:
# Include TCNForecaster models in the model search
forecasting_job.set_training(
enable_dnn_training=True
)
Pokud chcete povolit službu DNN pro experiment AutoML vytvořený v studio Azure Machine Learning, projděte si nastavení typu úlohy v návodech k uživatelskému rozhraní studia.
Poznámka
- Když povolíte síť DNN pro experimenty vytvořené pomocí sady SDK, nejlepší vysvětlení modelu se zakáže.
- Podpora DNN pro prognózování v automatizovaném strojovém učení se nepodporuje u spuštění zahájených v Databricks.
- Výpočetní typy GPU se doporučují, pokud je povolené trénování DNN.
Agregace cílových průběžných oken
Nedávné hodnoty cíle jsou v modelu prognózování často ovlivňujícími funkcemi. Agregace se klouzavými okny umožňují přidat jako funkce klouzavé agregace hodnot dat. Generování a použití těchto funkcí jako dodatečných kontextových dat pomáhá s přesností modelu trénování.
Představte si scénář prognózy poptávky po energii, ve kterém jsou k dispozici data o počasí a historická poptávka. Tabulka ukazuje výslednou přípravu funkcí, ke které dochází při použití agregace oken za poslední tři hodiny. Sloupce pro minimum, maximum a součet se vygenerují v klouzavém okně po dobu tří hodin na základě definovaného nastavení. Například pro pozorování platné 8. září 2017 ve 4:00 se hodnoty maximum, minimum a součtu vypočítají pomocí hodnot poptávky pro 8. září 2017 od 1:00 do 3:00. Toto tříhodinové okno se posune a naplní data pro zbývající řádky.
Pomocí metody set_forecast_settings() můžete povolit funkce agregace se klouzavým oknem a nastavit velikost okna. V následující ukázce jsme velikost okna nastavili na "auto", aby autoML automaticky určilo dobrou hodnotu pro vaše data:
forecasting_job.set_forecast_settings(
..., # other settings
target_rolling_window_size='auto'
)
Zpracování krátkých řad
Automatizované strojové učení považuje časovou řadu za krátkou, pokud není dostatek datových bodů pro provádění fází trénování a ověřování při vývoji modelu. Další podrobnosti o požadavcích na délku dat najdete v požadavcích na délku trénovacích dat .
AutoML má několik akcí, které může u krátkých řad provést. Tyto akce lze konfigurovat pomocí short_series_handling_config
nastavení. Výchozí hodnota je "auto". Následující tabulka popisuje nastavení:
Nastavení | Popis |
---|---|
auto |
Výchozí hodnota pro zpracování krátkých řad. - Pokud jsou všechny řady krátké, vložte data. - Pokud nejsou všechny řady krátké, krátké řady vypusťte. |
pad |
Pokud short_series_handling_config = pad , přidá automatizované strojové učení náhodné hodnoty ke každé nalezené krátké řadě. Následující seznam uvádí typy sloupců a jejich popis:– Sloupce objektů s NaN - Číselné sloupce s 0 – Logické nebo logické sloupce s nepravdivou hodnotou - Cílový sloupec je vycpaný náhodnými hodnotami se střední nulou a směrodatnou odchylkou 1. |
drop |
Pokud short_series_handling_config = drop , automatizované strojové učení krátkou řadu zahodí a nepoužije se k trénování ani predikci. Předpovědi pro tyto řady vrátí hodnoty NaN. |
None |
Žádná řada není vycpaná nebo zahozená. |
V následujícím příkladu nastavíme zpracování krátkých řad tak, aby všechny krátké řady byly vycpané na minimální délku:
forecasting_job.set_forecast_settings(
..., # other settings
short_series_handling_config='pad'
)
Upozornění
Odsazení může mít vliv na přesnost výsledného modelu, protože zavádíme umělá data, abychom se dostali přes trénování bez chyb. Pokud je řada krátkých, může to mít na výsledky vysvětlitelnosti také určitý dopad.
Agregace dat cíle četnosti &
Pomocí možností frekvence a agregace dat se vyhnete selháním způsobeným nepravidelnými daty. Data jsou nepravidelná, pokud nedodržují nastavenou frekvenci v čase, například hodinově nebo denně. Dobrým příkladem nepravidelných dat jsou data o prodejních bodech. V těchto případech může AutoML agregovat data na požadovanou frekvenci a pak z těchto agregací sestavit model prognózování.
Abyste mohli zpracovávat nepravidelná data, musíte nastavit frequency
target_aggregate_function
a. Nastavení frekvence přijímá jako vstup řetězce Pandas DateOffset . Podporované hodnoty agregační funkce jsou:
Funkce | Description |
---|---|
sum |
Součet cílových hodnot |
mean |
Průměr nebo průměr cílových hodnot |
min |
Minimální hodnota cíle |
max |
Maximální hodnota cíle |
- Hodnoty cílového sloupce se agregují podle zadané operace. Součet je obvykle vhodný pro většinu scénářů.
- Číselné sloupce prediktoru v datech se agregují podle součtu, průměru, minimální hodnoty a maximální hodnoty. V důsledku toho automatizované strojové učení vygeneruje nové sloupce s příponou s názvem agregační funkce a použije vybranou agregační operaci.
- U sloupců prediktoru kategorií se data agregují podle režimu, nejvýraznější kategorie v okně.
- Sloupce predikce data se agregují podle minimální hodnoty, maximální hodnoty a režimu.
Následující příklad nastaví frekvenci na hodinovou a agregační funkci na součet:
# Aggregate the data to hourly frequency
forecasting_job.set_forecast_settings(
..., # other settings
frequency='H',
target_aggregate_function='sum'
)
Vlastní nastavení křížového ověření
Existují dvě přizpůsobitelná nastavení, která řídí křížové ověření pro úlohy prognózování: počet záhybů n_cross_validations
a velikost kroku definující časový posun mezi přehyby, cv_step_size
. Další informace o významu těchto parametrů najdete v tématu Výběr modelu prognózy . Ve výchozím nastavení autoML nastaví obě nastavení automaticky na základě charakteristik vašich dat, ale pokročilí uživatelé je můžou chtít nastavit ručně. Předpokládejme například, že máte denní údaje o prodeji a chcete, aby se vaše nastavení ověřování skládalo z pětinásobných intervalů se sedmidenním posunem mezi sousedními záhyby. Následující ukázka kódu ukazuje, jak je nastavit:
from azure.ai.ml import automl
# Create a job with five CV folds
forecasting_job = automl.forecasting(
..., # other training parameters
n_cross_validations=5,
)
# Set the step size between folds to seven days
forecasting_job.set_forecast_settings(
..., # other settings
cv_step_size=7
)
Vlastní featurizace
Ve výchozím nastavení AutoML rozšiřuje trénovací data o technické funkce, aby se zvýšila přesnost modelů. Další informace najdete v tématu Příprava automatizovaných funkcí . Některé kroky předběžného zpracování je možné přizpůsobit pomocí set_featurization()
metody úlohy prognózování.
Mezi podporovaná přizpůsobení pro prognózy patří:
Přizpůsobení | Description | Možnosti |
---|---|---|
Aktualizace účelu sloupce | Přepište automaticky rozpoznaný typ funkce pro zadaný sloupec. | "Kategorical", "DateTime", "Numeric" |
Aktualizace parametrů transformátoru | Aktualizujte parametry zadaného imputeru. | {"strategy": "constant", "fill_value": <value>} , {"strategy": "median"} , {"strategy": "ffill"} |
Předpokládejme například, že máte scénář maloobchodní poptávky, ve kterém data zahrnují funkce, jako je cena, příznak "při prodeji" a typ produktu. Následující ukázka ukazuje, jak můžete nastavit přizpůsobené typy a imputery pro tyto funkce:
from azure.ai.ml.automl import ColumnTransformer
# Customize imputation methods for price and is_on_sale features
# Median value imputation for price, constant value of zero for is_on_sale
transformer_params = {
"imputer": [
ColumnTransformer(fields=["price"], parameters={"strategy": "median"}),
ColumnTransformer(fields=["is_on_sale"], parameters={"strategy": "constant", "fill_value": 0}),
],
}
# Set the featurization
# Ensure that product_type feature is interpreted as categorical
forecasting_job.set_featurization(
mode="custom",
transformer_params=transformer_params,
column_name_and_types={"product_type": "Categorical"},
)
Pokud pro experiment používáte studio Azure Machine Learning, přečtěte si, jak přizpůsobit funkciaturizaci ve studiu.
Spusťte experiment.
Po nakonfigurování všech nastavení můžete spustit úlohu prognózování následujícím mlcient
způsobem:
# Submit the AutoML job
returned_job = ml_client.jobs.create_or_update(
forecasting_job
)
print(f"Created job: {returned_job}")
# Get a URL for the status of the job
returned_job.services["Studio"].endpoint
Prognózování pomocí natrénovaného modelu
Jakmile použijete AutoML k trénování a výběru nejlepšího modelu, dalším krokem je vyhodnocení modelu. Pokud splňuje vaše požadavky, můžete ho použít ke generování předpovědí do budoucna. V této části se dozvíte, jak psát skripty Pythonu pro vyhodnocení a predikce. Příklad nasazení natrénovaného modelu pomocí odvozovacího skriptu najdete v našem ukázkovém poznámkovém bloku.
Vyhodnocení přesnosti modelu pomocí průběžné prognózy
Před uvedením modelu do produkčního prostředí byste měli vyhodnotit jeho přesnost na testovací sadě uchovávané z trénovacích dat. Osvědčeným postupem je postupné vyhodnocení, které posune vytrénovaný prognostik v čase dopředu v testovací sadě a zprůměruje metriky chyb v několika oknech predikce. V ideálním případě je testovací sada pro vyhodnocení dlouhá vzhledem k horizontu prognózy modelu. Odhady chyb prognózování mohou být jinak statisticky hlučné, a proto méně spolehlivé.
Předpokládejme například, že vytrénujete model denního prodeje, aby předpověděl poptávku do budoucnosti až do dvou týdnů (14 dnů). Pokud je k dispozici dostatek historických dat, můžete si vyhraďte posledních několik měsíců až po jeden rok dat pro testovací sadu. Průběžné hodnocení začíná generováním 14denní prognózy pro první dva týdny testovací sady. Pak se prognóza posoudí o několik dní do testovací sady a vy z nové pozice vygenerujete další prognózu na 14 dní dopředu. Proces pokračuje, dokud se nedostanete na konec testovací sady.
Pokud chcete provést průběžné vyhodnocení, zavoláte metodu rolling_forecast
fitted_model
nástroje a pak vypočítáte požadované metriky pro výsledek. Skript odvozování postupného vyhodnocení je zobrazený v následující ukázce kódu:
"""
This is the script that is executed on the compute instance. It relies
on the model.pkl file which is uploaded along with this script to the
compute instance.
"""
import os
import pandas as pd
from sklearn.externals import joblib
def init():
global target_column_name
global fitted_model
target_column_name = os.environ["TARGET_COLUMN_NAME"]
# AZUREML_MODEL_DIR is an environment variable created during deployment
# It is the path to the model folder (./azureml-models)
# Please provide your model's folder name if there's one
model_path = os.path.join(os.environ["AZUREML_MODEL_DIR"], "model.pkl")
try:
fitted_model = joblib.load(model_path)
except Exception:
print("Loading pickle failed. Trying torch.load()")
import torch
model_path = os.path.join(os.environ["AZUREML_MODEL_DIR"], "model.pt")
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
fitted_model = torch.load(model_path, map_location=device)
def run(mini_batch):
print(f"run method start: {__file__}, run({mini_batch})")
resultList = []
for test in mini_batch:
if not test.endswith(".csv"):
continue
X_test = pd.read_csv(test, parse_dates=[fitted_model.time_column_name])
y_test = X_test.pop(target_column_name).values
# Make a rolling forecast, advancing the forecast origin by 1 period on each iteration through the test set
X_rf = fitted_model.rolling_forecast(
X_test, y_test, step=1, ignore_data_errors=True
)
resultList.append(X_rf)
return pd.concat(resultList, sort=False, ignore_index=True)
V této ukázce je velikost kroku pro průběžnou prognózu nastavená na jednu, což znamená, že prognóza je pokročilá o jedno období nebo jeden den v našem příkladu predikce poptávky při každé iteraci. Celkový počet prognóz vrácených nástrojem rolling_forecast
závisí na délce testovací sady a velikosti tohoto kroku. Další podrobnosti a příklady najdete v dokumentaci k rolling_forecast() a poznámkovém bloku Prognózování mimo trénovací data.
Predikce do budoucnosti
Forecast_quantiles() generuje prognózy pro dané kvantantily rozdělení predikce. Tato metoda tak poskytuje způsob, jak získat předpověď bodu s kuželem nejistoty kolem ní. Další informace najdete v poznámkovém bloku Prognózování mimo trénovací data.
V následujícím příkladu nejprve nahradíte všechny hodnoty v y_pred
hodnotou NaN
. V tomto případě je původ prognózy na konci trénovacích dat. Pokud byste ale nahradili pouze druhou polovinu y_pred
NaN
funkce , ponechá funkce číselné hodnoty v první polovině beze změny, ale odhadne NaN
hodnoty v druhé polovině. Funkce vrátí prognózované hodnoty i zarovnané funkce.
Pomocí parametru forecast_destination
ve forecast_quantiles()
funkci můžete také předpovídat hodnoty do zadaného data.
label_query = test_labels.copy().astype(np.float)
label_query.fill(np.nan)
label_fcst, data_trans = fitted_model.forecast_quantiles(
test_dataset, label_query, forecast_destination=pd.Timestamp(2019, 1, 8)
)
Zde nejsou zadány žádné kvantantily, takže se vygeneruje pouze bodová prognóza. Možná budete chtít porozumět předpovědím v konkrétním kvantilu distribuce. Například když se prognóza používá k řízení inventáře, jako jsou potraviny nebo virtuální počítače pro cloudovou službu. V takových případech je kontrolním bodem obvykle něco jako "chceme, aby položka byla na skladě a nevyčerchá se 99 % času". Následující ukázka ukazuje, jak určit kvantily prognózy, například 50. nebo 95. percentil:
# Get forecasts for the 5th, 50th, and 90th percentiles
fitted_model.quantiles = [0.05, 0.5, 0.9]
fitted_model.forecast_quantiles(
test_dataset, label_query, forecast_destination=pd.Timestamp(2019, 1, 8)
)
Můžete vypočítat metriky modelu, jako je odmocněná střední kvadratická chyba (RMSE) nebo střední absolutní procentuální chyba (MAPE), které vám pomůžou odhadnout výkon modelů. Příklad najdete v části Vyhodnocení v poznámkovém bloku Žádosti o sdílení kol .
Po určení celkové přesnosti modelu je nejrealističtějším dalším krokem použití modelu k předpovídání neznámých budoucích hodnot.
Zadejte datovou sadu ve stejném formátu jako testovací sada test_dataset
, ale s budoucími datetimes a výsledná sada predikcí jsou předpokládané hodnoty pro každý krok časové řady. Předpokládejme, že poslední záznamy v sadě dat byly z 31. prosince 2018. Pokud chcete předpovídat poptávku, vytvořte záznam časové řady pro každý obchod od 1. ledna 2019.
day_datetime,store,week_of_year
01/01/2019,A,1
01/01/2019,A,1
Opakujte kroky potřebné k načtení těchto budoucích dat do datového rámce a pak spuštěním příkazu best_run.forecast_quantiles(test_dataset)
předpověděte budoucí hodnoty.
Poznámka
Predikce v ukázce se nepodporují pro prognózování s využitím automatizovaného strojového učení, pokud target_lags
target_rolling_window_size
jsou nebo jsou povolené.
Prognózování ve velkém měřítku
PLATÍ PRO:Sada Python SDK azureml v1
Důležité
Mnoho modelů a hierarchických časových řad se v současné době podporuje jenom ve službě Azure Machine Learning verze 1. Připravuje se podpora pro Azure Machine Learning v2.
Existují scénáře, kdy jeden model strojového učení nestačí a je potřeba více modelů strojového učení. Například predikce prodeje jednotlivých prodejen pro značku nebo přizpůsobení prostředí jednotlivým uživatelům. Vytvoření modelu pro každou instanci může vést k lepším výsledkům u mnoha problémů se strojovým učením.
Seskupení je koncept prognózování časových řad, který umožňuje kombinování časových řad a trénování jednotlivých modelů pro jednotlivé skupiny. Tento přístup může být zvlášť užitečný, pokud máte časové řady, které vyžadují vyhlazování, vyplňování nebo entity ve skupině, které můžou těžit z historie nebo trendů z jiných entit. Mnoho modelů a hierarchického prognózování časových řad jsou řešení založená na automatizovaném strojovém učení pro tyto rozsáhlé scénáře prognózování.
Mnoho modelů
Řešení Azure Machine Learning s mnoha modely s automatizovaným strojovém učením umožňuje uživatelům trénovat a spravovat miliony modelů paralelně. Akcelerátor řešení pro mnoho modelů používá k trénování modelu kanály Azure Machine Learning . Konkrétně se používají objekt pipeline a ParalleRunStep , které vyžadují specifické parametry konfigurace nastavené prostřednictvím ParallelRunConfig.
Následující diagram znázorňuje pracovní postup pro řešení s mnoha modely.
Následující kód ukazuje klíčové parametry, které uživatelé potřebují k nastavení mnoha modelů. Příklad prognózování mnoha modelů najdete v poznámkovém bloku Mnoho modelů – Automatizované strojové učení.
from azureml.train.automl.runtime._many_models.many_models_parameters import ManyModelsTrainParameters
partition_column_names = ['Store', 'Brand']
automl_settings = {"task" : 'forecasting',
"primary_metric" : 'normalized_root_mean_squared_error',
"iteration_timeout_minutes" : 10, #This needs to be changed based on the dataset. Explore how long training is taking before setting this value
"iterations" : 15,
"experiment_timeout_hours" : 1,
"label_column_name" : 'Quantity',
"n_cross_validations" : "auto", # Could be customized as an integer
"cv_step_size" : "auto", # Could be customized as an integer
"time_column_name": 'WeekStarting',
"max_horizon" : 6,
"track_child_runs": False,
"pipeline_fetch_max_batch_size": 15,}
mm_paramters = ManyModelsTrainParameters(automl_settings=automl_settings, partition_column_names=partition_column_names)
Prognózování hierarchických časových řad
Ve většině aplikací mají zákazníci potřebu porozumět svým prognózám na makro a mikroúrovni firmy. ať už se jedná o predikci prodeje produktů v různých geografických lokalitách nebo o pochopení očekávané poptávky pracovníků v různých organizacích ve společnosti. Schopnost vytrénovat model strojového učení tak, aby inteligentně odhadl data hierarchie, je nezbytná.
Hierarchická časová řada je struktura, ve které má řada vnořené atributy. Atributy geografického katalogu nebo katalogu produktů jsou přirozené příklady. Následující příklad ukazuje data s jedinečnými atributy, které tvoří hierarchii. Naše hierarchie je definována podle typu produktu, jako jsou sluchátka nebo tablety, kategorie produktů, která rozděluje typy produktů na příslušenství a zařízení, a oblast, ve které se produkty prodávají.
Pro další vizualizaci to můžete udělat tak, že úrovně listu hierarchie obsahují všechny časové řady s jedinečnými kombinacemi hodnot atributů. Každá vyšší úroveň v hierarchii bere v úvahu o jednu dimenzi méně pro definování časové řady a agreguje každou sadu podřízených uzlů z nižší úrovně do nadřazeného uzlu.
Řešení hierarchické časové řady je postavené na řešení Mnoho modelů a sdílí podobné nastavení konfigurace.
Následující kód ukazuje klíčové parametry pro nastavení hierarchických běhů prognózování časových řad. Kompletní příklad najdete v poznámkovém bloku Hierarchical Time Series – Automated ML (Hierarchical Time Series – Automated ML).
from azureml.train.automl.runtime._hts.hts_parameters import HTSTrainParameters
model_explainability = True
engineered_explanations = False # Define your hierarchy. Adjust the settings below based on your dataset.
hierarchy = ["state", "store_id", "product_category", "SKU"]
training_level = "SKU"# Set your forecast parameters. Adjust the settings below based on your dataset.
time_column_name = "date"
label_column_name = "quantity"
forecast_horizon = 7
automl_settings = {"task" : "forecasting",
"primary_metric" : "normalized_root_mean_squared_error",
"label_column_name": label_column_name,
"time_column_name": time_column_name,
"forecast_horizon": forecast_horizon,
"hierarchy_column_names": hierarchy,
"hierarchy_training_level": training_level,
"track_child_runs": False,
"pipeline_fetch_max_batch_size": 15,
"model_explainability": model_explainability,# The following settings are specific to this sample and should be adjusted according to your own needs.
"iteration_timeout_minutes" : 10,
"iterations" : 10,
"n_cross_validations" : "auto", # Could be customized as an integer
"cv_step_size" : "auto", # Could be customized as an integer
}
hts_parameters = HTSTrainParameters(
automl_settings=automl_settings,
hierarchy_column_names=hierarchy,
training_level=training_level,
enable_engineered_explanations=engineered_explanations
)
Příklady poznámkových bloků
V ukázkových poznámkových blocích pro prognózování najdete podrobné příklady kódu rozšířené konfigurace prognózování, mezi které patří:
- modely hlubokého učení
- Detekce svátků a extrakce příznaků
- ruční konfigurace pro funkce agregace se zpožděním a klouzavých oken
Další kroky
- Přečtěte si další informace o nasazení modelu AutoML do online koncového bodu.
- Přečtěte si o interpretovatelnosti: vysvětlení modelů v automatizovaném strojovém učení (Preview).
- Přečtěte si, jak AutoML vytváří modely prognóz.
- Zjistěte, jak nakonfigurovat AutoML pro různé scénáře prognózování.