Files
onion-dmp/analyze_issue.md
2026-04-08 14:52:09 +08:00

5.0 KiB
Raw Blame History

🔍 数据质量分析报告

问题描述

选择了11个标签组合后转化率变成了 0%

  • 母亲主导
  • 一线城市
  • 高收入 (>5w)
  • 独生子女
  • 初中阶段
  • 初一 (7年级)
  • 培优拔高
  • 数学薄弱
  • 重点/示范校
  • 体制内/国企
  • 日活用户 ← 这个导致了 0 人

分析结果

数据不是质量太低的问题

实际上,数据质量还不错:

  • 总用户数50,000 人
  • 前 10 个条件交集:4 人
  • 加上第 11 个条件(日活用户):0 人

🎯 真实原因

不是数据太少,而是标签相关性设计不够合理

这4个符合前10个条件的用户他们的活跃特征分别是

  1. 用户 16727考前突击
  2. 用户 20002沉默用户
  3. 用户 28755周末活跃
  4. 用户 29105考前突击

没有一个是"日活用户"


根本问题

当前种子数据生成逻辑seed.js 第 363 行)

// 活跃特征 (同时存在两项的概率加大)
tags.push(weightedPick([
  { value: 'eng_active_daily', weight: 15 },  // 只有 15% 概率
  { value: 'eng_weekend', weight: 35 },       // 35%
  { value: 'eng_exam', weight: 25 },          // 25%
  { value: 'eng_dormant', weight: 25 }        // 25%
]));

问题点

  1. 日活用户比例太低15%

  2. 活跃特征与其他属性无相关性

    • 逻辑上,"高收入 + 培优拔高 + 重点学校"的家长应该更可能是日活用户
    • 但代码中,活跃特征是完全随机分配的
  3. 没有考虑用户画像的合理性

    • 体制内/国企 + 全职妈妈 → 更可能日活
    • 高收入 + 培优拔高 → 更可能付费+日活
    • 沉默用户不应该同时是付费会员

改进方案

方案 1提高日活用户比例快速

修改权重:

tags.push(weightedPick([
  { value: 'eng_active_daily', weight: 30 },  // 提高到 30%
  { value: 'eng_weekend', weight: 30 },
  { value: 'eng_exam', weight: 25 },
  { value: 'eng_dormant', weight: 15 }        // 降低沉默用户
]));

方案 2基于用户画像的智能分配推荐

// 活跃特征 - 基于用户画像智能分配
let engWeights;

// 高收入 + 培优拔高 + 重点学校 → 大概率日活
if ((actualIncome === 'inc_high' || actualIncome === 'inc_mid_high') 
    && tags.includes('sp_top')) {
  engWeights = [
    { value: 'eng_active_daily', weight: 40 },  // 40%
    { value: 'eng_weekend', weight: 30 },
    { value: 'eng_exam', weight: 20 },
    { value: 'eng_dormant', weight: 10 }
  ];
}
// 全职妈妈 → 高概率日活
else if (tags.includes('pj_fulltime')) {
  engWeights = [
    { value: 'eng_active_daily', weight: 50 },  // 50%
    { value: 'eng_weekend', weight: 25 },
    { value: 'eng_exam', weight: 15 },
    { value: 'eng_dormant', weight: 10 }
  ];
}
// 体制内/国企 → 中等日活概率
else if (tags.includes('pj_gov')) {
  engWeights = [
    { value: 'eng_active_daily', weight: 25 },
    { value: 'eng_weekend', weight: 35 },
    { value: 'eng_exam', weight: 25 },
    { value: 'eng_dormant', weight: 15 }
  ];
}
// 其他情况
else {
  engWeights = [
    { value: 'eng_active_daily', weight: 15 },
    { value: 'eng_weekend', weight: 35 },
    { value: 'eng_exam', weight: 30 },
    { value: 'eng_dormant', weight: 20 }
  ];
}

tags.push(weightedPick(engWeights));

方案 3重新生成数据最佳

运行改进后的种子脚本:

npm run seed

数据统计

逐步筛选过程

步骤 添加条件 剩余人数 占比
1 母亲主导 30,006 60.01%
2 + 一线城市 4,492 8.98%
3 + 高收入 1,390 2.78%
4 + 独生子女 804 1.61%
5 + 初中阶段 483 0.97%
6 + 初一 174 0.35%
7 + 培优拔高 85 0.17%
8 + 数学薄弱 34 0.07%
9 + 重点学校 11 0.02%
10 + 体制内/国企 4 0.008%
11 + 日活用户 0 0%

两两标签相关性Jaccard 相似度)

标签对 交集人数 相似度
母亲主导 ∩ 一线城市 4,492 13.61%
一线城市 ∩ 高收入 2,319 20.76%
高收入 ∩ 独生子女 3,315 10.98%
独生子女 ∩ 初中阶段 16,633 37.80%
初中阶段 ∩ 初一 11,964 35.50%

建议

短期方案5分钟

重新生成种子数据,提高日活用户比例和相关性

长期方案

  1. 添加更多真实的用户行为数据
  2. 基于实际业务逻辑设计标签相关性
  3. 定期分析标签组合的覆盖情况
  4. 对于极端稀少的组合,可以在 UI 上给出提示

结论

这不是数据质量问题,数据生成逻辑运行正常 ⚠️ 这是标签相关性设计问题,需要优化种子数据生成算法 🎯 解决方案:重新生成数据,让标签之间有更合理的相关性

生成时间: $(date)