gpt4 book ai didi

android - 应该使用平均 Firebase 活跃用户指标(DAU、WAU、MAU)吗?

转载 作者:行者123 更新时间:2023-12-01 18:30:27 24 4
gpt4 key购买 nike

我试图了解是否最好按月报告当前 Firebase“Activity ”用户指标报告(查看下方图表),还是自行计算并报告 平均 特定时期内每个指标的值。

enter image description here

乍一看,仪表板显示了 2018 年 12 月的 1 天、7 天和 28 天活跃用户,但实际上它仅显示所选日期范围值的最后一天(在对)。很高兴知道这一点,但在我的逐月分析中只比较最后一个日期的值有点误导。另一种方法是自行计算 平均 在选定的时间段内:

enter image description here

应用于 Firebase Demo 数据集,我得到以下数字:

Firebase 仪表板:

  • 28天活跃用户:8661
  • 7天活跃用户:3874
  • 1天活跃用户:1111

  • 我的计算平均值:
  • 28天活跃用户:8762
  • 7天活跃用户:3663
  • 1天活跃用户:1112

  • 这里的增量差异很小,但我发现我们的应用程序有一些显着差异,每月有数百万活跃用户。

    问题:
  • 如果您目前正在使用 Firebase,您如何报告它?
  • 您是复制并粘贴所选期间的最后一天并报告一个月,还是您还对每个 1/7/28 天指标求平均值以更好地表示该月?
  • 如果你平均你的指标,你能解释一下为什么吗?
  • 最佳答案

    为了回答这个问题,我想先回顾一下谷歌的适用定义,然后再进行计算(上次回顾:2021 年 7 月)。

    谷歌给了我们以下定义:
    GA4 - Automatically collected events

  • session_start (app, web) - 当用户使用应用程序或网站时
  • user_engagement (app, web) - 定期,当应用程序在前台或网页处于焦点时
    使用参数:engage_time_msec

  • GA4 - How the number of sessions is calculated
  • Sessions :在您的网站或应用程序上开始的 session 数(触发 session_start 事件)。
  • App session timeout duration :当应用程序移至后台时,应用程序 session 开始超时,但您可以选择通过在应用程序处于后台时发送的事件包含extend_session 参数(值为1)来扩展该 session 。如果您的应用程序经常在后台使用(例如导航和音乐应用程序),这将非常有用。通过 setSessionTimeoutDuration 更改应用程序 session 的默认超时 30 分钟。方法。
  • Engaged sessions :持续 10 秒或更长时间,或具有 1 个或更多转化事件或 2 个或更多页面浏览量的 session 数。

  • GA4 Dashboard
  • Monthly (28-day), Weekly (7-day), and Daily (1-day) Active Users日期范围,包括与上一个日期范围相比的百分比波动。活跃用户在设备前台与应用程序互动,并记录了 user_engagement 事件。
  • Daily user engagement - 该日期范围内每位用户的平均每日参与度,包括与上一个日期范围相比的百分比波动。

  • 我对定义的看法:
    根据支持的 GA4/Firebase 文档,我(重新)总结了以下每个指标的定义。非常重要的一点是,在每个指标(给定选定的日期范围内)上只计算唯一身份用户,这一点非常重要。无需 UNNEST因为我们已经在 event_name 上查询了-level,不是例如 event_parameter -等级。
  • 1天活跃用户: 1天唯一活跃用户已在设备前台使用应用程序 已登录 user_engagement过去 1 天内(给定选定日期范围)内的事件。
  • 7天活跃用户:一个 7 天 唯一活跃用户已在设备前台使用应用程序 已登录 user_engagement过去 7 天内(给定所选日期范围)内的事件。
  • 28天活跃用户:一个 28 天 唯一活跃用户已在设备前台使用应用程序 已登录 user_engagement过去 28 天内(给定选定日期范围)内的事件。

  • 在下面的单元格中,您可以看到如何计算 12 月的指标:
    enter image description here
    计算每个指标/受众的方法:
  • 使用以下方法计算特定月份的 DAU:Average 1-day active user metric .
  • 使用以下方法计算特定月份的 WAU:Average 7-day active user metric .我通过对 12 月 7 日、14 日、21 日、28 日的快照进行平均来计算出这一点。
  • 使用以下方法计算特定月份的 MAU:Non-averaged 28-day active user metric .不平均这个指标值的主要原因是,因为我只想拥有整个月的一个快照。如果我在这里使用平均值,我还会考虑上个月的活跃用户。

  • 1.a) 平均 1 天唯一活跃用户指标
    # 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
    1.b) 平均 1 天唯一活跃用户指标
    更新的版本预定 daily到 BQ 目标表 daus_android_{run_time|"%Y%m%d"}有写偏好 WRITE_APPEND ,可能如下所示。我之前进行了深入研究,并确定将日内表事件传播到永久 BQ 表最多可能需要 48 小时(因此在查询中需要 3 天)。
    with base AS (
    SELECT *
    FROM `<id>.analytics_<number>.events_*`
    WHERE (_TABLE_SUFFIX >= FORMAT_DATE('%Y%m%d', DATE_ADD(@run_date, INTERVAL - 3 DAY)) AND _TABLE_SUFFIX < FORMAT_DATE('%Y%m%d', DATE_ADD(@run_date, INTERVAL - 2 DAY)))
    AND platform = "ANDROID"
    AND event_name = 'user_engagement'
    ), app AS (
    SELECT
    FORMAT_DATE('%Y%m%d', @run_date) AS _currentdate,
    FORMAT_DATE('%Y%m%d', DATE_ADD(@run_date, INTERVAL - 3 DAY)) AS _begindate,
    FORMAT_DATE('%Y%m%d', DATE_ADD(@run_date, INTERVAL - 2 DAY)) AS _enddate,
    TIMESTAMP_DIFF(TIMESTAMP(DATE_ADD(@run_date, INTERVAL - 2 DAY)), TIMESTAMP(DATE_ADD(@run_date, INTERVAL - 3 DAY)), HOUR) AS _hoursdiff,
    COUNT(DISTINCT user_pseudo_id) AS _uniqusers
    FROM base
    )
    SELECT
    app._currentdate,
    app._begindate,
    app._enddate,
    app._hoursdiff,
    app._uniqusers
    FROM app;
    1.c) 平均 1 天唯一活跃用户指标
    WITH app as (
    SELECT
    FORMAT_DATE('%Y%m%d', @run_date) AS _currentdate,
    FORMAT_DATE('%Y%m%d', DATE_ADD(@run_date, INTERVAL - 3 DAY)) AS _begindate,
    FORMAT_DATE('%Y%m%d', DATE_ADD(@run_date, INTERVAL - 2 DAY)) AS _enddate,
    TIMESTAMP_DIFF(TIMESTAMP(DATE_ADD(@run_date, INTERVAL - 2 DAY)), TIMESTAMP(DATE_ADD(@run_date, INTERVAL - 3 DAY)), HOUR) AS _hoursdiff,
    COUNT(DISTINCT user_pseudo_id) AS _uniqusers
    FROM `<gcp-project>.analytics_<id>.events_*`
    WHERE
    platform = "ANDROID"
    AND event_name = 'user_engagement'
    AND _TABLE_SUFFIX >= FORMAT_DATE('%Y%m%d', DATE_ADD(@run_date, INTERVAL - 3 DAY))
    AND _TABLE_SUFFIX < FORMAT_DATE('%Y%m%d', DATE_ADD(@run_date, INTERVAL - 2 DAY))
    )

    SELECT
    app._currentdate,
    app._begindate,
    app._enddate,
    app._hoursdiff,
    app._uniqusers
    FROM app
    2.a) 平均 7 天唯一活跃用户指标
    -- 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
    2.b) 平均 7 天唯一活跃用户指标
    更新的版本预定 daily到 BQ 目标表 waus_android_{run_time|"%Y%m%d"}有写偏好 WRITE_APPEND ,可能看起来像:
    with base AS (
    SELECT *
    FROM `<id>.analytics_<number>.events_*`
    WHERE (_TABLE_SUFFIX >= FORMAT_DATE('%Y%m%d', DATE_ADD(@run_date, INTERVAL - 9 DAY)) AND _TABLE_SUFFIX < FORMAT_DATE('%Y%m%d', DATE_ADD(@run_date, INTERVAL - 2 DAY)))
    AND platform = "ANDROID"
    AND event_name = 'user_engagement'
    ), app AS (
    SELECT
    FORMAT_DATE('%Y%m%d', @run_date) AS _currentdate,
    FORMAT_DATE('%Y%m%d', DATE_ADD(@run_date, INTERVAL - 9 DAY)) AS _begindate,
    FORMAT_DATE('%Y%m%d', DATE_ADD(@run_date, INTERVAL - 2 DAY)) AS _enddate,
    TIMESTAMP_DIFF(TIMESTAMP(DATE_ADD(@run_date, INTERVAL - 2 DAY)), TIMESTAMP(DATE_ADD(@run_date, INTERVAL - 9 DAY)), HOUR) AS _hoursdiff,
    COUNT(DISTINCT user_pseudo_id) AS _uniqusers
    FROM base
    )
    SELECT
    app._currentdate,
    app._begindate,
    app._enddate,
    app._hoursdiff,
    app._uniqusers
    FROM app;
    3.a) 非平均 28 天唯一活跃用户指标
    # 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"
    3.b) 非平均 28 天唯一活跃用户指标
    更新的版本预定 daily到 BQ 目标表 maus_android_{run_time|"%Y%m%d"}有写偏好 WRITE_APPEND ,可能看起来像:
    with base AS (
    SELECT *
    FROM `<id>.analytics_<number>.events_*`
    WHERE (_TABLE_SUFFIX >= FORMAT_DATE('%Y%m%d', DATE_ADD(@run_date, INTERVAL - 30 DAY)) AND _TABLE_SUFFIX < FORMAT_DATE('%Y%m%d', DATE_ADD(@run_date, INTERVAL - 2 DAY)))
    AND platform = "ANDROID"
    AND event_name = 'user_engagement'
    ), app AS (
    SELECT
    FORMAT_DATE('%Y%m%d', @run_date) AS _currentdate,
    FORMAT_DATE('%Y%m%d', DATE_ADD(@run_date, INTERVAL - 30 DAY)) AS _begindate,
    FORMAT_DATE('%Y%m%d', DATE_ADD(@run_date, INTERVAL - 2 DAY)) AS _enddate,
    TIMESTAMP_DIFF(TIMESTAMP(DATE_ADD(@run_date, INTERVAL - 2 DAY)), TIMESTAMP(DATE_ADD(@run_date, INTERVAL - 30 DAY)), HOUR) AS _hoursdiff,
    COUNT(DISTINCT user_pseudo_id) AS _uniqusers
    FROM base
    )
    SELECT
    app._currentdate,
    app._begindate,
    app._enddate,
    app._hoursdiff,
    app._uniqusers
    FROM app;
    附注:
  • 我知道有些公司仍在计算 30 天内的 MAU。因此,您必须进行测试,看看什么最适合您的公司。
  • 您可以自己计算DAU-to-MAU -ratio 或 WAU-to-MAU -ratio 从上述示例中确定您的应用程序的 stickiness
  • 我对 MAU 计算的唯一问题是它尚未考虑每个月的开始日期。也许可以取平均 Day31 - 28days, Day30 - 28days, Day29 - 28days, Day28 - 28days ...
  • 我找到了 Firebase 团队的样本 queries也有帮助,但它们的 Activity 指标仅在执行查询时处理 Activity 用户数(查看下面的示例):

  • 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';

    🥷 忍者小贴士 🥷
    将您的团队/公司/产品的重点从 Vanity Metrics 转移至 Actionable Metrics ,考虑添加您的主要转化事件之一作为上述查询的一部分(例如 in_app_purchase 代表 e-commerce companies):
    with base AS (
    SELECT *
    FROM `<id>.analytics_<number>.events_*`
    WHERE (_TABLE_SUFFIX >= FORMAT_DATE('%Y%m%d', DATE_ADD(@run_date, INTERVAL - 3 DAY)) AND _TABLE_SUFFIX < FORMAT_DATE('%Y%m%d', DATE_ADD(@run_date, INTERVAL - 2 DAY)))
    AND platform = "ANDROID"
    # AND event_name = 'user_engagement'
    AND event_name = 'in_app_purchase'
    ), app AS (
    SELECT
    FORMAT_DATE('%Y%m%d', @run_date) AS _currentdate,
    FORMAT_DATE('%Y%m%d', DATE_ADD(@run_date, INTERVAL - 3 DAY)) AS _begindate,
    FORMAT_DATE('%Y%m%d', DATE_ADD(@run_date, INTERVAL - 2 DAY)) AS _enddate,
    TIMESTAMP_DIFF(TIMESTAMP(DATE_ADD(@run_date, INTERVAL - 2 DAY)), TIMESTAMP(DATE_ADD(@run_date, INTERVAL - 3 DAY)), HOUR) AS _hoursdiff,
    COUNT(DISTINCT user_pseudo_id) AS _uniqusers
    FROM base
    )
    SELECT
    app._currentdate,
    app._begindate,
    app._enddate,
    app._hoursdiff,
    app._uniqusers
    FROM app;

    关于android - 应该使用平均 Firebase 活跃用户指标(DAU、WAU、MAU)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54079216/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com