Codelab การถดถอยเชิงเส้น

Codelab เกี่ยวกับการถดถอยเชิงเส้น

เกี่ยวกับ Codelab นี้

subjectอัปเดตล่าสุดเมื่อ ก.ย. 18, 2024
account_circleเขียนโดย Googler

1 บทนำ

Codelab นี้จะสอนวิธีใช้การถดถอยเชิงเส้นเพื่อสร้างรูปแบบที่คาดการณ์ต้นทุนต่อคลิก

ข้อกำหนดเบื้องต้น

หากต้องการทํา Codelab นี้ให้เสร็จสมบูรณ์ คุณจะต้องมีข้อมูลแคมเปญคุณภาพสูงเพียงพอเพื่อสร้างโมเดล

2 สร้างตารางสำรอง

เรียกใช้การค้นหาต่อไปนี้

CREATE TABLE
 linear_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,
     clk
.advertiser_click_cost_usd AS label
   
FROM adh.google_ads_impressions imp
     
INNER 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
 
)
 
# Need just one user ID or regression won't work
 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,
   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
   label
IS NOT NULL
   
AND
   gender_name
IS NOT NULL
   
AND
   age_group_name
IS NOT NULL
);

3 สร้างและฝึกโมเดล

แนวทางปฏิบัติแนะนำคือแยกขั้นตอนการสร้างตารางออกจากขั้นตอนการสร้างโมเดล

เรียกใช้การค้นหาต่อไปนี้ในตารางชั่วคราวที่สร้างขึ้นในขั้นตอนก่อนหน้า ไม่ต้องกังวลว่าจะระบุวันที่เริ่มต้นและวันที่สิ้นสุดอย่างไร เนื่องจากระบบจะอนุมานข้อมูลเหล่านี้ตามข้อมูลในตารางชั่วคราว

CREATE OR REPLACE
MODEL
`example_linear`
OPTIONS
(
   model_type
= 'adh_linear_regression'
)
AS (
   
SELECT *
   
FROM
       tmp
.linear_regression_example_data
);

SELECT * FROM ML.EVALUATE(MODEL `example_linear`)

แถว

mean_absolute_error

mean_squared_error

mean_squared_log_error

median_absolute_error

r2_score

explained_variance

1

0.11102380666874107

0.019938972461569476

0.019503393448234131

0.091792024503562136

-9.8205955364568478

-9.7975398794423025