Usa l'algoritmo di SageMaker previsione DeepAR - Amazon SageMaker

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Usa l'algoritmo di SageMaker previsione DeepAR

L'algoritmo di previsione di Amazon SageMaker DeepAR è un algoritmo di apprendimento supervisionato per la previsione di serie temporali scalari (unidimensionali) utilizzando reti neurali ricorrenti (). RNN I metodi di previsione classici, come la media mobile integrata autoregressiva (ARIMA) o il livellamento esponenziale (), adattano un singolo modello a ogni singola serie temporale. ETS Quindi utilizzano il modello per estrapolare le serie temporali in futuro.

In molte applicazioni, tuttavia, sono presenti molte serie temporali simili in un set di unità trasversali. Ad esempio, potresti avere raggruppamenti di serie temporali per la richiesta di diversi prodotti, carichi del server e pagine Web. Per questo tipo di applicazione, è possibile utilizzare l’addestramento di un singolo modello per tutte le serie temporali. DeepAR adotta questo approccio. Quando il set di dati contiene centinaia di serie temporali correlate, DeepAr supera gli standard e i ARIMA metodi. ETS È anche possibile utilizzare il modello addestrato per generare previsioni per le nuove serie temporali simili a quelle su cui è stato addestrato.

L'input di addestramento per l'algoritmo DeepAR è una o, preferibilmente, più serie temporali target che sono state generate dallo stesso processo o da processi simili. In base a questo set di dati di input, l'algoritmo addestra un modello che apprende un'approssimazione di questo processo/questi processi e la utilizza per prevedere l'evoluzione della serie temporale. Ogni serie temporale target può essere opzionalmente associata a un vettore di caratteristiche di categoria (indipendenti dal tempo) statiche fornite dal campo cat e un vettore di serie temporali (dipendenti dal tempo) dinamiche fornite dal campo dynamic_feat. SageMaker addestra il modello DeepAR campionando casualmente esempi di addestramento da ciascuna serie temporale target nel set di dati di addestramento. Ogni esempio di addestramento è costituito da una coppia di finestre di contesto e di previsione adiacenti con lunghezze predefinite fisse. Per controllare fino a quando nel passato può vedere la rete, usa l'iperparametro context_length. Per controllare fino a quando possono essere proiettate le previsioni future, usa l'iperparametro prediction_length. Per ulteriori informazioni, consulta Come funziona l'algoritmo DeepAR.

Interfaccia di input/output per l'algoritmo DeepAR

DeepAR supporta due canali di dati. Il canale train obbligatorio descrive il set di dati di addestramento. Il canale test facoltativo descrive un set di dati che viene utilizzato dall'algoritmo per valutare l'accuratezza del modello dopo l’addestramento. È possibile fornire set di dati di formazione e test in formato Lines. JSON I file possono essere nel formato gzip o Parquet.

Quando specifichi i percorsi per i dati di addestramento e di test, puoi indicare un singolo file o una directory contenente più file che possono essere memorizzati in sottodirectory. Se si specifica una directory, DeepAr utilizza tutti i file nella directory come input per il canale corrispondente, tranne quelli che iniziano con un punto (.) e quelli denominati _. SUCCESS In tal modo puoi utilizzare direttamente le cartelle di output prodotte dai processi Spark come canali di input per i processi di addestramento DeepAR.

Per impostazione predefinita, il modello DeepAR determina il formato di input dall'estensione del file (.json, .json.gz o .parquet) nel percorso di input specificato. Se il percorso non termina con una di queste estensioni, devi specificare esplicitamente il formato in SDK for Python. Utilizza il parametro content_type della classe s3_input.

I record dei file di input devono contenere i seguenti campi:

  • start: una stringa con il formato YYYY-MM-DD HH:MM:SS. Il timestamp iniziale non è in grado di contenere le informazioni sul fuso orario.

  • target: una matrice di numeri interi o valori a virgola mobile che rappresentano le serie temporali. È possibile codificare i valori mancanti come valori null letterali, come "NaN" stringhe o come valori a virgola mobile in JSON Parquet. nan

  • dynamic_feat (opzionale): una matrice di matrici di numeri interi o valori a virgola mobile che rappresenta il vettore delle serie temporali di funzionalità personalizzate (funzionalità dinamiche). Se imposti questo campo, tutti i record devono avere lo stesso numero di matrici interne (lo stesso numero di serie temporali di caratteristiche). Inoltre, ogni matrice interna deve avere la stessa lunghezza del valore target associato più prediction_length. I valori mancanti non sono supportati nelle caratteristiche. Ad esempio, se la serie temporale target rappresenta la richiesta di prodotti diversi, un dynamic_feat associato potrebbe essere una serie temporale booleana che indica se una promozione è stata applicata (1) o meno (0) al prodotto specifico:

    {"start": ..., "target": [1, 5, 10, 2], "dynamic_feat": [[0, 1, 1, 0]]}
  • cat (opzionale): una serie di funzionalità categoriali che possono essere utilizzate per codificare i gruppi a cui appartiene il record. Le caratteristiche di categoria devono essere codificate come una sequenza in base 0 di numeri interi positivi. Ad esempio, il dominio di categoria {R, G, B} può essere codificato come {0, 1, 2}. Tutti i valori di ciascun dominio di categoria devono essere rappresentati nel set di dati di addestramento. In tal modo l'algoritmo DeepAR può prevedere solo le categorie che sono state osservate durante l’addestramento. Inoltre, ciascuna caratteristica di categoria è incorporata in uno spazio a bassa dimensione le cui dimensioni sono supervisionate dall'iperparametro embedding_dimension. Per ulteriori informazioni, consulta Iperparametri DeepAR.

Se usi un JSON file, deve essere in formato Lines. JSON Per esempio:

{"start": "2009-11-01 00:00:00", "target": [4.3, "NaN", 5.1, ...], "cat": [0, 1], "dynamic_feat": [[1.1, 1.2, 0.5, ...]]} {"start": "2012-01-30 00:00:00", "target": [1.0, -5.0, ...], "cat": [2, 3], "dynamic_feat": [[1.1, 2.05, ...]]} {"start": "1999-01-30 00:00:00", "target": [2.0, 1.0], "cat": [1, 4], "dynamic_feat": [[1.3, 0.4]]}

In questo esempio, ogni serie temporale ha due caratteristiche di categoria associate e le caratteristiche di una serie temporale.

Per Parquet, puoi usare gli stessi tre campi come colonne. Inoltre, "start" può essere il tipo datetime. Puoi comprimere i file Parquet usando gzip (gzip) o la libreria di compressione Snappy (snappy).

Se l'algoritmo viene addestrato senza i campi cat e dynamic_feat, apprende un modello "globale", che è un modello indipendente rispetto all'identità specifica della serie temporale target durante l'inferenza ed è subordinato solo alla sua forma.

Se il modello è subordinato ai dati caratteristica cat e dynamic_feat forniti per ogni serie temporale, la previsione sarà probabilmente influenzata dal carattere della serie temporale con le caratteristiche cat corrispondenti. Ad esempio, se la serie temporale target rappresenta la richiesta di articoli di vestiario, puoi associare un vettore cat bidimensionale che codifica il tipo di articolo (ad esempio 0 = scarpe, 1 = vestito) nel primo componente e il colore di un articolo (ad esempio, 0 = rosso, 1 = blu) nel secondo componente. L'aspetto di un input di esempio è simile al seguente.

{ "start": ..., "target": ..., "cat": [0, 0], ... } # red shoes { "start": ..., "target": ..., "cat": [1, 1], ... } # blue dress

Durante l'inferenza, puoi richiedere previsioni per target con valori cat che sono combinazioni dei valori cat osservati nei dati di addestramento, ad esempio:

{ "start": ..., "target": ..., "cat": [0, 1], ... } # blue shoes { "start": ..., "target": ..., "cat": [1, 0], ... } # red dress

Le seguenti linee guida si applicano ai dati di addestramento:

  • L'ora di inizio e la durata della serie temporale può differire. Ad esempio, nel marketing, i prodotti spesso sono inseriti in un catalogo di vendita al dettaglio in date diverse, pertanto la loro date di inizio differiscono naturalmente. Tutte le serie devono, tuttavia, avere la stessa frequenza, il numero di caratteristiche di categoria e il numero di caratteristiche dinamiche.

  • Il file di addestramento viene ordinato casualmente in base alla posizione delle serie temporali nel file. In altre parole, le serie temporali sono disposte in ordine casuale nel file.

  • Assicurati di impostare correttamente il campo start. L'algoritmo usa il timestamp start per determinare le caratteristiche interne.

  • Se utilizzi le caratteristiche di categoria (cat), tutte le serie temporali devono avere lo stesso numero di caratteristiche di categoria. Se il set di dati contiene il campo cat, l'algoritmo lo utilizza ed estrae la cardinalità dei gruppi dal set di dati. Per impostazione predefinita, cardinality è "auto". Se il set di dati contiene il campo cat, ma non lo vuoi utilizzare, puoi disabilitarlo impostando cardinality su "". Se un modello è stato addestrato utilizzando una caratteristica cat, è necessario includerla per l'inferenza.

  • Se il set di dati contiene il campo dynamic_feat, l'algoritmo lo utilizza automaticamente. Tutte le serie temporali devono avere lo stesso numero di serie temporali di caratteristiche. I punti temporali di ciascuna serie temporale del feature corrispondono one-to-one ai punti temporali dell'obiettivo. Inoltre, la voce nel campo dynamic_feat deve avere la stessa lunghezza della voce nel campo target. Se il set di dati contiene il campo dynamic_feat, ma non lo vuoi utilizzare, puoi disabilitarlo impostando num_dynamic_feat su "". Se il modello è stato addestrato con il campo dynamic_feat, è necessario specificare il campo per l'inferenza. Inoltre, ciascuna delle caratteristiche deve avere la lunghezza del target fornito in aggiunta alla prediction_length. In altre parole, sarà necessario fornire il valore della caratteristica in futuro.

Se specifichi dati di canale di testing opzionali, l'algoritmo DeepAR valuta il modello addestrato con parametri di precisione differenti. L'algoritmo calcola l'errore quadratico medio (RMSE) sui dati del test nel modo seguente:

RMSEFormula: Sqrt (1/nT (Sum [i, t] (y-hat (i, t) -y (i, t)) ^2))

dove yi,t è il valore true della serie temporale i al momento t e ŷi,t corrisponde alla previsione media. La somma è superiore a tutte le serie temporali n nel set di test e agli ultimi punti temporali T per ogni serie temporale, dove Τ corrisponde all'orizzonte di previsione. Puoi specificare la lunghezza dell'orizzonte di previsione impostando l'iperparametro prediction_length. Per ulteriori informazioni, consulta Iperparametri DeepAR.

Inoltre, l'accuratezza della distribuzione della previsione viene valutata dall'algoritmo utilizzando la perdita quantile ponderata. Per un quantile nell'intervallo [0, 1], la perdita quantile ponderata è definita come segue:

Equazione ponderata della perdita quantile.

dove qi,t(τ) è il quantile τ della distribuzione che il modello prevede. Per specificare per quali quantili calcolare la perdita, puoi imposta l'iperparametro test_quantiles. Inoltre, la media delle perdite quantile prescritte viene riportata come parte dei log di addestramento. Per informazioni, consultare Iperparametri DeepAR.

Per l'inferenza, DeepAr JSON accetta il formato e i seguenti campi:

  • "instances", che include una o più serie temporali in JSON formato Lines

  • Un nome di "configuration", che comprende i parametri per la generazione della previsione

Per ulteriori informazioni, consulta Formati di inferenza DeepAR.

Best practice per l'utilizzo dell'algoritmo DeepAR

Quando prepari i dati delle serie temporali, segui queste best practice per ottenere i risultati migliori:

  • Fornisci sempre l'intera serie temporale per l’addestramento, il test e la chiamata del modello per l'inferenza, eccetto quando dividi il set di dati per l’addestramento e il test. Indipendentemente dal modo in cui imposti context_length, non suddividere la serie temporale oppure specificane solo una parte. Il modello utilizza i punti di dati più indietro rispetto al valore impostato in context_length per la caratteristica dei valori ritardati.

  • Quando ottimizzi un modello DeepAR, puoi dividere il set di dati per creare un set di dati di addestramento e un set di dati di test. In una valutazione tipica, esegui il test del modello sulle stesse serie temporali utilizzate per l’addestramento, ma sui futuri punti temporali prediction_length che seguono immediatamente dopo l'ultimo punto temporale visibile durante l’addestramento. Puoi creare set di dati di addestramento e di test che soddisfano questo criterio utilizzando l'intero set di dati (l'intera durata di tutte le serie temporali disponibili) come set di test e rimuovendo gli ultimi punti prediction_length da ogni serie temporale per l’addestramento. Durante l’addestramento, il modello non vede i valori di target per i punti temporali su cui viene valutato per il test. Durante il test, l'algoritmo trattiene gli ultimi punti prediction_length di ogni serie temporale nel set di test e genera una previsione. Quindi confronta la previsione con i valori trattenuti. Puoi creare valutazioni più complesse ripetendo le serie temporali più volte nel set di test, ma tagliandole in corrispondenza di diversi endpoint. Grazie a questo approccio, i parametri di accuratezza vengono calcolati su più previsioni da diversi punti temporali. Per ulteriori informazioni, consulta Ottimizzazione di un modello DeepAR.

  • Evita di utilizzare valori molto grandi (>400) per prediction_length perché rende il modello lento e meno accurato. Se vuoi eseguire previsioni ancora più nel futuro, considera l'aggregazione dei dati a una frequenza inferiore. Ad esempio, utilizza 5min anziché 1min.

  • Dal momento che vengono utilizzati i ritardi, un modello può guardare più indietro nelle serie temporali rispetto al valore specificato per context_length. Pertanto, non è necessario impostare questo parametro su un valore elevato. Ti consigliamo di iniziare con il valore utilizzato per prediction_length.

  • Consigliamo di eseguire il training di un modello DeepAR su tutte le serie temporali disponibili. Sebbene un modello DeepAR addestrato su una singola serie temporale possa funzionare bene, gli algoritmi di previsione standard, come ARIMA oETS, potrebbero fornire risultati più accurati. L'algoritmo DeepAR inizia a ottenere risultati migliori dei metodi standard quando il set di dati contiene centinaia di serie temporali correlate. Al momento, DeepAR richiede che il numero totale di osservazioni disponibili in tutte le serie temporali di addestramento sia almeno 300.

EC2Raccomandazioni sulle istanze per l'algoritmo DeepAr

Puoi addestrare DeepAr su entrambe le GPU CPU istanze e in impostazioni singole e multiple. Consigliamo di iniziare con una singola CPU istanza (ad esempio, ml.c4.2xlarge o ml.c4.4xlarge) e di passare a istanze e più macchine solo quando necessario. GPU L'utilizzo GPUs di più macchine migliora la produttività solo per i modelli più grandi (con molte celle per strato e molti strati) e per mini-batch di grandi dimensioni (ad esempio, più di 512).

Per l'inferenza, DeepAr supporta CPU solo le istanze.

La specifica di valori elevati per context_length, prediction_length, num_cells, num_layers o mini_batch_size può creare modelli che sono troppo grandi per le istanze small. In questo caso, utilizza un tipo di istanza più grande o riduci i valori per questi parametri. Questo problema si verifica spesso anche durante l'esecuzione dei processi di ottimizzazione iperparametri. In tal caso, utilizza un tipo di istanza sufficientemente grande per il processo di ottimizzazione del modello e prendi in considerazione la limitazione dei valori superiori dei parametri critici per evitare errori di processo.

Notebook di esempio di DeepAR

Per un taccuino di esempio che mostra come preparare un set di dati di serie temporali per SageMaker addestrare l'algoritmo DeepAR e come implementare il modello addestrato per eseguire inferenze, vedi la demo di DeepAR sul set di dati sull'elettricità, che illustra le funzionalità avanzate di DeepAR su un set di dati del mondo reale. Per istruzioni sulla creazione e l'accesso alle istanze di notebook Jupyter che è possibile utilizzare per eseguire l'esempio, vedere. SageMaker Istanze Amazon SageMaker Notebook Dopo aver creato e aperto un'istanza di notebook, scegli la scheda SageMaker Esempi per visualizzare un elenco di tutti gli esempi. SageMaker Per aprire un notebook, seleziona la relativa scheda Use (Utilizza) e scegli Create copy (Crea copia).

Per ulteriori informazioni sull'algoritmo Amazon SageMaker DeepAR, consulta i seguenti post di blog: