SKAdNetwork Dönüşüm Değeri Şeması'nın Gelir Bölümlerini Hesaplama

1. Giriş

Başlamadan Önce Biraz Bilgi

Bir iOS uygulaması geliştiricisiyseniz iOS 14.5 ve sonraki sürümlerdeki gizlilik güncellemelerini duymuş olmalısınız. Apple, yükleme sonrası anlamlı dönüşüm işlemlerini ölçmek için SKAdNetwork API'yi sunar. Bu API, kullanıcı gizliliğine saygı göstererek reklam kampanyalarınızın başarısını ölçmenize olanak tanır. İşletmenizin ihtiyaçlarına göre, kampanyalarınızla ilgili anlamlı analizler elde etmek için SKAdNetwork'ten yararlanmanın en uygun yolunu bulabilirsiniz. Bu codelab'de, uygulama yüklemesinden sonraki geliri gruplandırmak için BigQuery'deki GA4F verilerinizden yararlanmaya yönelik örnek bir metodolojiyi inceliyoruz. Bu gruplandırmayı daha sonra uygulama ilişkilendirme iş ortağınızla birlikte ayarlamak için kullanabilirsiniz. Bu codelab'de gelire dayalı bir yaklaşım kullanılsa da SKAN ölçümü için etkinliklere veya dönüşüm hunisine dayalı yaklaşımları da kullanabilirsiniz. Daha ayrıntılı rehberlik için lütfen bu Yardım Merkezi makalesini inceleyin. Bu yalnızca bir örnektir, resmi bir Google önerisi değildir. Belirli iş ihtiyaçlarınıza göre kendi şemanızı tasarlayabilirsiniz.

Ele almayı planladığımız konular

  • BigQuery'de GA4F verilerini keşfetme
  • 0-2 gün içinde dönüşüm gerçekleştiren kullanıcıların gelir verilerini bulma
  • Gelir verilerini paketler halinde gruplandırma
  • Her gruptaki kullanıcı dağılımını anlama
  • Grupları Appsflyer SKAN Conversion Studio'da uygulama

Ön Koşullar

  • iOS uygulamanızda GA4F SDK ve tüm gelir etkinlikleri entegre edilmiş olmalıdır (in_app_purchase veya ad funded revenue).
  • Firebase'den BigQuery'ye dışa aktarma etkin
  • Tüm gelir etkinliklerini de kaydeden Uygulama İlişkilendirme Ortağı

2. BigQuery Export'a erişme

Proje Ayarları > Entegrasyonlar > BigQuery'ye giderek GA4F'deki veri kümesine gidin. Öncelikle açma/kapatma düğmesi etkinleştirilmelidir. Etkinleştirildikten sonra veri kümesinin kullanılabilir olması yaklaşık 48 saat sürer. Aşağıda gösterilen bağlantıyı tıkladığınızda BigQuery'ye yönlendirilirsiniz.

1aa4e20bfd3419d1.png

Bazı sorguları çalıştırma

BigQuery'de oluşturulan günlük tabloları görebilirsiniz. Aşağıdaki örnek ekran görüntüsünde 64 günlük tablo görüyoruz. Bu nedenle, dışa aktarma işlemi 64 gündür devam ediyor. İlk kez erişiyorsanız önceki günün verileri için yalnızca 1 günlük tablo görebilirsiniz. Sağ tarafta tablo şemasını görürsünüz. Alanlarla ilgili daha fazla bilgiyi burada bulabilirsiniz.

Sorgunuzu yazmaya başlamak için Sorgu > Yeni sekmede'yi tıklayabilirsiniz.

42ba59ec655c5d1b.png

Ardından, örnek sorguyu yeni sekmede çalıştırmayı deneyebilirsiniz.

70ef90d32b7cd7f1.png

3. Gelir verilerini analiz etme

Yükleme verilerini getirme

Gelir gruplarını oluşturmaya başlamak için öncelikle uygulamayı son 24-72 saat içinde yükleyen kullanıcıların verilerine bakmamız gerekir. SKAd Network 4.0, verileri 0-2 gün içinde görüntülemenize olanak tanırken SKAd Network 3.5'te varsayılan olarak 24 saatlik bir süre vardır. (Uygulama İlişkilendirme İş Ortağınızın özelliklerine bağlı olarak, bu etkinlik aralığını genellikle 72 saati aşmayacak şekilde değiştirebilirsiniz.) Kullanıcılar uygulamayı yükleyip ilk kez açtığında SDK tarafından first_open etkinliği tetiklenir ve BigQuery'ye kaydedilir.

BigQuery için kullanabileceğiniz tanımlayıcı user_pseudo_id'dir (uygulama örneği kimliği olarak da bilinir). Bu nedenle, bu kullanıcıları bulmak için aşağıdaki sorguyu kullanabilirsiniz.

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'

Bu sorguyla ilgili dikkat edilmesi gereken birkaç nokta

  • Lütfen tablo adını, Analytics'ten dışa aktarılan tablonuzla değiştirin. Birden fazla günlük tabloyu sorgulamak için joker karakterler kullanabilirsiniz. Örneğin, 2023* ifadesi 2023'teki tüm verilerde sorgu oluşturur.
  • Çok sayıda kullanıcınız varsa daha hızlı işleme için yalnızca son 30 günü de sorgulayabilirsiniz.
  • Platform = "IOS" filtresini kullanırız. Firebase projenizde birden fazla iOS uygulaması varsa belirli bir uygulamanın verilerini almak için app_info.firebase_app_id filtresi de ekleyebilirsiniz.

Gelir verilerini getirme

Şimdi, kullanıcılarınızın gelirini bulmak için bir sorguya bakalım. Bu durumda, gelir etkinliklerinizin in_app_purchase ve ad_impression olduğunu varsayarız. in_app_purchase etkinliğinden elde edilen gelir event_value_usd içinde, ad_impression etkinliğinden elde edilen gelir ise etkinlik parametreleri içindeki value parametresinde kullanılabilir. BigQuery'deki etkinlik parametreleri hakkında bilginiz yoksa buradaki tanımı incelemenizi öneririz. Ayrıca, etkinlik parametrelerinden değer çıkarma konusunu da ele alan resmi referansımızda bu örnek sorguyu deneyebilirsiniz.

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')

Sorgunun burada ne yaptığını anlayalım. Fark edeceğiniz noktalar

  • Yalnızca gelir etkinlikleriyle ilgilendiğimiz için WHERE ifadesinde gelir etkinliklerini filtreliyoruz ve son seferde olduğu gibi iOS verilerini arıyoruz.
  • Şimdi SELECT ifadesinde, reklam geliri etkinliğinin (ad_impression) değerini ve para birimini alıyoruz. Etkinlik in_app_purchase olduğunda ise event_value_in_usd değerini alıyoruz.
  • Birden fazla para birimi gönderiyorsanız bu analiz için öncelikle tek bir para birimiyle uyumlu olmanız gerekir. Bu örnekte, reklam destekli gelirin para biriminin de ABD doları olduğunu varsayacağız.

Çıktı, aşağıdakine benzer bir şey olur (user_pseudo_id sütunu burada çıkarılmıştır).

1e1e6943e4b3a6d8.png

Bu verileri birleştirme

Şimdiye kadar iki sorgu çalıştırdık. Bunlardan biri uygulamayı yükleyip açan kullanıcıların verilerini, diğeri ise bu kullanıcıların gelirini bulmak için kullanıldı. Şimdi de SKAdNetwork sınırlamaları hakkında konuştuklarımızı hatırlayalım. İlişkilendirme dönemi yalnızca yüklemeden sonraki 0-2 gün içinde kullanılabilir. Bu nedenle, yükleme ve gelir için etkinlik zaman damgalarını kontrol etmemiz ve yalnızca bu zaman aralığında gerçekleşirse bilgileri almamız gerekir. Şimdi de uygulama yüklemesinden sonraki iki gün içinde her gönderinin toplam gelirini sağlayan bir sorgu oluşturmayı deneyelim.

#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

Sorgu, yalnızca yükleme verilerini ve gelir verilerini user_pseudo_id alanında birleştirmeye çalışır. Ardından, zaman damgasının 2 gün içinde olduğundan emin olmamız gerekir. SKAd Network 3.5 kullanıyorsanız varsayılan değer 24 saattir. Bu nedenle, koşulu yalnızca 1 günlük verileri içerecek şekilde de değiştirebilirsiniz.

Geliri gruplandırma

Önceki sorgudan sonra user_pseudo_id ve toplam gelir elde edersiniz.

2c1986b93e937d19.png

Şimdi bunu, dönüşüm değeri aralıklarımız için kullanabileceğimiz paketler halinde birleştirmemiz gerekiyor. Bu amaçla, BigQuery'deki approx_quantiles işlevini kullanacağız. Bu işlev, bu aralıkları sizin için otomatik olarak oluşturur. Bu örnekte 5 aralık oluşturmak istediğimizi varsayalım. Bu durumda, SELECT approx_quantiles(total_revenue, 5) AS buckets sorgusunu kullanabiliriz.

Şimdi bunu genel sorgumuza dahil edelim.

#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

Bu sorgu, geliri 5 pakete böler ve BigQuery, tutarlı bir yüzdelik dağılımı korumaya çalışır.

ba46f5d993449948.png

Kullanıcı dağılımını bu gruplarla analiz etme

Bu, kullanıcılarınızın her gruptaki dağılımını anlamak istiyorsanız isteğe bağlı bir adımdır. Örneğimizde, önceki sorguda döndürülen grup aralıkları şunlardır:

  • 0,1
  • 0.5
  • 2
  • 2.5
  • 5 [son değer aralık yapılandırmasında kullanılmamalıdır]

Son aralıklar için genellikle maksimum değer olan son 5.grubu yoksayacağız ve son aralık olarak yalnızca 2,5'u dikkate alacağız. Bunun nedeni, uygulama ilişkilendirme sağlayıcılarının ROAS'ı aralığın ortalamasını kullanarak hesaplamasıdır. Bu nedenle, daha tekdüze bir hesaplama için aykırı değerin hariç tutulması gerekir.

Şimdi, her bir aralıktaki her tarih için kullanıcı sayısına bakmaya çalışalım. Böylece, her gruptaki günlük kullanıcı hacmini anlayabiliriz. Bunu, grup değerlerini gerçek verilerinizle değiştirebileceğiniz bu örnek sorguyu kullanarak yapabiliriz. Sorgu şu şekilde görünür:

#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

Aşağıdaki örnekte olduğu gibi, her gün için her gelir aralığındaki kullanıcıları döndürür. Herhangi bir grupta çok düşük sayılar veya genel olarak eşit olmayan bir dağılım görüyorsanız grup sayısını ayarlayıp sorguyu yeniden çalıştırmak isteyebilirsiniz.

bf7d73085fe94cb6.png

SKAdNetwork 4.0 hakkında kısa bir not

SKAd Network 4.0 , 2 gün, 3-7 gün ve 8-35 gün olmak üzere birden fazla dönüşüm aralığı sunar. Yukarıdaki yaklaşımda, bu ek senaryolar için de verileri analiz etmek üzere pencereyi kolayca değiştirebilirsiniz. DÜŞÜK, ORTA ve YÜKSEK kaba ayrıntılı değerleri de kullanılabilir. Bu yaklaşımı kullanmak istiyorsanız bunu 3 grup olarak düşünebilirsiniz. Dolayısıyla, grup sayısını 3 olarak değiştirerek DÜŞÜK, ORTA ve YÜKSEK eşiklerini elde edebilirsiniz.

4. İlişkilendirme sağlayıcınızla dağıtım

Bu kılavuz, platforma göre değişebilir. Bu konuyla ilgili en güncel bilgiler için lütfen platform temsilcileriyle iletişime geçin. Bu örnekte, şu anda AppsFlyer'da nasıl dağıtabileceğimize bakacağız.

Daha önce çalıştırdığımız sorguda, çıkış olarak aldığımız son aralıklar aşağıdaki gibiydi.

ba46f5d993449948.png

  • 1.Aralık : 0 - 0,1
  • 2. Aralık : 0,1-0,5
  • 3.aralık : 0,5 - 2
  • 4.aralık : 2 - 2,5

Ayırt edici bir değer olacağı ve uygulama ilişkilendirme sağlayıcınızın ortalama hesaplamalarını çarpıtacağı için son gelir aralığını yoksaymaya karar verdiğimizi unutmayın.

AppsFlyer, bu verilerin doğrudan kullanıcı arayüzüne girilmesini oldukça kolaylaştıran SKAN Conversion Studio'yu sunar. 4.0'ı doğrudan kullanabilir veya 3.5'i kullanıyorsanız "Özel" modunu kullanıp "Gelir" ölçümünü ekleyebilirsiniz. Ardından, önceki analizden hesapladığınız gelir aralıklarını ekleyebilirsiniz.

f8c56abdf9b405f4.png

Google Ads ile İlgili En İyi Uygulamalar ve Öğrenilenler

Google Ads'de kampanya yayınlıyor ve etkiyi bir SKAdNetwork dönüşüm değeri şeması aracılığıyla ölçüyorsanız aşağıdaki önerilerimizi dikkate almanızı rica ederiz.

  • Google Ads'de kullandığınız dönüşüm aralığının, uygulama ilişkilendirme platformunuzda belirttiğiniz etkinlik aralığıyla eşleştiğinden emin olun. SKAdNetwork 3.5 için bu süre muhtemelen 1-3 gün olacaktır. Bu nedenle, burada belirtilen adımları uygulayarak Google Ads'de buna göre ayarlama yapabilirsiniz.

4fd625aae9d4a43.png

  • Appsflyer kullanıyorsanız şu anda varsayılan etkinlik sayacı 1'dir. Bu nedenle, kullanıcı başına birden fazla etkinlik dikkate alınmaz. SKAN ölçümü için etkinliğe dayalı bir model kullanıyorsanız ve Google Ads'deki hedef EBM kampanyalarıyla karşılaştırma yapıyorsanız AppsFlyer'ın bu kılavuzunu izleyerek özelleştirmeyi seçebilirsiniz.

6c7a4d703567700a.png

5. Tebrikler

Tebrikler, SKAdNetwork dönüşüm değeri şemanızı başarıyla oluşturdunuz. Bu özellik kullanıma sunulduktan sonra, Google Ads kampanyalarınızın dönüşüm değerlerini kontrol etmek için Google Ads SKAdNetwork raporunuzdaki verileri izleyebilirsiniz.

Öğrendikleriniz

  • BigQuery'de GA4F'den gelen zengin ham verileri keşfetme
  • İşletmeniz için gelir gruplarını hesaplamaya yönelik analitik yaklaşım
  • Şemayı AppsFlyer ile dağıtma