مختبر Codelab لتحسين عملية الشراء داخل التطبيق على الجهاز في الوقت الفعلي

1. نظرة عامة

1cbf855eda62c306.png

مرحبًا بك في الدرس التطبيقي حول تحسين عمليات الشراء داخل التطبيق في الوقت الفعلي على الجهاز. ستتعلم في هذا الدرس التطبيقي حول التعليمات البرمجية كيفية استخدام TensorFlow Lite وFirebase لتدريب نموذج تخصيص مخصص ونشره في تطبيقك.

يوضح هذا البرنامج التعليمي كيفية إنشاء نموذج تعلم آلي للتخصيص، ولا سيما النموذج الذي يتنبأ بعرض الشراء الأمثل داخل التطبيق (IAP) في ضوء الحالة التي يكون فيها المستخدم الحالي. وهذا مثال على مشكلة قطاع الطرق السياقية، وهو أمر مهم وهام أحد أنواع مشكلات التعلم الآلي القابلة للتطبيق على نطاق واسع والتي ستتعرف عليها أكثر في هذا الدرس التطبيقي حول البرمجة

ما ستتعلمه

  • جمع البيانات التحليلية عبر تحليلات Firebase
  • معالجة البيانات التحليلية مسبقًا باستخدام BigQuery
  • تدريب نموذج ML بسيط لتحسين عمليات الشراء داخل التطبيق (IAPs) على الجهاز
  • انشر نماذج TFLite على Firebase ML وقم بالوصول إليها من تطبيقك
  • قم بالقياس والتجربة باستخدام نماذج مختلفة من خلال اختبار Firebase A/B
  • تدريب ونشر نماذج جديدة باستخدام أحدث البيانات بإيقاع متكرر

ماذا ستحتاج

  • أندرويد ستوديو الإصدار 3.4+
  • جهاز اختبار فعلي يعمل بنظام Android 2.3+ وخدمات Google Play 9.8 أو أحدث، أو محاكي مع خدمات Google Play 9.8 أو أحدث
  • في حالة استخدام جهاز اختبار فعلي، كابل اتصال
  • معرفة مبتدئة بتعلم الآلة

كيف ستستخدم هذا البرنامج التعليمي؟

اقرأها من خلال فقط اقرأها وأكمل التمارين

كيف تقيم تجربتك في إنشاء تطبيقات Android؟

مبتدئ متوسط بارع

2. بيان المشكلة

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

3. احصل على نموذج التعليمات البرمجية

استنساخ مستودع GitHub من سطر الأوامر.

git clone https://github.com/googlecodelabs/firebase-iap-optimization.git

يحتوي هذا الريبو على:

  1. دفتر Jupyter (.ipynb) الذي يقوم بتدريب نموذج التخصيص وتجميعه في نموذج TFLite
  2. نموذج لتطبيق Kotlin يستخدم نموذج TFLite لإجراء تنبؤات على الجهاز

4. قم بتشغيل التطبيق باستخدام Firebase

في هذا الدرس التطبيقي حول البرمجة، سنعمل على تحسين IAPs لتطبيق لعبتنا الخيالية - Flappy Sparky . اللعبة عبارة عن لعبة تمرير جانبي حيث يتحكم اللاعب في سباركي، ويحاول الطيران بين أعمدة الجدران دون الاصطدام بها. في بداية المستوى، يتم تقديم عرض IAP للمستخدم والذي سيمنحه تعزيزًا للطاقة. سنقوم فقط بتنفيذ جزء تحسين الشراء داخل التطبيق (IAP) من التطبيق في هذا الدرس التطبيقي حول التعليمات البرمجية.

ستتمكن من تطبيق ما تعلمته هنا على تطبيقك المتصل بمشروع Firebase. وبدلاً من ذلك، يمكنك إنشاء مشروع Firebase جديد لهذا الدرس التطبيقي حول التعليمات البرمجية. إذا كنت بحاجة إلى مساعدة في بدء استخدام Firebase، فيرجى الاطلاع على برامجنا التعليمية حول هذا الموضوع ( Android و iOS ).

5. اجمع أحداث التحليلات في تطبيقك

توفر أحداث التحليلات نظرة ثاقبة لسلوك المستخدم، ويتم استخدامها لتدريب نموذج تعلم الآلة. على سبيل المثال، قد يتعلم النموذج أن المستخدمين الذين يلعبون لفترة أطول هم أكثر عرضة لإنشاء IAP للحصول على حياة إضافية. يحتاج نموذج ML إلى أحداث تحليلية كمدخلات للتعرف على هذه المعلومات.

تتضمن بعض أحداث التحليلات التي قد نرغب في تسجيلها ما يلي:

  • كم من الوقت يلعب المستخدم اللعبة
  • ما هو المستوى الذي يصل إليه المستخدم
  • كم عدد العملات التي ينفقها المستخدم
  • العناصر التي يشتريها المستخدم

تنزيل بيانات العينة (اختياري)

في الخطوات التالية، سنستخدم Firebase Analytics لتسجيل أحداث التحليلات لاستخدامها في نموذجنا. إذا كانت لديك بالفعل بيانات تحليلية ترغب في استخدامها، فانتقل إلى قسم "تدريب نموذج التحسين" في هذا الدرس التطبيقي حول التعليمات البرمجية ويمكنك المتابعة مع نماذج البيانات الخاصة بنا.

اجمع البيانات باستخدام Firebase Analytics SDK

سوف نستخدم Firebase Analytics للمساعدة في جمع أحداث التحليلات هذه. تلتقط حزمة Firebase Analytics SDK تلقائيًا عددًا من الأحداث وخصائص المستخدمين. كما يسمح لك بتحديد الأحداث المخصصة الخاصة بك لقياس الأحداث الفريدة لتطبيقك.

تثبيت Firebase Analytics SDK

يمكنك البدء باستخدام Firebase Analytics في تطبيقك من خلال اتباع وثائق البدء باستخدام Google Analytics. يتضمن مستودع firebase-iap-optimization الذي تم استنساخه في بداية هذا الدرس التطبيقي حول التعليمات البرمجية، بالفعل حزمة Firebase Analytics SDK.

تسجيل الأحداث المخصصة

بعد إعداد Firebase Analytics SDK، يمكننا البدء في تسجيل الأحداث التي نحتاجها لتدريب نموذجنا.

قبل أن نفعل ذلك، من المهم تعيين معرف مستخدم في حدث التحليلات، حتى نتمكن من ربط بيانات التحليلات لهذا المستخدم ببياناته الحالية في التطبيق.

MainActivity.kt

firebaseAnalytics.setUserId("player1")

بعد ذلك يمكننا تسجيل أحداث اللاعب. لتحسين الشراء داخل التطبيق، نريد تسجيل كل عرض داخل التطبيق يتم تقديمه للمستخدم وما إذا كان المستخدم قد نقر على هذا العرض أم لا. سيوفر لنا هذا حدثين للتحليلات - offer_iap و offer_accepted . سنقوم أيضًا بتتبع معرف العرض الفريد حتى نتمكن من استخدامه لاحقًا لدمج هذه البيانات لمعرفة ما إذا تم قبول العرض أم لا.

MainActivity.kt

predictButton?.setOnClickListener {
  predictionResult = iapOptimizer.predict()

  firebaseAnalytics.logEvent("offer_iap"){
    param("offer_type", predictionResult)
    param("offer_id", sessionId)
  }
}

acceptButton?.setOnClickListener {
  firebaseAnalytics.logEvent("offer_accepted") {
    param("offer_type", predictionResult)
    param("offer_id", sessionId)
  }
}

لمزيد من المعلومات حول تسجيل الأحداث المخصصة، تفضل بزيارة وثائق سجل أحداث Firebase Analytics .

6. معالجة البيانات مسبقًا في BigQuery

في الخطوة الأخيرة، قمنا بجمع الأحداث حول أي عرض IAP يتم تقديمه للمستخدم وأي عرض IAP ينقر عليه المستخدم. في هذه الخطوة، سنقوم بدمج بيانات هذا الحدث مع بيانات المستخدم حتى يتمكن نموذجنا من التعلم من الصورة الكاملة.

للقيام بذلك، سنحتاج إلى البدء بتصدير أحداث التحليلات إلى BigQuery.

لربط مشروع Firebase وتطبيقاته بـ BigQuery:

  1. قم بتسجيل الدخول إلى Firebase.
  2. انقر the Settings icon ، ثم حدد إعدادات المشروع.
  3. في صفحة إعدادات المشروع، انقر فوق علامة التبويب عمليات التكامل.
  4. في بطاقة BigQuery، انقر فوق Link.

(اختياري) قم بتصدير مجموعات Firestore إلى BigQuery

في هذه الخطوة، لديك خيار تصدير بيانات المستخدم الإضافية من Firestore إلى BigQuery لاستخدامها للمساعدة في تدريب النموذج. إذا كنت ترغب في تخطي هذه الخطوة في الوقت الحالي، فانتقل إلى قسم "تحضير البيانات في BigQuery" في هذا الدرس التطبيقي حول التعليمات البرمجية ويمكنك متابعة أحداث Firebase Analytics التي تم تسجيلها في الخطوة الأخيرة.

قد يكون Firestore هو المكان الذي قمت فيه بتخزين تاريخ تسجيل المستخدمين، أو عمليات الشراء داخل التطبيق، أو المستويات في اللعبة، أو العملات المعدنية في الرصيد، أو أي سمات أخرى قد تكون مفيدة في تدريب النموذج.

لتصدير مجموعات Firestore الخاصة بك إلى BigQuery، يمكنك تثبيت Firestore BigQuery Export Extension . بعد ذلك، قم بضم الجداول في BigQuery لدمج هذه البيانات مع البيانات من Google Analytics لاستخدامها في نموذج التخصيص الخاص بك وفي بقية هذا الدرس التطبيقي حول الترميز.

تحضير البيانات في BigQuery

في الخطوات القليلة التالية، سنستخدم BigQuery لتحويل بيانات التحليلات الأولية لدينا إلى بيانات قابلة للاستخدام لتدريب نموذجنا.

لكي يتعرف نموذجنا على عرض IAP الذي سيتم تقديمه بناءً على المستخدم وحالة اللعبة، نحتاج إلى تنظيم البيانات حول ما يلي:

  • المستخدم
  • حالة اللعبة
  • العرض المقدم
  • سواء تم النقر على العرض المقدم أم لا

يجب تنظيم كل هذه البيانات في صف واحد في جدول حتى يتمكن نموذجنا من معالجتها. ولحسن الحظ، تم إعداد BigQuery لمساعدتنا في القيام بذلك.

يسمح BigQuery بإنشاء "عروض" للحفاظ على تنظيم استعلامك. العرض عبارة عن جدول افتراضي محدد بواسطة استعلام SQL. عندما تقوم بإنشاء طريقة عرض، يمكنك الاستعلام عنها بنفس الطريقة التي تقوم بها بالاستعلام عن جدول. باستخدام هذا يمكننا أولاً تنظيف بيانات التحليلات الخاصة بنا.

لمعرفة ما إذا تم النقر على كل عرض شراء داخل التطبيق، سنحتاج إلى الانضمام إلى أحداث offer_iap و offer_accepted التي قمنا بتسجيلها في الخطوة السابقة.

all_offers_joined - عرض BigQuery

SELECT
  iap_offers.*,
  CASE
    WHEN accepted_offers.accepted IS NULL THEN FALSE ELSE TRUE
  END
  is_clicked,
FROM
  `iap-optimization.ml_sample.accepted_offers` AS accepted_offers
RIGHT JOIN
  `iap-optimization.ml_sample.iap_offers` AS iap_offers
ON
 accepted_offers.offer_id =iap_offers.offer_id;

all_offers_with_user_data - عرض BigQuery

SELECT
  offers.is_clicked,
  offers.presented_powerup,
  offers.last_run_end_reason,
  offers.event_timestamp,
  users.*
FROM
  `iap-optimization.ml_sample.all_offers_joined` AS offers
LEFT JOIN
  `iap-optimization.ml_sample.all_users` AS users
ON
  users.user_id = offers.user_id;

تصدير مجموعة بيانات BigQuery إلى Google Cloud Storage

وأخيرًا، يمكننا تصدير مجموعة بيانات BigQuery إلى GCS حتى نتمكن من استخدامها في تدريبنا النموذجي.

888daa7ba4db8e44.png

14d22bf474fae455.png

7. تدريب نموذج التحسين

بيانات العينة

استخدم إما بياناتك من الخطوة السابقة، "بيانات المعالجة المسبقة في BigQuery"، أو نماذج البيانات القابلة للتنزيل المقدمة هنا للمتابعة مع بقية هذا الدرس التطبيقي حول الترميز.

تعريف المشكلة

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

وأوضح قطاع الطرق السياقية

في بداية كل مستوى في Flappy Sparky، يتم تقديم عرض IAP للمستخدم والذي سيمنحه تعزيزًا للطاقة. يمكننا عرض خيار واحد فقط من خيارات الشراء داخل التطبيق (IAP) في كل مرة، ولا نعرف أي منها سيحصل على أفضل تحويل. نظرًا لاختلاف كل مستخدم وكل جلسة، كيف يمكننا العثور على عرض الشراء داخل التطبيق (IAP) الذي يمنح أعلى مكافأة متوقعة؟

في هذه الحالة، لنجعل المكافأة 0 إذا لم يقبل المستخدم عرض الشراء داخل التطبيق، وقيمة الشراء داخل التطبيق إذا فعل ذلك. لمحاولة تعظيم مكافأتك، يمكننا استخدام بياناتنا التاريخية لتدريب نموذج يتنبأ بالمكافأة المتوقعة لكل إجراء يقدمه المستخدم، والعثور على الإجراء الذي حصل على أعلى مكافأة.

e7d3264141498bff.jpeg

وفيما يلي ما سوف نستخدمه في التنبؤ:

  • الحالة: معلومات حول المستخدم وجلسته الحالية
  • الإجراء: عروض IAP التي يمكننا اختيار عرضها
  • المكافأة: قيمة عرض IAP

الاستغلال مقابل الاستكشاف

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

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

تدريب النموذج

يمكنك استخدام البرنامج النصي التدريبي ( training.ipynb ) المتوفر مع Codelab للبدء. هدفنا هو تدريب نموذج يتنبأ بالمكافآت المتوقعة لكل إجراء في حالة معينة، ثم نجد الإجراء الذي يمنحنا أعلى المكافآت المتوقعة.

التدريب محليا

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

لا تحتاج إلى وحدة معالجة رسومات (GPU) لهذا الدرس التطبيقي حول التعليمات البرمجية، ولكن إذا كنت بحاجة إلى جهاز أكثر قوة لاستكشاف بياناتك الخاصة وتدريب النموذج الخاص بك، فيمكنك الحصول على مثيل AI Platform Notebook لتسريع تدريبك.

في البرنامج النصي للتدريب المقدم، أنشأنا مكررًا يقوم بإنشاء بيانات التدريب من ملفات CSV التي قمنا بتصديرها من BigQuery. ثم استخدمنا البيانات لبدء تدريب نموذجنا باستخدام Keras. يمكن العثور على تفاصيل حول كيفية تدريب النموذج في تعليقات دفتر Python.

قياس أداء النموذج

أثناء تدريب النموذج، سنقارنه بعامل عشوائي يختار عروض IAP بشكل عشوائي لمعرفة ما إذا كان نموذجنا يتعلم بالفعل. يوجد هذا المنطق ضمن ValidationCallback .

في نهاية التدريب، نستخدم البيانات الموجودة في test.csv لاختبار نموذجنا مرة أخرى. لم يشاهد النموذج هذه البيانات من قبل، لذلك يمكننا أن نكون واثقين من أن النتيجة ليست بسبب التجهيز الزائد . في هذه الحالة، يكون أداء النموذج أفضل بنسبة 28% من الوكيل العشوائي.

تصدير نموذج TFLite

الآن لدينا نموذج مدرب جاهز للاستخدام، إلا أنه موجود حاليًا بتنسيق TensorFlow. سنحتاج إلى تصدير النموذج بتنسيق TFLite حتى يمكن تشغيله على الأجهزة المحمولة.

Train.ipynb

converter = tflite.TFLiteConverter.from_keras_model(model)
tflite_model = converter.convert()

with tf.io.gfile.GFile('iap-optimizer.tflite', 'wb') as f:
  f.write(tflite_model)

من هنا، يمكنك تنزيل النموذج وتجميعه مع تطبيقك.

اختياريًا، بالنسبة لتطبيق الإنتاج، نوصي بنشر النموذج على Firebase ML وجعل Firebase يستضيف نموذجك. وهذا مفيد لسببين رئيسيين:

  1. يمكننا الحفاظ على حجم تثبيت التطبيق صغيرًا وتنزيل النموذج فقط إذا لزم الأمر
  2. يمكن تحديث النموذج بانتظام وبدورة إصدار مختلفة عن التطبيق بأكمله

للتعرف على كيفية نشر النموذج في Firebase ML، يمكنك اتباع الدرس التطبيقي حول إضافة Firebase إلى تطبيق Android الذي يعمل بنظام TFLite . لديك خيار النشر باستخدام وحدة تحكم Firebase أو واجهة برمجة تطبيقات Python.

8. إجراء التنبؤات على الجهاز

والخطوة التالية هي إجراء تنبؤات باستخدام النموذج الموجود على الجهاز. يمكنك العثور على تطبيق نموذجي يقوم بتنزيل نموذج من Firebase ML في مجلد app الخاص بنموذج التعليمات البرمجية الذي قمت بتنزيله، واستخدامه لإجراء الاستدلال مع بعض البيانات من جانب العميل.

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

بعد ذلك، نعطي النموذج مدخلات اختبارية على النحو التالي:

IapOptimzer.kt

  val testInput = mapOf(
    "coins_spent" to                       2048f,
    "distance_avg" to                      1234f,
    "device_os" to                         "ANDROID",
    "game_day" to                          10f,
    "geo_country" to                       "Canada",
    "last_run_end_reason" to               "laser"
  )

يشير النموذج إلى أن sparky_armor هو أفضل تعزيز للطاقة في IAP لهذا المستخدم تحديدًا.

a3381dbcdbdf811e.png

قياس دقة النموذج

لقياس دقة نموذجنا، يمكننا ببساطة تتبع عروض الشراء داخل التطبيق (IAP) التي تنبأ بها نموذجنا وما إذا كان قد تم النقر عليها باستخدام Firebase Analytics. يمكنك استخدام هذا مع اختبار Firebase A/B لقياس الأداء الفعلي للنموذج. ولأخذ خطوة أبعد، يمكنك أيضًا إجراء اختبارات A/B على تكرارات مختلفة للنموذج. يمكنك معرفة المزيد حول اختبار A/B باستخدام Firebase في وثائق إنشاء تجارب Firebase Remote Config باستخدام اختبار A/B .

9. (اختياري): تحديث النموذج بانتظام بالبيانات الجديدة

إذا كنت بحاجة إلى تحديث النموذج الخاص بك عند ورود بيانات جديدة، فيمكنك إعداد مسار لإعادة تدريب النموذج الخاص بك على أساس متكرر. للقيام بذلك، عليك التأكد أولاً من أن لديك بيانات جديدة لاستخدامها في التدريب باستخدام استراتيجية epsilon-greedy التي ذكرناها أعلاه. (على سبيل المثال استخدام نتيجة توقع النموذج 70% من الوقت واستخدام النتائج العشوائية 30% من الوقت).

يعد تكوين المسار للتدريب والنشر باستخدام البيانات الجديدة خارج نطاق هذا الدرس التطبيقي حول التعليمات البرمجية، ويمكنك الاطلاع على Google Cloud AI Platform و TFX للبدء.

10. تهانينا!

في هذا الدرس التطبيقي حول التعليمات البرمجية، تعلمت كيفية تدريب نموذج TFLite على الجهاز ونشره لتحسين عمليات الشراء داخل التطبيق باستخدام Firebase. لمعرفة المزيد حول TFLite وFirebase، قم بإلقاء نظرة على نماذج TFLite الأخرى وأدلة بدء استخدام Firebase.

إذا كانت لديك أي أسئلة، يمكنك تركها على Stack Overflow #firebase-machine-learning .

ما قمنا بتغطيته

  • TensorFlow لايت
  • فايربيس مل
  • تحليلات Firebase
  • BigQuery

الخطوات التالية

  • تدريب ونشر نموذج محسن لتطبيقك.

يتعلم أكثر