وضع نماذج الانحدار في Ads Data Hub

الانحدار الخطي واللوجستي هما نموذجان لتعلُّم الآلة يتيحان لك إنشاء توقّعات مفيدة من البيانات الإعلانية.

  • ينشئ الانحدار الخطي دالة لتوفيق خط مع البيانات بحيث يتم تقليل المسافة بين نقاط البيانات والخط. ويمكن بعد ذلك استخدام هذا النموذج للتنبؤ بقيمة رقمية بناءً على المدخلات، مثل التنبؤ بالقيمة الدائمة للمستخدم بناءً على عمليات الشراء والتفاعلات السابقة وما إلى ذلك.
  • يُستخدم الانحدار اللوجستي في مشكلات التصنيف التنبؤي. يمكن أن يكون النموذج من نوعَين اعتمادًا على عدد المتغيّرات التي تقدّمها:
    • يجيب الانحدار اللوجستي الثنائي عن الأسئلة بنعم أو لا، مثل مدى احتمالية وقوع حدث إحالة ناجحة.
    • يُستخدم الانحدار اللوجستي متعدد الفئات للتنبؤ بقيم محتملة متعددة، مثل تحديد ما إذا كان العميل "منخفض القيمة" أو "متوسط القيمة" أو "عالي القيمة".

يتعلّم كل من الانحدار الخطي واللوجستي من بيانات التدريب (في هذه الحالة، بياناتك الإعلانية)، ما يمنحك نموذجًا تنبؤيًا لاتّخاذ القرارات الإعلانية. وبوجه عام، سيؤدي تقديم المزيد من البيانات والتأكد من أن البيانات التي تقدمها ذات جودة عالية إلى تحسين دقة النموذج. كلا النموذجين يحققان أداءً أفضل عند إعطائهما بيانات تدريب مجمعة بإحكام.

الخصوصية التفاضلية

يستخدم كلٌّ من الانحدار الخطي واللوجستي الخصوصية التفاضلية، وهي نظام مختلف عن عمليات فحص الخصوصية مقارنةً بالعمليات الأخرى في Ads Data Hub. تضمن الخصوصية التفاضلية خصوصية المستخدم النهائي عن طريق إدخال تشويش في نتائجك أثناء عملية التدريب. يظل هذا المستوى من التشويش منخفضًا بدرجة كافية بحيث لا تزال النتائج النهائية مفيدة، وفي الوقت نفسه مرتفعًا بما يكفي بحيث لا يمكن تحديد المستخدمين النهائيين. بالإضافة إلى ذلك، يكون مستوى التشويش غير حاسم، بحيث يكون مستوى التشويش غير متسق، مما يضمن خصوصية المستخدم النهائي.

الحد من طلبات البحث

ويقتصر عدد طلبات البحث عن وضع نماذج الانحدار الخطي واللوجستي على 100 طلب لكل "يوم بيانات" عند استخدام القيمة التلقائية EPSILON_PER_MODEL. يشير يوم البيانات إلى الأحداث التي تمّ إنشاؤها في يوم معيّن. تتوافق هذه الأحداث مع تاريخَي البدء والانتهاء اللذَين تضيفهما عند تنفيذ طلب البحث، وتاريخَي البدء والانتهاء المستخدَمَين عند إنشاء أي جداول يستخدمها طلب البحث، مثل الجداول المؤقتة المستخدَمة للتدريب. وهذا يعني أنّه لا يمكن استخدام البيانات من يوم واحد في أكثر من 100 نموذج. إذا اخترت تحديد قيمة EPSILON_PER_MODEL أكبر من القيمة التلقائية، ستتمكن من إنشاء نماذج أقل، ولكنها ستكون ذات جودة أعلى. وإذا اخترت قيمًا أصغر لـ EPSILON_PER_MODEL، يمكنك تدريب المزيد من النماذج، ولكنها ستكون ذات جودة أقل.

آلية العمل

يتبع سير العمل هذه الخطوات الأساسية:

  1. تجهيز بيانات التدريب.
  2. أنشئ نموذجًا.
  3. جمع الرؤى من النموذج.

إعداد بيانات التدريب

كما ذكرنا أعلاه، سيؤدي استخدام مجموعات بيانات أكبر وعالية الجودة بشكل عام إلى نتائج أفضل. بالإضافة إلى ذلك، ونظرًا لأن البيانات المدخلة يتم قياسها باستخدام تحجيم min-max، فإن البيانات المجمّعة بشكل متفرق أو البيانات ذات القيم الشاذّة المهمة يمكن أن تؤثر سلبًا على النموذج عن طريق تحريك المتوسط.

يختار Ads Data Hub تلقائيًا% 18 من بيانات التدريب لاستخدامها في التحقّق من صحتها. يمكن التحكّم في النسبة المئوية للبيانات المستخدَمة للتحقق من الصحة باستخدام الخيار data_split_eval_fraction.

إنشاء نموذج

حدِّد المَعلمات وبيانات الإدخال لتدريب النموذج.

أفضل الممارسات

أحد أهم العوامل في جودة النموذج هو حجم مجموعة التطبيق. ومع ذلك، ستكون المقايضة في الحجم/الجودة مختلفة اعتمادًا على المشكلة والعوامل المذكورة أدناه. أخبِرنا بتجربتك.

  • لقد لاحظنا دقة أكبر من 0.70 في نماذج الانحدار اللوجستي التي تم إنشاؤها من مجموعات تدريب تضم ما لا يقل عن 100,000 مستخدم.
  • رأينا معامل التحديد > 0.70 لنماذج الانحدار الخطي المُنشأة من مجموعات تدريب تضم ما لا يقل عن 800,000 مستخدم.

هناك عوامل أخرى يمكن أن تقلل من جودة أي نموذج.

  • النماذج اللوجستية التي تكون فيها إحدى الفئات ممثلة بدرجة أعلى من غيرها. وعلى وجه التحديد، عندما تضم إحدى التصنيفات القليل من مستخدمي مجموعة التدريب، فمن المحتمل ألا يكون وجود عدد كبير من المستخدمين الذين لديهم تصنيفات أخرى مفيدًا في دقة النموذج على التصنيف الصغير. على سبيل المثال، 20,000 و1,000 مستخدم لمجموعة تدريب لتصنيفَين أسوأ من 10,000 و2,000.
  • بيانات الميزات التي لا تقدّم إشارة قوية للتصنيفات
  • البيانات الأولية التي تحتاج إلى هندسة ميزات أكثر شمولاً. على سبيل المثال، قد تحتوي بعض الحقول على عدد كبير جدًا من القيم المحتمَلة. تتمثل إحدى طرق تحسين البيانات من هذا النوع في تحويل القيم إلى عنصر يضم عددًا أقل من الفئات أو المجموعات.

جمع الإحصاءات

يمكنك استدعاء الدوال لتقييم أداء نموذجك على بيانات التحقق من الصحة، وفحص الميزات والمعلومات المتعلقة بالتكرارات التحسينية للتدريب (مثل الأوزان الأساسية التي يستخدمها نموذج أثناء التنبؤ)، والتنبؤ بالبيانات غير المرئية.

جملة CREATE MODEL

تنشئ العبارة CREATE MODEL نموذجًا بالاسم ومجموعة البيانات التي تحددها. إذا كان اسم النموذج متوفرًا من قبل، سيحل CREATE MODEL محل النموذج الحالي.

بناء جملة CREATE MODEL

CREATE MODEL
model_name
OPTIONS
(
  // model_option_list:
  // Required parameter.
  MODEL_TYPE = { 'ADH_LINEAR_REGRESSION' | 'ADH_LOGISTIC_REGRESSION'}

  // Optional tuning parameters.
  [, L1_REG = float64_value ]
  [, L2_REG = float64_value ]
  [, DATA_SPLIT_EVAL_FRACTION = float64_value ]
  [, OPTIMIZE_STRATEGY = { 'AUTO_STRATEGY' | 'BATCH_GRADIENT_DESCENT' |
                           'NORMAL_EQUATION' } ]
  [, MAX_ITERATIONS = int64_value ]
  [, LEARN_RATE_STRATEGY = { 'LINE_SEARCH' | 'CONSTANT' } ]
  [, LEARN_RATE = float64_value ]
  [, EARLY_STOP = { TRUE | FALSE } ]
  [, MIN_REL_PROGRESS = float64_value ]
  [, LS_INIT_LEARN_RATE = float64_value ]
  [, EPSILON_PER_MODEL = float64_value ]
  [, AUTOMATIC_IMPUT_SCALING = bool_value ]
  [, MIN_MAX_SCALED_COLS = [string_value, string_value... ] ]
  [, STANDARD_SCALED_COLS = [string_value, string_value... ] ]
  [, QUANTILE_BUCKETIZED_COLS = [
        STRUCT(string_value AS col_name, int64_value AS num_buckets), 
       STRUCT(string_value AS col_name, int64_value AS num_buckets)... ] ]
)
AS query_statement

model_name

اسم أبجدي رقمي، شاملاً الشرطات السفلية والشرطات. لا يمكن تضمين نقاط. في حال كان اسم النموذج الذي قدّمته متوفّرًا من قبل، سيتم استبدال النموذج الأقدم.

query_statement

تحدّد هذه السمة طلب بحث SQL العادي المستخدم لإنشاء بيانات التدريب. إذا كنت تنشئ نماذج متعددة باستخدام بيانات التدريب نفسها، يمكنك إنشاء جدول مؤقت ببيانات التدريب والرجوع إليه هنا. يتجنّب هذا الأسلوب أخطاء التحقّق من الفروقات المحتمَلة بسبب محو البيانات أو تأخُّر نشر المحتوى غير المرغوب فيه.

model_option_list

model_type

(مطلوب) الخيار الوحيد المطلوب. يمكن أن يكون "adh_linear_regression" أو "adh_logistic_regression"

l1_reg

(اختياري) مقدار تسوية المستوى الأول المُطبَّق. من خلال تسوية المستوى 1، يتم تطبيق قيمة الترجيح بما يتناسب مع مجموع القيم المطلقة للأوزان. قد يكون أي رقم غير سالب، ويتم ضبطه تلقائيًا على صفر.

l2_reg

(اختياري) مقدار تسوية المستوى الثاني الذي تم تطبيقه. من خلال تسوية المستوى L2، يتم تطبيق قيمة الترجيح بما يتناسب مع الجذر التربيعي لمجموع تربيعات الأوزان. قد يكون أي رقم غير سالب، ويتم ضبطه تلقائيًا على صفر.

data_split_eval_fraction

(اختياري) يجب أن تتراوح القيمة بين .01 و .99، ويكون الإعداد التلقائي هو .18. يحدد جزء البيانات الذي ينتهي به الأمر في مجموعة التقييم. ويؤثر هذا في دقة النموذج عن طريق تقليل عدد الصفوف التي تنتهي في النموذج، ولكنه يزيد أيضًا من عدد النماذج التي يمكن للمستخدم تشغيلها. فيما يلي مخطط لهذه العلاقة بافتراض أن كل نموذج على مجموعة بيانات معينة يحتوي على نفس الكسر:

جزء التحقق من الصحة طلبات البحث المسموح بها
0.01 7
0.1 8
0.15 8
0.18 9
0.2 9
0.3 10
0.5 14
0.9 50

optimize_strategy

(اختياري) استراتيجية تدريب نماذج الانحدار الخطي.

الوسيطات

يحدّد "AUTO_STRATEGY" استراتيجية التدريب على النحو التالي:

  • إذا تم تحديد l1_reg أو warm_start، يتم استخدام استراتيجية batch_gradient_descent.
  • إذا كان إجمالي عدد القيم الفريدة لميزات التدريب أكثر من 10,000، يتم استخدام استراتيجية "batch_gradient_descent".
  • في حال حدوث مشكلة بسبب فرط التخصيص (عدد أمثلة التدريب أقل من 10 • إجمالي عدد القيم الفريدة للسمة)، يتم استخدام استراتيجية batch_gradient_descent.
  • يتم استخدام استراتيجية NORMAL_EQUATION لجميع الحالات الأخرى.

يعمل "BATCH_GRADIENT_DESCENT" (للخدمات اللوجستية فقط) على تدريب النموذج باستخدام طريقة انحدار التدرج المجمّعة، والتي تعمل على تحسين دالة الخسارة باستخدام دالة التدرج.

تحسب قيمة "NORMAL_EQUATION" (الخطي فقط) مباشرةً الحل التربيعي الأصغر لمشكلة الانحدار الخطي مع الصيغة التحليلية. لا يمكن استخدام المعادلة الطبيعية في الحالات التالية:

  • تم تحديد l1_reg.
  • تم تحديد warm_start.
  • يتجاوز إجمالي عدد القيم الفريدة للسمة التدريبية أكثر من 10,000.
  • القيمة التلقائية هي "AUTO_STRATEGY".

max_iterations

(اختياري) عدد التكرارات أو الخطوات للتدريب. نظرًا لأن هذا الاستعلام يبني شجرة واحدة لكل تكرار، فهذا أيضًا عدد الأشجار. يجب أن تكون القيمة عددًا صحيحًا أكبر من 1. وتكون القيمة التلقائية 20.

learn_rate_strategy

(اختياري، لوجستي فقط) الاستراتيجية لتحديد معدّل التعلّم أثناء التدريب.

الوسيطات

يستخدم "LINE_SEARCH" طريقة البحث الخطي لاحتساب معدّل التعلّم. معدّل التعلّم الأولي للبحث الخطي هو القيمة المحدّدة للسمة LS_INIT_LEARN_RATE .

  • يعمل البحث الخطي على إبطاء التدريب وزيادة عدد وحدات البايت التي تمت معالجتها، ولكنه يتقارب بشكل عام حتى مع معدّل التعلّم المحدَّد المبدئي الأكبر.

تضبط السمة "CONSTANT" معدّل التعلّم على القيمة المحدّدة للسمة LEARN_RATE.

القيمة التلقائية هي "LINE_SEARCH".

learn_rate

(اختياري، لوجستي فقط) معدّل التعلّم انحدار التدرج عند ضبط LEARN_RATE_STRATEGY على CONSTANT. إذا تم ضبط LEARN_RATE_STRATEGY على "LINE_SEARCH"، سيتم عرض خطأ.

الوسيطات

يمكن أن يكون float64_value أي رقم نقطة عائمة 64 بت. ويتم ضبطها تلقائيًا على 0.1 (10%).

early_stop

(اختياري) ما إذا كان يجب إيقاف التدريب بعد التكرار الأول الذي يكون فيه التحسين النسبي في الخسارة أقل من القيمة المحدّدة للسمة MIN_REL_PROGRESS.

الوسيطات

TRUE للتعبير عن "نعم"، وFALSE لكلمة "لا". يتم ضبط الإعدادات التلقائية على TRUE.

min_rel_progress

(اختياري) الحدّ الأدنى للتحسين النسبي للخسارة اللازمة لمواصلة التدريب عند ضبط EARLY_STOP على "صحيح". على سبيل المثال، تحدد القيمة 0.01 أن كل تكرار يجب أن يقلل من الخسارة بنسبة 1٪ حتى يستمر التدريب.

الوسيطات

يمكن أن يكون float64_value أي رقم نقطة عائمة 64 بت. ويتم ضبطها تلقائيًا على 0.1 (10%).

ls_init_learn_rate

(اختياري) تعمل هذه السياسة على ضبط معدّل التعلّم الأولي الذي يستخدمه LEARN_RATE_STRATEGY='LINE_SEARCH'. لا يمكن استخدام هذا الخيار إلا إذا تم تحديد LINE_SEARCH.

إذا بدا أنّ قيمة LEARN_RATE الخاصة بالنموذج تضاعف كل تكرار كما هو موضّح في ML.TRAINING_INFO، حاوِل ضبط LS_INIT_LEARN_RATE على آخر معدّل تعلُّم مضاعف. يختلف معدّل التعلّم الأولي الأمثل لكل نموذج. فمعدل التعلم الأولي الجيد لأحد النماذج قد لا يكون معدل تعلم أوليًا جيدًا لنموذج آخر.

الوسيطات

يمكن أن يكون float64_value أي رقم نقطة عائمة 64 بت.

epsilon_per_model

(اختياري) تحدِّد هذه السمة مقدار ميزانية الخصوصية الذي سيتم استخدامه لتدريب هذا النموذج. يتمّ تخصيص ميزانية للخصوصية تبلغ 10.0 قِيم لكل عميل بيانات عن "إعلانات Google" لكل يوم. سينفق النموذج الذي تم تدريبه بنجاح EPSILON_PER_MODEL من الميزانية لكل يوم بيانات في النطاق الزمني المحدد عند تشغيل الاستعلام. سيسمح استخدام القيمة الافتراضية ln(3)/10 بإنشاء حوالي 100 نموذج. إذا استخدمت قيمة أعلى، ستتمكن من إنشاء نماذج أقل، ولكنها ستكون ذات جودة أعلى. وإذا استخدمت قيمة أصغر، ستتمكّن من إنشاء المزيد من النماذج ذات الجودة الأقل.

الوسيطات

يمكن أن يكون float64_value أي رقم نقطة عائمة موجب 64 بت أقل من ln(3)، وهو حوالي 1.0986. يكون الإعداد التلقائي هو ln(3)/10.

automatic_input_scaling

(اختياري) عند TRUE، سيتم تلقائيًا تطبيق min_max_scaling على جميع أعمدة الميزات الرقمية، كما لو تم استدعاء أسماء الأعمدة صراحةً في الخيار min_max_scaled_cols، باستثناء أي أعمدة تم استدعاءها صراحةً في أي من الخيارَين standard_scaled_cols أو quantile_bucketized_cols.

الوسيطات

bool_value هي BOOL، والقيمة التلقائية هي TRUE.

min_max_scaled_cols

(اختياري) تدرج كل عمود من أعمدة ميزة "التعبير الرقمي" المحدّدة في نطاق من 0 إلى 1، مع تحديد الحدّ الأقصى لـ MIN وMAX في جميع الصفوف. يتم استخدام نفسي MIN وMAX تلقائيًا في التوقع. إذا كانت بيانات التوقّع خارج النطاق MIN أو MAX، سيتم تحديدها على 0 أو 1.

الوسيطات

مصفوفة string_value، حيث يكون كل string_value عبارة عن سلسلة تمثل اسم العمود المطلوب تحويله.

standard_scaled_cols

(اختياري) يتم توحيد أعمدة الميزات numerical_expression المحدّدة في جميع الصفوف. يتم استخدام STDDEV وMEAN المحسوبين لتوحيد التعبير تلقائيًا في التنبؤ.

الوسيطات

مصفوفة string_value، حيث يكون كل string_value STRING يمثّل اسم العمود المطلوب تحويله

quantile_bucketized_cols

نقل أعمدة الميزات الرقمية المستمرة المحدّدة إلى STRING مع اسم الحزمة كقيمة استنادًا إلى الكميات. ويتم استخدام نفس الكميات تلقائيًا في التنبؤ.

الوسيطات

مصفوفة STRUCT(string_value AS col_name, int64_value AS num_buckets)، حيث تكون كل سلسلة_value هي STRING التي تمثل اسم العمود العددي المستمر المطلوب تحويله حيث تمثل كل int64_value عدد المجموعات المطلوب تقسيم القيم العددية إليها.

التحقّق من الصحة

  • يجب أن يكون لكل يوم بيانات في النطاق الزمني المحدّد لطلب البحث هذا ميزانية خصوصية كافية، أي أكثر من EPSILON_PER_MODEL، وإلا سيتعذّر إتمام الطلب.
  • سيتم التحقق من صحة مَعلمات الضبط الاختيارية للنطاقات المعروضة أعلاه، في حال تحديدها.
  • يجب تحديد معلمة model_type واحدة مطلوبة فقط بشكل صريح.
  • يجب تسمية عمود واحد في مجموعة التدريب باسم "label". التصنيفات المتعددة غير معتمدة حاليًا.
  • لا يمكن أن يحتوي عمود التصنيف على قيم فارغة (NULL). إذا كان عمود التصنيف يحتوي على قيم فارغة (NULL)، سيتعذّر إتمام الاستعلام.
  • لا يمكن اشتقاق أي من أعمدة الميزات من user_id.
  • يجب أن يمثل كل صف مستخدمًا فريدًا واحدًا فقط. لا يمكن أن يمثل صف واحد بيانات من أكثر من مستخدم واحد. يمكن أن يحدث هذا مع عبارات join معينة، على سبيل المثال CROSS JOIN.
  • لا يمكن أن يكون هناك أي مستخدم في صفين منفصلين.
  • لأسباب تتعلق بالخصوصية، لا يمكن استخدام سوى الخيارات الموضّحة في قسم البنية. لا تتوفّر حاليًا خيارات أخرى قد تكون متوفّرة في مستندات طلب البحث BQML CREATE MODEL.

دوال التقييم

ML.EVALUATE

استخدِم الدالة ML.EVALUATE لتقييم مقاييس النماذج. يمكن استخدام الدالة ML.EVALUATE مع نماذج الانحدار الخطي أو الانحدار اللوجستي.

SELECT
  *
FROM ML.EVALUATE(MODEL `linear_model_test`);

ML.ROC_CURVE

استخدِم الدالة ML.ROC_CURVE لتقييم المقاييس الخاصة بالانحدار اللوجستي. لا تقيِّم ميزة "ML.ROC_CURVE" سوى نماذج الانحدار اللوجستي.

SELECT
  *
FROM ML.ROC_CURVE(MODEL `logistic_model_test`);

دوال التوقّع

ML.PREDICT

يمكن استخدام الدالة ML.PREDICT للتنبؤ بالنتائج باستخدام النموذج. تخضع النتائج التي يتم الحصول عليها باستخدام "ML.PREDICT" لعمليات فحص الخصوصية نفسها مثل النتائج الأخرى في Ads Data Hub. مزيد من المعلومات عن عمليات التحقّق من الخصوصية

الانحدار الخطي

/* This example outputs the average value for labels that the model predicted */
SELECT
  AVG(predicted_label) AS average_predicted_label
FROM
  ML.PREDICT(MODEL `linear_model_test`, TABLE tmp.linear_training_set);

الانحدار اللوجستي

/* This example outputs the model's prediction and probabilities for said prediction over individual users. It groups by label and prediction, counting the number of users in each prediction */
SELECT
  label,
  predicted_label, /* one of the two input labels, depending on which label has the higher predicted probability */
  COUNT(*) AS num /* a tally of users */
FROM
  ML.PREDICT(MODEL `logistic_model_test`, TABLE tmp.logistic_training_set)
GROUP BY 1, 2;

وظائف فحص النماذج والميزات

ML.TRAINING_INFO

تتيح لك الدالة ML.TRAINING_INFO الاطّلاع على معلومات عن التكرارات التحسينية للتدريب.

SELECT
  *
FROM ML.TRAINING_INFO(MODEL `logistic_model_test`);

ML.FEATURE_INFO

تتيح لك الدالة ML.FEATURE_INFO الاطّلاع على معلومات عن ميزات الإدخال المستخدمة لتدريب نموذج معيّن.

SELECT
  *
FROM ML.FEATURE_INFO(MODEL `logistic_model_test`);

ML.WEIGHTS

تتيح لك الدالة ML.WEIGHTS الاطلاع على الأوزان الأساسية التي يستخدمها أي نموذج أثناء التنبؤ.

SELECT
  *
FROM ML.WEIGHTS(MODEL `linear_model_test`);

أمثلة

إنشاء نموذج

تستخدم جميع الأمثلة التالية جدول natality لتوضيح كيفية إنشاء نموذج.

بيانات التدريب في الاختيار الداخلي (الخطي)

يستخدم المثال التالي وزن الولادة والجنس وأسابيع الحمل وعمر الأم والعرق الأم للتنبؤ بوزن الولادة لدى الطفل.

CREATE MODEL `natality_model`
OPTIONS
  (model_type='adh_linear_regression') AS
SELECT
  weight_pounds as label,
  is_male,
  gestation_weeks,
  mother_age,
  CAST(mother_race AS string) AS mother_race
FROM
  `bigquery-public-data.samples.natality`
WHERE
  weight_pounds IS NOT NULL

بيانات التدريب في الاختيار الداخلي (لوجستي)

يستخدم المثال التالي وزن الولادة، والجنس، وأسابيع الحمل، وعمر الأم، والعرق الأم للتنبؤ بجنس الجنين.

CREATE MODEL `natality_model`
OPTIONS
  (model_type='adh_logistic_regression') AS
SELECT
  weight_pounds,
  is_male as label,
  gestation_weeks,
  mother_age,
  CAST(mother_race AS string) AS mother_race
FROM
  `bigquery-public-data.samples.natality`
WHERE
  weight_pounds IS NOT NULL