يمكنك إجراء توقّعات باستخدام نموذج انحدار خطّي أو لوجستي حالي
مع أوزان معروفة بدون استخدام 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.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;