【东网技术大咖带您走进大数据】大数据挖掘技术分享-APP推荐模型应用
发布时间: 2016-12-23 15:56:13
新东网自2001年成立以来,掌握大数据、云计算、通信、物联网及区块链等信息技术,拥有一支逾16年经验的强大IT团队。为沉淀企业技术实力,继续发挥行业优势,《东网快讯》特邀新东网技术大咖带您走进这些先进信息技术,揭秘新东网16年来的技术成果,每周五发布。
新东网已经开发并运营智慧福州、智慧仓山、智慧中山、流流顺、中山好生活、派金宝等平台和App。接下来就为大家揭秘APP推荐模型应用。
APP推荐模型训练时,采用了以下几种方法:
基于项目的协同过滤算法(1-0)
基于项目的协同过滤算法(1-0)与偏好的IBCF算法相似,不同的是,算法是根据客户是否使用item来计算不同item之间的相似性矩阵(相当于使用余弦公式计算相似度)。由于计算时,矩阵只有1-0两种值,存储较小,同时1-0矩阵的矩阵计算效率较优(矩阵的转置,矩阵乘法以及crossprod算法),因此该算法可方便地实现对大量客户的APP使用做算法推荐。
基于项目的协同过滤算法(偏好度)
基于item的协同过滤算法,通过用户对不同item的评分来评测item之间的相似性,计算形成item之间的相似性矩阵,根据客户对item的偏好列表做出推荐。实际上是,给用户推荐和他之前喜欢的item相似的item。
基于用户的协同过滤算法(偏好度)
基于用户的协同过滤算法,通过不同用户对item的评分来评测用户之间的相似性,计算形成用户与用户之间的相似性矩阵,根据最近邻的偏好列表做出推荐。实际上是,给用户推荐与他兴趣相似的其他用户喜欢的item。
基于关联规则的推荐算法(1-0)
基于关联规则的推荐(Association Rule-based Recommendation)是以关联规则为基础,把客户已使用过的item作为规则头,规则体作为推荐对象。关联规则挖掘可以发现不同item在使用过程中的相似性。关联规则就是在一个交易类型的数据集合中统计使用了某itemA的交易中有多大的比例客户同时使用了某itemB,其直观意义在于:用户在某时间周期内,使用某些item的同时有多大的倾向去使用另外一些item。
由于算法只对“使用过”感兴趣,数据只要生成1-0(或者根据某些偏好标准判断客户是否使用过1-0);另外,算法只需要对样本数据以离线的形式进行分析采集、发现规则,无需对全部数据集做算法计算,因此计算效率及存储空间较优。发现规则后,即可定义向满足规则头的客户推荐规则体的item。
基于项目的协同过滤算法(1-0)
为测试该算法的计算效率,使用的数据为泉州-丰泽(595-501)的APP使用数据,整体计算约在10分钟内完成,算法步骤如下:
(1)读入交易类型数据,数据形式类似user_id,app_id;
(2)将数据转换成user_id~app_id的矩阵M,其中Rij代表客户i对APPj是否使用过,未使用过的使用0进行填充;
(3)计算各APP(列)之间的模mod;
(4)计算各列除以该列的模,计算各APP的向量MM;
(5)使用crsooprod计算列向量的内积,得到APP之间的相似度矩阵S;
(6)推荐列表:R = M %*% S(%*%为矩阵乘法)。
基于Popular、UBCF、IBCF偏好度的协同过滤算法
由于APP定义为客户规模排名前100个的APP,因此,这里同时使用了流行度的算法作为IBCF、UBCF的参考算法。
使用recmomenderlab包对Popular、UBCF、IBCF三种算法进行训练:
(1)读入user_id,app_id,rating的数据(实际中,Popular及IBCF算法都可对8万个客户进行推荐,而UBCF算法计算推荐时耗费大量时间,因此在测试的过程中,使用的4.5万客户的APP使用数据);
(2)将数据转化为USERID~APPID的形式,值为rating,其他用0进行填充(fill=0);
(3)将数据split为两份,80%的数据为训练集,20%的数据为测试集,分别对三种算法的预测rating与实际rating做误差计算;
(4)对三种算法做topNList的4-折cross验证,计算混淆矩阵的TPR、FPR。
3、基于关联规则的推荐算法
使用arules包对客户APP使用数据进行规则发现:
(1)读入数据:user_id,app_id;
(2)将数据转换成transactions形式(交易类型,user_id相当与订单号,app_id相当于订单中的一种商品,一个订单中可以有多种商品,相当于一个客户有多个APP使用记录);
(3)对支持度为10%,20%,30%,以及置信度为70%,80%,90%进行规则发现;
(4)对生成的规则进行剪枝(若规则1包含着规则2,且规则2的提升度小于等于规则1的提升度,则规则2为冗余规则,只需要保留规则1);
(5)得到规则列表。
IBCF/UBCF/POPULAR算法的误差分析
对基于偏好度的IBCF协同过滤、UBCF、流行度算法对样本数据(客户数4.5万,APP数100)实施效果评估:
(1)评分rating效果(80%训练集,20%测试集,预测app数目为50):
RMSE MSE MAE
POPULAR 0.5756349 0.3313555 0.3132222
IBCF 0.5347688 0.2859777 0.3108677
UBCF 0.4871018 0.2372681 0.2637091
从以上的误差率来看,IBCF,UBCF算法的误差率最小。
(2)4-折交叉验证topNList效果(将数据集分为4份,运行4次,每次利用其中3份作为模型的训练集,1份作为模型的测试集,对模型的效果进行交叉验证):
运行细节如下:
POPULAR run
1 [0.2sec/8.89sec]
2 [0.19sec/8.83sec]
3 [0.19sec/8.92sec]
4 [0.19sec/8.82sec]
IBCF run
1 [1.24sec/2.89sec]
2 [1.23sec/2.88sec]
3 [1.22sec/2.89sec]
4 [1.26sec/2.88sec]
UBCF run
1 [0.17sec/299.39sec]
2 [0.16sec/299.66sec]
3 [0.15sec/298.87sec]
4 [0.17sec/297.14sec]
三种算法对各topN的真正率(TPR)、假正率(FPR)如下:
从上面的输出可以看出:
1.1、topNList推荐效果: IBCF > UBCF > Popular;
1.2、由于我们选取的APP是按照客户规模排名选取的前100个,而流行度的推荐算法也是根据APP的客户规模进行推荐的,因此在这里,流行度的topNList的推荐效果作为IBCF、UBCF算法的参考值;
1.3、UBCF算法在模型预测的时候,需要耗费大量的时间计算某个客户与其他客户的相识度(可以从模型运行的细节上看出),在这里,使用的4.5万个客户的效果。因此,若客户量较大的话,如直接对1600万APP使用客户进行UBCF计算,计算效率和存储空间对系统都是一个很大的挑战。
1.4、综上所述,在本例中,以基于流行度的算法和IBCF协同过滤算法效果最优,通用情况下,应该考虑使用IBCF算法。
关联规则算法得到的规则效果:
最终以30%的支持度,90%的置信度得到关联规则的1500条规则,如下形式(详细规则可见rulex.txt):
左件=> 右件 支持度 置信度 提升度
{815,9000382,9007654} => {9003934} 0.302 0.986 2.034
{162,20210162,700826,815,9001014,9007700} => {9008700} 0.303 0.966 1.883
规则解释:
在所有的客户中,有30.2%的客户同时使用了{815,9000382,9007654}APP,其中,98.6%的客户同时有使用{9003934}的APP,因此,可对同时使用{815,9000382,9007654}的客户推荐{9003934}的APP。
1、由于模型训练使用的APP为客户规模前100个的APP,因此流行度算法的效果最好,若改变APP的选择定义,需要重新评估该算法的RMSE;
2、由于在我们的模型中,客户规模>>APP数量,根据以往的经验,IBCF算法比UBCF算法的效果要好;
3、根据上述模型效果评估及计算效率、存储方面综合考虑,可选择基于关联规则及IBCF的协同过滤算法,或者基于流行度及IBCF的协同过滤算法,实现APP的混合推荐系统。