ऑडियंस की सूचियों के लिए रिग्रेशन मॉडलिंग

किसी मौजूदा लीनियर या लॉजिस्टिक रिग्रेशन मॉडल का इस्तेमाल करके, अनुमान लगाया जा सकता है ML.PREDICT का इस्तेमाल किए बिना, वज़न के डेटा को मेज़र करता है. भले ही, आपके पास मॉडल का ऐक्सेस न हो वह भी ऐसा कर सकता है. ऐसा करने के लिए, आपको डिफ़रेंशियल प्राइवेट Ads Data Hub में ऑडियंस ऐक्टिवेशन क्वेरी के अंदर (डीपी) रिग्रेशन मॉडल.

सिलसिलेवार तरीके से दिए गए इस उदाहरण से, आपको सिम्युलेट किए गए अनुमान को लागू करने का तरीका पता चलेगा लीनियर और बाइनरी लॉजिस्टिक रिग्रेशन मॉडल के लिए मिलते-जुलते नतीजों की सटीक जानकारी देने के लिए, ML.PREDICT वाले नतीजे दिखाता है. इससे एक व्यावहारिक उदाहरण भी दिखाया जाएगा. इस उदाहरण में, ऑडियंस की सूची बनाने का तरीका भी बताया गया है जिसमें बाइनरी लॉजिस्टिक मॉडल हो, जिसका इस्तेमाल कन्वर्ज़न मॉडल को लागू करने में किया जाएगा को ऑडियंस ऐक्टिवेट करने के लिए डिज़ाइन किया गया है.

उदाहरण की खास जानकारी:

  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.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;