Tính toán nhóm doanh thu cho Lược đồ giá trị chuyển đổi mạng SKAd

1. Giới thiệu

Một số bối cảnh trước khi chúng ta bắt đầu

Nếu là nhà phát triển Ứng dụng iOS, chắc hẳn bạn đã nghe nói về các bản cập nhật quyền riêng tư của iOS 14.5+ . Để đo lường các hành động chuyển đổi có ý nghĩa sau khi cài đặt, Apple cung cấp API Mạng SKAd cho phép bạn đo lường mức độ thành công của chiến dịch quảng cáo trong khi vẫn tôn trọng quyền riêng tư của người dùng. Dựa trên nhu cầu kinh doanh của mình, bạn có thể nghĩ ra cách tối ưu nhất để tận dụng Mạng SKAd nhằm nắm bắt những thông tin chi tiết có ý nghĩa về chiến dịch của mình. Trong lớp học lập trình này, chúng ta sẽ xem xét một phương pháp mẫu để tận dụng dữ liệu GA4F của bạn trong BigQuery để nhóm lượt cài đặt ứng dụng sau khi đăng doanh thu vào các nhóm mà sau đó bạn có thể sử dụng để thiết lập với đối tác phân bổ ứng dụng của mình. Mặc dù lớp học lập trình này sử dụng phương pháp tiếp cận dựa trên doanh thu, nhưng bạn cũng có thể sử dụng phương pháp tiếp cận dựa trên sự kiện hoặc kênh để đo lường SKAN. Vui lòng tham khảo trung tâm trợ giúp này để được hướng dẫn chi tiết hơn. Đây chỉ là một ví dụ, không phải là đề xuất chính thức của Google . Bạn có thể thiết kế lược đồ của riêng mình dựa trên nhu cầu kinh doanh cụ thể của bạn

Những gì chúng tôi dự định đề cập

  • Khám phá dữ liệu GA4F trong BigQuery
  • Tìm dữ liệu doanh thu cho người dùng đã chuyển đổi trong vòng 0-2 ngày
  • Nhóm dữ liệu doanh thu vào các nhóm
  • Hiểu phân bổ người dùng trong mỗi nhóm
  • Triển khai các nhóm trong Studio chuyển đổi SKAN của Appsflyer

Điều kiện tiên quyết

2. Truy cập BigQuery Xuất

Chuyển đến tập dữ liệu trong GA4F bằng cách truy cập Cài đặt dự án > Tiện ích tích hợp > BigQuery. Việc chuyển đổi cần phải được bật trước tiên và sau khi được bật, sẽ mất khoảng 48 giờ để có sẵn tập dữ liệu. Bạn có thể nhấp vào liên kết hiển thị bên dưới và nó sẽ đưa bạn đến BigQuery

1aa4e20bfd3419d1.png

Chạy một số truy vấn

Bây giờ bạn đang ở trong BigQuery, bạn sẽ thấy các bảng hàng ngày được tạo. Trong ảnh chụp màn hình ví dụ bên dưới, chúng ta thấy 64 bảng hàng ngày, do đó quá trình xuất đã diễn ra được 64 ngày. Nếu bạn truy cập nó lần đầu tiên, bạn có thể chỉ thấy 1 bảng hàng ngày cho dữ liệu của ngày hôm trước. Ở bên phải, bạn thấy lược đồ bảng. Bạn có thể tham khảo thêm chi tiết về các lĩnh vực tại đây

Để bắt đầu viết truy vấn của mình, bạn có thể nhấp vào Truy vấn > Trong tab mới

42ba59ec655c5d1b.png

Sau đó, bạn có thể thử chạy truy vấn mẫu trong tab mới

70ef90d32b7cd7f1.png

3. Phân tích dữ liệu doanh thu

Đang tìm nạp dữ liệu cài đặt

Bây giờ Để bắt đầu xây dựng nhóm doanh thu, trước tiên chúng tôi phải xem dữ liệu về người dùng đã cài đặt ứng dụng trong vòng 24 đến 72 giờ qua. SKAd Network 4.0 cho phép bạn xem dữ liệu trong 0-2 ngày, trong khi SKAd Network 3.5 cho phép xem dữ liệu trong 24 giờ theo mặc định. (Tùy thuộc vào khả năng của Đối tác phân bổ ứng dụng, bạn có thể sửa đổi khoảng thời gian hoạt động này nói chung thành không quá 72 giờ). Khi người dùng cài đặt và mở ứng dụng lần đầu tiên, sự kiện first_open sẽ được SDK kích hoạt và ghi lại trong BigQuery.

Giá trị nhận dạng mà bạn có thể sử dụng cho BigQuery là user_pseudo_id (còn gọi là ID phiên bản ứng dụng), vì vậy, bạn có thể sử dụng truy vấn bên dưới để tìm những người dùng này

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'

Một số điều cần lưu ý về truy vấn này

  • Vui lòng thay thế tên bảng bằng bảng đã xuất Analytics của bạn. Bạn có thể sử dụng ký tự đại diện để truy vấn nhiều bảng hàng ngày. Ví dụ: 2023* sẽ truy vấn tất cả dữ liệu vào năm 2023
  • Nếu bạn có nhiều người dùng, bạn cũng có thể chỉ truy vấn 30 ngày qua để xử lý nhanh hơn
  • Chúng tôi lọc trên nền tảng = 'IOS'. Trong trường hợp bạn có nhiều Ứng dụng iOS trong dự án Firebase của mình, bạn cũng có thể thêm bộ lọc cho app_info.firebase_app_id để lấy dữ liệu cho ứng dụng cụ thể

Đang tìm nạp dữ liệu doanh thu

Bây giờ, hãy xem truy vấn để tìm doanh thu cho người dùng của bạn. Trong trường hợp này, chúng tôi giả định rằng các sự kiện doanh thu của bạn là in_app_purchase và ad_impression. Doanh thu từ in_app_purchase có sẵn trong sự kiện_value_usd, trong khi đối với ad_impression, doanh thu có sẵn trong thông số giá trị, trong thông số sự kiện. Nếu không quen với các thông số sự kiện trong BigQuery, bạn nên kiểm tra định nghĩa tại đây và có thể thử truy vấn mẫu này trong tài liệu tham khảo chính thức của chúng tôi, trong đó cũng đề cập đến việc trích xuất giá trị từ 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')

Hãy hiểu truy vấn đang làm gì ở đây. Đây là những điều bạn sẽ nhận thấy

  • Trong mệnh đề WHERE, chúng tôi đang lọc các sự kiện doanh thu vì chúng tôi chỉ quan tâm đến những sự kiện đó và giống như lần trước, chúng tôi đang tìm kiếm dữ liệu iOS
  • Bây giờ, trong mệnh đề SELECT, chúng tôi đang lấy giá trị cũng như đơn vị tiền tệ cho sự kiện doanh thu quảng cáo (ad_impression) và chúng tôi sẽ lấy event_value_in_usd khi sự kiện diễn ra trong_app_purchase
  • Nếu trong trường hợp bạn gửi nhiều loại tiền tệ, trước tiên bạn cần căn chỉnh theo một loại tiền tệ duy nhất cho phân tích này. Vì mục đích của ví dụ này, chúng tôi sẽ giả định rằng đơn vị tiền tệ cho doanh thu được tài trợ từ quảng cáo cũng là USD

Đầu ra sẽ giống như bên dưới (cột dành cho user_pseudo_id được sắp xếp lại ở đây).

1e1e6943e4b3a6d8.png

Kết hợp dữ liệu này

Cho đến nay, chúng tôi đã chạy hai truy vấn, một truy vấn để tìm dữ liệu về những người dùng đã cài đặt và mở ứng dụng và một truy vấn khác để tìm doanh thu cho những người dùng đó. Bây giờ, hãy nhớ lại những gì chúng ta đã thảo luận về các hạn chế của Mạng SKAd. Cửa sổ phân bổ chỉ có thể khả dụng trong vòng 0-2 ngày sau khi cài đặt. Do đó, chúng tôi sẽ cần kiểm tra dấu thời gian của sự kiện về lượt cài đặt và doanh thu, đồng thời chỉ lấy thông tin nếu điều đó xảy ra trong khung thời gian đó. Bây giờ chúng ta hãy thử kết hợp thành một truy vấn cung cấp tổng doanh thu cho mỗi bài đăng sau hai ngày cài đặt ứng dụng

#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

Truy vấn chỉ cố gắng kết hợp dữ liệu cài đặt và dữ liệu doanh thu trên trường user_pseudo_id, sau đó chúng tôi phải đảm bảo rằng dấu thời gian là trong vòng 2 ngày. Nếu bạn đang sử dụng SKAd Network 3.5 thì mặc định là 24 giờ nên bạn cũng có thể thay đổi điều kiện để chỉ bao gồm dữ liệu của 1 ngày

Phân nhóm doanh thu thành các nhóm

Sau truy vấn trước, bạn sẽ có user_pseudo_id và tổng doanh thu

2c1986b93e937d19.png

Bây giờ chúng ta sẽ cần kết hợp điều này thành các nhóm mà chúng ta có thể sử dụng cho phạm vi giá trị chuyển đổi của mình. Với mục đích này, chúng tôi sẽ sử dụng hàm approx_quantiles trong BigQuery để tự động tạo các phạm vi này cho bạn. Giả sử vì mục đích của ví dụ này mà chúng ta muốn tạo 5 phạm vi, vì vậy chúng ta chỉ có thể sử dụng các nhóm SELECT approx_quantiles(total_revenue, 5) AS

Cùng với đó, hãy kết hợp điều này vào truy vấn tổng thể của chúng tôi

#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

Truy vấn này sẽ chia doanh thu thành 5 nhóm và BigQuery cố gắng duy trì mức phân bổ phần trăm nhất quán

ba46f5d993449948.png

Phân tích phân bổ người dùng với các nhóm này

Đây là bước tùy chọn nếu bạn muốn hiểu sự phân bổ người dùng của mình trong mỗi nhóm. Trong ví dụ của chúng tôi, phạm vi nhóm được trả về trong truy vấn trước đó là

  • 0,1
  • 0,5
  • 2
  • 2,5
  • 5 [giá trị cuối cùng sẽ không được sử dụng trong cấu hình phạm vi]

Đối với phạm vi cuối cùng, chúng tôi sẽ bỏ qua nhóm 5 cuối cùng, vì đó thường là giá trị tối đa và chúng tôi chỉ có thể coi 2,5 là phạm vi cuối cùng. Điều này là do các nhà cung cấp phân bổ ứng dụng có xu hướng tính toán ROAS bằng cách sử dụng giá trị trung bình của phạm vi, do đó, giá trị ngoại lệ phải được loại trừ để tính toán thống nhất hơn.

Bây giờ, chúng tôi sẽ cố gắng xem xét số lượng người dùng cho mỗi ngày trên tất cả các phạm vi để có thể hiểu số lượng người dùng hàng ngày trong mỗi nhóm. Chúng tôi có thể thực hiện điều đó bằng cách sử dụng truy vấn mẫu này, trong đó bạn có thể thay thế các giá trị nhóm bằng dữ liệu thực tế của bạn và truy vấn sẽ trông giống như thế này

#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

Nó sẽ trả về người dùng trong từng phạm vi doanh thu cho mỗi ngày, như bên dưới. Nếu bạn thấy số lượng rất thấp trong bất kỳ nhóm nào hoặc nhìn chung phân bố không đồng đều, bạn có thể muốn điều chỉnh số lượng nhóm và chạy lại truy vấn.

bf7d73085fe94cb6.png

Đôi lời ngắn gọn về SKAd Network 4.0

SKAd Network 4.0 cung cấp nhiều thời lượng chuyển đổi lên tới 2 ngày, 3-7 ngày và 8-35 ngày. Theo cách tiếp cận ở trên, bạn cũng có thể dễ dàng thay đổi cửa sổ để phân tích dữ liệu cho các tình huống bổ sung này. Các giá trị thô của THẤP, TRUNG BÌNH và CAO cũng có sẵn. Một lần nữa, nếu bạn muốn sử dụng phương pháp này, bạn có thể coi đây là 3 nhóm. Vì vậy, bằng cách thay đổi số lượng nhóm thành 3, bạn có thể nhận được ngưỡng THẤP, TRUNG BÌNH và CAO

4. Triển khai với nhà cung cấp phân bổ của bạn

Tùy thuộc vào nền tảng cụ thể, hướng dẫn này có thể thay đổi. Vui lòng làm việc với đại diện nền tảng để có thông tin cập nhật nhất về vấn đề này. Vì mục đích của ví dụ này, chúng ta sẽ xem xét cách hiện tại chúng ta có thể triển khai tính năng này trên AppsFlyer

Trong truy vấn mà chúng tôi đã chạy trước đó, phạm vi cuối cùng mà chúng tôi nhận được dưới dạng đầu ra như sau

ba46f5d993449948.png

  • Phạm vi 1: 0 đến 0,1
  • Phạm vi 2: 0,1 đến 0,5
  • Phạm vi 3: 0,5 đến 2
  • Phạm vi 4: 2 đến 2,5

Hãy nhớ rằng chúng tôi đã quyết định bỏ qua phạm vi doanh thu cuối cùng vì nó sẽ là một giá trị ngoại lệ và làm sai lệch các phép tính trung bình cho nhà cung cấp phân bổ ứng dụng của bạn.

AppsFlyer cung cấp SKAN Converter Studio , nơi việc nhập trực tiếp thông tin này vào giao diện người dùng khá đơn giản. Bạn có thể sử dụng trực tiếp 4.0 hoặc sử dụng chế độ "Tùy chỉnh" nếu bạn đang sử dụng 3.5 và thêm phép đo "Doanh thu". Sau đó, bạn có thể chỉ cần thêm phạm vi doanh thu mà bạn đã tính toán từ phân tích trước đó.

f8c56abdf9b405f4.png

Các phương pháp hay nhất và bài học về Google Ads

Chúng tôi muốn đưa ra cho bạn một số đề xuất nếu bạn đang chạy các chiến dịch trên Google Ads và đo lường tác động thông qua giản đồ giá trị chuyển đổi của Mạng SKAd

  • Đảm bảo rằng thời lượng chuyển đổi bạn đang sử dụng trên Google Ads khớp với thời lượng hoạt động mà bạn đã chỉ định trên nền tảng Phân bổ ứng dụng của mình. Đối với mạng SKAd 3.5, quá trình này có thể diễn ra trong vòng 1-3 ngày, vì vậy, bạn có thể điều chỉnh cho phù hợp trên Google Ads bằng cách làm theo các bước được liệt kê tại đây

4fd625aae9d4a43.png

  • Nếu bạn đang sử dụng Appsflyer, hiện tại bộ đếm sự kiện mặc định là 1, nghĩa là nó không tính đến nhiều sự kiện cho mỗi người dùng. Nếu đang sử dụng mô hình dựa trên sự kiện để đo lường SKAN và so sánh với các chiến dịch tCPA trên Google Ads, bạn có thể chọn tùy chỉnh bằng cách làm theo hướng dẫn này từ Appsflyer

6c7a4d703567700a.png

5. Xin chúc mừng

Xin chúc mừng, bạn đã thiết lập thành công lược đồ giá trị Chuyển đổi mạng SKAd của mình. Giờ đây, bạn có thể theo dõi dữ liệu trong báo cáo Mạng SKAd của Google Ads để kiểm tra giá trị chuyển đổi cho các chiến dịch trên Google Ads của mình sau khi báo cáo này hoạt động

Bạn đã học

  • Cách khám phá dữ liệu thô phong phú từ GA4F trong BigQuery
  • Phương pháp phân tích để tính toán nhóm doanh thu cho doanh nghiệp của bạn
  • Triển khai lược đồ với AppsFlyer