京公网安备 11010802034615号
经营许可证编号:京B2-20210330
协同过滤推荐算法是诞生时间最早,而且应用广泛的,著名的推荐算法。其最主要的功能进行是预测和推荐。协同过滤推荐算法可以通过对用户历史行为数据的挖掘,从而发现用户的偏好,并且基于不同的偏好,将用户划分为不同的群组,并推荐品味相似的商品。基于用户的协同过滤算法user-based collaboratIve filtering,是协同过滤推荐算法的极为重要的一个分类,今天小编主要给大家分享基于用户的协同过滤算法的原理和实现。
一、基于用户的协同过滤算法概念
基于用户(user-based)的协同过滤算法是通过,挖掘用户的历史行为数据,发现用户对商品或内容的偏好,并对这些偏好进行度量和打分。之后根据不同用户对相同商品或内容的态度以及偏好程度,来计算用户之间的相似度关系。基于用户的协同过滤,主要计算的是用户与用户之间的相似度,只需要找出相似用户喜欢的物品,并预测出目标用户对对应物品的评分,就能够找到评分最高的物品推荐给用户,这样能够挖掘用户的隐藏属性。
二、基于用户的协同过滤算法原理
基于用户的协同过滤算法主要包括以下两个步骤:
(1) 找到与目标用户兴趣相似的用户集合。
(2) 找到此集合中的用户感兴趣的,并且目标用户没有接触过的的物品推荐给目标用户。
基于用户User-CF算法的假设是目标用户和其他用户的兴趣、偏好相似,那么他们喜欢的东西都应该也相似,就是常说的人以群分。
基于用户的协同过滤算法适用于用户较少、用户个性化兴趣不太显著的情况,这样,在推荐过程中用户新的行为不一定会导致推荐结果的变化,但是如果用户过多,那么计算用户相似矩阵的代价就会太大。并且这一算法不能解决新用户进来的冷启动问题,新物品进来却可以较快地进行推荐。
三、算法实现
1.计算用户相似度
user-item:
movieId 1 2 3 4 5 6 7 8
userId
1 3.5 2.0 NaN 4.5 5.0 1.5 2.5 2.0
2 2.0 3.5 4.0 NaN 2.0 3.5 NaN 3.0
3 5.0 1.0 1.0 3.0 5.0 1.0 NaN NaN
4 3.0 4.0 4.5 NaN 3.0 4.5 4.0 2.0
5 NaN 4.0 1.0 4.0 NaN NaN 4.0 1.0
6 NaN 4.5 4.0 5.0 5.0 4.5 4.0 4.0
7 5.0 2.0 NaN 3.0 5.0 4.0 5.0 NaN
8 3.0 NaN NaN 5.0 4.0 2.5 3.0 4.0
# 构建共同的评分向量
def build_xy(user_id1, user_id2):
bool_array = df.loc[user_id1].notnull() & df.loc[user_id2].notnull()
return df.loc[user_id1, bool_array], df.loc[user_id2, bool_array]
#如此用户评分矩阵中用户1,和用户2的共同评分向量是
movieId
1 3.5
2 2.0
5 5.0
6 1.5
8 2.0
Name: 1, dtype: float64,
movieId
1 2.0
2 3.5
5 2.0
6 3.5
8 3.0
Name: 2, dtype: float64)
# 皮尔逊相关系数
def pearson(user_id1, user_id2):
x, y = build_xy(user_id1, user_id2)
mean1, mean2 = x.mean(), y.mean()
# 分母
denominator = (sum((x-mean1)**2)*sum((y-mean2)**2))**0.5
try:
value = sum((x - mean1) * (y - mean2)) / denominator
except ZeroDivisionError:
value = 0
return value
2.找到相似度最高的用户并进行推荐:
# 计算最相似的邻居
def computeNearestNeighbor(user_id, k=3):
return df.drop(user_id).index.to_series().apply(pearson, args=(user_id,)).nlargest(k)
#与用户3相似的前3个用户
userId
1 0.819782
6 0.801784
7 0.766965
Name: userId, dtype: float64
#推荐
def recommend(user_id):
# 找到最相似的用户id
nearest_user_id = computeNearestNeighbor(user_id).index[0]
print('最相似用户ID:')
print nearest_user_id
# 找出邻居评价过、但自己未曾评价的项目
# 结果:index是项目名称,values是评分
return df.loc[nearest_user_id, df.loc[user_id].isnull() & df.loc[nearest_user_id].notnull()].sort_values()
#对用户3进行推荐结果
最相似用户ID:
1
movieId
8 2.0
7 2.5
Name: 1, dtype: float64
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
CDA数据分析师 出品 作者:李诗怡 STP模型(营销战略三步法) 定义: 现代营销战略核心框架,通过市场细分(S)、目标市场选择( ...
2026-09-18在互联网产品迭代、运营优化、界面改版与策略升级过程中,主观经验判断容易造成决策偏差、盲目改版、资源浪费等问题。AB实验(AB ...
2026-09-18 很多企业并不缺少指标,缺少的是让指标“串起来、动起来、用起来”的体系。零散指标像散落一地的珠子,指标体系则是那根把珠 ...
2026-09-18在电商行业精细化运营时代,流量红利逐步消退,粗放式投流、广撒网营销模式已无法适配市场竞争需求。依托用户点击、加购、收藏、 ...
2026-09-17在数据可视化与数据分析工作中,图表是将零散数据转化为直观业务规律的核心工具。不同图表拥有专属的数据逻辑与分析维度,能够从 ...
2026-09-17 很多数据分析师每天盯着GMV、DAU、转化率,但当被问到“哪些指标在所有行业都适用”“哪些指标只对电商有意义”“二者如何搭 ...
2026-09-17在企业数字化运营、业务流程管理与精细化管控体系中,流程运营是串联各项业务环节、保障工作落地、提升运转效率的核心载体。无论 ...
2026-09-16在数据分析与统计学研究中,卡方检验是分析分类变量关联性与差异性的重要方法,广泛应用于市场调研、行为统计、社会调查、商业数 ...
2026-09-16 很多数据分析师每天盯着GMV、DAU、转化率,但当被问到“什么是指标”“指标和维度有什么区别”“如何定义指标值的计算规则和 ...
2026-09-16CDA数据分析师 出品 作者:李诗怡 定义: 用户增长核心分析框架,刻画用户从接触产品到自发推荐的全生命周期,五个递进环节构建 ...
2026-09-15在数字化营销与精细化用户运营时代,企业传统的广撒网式营销模式成本高、转化率低,已无法适配精准商业竞争需求。客户画像作为大 ...
2026-09-15 很多数据分析师精通描述性统计,能熟练计算均值、中位数、标准差,但当被问到“用500个样本如何推断10万用户的真实满意度” ...
2026-09-15在MySQL数据库数据查询与数据分析中,GROUP BY与ORDER BY是使用频率极高的核心关键字。二者语法结构相似,常搭配使用,但核心功 ...
2026-09-14随着数字化治理、智慧运营、数字孪生技术的普及,数字体征成为衡量业务状态、系统运行、城市治理与企业经营健康度的核心体系。数 ...
2026-09-14 很多数据分析师沉迷于复杂的模型和算法,却忽略了数据分析的一项基础能力——描述性统计。事实上,大量商业分析问题,用描述 ...
2026-09-14在MySQL数据库运维与开发实践中,经常出现一种典型现象:数据库实际存储的数据量很小,数据表条数少、文件体积低,但服务器整体 ...
2026-09-11 很多数据分析师能熟练计算均值、标准差,但当被问到“总体和样本有什么区别”“参数和统计量有什么关系”“数据级别的高低如 ...
2026-09-11CDA数据分析师 出品 作者:李诗怡 定义: 将同一时间段内因具备相同属性或共同经历的用户划分为群体,分析其留存与生命周期价值 ...
2026-09-11在零售、商超、餐饮、线下门店等实体商业运营中,客流与销售额是衡量门店经营状态的两大核心指标。销售额是门店经营的最终结果, ...
2026-09-10在数据可视化体系中,柱形图是最基础、应用最广泛的图表类型,其中**累计柱形图(堆积柱状图)**是兼顾整体总量与内部结构的核心 ...
2026-09-10