حساب مجموعات الإيرادات لمخطط قيمة تحويل شبكة SKAd

1 المقدمة

بعض السياق قبل أن نبدأ

إذا كنت أحد مطوري تطبيقات iOS، فمن المؤكد أنك سمعت عن تحديثات الخصوصية لنظام التشغيل iOS 14.5+ . لقياس إجراءات التحويل ذات المغزى بعد التثبيت، توفر Apple واجهة SKAd Network API التي تسمح لك بقياس نجاح حملاتك الإعلانية مع احترام خصوصية المستخدم. استنادًا إلى احتياجات عملك، يمكنك التوصل إلى الطريقة الأمثل للاستفادة من شبكة SKAd للحصول على رؤى مفيدة حول حملاتك. في هذا الدرس التطبيقي حول الترميز، نفحص نموذجًا لمنهجية للاستفادة من بيانات GA4F في BigQuery لتجميع تثبيت تطبيق ما بعد الأرباح في مجموعات، والتي يمكنك استخدامها بعد ذلك للإعداد مع شريك إحالة التطبيق الخاص بك. بينما يستخدم هذا الدرس التطبيقي للبرمجة منهجًا قائمًا على الإيرادات، يمكنك أيضًا استخدام مناهج تعتمد على الأحداث أو مسارات التحويل لقياس SKAN. يرجى الرجوع إلى مركز المساعدة هذا للحصول على إرشادات أكثر تفصيلاً. هذا مجرد مثال، وليس توصية رسمية من Google . يمكنك تصميم المخطط الخاص بك بناءً على احتياجات عملك المحددة

ما نعتزم تغطيته

  • استكشف بيانات GA4F في BigQuery
  • ابحث عن بيانات الإيرادات للمستخدمين الذين أجروا تحويلات في غضون 0-2 يوم
  • تجميع بيانات الإيرادات في مجموعات
  • فهم توزيع المستخدم في كل مجموعة
  • قم بتنفيذ المجموعات في Appsflyer SKAN Conversion Studio

المتطلبات المسبقة

2. الوصول إلى BigQuery Export

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

1aa4e20bfd3419d1.png

تشغيل بعض الاستعلامات

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

لكي تبدأ في كتابة استفسارك، يمكنك النقر على استعلام > في علامة تبويب جديدة

42ba59ec655c5d1b.png

يمكنك بعد ذلك محاولة تشغيل نموذج الاستعلام في علامة التبويب الجديدة

70ef90d32b7cd7f1.png

3. تحليل بيانات الإيرادات

جارٍ جلب بيانات التثبيت

الآن، من أجل البدء في إنشاء مجموعات الإيرادات، علينا أولاً أن نلقي نظرة على بيانات المستخدمين الذين قاموا بتثبيت التطبيق خلال آخر 24 إلى 72 ساعة. يتيح لك SKAd Network 4.0 عرض البيانات خلال 0-2 يوم، بينما يسمح لك SKAd Network 3.5 بـ 24 ساعة بشكل افتراضي. (اعتمادًا على إمكانيات شريك إحالة التطبيق لديك، قد تتمكن من تعديل نافذة النشاط هذه بشكل عام بحيث لا تزيد عن 72 ساعة). عندما يقوم المستخدمون بتثبيت التطبيق وفتحه لأول مرة، يتم تشغيل الحدث first_open بواسطة SDK ويتم تسجيله في BigQuery.

المعرف الذي يمكنك استخدامه لـ BigQuery هو user_pseudo_id (ويسمى أيضًا معرف مثيل التطبيق)، لذا يمكنك استخدام الاستعلام أدناه للعثور على هؤلاء المستخدمين

SELECT
  user_pseudo_id,
  event_name,
  event_date,
  event_timestamp
FROM `project_name.dataset_name.events_2023*`
WHERE
  event_name = 'first_open'
  AND platform = 'IOS'

بضعة أشياء يجب ملاحظتها حول هذا الاستعلام

  • يُرجى استبدال اسم الجدول بجدول Analytics الذي تم تصديره. يمكنك استخدام أحرف البدل للاستعلام عن جداول يومية متعددة. على سبيل المثال، 2023* سيتم الاستعلام عبر جميع البيانات في 2023
  • إذا كان لديك الكثير من المستخدمين، فيمكنك أيضًا الاستعلام عن آخر 30 يومًا فقط للمعالجة بشكل أسرع
  • نقوم بالتصفية على النظام الأساسي = "IOS". في حالة وجود تطبيقات iOS متعددة في مشروع Firebase الخاص بك، يمكنك أيضًا إضافة عامل تصفية لـ app_info.firebase_app_id للحصول على بيانات التطبيق المحدد

جارٍ جلب بيانات الإيرادات

والآن، دعونا نلقي نظرة على استعلام للعثور على الإيرادات للمستخدمين. في هذه الحالة، نفترض أن أحداث الإيرادات هي in_app_purchase وad_impression. تتوفر الإيرادات من in_app_purchase في events_value_usd، بينما بالنسبة إلى ad_impression، تكون الإيرادات متاحة في معلمة القيمة، ضمن معلمات الحدث. إذا لم تكن على دراية بمعلمات الأحداث في BigQuery، فنوصيك بالتحقق من التعريف هنا ، ويمكنك تجربة نموذج الاستعلام هذا في مرجعنا الرسمي، والذي يغطي أيضًا استخراج القيمة من events_params

SELECT
  user_pseudo_id,
  event_name,
  EXTRACT(date FROM Parse_datetime('%Y%m%d', event_date)) AS event_date,
  (
    SELECT COALESCE(value.int_value, value.float_value, value.double_value, NULL)
    FROM UNNEST(event_params)
    WHERE
      KEY = 'value'
      AND event_name = 'ad_impression'
  ) AS ad_funded_revenue,
  (
    SELECT value.string_value
    FROM UNNEST(event_params)
    WHERE
      KEY = 'currency'
      AND event_name = 'ad_impression'
  ) AS ad_revenue_currency,
  (
    CASE
      WHEN event_name = 'in_app_purchase' THEN event_value_in_usd
      ELSE 0
      END) AS iap_revenue_usd,
FROM `project_name.dataset_name.events_2023*`
WHERE
  platform = 'IOS'
  AND event_name IN (
    'in_app_purchase',
    'ad_impression')

دعونا نفهم ما يفعله الاستعلام هنا. هذه هي الأشياء التي ستلاحظها

  • في جملة WHERE، نقوم بتصفية أحداث الإيرادات، نظرًا لأننا مهتمون بها فقط، وكما حدث في المرة السابقة، فإننا نبحث عن بيانات iOS
  • الآن، في جملة SELECT، نحن نأخذ القيمة وكذلك العملة لحدث إيرادات الإعلان (ad_impression)، ونأخذ Event_value_in_usd عندما يكون الحدث in_app_purchase
  • إذا كنت ترسل عملات متعددة، فيجب عليك أولاً التوافق مع عملة واحدة لهذا التحليل. ولأغراض هذا المثال، سنفترض أن عملة الإيرادات الممولة بالإعلانات هي أيضًا الدولار الأمريكي

ستكون النتيجة كما يلي (تم تنقيح العمود الخاص بـ user_pseudo_id هنا).

1e1e6943e4b3a6d8.png

الجمع بين هذه البيانات

حتى الآن، أجرينا استعلامين، أحدهما للعثور على بيانات المستخدمين الذين قاموا بتثبيت التطبيق وفتحه، والآخر للعثور على الإيرادات لهؤلاء المستخدمين. الآن، دعونا نتذكر ما ناقشناه حول قيود شبكة SKAd. لا يمكن أن تكون نافذة الإسناد متاحة إلا خلال 0-2 يوم بعد التثبيت. وبالتالي، سنحتاج إلى التحقق من الطوابع الزمنية للحدث فيما يتعلق بالتثبيت والإيرادات، وأخذ المعلومات فقط، إذا حدث ذلك خلال هذا الإطار الزمني. فلنحاول الآن دمجها في استعلام يوفر إجمالي الإيرادات لكل مشاركة لمدة يومين من تثبيت التطبيق

#creating the install table
WITH
  install_table AS (
    SELECT
      user_pseudo_id,
      event_name,
      event_date,
      event_timestamp
    FROM `project_name.dataset_name.events_2023*`
    WHERE
      event_name = 'first_open'
      AND platform = 'IOS'
  ),
  #creating the revenue table
  revenue_table AS (
    SELECT
      user_pseudo_id,
      event_name,
      event_timestamp,
      EXTRACT(date FROM Parse_datetime('%Y%m%d', event_date)) AS event_date,
      (
        SELECT COALESCE(value.int_value, value.float_value, value.double_value, NULL)
        FROM UNNEST(event_params)
        WHERE
          KEY = 'value'
          AND event_name = 'ad_impression'
      ) AS ad_funded_revenue,
      (
        SELECT value.string_value
        FROM UNNEST(event_params)
        WHERE
          KEY = 'currency'
          AND event_name = 'ad_impression'
      ) AS ad_revenue_currency,
      (
        CASE
          WHEN event_name = 'in_app_purchase' THEN event_value_in_usd
          ELSE 0
          END) AS iap_revenue_usd,
    FROM `project_name.dataset_name.events_2023*`
    WHERE
      platform = 'IOS'
      AND event_name IN (
        'in_app_purchase',
        'ad_impression')
  )
SELECT
  it.user_pseudo_id AS user_pseudo_id,
  #combine ad revenue and IAP revenue, assuming both are in same currency
  sum(ifnull(rt.iap_revenue_usd,0) + ifnull(rt.ad_funded_revenue,0)) AS total_revenue,
FROM install_table it
INNER JOIN revenue_table rt
  ON it.user_pseudo_id = rt.user_pseudo_id
WHERE
  rt.event_timestamp >= it.event_timestamp
  AND rt.event_timestamp
    <= it.event_timestamp + 86400000000 * 2  #added 86400 000 millisecond as 24 hours, taking for 2 days later
GROUP BY 1

يحاول الاستعلام فقط ضم بيانات التثبيت وبيانات الإيرادات في حقل user_pseudo_id، ثم يتعين علينا التأكد من أن الطابع الزمني موجود في غضون يومين. إذا كنت تستخدم SKAd Network 3.5، فإن الإعداد الافتراضي هو 24 ساعة، لذا يمكنك أيضًا تغيير الشرط ليشمل بيانات يوم واحد فقط

تجميع الإيرادات في مجموعات

بعد الاستعلام السابق، سيكون لديك user_pseudo_id وإجمالي الإيرادات

2c1986b93e937d19.png

سنحتاج الآن إلى دمج هذا في مجموعات يمكننا استخدامها لنطاقات قيمة التحويل لدينا. ولهذا الغرض، سنستخدم الدالة approx_qutiles في BigQuery، والتي تقوم تلقائيًا بإنشاء هذه النطاقات لك. لنفترض لأغراض هذا المثال أننا نريد إنشاء 5 نطاقات، لذا يمكننا فقط استخدام مجموعات SELECT approx_qutiles(total_revenue, 5) AS

مع ذلك، دعونا ندمج هذا في استعلامنا العام

#creating the install table
WITH
  install_table AS (
    SELECT
      user_pseudo_id,
      event_name,
      event_date,
      event_timestamp
    FROM `project_name.dataset_name.events_2023*`
    WHERE
      event_name = 'first_open'
      AND platform = 'IOS'
  ),
  #creating the revenue table
  revenue_table AS (
    SELECT
      user_pseudo_id,
      event_name,
      event_timestamp,
      EXTRACT(date FROM Parse_datetime('%Y%m%d', event_date)) AS event_date,
      (
        SELECT COALESCE(value.int_value, value.float_value, value.double_value, NULL)
        FROM UNNEST(event_params)
        WHERE
          KEY = 'value'
          AND event_name = 'ad_impression'
      ) AS ad_funded_revenue,
      (
        SELECT value.string_value
        FROM UNNEST(event_params)
        WHERE
          KEY = 'currency'
          AND event_name = 'ad_impression'
      ) AS ad_revenue_currency,
      (
        CASE
          WHEN event_name = 'in_app_purchase' THEN event_value_in_usd
          ELSE 0
          END) AS iap_revenue_usd,
    FROM `project_name.dataset_name.events_2023*`
    WHERE
      platform = 'IOS'
      AND event_name IN (
        'in_app_purchase',
        'ad_impression')
  ),
  total_revenue_table AS (
    SELECT
      it.user_pseudo_id AS user_pseudo_id,
      #combine ad revenue and IAP revenue, assuming both are in same currency
      sum(ifnull(rt.iap_revenue_usd,0) + ifnull(rt.ad_funded_revenue,0)) AS total_revenue,
    FROM install_table it
    INNER JOIN revenue_table rt
      ON it.user_pseudo_id = rt.user_pseudo_id
    WHERE
      rt.event_timestamp >= it.event_timestamp
      AND rt.event_timestamp
        <= it.event_timestamp + 86400000000 * 2  #added 86400 000 millisecond as 24 hours
    GROUP BY 1
  )
SELECT approx_quantiles(total_revenue, 5) AS buckets FROM total_revenue_table

يجب أن يقسم هذا الاستعلام الإيرادات إلى 5 مجموعات ويحاول BigQuery الحفاظ على توزيع مئوي ثابت

ba46f5d993449948.png

تحليل توزيع المستخدم باستخدام هذه المجموعات

هذه خطوة اختيارية ، إذا كنت ترغب في فهم توزيع المستخدمين في كل مجموعة. على سبيل المثال، نطاقات المجموعة التي تم إرجاعها في الاستعلام السابق هي

  • 0.1
  • 0.5
  • 2
  • 2.5
  • 5 [لا يجوز استخدام القيمة الأخيرة في تكوين النطاق]

بالنسبة للنطاقات النهائية، يجب أن نتجاهل المجموعة الأخيرة 5، حيث أن هذه هي القيمة القصوى بشكل عام، ويمكننا اعتبار 2.5 فقط النطاق الأخير. وذلك لأن موفري إحالة التطبيقات يميلون إلى حساب عائد النفقات الإعلانية باستخدام متوسط ​​النطاق، لذلك يجب استبعاد القيمة المتطرفة لإجراء حساب أكثر اتساقًا.

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

#creating the install table
WITH
  install_table AS (
    SELECT
      user_pseudo_id,
      event_name,
      event_date,
      event_timestamp
    FROM `project_name.dataset_name.events_2023*`
    WHERE
      event_name = 'first_open'
      AND platform = 'IOS'
  ),
  #creating the revenue table
  revenue_table AS (
    SELECT
      user_pseudo_id,
      event_name,
      event_timestamp,
      EXTRACT(date FROM Parse_datetime('%Y%m%d', event_date)) AS event_date,
      (
        SELECT COALESCE(value.int_value, value.float_value, value.double_value, NULL)
        FROM UNNEST(event_params)
        WHERE
          KEY = 'value'
          AND event_name = 'ad_impression'
      ) AS ad_funded_revenue,
      (
        SELECT value.string_value
        FROM UNNEST(event_params)
        WHERE
          KEY = 'currency'
          AND event_name = 'ad_impression'
      ) AS ad_revenue_currency,
      (
        CASE
          WHEN event_name = 'in_app_purchase' THEN event_value_in_usd
          ELSE 0
          END) AS iap_revenue_usd,
    FROM `project_name.dataset_name.events_2023*`
    WHERE
      platform = 'IOS'
      AND event_name IN (
        'in_app_purchase',
        'ad_impression')
  ),
  total_revenue_table AS (
    SELECT
      it.user_pseudo_id AS user_pseudo_id,
      rt.event_date,
      #combine ad revenue and IAP revenue, assuming both are in same currency
      sum(ifnull(rt.iap_revenue_usd,0) + ifnull(rt.ad_funded_revenue,0)) AS total_revenue,
    FROM install_table it
    INNER JOIN revenue_table rt
      ON it.user_pseudo_id = rt.user_pseudo_id
    WHERE
      rt.event_timestamp >= it.event_timestamp
      AND rt.event_timestamp
        <= it.event_timestamp + 86400000000 * 2  #added 86400 000 millisecond as 24 hours
    GROUP BY 1, 2
  )
SELECT
  event_date,
  sum(CASE WHEN total_revenue BETWEEN 0 AND 0.1 THEN 1 ELSE 0 END) AS Bucket1,
  sum(CASE WHEN total_revenue BETWEEN 0.1 AND 0.5 THEN 1 ELSE 0 END) AS Bucket2,
  sum(CASE WHEN total_revenue BETWEEN 0.5 AND 2 THEN 1 ELSE 0 END) AS Bucket3,
  sum(CASE WHEN total_revenue BETWEEN 2 AND 2.5 THEN 1 ELSE 0 END) AS Bucket4,
  sum(CASE WHEN total_revenue > 2.5 THEN 1 ELSE 0 END) AS Bucket5
FROM total_revenue_table
GROUP BY 1 ORDER BY 1 DESC

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

bf7d73085fe94cb6.png

كلمة سريعة عن SKAd Network 4.0

توفر SKAd Network 4.0 فترات تحويل متعددة تصل إلى يومين، و3-7 أيام، و8-35 يومًا. في الطريقة المذكورة أعلاه، يمكنك بسهولة تغيير النافذة لتحليل البيانات لهذه السيناريوهات الإضافية أيضًا. تتوفر أيضًا قيم الحبيبات الخشنة المنخفضة والمتوسطة والعالية. مرة أخرى، إذا كنت تريد استخدام هذا الأسلوب، فيمكنك التفكير في ذلك على أنه 3 مجموعات، لذا، من خلال تغيير عدد المجموعات إلى 3، يمكنك الحصول على الحدود الدنيا للمنخفضة والمتوسطة والعالية

4. النشر مع مزود الإسناد الخاص بك

اعتمادًا على النظام الأساسي المحدد، قد يتغير هذا التوجيه. يرجى العمل مع ممثلي المنصة للحصول على أحدث المعلومات حول هذا الموضوع. ولأغراض هذا المثال، سننظر في كيفية نشر هذا حاليًا على AppsFlyer

في الاستعلام الذي قمنا بتشغيله سابقًا، كانت النطاقات النهائية التي تلقيناها كإخراج كما يلي

ba46f5d993449948.png

  • النطاق 1 : 0 إلى 0.1
  • النطاق 2 : 0.1 إلى 0.5
  • النطاق 3 : 0.5 إلى 2
  • النطاق 4 : 2 إلى 2.5

تذكر أننا قررنا تجاهل نطاق الإيرادات الأخير ، لأنه سيكون قيمة شاذة، وسيؤدي إلى تحريف متوسط ​​الحسابات لموفر إحالة التطبيق الخاص بك.

يقدم AppsFlyer SKAN Conversion Studio ، حيث يكون من السهل جدًا إدخال ذلك مباشرةً في واجهة المستخدم. يمكنك إما استخدام الإصدار 4.0 مباشرةً أو استخدام الوضع "المخصص" إذا كنت تستخدم الإصدار 3.5 وإضافة قياس "الإيرادات". يمكنك بعد ذلك إضافة نطاقات الإيرادات التي حسبتها من التحليل السابق.

f8c56abdf9b405f4.png

أفضل الممارسات والدروس المستفادة في إعلانات Google

نود أن نتركك مع بعض التوصيات إذا كنت تدير حملات على إعلانات Google، وتقيس التأثير من خلال مخطط قيمة التحويل لشبكة SKAd

  • تأكد من أن فترة التحويل التي تستخدمها في إعلانات Google تتطابق مع فترة النشاط التي حددتها على نظام إحالة التطبيقات لديك. بالنسبة إلى شبكة SKAd 3.5، من المحتمل أن يتم ذلك في غضون يوم إلى ثلاثة أيام، لذا يمكنك تعديله وفقًا لذلك في إعلانات Google باتباع الخطوات المذكورة هنا

4fd625aae9d4a43.png

  • إذا كنت تستخدم Appsflyer، فإن عداد الأحداث الافتراضي حاليًا هو 1، مما يعني أنه لا يأخذ في الاعتبار أحداثًا متعددة لكل مستخدم. إذا كنت تستخدم نموذجًا يستند إلى حدث لقياس SKAN ومقارنته بحملات تكلفة الاكتساب المستهدفة على إعلانات Google، فيمكنك اختيار التخصيص باتباع هذه الإرشادات من Appsflyer

6c7a4d703567700a.png

5. تهانينا

تهانينا، لقد نجحت في إعداد مخطط قيمة تحويل شبكة SKAd. يمكنك الآن مراقبة البيانات الموجودة في تقرير شبكة إعلانات Google SKAd للتحقق من قيم التحويل لحملاتك في إعلانات Google بمجرد نشرها

لقد تعلمت

  • كيفية استكشاف البيانات الأولية الغنية من GA4F في BigQuery
  • نهج تحليلي لحساب مجموعات الإيرادات لعملك
  • انشر المخطط باستخدام AppsFlyer