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:
- Trainingsdaten vorbereiten
- Modell erstellen
- 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 ermittelt, 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
oderwarm_start
angegeben ist, wird die Strategiebatch_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
Zielgruppenaktivierung
Mithilfe eines vorhandenen linearen Regressionsmodells mit bekannten Gewichten sind Vorhersagen möglich, ohne dass ML.PREDICT
verwendet werden muss und ohne Zugriff auf das Modell selbst. Weitere Informationen finden Sie im Codelab zur Regressionsmodellierung für die Zielgruppenaktivierung.