Best practice per la creazione di dati di addestramento tabulari

I dati ben progettati aumentano la qualità del modello di machine learning risultante. Puoi utilizzare le linee guida riportate in questa pagina per migliorare la qualità del modello e dei dati di addestramento.

Vengono trattati i seguenti argomenti:

Best practice per tutti i modelli di dati tabulari

Le seguenti best practice si applicano sia che tu stia creando un modello AutoML sia un modello con addestramento personalizzato che utilizza dati tabulari.

Evitare la fuga di dati

La fuga di dati si verifica quando i dati di addestramento includono informazioni predittive che non sono disponibili quando chiedi una previsione. La fuga di dati può causare la visualizzazione di metriche di valutazione eccellenti da parte del modello, ma prestazioni scadenti sui dati reali.

Ad esempio, supponiamo che tu voglia sapere quanto gelato venderà il tuo negozio domani. Non puoi includere la temperatura del giorno di destinazione nei dati di addestramento, perché non la conosci (non è ancora avvenuta). Tuttavia, puoi utilizzare la temperatura prevista del giorno precedente, che può essere inclusa nella richiesta di previsione.

La fuga di dati può verificarsi anche quando utilizzi gli stessi dati in più suddivisioni dei dati. 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 ai dati che utilizzi per richiedere le previsioni.

Ad esempio, se utilizzi un valore medio e per la formazione calcoli la media su più di 10 giorni, ma quando richiedi la previsione calcoli la media sull'ultimo mese.

In generale, qualsiasi differenza tra il modo in cui generi i dati di addestramento e i dati di pubblicazione (i dati che utilizzi per generare le previsioni) deve essere esaminata 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 vedrà quando viene implementato in produzione e la distribuzione dei dati del set di dati su cui viene addestrato il 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 previsioni 30 giorni dopo la registrazione dei dati di addestramento finali.

Per ottenere risultati ottimali, assicurati che la distribuzione delle suddivisioni dei dati utilizzata per creare il modello rifletta con precisione la differenza tra i dati di addestramento e quelli su cui effettuerai le previsioni nell'ambiente di produzione. Vertex AI potrebbe produrre previsioni non monotone e, se i dati di produzione vengono campionati da una distribuzione molto diversa rispetto ai dati di addestramento, le previsioni non monotone non sono molto affidabili.

Inoltre, la differenza tra i dati di produzione e i dati di addestramento deve essere rispecchiata nella differenza tra la suddivisione dei dati di convalida e la suddivisione dei dati di addestramento e tra la suddivisione dei dati di test e la suddivisione dei dati di convalida.

Ad esempio, se prevedi di fare previsioni sul lifetime value (LTV) degli utenti nei prossimi 30 giorni, assicurati che i dati nella suddivisione dei dati di convalida risalgano a 30 giorni dopo i dati nella suddivisione dei dati di addestramento e che i dati nella suddivisione dei dati di test risalgano a 30 giorni dopo la suddivisione dei dati di convalida.

Analogamente, se vuoi che il modello venga ottimizzato per fare previsioni generalizzate su nuovi utenti, assicurati che i dati di un utente specifico siano contenuti solo in un'unica 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.

Fornire un indicatore di tempo

Per i modelli di classificazione e regressione, se il pattern sottostante dei dati è probabile che cambi nel tempo (non è distribuito in modo casuale nel tempo), assicurati di fornire queste informazioni a Vertex AI. Puoi fornire un indicatore di tempo 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 durante l'addestramento del modello. Questo ordinamento viene utilizzato per suddividere i dati, con i dati più recenti come dati di test e i dati più antichi come dati di addestramento. Scopri di più.

  • Se la colonna della data e dell'ora non contiene molti valori distinti, devi utilizzare una suddivisione manuale anziché la colonna della data e dell'ora per suddividere i dati. In caso contrario, potresti non ottenere righe sufficienti in ogni set di dati, il che può causare il fallimento dell'addestramento.

  • Se le informazioni sull'ora non sono contenute in una singola colonna, puoi utilizzare una suddivisione manuale dei dati per utilizzare i dati più recenti come dati di test e i dati più antichi come dati di addestramento.

Rendi le informazioni esplicite, se necessario

Per alcune primitive di dati, puoi migliorare la qualità del modello creando funzionalità.

Ad esempio, se i dati includono longitudine e latitudine, queste colonne vengono trattate come numeriche, senza calcoli speciali. Se la posizione o la distanza forniscono un indicatore del problema, devi creare 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 es. 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 di destinazione per quella riga. Se hai calcolato o aggregato dati di altre righe o origini che potrebbero essere 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 spostamento dell'addestramento rispetto al servizio.

Ad esempio, se vuoi prevedere la domanda della prossima settimana per un prodotto, puoi migliorare la qualità della previsione 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 la previsione.
  • e così via…

In un altro esempio, se vuoi prevedere se un utente specifico acquisterà un prodotto, puoi migliorare la qualità della previsione includendo colonne con i seguenti valori:

  • Il tasso di conversione o la percentuale di clic storica media per l'utente specifico.
  • Il numero di prodotti attualmente presenti nel carrello dell'utente.

Evitare i pregiudizi

Assicurati che i dati di addestramento siano rappresentativi dell'intero universo di potenziali dati per i quali effettuerai le previsioni. Ad esempio, se hai clienti che risiedono in tutto il mondo, non devi utilizzare dati di addestramento di un solo paese.

Best practice per i modelli AutoML tabulari

Le seguenti best practice sono per la creazione di dati di addestramento tabulari per i modelli tabulari AutoML.

Rappresentare i valori null in modo appropriato

Se esegui l'importazione da CSV, utilizza stringhe vuote per rappresentare i valori null. In BigQuery, utilizza il valore NULL.

Se i dati utilizzano numeri o caratteri speciali per rappresentare valori null, incluso lo zero, questi valori vengono interpretati erroneamente, riducendo la qualità del modello.

Evita i valori mancanti, se possibile

Controlla se nei dati sono presenti valori mancanti e correggili, se possibile. In caso contrario, puoi lasciare il valore vuoto, che verrà considerato un valore nullo.

Utilizza gli spazi per separare il testo

Vertex AI tokenizza le stringhe di testo e può ricavare l'indicatore di addestramento da singole parole. Utilizza gli spazi per separare le parole; le parole separate da altri caratteri vengono trattate come una singola entità.

Ad esempio, se fornisci il testo "rosso/verde/blu", non viene tokenizzato in "rosso", "verde" e "blu". Se queste singole parole potrebbero essere importanti per l'addestramento del modello, devi trasformare 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 una suddivisione errata delle categorie. Ad esempio, se i tuoi dati includono "Marrone" e "marrone", Vertex AI utilizza questi valori come categorie separate, anche se potresti averli voluti uguali. Anche 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 ai classi sbilanciati per i modelli di classificazione

Se hai classi non bilanciate (un problema di classificazione con uno o più risultati che si verifica raramente), consulta i seguenti suggerimenti.

Fornire dati di addestramento sufficienti per la classe di minoranza

Un numero troppo ridotto di righe di dati per una classe peggiora la qualità del modello. Se possibile, devi fornire almeno 100 righe di dati per ogni corso.

Valuta la possibilità di utilizzare una suddivisione manuale

Vertex AI seleziona le righe per il set di dati di test in modo casuale (ma in modo deterministico). Per le classi non bilanciate, potresti ritrovarti con un numero ridotto della classe di minoranza nel set di dati di test o addirittura nessuna, il che causa l'errore di addestramento.

Se i tuoi gruppi sono sbilanciati, ti consigliamo di assegnare una suddivisione manuale per assicurarti che in ogni suddivisione siano incluse righe sufficienti con i risultati della minoranza.

Fornire dati di addestramento sufficienti

Se non fornisci dati di addestramento sufficienti, il modello risultante potrebbe avere un cattivo rendimento. Maggiore è il numero di colonne utilizzate per addestrare il modello, maggiore è la quantità di dati da fornire.

Il set di dati deve sempre includere almeno 1000 righe.

La tabella seguente fornisce alcune strategie per la quantità di dati di addestramento da fornire, a seconda dello scopo.

Obiettivo Quantità minima consigliata di dati di addestramento
Classificazione Almeno 10 volte il numero di colonne.
Previsione Almeno 10 serie temporali per ogni colonna utilizzata per addestrare il modello.
Regressione Almeno 50 volte il numero di colonne.

Lascia a Vertex AI tutte le altre operazioni di preelaborazione e trasformazione

Se non diversamente indicato sopra, lascia che sia Vertex AI a eseguire il design delle funzionalità per te quando addestri un modello AutoML. AutoML offre i risultati migliori quando ha accesso ai dati sottostanti. Per un elenco di tutte le trasformazioni eseguite da AutoML in base al tipo di trasformazione, consulta le trasformazioni Vertex AI.

Best practice per i modelli di previsione tabulari

I dati di addestramento per i modelli di previsione richiedono 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 previsione batch. Se specifichi una granularità giornaliera e ci sono 2 giorni tra due righe di dati di addestramento, Vertex AI tratta 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 stabilito dalla granularità) sono considerate un errore di convalida al momento dell'addestramento.

In genere, le tue pratiche di raccolta dei dati determinano la granularità dei dati.

Come trovare un buon valore per la finestra di contesto

Se prevedi di avere molti dati di previsione che non si estendono nel passato (avvii a freddo), inizia impostando la finestra di contesto su 0. In caso contrario, una finestra di contesto compresa tra le dimensioni dell'orizzonte di previsione e 10 volte le dimensioni dell'orizzonte di previsione dovrebbe funzionare bene.

Per trovare un buon valore per i tuoi dati, puoi provare a procedere nel seguente modo:

  1. 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.

  2. Addestra di nuovo il modello con lo stesso budget di addestramento, ma raddoppia la dimensione della finestra di contesto fino a 2 volte la dimensione dell'orizzonte di previsione.

  3. Se le metriche di valutazione del secondo modello mostrano un miglioramento sostanziale, addestra di nuovo il modello aumentando la finestra di contesto fino a cinque volte le dimensioni 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).

  4. Continua ad aumentare la finestra di contesto finché non visualizzi più le metriche di valutazione migliorate o finché i risultati non ti soddisfano. Ripristina il valore più basso della finestra di contesto che ha prodotto risultati accettabili.

L'aumento della finestra di contesto ha i seguenti effetti:

  • Aumenta il tempo di addestramento

    Con una finestra di contesto più grande, il modello utilizza più punti dati durante l'addestramento, aumentando il tempo di addestramento.

  • Aumenta la quantità di dati storici richiesta per i dati di previsione

    I dati di previsione devono fornire tanti punti dati storici quanto il valore della finestra di contesto.

Best practice per il formato dei dati

Puoi creare i dati di addestramento in formato ampio o ristretto. 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 di un formato ristretto può aiutarti a evitare di creare connessioni involontarie tra i tuoi dati e il tuo target (perdita di dati).

Quando crei i 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 (in che modo le serie temporali si distinguono l'una dall'altra) e una colonna che rappresenti il valore che prevedi (il target). Tutti gli altri valori della riga utilizzati per addestrare il modello devono essere presenti al momento della richiesta di una previsione 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
01/02/2019 141 219 0 1 CA
01/03/2019 149 244 0 0 CA
01/01/2019 52 0 43 0 IL
01/02/2019 81 0 26 1 IL
01/03/2019 89 0 86 0 IL

Questa tabella, in formato largo, mostra i dati aziendali in base alla data, ma non sarebbe utilizzabile per un modello di previsione nella sua forma attuale. Non esiste una singola colonna target, né una colonna ID serie temporale e, per una determinata data, non conoscerai la domanda per gli altri widget al momento della previsione.

Potresti convertire questa tabella in questo formato:

Data Prodotto Region_CA_Demand Region_IL_Demand Promozione
01/01/2019 Widget_1 112 52 0
01/02/2019 Widget_1 141 81 1
01/03/2019 Widget_1 149 89 0
01/01/2019 Widget_2 241 0 0
01/02/2019 Widget_2 219 0 1
01/03/2019 Widget_2 244 0 0
01/01/2019 Widget_3 0 43 0
01/02/2019 Widget_3 0 26 1
01/03/2019 Widget_3 0 86 0

Ora abbiamo una potenziale colonna ID serie temporale, Prodotto. Tuttavia, questo formato potrebbe essere utilizzato solo per prevedere una delle regioni e i dati per l'altra regione dovrebbero essere noti al momento della previsione.

La soluzione è convertire in formato stretto, in modo che ogni riga rappresenti una singola osservazione. Tutti i dati indipendenti dalla serie temporale vengono ripetuti per ogni riga:

Data Domanda ID Promozione
01/01/2019 112 Widget_1_CA 0
01/02/2019 141 Widget_1_CA 1
01/03/2019 149 Widget_1_CA 0
01/01/2019 52 Widget_1_IL 0
01/02/2019 81 Widget_1_IL 1
01/03/2019 89 Widget_1_IL 0
01/01/2019 241 Widget_2_CA 0
01/02/2019 219 Widget_2_CA 1
01/03/2019 244 Widget_2_CA 0
01/01/2019 0 Widget_2_IL 0
01/02/2019 0 Widget_2_IL 1
01/03/2019 0 Widget_2_IL 0
01/01/2019 0 Widget_3_CA 0
01/02/2019 0 Widget_3_CA 1
01/03/2019 0 Widget_3_CA 0
01/01/2019 43 Widget_3_IL 0
01/02/2019 26 Widget_3_IL 1
01/03/2019 86 Widget_3_IL 0

Ora abbiamo un identificatore della serie temporale (ID), una colonna di destinazione (Domanda) e una colonna Data/Ora (Data). Inoltre, ogni riga si basa su una singola osservazione, che può essere utilizzata per prevedere il valore target. La colonna Promo viene utilizzata come caratteristica per addestrare il modello.

In realtà, avrai molte più righe e colonne rispetto a questi esempi. Tuttavia, devi seguire le linee guida riportate di seguito per strutturare i dati in modo da evitare la fuga di dati.

Passaggi successivi