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

1. Giriş

Başlamadan önce bazı bilgiler

iOS uygulaması geliştiricisiyseniz iOS 14.5 ve sonraki sürümlerdeki gizlilik güncellemelerini duymuş olmalısınız. Yükleme sonrası anlamlı dönüşüm işlemlerini ölçmek için Apple, kullanıcı gizliliğini ihlal etmeden reklam kampanyalarınızın başarısını ölçmenize olanak tanıyan SKAd Network API'yi sunar. İşletmenizin ihtiyaçlarınıza göre, kampanyalarınız hakkında anlamlı analizler elde etmek için SKAdNetwork'ten yararlanmanın en uygun yolunu bulabilirsiniz. Bu codelab'de, uygulama yükleme sonrası geliri gruplar halinde gruplandırmak için BigQuery'de GA4F verilerinizden yararlanmaya yönelik örnek bir metodolojiyi inceleyeceğiz. Bu yöntemi daha sonra uygulama ilişkilendirme iş ortağınızla ayarlamak için kullanabilirsiniz. Bu codelab'de gelire dayalı bir yaklaşım kullanılsa da SKAN ölçümü için etkinlikler veya dönüşüm hunisi tabanlı yaklaşımlardan da yararlanabilirsiniz. Daha ayrıntılı bilgi edinmek için lütfen bu yardım merkezine bakın. Bu yalnızca bir örnektir ve Google'ın resmi önerisi değildir. Belirli iş ihtiyaçlarınıza göre kendi şemanızı tasarlayabilirsiniz

Değinmek istediğimiz konular

  • BigQuery'de GA4F verilerini keşfedin
  • 0-2 gün içinde dönüşüm gerçekleştiren kullanıcıların gelir verilerini bulma
  • Gelir verilerini gruplar halinde gruplandırma
  • Her bir paketteki kullanıcı dağılımını anlama
  • Paketleri Appsflyer SKAN Conversion Studio'da uygulayın

Ön koşullar

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

2. BigQuery Export'a erişme

GA4F'de veri kümesine gitmek için Proje Ayarları > Entegrasyonlar > BigQuery'ye dokunun. Öncelikle anahtarın etkinleştirilmesi gerekir. Etkinleştirildikten sonra veri kümesinin kullanılabilir hale gelmesi 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

Artık BigQuery'de olduğunuza göre, oluşturulan günlük tabloları göreceksiniz. Aşağıdaki örnek ekran görüntüsünde 64 günlük tablo olduğunu görüyoruz. Bu nedenle dışa aktarma işlemi 64 gündür çalışıyor. Rapora ilk kez erişiyorsanız önceki günün verileri için yalnızca 1 adet günlük tablo görebilirsiniz. Sağda tablo şemasını görürsünüz. Buradaki alanlarla ilgili daha fazla bilgiye ulaşabilirsiniz

Sorgunuzu yazmaya başlamak için Sorgu > Yeni sekmede

42ba59ec655c5d1b.png

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

70ef90d32b7cd7f1.png

3. Gelir verilerini analiz etme

Yükleme verileri getiriliyor

Gelir gruplarını oluşturmaya başlamak için öncelikle uygulamayı son 24 ila 72 saat içinde yükleyen kullanıcıların verilerine bakmamız gerekiyor. SKAdNetwork 4.0, verileri 0-2 gün içinde görüntülemenize olanak tanırken SKAdNetwork 3.5, varsayılan olarak 24 saat kullanmanıza olanak tanır. (Uygulama İlişkilendirme Ortağınızın özelliklerine bağlı olarak, bu etkinlik aralığını genel olarak 72 saatten fazla olmayacak şekilde değiştirebilirsiniz). Kullanıcılar uygulamayı yükleyip ilk kez açtığında first_open etkinliği SDK tarafından tetiklenir ve BigQuery'ye kaydedilir.

BigQuery için kullanabileceğiniz tanımlayıcı user_pseudo_id'dir (uygulama örneği kimliği olarak da adlandırılır). 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 bazı noktalar

  • 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* 2023'teki tüm verilerde sorgu oluşturur
  • Çok sayıda kullanıcınız varsa daha hızlı işlemek için yalnızca son 30 günü de sorgulayabilirsiniz.
  • "IOS" platformuna göre filtre uygularız. Firebase projenizde birden fazla iOS uygulaması varsa, belirli bir uygulamaya ait verileri almak için app_info.firebase_app_id için bir filtre de ekleyebilirsiniz.

Gelir verileri getiriliyor

Şimdi de 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 geliri, event_value_usd öğesinde, ad_impression için gelir ise etkinlik parametreleri içindeki value parametresinde bulunur. BigQuery'deki etkinlik parametrelerine aşina değilseniz buradaki tanımı kontrol etmenizi öneririz. Ayrıca, resmi referansmızda bu örnek sorguyu deneyebilirsiniz. Etkinlik, event_params değerinden değer ayıklama işlemini de kapsar.

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

Şimdi sorgunun burada ne yaptığını anlayalım. Aşağıdakileri fark etmiş olursunuz:

  • WHERE yan tümcesinde, yalnızca bunlarla ilgilendiğimizden gelir etkinlikleri için filtre uyguluyoruz ve geçen sefer 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 event_value_in_usd parametresini alıyoruz
  • Birden çok para birimi gönderiyorsanız, bu analiz için öncelikle tek bir para birimini ayarlamanız gerekir. Bu örneğin amacı doğrultusunda, reklam tarafından finanse edilen gelirin para biriminin de ABD doları olduğunu varsayacağız.

Çıkış, aşağıdakine benzer bir sonuç olur (user_pseudo_id sütunu burada çıkartılır).

1e1e6943e4b3a6d8.png

Bu verileri birleştirme

Şimdiye kadar biri uygulamayı yükleyip açan kullanıcıların verilerini, diğeri de bu kullanıcıların gelirini bulmak için olmak üzere iki sorgu çalıştırıyoruz. Şimdi, SKAdNetwork ile ilgili sınırlamalar hakkında nelerden bahsettiğimizi hatırlayalım. İlişkilendirme dönemi, yalnızca yükleme işleminden sonraki 0-2 gün içinde kullanılabilir. Bu nedenle, yükleme ve gelire ilişkin etkinlik zaman damgalarını kontrol etmemiz ve yalnızca bu zaman aralığında gerçekleşirse bu bilgileri almamız gerekir. Şimdi de uygulamanın yüklenmesinin ardından iki günlük her yayın için toplam geliri sağlayan bir sorguda birleştirmeyi 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. Sonrasında zaman damgasının 2 gün içinde olduğundan emin olmamız gerekir. SKAdNetwork 3.5'i kullanıyorsanız varsayılan değer 24 saattir. Böylece, koşulu yalnızca 1 günün verilerini içerecek şekilde değiştirebilirsiniz

Geliri gruplar halinde gruplandırma

Önceki sorgudan sonra, user_pseudo_id değerini ve toplam geliri elde edersiniz.

2c1986b93e937d19.png

Şimdi, bu verileri dönüşüm değeri aralıklarımızda kullanabileceğimiz gruplarda birleştirmemiz gerekecek. Bu amaçla, BigQuery'de bu aralıkları sizin için otomatik olarak oluşturan approx_quantiles işlevini kullanacağız. Bu örneğin amaçları doğrultusunda 5 aralık oluşturmak istediğimizi varsayalım. Bu nedenle yalnızca SELECT approx_quantiles(total_revenue, 5) AS paketlerini kullanabiliriz.

Bunu genel sorgumuza ekleyelim.

#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 sağlamaya çalışır.

ba46f5d993449948.png

Bu gruplarla kullanıcı dağılımını analiz etme

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

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

Son aralıklar için, son aralık 5'i göz ardı edeceğiz.Çünkü bu genellikle maksimum değerdir ve 2,5'i son aralık olarak kabul edebiliriz. Bunun nedeni, uygulama ilişkilendirme sağlayıcıların ROAS'ı aralığın ortalamasını kullanarak hesaplama eğiliminde olmasıdır. Bu nedenle, daha tek tip hesaplama için aykırı değerin hariç tutulması gerekir.

Şimdi, her bir gruptaki günlük kullanıcı hacmini anlayabilmek amacıyla, tüm aralıklardaki her tarih için kullanıcı sayısına bakmaya çalışacağız. Bunu, grup değerlerini gerçek verilerinizle değiştirebileceğiniz bu örnek sorguyu kullanarak yapabiliriz.

#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 gibi her gün için her bir gelir aralığındaki kullanıcıları döndürür. Herhangi bir pakette çok düşük sayılar veya genel olarak eşit olmayan bir dağılım görürseniz grup sayısını ayarlamak ve sorguyu yeniden çalıştırmak isteyebilirsiniz.

bf7d73085fe94cb6.png

SKAd Network 4.0 hakkında kısa bilgiler

SKAd Network 4.0 ; 2 gün, 3-7 gün ve 8-35 güne kadar birden çok dönüşüm aralığı sunar. Yukarıdaki yaklaşımda, bu ek senaryolar için verileri analiz etmek üzere pencereyi de kolayca değiştirebilirsiniz. DÜŞÜK, ORTA ve YÜKSEK büyük ayrıntılı değerleri de mevcuttur. Bu yaklaşımı tekrar kullanmak istiyorsanız bunu 3 grup olarak düşünebilirsiniz. Yani, bölüm sayısını 3 olarak değiştirerek, DÜŞÜK, ORTA ve YÜKSEK için de eşikleri elde edebilirsiniz

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

İlgili platforma bağlı olarak bu bilgiler değişebilir. Bu konuda en güncel bilgiler için lütfen platform temsilcileriyle birlikte çalışın. Bu örneğin amacı doğrultusunda, şu anda AppsFlyer'da bunu 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

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

Aykırı 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, bunun doğrudan kullanıcı arayüzüne girilmesi son derece basit olan SKAN Conversion Studio'yu sunar. 4.0'ı doğrudan veya "Özel"i kullanabilirsiniz modu seçin ve "Gelir" metriğini ekleyin bahsedeceğim. Ardından, önceki analizde hesapladığınız gelir aralıklarını eklemeniz yeterlidir.

f8c56abdf9b405f4.png

Google Ads ile İlgili En İyi Uygulamalar ve Dersler

Google Ads'de kampanya yayınlıyor ve etkiyi SKAdNetwork dönüşüm değeri şeması aracılığıyla ölçüyorsanız size bazı önerilerde bulunmak isteriz

  • Google Ads'de kullandığınız dönüşüm aralığının, Uygulama İlişkilendirme platformunuzda belirttiğiniz etkinlik aralığıyla eşleştiğinden emin olun. SKAd ağı 3.5 için bu genellikle 1-3 gün sürer. Bu nedenle, burada listelenen adımları uygulayarak Google Ads'de bunu uygun şekilde ayarlayabilirsiniz.

4fd625aae9d4a43.png

  • Appsflyer kullanıyorsanız şu anda varsayılan etkinlik sayacı 1'dir. Diğer bir deyişle, kullanıcı başına birden fazla etkinliği hesaba katmaz. SKAN ölçümü için etkinliğe dayalı bir model kullanıyor ve Google Ads'deki hedef EBM kampanyalarıyla karşılaştırma yapıyorsanız Appsflyer'ın bu kılavuzundan yararlanarak özelleştirmeyi seçebilirsiniz.

6c7a4d703567700a.png

5. Tebrikler

Tebrikler, SKAdNetwork Dönüşüm değeri şemanızı başarıyla oluşturdunuz. Artık Google Ads SKAdNetwork raporunuzdaki verileri izleyerek Google Ads kampanyalarınızın dönüşüm değerlerini kontrol edebilirsiniz.

Neler öğrendiniz?

  • BigQuery'de GA4F'deki zengin ham verileri keşfetme
  • İşletmenizin gelir gruplarını hesaplamaya yönelik analitik yaklaşım
  • Şemayı AppsFlyer ile dağıtma