किसी मौजूदा लीनियर या लॉजिस्टिक रिग्रेशन मॉडल का इस्तेमाल करके, अनुमान लगाया जा सकता है
ML.PREDICT
का इस्तेमाल किए बिना, वज़न के डेटा को मेज़र करता है. भले ही, आपके पास मॉडल का ऐक्सेस न हो
वह भी ऐसा कर सकता है. ऐसा करने के लिए, आपको डिफ़रेंशियल प्राइवेट
Ads Data Hub में ऑडियंस ऐक्टिवेशन क्वेरी के अंदर (डीपी) रिग्रेशन मॉडल.
सिलसिलेवार तरीके से दिए गए इस उदाहरण से, आपको सिम्युलेट किए गए अनुमान को लागू करने का तरीका पता चलेगा
लीनियर और बाइनरी लॉजिस्टिक रिग्रेशन मॉडल के लिए
मिलते-जुलते नतीजों की सटीक जानकारी देने के लिए, ML.PREDICT
वाले नतीजे दिखाता है.
इससे एक व्यावहारिक उदाहरण भी दिखाया जाएगा. इस उदाहरण में, ऑडियंस की सूची बनाने का तरीका भी बताया गया है
जिसमें बाइनरी लॉजिस्टिक मॉडल हो, जिसका इस्तेमाल कन्वर्ज़न मॉडल को लागू करने में किया जाएगा
को ऑडियंस ऐक्टिवेट करने के लिए डिज़ाइन किया गया है.
उदाहरण की खास जानकारी:
- डेटा जनरेट करें
- मॉडल को ट्रेनिंग दें
- वज़न उठाएं और इंटरसेप्ट करें
- अनुमान को सिम्युलेट करें
- नतीजों की तुलना करें
सिलसिलेवार निर्देश का उदाहरण
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.7,359 |
वर्ग में गड़बड़ी का माध्य | 0.8432 |
वर्ग के आकार वाले लॉग में औसत गड़बड़ी | 0.0810 |
मीडियन कुल गड़बड़ी | 0.6,239 |
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. अनुमान को सिम्युलेट करें
सुविधा की वैल्यू के डॉट प्रॉडक्ट का इस्तेमाल वज़न के साथ करें और जोड़ें
इंटरसेप्ट करेंगे, ताकि स्टैंडर्ड एसक्यूएल का इस्तेमाल किए बिना अनुमान लगाया जा सके
ML.PREDICT
. यह क्वेरी, इस तकनीक का इस्तेमाल करने वाले सुझावों की तुलना इससे करती है
जो 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,
[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
बाइनरी लॉजिस्टिक रिग्रेशन के लिए, अनुमानों को सिम्युलेट करने की तकनीक लीनियर रिग्रेशन की तरह, सिगमॉइड का इस्तेमाल करके फ़ंक्शन को आखिरी चरण पर अपने काम का थ्रेशोल्ड सेट करें.
सुविधा की वैल्यू के डॉट प्रॉडक्ट का इस्तेमाल वज़न के साथ करें और जोड़ें
इंटरसेप्ट करेंगे, ताकि 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)
इसके बाद, यह डॉट प्रॉडक्ट पर सिगमॉइड फ़ंक्शन Y = 1 / (1+e^-z)
को लागू करता है
और इंटरसेप्ट करें. इसके लिए, स्टैंडर्ड एसक्यूएल का इस्तेमाल करें:
IF((1 / (1 + EXP(-(SUM(element1 * element2) -17.922169920432161)))) < 0.5, 0, 1)
आखिर में, सिगमॉइड फ़ंक्शन के नतीजे की तुलना थ्रेशोल्ड वैल्यू से की जाती है का मतलब 0.5 होना चाहिए, ताकि बाइनरी लॉजिस्टिक रिग्रेशन के अनुमान के सटीक नतीजे मिल सकें. यह 0.5 से कम होता है या अगर नहीं है, तो 1 होता है. ध्यान रखें कि किसी भी थ्रेशोल्ड का इस्तेमाल किया जा सकता है वैल्यू 0 और 1 के बीच की होनी चाहिए.
IF((1 / (1 + EXP(-(SUM(element1 * element2) -17.922169920432161)))) < 0.5, 0, 1)
इस तकनीक को मल्टीक्लास लॉजिस्टिक रिग्रेशन पर भी लागू किया जा सकता है. इसमें केस में, मॉडल का वेट, वेक्टर के बजाय nxn मैट्रिक्स होगा, और वज़न अदिश के बजाय एक वेक्टर होगा. आपको इस सुविधा को कई गुना वेक्टर को वज़न मैट्रिक्स से जोड़ें और इंटरसेप्ट वेक्टर जोड़ें. कॉन्टेंट बनाने नतीजे में मिलने वाले वेक्टर में हर लेबल का स्कोर होगा और आपके अनुमान के लिए सबसे ज़्यादा स्कोर वाला लेबल. अगर आपको प्रॉबबिलिटी अरे का इस्तेमाल करते समय, आपको कलेक्शन.
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 हज़ार की रोक में कोई भी कॉन्ट्राडिशन नहीं है
सेट. ऐसी कुछ लाइनें हैं जिनमें ML.PREDICT
और सिम्युलेटेड अनुमान, दोनों शामिल हैं
दोनों ही वास्तविक लेबल से सहमत नहीं हैं और इसे मॉडल के सटीक होने के तौर पर माना जाता है
करीब 93% है और ऑफ़-डाइगनल सेल में वैल्यू छोटी है, लेकिन शून्य नहीं है
के बारे में आपको ज़्यादा जानकारी मिल जाएगी.
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 | सही |
मशीन लर्निंग का इस्तेमाल करके, ऑडियंस ऐक्टिवेशन की सूची बनाएं
आम तौर पर, इस्तेमाल का उदाहरण यह होगा कि डिफ़रेंशियल प्राइवेट बाइनरी लॉजिस्टिक तैयार की जाए रिग्रेशन मॉडल से कन्वर्ज़न का अनुमान लगाएं. इसके बाद, इस मॉडल के आधार पर अनुमान लागू करें का इस्तेमाल करें. मान लें कि बाइनरी लॉजिस्टिक मॉडल बनाया गया ऊपर दिए गए उदाहरण में कन्वर्ज़न मॉडलिंग और ट्रेनिंग की हर लाइन और इवैलुएशन सेट में अलग उपयोगकर्ता को दिखाया जाता है.
नीचे दी गई क्वेरी से पता चलता है कि ऐसे उपयोगकर्ताओं के साथ ऑडियंस की सूची कैसे बनाई जाती है जो मॉडल के अनुमान से बदला जाएगा:
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;