Regressionsmodellierung in Ads Data Hub

Lineare und logistische Regressionen sind Modelle für maschinelles Lernen, mit denen Sie anhand von Werbedaten aussagekräftige Vorhersagen erstellen können.

  • Bei der linearen Regression wird eine Funktion erstellt, mit der eine Linie so an Daten angepasst wird, dass der Abstand zwischen den Datenpunkten und der Linie möglichst gering ist. Dieses Modell kann dann verwendet werden, um einen numerischen Wert basierend auf Eingaben vorherzusagen. So lässt sich beispielsweise basierend auf Käufen, vorherigen Interaktionen und weiteren Daten der Lifetime-Wert eines Nutzers bestimmen.
  • Die logistische Regression wird für prädiktive Klassifizierungsprobleme verwendet. Es gibt zwei Arten von Modellen, je nachdem, wie viele Variablen Sie angeben:
    • Bei der binär logistischen Regression werden Fragen mit „Ja“/„Nein“ beantwortet, z. B. die Wahrscheinlichkeit, mit der ein Conversion-Ereignis eintritt.
    • Die logistische Regression mit mehreren Klassen wird verwendet, um mehrere mögliche Werte vorherzusagen, etwa die voraussichtliche Umsatzstärke eines Kunden („niedrig“, „mittel“ oder „hoch“).

Lineare und logistische Regressionen lernen aus Trainingsdaten (in diesem Fall Ihre Werbedaten), sodass Sie ein Vorhersagemodell für Werbeentscheidungen erhalten. Im Allgemeinen erhöht sich die Genauigkeit Ihres Modells, wenn Sie mehr Daten angeben und dafür sorgen, dass die von Ihnen bereitgestellten Daten eine hohe Qualität haben. Beide Modelle erzielen bei eng zusammenliegenden Trainingsdaten eine bessere Leistung.

Differential Privacy

Bei linearen und logistischen Regressionen wird die Differential Privacy verwendet. Diese ist ein anderes System für Datenschutzprüfungen, als bei anderen Vorgängen in Ads Data Hub verwendet wird. Bei der Differential Privacy wird der Datenschutz für Nutzer sichergestellt, indem während des Trainingsprozesses Rauschen in die Ergebnisse eingebunden wird. Dieses Rauschen ist so niedrig, dass die Endergebnisse weiterhin nützlich sind, aber hoch genug, dass die Endnutzer nicht identifiziert werden können. Außerdem ist der Rauschpegel nicht deterministisch, sodass er in den Ergebnissen nicht einheitlich ist, wodurch der Datenschutz für Endnutzer weiter gewährleistet wird.

Abfragelimit

Bei Verwendung des standardmäßigen EPSILON_PER_MODEL sind 100 Modellierungsabfragen mit linearer oder logistischer Regression pro „Datentag“ möglich. „Datentag“ bezieht sich auf Ereignisse, die an einem bestimmten Tag generiert wurden. Diese Ereignisse entsprechen dem Start- und Enddatum, das Sie beim Ausführen der Abfrage angeben, sowie dem Start- und Enddatum, das beim Erstellen von Tabellen verwendet wird, die in der Abfrage verwendet werden (z. B. temporäre Tabellen für das Training). Daher können Daten eines Tages in maximal 100 Modellen verwendet werden. Wenn Sie für EPSILON_PER_MODEL einen höheren Wert als den Standardwert festlegen, können Sie weniger, dafür aber qualitativ hochwertigere Modelle erstellen. Wenn Sie kleinere Werte für EPSILON_PER_MODEL festlegen, können Sie mehr Modelle trainieren, die jedoch eine geringere Qualität aufweisen.

Funktionsweise

Der Workflow umfasst folgende wichtige Schritte:

  1. Trainingsdaten vorbereiten
  2. Modell erstellen
  3. Anhand des Modells Einblicke gewinnen

Trainingsdaten vorbereiten

Wie bereits erwähnt, führt die Verwendung größerer, hochwertiger Datasets im Allgemeinen zu besseren Ergebnissen. Da die Eingabedaten mit der Minimal-Maximal-Skalierung skaliert werden, können weiter auseinanderliegende Daten oder Daten mit erheblichen Ausreißern das Modell beeinträchtigen (Verschiebung des Mittelwerts).

Standardmäßig werden in Ads Data Hub nach dem Zufallsprinzip 18 % der Trainingsdaten zur Validierung ausgewählt. Der Prozentsatz der für die Validierung verwendeten Daten kann mit der Option data_split_eval_fraction gesteuert werden.

Modell erstellen

Geben Sie Parameter und Eingabedaten zum Trainieren Ihres Modells an.

Best Practices

Einer der wichtigsten Faktoren für die Qualität eines Modells ist die Größe des Trainings-Datasets. Der richtige Kompromiss zwischen Größe und Qualität hängt vom Problem und von den unten aufgeführten Faktoren ab. Bitte lassen Sie uns wissen, welche Erfahrungen Sie gemacht haben. * Wir haben eine Genauigkeit von > 0,70 für logistische Regressionsmodelle festgestellt, die aus Trainings-Datasets mit mindestens 100.000 Nutzern erstellt wurden. * Wir haben festgestellt, dass bei linearen Regressionsmodellen, die aus Trainings-Datasets mit mindestens 800.000 Nutzern erstellt wurden, der R-Quadrat-Wert bei > 0,70 liegt.

Es gibt weitere Faktoren, die die Qualität eines Modells beeinträchtigen können. * Logistische Modelle, bei denen eine Klasse wesentlich stärker vertreten ist als die anderen. Insbesondere, wenn ein Label nur wenige Trainings-Dataset-Nutzer hat, wird die Genauigkeit des Modells für dieses kleine Label wahrscheinlich durch eine Großzahl von Trainings-Dataset-Nutzern mit anderen Labels nicht sehr stark verbessert. So sind 20.000 und 1.000 Trainings-Dataset-Nutzer für zwei Labels weniger nützlich als 10.000 und 2.000 solcher Nutzer. * Featuredaten, die kein starkes Signal für die Labels liefern * Rohdaten, die ein umfangreicheres Feature Engineering erfordern. Beispielsweise können einige Felder eine sehr große Anzahl möglicher Werte enthalten. Eine Möglichkeit, Daten dieses Typs zu verbessern, ist die Umwandlung der Werte in ein Feature mit einer kleineren Anzahl von Kategorien oder Buckets.

Einblicke gewinnen

Sie können Funktionen aufrufen, um die Leistung Ihres Modells anhand von Validierungsdaten zu bewerten, Features und Informationen zu Trainingsdurchläufen anzusehen (z. B. die zugrunde liegenden Gewichtungen, die von einem Modell während der Vorhersage verwendet werden) und Vorhersagen zu unbekannten Daten zu treffen.

CREATE MODEL-Anweisung

Mit der Anweisung CREATE MODEL wird ein Modell mit dem von Ihnen angegebenen Namen und Dataset erstellt. Wenn der Modellname bereits vorhanden ist, ersetzt CREATE MODEL dieses existierende Modell.

CREATE MODEL-Syntax

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

Ein alphanumerischer Name, einschließlich Unter- und Bindestrichen. Punkte sind nicht zulässig. Wenn der von Ihnen angegebene Modellname bereits vorhanden ist, wird das ältere Modell überschrieben.

query_statement

Gibt die Standard-SQL-Abfrage an, die zum Erstellen der Trainingsdaten verwendet wird. Wenn Sie mehrere Modelle mit denselben Trainingsdaten generieren, erstellen Sie eine temporäre Tabelle mit den Trainingsdaten und verweisen Sie hier darauf. So vermeiden Sie mögliche Fehler bei der Differenzprüfung aufgrund von Löschungen oder spätem Spam.

model_option_list

model_type

(Erforderlich) Die einzige erforderliche Option. Kann adh_linear_regression oder adh_logistic_regression sein

l1_reg

(Optional) Wert der angewendeten L1-Regularisierung. Bei der L1-Regularisierung werden Gewichtungen proportional zur Summe der absoluten Werte der Gewichtungen bestraft. Kann eine beliebige nicht negative Zahl sein. Der Standardwert ist null.

l2_reg

(Optional) Wert der angewendeten L2-Regularisierung. Bei der L2-Regularisierung werden Gewichtungen proportional zur Quadratwurzel der Summe der Quadrate der Gewichtungen bestraft. Kann eine beliebige nicht negative Zahl sein. Der Standardwert ist null.

data_split_eval_fraction

(Optional) Muss zwischen 0,01 und 0,99 liegen. Der Standardwert ist 0,18. Bestimmt den Anteil der Daten, die zum Bewertungs-Dataset gehören. Dies wirkt sich auf die Modellgenauigkeit aus, da weniger Zeilen in das Modell aufgenommen werden und gleichzeitig ein Nutzer mehr Modelle ausführen kann. Hier ein Diagramm dieser Beziehung, in dem angenommen wird, dass JEDES Modell für ein bestimmtes Dataset den gleichen Anteil hat:

Validierungsanteil Zulässige Abfragen
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

(Optional) Die Strategie zum Trainieren von linearen Regressionsmodellen.

Argumente

AUTO_STRATEGY bestimmt die Trainingsstrategie so:

  • Wenn l1_reg oder warm_start angegeben ist, wird die Strategie batch_gradient_descent verwendet.
  • Wenn die Gesamtkardinalität der Trainingsfeatures 10.000 überschreitet, wird die Strategie batch_gradient_descent verwendet.
  • Wenn ein Überanpassungsproblem vorliegt (die Anzahl der Trainingsbeispiele liegt unter dem 10-Fachen der Gesamtkardinalität), wird die Strategie batch_gradient_descent verwendet.
  • Für alle anderen Fälle wird die Strategie NORMAL_EQUATION verwendet.

BATCH_GRADIENT_DESCENT (nur logistisch) trainiert das Modell mit dem Batch-Gradientenabstiegsverfahren, das die Verlustfunktion mithilfe der Gradientenfunktion optimiert.

NORMAL_EQUATION (nur linear) berechnet direkt die Lösung der kleinsten Quadrate des linearen Regressionsproblems mit der analytischen Formel. Die Normalgleichung kann in folgenden Fällen nicht verwendet werden:

  • l1_reg ist angegeben.
  • warm_start ist angegeben.
  • Die Gesamtkardinalität der Trainingsfeatures überschreitet 10.000.
  • Der Standardwert ist AUTO_STRATEGY.

max_iterations

(Optional) Die Anzahl der Trainingsdurchläufe oder -schritte. Da diese Abfrage bei jedem Durchlauf einen Baum erstellt, ist dies auch die Anzahl der Bäume. Muss eine Ganzzahl größer als 1 sein. Der Standardwert ist 20.

learn_rate_strategy

(Optional, nur logistisch) Die Strategie zum Angeben der Lernrate beim Training.

Argumente

LINE_SEARCH verwendet das Liniensuchverfahren, um die Lernrate zu berechnen. Die anfängliche Lernrate für die Liniensuche ist der für LS_INIT_LEARN_RATE angegebene Wert.

  • Die Liniensuche verlangsamt das Training und erhöht die Anzahl der verarbeiteten Byte, konvergiert aber im Allgemeinen auch bei Angabe einer größeren anfänglichen Lernrate.

CONSTANT legt die Lernrate auf den für LEARN_RATE angegebenen Wert fest.

Der Standardwert ist LINE_SEARCH.

learn_rate

(Optional, nur logistisch) Die Lernrate für den Gradientenabstieg, wenn LEARN_RATE_STRATEGY auf CONSTANT gesetzt ist. Wenn LEARN_RATE_STRATEGY auf LINE_SEARCH gesetzt ist, wird ein Fehler zurückgegeben.

Argumente

float64_value kann eine beliebige 64-Bit-Gleitkommazahl sein. Der Standardwert ist 0,1 (10 %).

early_stop

(Optional) Gibt an, ob das Training nach dem ersten Durchlauf beendet werden soll, wenn die relative Verlustverbesserung kleiner als der für MIN_REL_PROGRESS angegebene Wert ist.

Argumente

TRUE für „Ja“ und FALSE für „Nein“. Die Standardeinstellung ist TRUE.

min_rel_progress

(Optional) Die minimale relative Verlustverbesserung, die erforderlich ist, um das Training fortzusetzen, wenn EARLY_STOP auf TRUE gesetzt ist. Beispiel: Ein Wert von 0,01 gibt an, dass bei jedem Durchlauf der Verlust um 1 % reduziert werden muss, damit das Training fortgesetzt werden kann.

Argumente

float64_value kann eine beliebige 64-Bit-Gleitkommazahl sein. Der Standardwert ist 0,1 (10 %).

ls_init_learn_rate

(Optional) Legt die anfängliche Lernrate fest, die von LEARN_RATE_STRATEGY='LINE_SEARCH' verwendet wird. Diese Option kann nur verwendet werden, wenn LINE_SEARCH angegeben ist.

Wenn sich die LEARN_RATE des Modells laut ML.TRAINING_INFO bei jedem Durchlauf zu verdoppeln scheint, versuchen Sie, LS_INIT_LEARN_RATE auf die zuletzt verdoppelte Lernrate zu setzen. Die optimale anfängliche Lernrate unterscheidet sich von Modell zu Modell. Eine anfängliche Lernrate, die bei einem Modell gut funktioniert, muss nicht unbedingt bei einem anderen Modell genauso gut funktionieren.

Argumente

float64_value kann eine beliebige 64-Bit-Gleitkommazahl sein.

epsilon_per_model

Optional: Gibt das Privacy Budget-Limit für das Trainieren dieses Modells an. Jedem Ads Data Hub-Kunden wird ein Privacy Budget von 10,0 pro Datentag gewährt. Mit einem erfolgreich trainierten Modell werden EPSILON_PER_MODEL des Budgets pro Datentag im für diese Abfrage angegebenen Zeitraum ausgegeben. Wenn Sie den Standardwert „ln(3)/10“ verwenden, können etwa 100 Modelle erstellt werden. Wird ein höherer Wert festgelegt, können Sie weniger, dafür aber qualitativ hochwertigere Modelle erstellen. Bei einem kleineren Wert lassen sich mehr Modelle erstellen, die jedoch eine geringere Qualität aufweisen.

Argumente

float64_value kann eine beliebige positive 64-Bit-Gleitkommazahl kleiner als ln(3) sein, also etwa 1,0986. Der Standardwert ist „ln(3)/10“.

automatic_input_scaling

(Optional) Wenn TRUE, wird auf alle numerischen Featurespalten automatisch min_max_scaling angewendet, so als ob die Spaltennamen in der Option min_max_scaled_cols explizit aufgerufen werden würden. Eine Ausnahme sind Spalten, die entweder in standard_scaled_cols oder quantile_bucketized_cols explizit aufgerufen wurden.

Argumente

bool_value ist BOOL. Der Standardwert ist TRUE.

min_max_scaled_cols

(Optional) Skaliert alle angegebenen numerical_expression-Featurespalten im Bereich von 0 bis 1, beschränkt auf MIN und MAX in allen Zeilen. Dieselben MIN- und MAX-Werte werden automatisch für die Vorhersage verwendet. Wenn die Vorhersagedaten außerhalb des Bereichs von MIN bis MAX liegen, werden sie entweder auf 0 oder 1 begrenzt.

Argumente

Array mit string_value, wobei jeder string_value ein STRING ist, der den umzuwandelnden Spaltennamen darstellt.

standard_scaled_cols

(Optional) Standardisiert die angegebenen numerical_expression-Featurespalten in allen Zeilen. Die zur Standardisierung des Ausdrucks berechneten Werte für STDDEV und MEAN werden automatisch für die Vorhersage verwendet.

Argumente

Array mit string_value, wobei jeder string_value ein STRING ist, der den umzuwandelnden Spaltennamen darstellt.

quantile_bucketized_cols

Gruppiert die angegebenen fortlaufenden numerischen Featurespalten in einen STRING mit dem Bucket-Namen als Wert (auf der Basis von Quantilen). Für die Vorhersage werden automatisch dieselben Quantile verwendet.

Argumente

Array mit STRUCT(string_value AS col_name, int64_value AS num_buckets), wobei jeder string_value ein STRING ist, der den kontinuierlich umzuwandelnden Spaltennamen darstellt. Jeder int64_value ist die Anzahl der Buckets, in die die numerischen Werte aufgeteilt werden sollen.

Validierung

  • Für jeden Datentag im für diese Abfrage angegebenen Zeitraum muss ausreichend Privacy Budget verfügbar sein (mehr als EPSILON_PER_MODEL). Andernfalls schlägt die Abfrage fehl.
  • Die optionalen Parameter für die Abstimmung (sofern angegeben) werden für die oben angezeigten Bereiche validiert.
  • Nur der erforderliche Parameter „model_type“ muss explizit angegeben werden.
  • Eine Spalte im Trainings-Dataset muss den Namen „label“ haben. Die Verwendung mehrerer Labels wird derzeit nicht unterstützt.
  • Die Labelspalte darf keine NULL-Werte enthalten. Andernfalls schlägt die Abfrage fehl.
  • Keine der Featurespalten darf aus der user_id abgeleitet werden.
  • Jede Zeile muss genau einen einzelnen Nutzer repräsentieren. In einer Zeile können nicht Daten von mehr als einem Nutzer dargestellt werden. Dies kann bei bestimmten Joins passieren, etwa bei einem CROSS JOIN.
  • Für keinen Nutzer dürfen sich die Daten in zwei separaten Zeilen befinden.
  • Aus Datenschutzgründen können nur die Optionen verwendet werden, die im Abschnitt zur Syntax beschrieben sind. Andere Optionen, die möglicherweise in der Abfragedokumentation BQML CREATE MODEL enthalten sind, werden derzeit nicht unterstützt.

Evaluierungsfunktionen

ML.EVALUATE

Mit der ML.EVALUATE-Funktion lassen sich Messwerte von Modellen bewerten. Die ML.EVALUATE-Funktion kann mit linearen oder logistischen Regressionsmodellen verwendet werden.

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

ML.ROC_CURVE

Verwenden Sie die Funktion ML.ROC_CURVE für die Bewertung von Messwerten, die sich auf logistische Regressionen beziehen. ML.ROC_CURVE bewertet nur logistische Regressionsmodelle.

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

Vorhersagefunktionen

ML.PREDICT

Mit der Funktion ML.PREDICT können mithilfe des Modells Ergebnisse vorhergesagt werden. Ergebnisse, die Sie mit ML.PREDICT erhalten, unterliegen denselben Datenschutzprüfungen wie andere Ergebnisse in Ads Data Hub. Weitere Informationen zu Datenschutzprüfungen

Lineare Regression

/* 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);

Logistische Regression

/* 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;

Funktionen zur Modell- und Feature-Inspektion

ML.TRAINING_INFO

Die ML.TRAINING_INFO-Funktion bietet die Möglichkeit, Informationen zu den Trainingsdurchläufen eines Modells abzurufen.

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

ML.FEATURE_INFO

Mit der Funktion ML.FEATURE_INFO können Sie Informationen zu Eingabefeatures aufrufen, die zum Trainieren eines Modells verwendet werden.

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

ML.WEIGHTS

Mit der Funktion ML.WEIGHTS können Sie die Gewichtungen aufrufen, die von einem Modell für die Vorhersage verwendet werden.

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

Beispiele

Modell erstellen

In den folgenden Beispielen wird anhand der natality-Beispieltabelle gezeigt, wie ein Modell erstellt wird.

Trainingsdaten in „inner-select“ (linear)

Im folgenden Beispiel werden Geburtsgewicht, Geschlecht, Schwangerschaftswochen, Alter der Mutter und ethnische Herkunft berücksichtigt, um das Geburtsgewicht eines Kindes vorherzusagen.

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

Trainingsdaten in „inner-select“ (logistisch)

Im folgenden Beispiel werden Geburtsgewicht, Geschlecht, Schwangerschaftswochen, Alter der Mutter und ethnische Herkunft berücksichtigt, um das Geschlecht eines Kindes vorherzusagen.

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