Hitung Bucket Pendapatan untuk Skema Nilai Konversi Jaringan SKAd

1. Pengantar

Beberapa Konteks Sebelum Kita Mulai

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

Yang ingin kami bahas

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

Prasyarat

2. Mengakses BigQuery Export

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

1aa4e20bfd3419d1.pngS

Menjalankan beberapa kueri

Sekarang setelah Anda berada di BigQuery, Anda akan melihat tabel harian yang dihasilkan. Pada contoh screenshot di bawah, kita melihat 64 tabel harian, sehingga ekspor telah berjalan selama 64 hari. Jika Anda mengaksesnya untuk pertama kalinya, 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 > Di tab baru

42ba59ec655c5d1b.pngS

Anda kemudian dapat mencoba menjalankan contoh kueri di tab baru

70ef90d32b7cd7f1.pngS

3. Menganalisis data pendapatan

Mengambil data penginstalan

Sekarang, untuk mulai membangun kelompok pendapatan, kita harus terlebih dahulu melihat data pengguna yang menginstal di aplikasi dalam 24 hingga 72 jam terakhir. SKAd Network 4.0 memungkinkan Anda melihat data dalam 0-2 hari, sementara SKAd Network 3.5 memungkinkan 24 jam secara default. (Bergantung pada kemampuan Partner Atribusi Aplikasi, 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 diaktifkan oleh SDK dan dicatat di BigQuery.

ID yang dapat Anda gunakan untuk BigQuery adalah user_pseudo_id (juga disebut ID instance aplikasi), jadi 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 Analytics yang diekspor. Anda dapat menggunakan karakter pengganti untuk membuat kueri beberapa tabel harian. Misalnya, tahun 2023* akan membuat kueri untuk semua data pada tahun 2023
  • Jika memiliki banyak pengguna, Anda juga dapat membuat kueri hanya 30 hari terakhir untuk pemrosesan yang lebih cepat
  • Kami 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 value, dalam parameter peristiwa. Jika Anda belum memahami parameter peristiwa di BigQuery, sebaiknya periksa definisinya di sini, dan Anda dapat mencoba contoh kueri ini dalam referensi resmi kami, yang juga mencakup ekstraksi 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 apa yang dilakukan kuerinya di sini. Berikut adalah beberapa hal yang perlu Anda perhatikan

  • Dalam klausa WHERE, kita memfilter peristiwa pendapatan, karena kita hanya tertarik pada peristiwa tersebut, dan seperti terakhir kali, 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 peristiwa tersebut adalah in_app_purchase
  • Jika Anda mengirim beberapa mata uang, Anda harus terlebih dahulu menyelaraskan satu mata uang untuk analisis ini. Untuk tujuan contoh ini, kita akan mengasumsikan bahwa mata uang untuk pendapatan yang didanai iklan juga USD

Output-nya akan menjadi seperti di bawah ini (kolom untuk user_pseudo_id disamarkan di sini).

1e1e6943e4b3a6d8.pngS

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 bagi pengguna tersebut. Sekarang, mari kita ingat pembahasan kita tentang batasan Jaringan SKAd. Periode atribusi hanya dapat tersedia dalam 0-2 hari setelah penginstalan. Oleh karena itu, kita harus memeriksa stempel waktu peristiwa untuk penginstalan dan pendapatan, serta hanya mengambil informasinya, jika terjadi dalam jangka waktu tersebut. Sekarang mari kita coba menggabungkan menjadi kueri yang memberikan total pendapatan untuk setiap posting dua hari dari 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 tersebut hanya mencoba menggabungkan data penginstalan dan data pendapatan di kolom user_pseudo_id, lalu kita harus memastikan bahwa stempel waktu berada dalam rentang waktu 2 hari. Jika Anda menggunakan Jaringan SKAd 3.5, setelan defaultnya adalah 24 jam, sehingga Anda juga dapat mengubah kondisi agar hanya menyertakan data untuk 1 hari

Mengelompokkan pendapatan ke dalam bucket

Setelah kueri sebelumnya, Anda akan memiliki user_pseudo_id dan total pendapatan

2c1986b93e937d19.pngS

Sekarang kita harus menggabungkan ini ke dalam bucket yang dapat kita gunakan untuk rentang nilai konversi. Untuk tujuan ini, kita akan menggunakan fungsi kira-kira_kuantils di BigQuery, yang secara otomatis membuatkan rentang ini untuk Anda. Mari asumsikan untuk tujuan contoh ini bahwa kita ingin membuat 5 rentang, jadi kita cukup menggunakan SELECT kira-kira_kuantils(total_revenue, 5) AS bucket

Sekarang, mari kita masukkan ini ke dalam keseluruhan kueri

#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 mencoba mempertahankan distribusi persentil yang konsisten

ba46f5d993449948.pngS

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 dikembalikan di 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 kotak terakhir 5, karena itu umumnya merupakan nilai maksimum, dan kita hanya dapat mempertimbangkan 2,5 sebagai rentang terakhir. Hal ini karena penyedia atribusi aplikasi cenderung menghitung ROAS menggunakan rata-rata rentang, sehingga pencilan harus dikecualikan untuk penghitungan yang lebih seragam.

Sekarang kita akan mencoba melihat jumlah pengguna untuk setiap tanggal di semua rentang, sehingga kita dapat memahami volume harian pengguna di setiap kelompok.Kita dapat melakukannya dengan menggunakan contoh kueri ini, di mana Anda dapat mengganti nilai kelompok dengan data aktual, dan kuerinya 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

Ini akan mengembalikan pengguna dalam setiap rentang pendapatan untuk setiap hari, seperti di bawah ini. Jika Anda melihat jumlah yang sangat rendah di kotak mana pun atau secara umum distribusi yang tidak merata, sebaiknya sesuaikan jumlah kotak dan jalankan kembali kueri tersebut.

bf7d73085fe94cb6.png

Sekilas tentang SKAd Network 4.0

SKAd Network 4.0 menyediakan beberapa periode konversi hingga 2 hari, 3-7 hari, dan 8-35 hari. Dalam pendekatan di atas, Anda juga dapat dengan mudah mengubah jendela untuk menganalisis data untuk skenario tambahan ini. Nilai terperinci LOW, MEDIUM, dan HIGH juga tersedia. Sekali lagi, jika Anda ingin menggunakan pendekatan ini, Anda dapat menganggap ini sebagai 3 bucket. Jadi, dengan mengubah jumlah bucket menjadi 3, Anda bisa mendapatkan ambang batas untuk LOW, MEDIUM, dan HIGH

4. Deployment dengan penyedia atribusi Anda

Bergantung pada platform tertentu, panduan ini mungkin berubah. Harap bekerja sama dengan perwakilan platform untuk mendapatkan informasi terbaru terkait hal ini. Untuk tujuan contoh ini, kita akan melihat bagaimana saat ini kita dapat men-deploy ini di AppsFlyer

Dalam kueri yang kita jalankan sebelumnya, rentang akhir yang kita terima sebagai {i>output<i} adalah seperti di bawah ini

ba46f5d993449948.pngS

  • 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

Ingat bahwa kami memutuskan untuk mengabaikan rentang pendapatan terakhir karena akan menimbulkan pencilan, dan mendistorsi penghitungan rata-rata untuk penyedia atribusi aplikasi Anda.

AppsFlyer menawarkan SKAN Conversion Studio, yang cukup mudah untuk memasukkannya secara langsung ke UI. Anda dapat menggunakan 4.0 secara langsung atau menggunakan "Kustom" jika Anda menggunakan 3.5, dan menambahkan "Pendapatan" pengukuran. Selanjutnya, Anda cukup menambahkan rentang pendapatan yang dihitung dari analisis sebelumnya.

f8c56abdf9b405f4.pngS

Praktik Terbaik dan Pembelajaran di Google Ads

Kami ingin memberi Anda beberapa rekomendasi jika Anda menjalankan kampanye di Google Ads, dan mengukur dampaknya melalui skema nilai konversi Jaringan SKAd

  • Pastikan periode konversi yang Anda gunakan di Google Ads sesuai dengan periode aktivitas yang telah Anda tentukan di platform Atribusi Aplikasi. Untuk jaringan SKAd 3.5, peninjauan kemungkinan akan berlangsung selama 1-3 hari, jadi Anda dapat menyesuaikannya di Google Ads dengan mengikuti langkah-langkah yang tercantum di sini

4fd625aae9d4a43.pngS

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

6c7a4d703567700a.png

5. Selamat

Selamat, Anda berhasil menyiapkan skema nilai Konversi Jaringan SKAd. Anda kini dapat memantau data di laporan Jaringan SKAd Google Ads untuk memeriksa nilai konversi kampanye Google Ads setelah aktif.

Anda telah mempelajari

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