การประมาณการถดถอยสำหรับรายการกลุ่มเป้าหมาย

คุณสามารถคาดการณ์โดยใช้โมเดลการถดถอยเชิงเส้นหรือแบบโลจิสติกส์ที่มีอยู่ ที่มีน้ำหนักที่รู้จักโดยไม่ต้องใช้ ML.PREDICT แม้ว่าจะเข้าถึงโมเดลไม่ได้ก็ตาม โดยตรง หากต้องการดำเนินการดังกล่าว คุณต้องใช้วิธีแก้ปัญหาชั่วคราวสำหรับใช้ Differentially Private โมเดลการถดถอย (DP) ภายในการค้นหาการเปิดใช้งานกลุ่มเป้าหมายใน Ads Data Hub

ตัวอย่างแบบทีละขั้นตอนนี้จะสอนวิธีอนุมานที่จำลองขึ้น สำหรับโมเดลการถดถอยแบบโลจิสติกส์เชิงเส้นและไบนารี จากนั้นเปรียบเทียบ ผลลัพธ์ที่มีผลลัพธ์เป็น ML.PREDICT เพื่อแสดงความแม่นยำของผลลัพธ์ที่จำลอง นอกจากนี้ยังจะสาธิตตัวอย่างที่นำไปใช้ได้จริงเกี่ยวกับวิธีสร้างรายการกลุ่มเป้าหมาย ด้วยโมเดลโลจิสติกแบบไบนารี ซึ่งจะใช้ในการประยุกต์ใช้โมเดล Conversion ต่อการเปิดใช้งานกลุ่มเป้าหมาย

ภาพรวมของตัวอย่าง

  1. สร้างข้อมูล
  2. ฝึกโมเดล
  3. ดูน้ำหนักและจุดตัด
  4. จำลองการคาดการณ์
  5. เปรียบเทียบผลลัพธ์

ตัวอย่างทีละขั้นตอน

1. สร้างข้อมูล

สร้างตารางที่มีข้อมูลจำลองสำหรับการฝึกโมเดล ทำเครื่องหมายเศษส่วนของ แถวของชุดการยกเว้น

CREATE OR REPLACE TABLE DATASET_NAME.LIN_REG_TRAINING_SET AS
 
WITH
  A
AS (
   
SELECT
     
*
   
FROM
      UNNEST
(GENERATE_ARRAY(1, 100000)) AS row_number),
  B
AS (
   
SELECT
      row_number
,
      RAND
() AS rand_label,
      RAND
() AS rand_feature_1,
      RAND
() AS rand_feature_2,
      RAND
() AS rand_feature_3,
      RAND
() AS rand_feature_4,
      RAND
() AS rand_feature_5,
      RAND
() AS rand_feature_6,
      RAND
() AS rand_feature_7,
      RAND
() AS rand_feature_8,
      RAND
() AS rand_feature_9,
      RAND
() AS rand_feature_10
   
FROM
      A
),
  C
AS (
   
SELECT
      rand_label
AS label,
     
*
   
FROM
      B
),
  D
AS (
   
SELECT
    row_number
,
    CAST
(round(10 * label) AS INT64) AS label,
   
(rand_label + rand_feature_1) / 2 AS feature_1,
   
(rand_label + rand_feature_2) / 2 AS feature_2,
   
(rand_label + rand_feature_3) / 2 AS feature_3,
   
(rand_label + rand_feature_4) / 2 AS feature_4,
   
(rand_label + rand_feature_5) / 2 AS feature_5,
   
(rand_label + rand_feature_6) / 2 AS feature_6,
   
(rand_label + rand_feature_7) / 2 AS feature_7,
   
(rand_label + rand_feature_8) / 2 AS feature_8,
   
(rand_label + rand_feature_9) / 2 AS feature_9,
   
(rand_label + rand_feature_10) / 2 AS feature_10
   
FROM
    C
)

SELECT
  label
,
  feature_1
,
  feature_2
,
  feature_3
,
  feature_4
,
  feature_5
,
  feature_6
,
  feature_7
,
  feature_8
,
  feature_9
,
  feature_10
,
  RAND
() < 0.1 AS holdback -- Ten percent will be true.
FROM
  D
SELECT
 
CASE
   
WHEN label < 5 THEN 0
   
WHEN label >= 5 THEN 1
 
END
 
AS label,
 
* EXCEPT (label)
FROM
 
`DATASET_NAME.BIN_LOG_REG_TRAINING_SET`

2. ฝึกโมเดล

ฝึกโมเดลการถดถอยจากชุดการฝึก

CREATE OR REPLACE MODEL `DATASET_NAME.LIN_REG_MODEL` OPTIONS (model_type="linear_reg") AS
 
SELECT
   
* except (holdback)
 
FROM
   
`DATASET_NAME.LIN_REG_TRAINING_SET`
 
WHERE
   
NOT holdback

โปรดทราบว่าเราได้เพิ่มสัญญาณรบกวนเพียงพอในข้อมูลจำลองเพื่อให้โมเดลมี R2 = 0.9009

การวัดผล ค่า
ค่าเฉลี่ยความผิดพลาดสัมบูรณ์ 0.7359
ความคลาดเคลื่อนเฉลี่ยกำลังสอง 0.8432
ค่าเฉลี่ยความผิดพลาดของบันทึกกำลังสอง 0.0810
ค่ามัธยฐานความผิดพลาดสัมบูรณ์ 0.6239
ค่า R ยกกำลังสอง 0.9009
CREATE OR REPLACE MODEL `DATASET_NAME.BIN_LOG_REG_MODEL` OPTIONS (model_type="logistic_reg") AS
 
SELECT
   
* EXCEPT (holdback)
 
FROM
   
`DATASET_NAME.BIN_LOG_REG_TRAINING_SET`
 
WHERE
   
NOT holdback

ผลลัพธ์ตัวอย่าง ดูความแม่นยำ 0.9260

การวัดผล ค่า
คลาสที่เป็นบวก 1
คลาสที่เป็นลบ 0
ความแม่นยำ 0.0810
การจดจำ 0.9315
ความแม่นยำ 0.9260
คะแนน F1 0.9328

ค่าตัวหนาในเมทริกซ์ความสับสนนี้แสดงความถี่ที่โมเดลแยกประเภท ป้ายกำกับแต่ละรายการถูกต้อง และค่าที่ไม่ใช่ตัวหนาแสดงความถี่ที่โมเดลจัดประเภทป้ายกำกับแต่ละป้ายไม่ถูกต้อง

ป้ายกำกับจริง ป้ายกำกับที่คาดการณ์ 1 ป้ายกำกับที่คาดการณ์ 2
1 93% 7%
0 8% 92%

3. ดูน้ำหนักและการสกัดกั้น

รับน้ำหนักและจุดตัดสำหรับโมเดล:

SELECT
 
*
FROM
  ML
.WEIGHTS(MODEL `DATASET_NAME.LIN_REG_MODEL`)
น้ำหนัก category_weights.category
feature_1 1.8263055528635743
feature_2 1.8143804404490813
feature_3 1.8601204874033492
feature_4 1.8507603439031859
feature_5 1.7899764387123640
feature_6 1.8645246630251291
feature_7 1.8698005281925356
feature_8 1.7904637080330201
feature_9 1.8036887855406274
feature_10 1.8117115890624449
ตรวจจับ -4.1428754911504306
SELECT
 
*
FROM
  ML
.WEIGHTS(MODEL `DATASET_NAME.BIN_LOG_REG_MODEL`)
น้ำหนัก category_weights.category
feature_1 3.823533928
feature_2 3.734812819
feature_3 3.842239823
feature_4 3.785488823
feature_5 3.737386716
feature_6 3.567663961
feature_7 3.819643052
feature_8 3.734673763
feature_9 3.839301406
feature_10 3.787306994
ตรวจจับ -17.922169920

4. จำลองการคาดการณ์

ใช้ผลคูณของจุดของค่าคุณลักษณะที่มีน้ำหนัก แล้วบวกค่า ดักจับ เพื่อทำให้การคาดการณ์โดยใช้ SQL มาตรฐานโดยไม่ใช้ ML.PREDICT คำค้นหานี้จะเปรียบเทียบการคาดคะเนที่ใช้เทคนิคนี้กับ ผู้ที่ใช้ ML.PREDICT สังเกตประสิทธิภาพของเส้น SQL ตัวหนา ผลคูณของค่าจุดสนใจสำหรับแถวที่มีน้ำหนักโมเดล แล้วนำไปบวก การดักจับสัญญาณ

WITH
T
AS (
SELECT
  label
AS actual_label,
  predicted_label
AS ml_predicted_label,
 
[feature_1,
  feature_2
,
  feature_3
,
  feature_4
,
  feature_5
,
  feature_6
,
  feature_7
,
  feature_8
,
  feature_9
,
  feature_10
] AS features,
 
[1.8263055528635743,
 
1.8143804404490813,
 
1.8601204874033492,
 
1.8507603439031859,
 
1.789976438712364,
 
1.8645246630251291,
 
1.8698005281925356,
 
1.7904637080330201,
 
1.8036887855406274,
 
1.8117115890624449] AS weights
FROM
  ML
.PREDICT(MODEL `DATASET_NAME.LIN_REG_MODEL`,
   
(
   
SELECT
     
*
   
FROM
     
`PROJECT_NAME.DATASET_NAME.LIN_REG_TRAINING_SET`))
WHERE
  holdback
),
P
AS (
SELECT
  actual_label
,
  ml_predicted_label
,
 
(
 
 SELECT
    SUM
(element1 * element2) - 4.1428754911504306
 
FROM
    T
.features element1
 
WITH
  OFFSET
    pos
 
JOIN
    T
.weights element2
 
WITH
  OFFSET
    pos
  USING
   
(pos) ) sql_predicted_label,

  features
,
  weights
FROM
  T
)
SELECT
  actual_label
,
  ml_predicted_label
,
  sql_predicted_label
,
  ABS
(ml_predicted_label - sql_predicted_label) < 0.00000000001 AS diff_is_negligible
FROM
  P

สำหรับการถดถอยแบบโลจิสติกแบบไบนารี เทคนิคในการจำลองการคาดการณ์คือ คล้ายกับการถดถอยเชิงเส้น ด้วยการเพิ่มการใช้ซิกมอยด์ ในขั้นตอนสุดท้ายพร้อมเกณฑ์ที่ต้องการ

ใช้ผลคูณของจุดของค่าคุณลักษณะที่มีน้ำหนัก แล้วบวกค่า อื่น เพื่อทำให้การคาดการณ์โดยใช้ SQL มาตรฐานโดยไม่ใช้ ML.PREDICT จากนั้นใช้ฟังก์ชันซิกมอยด์ที่มีเกณฑ์เป็น 0.5 ในผลลัพธ์เพื่อคาดการณ์ 0 หรือ 1 ก็ได้ คำค้นหานี้จะเปรียบเทียบการคาดคะเนที่ใช้เทคนิคนี้กับการคาดคะเน ด้วย ML.PREDICT

WITH
T
AS (
SELECT
  label
AS actual_label,
  predicted_label
AS ml_predicted_label,
 
[feature_1,
  feature_2
,
  feature_3
,
  feature_4
,
  feature_5
,
  feature_6
,
  feature_7
,
  feature_8
,
  feature_9
,
  feature_10
] AS features,
 
[3.8235339279050287,
 
3.7348128191185244,
 
3.8422398227859471,
 
3.7854888232502479,
 
3.7373867156553713,
 
3.5676639605351026,
 
3.8196430517007811,
 
3.7346737628343032,
 
3.8393014063170749,
 
3.7873069939244743] AS weights
FROM
  ML
.PREDICT(MODEL `DATASET_NAME.BIN_LOG_REG_MODEL`,
   
(
   
SELECT
     
*
   
FROM
     
`PROJECT_NAME.DATASET_NAME.BIN_LOG_REG_TRAINING_SET`))
WHERE
  holdback
),
P
AS (
SELECT
  actual_label
,
  ml_predicted_label
,
 
(
 
 SELECT
   
IF((1 / (1 + EXP(-(SUM(element1 * element2) -17.922169920432161)))) < 0.5, 0, 1)
 
FROM
    T
.features element1
 
WITH
  OFFSET
    pos
 
JOIN
    T
.weights element2
 
WITH
  OFFSET
    pos
  USING
   
(pos) ) sql_predicted_label,

  features
,
  weights
FROM
  T
)
SELECT
  actual_label
,
  ml_predicted_label
,
  sql_predicted_label
,
  ml_predicted_label
= sql_predicted_label AS simulation_is_accurate
FROM
  P

บล็อกของโค้ด SQL ที่เป็นตัวหนาในการค้นหาข้างต้นใช้ผลิตภัณฑ์แบบจุด ของค่าคุณลักษณะสำหรับแต่ละแถวที่มีน้ำหนักของโมเดลและเพิ่มค่า เพื่อรับการคาดการณ์การถดถอยเชิงเส้น

IF((1 / (1 + EXP(-(SUM(element1 * element2) -17.922169920432161)))) < 0.5, 0, 1)

จากนั้นจะใช้ฟังก์ชัน sigmoid Y = 1 / (1+e^-z) กับผลคูณของจุด และสกัดกั้นโดยใช้ SQL มาตรฐาน

IF((1 / (1 + EXP(-(SUM(element1 * element2) -17.922169920432161)))) < 0.5, 0, 1)

สุดท้าย ระบบจะนำผลลัพธ์ของฟังก์ชัน sigmoid ไปเปรียบเทียบกับค่าเกณฑ์ ของ 0.5 เพื่อคาดการณ์การถดถอยแบบโลจิสติกส์ของไบนารีของ 0 ถ้า จะน้อยกว่า 0.5 หรือ 1 ถ้าไม่อยู่ โปรดทราบว่าคุณสามารถใช้เกณฑ์ใดก็ได้ ค่าระหว่าง 0 ถึง 1

IF((1 / (1 + EXP(-(SUM(element1 * element2) -17.922169920432161)))) < 0.5, 0, 1)

เทคนิคนี้อาจขยายไปใช้กับการถดถอยแบบโลจิสติกส์แบบหลายคลาสด้วย ในนั้น น้ำหนักของโมเดลจะเป็นเมทริกซ์ nxn แทนที่จะเป็นเวกเตอร์ และ น้ำหนักจะเป็นเวกเตอร์แทนที่จะเป็นสเกลาร์ คูณจุดสนใจ เวกเตอร์ค่าตามเมทริกซ์น้ำหนัก แล้วบวกเวกเตอร์จุดตัด เวกเตอร์ที่ได้จะมีคะแนนสำหรับแต่ละป้ายกำกับ และคุณสามารถเลือก ป้ายกำกับที่มีคะแนนสูงสุดสำหรับการคาดการณ์ของคุณ หากคุณต้องการส่งคืน คุณจะใช้ฟังก์ชัน sigmoid กับแต่ละองค์ประกอบของฟิลด์ อาร์เรย์

5. เปรียบเทียบผลลัพธ์

ผลลัพธ์ตัวอย่างเกือบเหมือนกันทุกประการ ยกเว้นข้อผิดพลาดการปัดเศษขนาดเล็ก

actual_label ml_predicted_label sql_predicted_label diff_is_negligible
6 5.2062349420751834 5.2062349420751826 จริง
0 0.40318472770048075 0.403184727700479 จริง
3 3.0703766078249597 3.0703766078249597 จริง
7 7.0588171538562 7.0588171538562 จริง
6 6.7802375930646 6.7802375930646 จริง
6 5.1088569571339368 5.1088569571339377 จริง
4 4.051839078116874 4.051839078116874 จริง
4 5.1810254680219243 5.1810254680219234 จริง
6 6.1440349466401223 6.1440349466401205 จริง
1 2.0842399472783519 2.0842399472783519 จริง
2 2.1911209811886847 2.1911209811886838 จริง
3 3.0236086790006622 3.0236086790006613 จริง
2 2.573083132964213 2.5730831329642125 จริง
7 5.68662973136732 5.6866297313673186 จริง
9 8.1860026312677938 8.1860026312677938 จริง

การเปรียบเทียบการอนุมานจำลองกับผลลัพธ์จริงของ ML.PREDICT สมบูรณ์แบบ - ไม่มีข้อขัดแย้งใดๆ ในการยกเว้น 10,000 แถว ตั้งค่า มี 2-3 แถวที่ทั้ง ML.PREDICT และการอนุมานจำลอง ทั้งคู่ไม่เห็นด้วยกับป้ายกำกับจริง และคาดว่าจะเป็นความถูกต้องของโมเดล คือประมาณ 93% และมีค่าขนาดเล็กแต่ไม่ใช่ 0 ในเซลล์ที่อยู่นอกแนวทแยงมุม ของเมทริกซ์ความสับสน

actual_label ml_predicted_label sql_predicted_label simulation_is_accurate
0 1 1 จริง
0 0 0 จริง
0 0 0 จริง
0 0 0 จริง
0 0 0 จริง
0 0 0 จริง
0 0 0 จริง
0 0 0 จริง
0 0 0 จริง
0 0 0 จริง
0 1 1 จริง
0 0 0 จริง

สร้างรายการเปิดใช้งานกลุ่มเป้าหมายด้วย ML

กรณีการใช้งานทั่วไปคือการสร้างโลจิสติกแบบไบนารี Differentially Private โมเดลการถดถอยเพื่อคาดการณ์ Conversion แล้วใช้อนุมานกับโมเดลนี้ ขณะที่สร้างรายการกลุ่มเป้าหมาย สมมติว่าโมเดลโลจิสติกแบบไบนารีสร้างขึ้น ในตัวอย่างด้านบนคือการประมาณ Conversion และแต่ละแถวในการฝึก และชุดการประเมินแสดงผู้ใช้แต่ละคน

คำค้นหาต่อไปนี้แสดงวิธีสร้างรายการกลุ่มเป้าหมายกับผู้ใช้ที่ โมเดลคาดการณ์ว่าจะแปลง

WITH
T
AS (
SELECT
 
*,
  label
AS actual_label,
 
[feature_1,
  feature_2
,
  feature_3
,
  feature_4
,
  feature_5
,
  feature_6
,
  feature_7
,
  feature_8
,
  feature_9
,
  feature_10
] AS features,
 
[3.8235339279050287,
 
3.7348128191185244,
 
3.8422398227859471,
 
3.7854888232502479,
 
3.7373867156553713,
 
3.5676639605351026,
 
3.8196430517007811,
 
3.7346737628343032,
 
3.8393014063170749,
 
3.7873069939244743] AS weights
FROM
 
`PROJECT_NAME.DATASET_NAME.BIN_LOG_REG_TRAINING_SET`
WHERE
  holdback
),
P
AS (
SELECT
 
*,
 
(
 
SELECT
 
IF
   
((1 / (1 + EXP(-(SUM(element1 * element2) -17.922169920432161)))) < 0.5, 0, 1)
 
FROM
    T
.features element1
 
WITH
  OFFSET
    pos
 
JOIN
    T
.weights element2
 
WITH
  OFFSET
    pos
  USING
   
(pos) ) predicted_label,
  features
,
  weights
FROM
  T
),
SELECT
  user_id
FROM
  P
WHERE
  predicted_label
= 1;