1. 项目概述与核心需求
美妆护理类购物平台的核心痛点在于:如何在海量商品中帮助用户快速找到适合自己的产品。传统电商平台往往采用简单的"销量排序"或"分类浏览"模式,但这对于美妆品类存在明显不足——同一款粉底液,油性肌肤和干性肌肤用户的使用体验可能截然不同。
我们开发的微信小程序商城系统,通过协同过滤算法实现了真正的个性化推荐。系统会分析用户的浏览轨迹、收藏行为和购买记录,结合商品本身的属性(如适用肤质、功效等),为每位用户生成专属的美妆推荐列表。实测数据显示,采用推荐算法后,平台转化率提升了37%,用户复购率提高了28%。
关键设计原则:推荐结果必须同时考虑用户行为相似性和商品特性匹配度。例如,两位同样购买过"控油型"粉底的用户会被判定为相似用户,但系统还会检查推荐商品是否适配目标用户的肤质类型。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 系统架构设计
2.1 技术栈选型
前端采用微信小程序原生框架,主要基于三点考虑:
- 微信生态的用户覆盖率高,无需额外安装APP
- 原生框架性能优于跨平台方案,动画流畅度对美妆类展示尤为重要
- 可直接调用微信支付、用户信息等原生API
后端服务我们最终选择了Spring Boot + MySQL的组合,而非Node.js + MongoDB:
- 美妆商品的SKU属性结构化程度高(色号、容量、肤质等),适合关系型数据库
- 协同过滤算法中的矩阵运算在Java生态有成熟的数学库支持
- Spring Security可提供完善的权限控制,符合电商系统安全要求
2.2 数据流设计
系统数据处理流程分为三个关键阶段:
- 数据采集层:实时记录用户行为事件(浏览3秒以上计为有效点击)
- 近线计算层:每小时运行一次MapReduce作业,更新用户相似度矩阵
- 在线服务层:接收请求时,实时混合三种推荐结果:
- 基于用户的协同过滤结果(UserCF)
- 基于商品的协同过滤结果(ItemCF)
- 基于用户画像的规则推荐(新用户兜底策略)
3. 核心算法实现
3.1 用户行为权重设计
不同行为对推荐结果的影响权重经过AB测试优化:
| 行为类型 | 初始权重 | 优化后权重 | 衰减系数 |
|---|---|---|---|
| 购买 | 5.0 | 6.0 | 0.95 |
| 加入购物车 | 3.0 | 4.0 | 0.9 |
| 收藏 | 2.0 | 3.0 | 0.85 |
| 浏览 | 1.0 | 1.5 | 0.8 |
权重衰减公式:$w_{current} = w_{initial} * (decay)^{days}$
3.2 相似度计算优化
传统余弦相似度在美妆场景存在两个问题:
- 没有考虑商品属性兼容性(如敏感肌用户误点非敏感肌商品)
- 新商品缺乏行为数据导致推荐冷启动
我们的改进方案:
python复制def hybrid_similarity(u1, u2):
# 行为相似度(加权余弦相似度)
behavior_sim = cosine_sim(u1.actions, u2.actions)
# 属性相似度(欧式距离)
profile_sim = 1 / (1 + euclidean(u1.skin_type, u2.skin_type))
# 混合相似度
return 0.7*behavior_sim + 0.3*profile_sim
3.3 冷启动解决方案
对于新用户和新商品,采用三级降级策略:
- 新用户首推:基于注册时填写的肤质问卷结果
- 新商品曝光:在同类目商品详情页增加"相似新品"展示位
- 混合推荐:当行为数据不足时,按30%协同过滤+70%内容推荐的比例混合输出
4. 关键实现细节
4.1 性能优化方案
推荐服务响应时间要求小于200ms,我们做了以下优化:
- 预计算相似度矩阵:使用Spark MLlib每晚全量更新
- 多层缓存设计:
- Redis缓存热门推荐结果(5分钟过期)
- 本地Caffeine缓存用户最近推荐结果(1分钟过期)
- 异步计算:用户登录后立即后台预加载推荐结果
4.2 美妆特殊逻辑处理
- 季节性商品权重调整:
java复制// 夏季增加防晒类商品权重
if (month >= 5 && month <= 8) {
weight *= 1.5;
}
- 彩妆色系协同推荐:
- 通过LAB色彩空间计算口红色号相似度
- 购买过"姨妈色"口红的用户,会优先推荐同色系眼影
- 过敏原检查:
- 用户个人资料中标记的过敏成分(如酒精、香精)
- 推荐时过滤含有这些成分的商品
5. 测试与调优
5.1 AB测试方案
我们设计了三种推荐策略进行对比:
- 对照组:按销量排序
- 实验组A:传统协同过滤
- 实验组B:改进的混合推荐算法
测试结果(两周数据):
| 指标 | 对照组 | 实验组A | 实验组B |
|---|---|---|---|
| 点击率 | 12.3% | 18.7% | 24.5% |
| 加购转化率 | 3.2% | 5.1% | 7.8% |
| 订单转化率 | 1.8% | 2.9% | 4.3% |
5.2 线上监控指标
建立了一套完整的推荐质量监控体系:
- 实时监控:
- 推荐点击率波动报警
- 接口响应时间监控
- 离线分析:
- 每周计算推荐商品的实际购买转化率
- 每月人工抽查推荐合理性(如给油皮推荐控油产品)
6. 部署实践
6.1 微信小程序审核要点
特别注意这些合规要求:
- 化妆品类目需要提供《化妆品生产许可证》
- 商品详情页必须展示批准文号
- 用户评价功能需设置敏感词过滤
- 支付必须使用微信支付原生接口
6.2 服务器配置建议
生产环境推荐配置:
- 前端:腾讯云CDN加速静态资源
- 后端:4核8G容器 × 2(自动伸缩组)
- 数据库:阿里云RDS MySQL 8.0 主从架构
- 缓存:Redis集群(16G内存起步)
7. 踩坑经验分享
-
相似度计算陷阱:
初期直接使用scikit-learn的cosine_similarity,发现当用户行为数据稀疏时效果很差。后来改为先对向量进行均值填充,再计算相似度。 -
微信小程序图片加载优化:
美妆商品图片平均1.5MB,直接加载导致列表卡顿。解决方案:
- 使用腾讯云图片压缩API
- 实现懒加载+渐进式加载
- 重要图片预加载到本地缓存
- 库存同步问题:
推荐了已售罄商品严重影响体验。最终方案:
- 在推荐结果返回前实时校验库存
- 建立商品状态变更的消息队列通知机制
这个项目让我深刻体会到:好的推荐系统不是算法的堆砌,而是要对业务场景有深刻理解。比如我们发现晚上8-10点用户更愿意尝试新品,于是调整了该时段的推荐策略,使得新品曝光转化率提升了40%。这些细节的打磨,才是推荐系统真正产生价值的关键。
