Перейти к основному содержимому

Сравнение по идентификаторам и событиям

Краткое содержание

Как сравнивать данные
В статье описаны способы сравнения данных МТС Аналитики с Appmetrica. Основные параметры сравнения: Client ID, User ID, события, параметры событий и идентификаторы сессий. Для каждого способа указаны особенности, возможные расхождения и рекомендации.

Способ 1. Идентификатор устройства (Client ID)
Сравнение по Client ID может давать значительные расхождения из-за различий в логике учёта идентификаторов. Рекомендуется проверять стабильность Client ID через GAID. В таблице указаны примеры результатов сравнения.

Способ 2. Уникальный идентификатор пользователя (UserId)
Сравнение по UserId позволяет точнее анализировать данные в авторизованной зоне. Для реализации используется скрипт, аналогичный сравнению по Client ID, с заменой параметров.

Способ 3. Общее количество событий
Сравнение по количеству событий показывает разницу по дням, но не гарантирует идентичности данных. В Appmetrica и МТС Аналитике могут отсутствовать одни и те же события (например, технические).

Способ 4. Уникальные сочетания параметров событий
Сравнение по уникальным сочетаниям EventName + EventLabel + EventCategory позволяет выявить различия в событиях. В таблице приведён пример результата сравнения.

Способ 5. Идентификатор сессии (ma_session_id)
Сравнение по сессиям не рекомендуется из-за различий в логике формирования сессий. В МТС Аналитике сессии могут начинаться с технических событий, в Appmetrica — нет.

Причины различий в данных
В статье перечислены 8 причин расхождений: разное время отслеживания, различия в событиях, фильтрация данных, временные задержки, методики подсчёта, проблемы с сетью, настройка SDK и порядок их загрузки.

Используйте статью, если ваша задача — узнать больше про точность данных МТС Аналитики и сравнить данные Аналитики с другой системой. В этой статье рассматривается сравнение только с Appmetrica.

Заметка

Сравнивать данные МТС Аналитики с данными других систем, включая Appmetrica, можно по различным параметрам. Однако важно понимать значение и логику расчёта этих параметров в каждой системе аналитики.

Как сравнивать данные

Способ сравненияОписаниеОсобенность
По Client ID (ma_client_id)Пользовательский параметр. Уникальный идентификатор устройства, который присваивается МТС АналитикойВозможно сильное расхождение в данных при сравнении. В МТС Аналитике и Appmetrica различается логика учёта идентификаторов, поэтому не рекомендуем использовать этот способ
По User IDПользовательский параметр. Идентификатор пользователя, задается на стороне приложенияСамый точный способ сравнить данные по авторизованной зоне
По событиямОбщее количество событийКоличество уникальных событий в системах может не совпадать, так как одна система может учитывать одни события, например, технические, а другая — нет
По параметрам событийОбщее количество уникальных сочетаний EventName (название события) + EventLabel (ярлык события) + EventCategory (категория события)Учитываются только сочетания название + ярлык + категория
По количеству идентификаторов сессий (ma_session_id)Уникальный идентификатор сессии, который формируется автоматически и объединяет события в сессииВозможно сильное расхождение в данных при сравнении. В МТС Аналитике и Appmetrica различается логика формирования сессий, поэтому не рекомендуем использовать этот способ

Способ 1. Идентификатор устройства (Client ID)

Сравнение можно производить по идентификаторам устройств: в МТС Аналитике — ma_client_id, в Appmetrica — appmetrica_device_id.

Замените значения переменных из блока:

with на актуальные для вашего продукта: start_date, end_date, os_name, app_version, build_version

from на соответствующую схему для вашего продукта, в коде эта схема называется your_product

Скрипт для сравнения:

WITH
'2024-01-01' AS start_date
, '2024-01-24' AS end_date
, 'android' AS os_name
, '1.12.0' AS app_version
, '201' AS build_version
, mtsa AS (
SELECT
count(DISTINCT ma_client_id) AS devices_mtsa
, toDate(ma_hit_datetime) AS dates
FROM your_product.ma_app_hits mwh
WHERE
toDate(ma_hit_datetime) BETWEEN start_date AND end_date
AND ma_os_name ilike os_name
AND ma_app_version_name = app_version
AND ma_app_build_number = build_version
GROUP BY dates)
, ym AS (
SELECT
count(DISTINCT appmetrica_device_id) AS devices_ym
, toDate(event_datetime) AS dates
FROM your_product.app_events_all whav
WHERE
toDate(event_datetime) BETWEEN start_date AND end_date
AND os_name ilike os_name
AND app_version_name = CONCAT(app_version, '+', build_version)
GROUP BY dates)
SELECT
devices_mtsa
, devices_ym
, round(devices_mtsa/devices_ym*100, 2) prc
, dates
FROM mtsa
FULL JOIN ym
USING(dates)
order by dates;

Подробнее про указанные в скрипте параметры

Расхождение при таком сравнении может быть связано с нестабильностью идентификатора устройства в Appmetrica.

Проверка стабильности Client ID

Стабильность Client ID можно проверить с помощью GAID. Для проверки используется рекламный идентификатор (GAID), который отсылается и в Appmetrica, и в МТС Аналитику. Затем подсчитывается количество Client ID и appmetrica_device_id для каждого GAID.

Замените значения переменных из блока from на соответствующую схему для вашего продукта, в коде эта схема называется your_product. Скрипт для сравнения:


WITH mtsa AS (
SELECT
ma_gaid gaid
, count(DISTINCT ma_client_id ) mtsa_count
FROM your_product.ma_app_hits mah
WHERE ma_gaid <> ''
GROUP BY ma_gaid
HAVING mtsa_count > 1
), ym AS (
SELECT
google_aid gaid
, count(DISTINCT appmetrica_device_id ) ym_counta
FROM your_product.app_events_all aea
WHERE google_aid <> ''
GROUP BY google_aid
HAVING ym_counta > 1
)
SELECT *
FROM mtsa
INNER JOIN ym USING(gaid)
ORDER BY 3 desc

Например, можно получить такой результат.

gaidmtsa_countym_count
hg12345678903997
yh9876543217486
jo54321678904547
При проверке стабильности параметра Client ID с помощью GAID важно учитывать
  1. На каждый GAID в МТС Аналитике приходится меньшее количество идентификаторов, чем в Appmetrica, поэтому сравнение по Client ID может давать непредсказуемый результат.
  2. Для большинства девайсов Huawei отсутствует Client_Id, поскольку при генерации МТС Аналитика использует специальный параметр в устройстве (app_set_id), которого нет в этих устройствах.

Способ 2. Уникальный идентификатор пользователя (UserId)

Для более точного сравнения систем рекомендуем использовать идентификатор клиента. Это позволит сравнить данные по авторизованной зоне, данные в неавторизованной зоне не учитываются.

Чтобы сравнить данные по UserId, используйте скрипт для сравнения по Client ID, заменив необходимые параметры.

Способ 3. Общее количество событий

Вы сможете узнать разницу в количестве событий по каждому дню. Не рекомендуем использовать этот способ для проверки идентичности самих данных.

Замените значения переменных из блока:

with на актуальные для вашего продукта: start_date, end_date, os_name, app_version, build_version

from на соответствующую схему для вашего продукта, в коде эта схема называется your_product

Скрипт для сравнения:

WITH

'2024-01-01' AS start_date
, '2024-01-24' AS end_date
, 'android' AS os_name
, '1.12.0' AS app_version
, '201' AS build_version
, mtsa AS (
SELECT
count() AS hit_mtsa
, toDate(ma_hit_datetime) AS dates
FROM your_product.ma_app_hits mwh
WHERE
toDate(ma_hit_datetime) BETWEEN start_date AND end_date
AND ma_os_name ilike os_name
AND ma_app_version_name = app_version
AND ma_app_build_number = build_version
GROUP BY dates)
, ym AS (
SELECT
count() AS hits_ym
, toDate(event_datetime) AS dates
FROM your_product.app_events_all whav
WHERE
toDate(event_datetime) BETWEEN start_date AND end_date
AND os_name ilike os_name
AND app_version_name = CONCAT(app_version, '+', build_version)
GROUP BY dates)
SELECT
hit_mtsa
, hits_ym
, round(hit_mtsa/hits_ym*100, 2) prc
, dates
FROM mtsa
FULL JOIN ym
USING(dates);
Важно

В Appmetrica или МТС Аналитике могут быть события, которые не учитываются в другой системе аналитике, например, технические. Для более точного сравнения по событиям рекомендуем использовать Способ 4.

Способ 4. Уникальные сочетания параметров событий

Сравнение можно производить по уникальным событиям, отсылаемым в обе системы. Однако, в Appmetrica отсутствует уникальный идентификатор события, поэтому можно сравнить количество уникальных сочетаний «EventName (название события)» + «EventLabel (ярлык события)» + «EventCategory (категория события)» по датам.

Подробнее про параметры событий

Замените значения переменных из блока:

with на актуальные для вашего продукта: start_date, end_date, os_name, app_version, build_version

from на соответствующую схему для вашего продукта, в коде эта схема называется your_product

Скрипт для сравнения:

WITH
'2024-01-01' AS start_date
, '2024-01-24' AS end_date
, 'android' AS os_name
, '1.12.0' AS app_version
, '201' AS build_version
, mtsa AS (
SELECT
count(DISTINCT concat(ma_hit_name, EventCategory, EventLabel)) AS events_mtsa
, toDate(ma_hit_datetime) AS dates
FROM your_product.ma_app_hits mwh
WHERE
toDate(ma_hit_datetime) BETWEEN start_date AND end_date
AND ma_os_name ilike os_name
AND ma_app_version_name = app_version
AND ma_app_build_number = build_version
GROUP BY dates)
, ym AS (
SELECT
count(DISTINCT concat(event_name, eventCategory, eventLabel)) AS event_ym
, toDate(event_datetime) AS dates
FROM your_product.app_events_all whav
WHERE
toDate(event_datetime) BETWEEN start_date AND end_date
AND os_name ilike os_name
AND app_version_name = CONCAT(app_version, '+', build_version)
GROUP BY dates)
SELECT
events_mtsa
, event_ym
, round(events_mtsa/event_ym*100, 2) prc
, dates
FROM mtsa
FULL JOIN ym
USING(dates);

Пример результата:

events_mtsaevents_ymdates
12312301.01.2024
15614902.01.2024
17517503.01.2024
78978704.01.2024

Также можно сравнить количество событий в разбивке каждого сочетания.

Замените значения переменных из блока:

with на актуальные для вашего продукта: start_date, end_date, os_name, app_version, build_version

from на соответствующую схему для вашего продукта, в коде эта схема называется your_product

Скрипт для сравнения:

WITH
'2024-01-01' AS start_date
, '2024-01-24' AS end_date
, 'android' AS os_name
, '1.12.0' AS app_version
, '201' AS build_version
,ya AS (
SELECT
event_name AS ya_hit
, eventCategory AS ya_cat
, eventLabel AS ya_label
, count(DISTINCT hitID) AS ya_cnt
FROM your_product.app_events_all
WHERE
toDate(event_datetime) BETWEEN start_date AND end_date
AND os_name ilike os_name
AND app_version_name = CONCAT(app_version, '+', build_version)
GROUP BY
event_name
, eventCategory
, eventLabel)
, mtsa AS (
SELECT
ma_hit_name AS mtsa_hit
, EventCategory AS mtsa_cat
, EventLabel AS mtsa_label
, count(DISTINCT ma_hit_id) AS mtsa_cnt
FROM your_product.ma_app_hits mwh
WHERE
toDate(ma_hit_datetime) BETWEEN start_date AND end_date
AND ma_os_name ilike os_name
AND ma_app_version_name = app_version
AND ma_app_build_number = build_version
GROUP BY ma_hit_name, EventCategory, EventLabel)
SELECT
ya_hit
, ya_cat
, ya_label
, mtsa_hit
, mtsa_cat
, mtsa_label
, ya.ya_cnt
, mtsa.mtsa_cnt
, round(mtsa.mtsa_cnt/ya.ya_cnt*100, 2) prc
FROM ya
FULL JOIN mtsa
ON
ya_cat = mtsa_cat
AND ya_hit = mtsa_hit
AND ya_label = mtsa_label
ORDER BY ya.ya_cnt + mtsa.mtsa_cnt DESC;

Например, при таком сравнении можно увидеть, что в одной системе есть событие scrn, а в другой — нет.

Способ 5. Идентификатор сессии (ma_session_id)

Не рекомендуем использовать сравнение по количеству идентификаторам сессий из-за различающийся логики расчёта и формирования сессий в Appmetrica и МТС Аналитике. В Аналитике сессию может начать технические события типа page-ping, а в Appmetrica точной информации об этом нет.

ya_hitya_catya_labelmtasa_hitmtsa_catmtsa_hitya_cntmtsa_cnt
Hit1Cat1Label1Hit1Cat1Hit12 6002 478
Hit2Cat2Label2Hit2Cat2Hit25 2905 270
Hit3Cat3Label3Hit3Cat3Hit31 4091 399
Hit4Cat4Label4Hit4Cat4Hit47 5507 498
scrn8 000
Hit6Cat5Label5Hit6Cat5Hit61 5781 590

Причины различий в данных

  1. Начальное время отслеживания: если вы запустили отслеживание событий в разных системах в разное время, количество отслеживаемых событий будет различаться.
  2. Отслеживание разных видов событий: разные системы аналитики могут отслеживать разное количество и виды событий. Например, одна система может отслеживать клики на кнопки, а другая — прокрутку страницы.
  3. Фильтрация данных: в разных системах могут применяться разные правила и параметры для фильтрации неактивных или «сомнительных» активностей пользователей (боты или повторные действия).
  4. Временные различия обновления данных: некоторые системы могут обновлять данные в реальном времени, в то время как другие — с задержкой.
  5. Методика подсчета уникальных событий: разные системы могут использовать разные методики для определения уникальности события.
  6. Отклонения из-за проблем с сетью: передача данных о событиях может быть нестабильна из-за проблем с сетью, сервером или браузером. Это может привести к потере данных.
  7. Проблемы с конфигурацией отслеживания: есть вероятность, что отслеживание событий не было правильно настроено в одной из систем.
  8. Порядок SDK в коде: При установке одного SDK выше другого (в коде ресурса), он будет быстрее отрабатывать данные. Это может уменьшить количество поступающих событий.