AutoML instellen om een tijdreeksprognosemodel te trainen met Python

VAN TOEPASSING OP: Python SDK azure-ai-ml v2 (current)

In dit artikel leert u hoe u AutoML-training instelt voor modellen voor tijdreeksprognoses met geautomatiseerde ML van Azure Machine Learning in de Azure Machine Learning Python SDK.

Dit doet u als volgt:

  • Gegevens voorbereiden voor training.
  • Configureer specifieke tijdreeksparameters in een prognosetaak.
  • Voorspellingen ophalen van getrainde tijdreeksmodellen.

Zie de Zelfstudie: Vraag voorspellen met geautomatiseerde machine learning voor een voorbeeld van een tijdreeksprognose met behulp van geautomatiseerde ML in de Azure Machine Learning-studio voor een ervaring met weinig code.

AutoML maakt gebruik van standaard machine learning-modellen samen met bekende tijdreeksmodellen om prognoses te maken. Onze aanpak omvat meerdere contextuele variabelen en hun relatie tot elkaar tijdens de training. Aangezien meerdere factoren van invloed kunnen zijn op een prognose, sluit deze methode goed aan bij scenario's voor prognose in de echte wereld. Bij het voorspellen van verkoop kunnen interacties van historische trends, wisselkoers en prijs allemaal gezamenlijk het verkoopresultaat bepalen. Zie ons artikel over prognosemethodologie voor meer informatie.

Vereisten

Voor dit artikel hebt u nodig:

Training en validatiegegevens

Invoergegevens voor AutoML-prognose moeten geldige tijdreeksen in tabelvorm bevatten. Elke variabele moet een eigen overeenkomende kolom in de gegevenstabel hebben. AutoML vereist ten minste twee kolommen: een tijdkolom die de tijdas vertegenwoordigt en de doelkolom die de hoeveelheid is die moet worden voorspeld. Andere kolommen kunnen als voorspellers fungeren. Zie hoe AutoML uw gegevens gebruikt voor meer informatie.

Belangrijk

Wanneer u een model traint voor het voorspellen van toekomstige waarden, moet u ervoor zorgen dat alle functies die in de training worden gebruikt, kunnen worden gebruikt bij het uitvoeren van voorspellingen voor de beoogde horizon.

Een functie voor de huidige aandelenkoers kan bijvoorbeeld de nauwkeurigheid van de training enorm verhogen. Als u echter met een lange horizon wilt voorspellen, kunt u mogelijk niet nauwkeurig toekomstige aandelenwaarden voorspellen die overeenkomen met toekomstige tijdreekspunten en kan de nauwkeurigheid van het model afnemen.

AutoML-prognosetaken vereisen dat uw trainingsgegevens worden weergegeven als een MLTable-object . Een MLTable specificeert een gegevensbron en stappen voor het laden van de gegevens. Zie de instructiehandleiding voor MLTable voor meer informatie en gebruiksvoorbeelden. Stel dat uw trainingsgegevens zich bevinden in een CSV-bestand in een lokale map, ./train_data/timeseries_train.csv. U kunt een nieuwe MLTable definiëren door de volgende YAML-code te kopiëren naar een nieuw bestand, ./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

U kunt nu als volgt een invoergegevensobject definiëren, dat vereist is om een trainingstaak te starten, met behulp van de AzureML Python SDK:

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"
)

U kunt validatiegegevens op een vergelijkbare manier opgeven door een MLTable en een invoergegevensobject te maken. Als u geen validatiegegevens opgeeft, maakt AutoML ook automatisch kruisvalidatiesplitsingen van uw trainingsgegevens om te gebruiken voor de modelselectie. Zie ons artikel over het selecteren van prognosemodellen voor meer informatie. Zie ook Vereisten voor lengte van trainingsgegevens voor meer informatie over de hoeveelheid trainingsgegevens die u nodig hebt om een prognosemodel te trainen.

Meer informatie over hoe AutoML kruisvalidatie toepast om overfitting te voorkomen.

Compute en uitvoering van het experiment instellen

AutoML maakt gebruik van AzureML Compute, een volledig beheerde rekenresource, om de trainingstaak uit te voeren. In het volgende voorbeeld wordt een rekencluster met de naam cpu-compute gemaakt:

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()

Experiment configureren

Er zijn verschillende opties die u kunt gebruiken om uw AutoML-prognoseexperiment te configureren. Deze configuratieparameters worden ingesteld in de taakmethode automl.forecasting(). U kunt ook instellingen voor jobtraining en afsluitcriteria instellen met respectievelijk de functies set_training() en set_limits().

In het volgende voorbeeld ziet u hoe u een prognosetaak maakt met een genormaliseerde gemiddelde kwadratische fout als het primaire metrische gegeven en automatisch geconfigureerde kruisvalidatievouwen:

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,
)

Configuratie-instellingen

Prognosetaken hebben veel instellingen die specifiek zijn voor prognose. Gebruik de methode set_forecast_settings() van een ForecastingJob om prognoseparameters in te stellen. In het volgende voorbeeld geven we de naam op van de tijdkolom in de trainingsgegevens en stellen we de prognosehorizk in:

# Forecasting specific configuration
forecasting_job.set_forecast_settings(
    time_column_name=time_column_name,
    forecast_horizon=24
)

De naam van de tijdkolom is een vereiste instelling en over het algemeen moet u de prognoseperiode instellen op basis van uw voorspellingsscenario. Als uw gegevens meerdere tijdreeksen bevatten, kunt u de namen van de kolommen met tijdreeks-id's opgeven. Wanneer deze kolommen zijn gegroepeerd, wordt de afzonderlijke reeks gedefinieerd. Stel dat u gegevens hebt die bestaan uit de uurverkoop van verschillende winkels en merken. In het volgende voorbeeld ziet u hoe u de kolommen voor tijdreeks-id's instelt, ervan uitgaande dat de gegevens kolommen met de namen 'store' en 'brand' bevatten:

# 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 probeert automatisch kolommen met tijdreeks-id's in uw gegevens te detecteren als er geen kolommen zijn opgegeven.

Andere instellingen zijn optioneel en worden gecontroleerd in de sectie optionele instellingen .

Optionele instellingen

Er zijn optionele configuraties beschikbaar voor prognosetaken, zoals het inschakelen van Deep Learning en het opgeven van een doelaggregatie van rollend venster. Een volledige lijst met parameters is beschikbaar in het forecast_settings API-document.

Instellingen voor modelzoekopdrachten

Er zijn twee optionele instellingen die de modelruimte bepalen waar AutoML naar het beste model zoekt, allowed_training_algorithms en blocked_training_algorithms. Als u de zoekruimte wilt beperken tot een bepaalde set modelklassen, gebruikt u allowed_training_algorithms zoals in het volgende voorbeeld:

# Only search ExponentialSmoothing and ElasticNet models
forecasting_job.set_training(
    allowed_training_algorithms=["ExponentialSmoothing", "ElasticNet"]
)

In dit geval zoekt de prognosetaak alleen naar modelklassen Exponentieel vloeiend maken en Elastisch net. Als u een bepaalde set modelklassen uit de zoekruimte wilt verwijderen, gebruikt u de blocked_training_algorithms zoals in het volgende voorbeeld:

# Search over all model classes except Prophet
forecasting_job.set_training(
    blocked_training_algorithms=["Prophet"]
)

De taak doorzoekt nu alle modelklassen , met uitzondering van Prophet. Zie ondersteunde prognosemodellen en ondersteunde regressiemodellen voor een lijst met namen van prognosemodellen die worden geaccepteerd in allowed_training_algorithms enblocked_training_algorithms.

Deep Learning inschakelen

AutoML wordt geleverd met een aangepast DNN-model (deep neural network) met de naam ForecastTCN. Dit model is een tijdelijk convolutionele netwerk, of TCN, dat algemene imaging-taakmethoden toepast op tijdreeksmodellering. Eendimensionale 'causale' convolusies vormen namelijk de ruggengraat van het netwerk en stellen het model in staat om complexe patronen te leren over lange duur in de trainingsgeschiedenis.

Diagram met de belangrijkste onderdelen van De ForecastTCN van AutoML.

De ForecastTCN bereikt vaak een hogere nauwkeurigheid dan standaardtijdreeksmodellen wanneer de trainingsgeschiedenis duizenden of meer waarnemingen bevat. Het duurt echter ook langer om ForecastTCN-modellen te trainen en over te halen vanwege hun hogere capaciteit.

U kunt de ForecastTCN in AutoML inschakelen door de enable_dnn_training vlag in de methode set_training() als volgt in te stellen:

# Include ForecastTCN models in the model search
forecasting_job.set_training(
    enable_dnn_training=True
)

Als u DNN wilt inschakelen voor een AutoML-experiment dat is gemaakt in de Azure Machine Learning-studio, raadpleegt u de taaktype-instellingen in de gebruikersinterface van Studio.

Notitie

  • Wanneer u DNN inschakelt voor experimenten die zijn gemaakt met de SDK, worden de beste modeluitleg uitgeschakeld.
  • DNN-ondersteuning voor prognoses in geautomatiseerde machine learning wordt niet ondersteund voor uitvoeringen die zijn geïnitieerd in Databricks.
  • GPU-rekentypen worden aanbevolen wanneer DNN-training is ingeschakeld

Aggregatie van rollend venster voor doel

Recente waarden van het doel zijn vaak impactvolle functies in een prognosemodel. Met aggregaties van rollende vensters kunt u rolling aggregaties van gegevenswaarden toevoegen als functies. Het genereren en gebruiken van deze functies als extra contextuele gegevens helpt bij de nauwkeurigheid van het trainmodel.

Overweeg een scenario voor het voorspellen van de vraag naar energie waarin weergegevens en historische vraag beschikbaar zijn. In de tabel ziet u de resulterende functie-engineering die plaatsvindt wanneer vensteraggregatie wordt toegepast gedurende de laatste drie uur. Kolommen voor minimum, maximum en som worden gegenereerd in een sliding window van drie uur op basis van de gedefinieerde instellingen. Bijvoorbeeld, voor de waarneming die geldig is op 8 september 2017 4:00 uur, worden de maximum-, minimum- en somwaarden berekend met behulp van de vraagwaarden voor 8 september 2017 1:00 - 3:00 uur. In dit venster van drie uur worden gegevens voor de resterende rijen ingevuld.

doorlopend doelvenster

U kunt functies voor aggregatie van rolling window inschakelen en de venstergrootte instellen via de methode set_forecast_settings(). In het volgende voorbeeld stellen we de venstergrootte in op 'automatisch', zodat AutoML automatisch een goede waarde voor uw gegevens bepaalt:

forecasting_job.set_forecast_settings(
    ...,  # other settings
    target_rolling_window_size='auto'
)

Verwerking van korte reeksen

Geautomatiseerde ML beschouwt een tijdreeks als een korte reeks als er onvoldoende gegevenspunten zijn om de train- en validatiefasen van modelontwikkeling uit te voeren. Zie Vereisten voor lengte van trainingsgegevens voor meer informatie over lengtevereisten.

AutoML heeft verschillende acties die het kan uitvoeren voor korte reeksen. Deze acties kunnen worden geconfigureerd met de short_series_handling_config instelling. De standaardwaarde is 'auto'. In de volgende tabel worden de instellingen beschreven:

Instelling Beschrijving
auto De standaardwaarde voor de verwerking van korte reeksen.
- Als alle reeksen kort zijn, vult u de gegevens in.
- Als niet alle reeksen kort zijn, laat u de korte reeks vallen.
pad Als short_series_handling_config = pad, voegt geautomatiseerde ML willekeurige waarden toe aan elke korte reeks die wordt gevonden. Hieronder ziet u de kolomtypen en de kolomtypen waarmee ze zijn opgevuld:
- Objectkolommen met NaN's
- Numerieke kolommen met 0
- Booleaanse/logische kolommen met False
- De doelkolom is gevuld met willekeurige waarden met een gemiddelde van nul en de standaarddeviatie van 1.
drop Als short_series_handling_config = drop, verwijdert geautomatiseerde ML de korte reeks en wordt deze niet gebruikt voor training of voorspelling. Voorspellingen voor deze reeksen retourneren NaN's.
None Er is geen reeks opgevuld of verwijderd

In het volgende voorbeeld stellen we de verwerking van korte reeksen zo in dat alle korte reeksen worden opgevuld tot de minimale lengte:

forecasting_job.set_forecast_settings(
    ...,  # other settings
    short_series_handling_config='pad'
)

Waarschuwing

Opvulling kan van invloed zijn op de nauwkeurigheid van het resulterende model, omdat we kunstmatige gegevens introduceren om eerdere training zonder fouten te krijgen. Als veel van de reeksen kort zijn, ziet u mogelijk ook enige impact in de resultaten van de verklaarbaarheid

& Aggregatie van frequentiedoelgegevens

Gebruik de opties voor frequentie en gegevensaggregatie om fouten te voorkomen die worden veroorzaakt door onregelmatige gegevens. Uw gegevens zijn onregelmatig als ze geen ingestelde frequentie in de tijd volgen, zoals elk uur of dagelijks. Point-of-Sales-gegevens zijn een goed voorbeeld van onregelmatige gegevens. In deze gevallen kan AutoML uw gegevens aggregeren naar een gewenste frequentie en vervolgens een prognosemodel bouwen op basis van de aggregaties.

U moet de instellingen en target_aggregate_function instellen voor het frequency verwerken van onregelmatige gegevens. De frequentie-instelling accepteert Pandas DateOffset-tekenreeksen als invoer. Ondersteunde waarden voor de aggregatiefunctie zijn:

Functie Beschrijving
sum  Som van doelwaarden
mean  Gemiddelde of gemiddelde van doelwaarden
min Minimumwaarde van een doel
max Maximumwaarde van een doel
  • De doelkolomwaarden worden geaggregeerd op basis van de opgegeven bewerking. Normaal gesproken is som geschikt voor de meeste scenario's.
  • Numerieke voorspellende kolommen in uw gegevens worden geaggregeerd op som, gemiddelde, minimumwaarde en maximumwaarde. Als gevolg hiervan genereert geautomatiseerde ML nieuwe kolommen met achtervoegsel met de naam van de aggregatiefunctie en wordt de geselecteerde aggregatiebewerking toegepast.
  • Voor categorische voorspellende kolommen worden de gegevens geaggregeerd op modus, de meest prominente categorie in het venster.
  • Datum voorspellende kolommen worden geaggregeerd op basis van minimumwaarde, maximumwaarde en modus.

In het volgende voorbeeld wordt de frequentie ingesteld op elk uur en de aggregatiefunctie op som:

# Aggregate the data to hourly frequency
forecasting_job.set_forecast_settings(
    ...,  # other settings
    frequency='H',
    target_aggregate_function='sum'
)

Aangepaste instellingen voor kruisvalidatie

Er zijn twee aanpasbare instellingen waarmee kruisvalidatie voor prognosetaken wordt bepaald: het aantal vouwen, n_cross_validationsen de stapgrootte die de tijdsverschil tussen vouwen definieert, cv_step_size. Zie Selectie van prognosemodellen voor meer informatie over de betekenis van deze parameters. Standaard stelt AutoML beide instellingen automatisch in op basis van de kenmerken van uw gegevens, maar ervaren gebruikers willen ze mogelijk handmatig instellen. Stel dat u dagelijkse verkoopgegevens hebt en u wilt dat uw validatie-instelling bestaat uit vijf vouwen met een verschuiving van zeven dagen tussen aangrenzende vouwen. In het volgende codevoorbeeld ziet u hoe u deze kunt instellen:

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
)

Aangepaste featurization

Standaard worden met AutoML trainingsgegevens aangevuld met ontworpen functies om de nauwkeurigheid van de modellen te vergroten. Zie Geautomatiseerde functie-engineering voor meer informatie. Sommige van de voorverwerkingsstappen kunnen worden aangepast met behulp van de set_featurization() methode van de prognosetaak.

Ondersteunde aanpassingen voor prognoses zijn onder andere:

Aanpassing Description Opties
Bijwerken van kolomdoel Overschrijf het automatisch gedetecteerde functietype voor de opgegeven kolom. "Categorical", "DateTime", "Numeriek"
Transformatieparameter bijwerken Werk de parameters voor de opgegeven imputer bij. {"strategy": "constant", "fill_value": <value>}, {"strategy": "median"}, {"strategy": "ffill"}

Stel dat u een scenario hebt waarin de gegevens functies bevatten zoals prijs, een vlag 'te koop' en een producttype. In het volgende voorbeeld ziet u hoe u aangepaste typen en imputers kunt instellen voor deze functies:

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"},
)

Als u de Azure Machine Learning-studio voor uw experiment gebruikt, raadpleegt u Featurization aanpassen in de studio.

Het experiment uitvoeren

Nadat alle instellingen zijn geconfigureerd, kunt u de prognosetaak mlcient als volgt starten:

# 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

Prognoses maken met een getraind model

Zodra u AutoML hebt gebruikt om een beste model te trainen en te selecteren, is de volgende stap het evalueren van het model. Als deze voldoet aan uw vereisten, kunt u deze gebruiken om prognoses voor de toekomst te genereren. In deze sectie wordt beschreven hoe u Python-scripts schrijft voor evaluatie en voorspelling. Zie ons voorbeeldnotebook voor een voorbeeld van het implementeren van een getraind model met een deductiescript.

De nauwkeurigheid van het model evalueren met een doorlopende prognose

Voordat u een model in productie neemt, moet u de nauwkeurigheid ervan evalueren op basis van een testset op basis van de trainingsgegevens. Een best practice-procedure is een rolling evaluatie die de getrainde voorspellingsfunctie in de tijd over de testset rolt, waarbij het gemiddelde van de metrische foutgegevens wordt berekend over verschillende voorspellingsvensters. In het ideale voorbeeld is de testset voor de evaluatie lang ten opzichte van de prognoseperiode van het model. Schattingen van voorspellingsfouten kunnen anders statistisch ruis veroorzaken en daarom minder betrouwbaar zijn.

Stel dat u een model traint op dagelijkse verkoop om de vraag tot twee weken (14 dagen) in de toekomst te voorspellen. Als er voldoende historische gegevens beschikbaar zijn, kunt u de laatste maanden tot zelfs een jaar van de gegevens voor de testset reserveren. De doorlopende evaluatie begint met het genereren van een prognose van 14 dagen vooruit voor de eerste twee weken van de testset. Vervolgens wordt de voorspellingsfunctie met een aantal dagen naar de testset verplaatst en genereert u nog een 14-day-ahead-prognose van de nieuwe positie. Het proces gaat door totdat u aan het einde van de testset bent.

Als u een rolling evaluatie wilt uitvoeren, roept u de rolling_forecast methode van de fitted_modelaan en berekent u vervolgens de gewenste metrische gegevens voor het resultaat. Een rolling evaluatiedeductiescript wordt weergegeven in het volgende codevoorbeeld:

"""
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)

In dit voorbeeld is de stapgrootte voor de rolling forecast ingesteld op een, wat betekent dat de prognose bij elke iteratie één periode of één dag in ons voorbeeld van vraagvoorspelling is gevorderd. Het totale aantal prognoses dat door rolling_forecast wordt geretourneerd, is afhankelijk van de lengte van de testset en de grootte van deze stap. Zie de documentatie over rolling_forecast() en het notebook Forecasting away from training data (Prognoses buiten trainingsgegevens) voor meer informatie en voorbeelden.

Voorspelling in de toekomst

De forecast_quantiles() genereert prognoses voor bepaalde kwantielen van de voorspellingsdistributie. Deze methode biedt dus een manier om een puntprognose te krijgen met een kegel van onzekerheid eromheen. Meer informatie in het notebook Prognose weg van trainingsgegevens.

In het volgende voorbeeld vervangt u eerst alle waarden in y_pred door NaN. De oorsprong van de prognose bevindt zich aan het einde van de trainingsgegevens in dit geval. Als u echter alleen de tweede helft van y_predNaNvervangt door , zou de functie de numerieke waarden in de eerste helft ongewijzigd laten, maar de NaN waarden in de tweede helft voorspellen. De functie retourneert zowel de voorspelde waarden als de uitgelijnde functies.

U kunt ook de forecast_destination parameter in de forecast_quantiles() functie gebruiken om waarden tot een opgegeven datum te voorspellen.

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)
)

Hier worden geen kwantielen opgegeven, dus alleen de puntprognose wordt gegenereerd. Misschien wilt u de voorspellingen bij een specifiek kwantiel van de verdeling begrijpen. Bijvoorbeeld wanneer de prognose wordt gebruikt om de voorraad te beheren, zoals boodschappen of virtuele machines voor een cloudservice. In dergelijke gevallen is het controlepunt meestal iets als "we willen dat het artikel op voorraad is en niet 99% van de tijd op is". In het volgende voorbeeld ziet u hoe u prognosekwantielen opgeeft, zoals het 50e of 95e percentiel:

# 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)
)

U kunt metrische gegevens van modellen berekenen, zoals RMSE (gemiddelde kwadratische fout) of MAPE (mean absolute percentage error), zodat u de prestaties van modellen kunt schatten. Zie de sectie Evalueren van het notitieblok Vraag naar fietsshare voor een voorbeeld.

Nadat de algehele nauwkeurigheid van het model is bepaald, is de meest realistische volgende stap het gebruik van het model om onbekende toekomstige waarden te voorspellen.

Geef een gegevensset op in dezelfde indeling als de testset test_dataset , maar met toekomstige datum/tijd, en de resulterende voorspellingsset is de voorspelde waarden voor elke tijdreeksstap. Stel dat de laatste records in de gegevensset 31 december 2018 zijn. Als u de vraag wilt voorspellen, maakt u een tijdreeksrecord voor elke winkel vanaf 1 januari 2019.

day_datetime,store,week_of_year
01/01/2019,A,1
01/01/2019,A,1

Herhaal de benodigde stappen om deze toekomstige gegevens in een gegevensframe te laden en voer vervolgens uit best_run.forecast_quantiles(test_dataset) om toekomstige waarden te voorspellen.

Notitie

In-sample voorspellingen worden niet ondersteund voor prognoses met geautomatiseerde ML wanneer target_lags en/of target_rolling_window_size zijn ingeschakeld.

Prognose op schaal

VAN TOEPASSING OP:Python SDK azureml v1

Belangrijk

Veel modellen en hiërarchische tijdreeksen worden momenteel alleen ondersteund in AzureML v1. Ondersteuning voor AzureML v2 is binnenkort beschikbaar.

Er zijn scenario's waarin één machine learning-model onvoldoende is en meerdere machine learning-modellen nodig zijn. Bijvoorbeeld het voorspellen van de verkoop voor elke afzonderlijke winkel voor een merk of het afstemmen van een ervaring op individuele gebruikers. Het bouwen van een model voor elk exemplaar kan leiden tot verbeterde resultaten op veel machine learning-problemen.

Groeperen is een concept in tijdreeksprognose waarmee tijdreeksen kunnen worden gecombineerd om een afzonderlijk model per groep te trainen. Deze benadering kan met name handig zijn als u tijdreeksen hebt die moeten worden afgevlakt, gevuld of entiteiten in de groep die kunnen profiteren van de geschiedenis of trends van andere entiteiten. Veel modellen en hiërarchische tijdreeksprognoses zijn oplossingen die worden aangestuurd door geautomatiseerde machine learning voor deze grootschalige prognosescenario's.

Veel modellen

Met de azure Machine Learning-oplossing voor veel modellen met geautomatiseerde machine learning kunnen gebruikers miljoenen modellen parallel trainen en beheren. De oplossingsversneller Veel modellen maakt gebruik van Azure Machine Learning-pijplijnen om het model te trainen. Met name een Pijplijnobject en ParalleRunStep worden gebruikt en vereisen specifieke configuratieparameters die zijn ingesteld via de ParallelRunConfig.

In het volgende diagram ziet u de werkstroom voor de oplossing met veel modellen.

Conceptdiagram van veel modellen

De volgende code demonstreert de belangrijkste parameters die gebruikers nodig hebben om hun vele modellen uit te voeren. Zie het notebook Veel modellen- geautomatiseerde ML voor een voorbeeld van een prognose voor een groot aantal modellen

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)

Hiërarchische tijdreeksprognose

In de meeste toepassingen hebben klanten behoefte aan inzicht in hun prognoses op macro- en microniveau van het bedrijf; of dat nu gaat om het voorspellen van de verkoop van producten op verschillende geografische locaties of het begrijpen van de verwachte vraag van werknemers voor verschillende organisaties in een bedrijf. De mogelijkheid om een machine learning-model te trainen om op intelligente wijze hiërarchiegegevens te voorspellen, is essentieel.

Een hiërarchische tijdreeks is een structuur waarin de reeks geneste kenmerken heeft. Geografische kenmerken of productcataloguskenmerken zijn natuurlijke voorbeelden. In het volgende voorbeeld ziet u gegevens met unieke kenmerken die een hiërarchie vormen. Onze hiërarchie wordt gedefinieerd door: het producttype zoals hoofdtelefoons of tablets, de productcategorie die producttypen splitst in accessoires en apparaten en de regio waarin de producten worden verkocht.

Voorbeeld van tabel met onbewerkte gegevens voor hiërarchische gegevens

Om dit verder te visualiseren, bevatten de leaf-niveaus van de hiërarchie alle tijdreeksen met unieke combinaties van kenmerkwaarden. Elk hoger niveau in de hiërarchie houdt rekening met één dimensie minder voor het definiëren van de tijdreeks en voegt elke set onderliggende knooppunten van het lagere niveau samen in een bovenliggend knooppunt.

Hiërarchievisual voor gegevens

De hiërarchische oplossing voor tijdreeksen is gebouwd op basis van de oplossing Veel modellen en deelt een vergelijkbare configuratie-instelling.

De volgende code demonstreert de belangrijkste parameters voor het instellen van de hiërarchische uitvoering van tijdreeksprognoses. Zie hiërarchische tijdreeks - Geautomatiseerd ML-notebook voor een end-to-end-voorbeeld.


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
)

Voorbeeldnotebooks

Zie de notebooks met prognosevoorbeelden voor gedetailleerde codevoorbeelden van geavanceerde prognoseconfiguratie, waaronder:

Volgende stappen