191 lines
5.0 KiB
Markdown
191 lines
5.0 KiB
Markdown
# 🔍 数据质量分析报告
|
||
|
||
## 问题描述
|
||
|
||
选择了11个标签组合后,转化率变成了 **0%**:
|
||
- 母亲主导
|
||
- 一线城市
|
||
- 高收入 (>5w)
|
||
- 独生子女
|
||
- 初中阶段
|
||
- 初一 (7年级)
|
||
- 培优拔高
|
||
- 数学薄弱
|
||
- 重点/示范校
|
||
- 体制内/国企
|
||
- **日活用户** ← 这个导致了 0 人
|
||
|
||
---
|
||
|
||
## 分析结果
|
||
|
||
### ✅ 数据不是质量太低的问题
|
||
|
||
实际上,数据质量还不错:
|
||
- 总用户数:50,000 人
|
||
- 前 10 个条件交集:**4 人** ✅
|
||
- 加上第 11 个条件(日活用户):**0 人** ❌
|
||
|
||
### 🎯 真实原因
|
||
|
||
**不是数据太少,而是标签相关性设计不够合理**
|
||
|
||
这4个符合前10个条件的用户,他们的活跃特征分别是:
|
||
1. 用户 16727:**考前突击**
|
||
2. 用户 20002:**沉默用户**
|
||
3. 用户 28755:**周末活跃**
|
||
4. 用户 29105:**考前突击**
|
||
|
||
**没有一个是"日活用户"!**
|
||
|
||
---
|
||
|
||
## 根本问题
|
||
|
||
### 当前种子数据生成逻辑(seed.js 第 363 行)
|
||
|
||
```javascript
|
||
// 活跃特征 (同时存在两项的概率加大)
|
||
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:提高日活用户比例(快速)
|
||
|
||
修改权重:
|
||
```javascript
|
||
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:基于用户画像的智能分配(推荐)
|
||
|
||
```javascript
|
||
// 活跃特征 - 基于用户画像智能分配
|
||
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:重新生成数据(最佳)
|
||
|
||
运行改进后的种子脚本:
|
||
```bash
|
||
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)
|