Best practice per la creazione di dati di addestramento

Questa pagina fornisce alcuni concetti di base da considerare quando metti insieme i dati per un set di dati AutoML Tables. Non intende essere un trattamento esaustivo.

Introduzione

Un set di dati ben progettato aumenta la qualità del modello di machine learning risultante. Puoi utilizzare le linee guida in questa pagina per aumentare la qualità del set di dati e del modello.

Se hai esperienza nella creazione di dati di addestramento per i modelli di machine learning, consulta l'elenco delle attività di cui non devi preoccuparti. AutoML Tables esegue molte attività di preparazione dei dati al posto tuo.

Best practice per la preparazione dei dati

Evitare perdite di target

La perdita di destinazione si verifica quando i dati di addestramento includono informazioni predittive non disponibili quando richiedi una previsione. La perdita di destinazione può causare la visualizzazione da parte del modello di metriche di valutazione eccellenti, ma prestazioni scarse con i 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.

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 il set di dati di addestramento e i dati su cui eseguirai previsioni nel tuo ambiente di produzione. AutoML Tables 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

Se è probabile che il pattern sottostante nei dati cambi nel tempo (non è distribuito casualmente nel tempo), assicurati di fornire queste informazioni ad AutoML Tables. Puoi fornire un indicatore di data e ora in diversi modi:

  • Se ogni riga di dati ha un timestamp, assicurati che la colonna sia inclusa, abbia un tipo di dati Timestamp e sia impostata come colonna Ora quando crei il set di dati. Questo ordine viene utilizzato per suddividere i dati, con i dati più recenti come dati di test e i primi dati 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

In genere, non è necessario eseguire il feature engineering quando si crea un modello utilizzando AutoML Tables. Tuttavia, per alcune primitive di dati, puoi migliorare la qualità del modello a livello di progettazione delle 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

AutoML Tables 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 destinazione o disallineamenti 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.

Rappresentare i valori null come stringhe vuote

Se i tuoi dati utilizzano caratteri speciali o numeri per rappresentare valori nulli, questo può presentare problemi per AutoML Tables, in quanto non sappiamo che cosa significano. Se esegui l'importazione da CSV, utilizza stringhe vuote per rappresentare i valori nulli. Da BigQuery, utilizza il valore NULL.

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, se la colonna è impostata per essere null.

Utilizza gli spazi per separare il testo

AutoML Tables tokenizza le stringhe di testo e può ricavare segnale 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 "Marrone" e "marrone", AutoML Tables utilizza questi valori come categorie separate, se 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 lezioni non bilanciate

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

Avere solo poche righe di dati per una classe influisce sulla qualità del modello. Se possibile, devi fornire almeno 100 righe di dati per ogni classe.

Valutare la possibilità di utilizzare una suddivisione manuale

AutoML Tables 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 siano incluse un numero sufficiente di righe con i risultati minoriti.

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.

Fornire dati di addestramento sufficienti

Se non fornisci dati di addestramento sufficienti (righe), il modello risultante potrebbe avere prestazioni scarse. Più caratteristiche (colonne) utilizzi per addestrare il modello, più dati (righe) devi fornire. Un buon obiettivo per i modelli di classificazione è almeno 10 volte il numero di righe delle colonne. Per i modelli di regressione, è necessario fornire un numero di righe pari ad almeno 50 volte il numero di colonne.

Il set di dati deve sempre includere almeno 1000 righe.

Lascia tutte le altre pre-elaborazione e trasformazioni in AutoML Tables

Se non diversamente indicato in precedenza, AutoML Tables si occupa di ingegneria delle funzionalità. AutoML Tables funziona meglio quando ha accesso ai dati sottostanti. Consulta Preparazione dei dati eseguita da AutoML Tables.

Preparazione dei dati eseguita da AutoML Tables

Questa sezione elenca i requisiti comuni per i dati di addestramento che AutoML Tables esegue automaticamente. Non è necessario includere questi calcoli nei dati di addestramento. Infatti, se esegui queste trasformazioni autonomamente e le includi nei dati di addestramento, potresti peggiorare la qualità del modello risultante.

A ogni colonna delle caratteristiche vengono applicate le seguenti trasformazioni automatiche a seconda del tipo di colonna:

Tipo di colonna Trasformazione
Numerico
  • Il valore convertito in float32.
  • Il punteggio z del valore.
  • Un indice del bucket del valore basato sui quantili. La dimensione del bucket è 100.
  • log(valore+1) quando il valore è maggiore o uguale a 0. In caso contrario, questa trasformazione non viene applicata e il valore viene considerato un valore mancante.
  • z_score del log(valore+1) quando il valore è maggiore o uguale a 0. In caso contrario, questa trasformazione non viene applicata e il valore viene considerato un valore mancante.
  • Un valore booleano che indica se il valore è nullo.
  • Le righe con input numerici non validi (ad esempio, una stringa che non può essere analizzata come float32) non vengono incluse per l'addestramento e la previsione.
  • I valori estremi/outlier non ricevono alcun trattamento speciale.
Array numerico
  • Tutte le trasformazioni per i tipi numerici applicate alla media degli ultimi N elementi in cui N = {1, 2, 4, 8, tutti}. Quindi gli elementi maggiormente enfatizzati sono quelli verso la fine dell'array, non l'inizio.
  • La media delle matrici vuote viene considerata come zero.
Categoria
  • La stringa categorica è: nessuna modifica a maiuscole e minuscole, punteggiatura, ortografia, tempo e così via.
  • Converti il nome della categoria in un indice di ricerca del dizionario e genera un incorporamento per ogni indice.
  • Le categorie che appaiono meno di 5 volte nel set di dati di addestramento vengono trattate come categoria "sconosciuto". La categoria "sconosciuto" riceve il proprio indice di ricerca speciale e l'incorporamento risultante.
Array categorico
  • Per ogni elemento nell'array degli ultimi N elementi dove N = {1, 2, 4, 8, all}, converti il nome della categoria in un indice di ricerca del dizionario e genera un incorporamento per ogni indice. Combina l'incorporamento di tutti gli elementi in un singolo incorporamento utilizzando la media.
  • Matrici vuote trattate come un'incorporamento di zeri.
Testo
  • Il testo non cambia: nessuna modifica alle maiuscole, alla punteggiatura, all'ortografia, al tempo trascorso e così via.
  • Tokenizza il testo in parole e genera 1 e 2 grammi dalle parole. Converti ogni n-grammo in un indice di ricerca del dizionario e genera un incorporamento per ogni indice. Combina l'incorporamento di tutti gli elementi in un'unica incorporamento utilizzando la media.

    La tokenizzazione si basa sui limiti degli script Unicode.

  • I valori mancanti ricevono il proprio indice di ricerca e l'incorporamento risultante.
  • Le stop-word non ricevono alcun trattamento speciale e non vengono rimosse.
Array di testo
  • Concatena tutti i valori di testo nell'array in un singolo valore di testo utilizzando uno spazio (" ") come delimitatore, quindi tratta il risultato come un singolo valore di testo. Applica le trasformazioni per le colonne Testo.
  • Matrici vuote trattate come un'incorporamento di zeri.
Timestamp
  • Applica le trasformazioni per le colonne numeriche.
  • Determina l'anno, il mese, il giorno e il giorno della settimana. Tratta ogni valore del timestamp come una colonna Categorical.
  • I valori numerici non validi (ad esempio i valori che non rientrano in un intervallo di timestamp tipico o che sono valori estremi) non ricevono alcun trattamento speciale e non vengono rimossi.
  • Le righe con input di timestamp non validi (ad esempio, una stringa del timestamp non valida) non vengono incluse per l'addestramento e la previsione.
Array timestamp
  • Applica le trasformazioni per le colonne numeriche alla media degli ultimi N elementi dell'array. N = {1, 2, 4, 8, tutti}. Ciò significa che gli elementi maggiormente enfatizzati sono quelli verso la fine dell'array.
Struttura
  • I valori struct vengono automaticamente suddivisi in campi. I campi suddivisi vengono trattati in base al tipo di colonna.

Valori null o mancanti

Puoi scegliere in che modo vengono gestiti i valori null per i dati di addestramento impostando la colonna in modo che sia nullo o meno nello schema del set di dati. Per ulteriori informazioni, consulta la sezione Creazione di un set di dati.

Se viene visualizzato un valore null in una colonna che non supporta valori null, l'intera riga viene esclusa dall'addestramento.

I valori null nelle colonne null sono rappresentati con una variabile indicatore speciale che indica che il valore era nullo o mancante. Per le trasformazioni categoriche e di testo, l'indicatore genera un incorporamento.

AutoML Tables tratta i seguenti valori come valori null:

  • Un valore NULL BigQuery.

  • NaN o valori numerici infiniti.

  • Una stringa vuota. AutoML Tables non taglia gli spazi dalle stringhe. Ciò significa che " " non è considerato un valore nullo.

  • Una stringa che può essere convertita in NaN o in un valore numerico infinito.

    • Per "NAN": ignora maiuscole/minuscole, precedute dal segno più o meno facoltativo.
    • Per "INF": ignora maiuscole/minuscole, precedute dal segno più o meno facoltativo.
  • Valori mancanti.

Passaggi successivi