Lập mô hình hồi quy cho danh sách đối tượng

Bạn có thể đưa ra dự đoán bằng cách sử dụng mô hình hồi quy tuyến tính hoặc logistic hiện có với các trọng số đã biết mà không cần sử dụng ML.PREDICT, ngay cả khi không có quyền truy cập vào chính mô hình đó. Để làm như vậy, bạn cần sử dụng giải pháp thay thế bằng cách sử dụng mô hình hồi quy riêng tư (DP) riêng tư biệt lập trong các truy vấn kích hoạt đối tượng trong Ads Data Hub.

Ví dụ từng bước này sẽ hướng dẫn bạn cách thực hiện suy luận mô phỏng cho các mô hình hồi quy logistic tuyến tính và nhị phân thực tế, sau đó so sánh kết quả với kết quả của ML.PREDICT để cho thấy độ chính xác của kết quả mô phỏng. Bài viết này cũng sẽ minh hoạ một ví dụ thực tế về cách tạo danh sách đối tượng bằng mô hình hậu cần nhị phân mà sẽ được dùng để áp dụng mô hình chuyển đổi cho việc kích hoạt đối tượng.

Tổng quan về ví dụ:

  1. Tạo dữ liệu
  2. Huấn luyện mô hình
  3. Lấy trọng số và giao điểm
  4. Mô phỏng cụm từ gợi ý
  5. So sánh kết quả

Ví dụ từng bước

1. Tạo dữ liệu

Tạo bảng có dữ liệu mô phỏng để huấn luyện mô hình. Đánh dấu một phần trong số các hàng cho nhóm cách ly.

Hồi quy tuyến tính

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

Hồi quy logistic nhị phân

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. Huấn luyện mô hình

Đào tạo mô hình hồi quy từ tập hợp huấn luyện.

Hồi quy tuyến tính

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

Lưu ý rằng chúng ta đã thêm đủ độ nhiễu vào dữ liệu mô phỏng để có được một mô hình có R2 = 0,9009.

Đo lường Giá trị
Sai số tuyệt đối trung bình 0,7359
Sai số bình phương trung bình 0,8432
Lỗi nhật ký bình phương trung bình 0,0810
Trung vị lỗi tuyệt đối 0,6239
R bình phương 0,9009

Hồi quy logistic nhị phân

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

Kết quả mẫu. Lưu ý độ chính xác là 0,9260.

Đo lường Giá trị
Lớp dương 1
Lớp phủ định 0
Chính xác 0,0810
Mức độ truy lại 0,9315
Độ chính xác 0,9260
Điểm F1 0.9328

Các giá trị in đậm trong ma trận nhầm lẫn này cho biết tần suất mô hình phân loại chính xác từng nhãn và các giá trị không in đậm cho biết tần suất mô hình phân loại sai từng nhãn.

Nhãn đúng Nhãn dự đoán 1 Nhãn được dự đoán 2
1 93% 7%
0 8% 92%

3. Lấy trọng số và giao điểm

Lấy trọng số và giao điểm của mô hình:

Hồi quy tuyến tính

SELECT
  *
FROM
  ML.WEIGHTS(MODEL `DATASET_NAME.LIN_REG_MODEL`)
cân nặng 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
ĐOẠN NỘI DUNG -4,1428754911504306

Hồi quy logistic nhị phân

SELECT
  *
FROM
  ML.WEIGHTS(MODEL `DATASET_NAME.BIN_LOG_REG_MODEL`)
cân nặng 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
ĐOẠN NỘI DUNG -17,922169920

4. Mô phỏng cụm từ gợi ý

Hồi quy tuyến tính

Sử dụng tích dấu chấm của các giá trị tính năng với trọng số và thêm giá trị giao điểm để đưa ra dự đoán bằng SQL chuẩn mà không cần sử dụng ML.PREDICT. Truy vấn này so sánh các dự đoán sử dụng kỹ thuật này với các dự đoán sử dụng ML.PREDICT. Hãy lưu ý cách các dòng SQL in đậm đang thực hiện tích dấu chấm của các giá trị tính năng cho hàng có trọng số mô hình, sau đó thêm giao điểm.

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

Hồi quy logistic nhị phân

Đối với hồi quy logistic nhị phân, kỹ thuật mô phỏng các dự đoán rất giống với hồi quy tuyến tính, có thêm việc áp dụng hàm sigmoid ở bước cuối cùng với ngưỡng mong muốn.

Sử dụng tích dấu chấm của các giá trị tính năng với trọng số và thêm giá trị giao điểm để đưa ra dự đoán bằng SQL chuẩn mà không cần sử dụng ML.PREDICT. Sau đó, sử dụng hàm sigmoid với ngưỡng kết quả là 0,5 để dự đoán 0 hoặc 1. Truy vấn này so sánh các dự đoán sử dụng kỹ thuật này với các dự đoán sử dụng 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

Khối mã SQL in đậm trong truy vấn ở trên đang thực hiện tích dấu chấm của các giá trị tính năng cho mỗi hàng có trọng số của mô hình và thêm điểm chặn để có được dự đoán hồi quy tuyến tính:

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

Sau đó, công cụ này sẽ áp dụng hàm sigmoid Y = 1 / (1+e^-z) cho sản phẩm chấm và giao cắt, bằng cách sử dụng SQL chuẩn:

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

Cuối cùng, kết quả của hàm sigmoid được so sánh với giá trị ngưỡng 0, 5 để đưa ra dự đoán hồi quy logistic nhị phân là 0, nếu nhỏ hơn 0, 5 hoặc 1 nếu không. Xin lưu ý rằng bạn có thể sử dụng bất kỳ giá trị ngưỡng nào từ 0 đến 1.

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

Kỹ thuật này cũng có thể được mở rộng cho hồi quy logistic nhiều lớp. Trong trường hợp đó, các trọng số của mô hình sẽ là một ma trận nxn, chứ không phải là một vectơ và trọng số sẽ là một vectơ chứ không phải là đại lượng vô hướng. Bạn sẽ nhân vectơ giá trị của tính năng với ma trận trọng số rồi cộng vectơ giao điểm. Vectơ kết quả sẽ có điểm cho từng nhãn và bạn có thể chọn nhãn có điểm cao nhất cho dự đoán của mình. Nếu muốn trả về một mảng xác suất, bạn cần áp dụng hàm sigmoid cho từng phần tử của mảng.

5. So sánh kết quả

Hồi quy tuyến tính

Kết quả mẫu gần như giống hệt nhau, ngoại trừ một lỗi làm tròn nhỏ.

actual_label ml_predicted_label sql_predicted_label diff_is_negligible
6 5,2062349420751834 5,2062349420751826 đúng
0 0,40318472770048075 0,403184727700479 đúng
3 3,0703766078249597 3,0703766078249597 đúng
7 7,0588171538562 7,0588171538562 đúng
6 6,7802375930646 6,7802375930646 đúng
6 5,1088569571339368 5,1088569571339377 đúng
4 4,051839078116874 4,051839078116874 đúng
4 5,1810254680219243 5,1810254680219234 đúng
6 6,1440349466401223 6,1440349466401205 đúng
1 2,0842399472783519 2,0842399472783519 đúng
2 2,1911209811886847 2,1911209811886838 đúng
3 3,0236086790006622 3,0236086790006613 đúng
2 2,573083132964213 2,5730831329642125 đúng
7 5,68662973136732 5,6866297313673186 đúng
9 8,1860026312677938 8,1860026312677938 đúng

Hồi quy logistic nhị phân

Việc so sánh suy luận mô phỏng với kết quả thực tế của ML.PREDICT là hoàn hảo – không phải là một mâu thuẫn duy nhất trong nhóm cách ly hàng 10 nghìn. Có một vài hàng mà cả ML.PREDICT và dự đoán mô phỏng đều không đồng ý với nhãn thực tế và dự kiến có thể xảy ra vì độ chính xác của mô hình là khoảng 93% và có các giá trị nhỏ nhưng khác 0 trong các ô ngoài đường chéo của ma trận nhầm lẫn.

actual_label ml_predicted_label sql_predicted_label simulation_is_accurate
0 1 1 đúng
0 0 0 đúng
0 0 0 đúng
0 0 0 đúng
0 0 0 đúng
0 0 0 đúng
0 0 0 đúng
0 0 0 đúng
0 0 0 đúng
0 0 0 đúng
0 1 1 đúng
0 0 0 đúng

Tạo danh sách kích hoạt đối tượng bằng công nghệ học máy

Một trường hợp sử dụng điển hình là tạo một mô hình hồi quy hậu cần nhị phân riêng tư khác biệt để dự đoán lượt chuyển đổi, sau đó áp dụng suy luận cho mô hình này trong khi tạo danh sách đối tượng. Giả sử mô hình hậu cần nhị phân được tạo trong ví dụ trên đang lập mô hình lượt chuyển đổi và mỗi hàng trong các tập hợp huấn luyện và đánh giá đại diện cho một người dùng riêng biệt.

Truy vấn sau cho biết cách tạo danh sách đối tượng gồm những người dùng mà mô hình dự đoán sẽ chuyển đổi:

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;