9.2 Apriori 在 Python 中的实现
下面通过餐饮企业中的例子演示Apriori在Python中的实现。客户在餐厅点餐时,面对菜单中大量的菜品信息,往往无法迅速找到满意的菜品,既增加了点菜的时间,也降低了客户的就餐体验。实际上,菜品的合理搭配是有规律可循的:顾客的饮食习惯、菜品的荤素和口味,有些菜品之间是相互关联的,而有些菜品之间是对立或竞争关系(负关联),这些规律都隐藏在大量的历史菜单数据中,如果能够通过数据挖掘发现客户点餐的规则,就可以快速识别客户的口味,当他下了某个菜品的订单时推荐相关联的菜品,引导客户消费,提高顾客的就餐体验和餐饮企业的业绩水平。
数据库中部分点餐数据如表9-2所示:
首先将表9-2中的事务数据(一种特殊类型的记录数据)整理成关联规则模型所需的数据结构,从中抽取10个点餐订单作为事务数据集,为方便起见将菜品{18491,8842,8693,7794,8705}分别简记为{a,b,c,d,e})如表9-3所示。
表9-2 数据库中部分点餐数据
表9-3 某餐厅事务数据集
在Python中实现运用Apriori算法做关联规则分析的代码如代码清单9-1所示。其中,我们自行编写了Apriori算法的函数apriori.py,读者有需要的时候可以直接使用。
使用Apriori函数前需要将原始数据转换为0-1矩阵,之后设置参数,data为转换好的0-1矩阵,support为最小支持度,confidence为最小置信度,ms为连接符。
代码清单9-1 Apriori算法调用代码
#-*- coding: utf-8 -*- #使用 Apriori算法挖掘菜品订单的关联规则 from __future__ import print_function import pandas as pd from apriori import * #导入自行编写的 apriori函数 inputfile = '../data/menu_orders.xls' outputfile = '../tmp/apriori_rules.xls' #结果文件 data = pd.read_excel(inputfile, header = None) print(u'\n转换原始数据至 0-1矩阵 ...') ct = lambda x : pd.Series(1, index = x[pd.notnull(x)]) #转换 0-1矩阵的过渡函数 b = map(ct, data.as_matrix()) #用 map方式执行 data = pd.DataFrame(list(b)).fillna(0) #实现矩阵转换,空值用 0填充 print(u'\n转换完毕。 ') del b #删除中间变量 b,节省内存 support = 0.2 #最小支持度 confidence = 0.5 #最小置信度 ms = '---' #连接符,默认 "--",用来区分不同元素,如 A--B。需要保证原始表格中不含有该字符 find_rule(data, support, confidence, ms).to_excel(outputfile) #保存结果
*代码详见:示例程序/code/9-1.py
其中,转换出的矩阵为:
a b c d e 0 1.0 0.0 1.0 0.0 1.0 1 0.0 1.0 0.0 1.0 0.0 2 0.0 1.0 1.0 0.0 0.0 3 1.0 1.0 1.0 1.0 0.0 4 1.0 1.0 0.0 0.0 0.0 5 0.0 1.0 1.0 0.0 0.0 6 1.0 1.0 0.0 0.0 0.0 7 1.0 1.0 1.0 0.0 1.0 8 1.0 1.0 1.0 0.0 0.0 9 1.0 0.0 1.0 0.0 1.0
将原始的事务性数据转换为0-1矩阵后,Apriori算法才可以运行。
Python程序输出的结果如下:
正在进行第 1次搜索 ...数目: 6...正在进行第 2次搜索 ...数目: 3...正在进行第 3次搜索 ...数目: 0...结果为: support confidence e---a 0.3 1.000000 e---c 0.3 1.000000 c---e---a 0.3 1.000000 a---e---c 0.3 1.000000 a---b 0.5 0.714286 c---a 0.5 0.714286 a---c 0.5 0.714286 c---b 0.5 0.714286 b---a 0.5 0.625000 b---c 0.5 0.625000 b---c---a 0.3 0.600000 a---c---b 0.3 0.600000 a---b---c 0.3 0.600000 a---c---e 0.3 0.600000
对输出结果进行解释:如关联规则“a---b 0.50.714286”这条,关联规则a---b的支持度support=0.5,置信度confidence=0.714286。对于餐饮业来说,这条规则意味着客户同时点菜品a和b的概率是50%,点了菜品a,再点菜品b的概率是71.4286%。知道了这些,就可以对顾客进行智能推荐,增加销量同时满足客户需求。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论