关联规则挖掘算法在校园超市营销的应用研究
2018-10-10佘朝兵
佘朝兵
摘要:在介绍了关联规则挖掘算法的相关概念以及算法的基础上,利用校园超市近两个月的销售记录进行挖掘分析,得出了该超市商品销售的关联规则,并利用对两条规则的置信度进行分析,建议采取将规则涉及的商品进行组合销售的策略。
关键词:关联规则;超市营销;Apriori算法
中图分类号:F721.7;TP311.13 文献标识码:A 文章编号:1007-9416(2018)07-0075-03
1 引言
校园超市作为大规模商品的集中地,为学生和老师的日常生活提供便利。超市的经营策略是薄利多销,因此如何提高超市的效益超市管理者面临的难题。为此,采取的措施无非是两个方面,概括起来就是开源节流。一方面,超市需要提高学生的销售体验,促进商品的销售量;另一方面,超市需要尽量地降低超市的运营成本。从销售体验角度而言,据调查,用户在超市停留的时间越久,用户产生的销售额越高。因此,如何尽量满足学生需求的前提下,提高学生在超市的逗留时间是一个可行的解决思路。从节约成本角度而言,超市的成本来自多个方面,如人力、库存、商品本身的成本等。与其他超市相比,可以有效降低成本的一个策略是降低库存。而这两个问题可通过关联规则挖掘算法来解决。关联规则挖掘算法是数据挖掘领域非常经典的算法,它主要通过对商品的销售记录进行分析,挖掘出用户经常购买的商品的规律,如经常买牛奶的用户同时也会去买面包。利用挖掘得到的规则就可以采取不同的销售策略。比如可以将规则中的两件商品分别放置在不同区域,由于用户买了其中一件商品后,大概率会去购买另一件商品,因此两件商品的物理空间可提高用户逗留超市的时间,提高用户购买其他商品的概率。总之,应用关联规则挖掘算法可有效提高超市的效益。
2 关联规则挖掘算法思想以及相关概念
关联规则挖掘算法中较为典型是Apriori算法。Apriori算法的核心思想是在给定支持度和置信度以及数据库的前提下,通过扫描数据库记录,挖掘数据库记录中满足给定支持度和置信度的规则。数据库是由一条一条的记录组成,每条记录包括不同的物品信息。表1显示的某个超市的销售记录,在该表中品名就是用户特定时刻购买的商品集和。
项集支持度是指商品项集在数据库的所有记录中出现的频率。项集支持度的计算公式如公式(1)所示:
其中表示商品项集,表示项集在数据库中出现的次数,表示数据库中总记录数。商品项集是指所有商品任意组合构成的集和,如表1中的商品项集以及对应的支持度如表2所示。
关联规则的格式如,其中,都是项集,但是要求和之间没有交集。具如华夫饼→方便面、华夫饼→{面包,方便面}等等。
其中是指数据库中项集和同时出现的次数。以华夫饼→方便面、华夫饼→{面包,方便面}这两条规则为例说明如表3所示。
假设指定要求关联规则的支持度阀值为0.5,置信度的0.7,则表3中只有华夫饼→方便面这条规则满足要求。
3 Apriori算法步骤
根据上节提到的算法概念,最终的规则需要满足支持度和置信度两个条件。而规则是由项集构成,因此算法的过程由生成项集、生成规则这两步进行:第一步寻找满足支持度要求的项集;第二步由所有符合要求的项集生成候选规则,最终从候选规则中筛选出满足支持度和置信度要求的规则。而在第一步中由于满足要求的项集包含的项目数的范围是1~(其中表示数据库中所有物品的数量)。因此生成的过程是最先得到只包含1个项目的项集,再逐步递增生成其他项集;第二步中的规则利用先前得到的项集的子集构成。以表1的数据记录为例,根据表2中只包含一个项目的项集支持度,发现只有{华夫饼}、{方便面}的支持度超过0.5,然后计算由{华夫饼}和{方便面}构成的项集{华夫饼、方便面}支持度,发现其支持度也超过了0.5,满足要求。由于无法生成只包含三个项目的项集,因此所有生成项集的过程结束。接下来,根据刚才生成的项集得到规则。由于{华夫饼}没有子集,因此不能生成规则,而{华夫饼、方便面}构成的项集只能生成{华夫饼→方便面}、{方便面→华夫饼}这两个候选规则,接下来就只需要分别计算上述两个规则的置信度即可得到答案。
获取满足需求的项集算法的伪代码如表4所示。
4 实验结果
为验证算法的有效性,特选择某校园超市一段时间的销售数据,应用Apriori算法挖掘。实验工具采用Anaconda3,实验过程在windows 2017操作系统上进行。
4.1 数据来源与数据预处理
本实验的数据来源是某校园超市2018年4、5月两个月的数据。保存的格式是xls格式,每条记录只包含一件物品,共计31211条记录。数据格式如表5所示。
由于同一个票号有不同的记录,而Apriori算法要求将同一个票号的所有物品只属于同一条记录。因此有必要将如表5所示的原始销售数据进行預处理。处理代码如下:
def read_data_from_xls(filename):
data = xlrd.open_workbook(filename)
table = data.sheets()[0]
nrows = table.nrows
cur_data={}
idList=[]
LastData=[]
for i in range(1,nrows): # 除了标题行外,循环逐行读取
t_id=table.row_values(i)[2]#获取票号
if( not t_id in idList ):
if(len(idList)>0):
LastData.append(cur_data[idList[len(idList)-1]])
cur_data[t_id]=[table.row_values(i)[4]]#獲取货号
idList.append(t_id)
else:
cur_data[t_id].append(table.row_values(i)[4])
LastData.append(cur_data[t_id])
return LastData
4.2 指定支持度和置信度的挖掘结果
实验设计了两个函数,其中L,supportData=apriori(dataSet,minSupport)函数得到的是指定支持度下的频繁项集,以及每个项集的支持度;而rules=generateRules(L,supportData,minConf)函数则以前函数得到的结果以及最小置信度作为参数挖掘规则。本文以最小支持度0.03,最小置信度0.3进行实验,挖掘出的规则如表6所示。
表6中数字对应的是货号,通过匹配原始记录得到货号对应的货名,得到规则如下:
{麻辣风味肠---->清真香肠}、{麻辣风味肠---->依娜丽豆干}
5 实验结果分析及其应用
通过实验发现3%的用户会同时购买麻辣风味肠和清真香肠或者麻辣风味肠和依娜丽豆干。原因可能与超市所处地理位置有关。超市所处的高校位于湘西,而腊肠等产品是湘西特产,结合学生的年龄以及喜爱的口味,麻辣风味肠的热销符合现实情况。而清真香肠等产品的热销是由于超市所属高校位于民族地区,高校内有部分学生属于少数民族,其中新疆学生占较大比例。为了照顾新疆学生的民俗风情,校园超市内单独设置了清真食品摊位。而其他学生对新疆的清真食品具有好奇心,加上部分清真食品符合学生口味,因此也属于学生喜欢的食品。
从规则的置信度来看,由于上述规则的置信度不高,不宜将规则所列的食品从物理空间上隔开。因此不妨将风味肠和清真香肠食品等商品组合成套餐,按一定折扣销售,将会进一步促进上述商品的销售。
参考文献
[1]贾克斌,李含婧,袁野.基于Apriori算法的数据挖掘在移动医疗系统中的应用[J].北京工业大学学报,2017,43(3):394-401.
[2]李志芳.数据挖掘技术在超市营销系统中的应用研究[D].保定:华北电力大学,2011.
[3]黄子航.关联规则挖掘在超市商品销售中的应用研究[J].赤峰学院学报(自然科学版),2017,33(16):11-12.
[4]Peter Harrington,李锐等译.机器学习实战[D].北京:人民邮电出版社,2013.
[5]陈丽芳.基于Apriori算法的购物篮分析[J].重庆工商大学学报(自然科学版),2014,31(5):84-89.