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ó
có trọng số đã biết mà không sử dụng ML.PREDICT
, ngay cả khi không có quyền truy cập vào mô hình
. Để làm như vậy, bạn cần sử dụng một giải pháp
dùng mã riêng tư khác biệt
(DP) mô hình hồi quy bên 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 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ả bằng ML.PREDICT
để cho thấy độ chính xác của kết quả mô phỏng.
Video 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 logistic nhị phân sẽ được dùng trong việc áp dụng mô hình chuyển đổi
vào việc kích hoạt đối tượng.
Tổng quan về ví dụ:
- Tạo dữ liệu
- Huấn luyện mô hình
- Lấy trọng số và giao điểm
- Mô phỏng thông tin dự đoán
- So sánh kết quả
Ví dụ từng bước
1. Tạo dữ liệu
Tạo một bảng có dữ liệu mô phỏng để huấn luyện mô hình. Đánh dấu một phần của các hàng cho bộ giữ lại.
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. Huấn luyện mô hình
Huấn luyện mô hình hồi quy từ tập huấn luyện.
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 đã tăng đủ độ nhiễu vào dữ liệu mô phỏng để có được mô hình 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 |
Sai số tuyệt đối trung vị | 0,6239 |
R bình phương | 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
Kết quả mẫu. Lưu ý độ chính xác là 0,9260.
Đo lường | Giá trị |
---|---|
Lớp học tích cực | 1 |
Lớp phủ định | 0 |
Chính xác | 0,0810 |
Nhớ 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 được phân loại từng nhãn chính xác và 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 được 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:
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 QUẢNG CÁO | -4,1428754911504306 |
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 QUẢNG CÁO | -17,922169920 |
4. Mô phỏng thông tin dự đoán
Sử dụng tích vô hướng của các giá trị đối tượng cùng với trọng số và thêm giá trị
chặn, để đư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 để
những người sử dụng ML.PREDICT
. Chú ý cách các dòng SQL in đậm hoạt động với dấu chấm
tích của các giá trị đối tượng cho hàng có trọng số của mô hình, sau đó cộng 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
Đối với hồi quy logistic nhị phân, kỹ thuật để mô phỏng dự đoán là rất giống với hồi quy tuyến tính, có thêm việc áp dụng đường cong sigmoid ở bước cuối cùng với ngưỡng mong muốn.
Sử dụng tích vô hướng của các giá trị đối tượng cùng với trọng số và thêm giá trị
chặn để đưa ra dự đoán bằng SQL chuẩn mà không cần dùng ML.PREDICT
.
Sau đó sử dụng hàm sigmoid với ngưỡng là 0,5 trên kết quả để 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
đang 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 phép biến đổi 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 giá trị để lấy dự đoán hồi quy tuyến tính:
IF((1 / (1 + EXP(-(SUM(element1 * element2) -17.922169920432161)))) < 0.5, 0, 1)
Sau đó, phương thức này sẽ áp dụng hàm sigmoid Y = 1 / (1+e^-z)
cho sản phẩm chấm
và chặn, bằ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 để dự đoán hồi quy logistic nhị phân bằng 0, nếu nó 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ỳ ngưỡng nào có giá trị 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 đa lớp. Trong đó trường hợp, trọng số của mô hình sẽ là ma trận nxn, thay vì vectơ và trọng số sẽ là một vectơ thay vì đại lượng vô hướng. Bạn sẽ nhân rộng tính năng này các giá trị bằng ma trận trọng số và cộng vectơ giao điểm. Chiến lược phát hành đĩa đơn vectơ thu được sẽ có một điểm số cho từng nhãn và bạn có thể chọn có điểm cao nhất cho dự đoán của bạn. Nếu bạn muốn trả lại một xác suất, bạn sẽ áp dụng hàm sigmoid cho mỗi phần tử của .
5. So sánh kết quả
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 |
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 có một mâu thuẫn nào trong khoảng cách chặn 10.000 hàng
thiết lập. Có một vài hàng trong đó cả ML.PREDICT
và suy luận mô phỏng
đều không đồng ý với nhãn thực tế và điều này được dự kiến là độ 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 tệp logistic nhị phân riêng tư khác biệt mô hình hồi quy để dự đoán lượt chuyển đổi, sau đó áp dụng suy luận cho mô hình này khi tạo danh sách đối tượng. Giả sử rằng mô hình hậu cần nhị phân đã tạo trong ví dụ trên là lập mô hình lượt chuyển đổi và mỗi hàng trong khoá huấn luyện và tập hợp đánh giá đại diện cho một người dùng riêng biệt.
Truy vấn sau đây cho biết cách tạo danh sách đối tượng gồm những người dùng 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;