大型超市“购物篮”分析

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

题 目 大型超市“购物篮”分析
摘 要
本文根据顾客购买记录,通过“购物篮”分析,运用多种模型得出结果,并给出促销方案。

问题一要求构建能表达多种商品关联程度的数学模型。

根据4717个顾客对999中商品的购买记录,先用Matlab 对数据进行预处理,将其转化为0-1模型,然后求出购买j 商品的集合j s 和购买k 商品的集合k s ,考虑到同时购买两种商品占购买人数的频率,即相关性,存在购买人数少但相关性大的缺陷。

在改进的模型中,因为存在购买商品数少但也会使相关性大的情况,所以对两种情况进行综合考虑,得出最优模型:
j k i k i k s s s s p n s s ⋂⋂=⨯⋃
用Matlab 求解0-1矩阵,求出两商品间关联系数较大的前八位,有相关系数的值
在0-1范围之内,与所得模型函数的范围一致,可知,该模型是准确可靠的。

问题二要求出有效方法来找出最频繁被购买的商品记录,且越多越好。

根据问题一所得0-1矩阵,将其代入Excel 运用Aprior 模型,先算出单项商品的频繁项集,将支持度较小的数据剔除后,最后选取被购买次数最多的前18个商品,其中最畅销的为368号商品。

根据这18个畅销品,运用同样方法将其转化为两两商品的组合,得到被同时购买次数200次以上的商品;根据此算法依次迭代,得到同时购买3种商品和同时购买4种商品的数据,更多商品被同时购买次数较少因此不予考虑,最后得出:两件商品被同时购买次数最高的是368和529号;三件商品被同时购买次数最高的是368、489和682;四件商品被同时购买次数最高的是68、937、895和413。

问题三要求给出方案使效益最大。

根据问题一中0-1模型和问题二中Aprior 模型,将得到的购买次数最多的商品信息和题中所给利润表相比较,将利润小数量多的商品作为赠品和利润大数量多的商品一同销售;将共同购买次数多且利润大的两商品组合作为促销品进行销售,以进一步提高超市的综合效益。

关键词 0-1模型 Aprior 模型 数据预处理 相关系数
一、问题背景和重述
1.1问题背景
随着信息技术的发展,通过分析大量历史数据来发现模式和利用规律的数据挖掘技术应运而生,然而大多数商家并不是数据挖掘技术领域的专家,如何使数据挖掘技术平民化,成为当代很多学者研究的热点之一。

购物篮分析是数据挖掘技术应用在零售业中的一种有效方式,其目的就是在顾客的购买交易中分析能够同时购买一类产品或一组产品的可能性,利于商品的摆放,也利于提高促销活动的效果。

随着人们生活水平的提高,特别是城市,基本物质生活已满足,人们有更高的追求并呈现多样性,从企业角度看,了解和掌握顾客消费的特征和规律,有利于提高企业利润,同时也能提高消费者的满意度。

本文以一个面向大型超市的购物篮问题,构建数学模型。

1.2问题重述
作为超市的经理,经常关心的问题是顾客的购物习惯。

他们想知道:“什么商品组或集合顾客多半会在一次购物时同时购买?”。

现在假设我们是某超市的市场分析员,已经掌握了该超市近一个星期的所有顾客购买物品的清单和相应商品的价格,需要给超市经理一个合理的“购物篮”分析报告,并提供一个促销计划的初步方案。

问题1:题目中表格数据显示了该超市在一个星期内的 4717 个顾客对 999 种商品的购买记录,表格中每一行代表一个顾客的购买记录,数字代表了其购买商品的超市内部编号。

建立一种数学模型,该模型能定量表达超市中多种商品间的关联关系的密切程度。

问题2:根据在问题1中建立的模型,寻找一种快速有效的方法能从表格的购买记录中分析出哪些商品是最频繁被同时购买的。

超市经理希望得到尽可能多的商品被频繁同时购买的信息,所以找到的最频繁被同时购买的商品数量越多越好。

例如:如果商品1、商品2、商品3在 4717 个购物记录中同时出现了200次,则可以认为这三个商品同时频繁出现了200次,商品数量是3。

问题3:题目给出了这999中商品的对应的利润,根据在问题1、问题2中建立的模型,给出一种初步的促销方案,使超市的效益进一步增大。

二、问题分析
2.1问题一的分析
要求构建模型定量表达超市多种商品间的关联关系的密切程度,根据4717个顾客对999种商品的购买记录,令i x 表示第i 个顾客的购买情况,当第i 个顾客购物篮里有第j 个商品,1ij x =;没有购买,则0ij x =。

这就把复杂繁多的数据化为了简单易求的0-1模型。

根据购买记录,求出购买j 商品的顾客集合和购买k 商品的顾客集合,两集合的交集(同时购买)所代表的人数与购买人数的比值即为频率,此频率表示两商品的相关程度,考虑到购买人数较少也会造成频率较大的情况,对模型进行改进,将同时购买的人数与至少买一种商品的人数的比值作为相关系数,转化后的模型仍存在缺陷,购买次数较少时也会造成系数较大但不能反映商品相关性的问题。

综上两种考虑,将两个
模型结合起来,得到最优模型,用此模型来定量表达商品间的关联关系的密切程度。

由题目可知,此模型所得结果必定大于0小于1,为验证模型的可靠性,本文运用
Matlab对数据进行预处理,将数据转化为0-1矩阵后,再根据公式编程筛选出两商品相关系数较大的前八位,由所得系数与函数大于0小于1的性质相比,若符合,则模型是可靠的;若不符合,则再求新的定量模型。

2.2问题二的分析
要求我们寻找一种快速有效的方法从购买记录中找出被最频繁购买的商品,并且被同时购买的数量越多越好。

根据问题一Matlab对数据进行的0-1矩阵处理,并在Excel 中对数据进行求和以及排序处理,得到一次购买一次商品的次数最多的前18个商品。

由于数量的繁多,我们将从这18种商品中求出两件被同时购买以及三件、四件商品被同时购买的信息。

因此我们调出这18种商品的0-1矩阵,并用Matlab编程得到两件商品同时被购买的频数,并用Apriori算法的原理提出支持度s,用其来筛选得到的众多数据,修改程序以得到三件商品、四件商品被同时购买的数据。

2.3问题三的分析
对于问题三,要求根据问题一和问题的模型给出一种促销的方案,促使效益进一步增大。

首先我们定义f为超市的收益,商品的数量为n,商品的利润为w。

则f w n
=⋅。

我们考虑将数据中卖出数量多的商品且利润大的商品附赠以卖出商品数量多但是收益较小的商品来进一步提高它们卖出的数量以获得更大的利润。

而对于那些卖出数量以及能够获得的利润都适中的商品,根据问题二求得的两件商品被同时购买的数量将它们放在一起促销,这样也会获得较高利润。

三、模型假设
1、超市货源充足最大限度满足顾客需求;
2、短时期内,商品的销售情况保持不变;
3、每位顾客的购物行为都是理性的,真实反映当地的消费情况;
4、假设两商品同时被购买次数大于200的为高销量商品;
5、假设商品收益只考虑销售所得收入,不考虑商品成本;
四、符号说明和名词解释
4.1符号说明
4.2名词解释
1、布尔量:本题中所指的是购买或未购买,购买时布尔量=1,未购买布尔量=0;
五、模型建立与求解
5.1模型的准备
5.1.1问题一模型的准备
由于本题是针对大型超市购物篮的问题,数据繁多,且只考虑顾客的购买记录,即买或不买,并以此研究商品间的关联程度,因此本题先对所给数据进行预处理,将4717位顾客对999种商品的购买转化为0-1模型,方便问题的求解。

首先以i x 表示第i 个消费者的某次购物行为,如果在消费者的购物篮中发现了第j 种商品,则有1ij x =,否则
0ij x =(同时ik x 表示第i 个消费者购买第k 种商品)。

5.2问题一模型的建立与求解 5.2.1模型的建立
本题消费者购买只有两种情况,即购买或不购买,因此可以用到0-1模型。

为表达超市中多种商品间的密切关联程度,本题建立了定量模型。

首先,用i x 来描述第i 个消费者的购物情况,1ij x =表示第i 个消费者购买了第j 个商品,反之,0ij x =表示未购买。

因为是根据顾客对商品的购买记录来求解,因此本文对购买某种商品的顾客进行分类,设购买j 的人的集合为j s ,购买k 的人的集合为k s ,则j k s s ⋂表示同时购买j 商品和k 商品的顾客。

由此可将两种商品的相关联程度表示为:
1j k
s s p n
⋂=
此公式表示同时购买两种商品的频率,频率越高,相关性越大,但若购买人数少,也会导致频率值较大,显然这样的表达不能准确反映两商品间的关联程度,因此对此模型还应进一步改进。

对购买人数n 进行改进,考虑到有顾客在两种商品中至少购买一种的情况,将n 化为k j s s ⋃,则两种商品的相关联程度转化为:
2i k
i k
s s p s s ⋂=
⋃ 此公式表示两种商品都买的情况占至少购买一种情况的比值,即频率,也能反映两商品间的关联程度,但其同第一个公式类似,存在购买商品次数少但导致频率较大,而不能反映两商品相关性的缺陷,因此,综合两种情况,得到最优模型:
j k
i k i k
s s s s p n
s s ⋂⋂=
⨯⋃
p 表示两商品的相关性,若p 较大,剔除购买次数较小的情况,即可反映当消费者购买一种商品时,对另一种商品的购买可能性很大,两种商品的关联相关性密切。

5.2.2模型的求解
对上述模型进行具体求解,其中i k s s 表示同时购买j 商品和k 商品的人数,公式为:
1
*n
j k ij ik i s s x x =⋂=∑
i k s s ⋃表示两种商品中至少购买一种商品的人数,其具体公式为:
1
1
1
=*n
n
n
j k ij ik ij ik i i i s s x x x x ===⋃+-∑∑∑
j k s s ⋂小于购买人数n ,同时小于至少购买一种商品的人数,所以p 小与1。

将题目中所给数据运用Matlab 进行预处理,将其转化为0-1矩阵,由于数据过多,则将所得矩阵放在附录中,详见附录1。

根据所得关联函数公式,用Matlab 编程求出两商品间关联系数较大的前八位,如下图所示:
范围之内,与所得模型函数的范围一致,可知,该模型是准确可靠的。

5.3问题二模型的建立与求解
分析最频繁被同时购买的商品,且越多越好。

首先我们要找出单独一项商品被购买的频数,根据频数较高的单项商品集,通过筛选得出两种商品被同时购买的频数,以此类推,层层迭代,找出多种商品被同时购买的频数。

Aprior 算法使用频繁项集的先验性质,通过逐层搜索的迭代方法,先扫描数据库,再累积每个项的计数,并收集满足最小支持度的项,找出频繁项集的集合,直到所求条件。

因此本文运用Aprior 算法,对此题作出分析并求出最佳结果。

其具体算法过程如下:
此算法体现出若A 是一个频繁项集,则A 的每一个子集都是一个频繁项集。

首先我们提出支持度s 的概念,支持度是D 中包含A 和B 的事务数与总的事务数的比值。

可以利用支持度的大小来筛选数据。

{|}
()T D A B T s A B D
∈⋃⊆⇒=
设n L 是同时购买n 项商品的人员集合。

先从999中商品中找出单项频繁项集1L ,根据n 项频繁项集n L ,找出下一频繁项集即1n L +,并算出其中的支持度,将支持度较小
的元素删除,最终得到结果。

5.3.1对单项商品的购买
要给出尽可能多的商品被同时购买的信息,由所给购买记录,可以先由简单的单项商品开始,求出它们的被购买次数。

根据问题一所得预处理后附件1中的购买记录,详见附录1,用Excel对单项商品购买次数进行求和。

由于题目只要求给出频繁被购买的商品,频数较少的予以剔除,因此经过排序后得到购买次数最多的前十八个数据如下:
但这18种商品都可以作为最频繁购买的商品被经理采用,来研究商品购物篮问题。

5.3.2同时对两项商品的购买
上述18个单项商品被同时购买的次数较为频繁,说明这18项商品最为畅销,以这18项商品为一个频繁项集,根据Aprior算法,构建0-1矩阵,对每一个商品都可以用一个布尔量来表示是否被购买,由于18种商品两两组合数据较多,且我们只需要被同时购买较频繁的商品,本文以200次作为两商品同时被购买的频数界限,大于200次,则表示两商品同时被购买的次数频繁。

找出这18个商品的0-1矩阵,由于矩阵数量较大,这里不予详细列出,并用matlab 对数据进行编程筛选,筛选可以得到两商品被同时购买的200以上次数的数据:
作为最畅销品放在一起出售。

5.3.3同时对三项商品的购买
根据两件商品被同时购买的程序,修改出三件商品被同时购买的程序,筛选求得次数大于110的三种商品被同时购买的次数如下表所示

同时购买的次数相对较少,但每组商品被购买次数都大于100次,可看出这几种商品组合销量较好。

5.3.4同时对四项商品的购买
同时,我们也可以修改出四件商品被同时购买的程序,继续筛选出次数较大的前五位表格如下所示
1、两件商品被同时购买的频数最高的是368和529,总共被购买了313次;
2、三件商品被同时购买的频数最高的是368、489和682,总共被购买了124次;
3、四件商品被同时购买的频数最高的是368、937、895和413,总共被购买了72次。

从不同商品同时被购买次数可以知道,随着商品种类的增多,被同时购买次数逐渐减少,四种商品以后同时购买次数绝大数小于47,频数较少,因此不再详细讨论。

从以上研究可以看出Aprior能够运用层层递进的迭代算法,快速将大型超市繁多的购物记录简化,从而找出多种商品同时被频繁购买的信息,给销售经理简单明了的顾客购物记录。

5.4问题三模型的建立与求解
5.4.1模型的建立
超市的效益有很大程度上体现在超市的总的收益上,因此用f表示超市最终收益,设商品的数量为n,商品的利润为w。

则:
=⋅
f n w
对于商品数量要求高且利润大的商品,我们可以通过附赠以数量要求高且利润小的商品;对于数量要求和利润要求都中等的商品,可以考虑同时购买两种频率较高的商品,将两者放在一起搞促。

5.4.2考虑赠品的关系
一般将销售量较好且利润较大的商品作为主要销售种类,对于那些数量需求多且利润较小的商品,将其作为主销售品的赠品,既能促进主商品的销售,又能带动小商品的销售,从而最大程度的提高超市利润,而且在提高企业的服务效益的同时,大大满足了顾客的需求,提高了顾客满意度。

将题目所给利润表和在第二问求得的数量表放在一起考虑,利润大且数量多的商品(这里取单买数量排名前十位的,利润大于270的商品)为:
些商品为主要销售品,并将其集中摆放在比较显眼的位置,方便顾客找到自己所需商品,也为超市留出更大的空间。

出顾客对其的需求却相当大。

将其作为赠品促进其他商品的销售,虽然是放弃了这部分商品的利润,但它所带动商品的销售份额所得利润远高于它们分别销售所得利润。

利润大数量多的商品因为能带来更大将数量要求以及利润要求,所以考虑从其中提取出商品以及他们的赠品,可得到如下表
682商品分别作为赠品,既可以提高主要商品的销售量,又可以吸引顾客,从长远看,此销售方式对总效益提高有极大帮助,同时我们建议将这三组商品摆放在显眼的位置,更方便顾客的购买。

5.4.2再考虑促销的关系
由问题一可知,同时购买某种商品频数相同可知该种商品同另一商品相关性较大,在实际销售中,将两种关联性大的商品放在一块儿,有利于提高商品销售量,从而提高综合效益。

在第二问中,我们得到两种商品同时被购买的次数,利用第二问求出的数据,找出被同时购买次数较多的商品,并去掉上述已促销的商品,其余的如下表所示:
表两商品同时购买利润及次数
据上表算出两商品组合后总利润最大的情况。

在考虑利润和共购买次数的情况下,可以放一起促销以便提高最大效益的是:
表同时促销的两商品组合
且利润最大,将这两种商品组合作为促销方案,既满足了顾客对两商品的需求,又在销售一种商品的同时,带动了另一商品的销售。

所以建议将419、829两商品放在一起销售,将692、829两种商品放在一起销售。

六、模型检验
6.1问题一的检验
要求出商品间的关联密切程度,根据题目做出模型:
3j k
i k i k
s s s s p n
s s ⋂⋂=


为验证模型的准确可靠性,本文用Matlab 做出0-1矩阵后,求出相关系数较大的前八种,由相关系数的值都与模型函数的值大于0小于1的性质相符合,可知模型是可靠的。

七、模型评价和改进
7.1模型的评价 7.1.1模型的优点
1、0-1模型将复杂繁多的数据简单化,便于问题求解;
2、多种定量模型相互比较,找出最能反映商品关联程度的模型,有利于我们选择更好的方案;
3、aprior 算法从众多数据中分析出符合要求的数据,并进一步深化,层层迭代,使问题简单化,得出合理结论。

7.1.2模型的缺点
1、aprior 算法会产生大量候选及候选集,导致算法的效率较低;
2、没有考虑成本对总效益的影响。

7.2模型的改进
第二问中,使用只购买一件商品的18个数据,相对于给出的数据,虽具有代表性,但是结果没有那么准确。

如果使用数据超过18个,将会使后面的数据趋于多项化,这样一来数据便更加准确,给出的建议也会更加的合理。

八、模型推广
0-1模型具有广泛的应用背景,比如经济管理中的实际问题的解必须满足逻辑条件和顺序要求等一些特殊的约束条件,此时往往需要引出0-1变量来表达“是”与“非”。

此外,线路设计,工厂选址,生产计划安排,旅行购物、背包问题、人员安排等人们所关心的诸多问题都可以化为0-1模型求解。

正是由于0-1模型具有深刻的背景和广泛的应用,所以研究它的算法具有十分重要的意义。

Aprior 模型使用逐层搜索的迭代方法,该算法理解简单,计算容易,且是能够对多种规则进行挖掘。

在电力企业决策应用中,将Aprior 模型的数据挖掘技术应用于企业管理决策,通过深入挖掘形成企业管理决策库,真正在企业管理过程中,特别是在更复杂的经营环境中提供强大的决策支持。

九、参考文献
[1]薛红聂规划,基于关联规则分析的“购物篮分析”模型的研究,北京工商大学学报,
2008-7-18;
[2] 孙细明龚成芳,关联规则在购物篮分析中的应用,计算机与数字工程,
2008.06.20;
[3]高勇,购物篮里的“潜规则” 商界(评论),2009.3.15;
[4] 谭浩强,C程序设计(第三版),北京:清华大学出版社,2005。

附录
附录1
(1)0-1矩阵:
A=textread('C:\Users\Administrator\Desktop\data.txt');
B=zeros(4718,999);
for i=1:4718
for j=1:73
if A(i,j)>0
B(i,A(i,j))=1;
end
end
end
(2)自相关系数函数:
o=corr(A)
(3)判断语句:
N=textread('C:\Users\Administrator\Desktop\tmd.txt');
for i=1:999
for j=1:999
if N(i,j)>=0.7&&i~=j
fprintf('µÚ%dºÅÉÌÆ·ºÍ',i);fprintf('µÚ%dºÅÉÌÆ·µÄÏà¹Ø¶ÈΪ',j);fprintf('%d ',N(i,j));
end
end
end
附录2
问题二中求一个商品被购买次数的代码
a=textread('C:\Users\Administrator\Desktop\data.txt');
b=cell(1,length(a));
for i=1:length(a)
b{i}=a(i,:);
end
for i=1:length(a)
b{i}(find(b{i}==0))=[];
end
gm=zeros(length(a),999);
for i=1:length(a)
c=[];
c=b{i};
[m n]=size(c);
for j=1:n
gm(i,c(m,j))=1;
end
end
cs=[];
for j=1:999
cs=sum(gm);
end
b=find(cs>700s);
[m n]=size(b);
z=zeros(n,n);
for i=1:length(a)
for j=1:length(b)
for k=1:length(b)
z(j,k)=z(j,k)+gm(i,b(j))*gm(i,b(k)); end
end
end
for j=1:length(b)
for k=1:length(b)
if z(j,k)<200;
z(j,k)=0;
else z(j,k)=z(j,k);
end
end
end
x=[];
v=[];
x=[b;z];
v=[0 b;x'];
for i=1:length(b)+1 v(i,i)=0;
end
v
问题二中两个商品被同时购买的代码
A=textread('C:\Users\Administrator\Desktop\10.txt'); z=0;
for i=1:4718
if A(i,1) == A(i,2)
if A(i,1) == 1;
z=z+1;
end
end
end
print z
温馨提示:最好仔细阅读后才下载使用,万分感谢!。

相关文档
最新文档