Vengono trattati i seguenti argomenti:
- Best practice per tutti i modelli di dati tabulari
- Best practice per i modelli AutoML tabulari
- Best practice per i modelli di previsione tabellare
- Best practice per il formato dei dati
Best practice per tutti i modelli di dati tabulari
Le seguenti best practice si applicano sia che tu crei un modello AutoML sia un modello con addestramento personalizzato che utilizza dati tabulari.
Evitare la perdita di dati
La perdita di dati si verifica quando i dati di addestramento includono informazioni predittive che non sono disponibili quando richiedi un'inferenza. La perdita di dati può far sì che il modello mostri metriche di valutazione eccellenti, ma che abbia un rendimento scarso sui dati reali.
Ad esempio, supponiamo che tu voglia sapere quanto gelato venderà il tuo negozio domani. Non puoi includere la temperatura del giorno target nei dati di addestramento, perché non la conosci (non è ancora stata registrata). Tuttavia, puoi utilizzare la temperatura prevista del giorno precedente, che puoi includere nella richiesta di inferenza.
La perdita di dati può verificarsi anche quando utilizzi gli stessi dati in più suddivisioni. Se utilizzi dati delle serie temporali, assicurati che i dati della stessa data vengano utilizzati solo in una delle tre suddivisioni dei dati.
Evitare il disallineamento addestramento/produzione
Il disallineamento addestramento/produzione si verifica quando generi i dati di addestramento in modo diverso rispetto a come generi i dati che utilizzi per richiedere inferenze.
Ad esempio, se utilizzi un valore medio e, a scopo di addestramento, calcoli la media su 10 giorni, ma quando richiedi l'inferenza, calcoli la media sull'ultimo mese.
In generale, esamina qualsiasi differenza tra il modo in cui generi i dati di addestramento e i dati di pubblicazione (i dati che utilizzi per generare inferenze) per evitare il disallineamento addestramento/produzione.
Disallineamento addestramento/produzione e distribuzione dei dati
Il disallineamento addestramento/produzione può verificarsi anche in base alla distribuzione dei dati nelle suddivisioni dei dati di addestramento, convalida e test. Spesso esiste una differenza tra la distribuzione dei dati che un modello vede quando viene implementato in produzione e la distribuzione dei dati del set di dati su cui viene addestrato un modello. Ad esempio, in produzione, un modello può essere applicato a una popolazione di utenti completamente diversa da quella osservata durante l'addestramento oppure può essere utilizzato per fare inferenze 30 giorni dopo la registrazione dei dati di addestramento finali.
Per ottenere risultati ottimali, assicurati che la distribuzione delle suddivisioni dei dati utilizzate per creare il modello rifletta con precisione la differenza tra i dati di addestramento e i dati su cui fai inferenze nell'ambiente di produzione. Vertex AI può produrre inferenze non monotone e, se i dati di produzione vengono campionati da una distribuzione molto diversa da quella dei dati di addestramento, le inferenze non monotone non sono molto affidabili.
Inoltre, la differenza tra i dati di produzione e i dati di addestramento deve riflettersi nella differenza tra la suddivisione dei dati di convalida e quella dei dati di addestramento, nonché tra la suddivisione dei dati di test e quella dei dati di convalida.
Ad esempio, se prevedi di fare inferenze sul lifetime value (LTV) dell'utente nei prossimi 30 giorni, assicurati che i dati nella suddivisione dei dati di convalida siano di 30 giorni dopo i dati nella suddivisione dei dati di addestramento e che i dati nella suddivisione dei dati di test siano di 30 giorni dopo la suddivisione dei dati di convalida.
Allo stesso modo, se vuoi che il modello venga ottimizzato per fare inferenze generalizzate sui nuovi utenti, assicurati che i dati di un utente specifico siano contenuti solo in una singola suddivisione dei dati di addestramento. Ad esempio, tutte le righe relative a user1
si trovano nella suddivisione dei dati di addestramento, tutte le righe relative a user2
si trovano nella suddivisione dei dati di convalida e tutte le righe relative a user3
si trovano nella suddivisione dei dati di test.
Fornisci un indicatore temporale
Per i modelli di classificazione e regressione, se è probabile che il pattern sottostante nei tuoi dati cambi nel tempo (non è distribuito in modo casuale nel tempo), fornisci queste informazioni a Vertex AI. Puoi fornire un segnale temporale in diversi modi:
Se ogni riga di dati ha un timestamp, assicurati che la colonna sia inclusa, abbia un tipo di trasformazione
Timestamp
e sia impostata come colonna Ora quando addestri il modello. Questo ordinamento viene utilizzato per dividere i dati, con i dati più recenti come dati di test e i dati meno recenti come dati di addestramento. Scopri di più.Se la colonna dell'ora non ha molti valori distinti, utilizza una divisione manuale anziché utilizzare la colonna dell'ora per dividere i dati. In caso contrario, potresti non ottenere un numero sufficiente di righe in ogni set di dati, il che può causare un errore nell'addestramento.
Se le informazioni sull'ora non sono contenute in una singola colonna, puoi utilizzare una divisione manuale dei dati per utilizzare i dati più recenti come dati di test e i dati meno recenti come dati di addestramento.
Rendi esplicite le informazioni dove necessario
Per alcune primitive di dati, puoi migliorare la qualità del modello progettando le funzionalità.
Ad esempio, se i tuoi dati includono longitudine e latitudine, queste colonne vengono trattate come numeriche, senza calcoli speciali. Se la posizione o la distanza forniscono un segnale per il tuo problema, progetta una funzionalità che fornisca queste informazioni in modo esplicito.
Alcuni tipi di dati che potrebbero richiedere la feature engineering:
- Longitudine/latitudine
- URL
- Indirizzi IP
- Indirizzi email
- Numeri di telefono
- Altri codici geografici (ad esempio, codici postali)
Includere dati calcolati o aggregati in una riga
Vertex AI utilizza solo i dati di input in una singola riga per prevedere il valore target per quella riga. Se hai calcolato o aggregato dati da altre righe o fonti che sarebbero utili per determinare il valore previsto per una riga, includili nella riga di origine. Fai attenzione che la nuova colonna non causi perdita di dati o distorsione tra addestramento e pubblicazione.
Ad esempio, se vuoi prevedere la domanda di un prodotto per la settimana successiva, migliora la qualità dell'inferenza includendo colonne con i seguenti valori:
- Il numero totale di articoli disponibili della stessa categoria del prodotto.
- Il prezzo medio degli articoli disponibili della stessa categoria del prodotto.
- Il numero di giorni prima di una festività nota in cui viene richiesta l'inferenza.
In un altro esempio, se vuoi prevedere se un utente specifico acquisterà un prodotto, migliora la qualità dell'inferenza includendo colonne con i seguenti valori:
- Il tasso di conversione o la percentuale di clic storici medi per l'utente specifico.
- Il numero di prodotti attualmente presenti nel carrello degli acquisti dell'utente.
Evitare i pregiudizi
Assicurati che i dati di addestramento siano rappresentativi dell'intero universo di potenziali dati per cui fai inferenze. Ad esempio, se hai clienti in tutto il mondo, non utilizzare dati di addestramento di un solo paese.
Best practice per i modelli AutoML tabulari
Le seguenti best practice riguardano la creazione di dati di addestramento tabulari per i modelli tabulari AutoML.
Rappresentare i valori null in modo appropriato
Se importi da CSV, utilizza stringhe vuote per rappresentare i valori null. Da BigQuery, utilizza il valore NULL.
Se i tuoi dati utilizzano caratteri speciali o numeri per rappresentare i valori nulli, incluso lo zero, questi valori vengono interpretati in modo errato, riducendo la qualità del modello.
Evita i valori mancanti, se possibile.
Controlla i dati per verificare la presenza di valori mancanti e correggili, se possibile. In caso contrario, puoi lasciare il valore vuoto e viene considerato come valore nullo.
Utilizzare gli spazi per separare il testo
Vertex AI tokenizza le stringhe di testo e può derivare il segnale di addestramento da singole parole. Utilizza gli spazi per separare le parole; le parole separate da altri caratteri vengono trattate come un'unica entità.
Ad esempio, se fornisci il testo "rosso/verde/blu", non viene suddiviso in "rosso", "verde" e "blu". Se queste singole parole potrebbero essere importanti per l'addestramento del modello, trasforma il testo in "rosso verde blu" prima di includerlo nei dati di addestramento.
Assicurati che le caratteristiche categoriche siano accurate e pulite
Le incoerenze nei dati possono causare la suddivisione errata delle categorie. Ad esempio, se i tuoi dati includono "Marrone" e "marrone", Vertex AI utilizza questi valori come categorie separate, mentre potresti aver inteso che fossero la stessa cosa. Gli errori ortografici possono avere un effetto simile. Assicurati di rimuovere questi tipi di incoerenze dai dati categorici prima di creare i dati di addestramento.
Presta particolare attenzione alle classi sbilanciate per i modelli di classificazione
Se hai classi sbilanciate (un problema di classificazione con uno o più risultati che si verificano raramente), consulta i seguenti suggerimenti.
Fornire dati di addestramento sufficienti per la classe minoritaria
Un numero insufficiente di righe di dati per una classe peggiora la qualità del modello. Se possibile, fornisci almeno 100 righe di dati per ogni classe.
Valuta la possibilità di utilizzare una suddivisione manuale.
Vertex AI seleziona in modo casuale (ma deterministico) le righe per il set di dati di test. Per le classi sbilanciate, potresti ritrovarti con un numero ridotto della classe di minoranza nel set di dati di test, o addirittura nessuno, il che causa l'errore dell'addestramento.
Se le classi non sono bilanciate, ti consigliamo di assegnare una divisione manuale per assicurarti che in ogni divisione siano incluse un numero sufficiente di righe con i risultati della minoranza.
Fornire dati di addestramento sufficienti
Se non fornisci dati di addestramento sufficienti, il modello risultante potrebbe avere un rendimento scarso. Più colonne utilizzi per addestrare il modello, più dati devi fornire.
Il set di dati deve sempre includere almeno 1000 righe.
La tabella seguente fornisce alcune euristiche sulla quantità di dati di addestramento da fornire, a seconda dell'obiettivo.
Obiettivo | Quantità minima consigliata di dati di addestramento |
---|---|
Classificazione | Almeno 10 volte il numero di righe rispetto al numero di colonne. |
Previsione | Almeno 10 serie temporali per ogni colonna utilizzata per addestrare il modello. |
Regressione | Almeno 50 volte il numero di righe rispetto al numero di colonne. |
Lascia a Vertex AI tutte le altre operazioni di preelaborazione e trasformazione
Se non diversamente specificato, lascia che Vertex AI esegua l'ingegneria delle funzionalità per te quando addestri un modello AutoML. AutoML funziona meglio quando ha accesso ai dati sottostanti. Per un elenco di tutte le trasformazioni eseguite da AutoML per tipo di trasformazione, consulta Trasformazioni di Vertex AI.
Best practice per i modelli di previsione tabellari
I dati di addestramento per i modelli di previsione presentano alcune considerazioni speciali.
Considerazioni per la scelta della granularità dei dati
Quando addestri un modello di previsione, specifichi la granularità dei dati o l'intervallo di tempo tra le righe dei dati di addestramento. Può essere oraria, giornaliera, settimanale, mensile o annuale. Inoltre, può essere ogni 1, 5, 10, 15 o 30 minuti.
La granularità dei dati deve essere coerente in tutti i dati di addestramento e in tutti i dati di inferenza batch. Se specifichi una granularità giornaliera e ci sono due giorni tra due righe di dati di addestramento, Vertex AI considera il giorno intermedio come dati mancanti, il che può peggiorare le prestazioni del modello. Più righe nella stessa serie temporale con lo stesso timestamp (come determinato dalla granularità) sono considerate un errore di convalida durante l'addestramento.
In genere, le tue pratiche di raccolta dei dati determinano la granularità dei dati.
Come trovare un buon valore per la finestra contestuale
Se prevedi di avere molti dati di inferenza che non si estendono nel passato (avvii a freddo), inizia impostando la finestra contestuale su 0. In caso contrario, una finestra contestuale di dimensioni comprese tra l'orizzonte di previsione e 10 volte le dimensioni dell'orizzonte di previsione dovrebbe funzionare bene.
Per trovare un valore adeguato per i tuoi dati, prova a seguire questi passaggi:
Per la prima iterazione di addestramento, imposta la finestra di contesto e l'orizzonte di previsione sullo stesso valore e imposta il budget di addestramento su almeno 6 ore.
Addestra di nuovo il modello con lo stesso budget di addestramento, ma raddoppia la dimensione della finestra contestuale portandola a due volte la dimensione dell'orizzonte di previsione.
Se le metriche di valutazione del secondo modello mostrano un miglioramento sostanziale, addestra di nuovo il modello, aumentando la finestra contestuale fino a 5 volte la dimensione dell'orizzonte di previsione. Valuta la possibilità di aumentare proporzionalmente il budget per l'addestramento (se hai eseguito l'addestramento per 10 ore nel primo passaggio, aumenta il budget per l'addestramento a 50 ore).
Continua ad aumentare la finestra contestuale finché non noti più un miglioramento delle metriche di valutazione o finché non sei soddisfatto dei risultati. Ripristina il valore più basso della finestra di contesto che ha prodotto risultati accettabili.
L'aumento della finestra contestuale ha i seguenti effetti:
Aumenta il tempo di addestramento
Con una finestra contestuale più ampia, il modello utilizza più punti dati nell'addestramento, causando un aumento del tempo di addestramento.
Aumenta la quantità di cronologia richiesta per i dati di inferenza
I dati di inferenza devono fornire tanti punti dati storici quanto il valore della finestra contestuale.
Best practice per il formato dei dati
Puoi creare i dati di addestramento in formato ampio o stretto. Per i modelli di regressione e classificazione, il formato ampio è ampiamente utilizzato e può essere più facile da assemblare e rivedere. Per i modelli di previsione, l'utilizzo del formato stretto può aiutarti a evitare di impostare connessioni involontarie tra i tuoi dati e il tuo target (data leakage).
Quando crei dati di addestramento per addestrare un modello di previsione, ogni riga deve rappresentare una singola osservazione su una singola serie temporale. Devi avere una colonna che rappresenti l'identificatore della serie temporale (come le serie temporali si distinguono l'una dall'altra) e una colonna che rappresenti il valore che prevederai (il target). Quindi, ogni altro valore nella riga utilizzata per addestrare il modello deve essere presente al momento della richiesta di un'inferenza per il target.
Considera i seguenti dati di addestramento di esempio (semplificati e abbreviati):
Data | Widget_1_Demand | Widget_2_Demand | Widget_3_Demand | Promozione | Regione |
---|---|---|---|---|---|
01/01/2019 | 112 | 241 | 0 | 0 | CA |
02/01/2019 | 141 | 219 | 0 | 1 | CA |
03/01/2019 | 149 | 244 | 0 | 0 | CA |
01/01/2019 | 52 | 0 | 43 | 0 | IL |
02/01/2019 | 81 | 0 | 26 | 1 | IL |
03/01/2019 | 89 | 0 | 86 | 0 | IL |
Questa tabella, in formato largo, mostra i dati aziendali per data, ma nella sua forma attuale non sarebbe utilizzabile per un modello di previsione. Non esiste una singola colonna target, nessuna colonna ID serie temporale e, per qualsiasi data, non conoscerai la domanda per gli altri widget al momento dell'inferenza.
Potresti convertire questa tabella in questo formato:
Data | Prodotto | Region_CA_Demand | Region_IL_Demand | Promozione |
---|---|---|---|---|
01/01/2019 | Widget_1 | 112 | 52 | 0 |
02/01/2019 | Widget_1 | 141 | 81 | 1 |
03/01/2019 | Widget_1 | 149 | 89 | 0 |
01/01/2019 | Widget_2 | 241 | 0 | 0 |
02/01/2019 | Widget_2 | 219 | 0 | 1 |
03/01/2019 | Widget_2 | 244 | 0 | 0 |
01/01/2019 | Widget_3 | 0 | 43 | 0 |
02/01/2019 | Widget_3 | 0 | 26 | 1 |
03/01/2019 | Widget_3 | 0 | 86 | 0 |
Ora abbiamo una potenziale colonna ID serie temporale, Product. Tuttavia, questo formato potrebbe essere utilizzato solo per prevedere una delle regioni e i dati per l'altra regione dovrebbero essere noti al momento dell'inferenza.
La soluzione è convertire al formato stretto, in modo che ogni riga rappresenti una singola osservazione. Tutti i dati indipendenti dalla serie temporale vengono ripetuti per ogni riga:
Data | Demand | ID | Promozione |
---|---|---|---|
01/01/2019 | 112 | Widget_1_CA | 0 |
02/01/2019 | 141 | Widget_1_CA | 1 |
03/01/2019 | 149 | Widget_1_CA | 0 |
01/01/2019 | 52 | Widget_1_IL | 0 |
02/01/2019 | 81 | Widget_1_IL | 1 |
03/01/2019 | 89 | Widget_1_IL | 0 |
01/01/2019 | 241 | Widget_2_CA | 0 |
02/01/2019 | 219 | Widget_2_CA | 1 |
03/01/2019 | 244 | Widget_2_CA | 0 |
01/01/2019 | 0 | Widget_2_IL | 0 |
02/01/2019 | 0 | Widget_2_IL | 1 |
03/01/2019 | 0 | Widget_2_IL | 0 |
01/01/2019 | 0 | Widget_3_CA | 0 |
02/01/2019 | 0 | Widget_3_CA | 1 |
03/01/2019 | 0 | Widget_3_CA | 0 |
01/01/2019 | 43 | Widget_3_IL | 0 |
02/01/2019 | 26 | Widget_3_IL | 1 |
03/01/2019 | 86 | Widget_3_IL | 0 |
Ora abbiamo un identificatore serie temporale (ID), una colonna di destinazione (Demand) e una colonna Time (Date). Inoltre, ogni riga si basa su una singola osservazione, che può essere utilizzata per prevedere il valore target. La colonna Promozione viene utilizzata come funzionalità per addestrare il modello.
In realtà, avrai molte più righe e molte più colonne di questi esempi. Tuttavia, devi seguire le linee guida riportate qui per strutturare i dati in modo da evitare la fuga di dati.