1. 引言
随着商业发展和网络普及,店铺的支付方式不仅限于现金、银行卡的方式,还有类似支付宝、微信等电子现金转账方式。本文主要针对使用支付宝支付的店铺进行用户忠诚度分析,并根据用户的店铺忠诚度进行商品推荐。黄益国 [1] 使用k-means算法对淘宝用户进行店铺忠诚度分类,并根据该分类和朴素贝叶斯分类对用户进行商品预测,后文对该算法简称为KBS。但文献 [1] 中存在以下问题:一是k-means算法的用户分类数k值,作者暂定为3,且没有给出选取k为3的具体理由;二是利用贝叶斯分类判断用户是否购买某件商品时采用的特征,仅考虑了用户店铺忠诚度、购买商品A的系列商品的数量以及店铺是否有折扣,却没有考虑到商品之间的关联性;三是数据较为单一化,即只针对一间店铺进行用户忠诚度分析;四是缺少聚类对比实验,无法说明k-means聚类结果为最优。因此,本文提出一种基于店铺忠诚度分类和店铺关联性的朴素贝叶斯推荐算法,其主要研究内容如下:一是采用天池大数据提供的2000个店铺支付宝支付记录进行用户忠诚度分类;二是使用k-means算法对用户店铺忠诚度进行多个k值聚类;三是在使用贝叶斯分类判断用户是否购买某件商品时的特征中,增添购买商品A前所有可能购买商品的数量,即增添与商品A具有关联性的商品数量。
2. 用户店铺忠诚度聚类
黄益国采用的数据是NALA专业彩妆护肤名店(后面简称NL) 2009年到2016年6月30日有过网购经历的958名用户数据。其对用户店铺忠诚度进行k-means分类时采用的分类特征有网购历史、是否收藏本店、最近一次消费不超过三年、一年内网购次数、每次平均消费金额和最近一次商品评价。本文的实验数据采用天池大数据提供的IJCA117_data数据集,该数据包含支付宝用户从2015年7月7日到2016年10月31日的支付日志和用户浏览日志以及店铺信息,数据具体信息见章节3.1。根据文献 [2] [3] [4] [5] 和实验数据信息可将用户
对店铺
的忠诚度分类特征设置如表1所示。

Table 1. The classification characteristics of the loyalty of customer U i in store S j
表1. 用户
对店铺
的忠诚度分类特征
其中,Ck表示聚类的第k个特征,pay_time表示支付时间,per_pay表示店铺平均支付金额,score表示店铺评分,comment_cnt表示店铺被评论的次数,cate_id表示类别ID,shop_level表示店铺档次。
本文算法使用MATLAB中自带的k-means来实现用户店铺忠诚度聚类,具体步骤如下 [6]:
1) 根据表1进行数据处理,并存入变量user_data中,其中,user_data的第j行数据表示为:
;
2) 开启并行运算parpool;
3) for i = 3:6;
a) 调用k-means算法,[idx,C,sumd,D] = kmeans (user_data(:,3:end), i,'MaxIter', 10000, ’Display', 'final', 'Replicates', 100),其中,idx表示用户店铺忠诚度类别,C表示i类的各类质心,sumd表示类内所有点与该类质心点距离之和,D表示每个点到所有质心的距离,user_data(:,3:end)表示截取原始数据中除用户ID和店铺ID之外的所有用户店铺忠诚度分类特征,i表示类别数,(’MaxIter’,10000)表示最大迭代次数为10000,(’ Display','final')表示显示最终迭代结果,('Replicates',100)表示运算重复次数为100。
b) 按照类别数值越大忠诚度越高整理计算结果,并输出到user_shop_class,其中,user_shop_class的第j行数据格式为:
。
4) end;
5) 关闭并行运算。
3. 基于店铺忠诚度的朴素贝叶斯推荐算法
文献 [1] 中判断消费者是否购买产品A的方法是利用贝叶斯分类算法计算在a1、a2和a3这三个特征下购买产品A和不购买产品A的概率,若购买产品A的概率大于不购买的,则预测该消费者会购买产品A,反之则不购买产品A,其中,a1表示消费者在NL店忠诚度,a2表示购买过NL店系列产品B的数量,a3表示是否有NL店铺折扣优惠。在章节1中提到的数据中,不包含店铺是否有折扣,但比文献 [1] 中的数据多了店铺类别,因此,用户购买店铺的贝叶斯分类特征如表2所示。

Table 2. Bayesian classification characteristics of consumer U i in store S j
表2. 用户
购买店铺
的贝叶斯分类特征
贝叶斯分类特征C2的店铺关联性计算步骤如下 [7] [8]:
1) 数据处理:考虑到店铺存在重复购买的情况,在获取用户同一天店铺支付信息时在购买的多个店铺ID后面增加小数进行区分,如某用户在2016年5月10日不同时间点在店铺156支付三次,那么该用户2016年5月10日的支付信息为(156, 156.1, 156.2);
2) 初始化最小支持度min_Sup和最小置信度min_Conf:考虑到用户多次一天仅使用一次支付宝导致推出的规则支持度过小的情况,min_Sup的值设置为0.001,min_Conf设置为0.5 [9] [10];
3) 找出支持度大于min_Sup的1项集L1;
4) for
;
a) 根据
项集找支持度大于min_Sup的频繁
项集。
5) end;
6) 计算最大频繁项集L的所有非空子集的置信度,并找出置信度大于min_Conf的强关联规则;
7) 将店铺ID取整还原为原始店铺ID,并去掉重复的规则,如关联规则156 => (156.1, 156.2)和关联规则156.1 => (156.2, 156),对数据进行取整为156 => (156, 156)和156 => (156, 156),两个规则表示的均为店铺156可能被购买第二次甚至第三次,去重后可表示为156 => 156,表示店铺156有被重复购买的可能性。
其中,支持度(Support)计算公式如式(1)所示,置信度(Confidence)计算公式如式(2)所示:
(1)
(2)
根据以上信息对用户进行贝叶斯分类特征计算后,再进行用户贝叶斯店铺预测,用户贝叶斯店铺预测的步骤如下 [11] [12] [13]:
1) 数据处理:根据表2进行贝叶斯分类特征提取,并将训练数据和测试数据分别存入到Bayes_train_data和Bayes_test_data中,将用户对店铺的行为存入到Bayes_train_class和Bayes_test_class中,其中,Bayes_train_data和Bayes_test_data的第j行数据可表示为:
,Bayes_train_class和Bayes_test_class的第j行数据表示为:
,action_type表示用户在店铺的行为,行为包含两种购买和未购买分别用1和0表示;
2) 计算Bayes_train_data数据中的购买概率
和未购买概率
,其中,
=
的个数/数据总据,
=
的个数/数据总据;
3) 根据贝叶斯定理计算Bayes_train_data数据中每个类别条件下特征属性的划分概率
,其中,
;
4) 根据步骤3)及步骤4)的训练结果和公式(3)分别计算Bayes_test_data中用户
的店铺
属于类别
的概率
和属于类别
的概率
,公式(3)如下所示:
(3)
5) 比较
和
大小,若
,则说明用户
不在店铺
购买商品,反之,则说明用户
在店铺
购买商品,并将计算结果保存到变量prediction_results中,其中,prediction_results的j行数据可表示为:
。
4. 实验方案及结果分析
4.1. 实验数据预处理
本文的实验数据采用天池大数据提供的IJCA117_data数据集,该数据包含支付宝用户从2015年7月1日到2016年10月31日的支付日志和浏览日志以及2000个店铺信息,其数据格式如表3、表4和表5所示。
其中,user_id表示用户ID,shop_id表示店铺ID,pay_time表示支付时间,view_time表示浏览时间,per_pay表示店铺平均支付金额,score表示店铺评分,comment_cnt表示店铺被评论的次数,shop_level表示店铺档次,cate_1_name一级类别名称、cate_2_name二级类别名称和cate_3_name三级类别名称,其中,score、comment_cnt和shop_level的数值越大代表评分或店铺等级越高、评论次数越多。
选取2016年1月1日到2016年9月30日的支付日志和浏览日志作为训练数据,2016年10月1日到2016年12月31日的支付日志和浏览日志作为测试数据,其中包含453,412名用户的支付和浏览信息。店铺信息中不包含店铺类型ID,仅包含三个级别的类别名称,因此需要对cate_1_name、cate_2_name和cate_3_name进行数字化处理,处理方法为:以cate_1_name和cate_2_name为主分类cate1,cat_3_name为次分类cate2,则类别IDcate_id=cate1*100+cate2,如店铺847的主分类为美食–休闲茶饮、次分类为奶茶,设cate1=10,cate2=4,则分类为美食–休闲茶饮–奶茶的类别ID cate_id=1004。
4.2. 评测方法
实验选择贝叶斯预测结果的准确率作为实验的评价标准,计算公式如(4)所示:
(4)
其中,N表示Bayes_test_class的总行数,即测试数据总数量,prediction_results⊙Bayes_test_class表示计算预测结果和实际结果相同的数量。
4.3. 推荐算法实验及结果分析
本文将实验结果与文献 [1] 的算法进行对比,并将本文提出的算法用KBR表示。本文主要考虑的参数有k-means算法中的用户忠诚度类别数量k和购买商品A前所有可能购买商品的数量C2。计算结果如表6所示。

Table 6. Comparison of the results of the KBR and KBS algorithms
表6. KBR算法和KBS算法的计算结果对比
根据表6的计算结果可知,KBS算法的准确率随着k-means聚类数目的增加而减少,而随着k-means聚类数目的增加KBR算法的准确率并无较大变化。当k-means聚类数目一致时,KBR算法的准确率明显比KBS的准确率高,因此,KBR算法是有效的和可行的。
5. 结论
本文提出了一种基于店铺忠诚度分类和店铺关联性的朴素贝叶斯推荐算法。该算法以天池大数据提供的IJCA117_data数据集为测试数据,通过SQLServer 2008搭建数据库,通过MATLAB进行数据计算及对比。该算法首先对用户店铺忠诚度进行聚类,再根据用户的历史支付信息进行店铺关联性计算,最后,根据用户店铺忠诚度聚类结果以及店铺关联性进行朴素贝叶斯训练和测试。实验结果表明,本文提出的算法对KBS算法的改进是有效的。在本文中,k-means的店铺忠诚度聚类特征和贝叶斯分类特征仅选取了与店铺相关的信息,因此,在特征的选取上将是未来的研究重点。
基金项目
广东省科技厅项目(2016A070708002, 2015A070706001, 2014A07070 8005);研究生教育创新计划项(2016SFKC_42, YJS-SFKC-14-05, YJS-PYJD-17-03)资助;教育部“云数融合、科教创新”基金项目(2017B02101)资助。