เกี่ยวกับ Codelab นี้
1 บทนำ
Codelab นี้จะสอนวิธีใช้การถดถอยแบบโลจิสติกส์เพื่อทำความเข้าใจระดับของฟีเจอร์ เช่น เพศ กลุ่มอายุ เวลาในการแสดงผล และประเภทเบราว์เซอร์ที่เกี่ยวข้องกับแนวโน้มของผู้ใช้ที่จะคลิกโฆษณา
ข้อกำหนดเบื้องต้น
หากต้องการทํา Codelab นี้ให้เสร็จสมบูรณ์ คุณจะต้องมีข้อมูลแคมเปญคุณภาพสูงเพียงพอเพื่อสร้างโมเดล
2 เลือกแคมเปญ
เริ่มต้นด้วยการเลือกแคมเปญเก่าที่มีข้อมูลคุณภาพสูงจำนวนมาก หากไม่ทราบว่าแคมเปญใดน่าจะมีข้อมูลที่ดีที่สุด ให้ดำเนินการค้นหาต่อไปนี้กับข้อมูลที่เก่าที่สุดทั้งเดือนซึ่งคุณมีสิทธิ์เข้าถึง
SELECT
campaign_id,
COUNT(DISTINCT user_id) AS user_count,
COUNT(*) AS impression_count
FROM adh.google_ads_impressions
ORDER BY user_count DESC;
การเลือกข้อมูลที่ไม่ใช่ข้อมูลล่าสุดจะช่วยให้คุณฝึกและทดสอบโมเดลกับข้อมูลที่จะถูกนําออกจาก Ads Data Hub ในเร็วๆ นี้ได้ หากคุณพบขีดจํากัดของการฝึกโมเดลในข้อมูลนี้ ขีดจํากัดเหล่านั้นจะสิ้นสุดลงเมื่อมีการลบข้อมูล
หากแคมเปญทํางานอยู่มาก ข้อมูล 1 สัปดาห์ก็อาจเพียงพอแล้ว สุดท้าย จำนวนผู้ใช้ที่แตกต่างกันควรมีอย่างน้อย 100,000 ราย โดยเฉพาะในกรณีที่คุณฝึกโดยใช้ฟีเจอร์หลายรายการ
3 สร้างตารางสำรอง
เมื่อระบุแคมเปญที่จะใช้ฝึกโมเดลแล้ว ให้เรียกใช้การค้นหาด้านล่าง
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 สร้างและฝึกโมเดล
แนวทางปฏิบัติแนะนำคือแยกขั้นตอนการสร้างตารางออกจากขั้นตอนการสร้างโมเดล
เรียกใช้การค้นหาต่อไปนี้ในตารางชั่วคราวที่คุณสร้างไว้ในขั้นตอนก่อนหน้า ไม่ต้องกังวลเกี่ยวกับการระบุวันที่เริ่มต้นและวันที่สิ้นสุด เนื่องจากวันที่ดังกล่าวจะอิงตามข้อมูลในตารางชั่วคราว
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 ตีความผลลัพธ์
เมื่อการค้นหาทํางานเสร็จแล้ว คุณจะเห็นตารางที่คล้ายกับตารางด้านล่าง ผลลัพธ์จากแคมเปญจะแตกต่างกันไป
แถว | ความแม่นยำ | การเรียกคืน | ความแม่นยำ | f1_score | log_loss | roc_auc |
1 | 0.53083894341399718 | 0.28427804486705865 | 0.54530547622568992 | 0.370267971696336 | 0.68728232223722974 | 0.55236263736263735 |
ตรวจสอบน้ำหนัก
เรียกใช้การค้นหาต่อไปนี้เพื่อดูน้ำหนักเพื่อดูว่าฟีเจอร์ใดส่งผลต่อแนวโน้มของโมเดลในการคาดคะเนการคลิก
SELECT * FROM ML.WEIGHTS(MODEL `binary_logistic_example`)
คำค้นหาจะสร้างผลลัพธ์ที่คล้ายกับข้อความด้านล่าง โปรดทราบว่า BigQuery จะจัดเรียงป้ายกำกับที่ระบุและเลือก "ค่าต่ำสุด" เป็น 0 และ "ค่าสูงสุด" เป็น 1 ในตัวอย่างนี้ clicked คือ 0 และ not_clicked คือ 1 ดังนั้น ให้ตีความน้ำหนักที่มากกว่าเป็นตัวบ่งชี้ว่าคุณลักษณะนั้นๆ ทำให้เกิดการคลิกน้อยลง นอกจากนี้ วันที่ 1 หมายถึงวันอาทิตย์
processed_input | น้ำหนัก | category_weights.category | category_weights.weight |
1 | การดักจับ | -0.0067900886484743364 | |
2 | browser_name | Null | ไม่ทราบ 0.78205563068099249 |
Opera 0.097073700069504443 | |||
ดาลวิก -0.75233190448454246 | |||
Edge 0.026672464688442348 | |||
Silk -0.72539916969348706 | |||
อื่นๆ -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 | ชั่วโมง | 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 | |||
ไม่ทราบ 0.025466344709472313 | |||
35-44 0.01582412778809188 | |||
55-64 -0.004832373590628946 | |||
6 | gender_name | null | male 0.061475274448403977 |
ไม่ทราบ 0.46660611583398443 | |||
เพศหญิง -0.13635601771194916 |