数据挖掘与数据化运营实战. 3.11 商品推荐模型

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

3.11 商品推荐模型

鉴于商品推荐模型在互联网和电子商务领域已经成为一个独立的分析应用领域,并且正在飞速发展并且得到了广泛应用。因此除本节以外,其他章节将不再对商品推荐模型做任何分析和探讨,至于本节,相对于其他的分析类型来说,会花费更多的笔墨和篇幅。希望能给读者提供足够的原理和案例。

3.11.1 商品推荐介绍

电子商务推荐系统主要通过统计和数据挖掘技术,并根据用户在电子商务网站的行为,主动为用户提供推荐服务,从而来提高网站体验的。根据不同的商业需求,电子商务推荐系统需要满足不同的推荐粒度,主要以商品推荐为主,但是还有一些其他粒度推荐。譬如Query推荐、商品类目推荐、商品标签推荐、店铺推荐等。目前,常用的商品推荐模型主要分为规则模型、协同过滤和基于内容的推荐模型。不同的推荐模型有不同的推荐算法,譬如对于规则模型,常用的算法有Apriori等;而协同过滤中则涉及K最近邻居算法、因子模型等。没有放之四海而皆准的算法,在不同的电子商务产品中,在不同的电子商务业务场景中,需要的算法也是不一样的。实际上,由于每种算法各有优缺点,因此往往需要混合多种算法,取长补短,从而提高算法的精准性。

3.11.2 关联规则

1. Apriori算法

电子商务中常用的一种数据挖掘方法就是从用户交易数据集中寻找商品之间的关联规则。关联规则中常用的一种算法是Apriori算法。该算法主要包含两个步骤:首先找出数据集中所有的频繁项集,这些项集出现的频繁性要大于或等于最小支持度;然后根据频繁项集产生强关联规则,这些规则必须满足最小支持度和最小置信度。

上面提到了最小支持度和最小置信度,事实上,在关联规则中用于度量规则质量的两个主要指标即为支持度和置信度。那么,什么是支持度和置信度呢?接下来进行讲解。

给定关联规则X=>Y,即根据X推出Y。形式化定义为:

支持度(X=>Y)=

置信度(X=>Y)=

假设D表示交易数据集;K为项集,即包含k个项的集合;Lk表示满足最小支持度的k项集;Ck表示候选k项集。Apriori算法的参考文献描述如下。

在该算法中,候选集的计算过程如下所示。

L1={满足最小支持度的1项集}

for (k=2; Lk-1 ≠; k++)

         Ck=candicate_gen( Lk-1 )//计算候选项集

         for all transactions t∈D do

                           Ct=subset(Ck,t)//候选集是否包含在t中

                        for all candicates c∈Ct do

                                          c.count++

end

         Lk={c∈Ck | c.count大于等于最小支持度}

end

合并所有的Lk,得到频繁项集

首先进行连接运算如下:

insert into Ck

select p.item1, p.item2, p.itemk-1,…, q.itemk

from Lk-1 p, Lk-1 q

where p.item1=q.item1 and … and p.itemk-2=q.itemk-2 and p.itemk-1<q.itemk-1;

然后根据频繁项集定理(即频繁项集的子集必定是频繁项集)进行剪枝,过滤掉非频繁项集,过程如下所示:

 forall itemset c∈Ck

        forall (k-1) 子集 s of c do

                   if (s∈Lk-1 ) then

         delete c from Ck

从上述算法中可以看出,该算法存在一些困难点,譬如需要频繁扫描交易数据集,这样如果面临海量数据集,就难以满足实际应用需求;对于大型数据集,计算候选集算法的效率较低,这也是一个难以克服的问题。目前已经有一些优化的方法用于处理这些问题,譬如FP-growth算法。在实际应用中,随着数据的不断增长,可能还需要通过分布式计算来提高算法性能,譬如机器学习算法包Mahout中实现了的并行版本FP-growth算法。

2. Apriori算法实例

假设给定如下电子商务网站的用户交易数据集,其中,定义最小支持度为2/9,即支持度计数为2,最小置信度为70%,现在要计算该数据集的关联规则,如表3-1所示。

表3-1 用户交易数据集

交易标识         购买商品列表

2001         I1,I2,I5

2002         I2,I4

2003         I2,I3

2004         I1,I2,I4

2005         I1,I3

2006         I2,I3

2007         I1,I3

2008         I1,I2,I3,I5

2009         I1,I2,I3

计算步骤如下所示。

步骤1,根据Apriori算法计算频繁项集。

1)计算频繁1项集。扫描交易数据集,统计每种商品出现的次数,选取大于或等于最小支持度的商品,得到了候选项集,如表3-2所示。

表3-2 频繁1项集

         商品集     包含该商品集的记录数

         I1      6

         I2      7

         I3      6

         I4      2

         I5      2

2)根据频繁1项集,计算频繁2项集。首先将频繁1项集和频繁1项集进行连接运算,得到2项集,如下所示:

商品集     商品集

 I1 I1,I2

 I2 I1,I3

 I3 I1,I4

 I4 I1,I5

 I5 I2,I3

         I2,I4

         I2,I5

         I3,I4

         I3,I5

         I4,I5

扫描用户交易数据集,计算包含每个候选2项集的记录数,如表3-3所示。

表3-3 候选2项集

         商品集     包含该商品集的记录数

         I1,I2 4

         I1,I3 4

         I1,I4 1

         I1,I5 2

         I2,I3 4

         I2,I4 2

         I2,I5 2

         I3,I4 0

         I3,I5 1

         I4,I5 0

根据最小支持度,得到频繁2项集,如表3-4所示。

表3-4 频繁2项集

         商品集     包含该商品集的记录数

         I1,I2 4

         I1,I3 4

         I1,I5 2

         I2,I3 4

         I2,I4 2

         I2,I5 2

3)根据频繁2项集,计算频繁3项集。首先将频繁2项集进行连接,得到{{I1, I2, I3}, {I1, I2, I5}, {I1, I3, I5}, {I2, I3, I4}, {I2, I3, I5}, {I2, I4, I5}},然后根据频繁项集定理进行剪枝,即频繁项集的非空子集必须是频繁的,{I1, I2, I3}的2项子集为{I1,I2},{I1,I3},{I2,I3},都在频繁2项集中,则保留;

{I1, I2, I5}的2项子集为{I1,I2},{I1,I5},{I2,I5},都在频繁2项集中,则保留;

{I1, I3, I5}的2项子集为{I1,I3},{I1,I5},{I3,I5},由于{I3,I5}不是频繁2项集,移除该候选集;

{I2, I3, I4}的2项子集为{I2,I3},{I2,I4},{I3,I4},由于{I3,I4}不是频繁2项集,移除该候选集;

{I2, I3, I5}的2项子集为{I2,I3},{I2,I5},{I3,I5},由于{I3,I5}不是频繁2项集,移除该候选集;

{I2, I4, I5}的2项子集为{I2,I4},{I2,I5},{I4,I5},由于{I4,I5}不是频繁2项集,移除该候选集。通过剪枝,得到候选集{{I1, I2, I3}, {I1, I2, I5}},扫描交易数据库,计算包含候选3项集的记录数,得到表3-5。

表3-5 频繁3项集

         商品集     包含该商品集的记录数

         I1, I2, I3   2

         I1, I2, I5   2

4)根据频繁3项集,计算频繁4项集。重复上述的思路,得到{I1,I2,I3,I5},根据频繁项集定理,它的子集{ I2,I3,I5}为非频繁项集,所以移除该候选集。从而,频繁4项集为空,至此,计算频繁项集的步骤结束。

步骤2,根据频繁项集,计算关联规则。

这里以频繁3项集{I1, I2, I5}为例,计算关联规则。{I1, I2, I5}的非空子集为{I1,I2}、{I1,I5}、{I2,I5}、{I1}、{I2}和{I5}。

规则1,{I1,I2}=>{I5}, 置信度为{I1, I2, I5}的支持度除以{I1,I2}的支持度,即2/4=50%,因其小于最小置信度,所以删除该规则。

同理,最后可以得到{I1,I5}=>{I2},{I2,I5}=>{I1}和{I5}=>{I1,I2}为3条强关联规则。

然而,在实际应用Apriori算法时,需要根据不同的粒度,譬如类目、商品等,结合不同的维度(浏览行为,购买行为等)进行考虑,从而构建符合业务需求的关联规则模型。在电子商务应用中,关联规则算法适用于交叉销售的场景。譬如,有人要出行(飞往北京),根据计算出的关联规则(如:机票=>酒店)来考虑,那么,可以根据用户购买的机票,为用户推荐合适的北京酒店;再比如,在情人节,根据关联规则,将巧克力和玫瑰花进行捆绑销售等。

另外,关联规则还可以用来开发个性化电子商务推荐系统的Top N推荐。首先,根据用户的交易数据,计算用户在特定时序内购买过的商品;然后,根据关联规则算法,计算满足最小支持度和最小置信度的商品关联规则;再根据用户已经购买的商品和商品关联规则模型,预测用户感兴趣的商品,同时过滤掉用户已经购买过的商品,对于其他的商品,则按照置信度进行排序,从而为用户产生商品推荐。

3.11.3 协同过滤算法

协同过滤是迄今为止最成功的推荐系统技术,被应用在很多成功的推荐系统中。电子商务推荐系统可根据其他用户的评论信息,采用协同过滤技术给目标用户推荐商品。协同过滤算法主要分为基于启发式和基于模型式两种。其中,基于启发式的协同过滤算法,又可以分为基于用户的协同过滤算法和基于项目的协同过滤算法。启发式协同过滤算法主要包含3个步骤:1)收集用户偏好信息;2)寻找相似的商品或者用户;3)产生推荐。

“巧妇难为无米之炊”,协同过滤的输入数据集主要是用户评论数据集或者行为数据集。这些数据集主要又分为显性数据和隐性数据两种类型。其中,显性数据主要是用户打分数据,譬如用户对商品的打分,如图3-4所示。

 

图3-4 某电商网站用户对某商品的评分结果

但是,显性数据存在一定的问题,譬如用户很少参与评论,从而造成显性打分数据较为稀疏;用户可能存在欺诈嫌疑或者仅给定了部分信息;用户一旦评分,就不会去更新用户评分分值等。

而隐性数据主要是指用户点击行为、购买行为和搜索行为等,这些数据隐性地揭示了用户对商品的喜好,如图3-5所示。

隐性数据也存在一定的问题,譬如如何识别用户是为自己购买商品,还是作为礼物赠送给朋友等。

 

图3-5 某用户最近在某电商网站的浏览商品记录(左侧的3本书)

1. 基于用户的协同过滤

基于用户(User-Based)的协同过滤算法首先要根据用户历史行为信息,寻找与新用户相似的其他用户;同时,根据这些相似用户对其他项的评价信息预测当前新用户可能喜欢的项。给定用户评分数据矩阵R,基于用户的协同过滤算法需要定义相似度函数s:U×U→R,以计算用户之间的相似度,然后根据评分数据和相似矩阵计算推荐结果。

在协同过滤中,一个重要的环节就是如何选择合适的相似度计算方法,常用的两种相似度计算方法包括皮尔逊相关系数和余弦相似度等。皮尔逊相关系数的计算公式如下所示:

 

其中,i表示项,例如商品;Iu表示用户u评价的项集;Iv表示用户v评价的项集;ru,i表示用户u对项i的评分;rv,i表示用户v对项i的评分;表示用户u的平均评分;表示用户v的平均评分。

另外,余弦相似度的计算公式如下所示:

 

另一个重要的环节就是计算用户u对未评分商品的预测分值。首先根据上一步中的相似度计算,寻找用户u的邻居集N∈U, 其中N表示邻居集,U表示用户集。然后,结合用户评分数据集,预测用户u对项i的评分,计算公式如下所示:

 

其中,s(u, u')表示用户u和用户u'的相似度。

假设有如下电子商务评分数据集,预测用户C对商品4的评分,见表3-6。

表3-6 电商网站用户评分数据集

  用户     商品1      商品2      商品3      商品4

用户A      4       ?       3       5

用户B      ?       5       4       ?

用户C      5       4       2       ?

用户D     2       4       ?       3

用户E      3       4       5       ?

表中? 表示评分未知。根据基于用户的协同过滤算法步骤,计算用户C对商品4的评分,其步骤如下所示。

(1)寻找用户C的邻居

从数据集中可以发现,只有用户A和用户D对商品4评过分,因此候选邻居只有2个,分别为用户A和用户D。用户A的平均评分为4,用户C的平均评分为3.667,用户D的平均评分为3。根据皮尔逊相关系数公式来看,用户C和用户A的相似度为:

 

同理,s(C, D) =-0.515。

(2)预测用户C对商品4的评分

根据上述评分预测公式,计算用户C对商品4的评分,如下所示:

 

依此类推,可以计算出其他未知的评分。

2. 基于项目的协同过滤

基于项目(Item-Based)的协同过滤算法是常见的另一种算法。与User-Based协同过滤算法不一样的是,Item-Based 协同过滤算法计算Item之间的相似度,从而预测用户评分。也就是说该算法可以预先计算Item之间的相似度,这样就可提高性能。Item-Based协同过滤算法是通过用户评分数据和计算的Item相似度矩阵,从而对目标Item进行预测的。

和User-Based协同过滤算法类似,需要先计算Item之间的相似度。并且,计算相似度的方法也可以采用皮尔逊关系系数或者余弦相似度,这里给出一种电子商务系统常用的相似度计算方法,即基于条件概率计算Item之间的相似度,计算公式如下所示:

 

其中,s(i, j)表示项i和j之间的相似度;freq(ij)表示i和j共同出现的频率;freq(i)表示i出现的频率;freq(j)表示j出现的频率;表示阻力因子,主要用于平衡控制流行和热门的Item,譬如电子商务中的热销商品等。

接下来,根据上述计算的Item之间的相似度矩阵,结合用户的评分,预测未知评分。预测公式如下所示:

 

其中,pu, i表示用户u对项i的预测评分;S表示和项i相似的项集;s(i, j)表示项i和j之间的相似度;ru, j表示用户u对项j的评分。

3. Item-Based协同过滤实例

在电子商务推荐系统中,商品相似度计算有着很重要的作用。它既可用于一些特定推荐场景,譬如直接根据当前的商品,为用户推荐相似度最高的Top N商品。同时,它还可以应用于个性化推荐,从而为用户推荐商品。电子商务网站收集了大量的用户日志,譬如用户点击日志等。

基于Item-Based协同过滤算法,笔者提出了一种增量式商品相似度的计算解决方案。该算法计算流程如图3-6所示。

 

图3-6 增量式商品相似度计算流程图

其中,商品关系i表示第i天的商品关系数据集。

具体计算步骤如下。

1)获取当天用户点击行为数据,过滤掉一些噪声数据,譬如商品信息缺失等。从而得到用户会话sessionID、商品ID(商品标识)、浏览时间等信息,如表3-7所示。

由于A4的浏览时间和A1、A2、A3相差较大,因此将其过滤掉,这里定义为1800秒,如表3-8所示。

表3-7 用户点击行为日志表

用户会话ID    浏览商品的时间         Item Pairs

100  A1, 20:12 A1, A2   A1, A3

         A2, 20:13 A2,A1   A2, A3

         A3, 20:15 A3,A1   A3, A2

         A4, 23:30

表3-8 过滤后的用户点击行为日志表

浏览商品的时间          Item Pairs

     A1, 20:12        A1, A2   A1, A3

     A2, 20:13        A2,A1   A2, A3

     A3, 20:15        A3,A1   A3, A2

2)首先,计算任意两种商品之间的共同点击次数。然后,根据基于条件概率的商品相似度计算方法来计算商品的相似度。商品相似度公式如下。

s(i, j)

其中,s(i, j)表示项i和j之间的相似度;freq(ij)表示i和j共同出现的频率;freq(i)表示i出现的频率;freq(j)表示j出现的频率。

3)合并前一天计算的商品相似度数据,进行投票判断,选择相似度较大的作为新的商品相似度,从而实现增量式商品相似度计算。

3.11.4 商品推荐模型总结

对于商品推荐模型,除了上述介绍的基于关联规则和基于协同过滤的算法外,还有其他一些常用的算法,譬如基于内容的算法,即根据商品标题、类目和属性等信息,计算商品之间的关系,然后结合用户行为特征,为用户提供商品推荐。商品推荐模型面临着许多重要问题,譬如特征提取问题,即如何从商品标题、类目和属性中提取商品的重要特征、新用户问题,即如何解决用户行为较少,提升推荐质量、新商品问题,即如何处理长尾商品问题,让更多的商品有推荐展现的机会、稀疏性问题,即对于庞大的用户和商品数据,用户评分数据往往会显得非常稀疏等。面对这些问题,在实际应用中,需要根据业务场景,充分利用各种算法的优点,从而设计出混合推荐算法,以便提升推荐质量。
相关文章
|
3月前
|
SQL 存储 算法
【数据挖掘】恒生金融有限公司2023届秋招数据ETL工程师笔试题解析
恒生科技2022年9月24号数据ETL工程师岗位的笔试题目及答案汇总,包括了SQL选择题、SQL编程题和业务应用SQL编程题,涵盖了数据库基础知识、SQL语句编写以及数据仓库概念等多个方面。
61 2
【数据挖掘】恒生金融有限公司2023届秋招数据ETL工程师笔试题解析
|
3月前
|
机器学习/深度学习 安全 算法
【2023年第十一届泰迪杯数据挖掘挑战赛】A题:新冠疫情防控数据的分析 32页和40页论文及实现代码
本文总结了2023年第十一届泰迪杯数据挖掘挑战赛A题的新冠疫情防控数据分析,提供了32页和40页的论文以及实现代码,涉及密接者追踪、疫苗接种影响分析、重点场所管控以及疫情趋势研判等多个方面,运用了机器学习算法和SEIR传染病模型等方法。
66 0
【2023年第十一届泰迪杯数据挖掘挑战赛】A题:新冠疫情防控数据的分析 32页和40页论文及实现代码
|
3月前
|
机器学习/深度学习 安全 算法
【2023年第十一届泰迪杯数据挖掘挑战赛】A题:新冠疫情防控数据的分析 建模方案及python代码详解
本文介绍了2023年第十一届泰迪杯数据挖掘挑战赛A题的解题思路和Python代码实现,涵盖了新冠疫情防控数据的分析、建模方案以及数据治理的具体工作。
76 0
【2023年第十一届泰迪杯数据挖掘挑战赛】A题:新冠疫情防控数据的分析 建模方案及python代码详解
|
3月前
|
机器学习/深度学习 数据挖掘 Python
【数据挖掘】生成模型和判别模型的区别及优缺点
文章讨论了生成模型和判别模型在数据挖掘中的区别、原理、优缺点,并提供了一些常见的模型示例。
39 0
|
5月前
|
数据采集 数据可视化 数据挖掘
数据挖掘实战:使用Python进行数据分析与可视化
在大数据时代,Python因其强大库支持和易学性成为数据挖掘的首选语言。本文通过一个电商销售数据案例,演示如何使用Python进行数据预处理(如处理缺失值)、分析(如销售额时间趋势)和可视化(如商品类别销售条形图),揭示数据背后的模式。安装`pandas`, `numpy`, `matplotlib`, `seaborn`后,可以按照提供的代码步骤,从读取CSV到数据探索,体验Python在数据分析中的威力。这只是数据科学的入门,更多高级技术等待发掘。【6月更文挑战第14天】
539 11
|
5月前
|
数据采集 机器学习/深度学习 数据可视化
数据挖掘实战:Python在金融数据分析中的应用案例
Python在金融数据分析中扮演关键角色,用于预测市场趋势和风险管理。本文通过案例展示了使用Python库(如pandas、numpy、matplotlib等)进行数据获取、清洗、分析和建立预测模型,例如计算苹果公司(AAPL)股票的简单移动平均线,以展示基本流程。此示例为更复杂的金融建模奠定了基础。【6月更文挑战第13天】
1512 3
|
5月前
|
人工智能 分布式计算 算法
数据挖掘实战随笔更新清单
这是一系列技术博客的摘要,涵盖了多个主题。包括Elasticsearch实战经验、Maxcompute中的Geohash转换和GPS处理、Python环境配置与管理(如Jupyter、Miniforge、Miniconda)、批量接口调用、多进程CSV图片下载、Excel到Markdown转换、Scikit-learn的异常检测(OC-SVM)和模型总结、人工智能领域的图像分类和识别、文本挖掘算法以及数仓相关的行转列处理。所有文章都在持续更新和补充中。
48 2

热门文章

最新文章

下一篇
无影云桌面