基于协同过滤算法的推荐
数据挖掘的一个经典案例就是尿布与啤酒的例子。尿布与啤酒看似毫不相关的两种产品,但是当超市将两种产品放到相邻货架销售的时候,会大大提高两者销量。很多时候看似不相关的两种产品,却会存在这某种神秘的隐含关系,获取这种关系将会对提高销售额起到推动作用,然而有时这种关联是很难通过经验分析得到的。这时候我们需要借助数据挖掘中的常见算法-协同过滤来实现。这种算法可以帮助我们挖掘人与人以及商品与商品的关联关系。
协同过滤算法是一种基于关联规则的算法,以购物行为为例。假设有甲和乙两名用户,有a、b、c三款产品。如果甲和乙都购买了a和b这两种产品,我们可以假定甲和乙有近似的购物品味。当甲购买了产品c而乙还没有购买c的时候,我们就可以把c也推荐给乙。这是一种典型的user-based情况,就是以user的特性做为一种关联。
(本实验选用数据为真实电商脱敏数据,仅用于学习,请勿商用)
一、业务场景描述
通过一份7月份前的用户购物行为数据,获取商品的关联关系,对用户7月份之后的购买形成推荐,并评估结果。比如用户甲某在7月份之前买了商品A,商品A与B强相关,我们就在7月份之后推荐了商品B,并探查这次推荐是否命中。
本次实验选用的是PAI-Studio作为实验平台,仅通过拖拽组件就可以快速实现一套基于协同过滤的推荐系统。本实验的数据和完整业务流程已经内置在了PAI首页模板,开箱即用:
二、数据集介绍
数据源:本数据源为天池大赛提供数据,数据按时间分为两份,分别是7月份之前的购买行为数据和7月份之后的。
具体字段如下:
字段名含义类型描述user_id用户编号string购物的用户IDitem_id物品编号string被购买物品的编号active_type购物行为string0表示点击,1表示购买,2表示收藏,3表示购物车active_date购物时间string购物发生的时间
数据截图:
三、数据探索流程
本次实验选用的是PAI-Studio作为实验平台,仅通过拖拽组件就可以快速实现一套基于协同过滤的推荐系统。
实验流程图:
1.协同过滤推荐流程
首先输入的数据源是7月份之前的购物行为数据,通过SQL脚本取出用户的购买行为数据,进入协同过滤组件,这么做的目的是简化流程,因为购买行为对这次实验分析是最有价值的。协同过滤的组件设置中把TopN设置成1,表示每个item返回最相近的item和它的权重。通过购买行为,分析出哪些商品被同一个user购买的可能性最大。设置图如下:
协同过滤结果,表示的是商品的关联性,itemid表示目标商品,similarity字段的冒号左侧表示与目标关联性高的商品,右边表示概率:
比如上图的第一条,itemid1000和item15584的相似度为0.2747133918,相似度越高表示两个物品被同时选择的概率越大。
2.推荐
上述步骤介绍了如何生成强关联商品的对应列表,这里使用了比较简单的推荐规则,比如用户甲某在7月份之前买了商品A,商品A与B强相关,我们就在7月份之后推荐了商品B,并探查这次推荐是否命中。这个步骤是通过下图实现的:
3.结果统计
上面是统计模块,左边的全表统计展示的是根据7月份之前的购物行为生成的推荐列表,去重后一共18065条。右边的统计组件显示一共命中了90条,命中率0.4%左右。
根据上文的统计结果可以看出,本次试验的推荐效果比较一般,原因在如下几方面:
1)首先本文只是针对了业务场景大致介绍了协同过滤推荐的用法。很多针对于购物行为推荐的关键点都没有处理,比如说时间序列,购物行为一定要注意对于时效性的分析,跨度达到几个月的推荐不会有好的效果。其次没有注意推荐商品的属性,本文只考虑了商品的关联性,没有考虑商品是否为高频或者是低频商品,比如说用户A上个月买了个手机,A下个月就不大会继续购买手机,因为手机是低频消费品。
2)基于关联规则的推荐很多时候最好是作为最终推荐结果的补充或者是最基础的推荐系统,真正想提高准确率还是要依靠机器学习算法训练模型的方式,具体方法可以参考泛推荐系列的其它文章。
本文作者:傲海
相关文章
- C#7.2——编写安全高效的C#代码 c# 中模拟一个模式匹配及匹配值抽取 走进 LINQ 的世界 移除Excel工作表密码保护小工具含C#源代码 腾讯QQ会员中心g_tk32算法【C#版】
- C#字符串数组排序 C#排序算法大全 C#字符串比较方法 一个.NET通用JSON解析/构建类的实现(c#) C#处理Json文件 asp.net使用Jquery+iframe传值问题
- 基于滤波反投影的图像重建算法matlab仿真,R-L滤波和S-L滤波
- 【prony】基于prony算法的参数辨识matlab仿真
- 基于affine+sift特征提取的图像配准算法matlab仿真
- 基于协同滤波的个性化推荐算法matlab仿真
- 【两步稀疏表示法】基于两步稀疏表示法的小波变换的图像重建算法的MATLAB仿真
- 基于BP神经网络+HOG特征提取的视频中车辆车牌识别算法仿真
- 基于FPGA的改进实时图像增强算法的设计与实现
- 【MATLAB教程案例31】基于matlab的人脸检测相关算法的仿真与分析——肤色模型与形态学图像处理方法
- 基于BP神经网络的手写体数字识别算法matlab仿真
- 基于SIFT特征提取的图像拼接算法matlab仿真
- 【视频抖动程度检测】基于LK光流算法的视频图像序列抖动程度计算matlab仿真
- 【HHT孤岛检测】基于希尔伯特-黄变换(Hilbert-Huang Transform,HHT)GRNN的孤岛检测算法
- 【PSO路径规划】基于PSO优化算法的动态路径规划MATLAB仿真
- 是基于局部和全局一致性算法对双月数据进行分类
- 基于matlab的信号能量检测算法仿真
- 【TEA算法】基于FPGA的TEA算法的实现
- C#,图像二值化(19)——全局阈值的香巴拉算法( Shanbhag Thresholding)及源程序
- C#,图像二值化(12)——基于谷底最小值的全局阈值算法(Valley-Minium Thresholding)与源代码
- 数据结构算法第一篇排序算法常见
- 金九银十面试复习回顾及总结:算法 + 框架 +Redis+ 分布式 +JVM
- [算法]PriorityQueue的应用
- 《Python机器学习——预测分析核心算法》——2.4 基于因素变量的实数值预测:鲍鱼的年龄
- 为baselines算法库安装mujoco环境支持——ubuntu 20.04安装MuJoCo2.1.1
- 3-排序算法
- 华为OD机试 - 整理扑克牌(JavaScript) | 机试题+算法思路+考点+代码解析 【2023】
- 华为OD机试 - 最差产品奖(Python) | 机试题+算法思路+考点+代码解析 【2023】
- 基于皮尔逊相关系数的用户相似推荐算法python实现
- 【图像算法】彩色图像切割专题八:基于MeanShift的彩色切割
- leetcode算法232.用栈实现队列