PROJECT_SUMMARY.md
7.39 KB
推荐系统离线任务 - 项目总结
项目概述
本项目实现了一个完整的推荐系统离线任务框架,用于生成各种推荐索引。主要包括两大模块:
- i2i 行为相似索引:基于用户行为计算物品之间的相似度
- 兴趣点聚合索引:按多维度聚合用户行为,生成不同场景的推荐列表
技术架构
数据来源
- 数据库:SelectDB(兼容MySQL协议)
- 主要表:
sensors_events:用户行为事件表prd_goods_sku:商品SKU表
算法实现
1. i2i 行为相似算法
| 算法 | 原理 | 优势 | 适用场景 |
|---|---|---|---|
| Swing | 基于用户共同行为的物品相似度,考虑用户重叠度 | 效果好,能发现深层关系 | 详情页推荐、相关商品 |
| Session W2V | 基于用户会话序列训练Word2Vec | 能捕获序列关系 | 下一个可能感兴趣的商品 |
| DeepWalk | 基于图随机游走训练Word2Vec | 能发现图结构特征 | 发现潜在关联商品 |
2. 兴趣点聚合
维度分类:
单维度:
- 平台(PC/Mobile/App)
- 国家/销售区域
- 客户类型(零售商/批发商等)
- 二级分类
- 三级分类
组合维度:
- 平台 + 国家
- 平台 + 客户类型
- 国家 + 客户类型
- 平台 + 国家 + 客户类型
列表类型:
- hot(热门):基于最近180天的高交互商品
- cart(加购):基于加购行为的高频商品
- new(新品):基于商品创建时间的新品
- global(全局):基于所有数据的综合排序
核心特性
1. 时间衰减
- 使用指数衰减模型,越近期的行为权重越高
- 衰减因子:0.95(每30天衰减一次)
- 公式:
weight = decay_factor ^ (days / 30)
2. 行为权重
不同行为类型赋予不同权重:
| 行为类型 | 权重 | 说明 |
|---|---|---|
| click | 1.0 | 点击 |
| addToPool | 2.0 | 加入询盘池 |
| addToCart | 3.0 | 加入购物车 |
| contactFactory | 5.0 | 联系工厂 |
| purchase | 10.0 | 购买 |
3. 可配置参数
所有参数集中在 config/offline_config.py,便于调整优化。
文件清单
核心代码
/home/tw/recommendation/
├── db_service.py # 数据库连接服务
├── requirements.txt # Python依赖包
└── offline_tasks/
├── config/
│ └── offline_config.py # 配置文件
├── scripts/
│ ├── i2i_swing.py # Swing算法
│ ├── i2i_session_w2v.py # Session W2V算法
│ ├── i2i_deepwalk.py # DeepWalk算法
│ ├── interest_aggregation.py # 兴趣点聚合
│ └── load_index_to_redis.py # 加载索引到Redis
├── run_all.py # 统一调度脚本
├── test_connection.py # 连接测试脚本
├── example_query_redis.py # Redis查询示例
├── README.md # 详细文档
├── QUICKSTART.md # 快速启动指南
└── PROJECT_SUMMARY.md # 本文档
输出目录
offline_tasks/
├── output/ # 索引输出目录
│ ├── i2i_swing_YYYYMMDD.txt
│ ├── i2i_session_w2v_YYYYMMDD.txt
│ ├── i2i_deepwalk_YYYYMMDD.txt
│ ├── session_w2v_model_YYYYMMDD.model # W2V模型
│ ├── deepwalk_model_YYYYMMDD.model # DeepWalk模型
│ ├── item_graph_YYYYMMDD.txt # 物品图结构
│ ├── interest_aggregation_hot_YYYYMMDD.txt
│ ├── interest_aggregation_cart_YYYYMMDD.txt
│ ├── interest_aggregation_new_YYYYMMDD.txt
│ └── interest_aggregation_global_YYYYMMDD.txt
└── logs/ # 日志目录
├── run_all_YYYYMMDD.log
└── ...
使用流程
1. 环境准备
pip install -r requirements.txt
2. 测试连接
cd offline_tasks
python test_connection.py
3. 运行离线任务
python run_all.py --lookback_days 730 --top_n 50
4. 加载索引到Redis
python scripts/load_index_to_redis.py --expire-days 7
5. 查询示例
python example_query_redis.py
数据格式
i2i索引格式
item_id \t item_name \t similar_item_id1:score1,similar_item_id2:score2,...
示例:
123456 \t 商品A \t 234567:0.8523,345678:0.7842,456789:0.7234
兴趣点聚合索引格式
dimension_key \t item_id1:score1,item_id2:score2,...
示例:
platform:PC \t 12345:98.52,23456:87.34,34567:76.89
country:US \t 45678:156.23,56789:142.87,67890:128.45
platform_country:PC_US \t 78901:234.56,89012:198.76,90123:187.23
在线推荐场景
场景1:详情页 - 大家都在看
用户浏览商品ID: 123456
查询: i2i:swing:123456
返回: 该商品的相似商品列表
场景2:首页 - 猜你喜欢
用户特征: PC端, 美国, 零售商
组合查询:
1. interest:hot:platform_country:PC_US
2. interest:cart:customer_type:retailer
3. 结合用户历史行为的i2i
场景3:搜索结果页 - 供应商推荐
用户搜索: 二级分类100
查询: interest:global:category_level2:100
返回: 该分类下的热门商品
性能指标
数据量参考(730天数据)
- 用户行为记录:约100万-1000万条
- 商品数量:约10万-50万个
- 生成索引:约5万-20万条
运行时间(参考值)
- Swing算法:2-4小时
- Session W2V:30-60分钟
- DeepWalk:1-2小时
- 兴趣点聚合:30-60分钟
- 总计:约5-8小时
资源占用
- CPU:8-16核
- 内存:8-16GB
- 磁盘:输出文件约500MB-2GB
优化建议
1. 算法层面
- Swing算法:可以使用C++版本(已有实现),性能提升10倍
- 并行化:将不同算法分配到不同机器并行运行
- 增量更新:对于变化不大的索引,考虑增量更新
2. 工程层面
- 分布式计算:使用Spark/Flink处理大规模数据
- 缓存中间结果:避免重复计算
- 数据采样:调试阶段使用采样数据
3. 业务层面
- A/B测试:对比不同算法的效果
- 融合策略:组合多个算法的结果
- 实时更新:结合实时计算补充离线索引
后续扩展
1. 新增算法
- ItemCF(物品协同过滤)
- Node2Vec(带权重的图游走)
- Graph Neural Network(图神经网络)
2. 新增维度
- 价格区间
- 品牌
- 标签组合
- 用户画像更多维度
3. 实时化
- 实时更新热门商品
- 实时更新新品列表
- 实时i2i相似度计算
4. 个性化
- 结合用户画像的个性化排序
- 多目标优化(点击率、转化率、GMV)
- 强化学习排序
维护说明
定期检查
- 每周检查日志,确保任务正常运行
- 每月检查索引质量,调整参数
- 每季度评估算法效果,优化策略
监控指标
- 任务执行成功率
- 索引生成数量
- Redis命中率
- 推荐点击率/转化率
联系方式
如有问题或建议,请联系推荐系统团队。
文档版本: v1.0
最后更新: 2025-10-16
作者: 推荐系统团队