分享

主成分模型如何应用于超市销售

 昵称36427088 2017-01-23


 

问题陈述

在世界零售业发展史中,超级市场被称为继百货商店之后的第二次零售革命。在这个零售业的微利时代,如何分得一份羹是超市经营者研究重要课题。超市商品结构问题自然成为重中之重。对超市商品结构如何进行优化,进行综合评价,主成分分析法是一个重要的多元统计方法.本文就是应用主成分分析法对超市所经营的商品进行综合评判,用定量的方法对超市商品结构进行优化,使之在竞争中立于不败之地。 

 

商品结构的理论研究 
   
  目前理论界关于商品结构的研究还很少,基本的提法都是品类管理,品类管理中的品类结构就是狭义的商品结构,因此超市商品结构定义为指卖场有哪些品种商品,各种类型的商品占总量的比例多少。超市商品结构定位是否准确,关系到超市的经营方向和特色问题,简而言之,就是规定了这个超市卖什么、不卖什么的问题。 
  依据品类管理中的品类结构可以将商品结构分为四类,分别是
  1.大分类 
  它是连锁超市中最粗的分类。如生鲜、日配品、日用百货、家用电器等大分类。为了便于管理,连锁超市的大分类一般不宜过多。 
  2.中分类 
  它是大分类中细分出来的类别。例如:小家电可以分为吸尘器/空气清洁器/电扇,烹调器具,厨房用具,电熨斗/卫生间用品,电话/应答机/传真机,手表/闹钟/配件等。 
  3.小分类 
  它是中分类中进一步细分出来的类别。如厨房用具分为:抽油烟机、微波炉、碾磨机、开饮机、燃气灶、洗碗机、消毒柜、烘碗机、烘烤机、快餐炉、电水壶、电水瓶、水果榨汁机、多士炉、搅拌机、咖啡炉等。 
  4.单品类 
  单品是商品分类中不能进一步细分的、完整独立的商品品项。如青岛可口可乐饮料有限公司生产的355毫升听装可口可乐、1.25升瓶装可口可乐就是属于两个不同单品。一般情况下,把品类的结构分为大分类、中分类、小分类。 
   

BigMart的数据科学家在不同城市的10家商店收集了1559种产品的2013年销售数据。此外,已经定义了每个产品和存储的某些属性。目的是建立一个预测模型,并找出每个产品在特定商店的销售。

使用这种模式,BigMart将尝试了解在增加销售中发挥关键作用的产品和商店的属性。

数据

我们有训练集(8523)和测试(5681)数据集,训练集数据集具有输入和输出变量。您需要预测测试数据集的销售额。

变量说明

Item_Identifier唯一产品ID

Item_Weight产品重量

Item_Fat_Content产品是否为低脂肪

Item_Visibility分配给特定产品的商店中所有产品的 百分比

Item_Type产品所属的类别

Item_MRP产品的最大零售价(定价)

Outlet_Identifier唯一存储ID

Outlet_Establishment_Year商店的建立年份

Outlet_Size根据覆盖的地面面积的商店的大小

Outlet_Location_Type商店所在的城市类型

Outlet_Type商店是只是一个杂货店或某种超市

Item_Outlet_Sales特定存储中的产品的销售。这是要预测的结果变量。

介绍

什么是主成分分析法

主成分分析也称主分量分析,旨在利用降维的思想,把多指标转化为少数几个综合指标

统计学中,主成分分析(principal components analysis,PCA)是一种简化数据集的技术。它是一个线性变换。这个变换把数据变换到一个新的坐标系统中,使得任何数据投影的第一大方差在第一个坐标(称为第一主成分)上,第二大方差在第二个坐标(第二主成分)上,依次类推。主成分分析经常用减少数据集的维数,同时保持数据集的对方差贡献最大的特征。这是通过保留低阶主成分,忽略高阶主成分做到的。这样低阶成分往往能够保留住数据的最重要方面。但是,这也不是一定的,要视具体应用而定。

主成分分析的基本思想

在实证问题研究中,为了全面、系统地分析问题,我们必须考虑众多影响因素。这些涉及的因素一般称为指标,在多元统计分析中也称为变量。因为每个变量都在不同程度上反映了所研究问题的某些信息,并且指标之间彼此有一定的相关性,因而所得的统计数据反映的信息在一定程度上有重叠。在用统计方法研究多变量问题时,变量太多会增加计算量和增加分析问题的复杂性,人们希望在进行定量分析的过程中,涉及的变量较少,得到的信息量较多。主成分分析正是适应这一要求产生的,是解决这类题的理想工具。

同样,在科普效果评估的过程中也存在着这样的问题。科普效果是很难具体量化的。在实际评估工作中,我们常常会选用几个有代表性的综合指标,采用打分的方法来进行评估,故综合指标的选取是个重点和难点。如上所述,主成分分析法正是解决这一问题的理想工具。因为评估所涉及的众多变量之间既然有一定的相关性,就必然存在着起支配作用的因素。根据这一点,通过对原始变量相关矩阵内部结构 的关系研究,找出影响科普效果某一要素的几个综合指标,使综合指标为原来变量的线性拟合。这样,综合指标不仅保留了原始变量的主要信息,且彼此间不相关,又比原始变量具有某些更优越的性质,就使我们在研究复杂的科普效果评估问题时,容易抓住主要矛盾。 上述想法可进一步概述为:设某科普效果评估要素涉及个指标,这指标构成的维随机向量为。对作正交变换,令其中为正交阵的各分量是不相关的,使得的各分量在某个评估要素中的作用容易解释,这就使得我们有可能从主分量中选择主要成分,削除对这一要素影响微弱的部分,通过对主分量的重点分析,达到对原始变量进行分析的目的。各分量是原始变量线性组合,不同的分量表示原始变量之间不同的影响关系。由于这些基本关系很可能与特定的作用过程相联系,主成分分析使我们能从错综复杂的科普评估要素的众多指标中,找出一些主要成分,以便有效地利用大量统计数据,进行科普效果评估分析,使我们在研究科普效果评估问题中,可能得到深层次的一些启发,把科普效果评估研究引向深入。

例如,在对科普产品开发和利用这一要素的评估中,涉及科普创作人数百万人、科 普作品发行量百万人、科普产业化(科普示范基地数百万人)等多项指标。经过主成分分析计算,最后确定个或个主成分作为综合评价科普产品利用和开发的综合指标,变量数减少,并达到一定的可信度,就容易进行科普效果的评估。

主成分分析法的基本原理

主成分分析法是一种降维的统计方法,它借助于一个正交变换,将其分量相关的原随机向量转化成其分量不相关的新随机向量,这在代数上表现为将原随机向量的协方差阵变换成对角形阵,在几何上表现为将原坐标系变换成新的正交坐标系,使之指向样本点散布最开的p 个正交方向,然后对多维变量系统进行降维处理,使之能以一个较高的精度转换成低维变量系统,再通过构造适当的价值函数,进一步把低维系统转化成一维系统。

主成分分析的原理是设法将原来变量重新组合成一组新的相互无关的几个综合变量,同时根据实际需要从中可以取出几个较少的总和变量尽可能多地反映原来变量的信息的统计方法叫做主成分分析或称主分量分析,也是数学上处理降维的一种方法。主成分分析是设法将原来众多具有一定相关性(比如P个指标),重新组合成一组新的互相无关的综合指标来代替原来的指标。通常数学上的处理就是将原来P个指标作线性组合,作为新的综合指标。最经典的做法就是用F1(选取的第一个线性组合,即第一个综合指标)的方差来表达,即VarF1)越大,表示F1包含的信息越多。因此在所有的线性组合中选取的F1应该是方差最大的,故称F1为第一主成分。如果第一主成分不足以代表原来P个指标的信息,再考虑选取F2即选第二个线性组合,为了有效地反映原来信息,F1已有的信息就不需要再出现再F2中,用数学语言表达就是要求CovF1,F2=0,则称F2为第二主成分,依此类推可以构造出第三、第四,……,第P个主成分。

主成分分析的主要作用

概括起来说,主成分分析主要由以下几个方面的作用。

1.主成分分析能降低所研究的数据空间的维数。即用研究m维的Y空间代替p维的X空间(mp),而低维的Y空间代替 高维的x空间所损失的信息很少。即:使只有一个主成分Yl( m1)时,这个Yl仍是使用全部X变量(p)得到的。例如要计算Yl的均值也得使用全部x的均值。在所选的前m个主成分中,如果某个Xi的系数全部近似于零的话,就可以把这个Xi删除,这也是一种删除多余变量的方法。

2.有时可通过因子负荷aij的结论,弄清X变量间的某些关系。

3.多维数据的一种图形表示方法。我们知道当维数大于3时便不能画出几何图形,多元统计研究的问题大都多于3个变量。要把研究的问题用图形表示出来是不可能的。然而,经过主成分分析后,我们可以选取前两个主成分或其中某两个主成分,根据主成分的得分,画出n样品在二维平面上的分布况,由图形可直观地看出各样品在主分量中的地位,进而还可以对样本进行分类处理,可以由图形发现远离大多数样本点的离群点。

4.由主成分分析法构造回归模型。即把各主成分作为新自变量代替原来自变量x回归分析

5.用主成分分析筛选回归变量。回归变量的选择有着重的实际意义,为了使模型本身易于做结构分析、控制和预报,好从原始变量所构成的子集合中选择最佳变量,构成最佳变量集合。用主成分分析筛选变量,可以用较少的计算量来选择量,获得选择最佳变量子集合的效果。

主成分分析法的计算步骤

1、原始指标数据的标准化采集p 维随机向量x = (x1,X2,...,Xp)T)n 个样品xi = (xi1,xi2,...,xip)T i=1,2,…,n

np,构造样本阵,对样本阵元进行如下标准化变换:

IMG_256

其中IMG_257,得标准化阵Z

2、对标准化阵Z 相关系数矩阵

IMG_258

其中,IMG_259 

3、解样本相关矩阵R 的特征方程IMG_260p 个特征根,确定主成分

IMG_261 确定m 值,使信息的利用率达85%以上,对每个λj, j=1,2,...,m, 解方程组Rb = λjb得单位特征向量IMG_262 

4、将标准化后的指标变量转换为主成分

IMG_263

U1称为第一主成分,U2 称为第二主成分,…,Up 称为第p 主成分。

5 、对m 个主成分进行综合评价

m 个主成分进行加权求和,即得最终评价值,权数为每个主成分的方差贡献率。

主成分分析法优缺点

优点

可消除评估指标之间的相关影响。因为主成分分析法在对原始数据指标变量进行变换后形成了彼此相互独立的主成分,而且实践证明指标间相关程度越高,主成分分析效果越好。

可减少指标选择的工作量,对于其他评估方法,由于难以消除评估指标间的相关影响,所以选择指标时要花费不少精力,而主成分分析法由于可以消除这种相关影响,所以在指标选择上相对容易些。

主成分分析中各主成分是按方差大小依次排列顺序的,在分析问题时,可以舍弃一部分主成分,只取前面方差较大的几个主成分来代表原变量,从而减少了计算工作量。用主成分分析法作综合评估时,由于选择的原则是累计贡献率≥85%,不至于因为节省了工作量却把关键指标漏掉而影响评估结果。

缺点

在主成分分析中,我们首先应保证所提取的前几个主成分的累计贡献率达到一个较高的水平(即变量降维后的信息量须保持在一个较高水平上),其次对这些被提取的主成分必须都能够给出符合实际背景和意义的解释(否则主成分将空有信息量而无实际含义)。

主成分的解释其含义一般多少带有点模糊性,不像原始变量的含义那么清楚、确切,这是变量降维过程中不得不付出的代价。因此,提取的主成分个数m通常应明显小于原始变量个数p(除非p本身较小),否则维数降低的可能抵不过主成分含义不如原始变量清楚的

当主成分的因子负荷的符号有正有负时,综合评价函数意义就不明确。

PCA模型实现

 

  需要选择多少主要主成分? 我可以深入理论,但最好是实际回答这些问题。 PCA只能应用于数值数据。 因此,如果数据具有分类变量,则它们必须转换为数值。 此外, 在实施此技术之前 完成基本数据清理。  完成初始数据加载和清洁步骤:

目录路径

设置工作目录

 

读取训练和测试文件

train <- read.csv("Train_UWu5bXk.csv")
test <- read.csv("Test_u94Q5KV.csv")

 
填补缺失值
combi$Item_Weight[is.na(combi$Item_Weight)] <- median(combi$Item_Weight, na.rm = TRUE)

用中位数填充
combi$Item_Visibility <- ifelse(combi$Item_Visibility == 0, median(combi$Item_Visibility),                                   combi$Item_Visibility)

 
模型填充结果
 

 
直到这里,我们已经估计缺失值。 现在我们留下去除依赖(响应)变量和其他标识符变量(如果有的话)。 正如我们上面所说,我们正在练习一个无监督学习技术,因此必须消除响应变量。

删除从属和标识符变量

my_data <- subset(combi, select = -c(Item_Outlet_Sales, Item_Identifier,                                       Outlet_Identifier))
 
查看有效变量
 

查看是否所有变量是数值变量

查看变量类型
str(my_data)

9个变量中有6个是绝对的。 我们现在有一些额外的工作要做。 我们将使用一个 编码将这些分类变量转换为数字。

 

创建一个伪变量

new_my_data <- dummy.data.frame(my_data, names = c("Item_Fat_Content","Item_Type",
                                                   "Outlet_Establishment_Year","Outlet_Size",
                                                   "Outlet_Location_Type","Outlet_Type"))

 
要检查,如果我们现在有一个整数值的数据集

而且,我们现在有了所有的数值变量。 让我们将数据分成测试和训练集。

分割新数据
pca.train <- new_my_data[1:nrow(train),]
pca.test <- new_my_data[-(1:nrow(train)),]

我们现在可以继续使用PCA

  基本R函数prcomp()用于执行PCA 默认情况下,它使变量标准化,使平均值等于零。 我们将变量归一化为标准偏差等于1

主成分分析

 

prcomp()函数产生5个有用的度量:

  1.中心和尺度是指在实施PCA之前用于归一化的变量,输出相应平均值和标准偏差

输出变量的平均值

 输出变量的标准偏差

旋转度量提供主成分加载。 旋转矩阵的每一列包含主成分加载向量。
 PC1           PC2          PC3
 Item_Weight                     0.0010441240  0.0004384151 -0.021454235
 Item_Fat_ContentLF             -0.0091725762 -0.0019042858  0.008383420
 Item_Fat_Contentlow fat        -0.0034287693  0.0055492764 -0.003302283
 Item_Fat_ContentLow Fat         0.0078360026  0.0065124968 -0.021090747
 Item_Fat_Contentreg            -0.0012517669  0.0033104683 -0.006895653
 Item_Fat_ContentRegular        -0.0033255317 -0.0081367517  0.020996872
 Item_Visibility                -0.0220000614 -0.0187067072  0.163246663
 Item_TypeBaking Goods           0.0020985501 -0.0021432744  0.004446981
 Item_TypeBreads                -0.0014593729  0.0014755583  0.008779674
 Item_TypeBreakfast             -0.0041558943 -0.0013373054  0.009056857
 Item_TypeCanned                 0.0007185925 -0.0018660124  0.002503213
 Item_TypeDairy                  0.0007705650 -0.0083753476 -0.002652466
 Item_TypeFrozen Foods           0.0047693050 -0.0075665792 -0.002407384
 Item_TypeFruits and Vegetables -0.0042284678  0.0056042888 -0.001823856
 Item_TypeHard Drinks            0.0017679688  0.0071341635 -0.004325508
 Item_TypeHealth and Hygiene    -0.0029676602  0.0106048406 -0.010642563
 Item_TypeHousehold              0.0022643056  0.0042437346 -0.010402040
 Item_TypeMeat                  -0.0111496574 -0.0061744455  0.017570630
 Item_TypeOthers                 0.0007948501 -0.0093427539  0.003622752
 Item_TypeSeafood                0.0001973747 -0.0034001317  0.011209485
 Item_TypeSnack Foods           -0.0009039454 -0.0022045145  0.002898289
 Item_TypeSoft Drinks            0.0075602653  0.0058181850 -0.002596304
 Item_TypeStarchy Foods          0.0036699523  0.0075632647 -0.011911009
 Item_MRP                        0.0020549197 -0.0029926096 -0.006868498
 Outlet_Establishment_Year1985  -0.2245166654 -0.1294106363  0.236919922
 Outlet_Establishment_Year1987  -0.0366530891  0.1399494332 -0.481852069
 Outlet_Establishment_Year1997   0.1056693202 -0.3344969170 -0.047826794
 Outlet_Establishment_Year1998  -0.0609422946  0.1492292115  0.280348767
 Outlet_Establishment_Year1999  -0.0094452317 -0.2252021952 -0.090424680
 Outlet_Establishment_Year2002   0.1806307642  0.2136709043  0.083864703
 Outlet_Establishment_Year2004   0.1712888260 -0.0674229277 -0.008057850
 Outlet_Establishment_Year2007   0.1802021523  0.2130094442  0.084199637
 Outlet_Establishment_Year2009  -0.2717273200  0.0993753888 -0.047686334
 Outlet_SizeOther                0.2161311654  0.3768142808  0.269815694
 Outlet_SizeHigh                -0.0366530891  0.1399494332 -0.481852069
 Outlet_SizeMedium              -0.3495034662 -0.0908492736 -0.011809182
 Outlet_SizeSmall                0.1740277629 -0.3801667215  0.076620614
 Outlet_Location_TypeTier 1      0.0485508779 -0.4897069556  0.019436410
 Outlet_Location_TypeTier 2      0.3534423717  0.2384800339  0.106231468
 Outlet_Location_TypeTier 3     -0.3840450727  0.2212555277 -0.119883188
 Outlet_TypeGrocery Store       -0.0697619219 -0.0258097279  0.363324766
 Outlet_TypeSupermarket Type1    0.3876052603 -0.0399015911 -0.302062565
 Outlet_TypeSupermarket Type2   -0.2717273200  0.0993753888 -0.047686334
 Outlet_TypeSupermarket Type3   -0.2446658990 -0.0108223672  0.120005383
 

这返回44主要主成分   在数据集中,主分量负载的最大数目是(n-1p)的最小值。 让我们来看看前4个主成分和前5行。

为了计算主成分得分向量,我们不需要将负载乘以数据。因此 ,矩阵x具有8523×44维度的主分量分数向量。

dim(prin_comp$x)

[1] 8523   44

让我们绘制生成的主成分。


 

 
参数scale = 0确保箭头被缩放以表示负载。 要从上面的图像做推理,集中在这个图的 顶部,底部,左,右位置。

我们推断比第一主成分对应于Outlet_TypeSupermarket的度量Outlet_Establishment_Year 2007.类似地,可以说第二成分对应于Outlet_Location_TypeTier1Outlet_Sizeother的度量。 要精确测量主成分中的变量,您应该再次查看旋转矩阵

因此第一主成分对应,超市的类型和建立年份,第二个主成分对应超市的地点和规模。

  prcomp()函数还提供计算每个主成分的标准偏差的功能。 sdev是指主成分的标准偏差。

计算每个主成分的标准偏差

std_dev <- prin_comp$sdev

计算方差

pr_var <- std_dev^2

检查前10个分量的方差

pr_var[1:10]

[1] 4.564631 3.219279 2.744497 2.535883 2.190449 2.021640 1.935010
  [8] 1.266311 1.205757 1.169495

我们的目的是找到解释最大方差的成分。 这是因为,我们希望使用这些主成分保留尽可能多的信息。 因此,解释的方差越高,那些主成分中包含的信息就越高。

  为了计算由每个分量解释的方差的比例,我们简单地将方差除以总方差的总和。

方差比例解释

prop_varex <- pr_var/sum(pr_var)
    prop_varex[1:20]

[1] 0.10374160 0.07316543 0.06237493 0.05763369 0.04978294 0.04594636
  [7] 0.04397749 0.02877979 0.02740357 0.02657943 0.02631063 0.02577906
 [13] 0.02549683 0.02511309 0.02477200 0.02469167 0.02460995 0.02446028
 [19] 0.02398721 0.02373467

这表明第一主成分解释了10.3%的方差。 第二部分解释7.3%的差异。 第三部分解释6.2%的差异,那么,我们决定应该为建模阶段选择多少个主成分

 查看scree图。 scree图用于访问主成分或因子,这解释了数据中的大部分方差。 它按降序表示值。

碎石图

 

scree图主成分分析

  上图显示,约30个主成分解释了数据集中约98.4%的方差。 换句话说,使用PCA,我们将44个预测变量减少到30个,而不解释所解释的方差。 这是PCA让我们通过绘制累积方差图做一个确认检查。 这将给我们一个清楚的主成分数量的图片。

累积灰度图

 

该图显示30个分量导致方差接近?98%。因此,在这种情况下,我们将选择主成分数量为30 [PC1PC30],然后进入建模阶段。这完成了对训练集数据实现PCA的步骤。对于建模,我们将使用这30个分量作为预测变量,并按照正常程序。

 PCA主成分的预测建模

 在计算训练集上的主成分后,现在让我们了解使用这些主成分预测测试数据的过程。就像我们在训练集上获得PCA主成分一样,我们将在测试集上获得另一组主成分。最后,我们训练模型。

 但是,几个重要点:

 我们不应该将训练集和测试集合在一起来获得整个数据的PCA主成分。因为,这将违反概括的整个假设,因为测试数据将被“泄漏”到训练集中。换句话说,测试数据集将不再保持“未知”。最终,这将减弱模型的泛化能力。

 我们不应该分别对测试和训练数据集执行PCA。因为,来自训练集和测试PCA的合成向量将具有不同的方向(由于不等方差)。因此,我们将最终比较在不同轴上的数据。因此,来自训练集和测试数据的结果矢量应该具有相同的轴。

因此 我们应该对训练集进行与测试集完全相同的转换,包括中心和缩放特征。让我们在R

添加包含主成分的训练集

 

rpart.model <- rpart(Item_Outlet_Sales ~ .,data = train.data, method = "anova")
rpart.model

n= 8523
 
 node), split, n, deviance, yval
       * denotes terminal node
 
  1) root 8523 24817270000 2181.2890 
    2) PC3>=1.671844 1083    73623120  339.8285 *
    3) PC3< 1.671844 7440 20536640000 2449.3400 
      6) PC27>=-0.02464682 3838  5499852000 1780.8280 
       12) PC27>=1.079021 1017   586793000 1132.8500 *
       13) PC27< 1.079021 2821  4332103000 2014.4310 
         26) PC9>=-0.3193864 1627  1972546000 1675.5750 
           52) PC19>=-1.337507 1439  1294309000 1534.0690 *
           53) PC19< -1.337507 188   428870300 2758.6960 *
         27) PC9< -0.3193864 1194  1918174000 2476.1710 *
      7) PC27< -0.02464682 3602 11493930000 3161.6530 
       14) PC6>=-2.648969 3155  8039466000 2925.5700 
         28) PC9>=0.1215489 1412  2827138000 2417.5500 
           56) PC27>=-1.461566 1182  1950290000 2217.1510 *
           57) PC27< -1.461566 230   585430300 3447.4280 *
         29) PC9< 0.1215489 1743  4552703000 3337.1150 *
       15) PC6< -2.648969 447  2037483000 4827.9660 
         30) PC8< -0.7209545 118   302595100 3358.4530 *
         31) PC8>=-0.7209545 329  1388678000 5355.0250 *

测试数据进行主成分分析
test.data <- predict(prin_comp, newdata = pca.test)
test.data <- as.data.frame(test.data)

选择三十个主成分
test.data <- test.data[,1:30]

预测数据
rpart.prediction <- predict(rpart.model, test.data)

 

得到预测结果(部分)

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多