Informationen zu diesem Codelab
1. Intro
In diesem Codelab erfahren Sie, wie Sie mithilfe der logistischen Regression feststellen können, inwieweit Merkmale wie Geschlecht, Altersgruppe, Zeitpunkt der Impression und Browsertyp im Zusammenhang mit der Wahrscheinlichkeit stehen, mit der Nutzer auf eine Anzeige klicken.
Voraussetzungen
Für dieses Codelab benötigen Sie ausreichend hochwertige Kampagnendaten zum Erstellen eines Modells.
2. Kampagne auswählen
Wählen Sie zuerst eine bisherige Kampagne aus, die viele hochwertige Daten enthält. Wenn Sie nicht wissen, für welche Kampagne wahrscheinlich die besten Daten vorliegen, führen Sie für den am längsten zurückliegenden vollen Monat, auf den Sie Zugriff haben, folgende Abfrage aus:
SELECT
campaign_id,
COUNT(DISTINCT user_id) AS user_count,
COUNT(*) AS impression_count
FROM adh.google_ads_impressions
ORDER BY user_count DESC;
Wenn Sie Daten auswählen, die zwischen 12 und 13 Monaten alt sind, können Sie Ihr Modell mit Daten trainieren und testen, die demnächst aus Ads Data Hub entfernt werden. Wenn für diese Daten Einschränkungen für Modelltrainings bestehen, werden diese beendet, sobald die Daten gelöscht werden.
Wenn Ihre Kampagne besonders aktiv ist, reichen möglicherweise die Daten einer Woche aus. Schließlich sollte die Anzahl der einzelnen Nutzer mindestens 100.000 betragen, insbesondere wenn Sie mit vielen Funktionen trainieren.
3. Temporäre Tabelle erstellen
Führen Sie die folgende Abfrage aus, nachdem Sie die Kampagne bestimmt haben, die Sie zum Trainieren Ihres Modells verwenden möchten.
CREATE TABLE
binary_logistic_regression_example_data
AS(
WITH all_data AS (
SELECT
imp.user_id as user_id,
ROW_NUMBER() OVER(PARTITION BY imp.user_id) AS rowIdx,
imp.browser as browser_name,
gender_name as gender_name,
age_group_name as age_group_name,
DATETIME(TIMESTAMP_MICROS(
imp.query_id.time_usec), "America/Los_Angeles") as impression_time,
CASE # Binary classification of clicks simplifies model weight interpretation
WHEN clk.click_id.time_usec IS NULL THEN 0
ELSE 1
END AS label
FROM adh.google_ads_impressions imp
LEFT JOIN adh.google_ads_clicks clk USING (impression_id)
LEFT JOIN adh.gender ON demographics.gender = gender_id
LEFT JOIN adh.age_group ON demographics.age_group = age_group_id
WHERE
campaign_id IN (YOUR_CID_HERE)
)
SELECT
label,
browser_name,
gender_name,
age_group_name,
# Although BQML could divide impression_time into several useful variables on
# its own, it may attempt to divide it into too many features. As a best
# practice extract the variables that you think will be most helpful.
# The output of impression_time is a number, but we care about it as a
# category, so we cast it to a string.
CAST(EXTRACT(DAYOFWEEK FROM impression_time) AS STRING) AS day_of_week,
# Comment out the previous line if training on a single week of data
CAST(EXTRACT(HOUR FROM impression_time) AS STRING) AS hour,
FROM
all_data
WHERE
rowIdx = 1 # This ensures that there's only 1 row per user.
AND
gender_name IS NOT NULL
AND
age_group_name IS NOT NULL
);
4. Modell erstellen und trainieren
Es wird empfohlen, die Schritte zur Tabellenerstellung von denen zur Modellerstellung zu trennen.
Führen Sie die folgende Abfrage für die temporäre Tabelle aus, die Sie im vorherigen Schritt erstellt haben. Sie müssen kein Start- und Enddatum angeben, denn diese werden aus den Daten in der temporären Tabelle abgeleitet.
CREATE OR REPLACE
MODEL `binary_logistic_example`
OPTIONS(
model_type = 'adh_logistic_regression'
)
AS (
SELECT *
FROM
tmp.binary_logistic_regression_example_data
);
SELECT * FROM ML.EVALUATE(MODEL `binary_logistic_example`)
5. Ergebnisse interpretieren
Wenn die Abfrage ausgeführt wurde, wird eine Tabelle angezeigt, die der folgenden ähnelt. Die Ergebnisse Ihrer Kampagne werden andere sein.
Zeile | precision | recall | accuracy | f1_score | log_loss | roc_auc |
1 | 0.53083894341399718 | 0.28427804486705865 | 0.54530547622568992 | 0.370267971696336 | 0.68728232223722974 | 0.55236263736263735 |
Gewichtungen untersuchen
Führen Sie die folgende Abfrage aus, um die Gewichtungen zu sehen und herauszufinden, welche Merkmale die Wahrscheinlichkeit eines Klicks für Ihr Modell erhöhen:
SELECT * FROM ML.WEIGHTS(MODEL `binary_logistic_example`)
Die Abfrage liefert Ergebnisse, die den unten aufgeführten ähneln. Beachten Sie, dass die angegebenen Labels von BigQuery sortiert werden. Der „kleinste“ Wert wird auf „0“ und der größte auf „1“ festgelegt. In diesem Beispiel lautet der Wert für „clicked“ 0 und für „not_clicked“ „1“. Bewerten Sie daher größere Gewichtungen als Hinweis darauf, dass das Merkmal Klicks weniger wahrscheinlich macht. Außerdem entspricht Tag 1 dem Sonntag.
processed_input | weight | category_weights.category | category_weights.weight |
1 | INTERCEPT | -0.0067900886484743364 | |
2 | browser_name | null | unknown 0.78205563068099249 |
Opera 0.097073700069504443 | |||
Dalvik -0.75233190448454246 | |||
Edge 0.026672464688442348 | |||
Silk -0.72539916969348706 | |||
Other -0.10317444840919325 | |||
Samsung Browser 0.49861066525009368 | |||
Yandex 1.3322608977581121 | |||
IE -0.44170947381475295 | |||
Firefox -0.10372609461557714 | |||
Chrome 0.069115931084794066 | |||
Safari 0.10931362123676475 | |||
3 | day_of_week | null | 7 0.051780350639992277 |
6 -0.098905011477176716 | |||
4 -0.092395178188358462 | |||
5 -0.010693625983554155 | |||
3 -0.047629987110766638 | |||
1 -0.0067030673140933122 | |||
2 0.061739400111810727 | |||
4 | hour | null | 15 -0.12081420778273 |
16 -0.14670467657779182 | |||
1 0.036118460001355934 | |||
10 -0.022111985303061014 | |||
3 0.10146297241339688 | |||
8 0.00032334907570882464 | |||
12 -0.092819888101463813 | |||
19 -0.12158349523248162 | |||
2 0.27252001951689164 | |||
4 0.1389215333278028 | |||
18 -0.13202189122418825 | |||
5 0.030387010564142392 | |||
22 0.0085803647602565782 | |||
13 -0.070696534712732753 | |||
14 -0.0912853928925844 | |||
9 -0.017888651719350213 | |||
23 0.10216569641652029 | |||
11 -0.053494611827240059 | |||
20 -0.10800180853273429 | |||
21 -0.070702105471528345 | |||
0 0.011735200996326559 | |||
6 0.016581239381563598 | |||
17 -0.15602138949559918 | |||
7 0.024077394387953525 | |||
5 | age_group_name | null | 45-54 -0.013192901125032637 |
65+ 0.035681341407469279 | |||
25-34 -0.044038102549733116 | |||
18-24 -0.041488170110836373 | |||
unknown 0.025466344709472313 | |||
35-44 0.01582412778809188 | |||
55-64 -0.004832373590628946 | |||
6 | gender_name | null | male 0.061475274448403977 |
unknown 0.46660611583398443 | |||
female -0.13635601771194916 |