Следует ли усреднять метрики активных пользователей Firebase (DAU, WAU, MAU)?

1

Я пытаюсь понять, лучше ли составлять отчет за месяц по текущему отчету о метриках пользователей "Активные" в Firebase (см. График ниже), или, скорее, самостоятельно рассчитать и сообщить среднее значение каждого из этих показателей за определенный период.

Изображение 174551

На первый взгляд на панели инструментов отображаются активные пользователи в течение 1-го, 7-го и 28-дневного периода в декабре 2018 года, но на самом деле отображается только последний день выбранных значений диапазона дат (в право). Это приятно знать, но немного вводит в заблуждение сравнение только последних значений даты для моего анализа по месяцам. Альтернативный подход может состоять в том, чтобы самостоятельно рассчитать среднее значение за выбранный период:

Изображение 174551

Применительно к демонстрационному набору данных Firebase я получил следующие цифры:

Панель инструментов Firebase:

  • 28-дневных активных пользователей: 8661
  • Активных пользователей: 7 дней: 3874
  • Активных пользователей: 1 день: 1111

Мое Расчетное Среднее:

  • Активных пользователей: 28 дней: 8762
  • Активные пользователи: 7 дней: 3663
  • Активных пользователей: 1 день: 1112

Разница дельта здесь небольшая, но я вижу некоторые существенные различия в нашем приложении, в котором миллионы активных пользователей в месяц.

Вопрос:

  • Если вы используете Firebase в настоящее время, как вы сообщите об этом?
  • Вы копируете и вставляете последний день выбранного периода и отчитываетесь по нему за месяц, или же вы усредняете каждую из 1/7/28-дневных метрик, чтобы получить лучшее представление месяца?
  • Если вы усредните свои показатели, не могли бы вы объяснить, почему?
Теги:
firebase
firebase-analytics

1 ответ

1
Лучший ответ

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

Основываясь на подтверждающих документах Firebase, я суммировал определения для каждой из метрик ниже. Очень важно указать, что только уникальные пользователи должны учитываться по каждой метрике (с учетом выбранного диапазона дат).

  • 1-дневные активные пользователи: 1-дневный уникальный активный пользователь user_engagement к приложению на переднем плане устройства и зарегистрировал событие user_engagement в течение последнего 1-дневного периода (с учетом выбранного диапазона дат).
  • 7-дневные активные пользователи: 7-дневный уникальный активный пользователь user_engagement к приложению на переднем плане устройства и зарегистрировал событие user_engagement в течение последнего 7-дневного периода (с учетом выбранного диапазона дат).
  • 28-дневные активные пользователи: 28-дневный уникальный активный пользователь user_engagement к приложению на переднем плане устройства и зарегистрировал событие user_engagement в течение последнего 28-дневного периода (с учетом выбранного диапазона дат).

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

Изображение 174551

Методология расчета каждой метрики/аудитории:

  • Рассчитайте DAU за конкретный месяц, используя: Average 1-day active user metric.
  • Рассчитайте WAU за конкретный месяц, используя: Average 7-day active user metric. Я рассчитал это путем усреднения снимков на 7, 14, 21, 28 декабря.
  • Рассчитайте MAU для определенного месяца, используя: Non-averaged 28-day active user metric. Основная причина не усреднения этого значения показателя заключается в том, что я хочу получить только один снимок за весь месяц. Если бы я использовал здесь средние значения, я бы также учел пользователей, которые были активны в предыдущем месяце.

AVG 1-дневная уникальная активная метрика пользователя (Android, декабрь 2018 г.)

# StandardSQL
SELECT
  ROUND(AVG(users),0) AS users
FROM 
(
  SELECT
  event_date,
  COUNT(DISTINCT user_pseudo_id) AS users
FROM '<id>.events_*'
WHERE
  event_name = 'user_engagement'
  AND _TABLE_SUFFIX BETWEEN '20181201' AND '20181231'
  AND platform = "ANDROID"
GROUP BY 1
) table

# or you could also use code below, but you will have to add in the remaining days' code to query against the entire month. 

-- Set your variables here
WITH timeframe AS (SELECT DATE("2018-12-01") AS start_date, DATE("2018-12-31") AS end_date)

-- Query your variables here
SELECT ROUND(AVG(users),0) AS users
FROM
(
SELECT event_date, COUNT(DISTINCT user_pseudo_id) AS users
FROM '<id>.events_*'AS z, timeframe AS t
WHERE
  event_name = 'user_engagement'
  AND _TABLE_SUFFIX > FORMAT_DATE('%Y%m%d', DATE_ADD(t.end_date, INTERVAL - 1 DAY))
  AND _TABLE_SUFFIX <= FORMAT_DATE('%Y%m%d', DATE_ADD(t.end_date, INTERVAL 0 DAY))
  AND platform = "ANDROID"
GROUP BY 1

UNION ALL 

SELECT event_date, COUNT(DISTINCT user_pseudo_id) AS users
FROM '<id>.events_*'AS z, timeframe AS t
WHERE
  event_name = 'user_engagement'
  AND _TABLE_SUFFIX > FORMAT_DATE('%Y%m%d', DATE_ADD(t.end_date, INTERVAL - 2 DAY))
  AND _TABLE_SUFFIX <= FORMAT_DATE('%Y%m%d', DATE_ADD(t.end_date, INTERVAL - 1 DAY))
  AND platform = "ANDROID"
GROUP BY 1
... 
...
...
...
) avg_1_day_active_users

AVG 7-дневная уникальная активная метрика пользователя (Android, декабрь 2018 г.)

-- Set your variables here
WITH timeframe AS (SELECT DATE("2018-12-01") AS start_date, DATE("2018-12-31") AS end_date)

-- Query your variables here
SELECT ROUND(AVG(users),0) AS users
FROM
(
SELECT COUNT(DISTINCT user_pseudo_id) AS users
FROM '<id>.events_*'AS z, timeframe AS t
WHERE
  event_name = 'user_engagement'
  AND _TABLE_SUFFIX > FORMAT_DATE('%Y%m%d', DATE_ADD(t.end_date, INTERVAL - 7 DAY))
  AND _TABLE_SUFFIX <= FORMAT_DATE('%Y%m%d', DATE_ADD(t.end_date, INTERVAL 0 DAY))
  AND platform = "ANDROID"

UNION ALL

SELECT COUNT(DISTINCT user_pseudo_id) AS users
FROM '<id>.events_*'AS z, timeframe AS t
WHERE
  event_name = 'user_engagement'
  AND _TABLE_SUFFIX > FORMAT_DATE('%Y%m%d', DATE_ADD(t.end_date, INTERVAL - 14 DAY))
  AND _TABLE_SUFFIX <= FORMAT_DATE('%Y%m%d', DATE_ADD(t.end_date, INTERVAL - 7 DAY))
  AND platform = "ANDROID"

UNION ALL

SELECT COUNT(DISTINCT user_pseudo_id) AS users
FROM '<id>.events_*'AS z, timeframe AS t
WHERE
  event_name = 'user_engagement'
  AND _TABLE_SUFFIX > FORMAT_DATE('%Y%m%d', DATE_ADD(t.end_date, INTERVAL - 21 DAY))
  AND _TABLE_SUFFIX <= FORMAT_DATE('%Y%m%d', DATE_ADD(t.end_date, INTERVAL - 14 DAY))
  AND platform = "ANDROID"

UNION ALL

SELECT COUNT(DISTINCT user_pseudo_id) AS users
FROM '<id>.events_*'AS z, timeframe AS t
WHERE
  event_name = 'user_engagement'
  AND _TABLE_SUFFIX > FORMAT_DATE('%Y%m%d', DATE_ADD(t.end_date, INTERVAL - 28 DAY))
  AND _TABLE_SUFFIX <= FORMAT_DATE('%Y%m%d', DATE_ADD(t.end_date, INTERVAL - 21 DAY))
  AND platform = "ANDROID"
) avg_7_day_active_users

Не усредненная 28-дневная уникальная активная метрика пользователя (Android, декабрь 2018 г.)

# StandardSQL
-- Set your variables here
WITH timeframe AS (SELECT DATE("2018-12-01") AS start_date, DATE("2018-12-31") AS end_date)

-- Query your variables here
SELECT COUNT(DISTINCT user_pseudo_id) AS users
FROM '<id>.events_*'AS z, timeframe AS t
WHERE
  event_name = 'user_engagement'
  AND _TABLE_SUFFIX > FORMAT_DATE('%Y%m%d', DATE_ADD(t.end_date, INTERVAL - 28 DAY))
  AND _TABLE_SUFFIX <= FORMAT_DATE('%Y%m%d', DATE_ADD(t.end_date, INTERVAL 0 DAY))
  AND platform = "ANDROID"

Примечания стороны:

  • Я знаю, что некоторые компании все еще рассчитывают свои MAU за 30-дневный период. Так что вам придется проверить и посмотреть, что лучше всего подходит для вашей компании.
  • Единственная проблема, с которой я столкнулся при расчете MAU, заключается в том, что он еще не учитывает начальные дни каждого месяца. Возможно, можно взять среднее значение 31 дня - 28 дней, 30 дня - 28 дней, 29 дня - 28 дней, 28 дня - 28 дней...
  • Я нашел примеры запросов Firebase Team также полезными, но их активные метрики учитывают только количество активных пользователей во время выполнения запроса (см. Пример ниже):
SELECT
  COUNT(DISTINCT user_id)
FROM
  /* PLEASE REPLACE WITH YOUR TABLE NAME */
  'YOUR_TABLE.events_*'
WHERE
  event_name = 'user_engagement'
  /* Pick events in the last N = 20 days */
  AND event_timestamp > UNIX_MICROS(TIMESTAMP_SUB(CURRENT_TIMESTAMP, INTERVAL 20 DAY))
  /* PLEASE REPLACE WITH YOUR DESIRED DATE RANGE */
  AND _TABLE_SUFFIX BETWEEN '20180521' AND '20240131';

Ещё вопросы

Сообщество Overcoder
Наверх
Меню