يمكنك إجراء توقّعات باستخدام نموذج انحدار خطي أو لوجستي حالي
بأوزان معروفة بدون استخدام ML.PREDICT
، حتى بدون الوصول إلى النموذج
نفسه. ولإجراء ذلك، عليك استخدام حلّ بديل لاستخدام نماذج الانحدار المتعلّقة بالخصوصية التفاضلية
(DP) داخل طلبات بحث تفعيل شرائح الجمهور في "مركز بيانات الإعلانات".
سيعلّمك هذا المثال المفصّل كيفية إجراء الاستنتاج المحاكي
لنمذجَي الانحدار الخطي والانحدار اللوجستي الثنائي الفعليين، ثم مقارنة
النتائج بنتائج 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 |
INTERCEPT | -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 |
INTERCEPT | -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;