【实战案例】商品推荐算法(2)

2022年分享了以商品为中心的推荐算法,本篇在此基础上,介绍以用户为中心的商品推荐算法。

看过商品推荐算法(1)的朋友还记得这张图吗?不记得也没关系,我再画一遍~
它表达的正是商品推荐的逻辑本质,寻找关联关系。

接下来会讨论3个主题:
1. 如何将商品B推荐给用户A?
2. 案例分享:人工配置 VS 推荐算法 ABtest
3. 拓展应用:基于商品关联关系的扩散选品

一、如何将商品B推荐给用户A?

在商业环境中,大部分经营多商品的商城会采用推荐算法,也就是用户会点击n个商品,n可能是0,也可能是1000,这里我们仅讨论n≥1的情形(n=0采用冷启动),即:用户A访问了一系列商品A,商品A会关联出一系列的商品B,如何将商品B推荐给用户A?

在前一篇文章中,我们已经知道如何建立关系②,那接下来要考虑的问题就是:哪些关系是需要维系的?(类比人际关系网络)
1> 如何根据已知关系选择商品A?(由于不同的行业商品可能存在季节性,以及用户访问行为的跨期性,需要对商品A集合做筛选)
2> 如何根据关联关系②量化商品A集合与商品B关系的强弱?(对商品B集合进行排序)
3> 如何根据上述两个关系,综合判断用户A与商品B的关系?

这里给出一些参考的维度,可以实现算法从0分到60分,想拿更高分的朋友可以结合业务场景来做参数的选择与调整:
【商品A的选择】最近一段时间点击的n个商品、最近一段时间内购买的n单,可以根据用户行为时间、频次设置权重(用weight代表权重);
【商品A集合与商品B的关系】对商品An关联到的商品Bn进行聚合计算,An的权重越大,Bn被商品集合A关联的次数越多,Bn与集合A的关系就越强(用score代表关系值);
【用户A与商品B的关系】对score进行排序得到用户A的潜在兴趣商品,需要注意的是实践中需要对计算的结果商品集合B做人工干预,如:剔除售罄/赠品、新品加权重等情况。

二、案例分享:人工配置 VS 推荐算法 ABtest

关于ABtest的方法和案例我们已经分享了很多次,此处就简要描述>>>

第一步:做出实验的假设
使用数据推荐商品是否比有经验的运营人工推荐更有效?用户点击率更高?下单转化率更高?

第二步:算法准备完成后,上线测试效果
1> 对用户随机分析,A组设置为人工经验推荐,B组设置为关联算法推荐,A组B组用户数各占DAU50%;
2> 由于这里涉及多岗位协作,容易出现bug,如:计算逻辑与预期不符、展示顺序与需求描述不一致、商品更新频率较低等,所以在测试前要仔细核对每一个步骤。(曾经遇到过上线后对所有用户展示冷启动规则商品的情况)

第三步:对比关键指标
1> 推荐模块点击率=推荐商品点击人数/访问到此模块人数
2> 此模块人均点击商品数
(当然也可以看更深层次的加车、下单结果数据,以及偏向过程的B组推荐算法展示率等,可以根据业务场景自行调整。)

上图中数据表示>>>
上线前(9.21-9.24):AB两组用户在测试模块的商品点击率、点击个数无明显差异,基本说明两组用户在特征上没有差异;
测试中(9.25-9.26):9.25测试上线,上线第一天B组推荐算法的商品点击率及人均点击商品个数均较A组有提升,且9.26有相同表现;(B组点击商品数增多,可能与推荐的更新频率高,从而展示的商品数较多有关。)
测试后(9.27-9.30):9.27将A组也调整为推荐算法展示,其相关数据也均有提升;
结论:数据推荐的商品集与人工推荐的商品集相比,前者点击率更高。

三、拓展应用:基于商品关联关系的扩散选品算法

这部分简单提及一个商品关联关系的应用场景,主要是为了说明:商品关联并不只是服务于推荐算法一个场景(格局小了)。
试想一个经营实例:盒马计划在商业区A开新店,应该选择哪些商品存放在A店?既能减少库存管理成本,又能极大满足用户的购物需求?

参考答案:选取种子商品集,经过N次商品关联(扩散),不断扩充选品池,同时测算不同商品池可以满足的订单比例。(代码自己写哈)

如上图数据所示,选取销量前50的商品作为种子,经过3次扩散后选品池总计799个sku,用总SKU数的34.7%,预计可以满足54.0%的订单需求。

文末:
有的朋友会问啦,小编你怎么两篇都没有写关联规则(Apriori)算法,这跟我了解到的不一样啊!!!
别着急,听我说(谢谢你~),本文采用的计算逻辑与Aprior算法有相通之处,均为计算频繁项集出现的概率,且在置信度(confidence)计算上更为灵活且易于理解;另外在实践过程中,由于商品推荐算法涉及多部门合作,若使用Aprior算法逐一解释沟通成本极高,故一般不选用这种方式,而是编写业务方更易于理解的算法进行计算。

如有不够详尽之处,欢迎私信、留言与我联系。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
介绍 用户商品推荐算法是一种常用的推荐系统算法,它通过分析用户历史行为数据和商品属性数据,为用户推荐可能感兴趣的商品。 本文将介绍基于用户商品推荐算法的源码实现。具体来说,我们将使用Python编写一个基于协同过滤的推荐系统,该算法可以解决用户-商品矩阵中的稀疏性问题,并为用户推荐可能感兴趣的商品算法实现 我们将使用Python中的pandas库和scikit-learn库来实现基于用户商品推荐算法。 首先,我们需要导入必要的库: ```python import pandas as pd from sklearn.metrics.pairwise import cosine_similarity ``` 然后,我们需要读取用户历史行为数据和商品属性数据,并将它们合并为一个用户-商品矩阵: ```python user_behavior = pd.read_csv('user_behavior.csv') item_attributes = pd.read_csv('item_attributes.csv') user_item_matrix = pd.merge(user_behavior, item_attributes, on='item_id') user_item_matrix = user_item_matrix.pivot_table(index='user_id', columns='item_id', values='rating', fill_value=0) ``` 接下来,我们需要计算用户之间的相似度。我们使用余弦相似度作为相似度的度量方法: ```python user_similarity = cosine_similarity(user_item_matrix) user_similarity = pd.DataFrame(user_similarity, index=user_item_matrix.index, columns=user_item_matrix.index) ``` 然后,我们可以为每个用户推荐可能感兴趣的商品。我们首先选择与该用户相似度最高的k个用户,然后从这些用户喜欢的商品中选择该用户还没有喜欢过的商品: ```python def recommend_items(user_id, k=5, n=10): similar_users = user_similarity[user_id].sort_values(ascending=False)[1:k+1] similar_items = user_item_matrix.loc[similar_users.index, :] similar_items = similar_items.sum(axis=0) similar_items = similar_items[similar_items == 0].index user_items = user_item_matrix.loc[user_id, :] user_items = user_items[user_items == 0].index recommended_items = set(similar_items) & set(user_items) recommended_items = list(recommended_items)[:n] return recommended_items ``` 最后,我们可以为每个用户生成推荐列表: ```python recommendations = {} for user_id in user_item_matrix.index: recommendations[user_id] = recommend_items(user_id) ``` 完整代码 ```python import pandas as pd from sklearn.metrics.pairwise import cosine_similarity user_behavior = pd.read_csv('user_behavior.csv') item_attributes = pd.read_csv('item_attributes.csv') user_item_matrix = pd.merge(user_behavior, item_attributes, on='item_id') user_item_matrix = user_item_matrix.pivot_table(index='user_id', columns='item_id', values='rating', fill_value=0) user_similarity = cosine_similarity(user_item_matrix) user_similarity = pd.DataFrame(user_similarity, index=user_item_matrix.index, columns=user_item_matrix.index) def recommend_items(user_id, k=5, n=10): similar_users = user_similarity[user_id].sort_values(ascending=False)[1:k+1] similar_items = user_item_matrix.loc[similar_users.index, :] similar_items = similar_items.sum(axis=0) similar_items = similar_items[similar_items == 0].index user_items = user_item_matrix.loc[user_id, :] user_items = user_items[user_items == 0].index recommended_items = set(similar_items) & set(user_items) recommended_items = list(recommended_items)[:n] return recommended_items recommendations = {} for user_id in user_item_matrix.index: recommendations[user_id] = recommend_items(user_id) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值