Definizione dei modelli di regressione in Ads Data Hub

Le regressioni lineare e logistica sono modelli di machine learning che consentono di generare previsioni significative dai dati pubblicitari.

  • La regressione lineare crea una funzione per adattare una linea ai dati in modo che la distanza tra i punti dati e la linea sia ridotta al minimo. Questo modello può essere quindi utilizzato per prevedere un valore numerico in base agli input, ad esempio per prevedere il lifetime value di un utente in base agli acquisti, alle interazioni precedenti e così via.
  • La regressione logistica viene utilizzata per i problemi di classificazione predittiva. Il modello può essere di due tipi a seconda del numero di variabili fornite:
    • La regressione logistica binaria risponde a domande di tipo "sì/no", ad esempio qual è la probabilità che si verifichi un evento di conversione.
    • La regressione logistica multiclasse viene utilizzata per prevedere più valori possibili, ad esempio per determinare se un cliente è di "valore basso", "valore medio" o "valore elevato".

Sia la regressione lineare che quella logistica apprendono dai dati di addestramento (in questo caso i tuoi dati pubblicitari) e ti offrono un modello predittivo per prendere decisioni in merito alla pubblicità. In genere, fornendo più dati e garantendo che quelli forniti siano di alta qualità, la precisione del modello migliora. Entrambi i modelli danno i migliori risultati quando ricevono dati di addestramento in cluster molto compatti.

Privacy differenziale

Sia la regressione lineare che quella logistica utilizzano entrambe la privacy differenziale, ovvero un sistema di controlli della privacy diverso da quello utilizzato da altre operazioni in Ads Data Hub. La privacy differenziale garantisce la privacy dell'utente finale inserendo rumore nei risultati durante il processo di addestramento. Questo livello di rumore è sufficientemente basso da rendere i risultati finali ancora utili, ma abbastanza alto da impedire l'identificazione degli utenti finali. Inoltre, il livello di rumore non è deterministico, per cui i risultati presentano un livello di rumore incoerente, che permette così di preservare meglio la privacy dell'utente finale.

Limitazione delle query

Quando utilizzi l'impostazione predefinita EPSILON_PER_MODEL, puoi eseguire un massimo di 100 query di definizione dei modelli di regressione lineare e logistica per "giorno di dati". Per giorno di dati si intende l'insieme degli eventi generati in un determinato giorno. Questi eventi corrispondono alle date di inizio e di fine specificate durante l'esecuzione della query, nonché alle date di inizio e di fine utilizzate durante la creazione di qualsiasi tabella usata dalla query, ad esempio le tabelle temporanee utilizzate per l'addestramento. Ciò significa che i dati di un giorno possono essere usati in non più di 100 modelli. Se scegli di specificare un valore di EPSILON_PER_MODEL maggiore del valore predefinito, puoi creare meno modelli, ma la qualità sarà migliore. Se scegli valori minori di EPSILON_PER_MODEL, puoi addestrare più modelli, ma avranno una qualità inferiore.

Come funziona

Il flusso di lavoro segue questi passaggi essenziali:

  1. Preparare i dati di addestramento.
  2. Creare un modello.
  3. Raccogliere informazioni dal modello.

Preparare i dati di addestramento

Come accennato in precedenza, l'utilizzo di set di dati più grandi e di alta qualità generalmente determina risultati migliori. Inoltre, poiché i dati di input vengono scalati secondo il metodo min-max, i dati in cluster sparsi o i quelli che presentano anomalie significative possono influire negativamente sul modello spostando la media.

Per impostazione predefinita, Ads Data Hub seleziona in modo casuale il 18% dei dati di addestramento da utilizzare per la convalida. La percentuale di dati utilizzati per la convalida può essere controllata dall'opzione data_split_eval_fraction.

Creare un modello

Specifica i parametri e i dati di input per l'addestramento del modello.

Best practice

Uno dei fattori più importanti per la qualità di un modello è la dimensione del set di addestramento. Tuttavia, il compromesso tra dimensione e qualità sarà diverso a seconda del problema e dei fattori elencati di seguito. Raccontaci la tua esperienza.

  • Abbiamo osservato un'accuratezza > 0,70 per i modelli di regressione logistica creati a partire da set di addestramento con almeno 100.000 utenti.
  • Abbiamo osservato r-squared > 0,70 per i modelli di regressione lineare creati a partire da set di addestramento con almeno 800.000 utenti.

Esistono altri fattori che possono ridurre la qualità di un modello.

  • Modelli di logistica in cui una classe è molto più rappresentata rispetto alle altre. In particolare, quando un'etichetta ha pochi utenti nel set di addestramento, è probabile che averne molti con altre etichette non sia particolarmente utile per la precisione del modello nell'etichetta piccola. Ad esempio, avere 20.000 e 1000 utenti nel set di addestramento per due etichette è peggio che averne 10.000 e 2000.
  • Dati sulle funzionalità che non forniscono un indicatore forte per le etichette.
  • Dati non elaborati che richiedono una feature engineering più estesa. Ad esempio, alcuni campi possono avere un numero molto elevato di valori possibili. Un modo per migliorare i dati di questo tipo è trasformare i valori in una feature con un numero inferiore di categorie o bucket.

Raccogliere informazioni

Puoi chiamare le funzioni per valutare le prestazioni del modello sui dati di convalida, esaminare le feature e le informazioni sulle iterazioni di addestramento (ad esempio le ponderazioni sottostanti utilizzate da un modello durante la previsione) ed effettuare previsioni sulla base dei dati non visti.

Istruzione CREATE MODEL

L'istruzione CREATE MODEL crea un modello con il nome e il set di dati da te specificati. Se il nome del modello esiste già, CREATE MODEL sostituisce il modello esistente.

Sintassi CREATE MODEL

CREATE MODEL
model_name
OPTIONS
(
  // model_option_list:
  // Required parameter.
  MODEL_TYPE = { 'ADH_LINEAR_REGRESSION' | 'ADH_LOGISTIC_REGRESSION'}

  // Optional tuning parameters.
  [, L1_REG = float64_value ]
  [, L2_REG = float64_value ]
  [, DATA_SPLIT_EVAL_FRACTION = float64_value ]
  [, OPTIMIZE_STRATEGY = { 'AUTO_STRATEGY' | 'BATCH_GRADIENT_DESCENT' |
                           'NORMAL_EQUATION' } ]
  [, MAX_ITERATIONS = int64_value ]
  [, LEARN_RATE_STRATEGY = { 'LINE_SEARCH' | 'CONSTANT' } ]
  [, LEARN_RATE = float64_value ]
  [, EARLY_STOP = { TRUE | FALSE } ]
  [, MIN_REL_PROGRESS = float64_value ]
  [, LS_INIT_LEARN_RATE = float64_value ]
  [, EPSILON_PER_MODEL = float64_value ]
  [, AUTOMATIC_IMPUT_SCALING = bool_value ]
  [, MIN_MAX_SCALED_COLS = [string_value, string_value... ] ]
  [, STANDARD_SCALED_COLS = [string_value, string_value... ] ]
  [, QUANTILE_BUCKETIZED_COLS = [
        STRUCT(string_value AS col_name, int64_value AS num_buckets), 
       STRUCT(string_value AS col_name, int64_value AS num_buckets)... ] ]
)
AS query_statement

model_name

Nome alfanumerico contenente trattini bassi e trattini. Non può includere punti. Se il nome del modello fornito esiste già, il modello precedente verrà sovrascritto.

query_statement

Specifica la query SQL standard utilizzata per generare i dati di addestramento. Se vuoi creare più modelli utilizzando gli stessi dati di addestramento, crea una tabella temporanea con questi dati e aggiungi qui il relativo riferimento. Questa tattica evita potenziali errori di controllo delle differenze dovuti a cancellazione o spam tardivo.

model_option_list

model_type

(Obbligatorio) L'unica opzione obbligatoria. Può essere "adh_linear_regression" o "adh_logistic_regression".

l1_reg

(Facoltativo) Quantità di regolarizzazione L1 applicata. La regolarizzazione L1 penalizza le ponderazioni in proporzione alla somma dei relativi valori assoluti. Può essere qualsiasi numero non negativo; il valore predefinito è zero.

l2_reg

(Facoltativo) Quantità di regolarizzazione L2 applicata. La regolarizzazione L2 penalizza le ponderazioni in proporzione alla radice quadrata della somma delle relative radici quadrate. Può essere qualsiasi numero non negativo; il valore predefinito è zero.

data_split_eval_fraction

(Facoltativo) Deve essere compreso tra 0,01 e 0,99; l'impostazione predefinita è 0,18. Determina la frazione di dati da includere nel set di valutazione. Questo influisce sulla precisione del modello riducendo il numero di righe che lo costituiranno, ma aumenta anche il numero di modelli che un utente può eseguire. Ecco un grafico di questa relazione in cui si presuppone che OGNI modello su un determinato set di dati abbia la stessa frazione:

Frazione di convalida Query consentite
0,01 7
0,1 8
0,15 8
0,18 9
0,2 9
0,3 10
0,5 14
0,9 50

optimize_strategy

(Facoltativo) Strategia per addestrare modelli di regressione lineare.

Argomenti

"AUTO_STRATEGY" stabilisce la strategia di addestramento nel seguente modo:

  • Se l1_reg o warm_start è specificato, viene utilizzata la strategia batch_gradient_descent.
  • Se le cardinalità totali delle feature di addestramento sono superiori a 10.000, viene utilizzata la strategia batch_gradient_descent.
  • In caso di problemi di overfitting (il numero di esempi di addestramento è inferiore a 10 • la cardinalità totale), viene utilizzata la strategia batch_gradient_descent.
  • Per tutti gli altri casi viene utilizzata la strategia NORMAL_EQUATION.

"BATCH_GRADIENT_DESCENT" (solo logistica) addestra il modello utilizzando il metodo di discesa del gradiente in batch, che ottimizza la funzione di perdita utilizzando la funzione gradiente.

"NORMAL_EQUATION" (solo lineare) calcola direttamente la soluzione dei minimi quadrati del problema di regressione lineare con la formula analitica. Non è possibile utilizzare l'equazione normale nei seguenti casi:

  • l1_reg è specificato.
  • warm_start è specificato.
  • La cardinalità totale delle feature di addestramento è superiore a 10.000.
  • Il valore predefinito è "AUTO_STRATEGY".

max_iterations

(Facoltativo) Numero di iterazioni o passaggi di addestramento. Poiché questa query crea un albero per ogni iterazione, questo è anche il numero di alberi. Deve essere un numero intero maggiore di 1. Il valore predefinito è 20.

learn_rate_strategy

(Facoltativo, solo logistica) Strategia per specificare il tasso di apprendimento durante l'addestramento.

Argomenti

"LINE_SEARCH" utilizza il metodo di ricerca a linee per calcolare il tasso di apprendimento. Il tasso di apprendimento iniziale della ricerca a linee è il valore specificato per LS_INIT_LEARN_RATE.

  • La ricerca a linee rallenta l'addestramento e aumenta il numero di byte elaborati, ma in genere converge anche con un tasso di apprendimento iniziale più elevato.

"CONSTANT" imposta il tasso di apprendimento sul valore specificato per LEARN_RATE.

Il valore predefinito è "LINE_SEARCH".

learn_rate

(Facoltativo, solo logistica) Tasso di apprendimento della discesa del gradiente quando LEARN_RATE_STRATEGY è impostato su CONSTANT. Se LEARN_RATE_STRATEGY è impostato su "LINE_SEARCH", viene restituito un errore.

Argomenti

float64_value può essere qualsiasi numero in virgola mobile a 64 bit. Il valore predefinito è 0,1 (10%).

early_stop

(Facoltativo) Indica se interrompere l'addestramento dopo la prima iterazione in cui il miglioramento della perdita relativo è inferiore al valore specificato per MIN_REL_PROGRESS.

Argomenti

TRUE per "sì", FALSE per "no". Il valore predefinito è TRUE.

min_rel_progress

(Facoltativo) Miglioramento minimo della perdita relativa necessario per continuare l'addestramento quando EARLY_STOP è impostato su true. Ad esempio, un valore di 0,01 specifica che ogni iterazione deve ridurre la perdita dell'1% affinché l'addestramento continui.

Argomenti

float64_value può essere qualsiasi numero in virgola mobile a 64 bit. Il valore predefinito è 0,1 (10%).

ls_init_learn_rate

(Facoltativo) Imposta il tasso di apprendimento iniziale utilizzato da LEARN_RATE_STRATEGY='LINE_SEARCH'. Questa opzione può essere utilizzata solo se LINE_SEARCH è specificato.

Se LEARN_RATE del modello sembra raddoppiare ogni iterazione come indicato da ML.TRAINING_INFO, prova a impostare LS_INIT_LEARN_RATE sull'ultimo tasso di apprendimento raddoppiato. Il tasso di apprendimento iniziale ottimale è diverso per ogni modello. Un tasso di apprendimento iniziale efficace per un modello potrebbe non esserlo per un altro.

Argomenti

float64_value può essere qualsiasi numero in virgola mobile a 64 bit.

epsilon_per_model

(Facoltativo) Specifica l'importo del budget per la privacy da utilizzare per addestrare questo modello. A ogni cliente di dati pubblicitari viene assegnato un budget per la privacy pari a 10,0 per giorno di dati. Un modello addestrato correttamente spenderà EPSILON_PER_MODEL del budget per ogni giorno di dati nell'intervallo di date specificato durante l'esecuzione della query. Se utilizzi il valore predefinito di ln(3)/10, puoi creare circa 100 modelli. Se utilizzi un valore maggiore, potrai creare meno modelli, ma saranno di qualità superiore. Se utilizzi un valore minore, potrai creare più modelli di qualità inferiore.

Argomenti

float64_value può essere qualsiasi numero in virgola mobile positivo a 64 bit minore di ln(3), ovvero circa 1,0986. Il valore predefinito è ln(3)/10.

automatic_input_scaling

(Facoltativo) Se il valore è TRUE, a tutte le colonne di feature numeriche verrà applicato automaticamente min_max_scaling, come se i nomi delle colonne fossero esplicitamente richiamati nell'opzione min_max_scaled_cols, ad eccezione delle colonne che sono state esplicitamente richiamate nelle opzioni standard_scaled_cols o quantile_bucketized_cols.

Argomenti

bool_value è un BOOL; il valore predefinito è TRUE.

min_max_scaled_cols

(Facoltativo) Scala ciascuna delle colonne di feature numerical_expression specificate nell'intervallo da 0 a 1, con limite MIN e MAX in tutte le righe. Gli stessi MIN e MAX vengono utilizzati automaticamente nella previsione. Se i dati di previsione non rientrano nell'intervallo MIN-MAX, il limite è 0 o 1.

Argomenti

Array di string_value, dove ogni string_value corrisponde a una STRING che rappresenta il nome della colonna da trasformare.

standard_scaled_cols

(Facoltativo) Standardizza le colonne delle feature numerical_expression specificate in tutte le righe. STDDEV e MEAN calcolati per standardizzare l'espressione vengono utilizzati automaticamente nella previsione.

Argomenti

Array di string_value, dove ogni string_value corrisponde a una STRING che rappresenta il nome della colonna da trasformare.

quantile_bucketized_cols

Bucketizza le colonne di feature numeriche continue specificate in una STRING con il nome del bucket come valore basato sui quantili. Gli stessi quantili vengono utilizzati automaticamente nella previsione.

Argomenti

Array di STRUCT(string_value AS col_name, int64_value AS num_buckets), dove ogni string_value è una STRING che rappresenta il nome della colonna numerica continua da trasformare e ogni int64_value è il numero di bucket in cui suddividere i valori numerici.

Convalida

  • Ogni giorno di dati nell'intervallo di date specificato per questa query deve avere un budget sufficiente per la privacy, ovvero maggiore di EPSILON_PER_MODEL, altrimenti la query avrà esito negativo.
  • I parametri di correzione facoltativi, se specificati, verranno convalidati per gli intervalli indicati sopra.
  • Deve essere specificato in modo esplicito solo l'unico parametro model_type richiesto.
  • Una colonna del set di addestramento deve essere denominata "label" (etichetta). Al momento non sono supportate più etichette.
  • La colonna "label" non può contenere valori NULL. Se contiene valori NULL, la query non riesce.
  • Nessuna colonna delle feature può essere ricavata dallo user_id.
  • Ogni riga deve rappresentare esattamente un utente unico. Una riga non può rappresentare i dati di più utenti. Ciò può accadere con determinati join, ad esempio un CROSS JOIN.
  • Nessun utente può trovarsi in due righe distinte.
  • Per motivi di privacy, sono utilizzabili solo le opzioni descritte nella sezione della sintassi. Attualmente non sono supportate altre opzioni presenti nella documentazione relativa alle query BQML CREATE MODEL.

Funzioni di valutazione

ML.EVALUATE

Utilizza la funzione ML.EVALUATE per valutare le metriche del modello. La funzione ML.EVALUATE può essere utilizzata con i modelli di regressione lineare o logistica.

SELECT
  *
FROM ML.EVALUATE(MODEL `linear_model_test`);

ML.ROC_CURVE

Utilizza la funzione ML.ROC_CURVE per valutare metriche specifiche per la regressione logistica. ML.ROC_CURVE valuta solo i modelli di regressione logistica.

SELECT
  *
FROM ML.ROC_CURVE(MODEL `logistic_model_test`);

Funzioni di previsione

ML.PREDICT

La funzione ML.PREDICT può essere utilizzata per prevedere i risultati utilizzando il modello. I risultati ottenuti utilizzando ML.PREDICT sono soggetti agli stessi controlli per la privacy previsti per gli altri risultati in Ads Data Hub. Scopri di più sui controlli relativi alla privacy.

Regressione lineare

/* This example outputs the average value for labels that the model predicted */
SELECT
  AVG(predicted_label) AS average_predicted_label
FROM
  ML.PREDICT(MODEL `linear_model_test`, TABLE tmp.linear_training_set);

Regressione logistica

/* This example outputs the model's prediction and probabilities for said prediction over individual users. It groups by label and prediction, counting the number of users in each prediction */
SELECT
  label,
  predicted_label, /* one of the two input labels, depending on which label has the higher predicted probability */
  COUNT(*) AS num /* a tally of users */
FROM
  ML.PREDICT(MODEL `logistic_model_test`, TABLE tmp.logistic_training_set)
GROUP BY 1, 2;

Funzioni di ispezione di modelli e feature

ML.TRAINING_INFO

La funzione ML.TRAINING_INFO consente di visualizzare informazioni sulle iterazioni di addestramento di un modello.

SELECT
  *
FROM ML.TRAINING_INFO(MODEL `logistic_model_test`);

ML.FEATURE_INFO

La funzione ML.FEATURE_INFO consente di visualizzare informazioni sulle feature di input utilizzate per addestrare un modello.

SELECT
  *
FROM ML.FEATURE_INFO(MODEL `logistic_model_test`);

ML.WEIGHTS

La funzione ML.WEIGHTS consente di visualizzare le ponderazioni sottostanti utilizzate da un modello durante la previsione.

SELECT
  *
FROM ML.WEIGHTS(MODEL `linear_model_test`);

Esempi

Creare un modello

Gli esempi riportati di seguito utilizzano tutti la tabella di esempio natality per dimostrare come creare un modello.

Dati di addestramento nella select interna (lineare)

L'esempio seguente utilizza il peso alla nascita, il genere, le settimane di gestazione, l'età della madre e la razza della madre per prevedere il peso alla nascita di un bambino.

CREATE MODEL `natality_model`
OPTIONS
  (model_type='adh_linear_regression') AS
SELECT
  weight_pounds as label,
  is_male,
  gestation_weeks,
  mother_age,
  CAST(mother_race AS string) AS mother_race
FROM
  `bigquery-public-data.samples.natality`
WHERE
  weight_pounds IS NOT NULL

Dati di addestramento nella select interna (logistica)

L'esempio seguente utilizza il peso alla nascita, il genere, le settimane di gestazione, l'età e il gruppo etnico della madre per prevedere il genere di un bambino.

CREATE MODEL `natality_model`
OPTIONS
  (model_type='adh_logistic_regression') AS
SELECT
  weight_pounds,
  is_male as label,
  gestation_weeks,
  mother_age,
  CAST(mother_race AS string) AS mother_race
FROM
  `bigquery-public-data.samples.natality`
WHERE
  weight_pounds IS NOT NULL