Update README and project cleanup
This commit is contained in:
190
analyze_issue.md
Normal file
190
analyze_issue.md
Normal file
@@ -0,0 +1,190 @@
|
||||
# 🔍 数据质量分析报告
|
||||
|
||||
## 问题描述
|
||||
|
||||
选择了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)
|
||||
Reference in New Issue
Block a user