Menghitung Bucket Pendapatan untuk Skema Nilai Konversi Jaringan SKAd

1. Pengantar

Beberapa Konteks Sebelum Kita Mulai

Jika Anda adalah developer Aplikasi iOS, Anda pasti pernah mendengar tentang update privasi iOS 14.5+. Untuk mengukur tindakan konversi yang bermakna setelah penginstalan, Apple menyediakan SKAd Network API yang memungkinkan Anda mengukur keberhasilan kampanye iklan sekaligus menghormati privasi pengguna. Berdasarkan kebutuhan bisnis Anda, Anda dapat menemukan cara paling optimal untuk memanfaatkan SKAdNetwork guna mendapatkan insight yang bermakna tentang kampanye Anda. Dalam codelab ini, kita akan mempelajari contoh metodologi untuk memanfaatkan data GA4F Anda di BigQuery guna mengelompokkan pendapatan setelah penginstalan aplikasi ke dalam bucket, yang kemudian dapat Anda gunakan untuk penyiapan dengan partner atribusi aplikasi Anda. Meskipun codelab ini menggunakan pendekatan berbasis pendapatan, Anda juga dapat menggunakan pendekatan berbasis peristiwa atau funnel untuk pengukuran SKAdNetwork. Harap buka pusat bantuan ini untuk mengetahui panduan selengkapnya. Ini hanyalah contoh, bukan rekomendasi resmi Google. Anda dapat mendesain skema sendiri berdasarkan kebutuhan bisnis spesifik Anda

Yang akan kita bahas

  • Menjelajahi data GA4F di BigQuery
  • Menemukan data pendapatan untuk pengguna yang melakukan konversi dalam waktu 0-2 hari
  • Mengelompokkan data pendapatan ke dalam bucket
  • Memahami distribusi pengguna di setiap bucket
  • Menerapkan bucket di Appsflyer SKAN Conversion Studio

Prasyarat

  • GA4F SDK di Aplikasi iOS Anda, dan semua peristiwa pendapatan yang terintegrasi (in_app_purchase atau pendapatan yang didanai iklan)
  • Ekspor Firebase ke BigQuery diaktifkan
  • Partner Atribusi Aplikasi, yang juga mencatat semua peristiwa pendapatan

2. Mengakses BigQuery Export

Buka set data di GA4F dengan membuka Setelan Project > Integrasi > BigQuery. Tombol harus diaktifkan terlebih dahulu dan setelah diaktifkan, perlu waktu sekitar 48 jam agar set data tersedia. Anda dapat mengklik link yang ditampilkan di bawah dan Anda akan diarahkan ke BigQuery

1aa4e20bfd3419d1.png

Menjalankan beberapa kueri

Setelah berada di BigQuery, Anda akan melihat tabel harian yang dibuat. Pada screenshot contoh di bawah, kita melihat 64 tabel harian, sehingga ekspor telah berjalan selama 64 hari. Jika mengaksesnya untuk pertama kali, Anda mungkin hanya melihat 1 tabel harian untuk data hari sebelumnya. Di sebelah kanan, Anda akan melihat skema tabel. Anda dapat melihat detail selengkapnya tentang kolom di sini

Untuk mulai menulis kueri, Anda dapat mengklik Query > In new tab

42ba59ec655c5d1b.png

Kemudian, Anda dapat mencoba menjalankan kueri contoh di tab baru

70ef90d32b7cd7f1.png

3. Menganalisis data pendapatan

Mengambil data penginstalan

Sekarang, untuk mulai membuat rentang pendapatan, kita harus melihat data pengguna yang menginstal aplikasi dalam 24 hingga 72 jam terakhir. SKAdNetwork 4.0 memungkinkan Anda melihat data dalam 0–2 hari, sedangkan SKAdNetwork 3.5 memungkinkan 24 jam secara default. (Bergantung pada kemampuan Partner Atribusi Aplikasi Anda, Anda mungkin dapat mengubah periode aktivitas ini secara umum menjadi tidak lebih dari 72 jam). Saat pengguna menginstal aplikasi dan membukanya untuk pertama kalinya, peristiwa first_open akan diaktifkan oleh SDK dan dicatat di BigQuery.

ID yang dapat Anda gunakan untuk BigQuery adalah user_pseudo_id (juga disebut ID instance aplikasi), sehingga Anda dapat menggunakan kueri di bawah untuk menemukan pengguna ini

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'

Beberapa hal yang perlu diperhatikan tentang kueri ini

  • Ganti nama tabel dengan tabel yang diekspor dari Analytics. Anda dapat menggunakan karakter pengganti untuk membuat kueri beberapa tabel harian. Misalnya, 2023* akan membuat kueri di semua data pada tahun 2023
  • Jika memiliki banyak pengguna, Anda juga dapat membuat kueri hanya untuk 30 hari terakhir agar pemrosesan lebih cepat
  • Kita memfilter berdasarkan platform = ‘IOS'. Jika memiliki beberapa Aplikasi iOS di project Firebase, Anda juga dapat menambahkan filter untuk app_info.firebase_app_id guna mendapatkan data untuk aplikasi tertentu

Mengambil data pendapatan

Sekarang, mari kita lihat kueri untuk menemukan pendapatan bagi pengguna Anda. Dalam hal ini, kami akan mengasumsikan bahwa peristiwa pendapatan Anda adalah in_app_purchase dan ad_impression. Pendapatan dari in_app_purchase tersedia di event_value_usd, sedangkan untuk ad_impression, pendapatan tersedia di parameter nilai, dalam parameter peristiwa. Jika Anda belum memahami parameter peristiwa di BigQuery, sebaiknya periksa definisi di sini, dan Anda dapat mencoba contoh kueri ini dalam referensi resmi kami, yang juga mencakup cara mengekstrak nilai dari event_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')

Mari kita pahami fungsi kueri di sini. Berikut hal-hal yang akan Anda perhatikan

  • Dalam klausa WHERE, kita memfilter peristiwa pendapatan, karena kita hanya tertarik pada peristiwa tersebut, dan seperti sebelumnya, kita mencari data iOS
  • Sekarang, di klausa SELECT, kita mengambil nilai serta mata uang untuk peristiwa pendapatan iklan (ad_impression), dan kita mengambil event_value_in_usd saat peristiwanya adalah in_app_purchase
  • Jika Anda mengirimkan beberapa mata uang, Anda harus menyelaraskan ke satu mata uang terlebih dahulu untuk analisis ini. Untuk tujuan contoh ini, kita akan mengasumsikan bahwa mata uang untuk pendapatan yang didanai iklan juga adalah USD

Outputnya akan terlihat seperti di bawah ini (kolom untuk user_pseudo_id disamarkan di sini).

1e1e6943e4b3a6d8.png

Menggabungkan data ini

Hingga saat ini, kita telah menjalankan dua kueri, satu untuk menemukan data pengguna yang menginstal dan membuka aplikasi, dan satu lagi untuk menemukan pendapatan pengguna tersebut. Sekarang, mari kita ingat kembali apa yang telah kita bahas tentang batasan SKAd Network. Periode atribusi hanya dapat tersedia dalam 0-2 hari setelah penginstalan. Oleh karena itu, kita perlu memeriksa stempel waktu peristiwa untuk penginstalan dan pendapatan, dan hanya mengambil informasi jika terjadi dalam jangka waktu tersebut. Sekarang, mari kita coba menggabungkan menjadi kueri yang memberikan total pendapatan untuk setiap postingan dua hari setelah penginstalan aplikasi

#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

Kueri hanya mencoba menggabungkan data penginstalan dan data pendapatan di kolom user_pseudo_id, lalu kita harus memastikan bahwa stempel waktunya berada dalam 2 hari. Jika Anda menggunakan SKAdNetwork 3.5, defaultnya adalah 24 jam, jadi Anda juga dapat mengubah kondisi untuk hanya menyertakan data 1 hari

Mengelompokkan pendapatan ke dalam rentang

Setelah kueri sebelumnya, Anda akan memiliki user_pseudo_id dan total pendapatan

2c1986b93e937d19.png

Sekarang kita perlu menggabungkannya ke dalam bucket yang dapat kita gunakan untuk rentang nilai konversi. Untuk tujuan ini, kita akan menggunakan fungsi approx_quantiles di BigQuery, yang secara otomatis membuat rentang ini untuk Anda. Untuk tujuan contoh ini, anggaplah kita ingin membuat 5 rentang, jadi kita cukup menggunakan SELECT approx_quantiles(total_revenue, 5) AS buckets

Dengan demikian, mari kita gabungkan ini ke dalam kueri keseluruhan kita

#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

Kueri ini akan membagi pendapatan menjadi 5 bucket dan BigQuery akan mencoba mempertahankan distribusi persentil yang konsisten

ba46f5d993449948.png

Menganalisis distribusi pengguna dengan bucket ini

Ini adalah langkah opsional, jika Anda ingin memahami distribusi pengguna di setiap bucket. Untuk contoh kita, rentang bucket yang ditampilkan dalam kueri sebelumnya adalah

  • 0,1
  • 0,5
  • 2
  • 2,5
  • 5 [nilai terakhir tidak boleh digunakan dalam konfigurasi rentang]

Untuk rentang akhir, kita akan mengabaikan bucket terakhir 5, karena umumnya merupakan nilai maksimum, dan kita hanya dapat menganggap 2,5 sebagai rentang terakhir. Hal ini karena penyedia atribusi aplikasi cenderung menghitung ROAS menggunakan rata-rata rentang, sehingga pencilan harus dikecualikan agar penghitungan lebih seragam.

Sekarang kita akan mencoba melihat jumlah pengguna untuk setiap tanggal di semua rentang, sehingga kita dapat memahami volume pengguna harian di setiap bucket.Kita dapat melakukannya menggunakan kueri contoh ini, tempat Anda dapat mengganti nilai bucket dengan data sebenarnya, dan kueri akan terlihat seperti ini

#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

Fungsi ini akan menampilkan pengguna dalam setiap rentang pendapatan untuk setiap hari, seperti di bawah. Jika Anda melihat angka yang sangat rendah di bucket mana pun atau distribusi yang umumnya tidak merata, Anda mungkin ingin menyesuaikan jumlah bucket dan menjalankan kembali kueri.

bf7d73085fe94cb6.png

Sekilas tentang SKAdNetwork 4.0

SKAdNetwork 4.0 menyediakan beberapa periode konversi hingga 2 hari, 3-7 hari, dan 8-35 hari. Dengan pendekatan di atas, Anda juga dapat dengan mudah mengubah jendela untuk menganalisis data untuk skenario tambahan ini. Nilai umum RENDAH, SEDANG, dan TINGGI juga tersedia. Sekali lagi, jika ingin menggunakan pendekatan ini, Anda dapat menganggapnya sebagai 3 bucket. Jadi, dengan mengubah jumlah bucket menjadi 3, Anda bisa mendapatkan nilai minimum untuk RENDAH, SEDANG, dan TINGGI

4. Deployment dengan penyedia atribusi Anda

Bergantung pada platform tertentu, panduan ini dapat berubah. Harap hubungi perwakilan platform untuk mendapatkan informasi terbaru terkait hal ini. Untuk tujuan contoh ini, kita akan melihat cara men-deploy-nya di AppsFlyer saat ini

Dalam kueri yang kita jalankan sebelumnya, rentang akhir yang kita terima sebagai output adalah sebagai berikut

ba46f5d993449948.png

  • Rentang 1 : 0 hingga 0,1
  • Rentang 2 : 0,1 hingga 0,5
  • Rentang 3 : 0,5 hingga 2
  • Rentang 4 : 2 hingga 2,5

Ingatlah bahwa kami memutuskan untuk mengabaikan rentang pendapatan terakhir, karena akan menjadi pencilan, dan memiringkan penghitungan rata-rata untuk penyedia atribusi aplikasi Anda.

AppsFlyer menawarkan SKAN Conversion Studio, tempat Anda dapat memasukkan data ini langsung ke UI dengan cukup mudah. Anda dapat menggunakan 4.0 secara langsung atau menggunakan mode "Kustom" jika Anda menggunakan 3.5, dan menambahkan pengukuran "Pendapatan". Kemudian, cukup tambahkan rentang pendapatan yang Anda hitung dari analisis sebelumnya.

f8c56abdf9b405f4.png

Praktik Terbaik dan Pembelajaran di Google Ads

Kami ingin memberikan beberapa rekomendasi jika Anda menjalankan kampanye di Google Ads, dan mengukur dampaknya melalui skema nilai konversi SKAdNetwork

  • Pastikan periode konversi yang Anda gunakan di Google Ads cocok dengan periode aktivitas yang telah Anda tentukan di platform Atribusi Aplikasi. Untuk SKAdNetwork 3.5, hal ini kemungkinan akan terjadi dalam waktu 1-3 hari, sehingga Anda dapat menyesuaikannya di Google Ads dengan mengikuti langkah-langkah yang tercantum di sini

4fd625aae9d4a43.png

  • Jika Anda menggunakan Appsflyer, saat ini penghitung peristiwa default adalah 1, yang berarti tidak memperhitungkan beberapa peristiwa per pengguna. Jika Anda menggunakan model berbasis peristiwa untuk pengukuran SKAN dan membandingkannya dengan kampanye tCPA di Google Ads, Anda dapat memilih untuk menyesuaikannya dengan mengikuti panduan ini dari AppsFlyer

6c7a4d703567700a.png

5. Selamat

Selamat, Anda telah berhasil menyiapkan skema Nilai konversi SKAdNetwork. Anda kini dapat memantau data di laporan SKAdNetwork Google Ads untuk memeriksa nilai konversi kampanye Google Ads setelah laporan ini aktif

Anda telah mempelajari

  • Cara menjelajahi data mentah yang kaya dari GA4F di BigQuery
  • Pendekatan analitis untuk menghitung rentang pendapatan bisnis Anda
  • Men-deploy skema dengan AppsFlyer