订阅更新

冷启动用户没有行为数据,画像怎么建?

用户画像手册 第 15 题 约 10 分钟读完

本文目录
  1. 先说结论
  2. 冷启动画像的三个阶段
  3. T+0阶段:注册信息推断
  4. 群体画像:个人数据不够时的兜底方案
  5. T+1阶段:首日行为快速补充
  6. 面试高频追问
  7. 实战踩坑
  8. 总结

先说结论

冷启动的核心思路是「有多少数据用多少数据,没有数据用推断」。新用户注册时已经有一些信息了(注册渠道、设备型号、国家、语言),这些就是冷启动画像的基础。

冷启动画像分三个阶段递进:注册即刻(基于注册信息)→ 前24小时(基于首日行为)→ 前7天(基于累积行为)。随着用户行为数据增多,画像从粗粒度逐步变精细。

群体画像是兜底方案。当个人数据不够时,用该群体的平均画像替代——比如「来自日本的iOS用户」的平均消费水平和兴趣偏好。

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

详细讲解

用户画像系统有一个天然的缺陷:新用户刚注册,没有任何行为数据,标签几乎全是空的。推荐系统查这个用户的画像,返回一片空白——怎么做个性化推荐?这就是冷启动问题。我在某出海硬件品牌做画像时,每天有上万新增用户,他们在前3天的画像覆盖率只有30%左右。面试官问这道题,是想看你在「数据不完美」的情况下怎么解决问题。

冷启动画像的三个阶段

阶段时间点可用数据画像策略覆盖率
T+0(注册即刻)注册那一秒注册渠道、设备型号、国家、语言规则推断+群体画像40-50%
T+1(首日行为)注册后24小时首次浏览/点击/搜索行为实时标签补充60-70%
T+7(累积行为)注册后7天多天行为累积常规标签计算85-90%
T+30(成熟用户)注册后30天完整行为历史全量标签覆盖95%+

T+0阶段:注册信息推断

用户注册的那一刻,我们已经知道了一些信息。这些信息虽然粗糙,但足以做基础的画像推断。

-- T+0冷启动画像:基于注册信息推断标签
INSERT OVERWRITE TABLE ads_user_profile_cold PARTITION (dt='${bizdate}')
SELECT
  user_id,
  -- 基础属性:直接从注册信息获取
  country,
  device_type,    -- iOS/Android
  language,
  acquisition_channel,  -- 来源渠道:Facebook/TikTok/Organic
 
  -- 推断标签:基于设备型号推断消费能力
  CASE
    WHEN device_model LIKE '%Pro Max%' OR device_model LIKE '%Ultra%'
      THEN 'high'       -- 旗舰机用户,消费能力大概率较高
    WHEN device_model LIKE '%SE%' OR device_model LIKE '%lite%'
      THEN 'low'        -- 入门机用户
    ELSE 'medium'
  END AS predicted_spending_power,
 
  -- 推断标签:基于来源渠道推断用户质量
  CASE
    WHEN acquisition_channel = 'organic' THEN 'high'    -- 自然流量质量高
    WHEN acquisition_channel = 'referral' THEN 'high'   -- 朋友推荐
    WHEN acquisition_channel = 'facebook' THEN 'medium' -- 付费广告
    ELSE 'unknown'
  END AS predicted_user_quality,
 
  -- 群体画像兜底:用同渠道+同国家用户的平均值
  g.avg_7d_spend AS predicted_first_week_spend
FROM dwd_user_register r
LEFT JOIN dim_group_profile g
  ON r.country = g.country AND r.acquisition_channel = g.channel
WHERE r.dt = '${bizdate}';

群体画像:个人数据不够时的兜底方案

群体画像是冷启动最实用的兜底策略。思路很简单:新用户虽然没有个人行为数据,但和他「类似」的用户群体有大量数据。

-- 构建群体画像:按国家+渠道+设备类型聚合
CREATE TABLE dim_group_profile AS
SELECT
  country,
  acquisition_channel AS channel,
  device_type,
  -- 该群体的平均行为指标(作为新用户的默认值)
  AVG(total_amount_usd) AS avg_total_spend,
  AVG(login_cnt_7d) AS avg_login_7d,
  PERCENTILE_APPROX(total_amount_usd, 0.5) AS median_spend,
  -- 该群体的标签分布(最常见的值作为默认值)
  -- 比如日本iOS用户最常见的value_level是什么
  MAX(CASE WHEN rn = 1 THEN value_level END) AS mode_value_level,
  COUNT(*) AS group_size
FROM (
  SELECT *,
    ROW_NUMBER() OVER(
      PARTITION BY country, acquisition_channel, device_type, value_level
      ORDER BY COUNT(*) DESC
    ) AS rn
  FROM ads_user_profile
  WHERE dt = '${bizdate}'
    AND register_days >= 30  -- 只用成熟用户的数据
  GROUP BY country, acquisition_channel, device_type, value_level
) t
GROUP BY country, acquisition_channel, device_type;

关键细节:群体画像只用注册满30天的成熟用户来计算,避免用其他新用户的不完整数据来推断。同时GROUP BY的维度不能太细(国家+渠道+设备类型最多3层),否则每个群体的样本量太少,统计意义不大。

T+1阶段:首日行为快速补充

用户注册后的第一天行为数据非常珍贵——它比注册信息更能反映用户的真实偏好。

-- T+1阶段:用首日行为更新画像
-- 这部分走Flink实时计算,24小时内逐步丰富画像
 
-- 首日行为标签(在dws层计算)
SELECT user_id,
  COUNT(DISTINCT event_name) AS first_day_event_types,   -- 首日探索了多少功能
  SUM(CASE WHEN event_name = 'purchase' THEN 1 ELSE 0 END) AS first_day_purchase,
  MAX(CASE WHEN event_name = 'search' THEN search_keyword END) AS first_search,
 
  -- 基于首日行为重新判断用户类型
  CASE
    WHEN SUM(CASE WHEN event_name = 'purchase' THEN 1 ELSE 0 END) > 0
      THEN 'fast_converter'    -- 首日就付费,高质量用户
    WHEN COUNT(DISTINCT event_name) >= 5
      THEN 'active_explorer'   -- 首日探索多种功能,潜力用户
    WHEN COUNT(*) <= 2
      THEN 'bouncer'           -- 首日只做了1-2个动作就走了
    ELSE 'observer'            -- 浏览但不互动
  END AS first_day_type
FROM dwd_user_event
WHERE dt = '${bizdate}'
  AND DATEDIFF('${bizdate}', register_date) = 0  -- 只看注册当天的行为
GROUP BY user_id;

首日行为标签和注册推断标签合并后,画像覆盖率从40%提升到65%左右。特别是first_day_type这个标签,对后续的用户分层和运营策略非常有价值——首日就付费的用户后续LTV是普通用户的5-8倍。

面试高频追问

追问一:推断标签(如设备型号推断消费能力)准确率有多少?

我做过验证:用设备型号推断消费能力的准确率大约65%。旗舰机用户中70%确实是高消费,但也有30%是分期购买或者二手机用户。这个准确率不算高,但在冷启动阶段够用了——毕竟替代方案是「什么都不知道」。关键是在标签元数据里标注这是推断标签(predicted_),和确定性标签(actual_)区分开,让下游系统知道这个标签的置信度。

追问二:群体画像会不会导致所有新用户看到一样的推荐?

会有这个问题。解决方案有两个:①在群体画像的基础上加随机探索——推荐系统对冷启动用户用70%群体画像推荐+30%随机探索,既不会完全冷启动,又能发现该用户的个性化偏好;②加速标签补充——首日行为数据走Flink实时计算,用户每做一个动作就更新一次画像,尽快从群体画像过渡到个人画像。我在出海硬件品牌的数据显示,用户平均在注册后4小时就能积累足够的行为数据来替换群体画像。

追问三:冷启动画像怎么和推荐系统配合?

推荐系统查画像API时,API层做分层返回:如果Redis里有该用户的实时标签就返回实时标签;如果没有就查冷启动画像表;如果连冷启动画像都没有(极端情况,刚注册还没写入),就返回全局热门推荐。三层兜底,确保推荐系统永远有数据可用。同时在响应里加一个confidence字段,告诉推荐系统这个画像的置信度——realtime标签的confidence=1.0,冷启动推断标签的confidence=0.6,群体画像的confidence=0.3。推荐系统可以根据置信度调整推荐策略。

实战踩坑

我在某出海硬件品牌做冷启动画像时,一开始用「全球平均值」作为群体画像的兜底。结果发现日本用户和巴西用户的行为差异巨大——日本用户平均消费是巴西用户的4倍。用全球平均值给日本新用户做推荐,推的都是低价商品,体验很差。

后来我把群体画像细化到「国家+渠道+设备类型」三维度,效果好了很多。日本iOS自然流量用户看到的是高端产品推荐,巴西Android广告用户看到的是性价比产品推荐。个性化程度虽然还不够,但比全球一刀切好太多了。

教训:群体画像的粒度要够细。全球平均值没有意义——不同国家、不同渠道、不同设备类型的用户差异很大。但粒度也不能太细(比如细到城市+年龄+性别),否则每个群体的样本量太少,统计不可靠。国家+渠道+设备类型三维度是一个不错的平衡点。

总结

冷启动画像的核心策略是三阶段递进:T+0用注册信息推断+群体画像兜底,T+1用首日行为快速补充,T+7常规标签覆盖。推断标签要标注置信度,群体画像要分群体细化。面试时能讲清楚冷启动的分阶段策略和准确率验证,说明你考虑问题全面、不回避「数据不完美」的现实。

下一篇聊一个性能调优话题:数据倾斜导致标签计算任务跑了4小时——怎么优化到30分钟?

你们的新用户冷启动画像覆盖率有多少?用了什么兜底策略?评论区聊聊~

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

用户画像面试通关手册

第16-20篇:性能调优、架构设计与技术选型

Wood聊大数据

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

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