Best practice per la creazione di dati di addestramento tabulari

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

Vengono trattati i seguenti argomenti:

Best practice per tutti i modelli di dati tabulari

Le best practice seguenti si applicano indipendentemente dal fatto che tu stia creando un modello AutoML o 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 non disponibili quando richiedi una previsione. La fuga di dati può causare la visualizzazione di metriche di valutazione eccellenti nel modello, ma prestazioni scarse sui dati reali.

Ad esempio, supponiamo che tu voglia sapere quanto gelato venderà domani. Non puoi includere la temperatura del giorno target nei dati di addestramento, perché non conoscerai la temperatura (non c'è ancora stato). Tuttavia, potresti utilizzare la temperatura prevista del giorno precedente, che potrebbe 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 i dati di 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 i dati di addestramento vengono generati in modo diverso rispetto a quelli utilizzati per richiedere le previsioni.

Ad esempio, se utilizzi un valore medio a scopo di addestramento, la tua media corrisponde all'ultimo mese, ma quando richiedi una previsione.

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 previsioni) deve essere esaminata per evitare disallineamenti nell'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. Esiste spesso una differenza tra la distribuzione dei dati che un modello vedrà quando viene eseguito il deployment 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 previsioni 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 accuratamente la differenza tra i dati di addestramento e quelli su cui eseguirai previsioni nell'ambiente di produzione. Vertex AI potrebbe produrre previsioni non monotoniche e, se i dati di produzione vengono campionati da una distribuzione molto diversa rispetto ai dati di addestramento, le previsioni non monotoniche non sono molto affidabili.

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

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

Allo stesso modo, se vuoi che il tuo modello sia ottimizzato per effettuare previsioni 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 che appartengono a user1 sono nella suddivisione dei dati di addestramento, tutte quelle che riguardano user2 sono nella suddivisione dei dati di convalida e tutte quelle relative a user3 sono nella suddivisione dei dati di test.

Fornisci un indicatore di data e ora

Per i modelli di classificazione e regressione, se il pattern sottostante nei dati è probabile che cambi nel tempo (non è distribuito casualmente nel tempo), assicurati di fornire queste informazioni a Vertex AI. Puoi fornire un indicatore temporale in diversi modi:

  • Se ogni riga di dati ha un timestamp, assicurati che la colonna sia inclusa, che abbia un tipo di trasformazione Timestamp e che sia impostata come colonna Ora quando addestra il modello. Questo ordine viene utilizzato per suddividere i dati, con i dati più recenti come dati di test e i primi come dati di addestramento. Scopri di più.

  • Se la colonna Ora non ha molti valori distinti, per suddividere i dati devi utilizzare una suddivisione manuale anziché la colonna Tempo. In caso contrario, potresti non ottenere un numero sufficiente di righe in ogni set di dati, con conseguente errore dell'addestramento.

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

Rendere esplicite le informazioni quando necessario

Per alcune primitive di dati, puoi migliorare la qualità del modello ingegnerizzando le caratteristiche.

Ad esempio, se i dati includono longitudine e latitudine, queste colonne vengono trattate come numeri, senza calcoli speciali. Se la posizione o la distanza forniscono un segnale per il problema, devi progettare una funzionalità che fornisca esplicitamente queste informazioni.

Alcuni tipi di dati che potrebbero richiedere il feature engineering:

  • Longitudine/Latitudine
  • URL
  • Indirizzi IP
  • Indirizzi email
  • Numeri di telefono
  • Altri codici geografici (ad es. i codici postali)

Includi 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 di altre righe o origini che sarebbero utili per determinare il valore previsto per una riga, includi tali dati nella riga di origine. Fai attenzione che la nuova colonna non causi fuga di dati o disallineamenti dell'addestramento/produzione.

Ad esempio, se vuoi prevedere la domanda di un prodotto della prossima settimana, 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 di articoli disponibili della stessa categoria del prodotto, disponibili.
  • 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 storico medio o la percentuale di clic per utente specifico.
  • Quanti prodotti sono attualmente presenti nel carrello degli acquisti dell'utente.

Evitare bias

Assicurati che i tuoi dati di addestramento siano rappresentativi dell'intero universo dei dati potenziali per i quali eseguirai previsioni. Ad esempio, se hai clienti che vivono in tutto il mondo, non dovresti utilizzare i 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.

Rappresenta i valori null in modo appropriato

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

Se i dati utilizzano caratteri speciali o numeri per rappresentare valori nulli, incluso zero, questi valori vengono interpretati in modo errato, riducendo la qualità del modello.

Se possibile, evita valori mancanti

Verifica l'eventuale presenza di valori mancanti nei dati e correggili, se possibile. In caso contrario, puoi lasciare vuoto il valore e questo viene considerato come un null value.

Utilizza gli spazi per separare il testo

Vertex AI tokenizza le stringhe di testo e può ricavare segnali 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 possono 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 funzionalità categoriche siano accurate e chiare

Le incoerenze nei dati possono causare la suddivisione errata delle categorie. Ad esempio, se i dati includono i valori "Marrone" e "Marrone", Vertex AI utilizza questi valori come categorie separate, quando volevi che fossero uguali. 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 con le classi non bilanciate per i modelli di classificazione

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

Fornire dati di addestramento sufficienti per la classe di minoranza

Se le righe di dati di una classe sono troppo poche, la qualità del modello si riduce. Se possibile, devi fornire almeno 100 righe di dati per ogni classe.

Valutare 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 sbilanciate, potresti finire con un piccolo numero di classi di minoranza nel tuo set di dati di test, o addirittura nessuna classe, causando un errore dell'addestramento.

Se hai classi non bilanciate, potresti assegnare una suddivisione manuale per assicurarti che in ogni suddivisione sia incluso un numero sufficiente di righe con i risultati relativi alla minoranza.

Fornire dati di addestramento sufficienti

Se non fornisci dati di addestramento sufficienti, il modello risultante potrebbe avere prestazioni scarse. 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.

Scopo Quantità minima suggerita di dati di addestramento
Classificazione Almeno 10 volte il numero di righe delle colonne.
Previsione Almeno 10 serie temporali per ogni colonna utilizzata per addestrare il modello.
Regressione Un numero di righe almeno 50 volte superiore al numero di colonne.

Lascia tutte le altre pre-elaborazioni e trasformazioni a Vertex AI

Se non indicato diversamente in precedenza, Vertex AI si occuperà di feature engineering al posto tuo quando addestra un modello AutoML. AutoML funziona meglio quando ha accesso ai tuoi dati sottostanti. Per un elenco di tutte le trasformazioni eseguite da AutoML in base al tipo di trasformazione, consulta Trasformazioni di 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 addestra un modello di previsione, specifichi la granularità dei dati o l'intervallo di tempo tra le righe di 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 due giorni tra due righe di dati di addestramento, Vertex AI considera il giorno intermedio come dati mancanti, il che può ridurre le prestazioni del modello. Più righe nella stessa serie temporale con lo stesso timestamp (determinato dalla granularità) sono considerate un errore di convalida al momento dell'addestramento.

In genere, le 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 tra le dimensioni dell'orizzonte di previsione e 10 volte la dimensione dell'orizzonte di previsione dovrebbe funzionare.

Per trovare un buon valore per i tuoi dati, prova 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, quindi imposta il budget per l'addestramento su almeno 6 ore.

  2. Addestra di nuovo il modello con lo stesso budget di addestramento, ma con il doppio delle dimensioni della finestra di contesto, in modo da raddoppiare le dimensioni dell'orizzonte di previsione.

  3. Se le metriche di valutazione per il secondo modello mostrano miglioramenti significativi, addestra di nuovo il modello, aumentando la finestra di contesto a cinque volte la dimensione dell'orizzonte di previsione. Valuta la possibilità di aumentare in modo proporzionale il budget per l'addestramento (se hai completato il corso di formazione per 10 ore nel primo passaggio, aumenta il budget a 50 ore).

  4. Continua ad aumentare la finestra di contesto fino a quando non vedi più metriche di valutazione migliorate o fino a quando i risultati non ti soddisfano. Torna al 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ù ampia, il modello utilizza più punti dati durante l'addestramento, con un conseguente aumento del tempo di addestramento.

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

    I dati di previsione dovrebbero fornire un numero di dati storici pari a quello del 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 "wide" è ampiamente utilizzato e può essere più facile da assemblare e rivedere. Per i modelli di previsione che utilizzano il formato ristretto, è possibile evitare di configurare connessioni involontarie tra i dati e il target (fuga di dati).

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 rappresenta l'identificatore della serie temporale (il modo in cui le serie temporali si distinguono l'una dall'altra) e una colonna che rappresenta il valore previsto (il tuo target). Quindi, ogni altro valore nella riga utilizzato per addestrare il modello deve essere presente nel momento in cui richiedi 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
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 "wide", mostra i dati aziendali per data, ma non sarebbe utilizzabile per un modello di previsione nella forma attuale. Non esiste una singola colonna di destinazione o una colonna ID serie temporale e, per una determinata data, non potrai conoscere la domanda per gli altri widget al momento della previsione.

Puoi convertire questa tabella nel seguente 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 è disponibile 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 consiste nel convertire il formato in un formato ristretto, 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
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 di serie temporale (ID), una colonna di destinazione (Domanda) e una colonna di tempo (Data). Inoltre, ogni riga si basa su una singola osservazione, che può essere utilizzata per prevedere il valore target. La colonna Promozioni viene utilizzata come caratteristica per addestrare il modello.

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

Passaggi successivi