1. 引言
在电商场景中,用户从搜索关键词到点击商品详情,再到最终下单,每一步行为都蕴含着丰富的意图信号。如何利用这些信号构建个性化推荐与关联推荐,是提升转化率和客单价的关键。本文围绕「关键词搜索行为」与「商品详情特征」两条主线,介绍一套可落地的 API 技术方案,涵盖数据采集、特征工程、召回排序、关联规则挖掘以及服务化部署。
2. 整体架构
推荐系统整体分为离线计算与在线服务两层。离线层负责特征加工、模型训练和关联规则挖掘;在线层通过 API 对外提供个性化推荐与关联推荐能力。
flowchart TD
A[用户搜索行为日志] --> B[数据清洗与特征工程]
C[商品详情特征] --> B
B --> D[离线训练/规则挖掘]
D --> E[(特征库/模型库)]
E --> F[在线推荐 API]
F --> G[个性化推荐]
F --> H[关联推荐]
3. 数据模型设计
推荐系统依赖两类核心数据:用户行为数据和商品特征数据。下面给出简化后的表结构设计。
3.1 用户搜索行为表
| 字段 | 类型 | 说明 |
|---|---|---|
| user_id | string | 用户唯一标识 |
| keyword | string | 搜索关键词 |
| search_time | datetime | 搜索时间 |
| click_item_id | string | 点击的商品 ID |
| stay_duration | int | 详情页停留时长(秒) |
3.2 商品详情特征表
| 字段 | 类型 | 说明 |
|---|---|---|
| item_id | string | 商品 ID |
| category_id | string | 类目 ID |
| price | float | 商品价格 |
| title | string | 商品标题 |
| tags | array | 商品标签 |
4. 特征工程
特征工程是推荐效果的关键。这里重点介绍两类特征:搜索行为特征和商品详情特征。
4.1 搜索行为特征
- 关键词频次:用户近 7 天搜索同一关键词的次数,反映意图强度。
- 点击率:某关键词下用户点击商品的比例,用于衡量关键词与商品的匹配度。
- 停留时长:用户在商品详情页的平均停留时长,可作为兴趣权重的代理指标。
4.2 商品详情特征
- 类目偏好:用户点击商品所属类目的分布,用于刻画用户类目偏好。
- 价格带:用户点击商品的价格区间分布,用于价格敏感度建模。
- 标签向量:基于商品标签构建的向量表示,用于计算商品相似度。
5. 个性化推荐 API
个性化推荐的核心是根据用户历史行为召回候选商品,再通过排序模型输出 TopN 结果。下面给出一个基于关键词与商品特征的召回排序流程。
5.1 召回策略
召回阶段采用多路召回,包括关键词匹配召回、类目偏好召回和协同过滤召回。
public List<Item> recall(String userId, String keyword, int topN) {
// 1. 关键词匹配召回
List<Item> keywordItems = searchByKeyword(keyword, topN);
// 2. 类目偏好召回
List<Item> categoryItems = searchByCategory(userId, topN);
// 3. 协同过滤召回
List<Item> cfItems = collaborativeFiltering(userId, topN);
// 合并去重
return mergeAndDedup(keywordItems, categoryItems, cfItems, topN);
}5.2 排序模型
排序阶段使用轻量级模型,融合搜索行为特征与商品详情特征,输出点击概率。
public double predictClick(String userId, Item item, SearchContext ctx) {
FeatureVector fv = buildFeatureVector(userId, item, ctx);
return rankModel.score(fv);
}6. 关联推荐 API
关联推荐的目标是发现「经常一起购买」或「经常被一起点击」的商品组合。这里采用基于共现矩阵的关联规则挖掘。
6.1 关联规则挖掘
离线阶段统计商品对在用户会话中的共现次数,计算支持度与置信度,筛选出强关联规则。
SELECT a.item_id AS left_item,
b.item_id AS right_item,
COUNT(*) AS co_occurrence
FROM session_behavior a
JOIN session_behavior b
ON a.session_id = b.session_id
AND a.item_id <> b.item_id
GROUP BY a.item_id, b.item_id
HAVING COUNT(*) >= 10;6.2 关联推荐接口
在线服务根据当前商品 ID 查询关联规则表,返回关联商品列表。
public List<Item> recommendRelated(String itemId, int topN) {
List<Rule> rules = ruleService.findByLeftItem(itemId);
return rules.stream()
.sorted(Comparator.comparingDouble(Rule::getConfidence).reversed())
.limit(topN)
.map(rule -> itemService.getById(rule.getRightItem()))
.collect(Collectors.toList());
}7. 服务化部署
推荐能力以 RESTful API 形式对外提供,支持高并发查询。下面给出接口定义示例。
7.1 个性化推荐接口
GET /api/v1/recommend/personal?user_id=U123&keyword=手机&top_n=107.2 关联推荐接口
GET /api/v1/recommend/related?item_id=I456&top_n=10接口返回统一 JSON 结构,包含推荐商品列表及推荐理由。
{
"code": 0,
"data": {
"items": [
{"item_id": "I789", "score": 0.92, "reason": "与您搜索的「手机」高度相关"},
{"item_id": "I101", "score": 0.88, "reason": "购买该商品的用户也购买了"}
]
}
}8. 效果评估与优化
推荐系统上线后需要持续评估与优化。核心指标包括点击率(CTR)、转化率和关联购买率。
- CTR:衡量推荐结果的点击吸引力。
- 转化率:衡量推荐结果对下单的贡献。
- 关联购买率:衡量关联推荐对客单价的提升效果。
优化方向上,可引入实时行为反馈、A/B 实验以及模型定期重训练,确保推荐效果随用户行为变化而持续迭代。
9. 总结
本文围绕关键词搜索行为与商品详情特征,介绍了构建个性化推荐与关联推荐的完整 API 技术链路。核心要点包括:以搜索行为刻画用户实时意图,以商品详情特征补充长期偏好;通过多路召回与排序模型输出个性化结果;通过共现矩阵挖掘关联规则实现关联推荐。整套方案可快速接入电商业务,并支持后续扩展实时计算与深度学习模型。

