1. Wstęp
Trochę kontekstu, zanim zaczniemy
Jeśli jesteś programistą aplikacji na iOS, na pewno słyszałeś o aktualizacjach prywatności iOS 14.5+ . Aby mierzyć znaczące działania powodujące konwersję po instalacji, Apple udostępnia interfejs API sieci SKAd , który pozwala mierzyć skuteczność kampanii reklamowych przy jednoczesnym poszanowaniu prywatności użytkowników. W zależności od potrzeb biznesowych możesz znaleźć najbardziej optymalny sposób wykorzystania sieci SKAd do gromadzenia istotnych informacji na temat swoich kampanii. W tych ćwiczeniach z programowania sprawdzimy przykładową metodologię wykorzystania danych GA4F w BigQuery do grupowania przychodów po instalacji aplikacji w zasobniki, których możesz następnie użyć do skonfigurowania współpracy ze swoim partnerem w zakresie atrybucji aplikacji. Chociaż w tym laboratorium programistycznym zastosowano podejście oparte na przychodach, do pomiaru SKAN można również zastosować podejście oparte na zdarzeniach lub lejkach. Bardziej szczegółowe wskazówki można znaleźć w tym centrum pomocy . To tylko przykład, a nie oficjalna rekomendacja Google . Możesz zaprojektować własny schemat w oparciu o konkretne potrzeby biznesowe
Co zamierzamy omówić
- Przeglądaj dane GA4F w BigQuery
- Znajdź dane o przychodach użytkowników, którzy dokonali konwersji w ciągu 0–2 dni
- Grupuj dane o przychodach w segmenty
- Zrozum rozkład użytkowników w każdym segmencie
- Zaimplementuj segmenty w Appsflyer SKAN Conversion Studio
Wymagania wstępne
- Pakiet SDK GA4F w aplikacji na iOS i zintegrowane wszystkie zdarzenia związane z przychodami (in_app_purchase lub przychody finansowane z reklam )
- Włączono eksport Firebase do BigQuery
- App Attribution Partner, który rejestruje również wszystkie zdarzenia związane z przychodami
2. Dostęp do BigQuery Export
Przejdź do zbioru danych Google Cloud
Przejdź do zbioru danych w GA4F, odwiedzając Ustawienia projektu > Integracje > BigQuery. Najpierw należy włączyć przełącznik. Po włączeniu zbiór danych będzie dostępny po około 48 godzinach. Możesz kliknąć link pokazany poniżej, który przeniesie Cię do BigQuery
Uruchom kilka zapytań
Teraz, gdy jesteś w BigQuery, powinieneś zobaczyć wygenerowane tabele dzienne. Na poniższym przykładowym zrzucie ekranu widzimy 64 tabele dzienne, zatem eksport trwa już 64 dni. Jeśli uzyskujesz do niego dostęp po raz pierwszy, możesz zobaczyć tylko 1 tabelę dzienną zawierającą dane z poprzedniego dnia. Po prawej stronie widzisz schemat tabeli. Więcej szczegółów na temat pól można znaleźć tutaj
Aby rozpocząć pisanie zapytania, możesz kliknąć Zapytanie > W nowej karcie
Następnie możesz spróbować uruchomić przykładowe zapytanie w nowej karcie
3. Analizuj dane dotyczące przychodów
Pobieram dane instalacyjne
Teraz, aby rozpocząć budowanie segmentów przychodów, musimy najpierw przyjrzeć się danym użytkowników, którzy zainstalowali aplikację w ciągu ostatnich 24–72 godzin. SKAd Network 4.0 umożliwia przeglądanie danych w ciągu 0-2 dni, natomiast SKAd Network 3.5 domyślnie umożliwia przeglądanie danych w ciągu 24 godzin. (W zależności od możliwości Twojego partnera przypisania aplikacji możesz ogólnie zmodyfikować to okno działania do nie więcej niż 72 godzin). Gdy użytkownicy instalują aplikację i otwierają ją po raz pierwszy, pakiet SDK uruchamia zdarzenie First_open i rejestruje je w BigQuery.
Identyfikator, którego możesz użyć w BigQuery, to user_pseudo_id (zwany także identyfikatorem instancji aplikacji), więc możesz użyć poniższego zapytania, aby znaleźć tych użytkowników
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'
Warto zwrócić uwagę na kilka rzeczy na temat tego zapytania
- Zastąp nazwę tabeli tabelą wyeksportowaną z Analytics. Możesz używać symboli wieloznacznych do wysyłania zapytań do wielu tabel dziennych. Na przykład 2023* przeprowadzi zapytanie do wszystkich danych w roku 2023
- Jeśli masz wielu użytkowników, możesz także wysłać zapytanie tylko z ostatnich 30 dni, aby przyspieszyć przetwarzanie
- Filtrujemy według platformy = „IOS”. Jeśli w projekcie Firebase masz wiele aplikacji na iOS, możesz także dodać filtr dla app_info.firebase_app_id, aby uzyskać dane dla konkretnej aplikacji
Pobieram dane o przychodach
Przyjrzyjmy się teraz zapytaniu, które pozwala znaleźć przychody dla użytkowników. W tym przypadku zakładamy, że zdarzenia związane z przychodami to in_app_purchase i ad_impression. Przychody z in_app_purchase są dostępne w event_value_usd, natomiast w przypadku ad_impression przychody są dostępne w parametrze value, w ramach parametrów event. Jeśli nie znasz parametrów zdarzeń w BigQuery, polecam sprawdzić definicję tutaj i możesz wypróbować to przykładowe zapytanie w naszym oficjalnym podręczniku, który obejmuje również wyodrębnianie wartości z parametrów zdarzenia
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')
Rozumiemy, co robi tutaj zapytanie. To są rzeczy, które byś zauważył
- W klauzuli WHERE filtrujemy po zdarzeniach przychodowych, bo tylko one nas interesują i podobnie jak ostatnim razem szukamy danych iOS
- Teraz w klauzuli SELECT bierzemy wartość i walutę zdarzenia generującego przychody z reklam (ad_impression) oraz wartość event_value_in_usd, gdy zdarzenie ma miejsce w_app_purchase
- Jeśli wysyłasz wiele walut, najpierw musisz dostosować się do jednej waluty na potrzeby tej analizy. Na potrzeby tego przykładu założymy, że walutą przychodów finansowanych z reklam jest również USD
Wynik będzie podobny do poniższego (kolumna user_pseudo_id została tutaj zredagowana).
Łączenie tych danych
Do tej pory uruchomiliśmy dwa zapytania, jedno w celu znalezienia danych użytkowników, którzy zainstalowali i otworzyli aplikację, a drugie w celu znalezienia przychodów tych użytkowników. Przypomnijmy sobie teraz, co omawialiśmy na temat ograniczeń sieci SKAd. Okno przypisania może być dostępne tylko w ciągu 0–2 dni po instalacji. Dlatego będziemy musieli sprawdzić znaczniki czasu zdarzeń pod kątem instalacji i przychodów i zbierać informacje tylko wtedy, gdy nastąpi to w tym przedziale czasowym. Spróbujmy teraz połączyć je w zapytanie, które poda całkowity przychód za każdy post z dwóch dni instalacji aplikacji
#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
Zapytanie po prostu próbuje połączyć dane dotyczące instalacji i danych o przychodach w polu user_pseudo_id, a następnie musimy upewnić się, że sygnatura czasowa przypada w ciągu 2 dni. Jeśli korzystasz z SKAd Network 3.5, wartością domyślną są 24 godziny, więc możesz także zmienić warunek tak, aby obejmował tylko dane z 1 dnia
Grupowanie przychodów w koszyki
Po poprzednim zapytaniu będziesz mieć user_pseudo_id i całkowity przychód
Będziemy teraz musieli połączyć to w segmenty, których będziemy mogli użyć dla naszych zakresów wartości konwersji. W tym celu skorzystamy z funkcji about_quantiles w BigQuery, która automatycznie utworzy za Ciebie te zakresy. Załóżmy na potrzeby tego przykładu, że chcemy utworzyć 5 zakresów, więc możemy po prostu użyć segmentów SELECT około_quantiles(total_revenue, 5) AS
W związku z tym uwzględnijmy to w naszym ogólnym zapytaniu
#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
To zapytanie podzieli przychody na 5 segmentów, a BigQuery spróbuje zachować spójny rozkład percentylowy
Analizuj rozkład użytkowników za pomocą tych zasobników
Jest to opcjonalny krok, jeśli chcesz poznać rozkład użytkowników w poszczególnych segmentach. W naszym przykładzie zakresy segmentów zwrócone w poprzednim zapytaniu to:
- 0,1
- 0,5
- 2
- 2.5
- 5 [w konfiguracji zakresu nie należy stosować ostatniej wartości]
W przypadku końcowych zakresów pominiemy ostatni segment 5, ponieważ jest to zazwyczaj wartość maksymalna, a za ostatni zakres możemy uznać 2,5. Dzieje się tak dlatego, że dostawcy atrybucji aplikacji zwykle obliczają ROAS na podstawie średniej z zakresu, dlatego w celu uzyskania bardziej jednolitych obliczeń należy wykluczyć wartość odstającą.
Spróbujemy teraz sprawdzić liczbę użytkowników dla każdej daty we wszystkich zakresach, abyśmy mogli zrozumieć dzienną liczbę użytkowników w każdym segmencie. Możemy to zrobić za pomocą tego przykładowego zapytania, w którym możesz zastąpić wartości segmentów rzeczywiste dane, a zapytanie będzie wyglądać mniej więcej tak
#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
Zwróci użytkowników w każdym przedziale przychodów dla każdego dnia, jak poniżej. Jeśli w którymkolwiek zasobniku widzisz bardzo niskie liczby lub ogólnie nierówny rozkład, możesz dostosować liczbę zasobników i ponownie uruchomić zapytanie.
Krótkie słowo na temat SKAd Network 4.0
SKAd Network 4.0 zapewnia wiele okien konwersji trwających do 2 dni, 3-7 dni i 8-35 dni. W powyższym podejściu możesz łatwo zmienić okno, aby analizować dane również dla tych dodatkowych scenariuszy. Dostępne są również wartości gruboziarniste LOW, MEDIUM i HIGH. Ponownie, jeśli chcesz zastosować to podejście, możesz myśleć o tym jak o 3 segmentach. Zatem zmieniając liczbę segmentów na 3, możesz uzyskać progi dla NISKIEGO, ŚREDNIEGO i WYSOKIEGO
4. Wdrożenie u Twojego dostawcy atrybucji
W zależności od konkretnej platformy te wskazówki mogą się zmienić. Aby uzyskać najbardziej aktualne informacje na ten temat, skontaktuj się z przedstawicielami platformy. Na potrzeby tego przykładu przyjrzymy się, jak możemy obecnie wdrożyć to w AppsFlyer
W zapytaniu, które uruchomiliśmy wcześniej, końcowe zakresy otrzymane jako dane wyjściowe były następujące
- Zakres 1: 0 do 0,1
- Zakres 2: 0,1 do 0,5
- Zakres 3: 0,5 do 2
- Zakres 4: 2 do 2,5
Pamiętaj, że postanowiliśmy zignorować ostatni zakres przychodów , ponieważ będzie to wartość odstająca i wypaczyć średnie obliczenia dla Twojego dostawcy atrybucji aplikacji.
AppsFlyer oferuje SKAN Conversion Studio , w którym wprowadzenie tego bezpośrednio do interfejsu użytkownika jest dość proste. Możesz użyć wersji 4.0 bezpośrednio lub użyć trybu „Niestandardowego”, jeśli używasz wersji 3.5, i dodać pomiar „Przychodów”. Następnie możesz po prostu dodać zakresy przychodów obliczone na podstawie wcześniejszej analizy.
Najlepsze praktyki i wnioski dotyczące Google Ads
Chcielibyśmy podzielić się z Tobą kilkoma rekomendacjami, jeśli prowadzisz kampanie w Google Ads i mierzysz wpływ za pomocą schematu wartości konwersji w sieci SKAd
- Upewnij się, że okno konwersji, którego używasz w Google Ads, odpowiada oknu aktywności określonemu na platformie App Attribution. W przypadku sieci SKAd 3.5 nastąpi to prawdopodobnie w ciągu 1–3 dni, więc możesz to odpowiednio dostosować w Google Ads, wykonując czynności wymienione tutaj
- Jeśli korzystasz z Appsflyer, obecnie domyślny licznik zdarzeń wynosi 1, co oznacza, że nie uwzględnia on wielu zdarzeń na użytkownika. Jeśli używasz modelu opartego na zdarzeniach do pomiaru SKAN i porównujesz go z kampaniami tCPA w Google Ads, możesz dostosować, postępując zgodnie ze wskazówkami z Appsflyer
5. Gratulacje
Gratulacje, pomyślnie skonfigurowałeś schemat wartości konwersji sieciowej SKAd. Możesz teraz monitorować dane w raporcie sieci SKAd Google Ads, aby sprawdzić wartości konwersji w kampaniach Google Ads po jego uruchomieniu
Nauczyłeś się
- Jak eksplorować bogate, surowe dane z GA4F w BigQuery
- Analityczne podejście do obliczania koszyków przychodów dla Twojej firmy
- Wdróż schemat za pomocą AppsFlyer