نمذجة الانحدار لقوائم المستخدمين

يمكنك التنبؤ باستخدام نموذج الانحدار الخطي أو اللوجستي الحالي ذات الأوزان المعروفة بدون استخدام ML.PREDICT، حتى بدون الوصول إلى النموذج نفسها. ولإجراء ذلك، عليك استخدام حل بديل لاستخدام الخيار "خاص التفاضلي" نماذج الانحدار (DP) ضمن طلبات تفعيل الجمهور في 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.7359
الخطأ التربيعي المتوسّط 0.8432
الخطأ التربيعي المتوسّط في السجلّ 0.0810
متوسط الخطأ المطلق 0.6239
مُعامل التحديد 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)

بعد ذلك يتم تطبيق الدالة السينية Y = 1 / (1+e^-z) على ناتج الضرب النقطي والاعتراض، باستخدام لغة SQL القياسية:

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

وأخيرًا، تتم مقارنة نتيجة الدالة السينية بقيمة الحد 0.5 للوصول إلى تنبؤ الانحدار اللوجستي الثنائي بقيمة 0، إذا أقل من 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;