订阅更新

「活跃用户」到底怎么定义?产品和数据口径打架怎么办?

用户画像手册 第 5 题 约 8 分钟读完

本文目录
  1. 先说结论
  2. 为什么活跃用户的口径会打架?
  3. 出海业务的时区坑——我的真实经历
  4. 解决口径冲突的方法论
  5. 指标元数据管理实战
  6. 面试高频追问
  7. 实战踩坑
  8. 总结

先说结论

「活跃」没有标准答案,不同业务场景的定义可能完全不同。关键不是统一成一个口径,而是让每个口径有明确的定义、有人负责、有文档记录。

解决口径冲突的核心是定义先行:在写第一行SQL之前,先和业务方对齐「活跃用户」的精确定义——什么行为算活跃?被动打开App算不算?后台刷新算不算?

指标管理平台是终极解法:当指标多到一定程度(50+),靠人肉文档管不住了,需要指标管理平台来做口径的唯一数据源。

先把这段讲顺;面试官追问时,再展开下面的原理和细节。

详细讲解

这道题看起来简单,但实际上是用户画像项目中最头疼的问题之一。我在三家公司都遇到过口径打架的情况——产品说DAU是500万,运营说DAU是480万,老板问到底哪个是对的。答案是:口径不一样,两个数都是对的。但面试官想听的是你怎么解决这个问题。

为什么活跃用户的口径会打架?

我总结了在三家公司遇到的口径冲突,根本原因就三个:

① 行为定义不一致:产品把「打开App」就算活跃(包括后台被系统唤醒),运营只算有明确交互行为的用户。差异可能有10-20%。

② 时间窗口不一致:数据组按UTC时间计算DAU,运营按北京时间看报表。出海业务更复杂——美国用户和日本用户的「一天」是不同的时区。

③ 去重逻辑不一致:一个用户同时用手机和iPad登录,算1个活跃还是2个?按设备去重还是按账号去重?

-- 同一个DAU指标,不同口径可能差很大
 
-- 口径A:产品定义——打开App就算活跃(包含后台唤醒)
SELECT COUNT(DISTINCT user_id) AS dau_product
FROM dwd_app_event
WHERE dt = '2024-01-15'
  AND event_name = 'app_open';         -- 包含所有app_open事件
 
-- 口径B:运营定义——有明确交互行为才算活跃
SELECT COUNT(DISTINCT user_id) AS dau_ops
FROM dwd_app_event
WHERE dt = '2024-01-15'
  AND event_name IN ('click', 'scroll', 'search', 'purchase');
  -- 只算有交互的用户
 
-- 两个SQL的结果可能差20%,但都没错

出海业务的时区坑——我的真实经历

我在某短剧出海公司遇到过一个经典的口径问题。数据组用UTC时间计算DAU,老板看的是日本市场的DAU。日本是UTC+9,意味着UTC的15:00到第二天14:59才是日本的一天。如果按UTC天切分,一个日本用户晚上10点(UTC 13:00)的行为会被算到UTC的今天——这个其实没问题。但如果日本用户在凌晨0:30(UTC前一天15:30)有行为,就会被切到UTC的前一天,导致DAU统计偏差。

-- 出海业务时区处理:按用户当地时间计算DAU
SELECT
  country,
  -- 把UTC时间转换成用户当地时间
  DATE(CONVERT_TZ(event_time, 'UTC', 
    CASE country
      WHEN 'JP' THEN 'Asia/Tokyo'         -- UTC+9
      WHEN 'US' THEN 'America/New_York'    -- UTC-5/UTC-4
      WHEN 'BR' THEN 'America/Sao_Paulo'   -- UTC-3
      ELSE 'UTC'
    END
  )) AS local_date,
  COUNT(DISTINCT user_id) AS dau
FROM dwd_app_event
WHERE dt BETWEEN '2024-01-14' AND '2024-01-16'  -- 多取一天防止时区跨天
GROUP BY country, local_date;

关键细节:dt分区是UTC天,但local_date是当地时间天。查询时dt要多取一天,因为UTC和当地时间可能跨天。这个SQL我在出海公司用了无数次。

解决口径冲突的方法论

我在三家公司尝试过不同方法,最终总结出一套有效的流程:

步骤做什么关键动作
① 定义对齐拉所有相关方开会,明确每个指标的精确定义文档记录,参与者签字确认
② 口径分版本允许同一维度有多个口径,但必须命名清楚dau_product / dau_ops / dau_strict
③ 代码对应每个口径有且只有一个SQL/代码实现一个口径=一条SQL,不允许两个地方算同一指标
④ 元数据注册口径定义录入元数据管理系统指标名+定义+负责人+SQL+更新频率
⑤ 定期审计每季度review一次口径,废弃不用的Owner负责制,无人认领的指标下线

指标元数据管理实战

当指标多到一定程度,光靠文档和会议是管不住的。我在出海硬件品牌后期引入了指标元数据管理——虽然没用成熟的产品(公司不愿意买),但用Hive表+简单的Web页面实现了最核心的功能:

-- 指标元数据管理表
CREATE TABLE dim_metric_registry (
  metric_id       STRING COMMENT '指标唯一ID',
  metric_name     STRING COMMENT '指标英文名,如dau_product',
  metric_cn_name  STRING COMMENT '指标中文名,如DAU(产品口径)',
  definition      STRING COMMENT '精确定义',
  sql_logic       STRING COMMENT '对应的SQL逻辑',
  data_source     STRING COMMENT '来源表:dwd_app_event',
  owner           STRING COMMENT '负责人',
  department      STRING COMMENT '归属部门:产品/运营/数据',
  status          STRING COMMENT 'active/deprecated/draft',
  created_at      TIMESTAMP,
  updated_at      TIMESTAMP
) COMMENT '指标口径注册表';
 
-- 原则:有争议时看这张表,以注册信息为准

面试高频追问

追问一:如果产品经理坚持用他的口径,运营也坚持用她的口径,你怎么办?

不要试图强行统一——这不是数据组的活,而且强行统一容易得罪人。正确做法是:两个口径都保留,但必须明确命名。比如dau_product和dau_ops是两个不同的指标,在报表上分别展示,标注口径来源。如果CEO要看公司整体DAU,由数据组和业务方一起确定一个官方口径,所有对外报告统一用这个。内部各团队可以继续用自己的口径做分析,但不用来对外汇报。

追问二:指标口径变了,历史数据要不要重算?

这取决于口径变化的影响范围。如果是小调整(比如把「打开App」改成「打开App且停留>3秒」),影响在5%以内,一般不重算,但在变更记录里标注「从X日起口径调整」。如果是大调整(比如从设备去重改成账号去重),影响超过10%,就必须重算历史数据,否则同比环比都不可比了。重算前先和业务方确认回溯时间范围,一般回溯6-12个月就够了。

追问三:你们用什么工具做指标管理?

业界常见的方案有:Apache Atlas做元数据管理,但比较重;DataHub(LinkedIn开源)做指标注册;还有商业产品如数据力。我们公司规模不大,用的是Hive元数据表+Notion文档+季度审计的轻量方案,够用了。工具不重要,重要的是流程——必须让每个指标有人负责、有定义、有代码对应。

实战踩坑

我在某短剧出海公司接手数据组时,发现一个典型的口径混乱问题:同一个付费率指标,报表上有三个不同的数字——产品后台是5.2%,运营日报是4.8%,老板的周报里是5.5%。

排查后发现原因:产品后台的分母是「活跃用户」(他们的口径是包含后台唤醒),运营日报的分母是「有交互行为的用户」,老板周报的分母是「新增用户」——三个人算的都对,但分母不一样。

解决方案:我花了一周时间,把公司所有核心指标(30+个)的口径全部梳理清楚,录入元数据表,和每个部门的负责人确认。然后在周会上做了一次统一宣讲,把官方口径和各部门口径的区别说清楚。从那以后口径冲突减少了90%。

教训:口径问题不会自己解决,必须有人主动推动。数据组是最适合做这件事的团队,因为你最懂数据流向和计算逻辑。早点做、主动做,比等问题爆发再被动处理要好得多。

总结

活跃用户的口径没有标准答案,关键是定义清楚、命名清楚、管理清楚。解决口径冲突的方法论是:定义对齐→口径分版本→代码对应→元数据注册→定期审计。面试时能讲出「我们遇到过口径冲突,我是怎么推动解决的」,面试官会觉得你不只是一个写SQL的,更是一个能推动团队改进的人。

下一篇聊一个技术含量更高的问题:用户ID不统一,手机号/设备号/账号怎么打通?ID Mapping实战。

你们公司的DAU口径统一吗?有没有遇到过口径打架的情况?评论区聊聊~

关注「Wood聊大数据」| 9年大数据老兵,聊技术、聊职场、聊成长

用户画像面试通关手册

第6-10篇:ID打通、调度保障与架构设计

Wood聊大数据

9年大数据老兵,聊技术、聊职场、聊成长

刷题进度保存在当前浏览器