1. Pengantar
Beberapa Konteks Sebelum Kita Memulai
Jika Anda adalah developer Aplikasi iOS, Anda pasti telah mendengar tentang pembaruan 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 dapat menemukan cara yang paling optimal untuk memanfaatkan SKAd Network guna mendapatkan insight yang bermakna tentang kampanye Anda. Dalam codelab ini, kita akan memeriksa contoh metodologi untuk memanfaatkan data GA4F di BigQuery guna mengelompokkan pendapatan setelah penginstalan aplikasi ke dalam bucket, yang kemudian dapat Anda gunakan untuk menyiapkan 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 Anda sendiri berdasarkan kebutuhan bisnis spesifik Anda
Yang ingin 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
Membuka Set Data Google Cloud
Buka set data di GA4F dengan membuka Project Settings > Integrations > BigQuery. Tombol ini 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 link tersebut akan mengarahkan Anda ke BigQuery
Menjalankan beberapa kueri
Setelah 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 tersebut di sini
Untuk mulai menulis kueri, Anda dapat mengklik Query > In new tab
Kemudian, Anda dapat mencoba menjalankan contoh kueri di tab baru
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), 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 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 membahas 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 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 dengan 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 jika peristiwa tersebut adalah in_app_purchase
- Jika Anda mengirim beberapa mata uang, Anda harus terlebih dahulu menyelaraskan mata uang tunggal 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).
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, dan hanya mengambil informasi, jika terjadi dalam jangka waktu tersebut. Sekarang, mari kita coba menggabungkannya ke dalam kueri yang memberikan total pendapatan untuk setiap hari setelah dua hari 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 dalam 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
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. Anggaplah untuk tujuan contoh ini, kita ingin membuat 5 rentang, sehingga kita cukup menggunakan SELECT approx_quantiles(total_revenue, 5) AS buckets
Dengan demikian, mari kita gabungkan ini ke dalam kueri keseluruhan
#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
Menganalisis distribusi pengguna dengan bucket ini
Langkah ini bersifat 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 pengguna harian di setiap bucket. Kita dapat melakukannya menggunakan contoh kueri 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
Ini akan mengembalikan pengguna dalam setiap rentang pendapatan untuk setiap hari, seperti di bawah ini. Jika Anda melihat angka yang sangat rendah di bucket mana pun atau distribusi yang umumnya tidak merata, sebaiknya sesuaikan jumlah bucket dan jalankan ulang kueri.
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 periode 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 dapat 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
- 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 menjadi outlier, 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 mode "Kustom" jika menggunakan 3.5, dan menambahkan pengukuran "Pendapatan". Kemudian, Anda cukup menambahkan rentang pendapatan yang dihitung dari analisis sebelumnya.
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 cocok dengan periode aktivitas yang telah Anda tentukan di platform Atribusi Aplikasi. Untuk SKAdNetwork 3.5, waktunya mungkin dalam 1-3 hari, sehingga Anda dapat menyesuaikannya di Google Ads dengan mengikuti langkah-langkah yang tercantum di sini
- 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
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 kaya dari GA4F di BigQuery
- Pendekatan analitis untuk menghitung rentang pendapatan untuk bisnis Anda
- Men-deploy skema dengan AppsFlyer