1、基于消费者行为的点餐推荐算法 丁铛 张志飞 苗夺谦 陈岳峰 同济大学计算机科学与技术系 同济大学嵌入式系统与服务计算教育部重点实验室 同济大学大数据与网络安全研究中心 摘 要: 随着电子商务的发展, 餐饮行业现有的大多数管理系统落后于消费者和管理人员的需要, 一种行之有效的方法是将推荐系统应用于餐饮管理, 根据消费者的行为数据为用户点餐提供菜品的推荐。针对推荐系统中的冷启动问题, 提出基于消费者行为的点餐推荐算法, 设计出频度统计、关联规则和 Markov 链 3 个推荐引擎的加权组合推荐系统。在实际餐厅订单数据样本上, 所提算法能够取得令人满意的推荐效果, 且得到具有普适性的 3 个推荐引擎
2、的组合权值 (0.2167, 0.5167, 0.2666) , 同时得到最佳的推荐长度为 3。关键词: 数据挖掘; 推荐系统; 关联规则; Markov 链; 餐饮管理; 作者简介:丁铛 (1994-) , 女, 硕士生, CCF 学生会员, 主要研究方向为智能信息处理;E-mail:;作者简介:张志飞 (1986-) , 男, 博士, 讲师, CCF 会员, 主要研究方向为机器学习、自然语言处理;E-mail: (通信作者) ;作者简介:苗夺谦 (1964-) , 男, 博士, 教授, CCF 会员, 主要研究方向为粒度计算、数据挖掘、机器学习;作者简介:陈岳峰 (1986-) , 男,
3、硕士, 主要研究方向为自然语言处理、机器学习。基金:国家自然科学基金项目 (61273304, 61673301) Ordering Recommender Algorithm Based on Consumers BehaviorDING Dang ZHANG Zhi-fei MIAO Duo-qian CHEN Yue-feng Department of Computer Science and Technology, Tongji University; Abstract: With the development of e-commerce, most of the existing
4、 catering management system lags consumers and managers need.An effective approach is to apply recommendation systems to catering management, and to provide ordering recommendations according to consumers behavior data.As for cold start problems that may arise in the recommending process, the orderi
5、ng recommender system based on consumers behavior was proposed, containing three recommendation engines, which are frequency statistics, association rules and Markov chain.Experiments on ordering data of real restaurants achieve a satisfactory result, and get a weight combination of three recommenda
6、tion engine: (0.2167, 0.5167, 0.2666) , and the best recommending length under that weight:3.Keyword: Data mining; Recommendation system; Association rules; Markov chain; Catering management; 1 引言电子商务发展迅猛, 已渗透到了各行各业, 如在餐饮业, 涌现了很多外卖、点评等应用。这些应用的出现为消费者提供了很多便利, 然而现有的大多数餐饮管理系统仍是基于 C/S 架构的基本功能实现的, 远落后于日常生
7、活中人们所使用的应用的发展, 也难以满足消费者和餐饮管理人员的需要。实际上, 餐厅的订单中蕴含着丰富的信息, 如果能够对消费者的行为数据进行分析, 从中获取消费者的喜好, 既能有助于餐厅向消费者提供更符合消费者喜好的服务, 也能方便消费者的使用, 具有极大的现实意义和经济效益。根据消费者的行为数据, 为用户点餐提供菜品的推荐, 这一过程被看作推荐系统问题。推荐系统在 20 世纪 90 年代中期开始成为独立的研究领域, 一直备受关注;然而, 在餐饮行业的管理系统中, 推荐系统的应用较为少见1-2。不同于搜索引擎, 推荐系统不需要用户主动地提供需求, 而是通过分析用户过去的行为, 对用户可能感兴趣
8、的信息进行推荐3。本文通过获取餐厅的订单数据作为用户行为样本, 对其进行统计和分析, 从中挖掘出用户的行为信息, 以预测用户“最有可能点单的菜品”推荐给用户, 从而能够在一定程度上满足餐厅的信息需求, 适应用户的行为变化;以推荐列表中是否出现了用户所点菜品作为推荐系统的准确性评测标准, 对推荐系统进行评测, 并对推荐系统中的参数进行优化, 从而获得最优的推荐系统参数。2 相关工作目前广泛使用的推荐方法主要有:基于内容的推荐和基于协同过滤的推荐4。基于内容的推荐则是根据用户自身选择的物品的内容相似性进行推荐, 即推荐给用户与他喜欢的东西相似的东西。基于协同过滤的推荐则是通过分析相似用户的兴趣,
9、根据相似用户的评价来进行推荐。对现有的推荐方法进行分析, 以为餐厅点单推荐系统的设计提供参考和启发。2.1 基于内容的推荐推荐系统的作用是利用用户的历史行为和兴趣, 为用户推荐其可能喜欢的物品。因此, 推荐系统需要大量的用户行为数据作为推荐的基础。当一个系统拥有大量的用户时, 获取足够的用户行为数据完全不是问题;但在系统刚开始使用, 还没有大量的用户数据的情况下, 如何使推荐系统仍然能够有效地进行推荐, 并让用户对推荐的结果满意?这就是冷启动问题。使用基于内容的推荐能有效地解决冷启动问题。2.2 基于协同过滤的推荐协同过滤算法是一种仅仅基于用户行为数据设计的推荐算法5。例如:基于邻域的方法 (
10、neighborhood-based) 、隐语义模型 (latent factor) 、基于图的随机游走算法 (random walk on graph) 6等。在这些方法中, 最著名的同时也在业界得到最为广泛应用的算法就是基于邻域的方法7。基于邻域的方法主要包含基于用户的协同过滤算法和基于物品的协同过滤算法两种。2.3 基于 Markov 链和关联规则的推荐用户访问预测是根据用户的访问信息和访问路径预测用户下一步可能访问的Web 页面, 与本文的餐厅点单推荐具有类似的模型, 具有一定的参考价值。根据历史订单信息和用户已点的菜品预测用户下一步可能选择的菜品, 并将其作为推荐结果推荐给用户。目前
11、, 用户访问预测模型主要分为 3 类:基于关联规则、基于 Markov 和基于路径相似8。Gry 等9使用关联规则预测用户的下一个访问页面, 但是该方法的实时性难以保证。Zuckerman 等10最先推出了基于Markov 的用户访问预测模型, 它是一种简单而经典的预测模型, 但低阶 Markov模型的预测准确率较低, 而高阶 Markov 覆盖的状态空间庞大, 导致计算复杂度过高。对此, 邢永康等11提出并建立了基于用户分类的多 Markov 链预测模型, 该模型虽然提高了预测准确率, 但是时间复杂度仍然较高。Gndz 等12提出了基于点击流树的预测算法, 在点击流树上查找与当前访问路径相似
12、的历史访问路径, 然后再根据它做出预测。该模型数据量十分庞大, 空间复杂度也会越来越大。在这些工作的基础上, 林等8提出了基于 Markov 链和关联规则的预测模型。该模型改进了 Markov 链二阶转移矩阵的计算方法, 用二阶 Markov 链生成预测的候选集, 利用二项关联规则修正预测的结果。该模型能在保证准确率的同时, 在线性时间之内完成在线预测。3 基于消费者行为的点餐推荐算法3.1 冷启动问题推荐系统中最典型的就是冷启动问题13。本文中存在的冷启动问题主要有:1) 对于餐厅的新用户, 无法根据他的历史行为预测兴趣;2) 对于新加入的菜品, 无法预知有哪些用户对它感兴趣等。对此, 使用
13、基于内容的推荐方法:1) 对于新用户, 寻找菜品之间的关联, 推荐与用户当前选择的菜品关联程度最高的菜品;2) 对于新添加的菜品, 可以利用它的种类信息, 将它推荐给喜欢过和它们相似的物品的用户。因此, 本课题使用关联规则 Apriori 算法对餐厅的订单信息和菜品进行挖掘, 以寻找菜品之间的联系。3.2 算法框架本文的组合推荐系统设计为由推荐引擎和处理流程构成, 其推荐主体由 3 个推荐引擎组成, 每个推荐引擎分别负责一类特征和一种任务。而推荐系统的处理流程的任务只是将推荐引擎所产生的初始的推荐结果按照一定的权重或者优先级合并、排序后返回。这种设计的优点在于提高了推荐引擎之间的独立性, 使系
14、统便于升级维护。系统的架构设计如图 1 所示。图 1 组合推荐系统的架构图 下载原图组合推荐系统需要完成的功能包括:各个推荐引擎中各自规则的产生和使用, 以及推荐系统将 3 个推荐引擎的初始推荐结果进行合并处理, 产生最终的推荐结果。算法 1 基于消费者行为的点餐推荐算法输入:用户的当前点单信息输出:N 个推荐得分最高的推荐菜品, 每个菜品对应的推荐得分 Score步骤 1 频度统计、关联规则、Markov 链 3 个推荐引擎根据各自规则的产生和使用, 产生初始推荐结果;步骤 2 将各个推荐引擎计算的初始推荐结果合并:将初始推荐结果分别乘上权重 (w_Freq, w_Apriori, w_Ma
15、rkov) 后求和, 得到推荐得分;步骤 3 根据实际情况对合并后的结果进行过滤, 去除不需要推荐的项目, 例如餐厅当前已经售罄的菜品;步骤 4 将所有待推荐的项目按照推荐得分排序;步骤 5 取推荐得分最高的 N 项作为推荐结果推荐给用户。3.2.1 频度统计推荐引擎对于一个还没有在店内消费, 没有产生任何行为数据的用户而言, 了解餐厅的“热门菜品”无疑是一个很好的选择。利用频度统计进行推荐的原理便是如此, 即将餐厅的订单数据进行统计, 按照次数排序, 提取订单次数最多的菜品作为初始推荐结果。算法 2 频度统计推荐引擎算法输入:所有订单数据, 推荐列表长度 N输出:N 个推荐得分最高的推荐菜品
16、, 每个菜品对应的推荐得分步骤 1 扫描订单数据, 对每一条订单中出现的菜品进行频次统计, 记录每个菜品被点的次数;步骤 2 将频次最高的菜品的次数设定为 Max_Freq, 推荐得分设定为 10000, 其余菜品的频次都除以 Max_Freq, 按照式 (1) 计算得分;步骤 3 对 Scoref进行排序, 选择 Scoref最高的 N 个菜品输出。3.2.2 关联规则推荐引擎关联规则推荐引擎应用 Apriori 算法对餐厅的订单数据进行处理, 计算置信度和支持度。假设一条关联规则 A=B, 其中 A 为规则头, B 为规则体, 则其在数据集 D 中的支持度和置信度的定义如下:支持度 sup
17、port 定义为 D 中事务包含项目集合 A 和 B 的并集的比例, 置信度 confidence 定义为 D 中包含 A 的事务中同时也包含 B的事务的比例。当一个项目集合满足最小支持度 min_sup 时, 称之为频繁项目集。所有的频繁的 k 项集的集合记作 Lk。算法 3 关联规则推荐引擎算法输入:最小支持度, 最小置信度, 所有订单数据, 消费者当前选择的菜品输出:N 个得分最高的推荐菜品, 每个菜品对应的得分 Scorea步骤 1 设定最小支持度 min_sup 和最小置信度 min_con;步骤 2 根据候选项集生成频繁项集, 要求频繁项集的支持度大于或等于min_sup;步骤 3
18、 读入所有的订单信息, 订单中的所有菜品都被看作候选 1-项集, 得出各项的支持度, 再使用频繁 1-项集来产生候选 2-项集;步骤 4 扫描订单信息, 产生候选的 2-项集集合, 找出频繁 2-项集;步骤 5 统计所有的频繁 2-项集, 并按照支持度与置信度的乘积进行排序, 结果最大的设定为 Max_Apriori, 并将其得分设定为 10000;步骤 6 其余得分按照式 (4) 进行设定:步骤 7 将消费者当前所点的菜品作为规则左部选择搜索得到的频繁 2-项集, 并按照得分进行排序, 若当前处于系统的初始状态, 即消费者还未选择任何菜品, 则规则左部为 0;步骤 8 按照 Scorea进行
19、排序, 输出 Scorea最高的 N 个排序结果。3.2.3 Markov 链推荐引擎设随机过程X (t) , tT的状态空间为 I, 其中 T 表示时间维度。如果对时间 t 的任意 n 个数值 t1ttn (n3, t iT) 在条件 X (ti) =xi (xiI, I=1, 2, , n-1) 下, X (t n) 的条件分布函数等于在条件 X (tn-1) =xn-1下 X (tn) 的条件分布函数, 即则称随机过程X (t) , tT是 k 阶 Markov 过程, 记为 k-Markov9。本文使用 Markov 链进行推荐。将一条订单信息作为一个事务, 将一条订单中的每个菜品称作
20、一个状态。将点单转移链称为 Markov 链, 通过对订单记录找出大部分消费者点单的规律性和传递性, 得到消费者点单行为并建立 Markov 模型。算法 4 Markov 链推荐引擎算法输入:所有订单数据, 消费者当前选择的菜品输出:N 个推荐得分最高的推荐菜品, 每个菜品对应的推荐得分 Scorem步骤 1 若订单中只有一个菜品 A, 则 Markov 链的计算过程跳过该条订单。步骤 2 若订单中只有两个菜品 A 和 B, 则系统将本条订单看作一次事务 Ti, 而选择菜品的 A 作为一个系统状态A;若该用户的订单在菜品 A 之后还选择了菜品 B, 则系统从上一状态A转移到状态B;或者系统从状
21、态0, A转移到B。步骤 3 若订单中用户选择了菜品 A, B, C, 则系统将本条订单看作一次事务 Ti, 而本次选择菜品 A 作为一个系统状态A;若该用户的订单在菜品 A 之后还选择了菜品 B 和 C, 则系统从上一状态B转移到状态C;或者系统从状态A, B转移到C。步骤 4 以此类推, 订单信息不断累积, 系统状态也不断转移。以 n=3 为窗口, 依次处理一条订单信息中的所有菜品, 形成了点单转移链。例如, 订单为 A, B, C, D, E, 则得到的状态转移链为 0A, 0+AB, BC, A+BC, CD, B+CD, DE, C+DE。步骤 5 处理每一条订单信息, 并累积计算所
22、有不同的点单转移链的个数。步骤 6 将点单转移链按照计数排序, 计数最大的设定为 Max_Markov, 并将其得分设定为 10000。步骤 7 其余的点单转移链的得分按照式 (6) 进行设定。步骤 8 将消费者当前所点的菜品作为系统状态, 按照所处的系统状态作为规则左部选择已得到的 Markov 链。若当前处于系统的初始状态, 即消费者还未选择任何菜品, 则选择规则左部为 0 的 Markov 链。步骤 9 按照 Scorem进行排序, 输出 Scorem最高的 N 个排序结果。4 实验结果与分析4.1 实验数据实验所使用的数据集来自实际餐厅系统的日志文件, 是 7 个餐厅的订单记录。实验中
23、使用的每一组实验数据集分别来自不同的餐厅。所有的实验数据共包括大约 120000 条订单数据, 平均每一组实验数据集有 17000 条;共 973 个菜品, 平均每一组实验数据集有 139 个;平均每个订单包括 3 个菜品。一条订单信息包括序号、点餐日期和时间、用餐人数、总价和所点菜品序列。通过预处理, 分别提取出订单中的所点菜品序列作为实验数据集。4.2 评价指标(1) 预测准确度预测准确度有两个经典的指标:准确率和召回率。准确率也叫查准率, 表示推荐列表中准确的推荐占推荐结果总和的比例, 准确率越高说明推荐越准确。召回率也叫查全率, 即推荐列表中准确的推荐占所有应该被推荐的物品比例, 召回
24、率越高说明推荐越全面14。令 R (u) 是根据用户在训练集上的行为给用户做出的推荐列表, 而 T (u) 是用户在测试集上的行为列表。召回率定义为:推荐结果的准确率定义为:本文中的准确率通过命中数和推荐列表总长度的比值计算, 召回率通过命中数和用户行为总长度的比值计算。(2) 覆盖率覆盖率描述一个推荐系统对物品长尾的发掘能力。覆盖率有不同的定义方法, 最简单的定义为推荐系统能够推荐出来的物品占总物品集合的比例。假设系统的用户集合为 U, 推荐系统给每个用户推荐一个长度为 N 的物品列表 R (u) , 所有候选物品的集合为 I。那么, 推荐系统的覆盖率可以通过下面的公式计算:本文中的覆盖率通
25、过推荐列表中出现的菜品总数和候选菜品列表总长度的比值计算。令频度统计的权重参数为 w_Freq, 关联规则的权重参数为 w_Apriori, Markov链的权重为 w_Markov。实验部分图中的横坐标轴的数据都是按照 (w_Freq, w_Apriori, w_Markov) 的格式, 若为竖向表示, 则从下至上分别为 (w_Freq, w_Apriori, w_Markov) 。4.3 推荐引擎权值优化推荐引擎权值优化的目的是通过不同的推荐引擎权值组合来对不同推荐引擎的初始推荐结果进行合并, 以获取推荐效果最佳的权值组合。实验思路是先在较大的精度里确定“表现较好”的权值组合取值范围, 再
26、在该范围里提高精度, 获取“表现最好”的推荐引擎权重集。第一组数据集在精度为 0.05 下的“表现最好”的推荐引擎权重集为 (0.15, 0.65, 0.20) , 如图 2 所示。图 2 第一组数据集准确率最高的参数集 下载原图由第二个数据集得到的准确率最高的权值组合是 (0.25, 0.45, 0.30) , 如图3 所示。其虽然与第一组数据得到的 (0.15, 0.65, 0.20) 不同, 但也相差不大。图 3 第二组数据集准确率最高的参数集 下载原图对于第三组数据集, 取实验结果中准确率最高的 20 个参数集, 删除覆盖率、召回率明显低于平均水平的样本点后, 取剩下的 13 个参数集
27、, 提高精度至 0.05, 并将结果按照准确率排序, 如图 4 所示。图 4 第三组数据集准确率最高的参数集 下载原图从第三组数据集准确率最高的参数集中可以得出, 由第三个数据集得到的准确率最高的权值组合为 (0.25, 0.45, 0.30) , 其与第二个数据集得到的准确率最高的权值组合是相同的。下面将通过 3 组数据集得到的最优参数对其余的 4 个数据集进行普适性验证。将 3 组数据集得到的最优权值组合取平均, 得到权值组合 (0.2167, 0.5167, 0.2666) 。将得到的权值组合使用另外 4 组数据集进行验证, 每张图最左的点为 (0.2167, 0.5167, 0.266
28、6) 的结果, 将准确率的线条加粗表示, 得到的实验结果如图 5 所示。图 5 另外 4 组数据集在精度为 0.1 时的推荐效果 下载原图由图 5 可知, 对于参数变化的敏感度最大的指标就是覆盖率, 而准确率和召回率与之相比都较为平缓。各组数据集虽然准确率分布稍有不同, 但大致是类似的。因此, 得到的最优权值组合 (0.2167, 0.5167, 0.2666) 具有普适性。4.4 推荐列表长度优化推荐列表长度优化的目的是获取不同的推荐列表长度下的推荐结果, 通过计算来确定推荐效果最佳的推荐列表长度参数。第一组数据集在最优权值组合下, 推荐列表长度在 110 的情况下的覆盖率、准确率、召回率结
29、果如图 6 所示。图 6 不同推荐列表长度下的覆盖率、准确率、召回率结果 下载原图随着推荐列表长度的增加, 覆盖率和召回率增大, 而准确率却下降。当推荐列表长度大于 10 时, 显然是不合适的:在点餐时, 为用户展示一份过长的推荐列表会失去推荐的意义。在推荐列表长度小于 10 时, 推荐的菜品越多, 对于准确率而言, “有效”的推荐所占的比例反而会下降。但同时也需要考虑覆盖率和召回率:对于餐厅而言, 需要尽可能地为用户推荐种类不同的菜品, 从而覆盖尽可能全面的菜品, 因而不能仅仅考虑准确率而选择推荐列表长度为 1。由图 6 可以看出, 当推荐列表长度为 13 时, 准确率下降得比后半段快;当推荐列表长度大于 3 时, 准确率的变化相对较小, 即曲线趋于平缓。召回率曲线较为均匀, 没有在哪一段有明显区别;覆盖率曲线则在推荐列表长度在 13 时变化较大, 其后也趋于平缓。因此, 最合适的推荐列表长度为 3, 在其余数据集上也取得了类似的表现。