《大数据架构和算法实现之路:电商系统的技术实战》——3.2 案例实践

简介:

本节书摘来自华章计算机《大数据架构和算法实现之路:电商系统的技术实战》一书中的第3章,第3.2节,作者 黄 申,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.2 案例实践

3.2.1 实验环境设置

本节所要进行的实验内容是,根据商品的某些历史数据,发现影响转化率的因素,以及相应的权重。

和之前的实验一样,这里所用的数据,以及结论都是实验性质的,请根据自己的情况合理运用。不要将这些测试数据及其相关结论生搬硬套地实施到自己的项目中。

首先查看位于这里的数据文件:

https://github.com/shuang790228/BigDataArchitectureAndAlgorithm/blob/master/Linear-Regression/Sales.Prediction.txt

在R中加载该文件:

> listing_for_prediction <- read.csv("/Users/huangsean/Coding/data/BigData
ArchitectureAndAlgorithm/Sales.Prediction.txt", stringsAsFactors = FALSE, sep='\t')

数据文件的部分内容如下:

> listing_for_prediction
    ID    Title CategoryID CategoryName OneMonthConversionRateInUV OneWeekConversionRateInUV 
SellerReputation IsDeal IsNew IsLimitedStock TargetValue
1  22785 samsung 三星 galaxy tab3 t211 1g 8g wifi+3g 可 通话 平板 电脑 gps 300万像素 白色    15    电脑
    0.021    0.022    3    0    0    0    0.032
2  19436 samsung 三星 galaxy fame s6818 智能手机 td-scdma gsm 蓝色 移动 定制 机    14    手机
    0.028    0.030    4    1    0    0    0.175
3   3590 金本位 美味 章 鱼丸 250g            3    海鲜水产
    0.066    0.054    3    0    1    0    0.127
4   3787 莲花 居 预售 阳澄湖 大闸蟹 实物 558 型 公 3.3-3.6 两 母 2.3-2.6 两 5对 装    3    海鲜水产
    0.034    0.029    4    0    0    0    0.115
5  11671 rongs 融 氏 纯 玉米 胚芽油 5l 绿色食品 非 转基因 送 300ml 小 油 1瓶    9    食用油
    0.412    0.486    4    0    0    0    0.455
6  23188 kerastase 卡 诗 男士 系列 去 头屑 洗发水 250ml 去 屑 止痒 男士 专用 进口 专业 洗 护发    16    美发护发
    0.268    0.254    4    1    0    1    0.403
7  25150 dove 多 芬 丰盈 宠 肤 沐浴 系列 乳 木 果 和 香草 沐浴乳 400ml 5瓶    17    沐浴露
    0.193    0.214    3    0    1    1    0.228
8  14707 魏 小 宏 weixiaohong 长寿 枣 400克 袋装 美容 养颜 安徽 宣城 水 东 特产    10    枣类
    0.272    0.252    4    0    0    1    0.371
9  28657 80 茶客 特级 平阴 玫瑰花 玫瑰 茶 花草 茶 花茶 女人 茶 冲 饮 50克 袋    18    茶叶
    0.084    0.083    2    0    0    0    0.039
10  6275 德芙 兄弟 品牌 脆 香米 脆 米 心 牛奶 巧克力 500g 散装    6    巧克力
    0.192    0.207    3    1    0    0    0.167
...

从中可以看到,除了之前的商品的ID、Title、CategoryID、CategoryName字段,这个数据集还包括了如下字段。

  • OneMonthConversionRateInUV:之前一个月商品的转化率(基于唯一访问),计算方法是购买该商品的唯一访问人数除以所有浏览过该商品的唯一访问人数,取值范围是0到1之间的实数。
  • OneWeekConversionRateInUV:定义与OneMonthConversionRateInUV相仿,不过时间周期是前一周。无论是传统零售还是电子商务,都会根据已有的销量和人气来预测热卖的商品。因此OneMonthConversionRateInUV和OneWeekConversionRateInUV是两个常用的考量因素。
  • SellerReputation:当前商家的信誉评级,取值范围是1到5星之间的整数。在电商行业中,商家的口碑对消费者更为透明,对他们的购买决策起到了更为关键的作用,因此也会影响到销量。
  • IsDeal:是否正在促销,取值范围是0或1的整数。1表示正在进行促销,价格有优惠。0表示没有。价格永远是影响销量的核心因素之一。业内经常讨论的需求价格弹性,其实也是一种回归分析,试图找出用户需求和价格之间的关系。这里我们的分析也与此类似,不过考虑了更多其他的因素。
  • IsNew:是否为刚刚上市的新品,取值范围是0或1的整数。1表示为刚刚上市的新品,0表示不是新品。对于某些领域,例如电子消费品、时尚服饰等,新品可能比现有的畅销款更有吸引力,也需要考虑在内。
  • IsLimitedStock:库存是否有限,取值范围是0或1的整数。当商品库存有限,即将售罄的时候,消费者有可能会加速购买的决策。
  • TargetValue字段:某天销量的真实值,取值范围是0到1之间的实数。

我们的实践任务将TargetValue这个字段定义为因变量,而将其他字段定义为自变量。换言之,我们试图发现,对于某天的销量而言,哪些因素会影响它?是之前一段时间内的历史销量、商家的信誉程度、还是促销力度和剩余库存,等等?如果有影响,那么影响的程度有多大?如果能够在一定程度上进行衡量,那么对于未来的商品销量,就能依照历史数据进行合理的预测了。

3.2.2 R中数据的标准化

在这里我们假设各个自变量和因变量之间存在线性的关系。在正式开始线性回归分析之前,你可能会发现不同字段的数据没有可比性。首先是取值范围不同,例如,前一个月或前一周的转化率是0到1之间的实数,而商家的信誉度却是1到5之间的整数。其次,即使是同样的取值范围,可能含金量也不相同。例如,所有商品前一个月的转化率都是偏低的,可能0.1已经是很高的,而所有商品前一周的转化率都变得很高,那么0.1就显得很低了。因此,这里还要对原始数据进行标准化(normalization)的预处理,让不同的分数相互之间具有可比性。只有这样,回归后不同因素的系数或权重才有可比性。

一种常见的标准化方法是z分数(z-score)。该方法的主要内容具体如下。

  • 假设数据呈现标准正态分布。正态分布是连续随机变量概率分布的一种,自然界、人类社会、心理和教育中大量现象均按正态形式分布,例如能力的高低,学生成绩的好坏等都属于正态分布。正态分布的特点是:分布的形式是对称的,对称轴是经过平均数点的垂线;中央点最高,然后逐渐向两侧下降,曲线的形式是先向内弯,再向外弯。曲线下的面积为1。正态分布随变量的平均数、标准差的大小与单位不同而有不同的分布形态。而标准正态分布是正态分布的一种,平均数为0,标准差为1,也就是说平均数和标准差都是固定的。
  • 试图回答这样一个问题:一个给定分数距离平均数多少个标准差?在平均数之上的分数会得到一个正的标准分数,在平均数之下的分数会得到一个负的标准分数。z分数是一种可以看出某分数在分布中相对位置的方法。z分数能够真实地反映出一个分数距离平均数的相对标准距离。如果我们把每一个分数都转换成z分数,那么每一个z分数都会以标准差为单位表示一个具体分数到平均数的距离或离差。

z分数计算的具体公式如下:

screenshot

其中x为原始值,μ为均值,σ为标准差。在R中,我们可以很轻松地实现这一转变,并生成若干对应的数据列:

> listing_for_prediction$OneMonthConversionRateInUVNormalized <- (listing_for_prediction$OneMonthConversionRateInUV - mean(listing_for_prediction$OneMonthConversionRateInUV)) / sd(listing_for_prediction$OneMonthConversionRateInUV)

> listing_for_prediction$OneWeekConversionRateInUVNormalized <- (listing_for_
prediction$OneWeekConversionRateInUV - mean(listing_for_prediction$OneWeekConversion
RateInUV)) / sd(listing_for_prediction$OneWeekConversionRateInUV)

> listing_for_prediction$SellerReputationNormalized<-(listing_for_prediction$
SellerReputation - mean(listing_for_prediction$SellerReputation)) / sd(listing_for_prediction$SellerReputation)

> listing_for_prediction$IsDealNormalized<-(listing_for_prediction$IsDeal - mean
(listing_for_prediction$IsDeal)) / sd(listing_for_prediction$IsDeal)

> listing_for_prediction$IsNewNormalized<-(listing_for_prediction$IsNew - mean
(listing_for_prediction$IsNew)) / sd(listing_for_prediction$IsNew)

> listing_for_prediction$IsLimitedStockNormalized<-(listing_for_prediction$Is
LimitedStock - mean(listing_for_prediction$IsLimitedStock)) / sd(listing_for_predic
tion$IsLimitedStock)

> listing_for_prediction$TargetValueNormalized<-(listing_for_prediction$Target
Value - mean(listing_for_prediction$TargetValue)) / sd(listing_for_prediction$TargetValue)

查看这些数据列:

> listing_for_prediction[c("ID", "OneMonthConversionRateInUVNormalized", "OneWeekConversion
RateInUVNormalized", "SellerReputationNormalized", "IsDealNormalized", "IsNewNormalized", "IsLimitedStockNormalized", "TargetValueNormalized")]
    ID OneMonthConversionRateInUVNormalized OneWeekConversionRateInUVNormalized SellerReputation
Normalized IsDealNormalized IsNewNormalized IsLimitedStockNormalized TargetValueNormalized
1  22785    -1.3400479    -1.23567665    -0.1358754    -0.617342    -0.4638124    -0.4949747    -1.285017776
2  19436    -1.2899500    -1.18179931    0.8346633    1.587451    -0.4638124    -0.4949747    -0.351859428
3   3590    -1.0179898    -1.02016731    -0.1358754    -0.617342    2.1129232    -0.4949747    -0.665087405
4   3787    -1.2470089    -1.18853398    0.8346633    -0.617342    -0.4638124    -0.4949747    -0.743394399
5  11671    1.4582790    1.88920870    0.8346633    -0.617342    -0.4638124    -0.4949747    1.475303772
6  23188    0.4276931    0.32676603    0.8346633    1.587451    -0.4638124    1.9798990    1.135973464
7  25150    -0.1090703    0.05737936    -0.1358754    -0.617342    2.1129232    1.9798990    -0.006003536
8  14707    0.4563205    0.31329669    0.8346633    -0.617342    -0.4638124    1.9798990    0.927154812
9  28657    -0.8891666    -0.82486198    -1.1064141    -0.617342    -0.4638124    -0.4949747    -1.239338696
10  6275    -0.1162272    0.01023669    -0.1358754    1.587451    -0.4638124    -0.4949747    -0.404064090
11 18663    0.7855355    1.15513003    0.8346633    -0.617342    -0.4638124    -0.4949747    0.339852355
12 15229    -0.7675002    -0.72384198    0.8346633    -0.617342    -0.4638124    -0.4949747    -0.560678079
13  1290    0.3775952    0.28635803    -0.1358754    -0.617342    -0.4638124    -0.4949747    -0.025580285
14 22014    -1.3185774    -1.24914598    -1.1064141    -0.617342    -0.4638124    -0.4949747    -1.435106182
15 13200    -0.5456380    -0.47465931    -0.1358754    1.587451    -0.4638124    -0.4949747    0.248494195
16  3440    -1.1396562    -1.04037131    -0.1358754    -0.617342    -0.4638124    -0.4949747    -0.795599062
17 26597    -0.1663251    -0.44772064    -2.0769529    -0.617342    -0.4638124    -0.4949747    -0.815175810
18  4955    2.1023952    1.61308737    0.8346633    -0.617342    -0.4638124    -0.4949747    2.434564452
19  6083    1.1362209    0.85880470    -0.1358754    -0.617342    -0.4638124    -0.4949747    0.502991927
20  9082    1.1720052    1.31002737    -1.1064141    -0.617342    -0.4638124    1.9798990    1.494880521
21 17532    0.2129878    0.03044069    0.8346633    -0.617342    -0.4638124    -0.4949747    -1.311120108
22  4826    1.2865147    1.82186204    -0.1358754    -0.617342    -0.4638124    1.9798990    0.640029167
23  3910    -0.8032844    -0.83159664    0.8346633    -0.617342    -0.4638124    -0.4949747    -0.514998999
24 24450    0.2487720    -0.10425264    -2.0769529    1.587451    -0.4638124    1.9798990    0.640029167
25 13428    -0.5671085    -0.47465931    0.8346633    1.587451    -0.4638124    -0.4949747    0.457312847
26  1140    0.4563205    0.21227669    0.8346633    -0.617342    -0.4638124    -0.4949747    0.333326772
27 22403    -0.5742654    -0.64976064    -1.1064141    1.587451    -0.4638124    -0.4949747    -0.319231513
28  5945    0.1986741    0.23248069    -0.1358754    1.587451    -0.4638124    -0.4949747    0.392057018
29 19020    0.9716135    0.42105136    -0.1358754    -0.617342    -0.4638124    1.9798990    1.377420029
30  2068    2.6749429    3.14859138    -1.1064141    -0.617342    2.1129232    -0.4949747    3.831039184
31 21222    -1.3042637    -1.20873798    1.8052020    -0.617342    2.1129232    1.9798990    -0.123464028
32 10718    1.1433778    0.86553936    0.8346633    -0.617342    -0.4638124    -0.4949747    -0.815175810
33 15577    -0.2593641    -0.10425264    -0.1358754    -0.617342    -0.4638124    -0.4949747    -0.195245439
34  2269    -0.9106371    -0.77098464    -2.0769529    -0.617342    -0.4638124    -0.4949747    -0.952213050
35 18569    0.6710259    0.52207136    -1.1064141    1.587451    -0.4638124    -0.4949747    0.437736098
36  2998    -0.9678919    -0.82486198    1.8052020    1.587451    -0.4638124    -0.4949747    -0.351859428
37 21803    -1.3615185    -1.23567665    0.8346633    -0.617342    2.1129232    -0.4949747    -0.991366548
38 19303    -0.6673044    -0.63629131    0.8346633    -0.617342    -0.4638124    -0.4949747    -0.521524582
39  4690    0.8284765    1.08104870    -2.0769529    -0.617342    -0.4638124    -0.4949747    -0.521524582
40 19971    -1.2613226    -1.21547265    0.8346633    1.587451    -0.4638124    1.9798990    -0.006003536
41 26946    -0.5814222    -0.45445531    0.8346633    -0.617342    -0.4638124    -0.4949747    -0.397538508
42 25426    0.8642608    0.79819270    0.8346633    1.587451    -0.4638124    -0.4949747    0.013573212
43 13999    0.8213197    0.41431670    -0.1358754    1.587451    2.1129232    1.9798990    0.620452418
44  9150    -0.1949525    -0.25914997    -1.1064141    -0.617342    2.1129232    -0.4949747    -0.097361696
45  1227    0.6352417    0.59615270    -0.1358754    -0.617342    2.1129232    -0.4949747    1.018512972
46  9904    -0.2092662    -0.23221131    0.8346633    -0.617342    -0.4638124    -0.4949747    -0.286603599
47 22857    -1.4330869    -1.32322731    -0.1358754    -0.617342    2.1129232    -0.4949747    -1.089250290
48 12522    0.5350458    0.24595003    0.8346633    -0.617342    -0.4638124    -0.4949747    -0.965264216
49  7519    1.3867106    1.60635270    -1.1064141    1.587451    -0.4638124    -0.4949747    0.274596527
50  1324    0.1915172    -0.10425264    -1.1064141    -0.617342    -0.4638124    -0.4949747    -0.808650228

可以看到,对于给定的某个字段,数值有正有负,与原始数据有所不同。再来验证一下每个字段是否符合标准正态分布。这里以OneMonthConversionRateInUVNormalized和SellerReputationNormalized为例:

> mean(listing_for_prediction$OneMonthConversionRateInUVNormalized)
[1] -7.213929e-17
> sd(listing_for_prediction$OneMonthConversionRateInUVNormalized)
[1] 1
> mean(listing_for_prediction$SellerReputationNormalized)
[1] -9.990706e-17
> sd(listing_for_prediction$SellerReputationNormalized)
[1] 1

这里-7.213929e-17和-9.990706e-17是由于计算误差所导致的,可以认为0,而标准差都是1,符合标准正态分布。

3.2.3 使用R的线性回归分析

一切就绪,我们先来使用cor()函数,检视一下不同自变量之间、自变量和因变量之间的关系:

> cor(listing_for_prediction[c("OneMonthConversionRateInUVNormalized", "OneWeekConversionRateInUVNormalized", "SellerReputationNormalized", "IsDealNormalized", "IsNewNormalized", "IsLimitedStockNormalized", "TargetValueNormalized")])
    OneMonthConversionRateInUVNormalized OneWeekConversionRateInUVNormalized SellerReputa-
tionNormalized IsDealNormalized IsNewNormalized IsLimitedStockNormalized TargetValueNormalized
OneMonthConversionRateInUVNormalized    1.00000000    0.97348970    -0.158011500    -0.031674657
    -0.06780377    0.13685456    0.746505674
OneWeekConversionRateInUVNormalized    0.97348970    1.00000000    -0.154650456    -0.045672910
    -0.04367404    0.10789623    0.752750106
SellerReputationNormalized    -0.15801150    -0.15465046    1.000000000    0.001746806
    -0.01326967    0.02941176    -0.002771155
IsDealNormalized    -0.03167466    -0.04567291    0.001746806    1.000000000
    -0.17623215    0.13363062    0.125412525
IsNewNormalized    -0.06780377    -0.04367404    -0.013269666    -0.176232151
    1.00000000    0.15617376    0.131333115
IsLimitedStockNormalized    0.13685456    0.10789623    0.029411765    0.133630621
    0.15617376    1.00000000    0.338424764
TargetValueNormalized    0.74650567    0.75275011    -0.002771155    0.125412525
    0.13133312    0.33842476    1.000000000

从中可以得出如下两个快速的结论:

  • 单月销售转化率OneMonthConversionRateInUVNormalized和单周销售转化率OneWeek
  • ConversionRateInUVNormalized之间的相关系数达到了0.97348970,有极强的相关性。在必要的时候,我们可以考虑放弃这两者其中之一的自变量,减少自变量的数量,降低对训练样本数量的要求。
  • 待预测的目标转化率TargetValueNormalized和单月销售转化率OneMonthConversionRate
  • InUVNormalized有较强的相关性,相关系数为0.74650567。
  • 待预测的目标转化率TargetValueNormalized和单周销售转化率OneWeekConversionRateInUVNormalized也有较强的相关性,相关系数为0.75275011。
  • 对角线上都是自己对自己,完全相关,所以系数都为1.0。

还可以使用pairs()函数可视化两两转化率之间的关系,结果如图3-3所示。

> pairs(listing_for_prediction[c("OneMonthConversionRateInUVNormalized", "OneWeek-
ConversionRateInUVNormalized", "SellerReputationNormalized", "IsDealNormalized", "IsNewNormalized", "IsLimitedStockNormalized", "TargetValueNormalized")])

然后,通过lm()函数,进行多元的线性回归,数据集为listing_for_prediction,目标值或因变量是TargetValueNormalized,将其他的标准化字段作为自变量:

> listing_prediction_linearreg_model <- lm(TargetValueNormalized ~ OneMonth
ConversionRateInUVNormalized + OneWeekConversionRateInUVNormalized + SellerReputation
Normalized + IsDealNormalized + IsNewNormalized + IsLimitedStockNormalized, data = listing_for_prediction)

screenshot

查看线性回归后的结果:

> listing_prediction_linearreg_model

Call:
lm(formula = TargetValueNormalized ~ OneMonthConversionRateInUVNormalized + 
    OneWeekConversionRateInUVNormalized + SellerReputationNormalized + 
    IsDealNormalized + IsNewNormalized + IsLimitedStockNormalized, 
    data = listing_for_prediction)

Coefficients:
        (Intercept)  OneMonthConversionRateInUVNormalized  OneWeekConversion
RateInUVNormalized            SellerReputationNormalized                    IsDeal-Normalized                    IsNewNormalized            IsLimitedStockNormalized
    6.229e-17    1.996e-01    5.692e-01    1.129e-01    1.607e-01
    1.685e-01    1.986e-01

从目前的结果来看,OneWeekConversionRateInUVNormalized这个因素的权重最高,为5.692e-01。下面进一步使用summary()函数查看模型的细节:

> summary(listing_prediction_linearreg_model)

Call:
lm(formula = TargetValueNormalized ~ OneMonthConversionRateInUVNormalized + 
    OneWeekConversionRateInUVNormalized + SellerReputationNormalized + 
    IsDealNormalized + IsNewNormalized + IsLimitedStockNormalized, 
    data = listing_for_prediction)

Residuals:
    Min       1Q   Median       3Q      Max 
-1.35461 -0.25017  0.07358  0.30216  1.47134 

Coefficients:
                                      Estimate Std. Error t value Pr(>|t|)  
(Intercept)                          6.229e-17  8.451e-02   0.000   1.0000  
OneMonthConversionRateInUVNormalized 1.996e-01  3.809e-01   0.524   0.6030  
OneWeekConversionRateInUVNormalized  5.692e-01  3.784e-01   1.504   0.1398  
SellerReputationNormalized           1.129e-01  8.664e-02   1.303   0.1994  
IsDealNormalized                     1.607e-01  8.821e-02   1.822   0.0754 .
IsNewNormalized                      1.685e-01  8.933e-02   1.887   0.0660 .
IsLimitedStockNormalized             1.986e-01  8.963e-02   2.216   0.0321 *
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.5976 on 43 degrees of freedom
Multiple R-squared:  0.6866,    Adjusted R-squared:  0.6429 
F-statistic:  15.7 on 6 and 43 DF,  p-value: 1.899e-09

现实中,由于被线性回归的数据不可能完全符合某条直线,因此存在误差,如前图3-1所示:左侧拟合度较好,误差小;右侧拟合度较差,误差大。上述结果的Residuals部分展示了误差的基本统计数据,例如最小值(-1.35461)、25%分位(-0.25017)、中值(0.07358)、75%分位(0.30216)和最大值(1.47134)。Coeff?icients给出了每个自变量的部分权重和统计细节。例如,OneWeekConversionRateInUVNormalized虽然有最高的权重值,但是其对应的Pr值(也就是P值)达到了0.1398,表面上这个相关性从统计的角度来看存在14%左右的偶然性,而一般业界认为0.05(5%)以内的偶然性才是可以接受的。依照5%的标准来看,只有IsLimitedStockNormalized符合条件。同时,调整后的R方(Adjusted R-squared)为0.6429,表示模型整体对于因变量变化的解释度只有64%,离最理想的值100%有较大的差距,还不够理想。

那么,这些是否就意味着线性回归无法很好地解决转化率预测问题呢?其实,我们还可以根据商品的分类进行一些尝试。不同品类的商品,其内在属性会有所不同,消费者对其的理解也会有所不同。换言之,如果将用于回归的样本限定于特定的品类,我们是否能发现其他有趣的现象?这里将整体的测试数据划分为4个大类(分组)。

  • 消费电子:包括“手机”和“电脑”等分类。
  • 日用品:包括“沐浴露”“美发护发”“大米”和“食用油”等分类。
  • 饮料和零食:包括“坚果”“巧克力”“饼干”“饮料饮品”和“方便面”等分类。
  • 生鲜和干货:包括“海鲜水产”“新鲜水果”“进口牛奶”“栆类”和“茶叶”等分类。

先来测试消费电子类这组的样本:

> listing_for_prediction_ce <- subset(listing_for_prediction, listing_for_prediction$CategoryName == "手机" | listing_for_prediction$CategoryName == "电脑")
> listing_for_prediction_ce[,1:4]
    ID   Title CategoryID CategoryName
1  22785 samsung 三星 galaxy tab3 t211 1g 8g wifi+3g 可 通话 平板 电脑 gps 300万像素 白色    15    电脑
2  19436 samsung 三星 galaxy fame s6818 智能手机 td-scdma gsm 蓝色 移动 定制 机    14    手机
14 22014 华 志 硕 第四代 酷 睿 i3 4130 b85 4g 500g 高性能 核 显 家用 娱乐 高清 电脑 主机    15    电脑
27 22403 sony 索尼 p13226scb 13.3英寸 触 控 超 极 本 电脑 i5 4200u 4g 128g 固态 win8.1 蓝牙 4.0    15    电脑
31 21222 lenovo 联想 g510at-ifi 酷 睿 i5 4200 4g 500g 2g 独立 显卡 笔记本电脑 15.6寸    15    电脑
37 21803 dell 戴尔 optiplex 7010mt 商用 台式 电脑 主机 i5-3470 4g 500g dvdrw    15    电脑
38 19303 htc one m8sw e8 时尚 版 4g 手机 雪 精灵 白 fdd-lte td-lte wcdma gsm 联通 版    14    手机
40 19971 samsung 三星 galaxy siv 盖世 4 s4 i9500 双 四 核 手机 大陆 行货 全国 联保    14    手机
47 22857 thinkpad t430u-8614-1c4 14英寸 i5-3337 4g 1t 24ssd win8 超级 本 笔记本电脑    15    电脑

进行同样的z分数标准化、线性回归后的结果如下:

> listing_prediction_linearreg_model_ce <- lm(TargetValueNormalized ~ OneMonth
ConversionRateInUVNormalized + OneWeekConversionRateInUVNormalized + 
SellerReputation-Normalized + IsDealNormalized + IsNewNormalized + IsLimitedStockNormalized, 
data = listing_for_prediction_ce)
> summary(listing_prediction_linearreg_model_ce)

Call:
lm(formula = TargetValueNormalized ~ OneMonthConversionRateInUVNormalized + 
    OneWeekConversionRateInUVNormalized + SellerReputationNormalized + 
    IsDealNormalized + IsNewNormalized + IsLimitedStockNormalized, 
    data = listing_for_prediction_ce)

Residuals:
    1    2    14    27    31    37    38    40    47
    0.01927    0.06719    0.02765    0.03496    0.10215    -0.05980    -0.04693    -0.10215    -0.04235

Coefficients:
                                       Estimate Std. Error t value Pr(>|t|)  
(Intercept)                          -1.867e-15  4.429e-02   0.000   1.0000  
OneMonthConversionRateInUVNormalized -1.471e+01  7.972e+00  -1.846   0.2063  
OneWeekConversionRateInUVNormalized   1.507e+01  7.921e+00   1.902   0.1975  
SellerReputationNormalized           -1.491e+00  1.006e+00  -1.483   0.2763  
IsDealNormalized                      1.221e+00  3.550e-01   3.439   0.0751 .
IsNewNormalized                       5.554e-01  2.145e-01   2.590   0.1223  
IsLimitedStockNormalized              1.796e+00  7.535e-01   2.383   0.1400  
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.1329 on 2 degrees of freedom
Multiple R-squared:  0.9956,    Adjusted R-squared:  0.9823 
F-statistic: 75.18 on 6 and 2 DF,  p-value: 0.01318

从中可以看到,只有IsDealNormalized有比较小的偶然性(P值),并且拥有较高的正系数,证明对于此类商品,是否参加促销将对用户是否决定购买起到比较关键的作用。令人意外的是,SellerReputationNormalized竟然是负系数,也就是说商家的信誉越高,预测的转化率反而越低,这和我们的常识不符。好在其P值较大,证明该系数可信度并不高,如果使用了更多的测试数据,可能结论就会发生改变。从整体上看,调整后的R方(Adjusted R-squared)达到了98%,解释性很好。

接下来是日用品分类这组:

> listing_for_prediction_daily <- subset(listing_for_prediction, listing_for_prediction$
CategoryName == "沐浴露" | listing_for_prediction$CategoryName == "美发护发" | 
listing_for_prediction$CategoryName == "大米" | listing_for_prediction$CategoryName == "食用油")
> listing_for_prediction_daily[, 1:4]
    ID   Title CategoryID CategoryName
5  11671 rongs 融 氏 纯 玉米 胚芽油 5l 绿色食品 非 转基因 送 300ml 小 油 1瓶    9    食用油
6  23188 kerastase 卡 诗 男士 系列 去 头屑 洗发水 250ml 去 屑 止痒 男士 专用 进口 专业 洗 护发    16    美发护发
7  25150 dove 多 芬 丰盈 宠 肤 沐浴 系列 乳 木 果 和 香草 沐浴乳 400ml 5瓶    17    沐浴露
11 18663 十月 稻田 五常 稻 花香 大米 5kg 袋 x 2    12    大米
17 26597 olay 玉兰油 冰 透 清爽 沐浴露 200ml    17    沐浴露
21 17532 金龙鱼 生态 稻 5kg 袋    12    大米
24 24450 依 风 三件套 礼品 套装 洗发水 洗发露 护发素 沐浴 盐 沐浴乳 身体 乳 专业 洗 护 套装    16    美发护发
29 19020 金龙鱼 生态 稻 5kg 袋    12    大米
35 18569 golden delight 金 怡 泰国 茉莉 香米 5kg 泰国 进口    12    大米
42 25426 safeguard 舒肤佳 沐浴露 热销 组合 纯白 清 香型 劲 爽 清新 运动型 400ml 2    17    沐浴露
48 12522 蒙 谷 香 亚麻 籽 油 冷 榨 脱蜡 礼品盒 500ml 2瓶 送 领导 送 健康 首选 送礼 首选    9    食用油

z分数标准化、线性回归后的结果如下:

> listing_prediction_linearreg_model_daily <- lm(TargetValueNormalized ~ 
OneMonthConversionRateInUVNormalized + OneWeekConversionRateInUVNormalized + Seller
ReputationNormalized + IsDealNormalized + IsNewNormalized + IsLimitedStockNormalized, 
data = listing_for_prediction_daily)
> summary(listing_prediction_linearreg_model_daily)

Call:
lm(formula = TargetValueNormalized ~ OneMonthConversionRateInUVNormalized + 
    OneWeekConversionRateInUVNormalized + SellerReputationNormalized + 
    IsDealNormalized + IsNewNormalized + IsLimitedStockNormalized, 
    data = listing_for_prediction_daily)

Residuals:
    5    6    7    11    17    21
    24    29    35    42    48 
    -1.495e-02    3.101e-01    -3.903e-18    -5.792e-02    2.557e-01    -1.558e-01
    -4.472e-01    1.371e-01    2.187e-01    -8.162e-02    -1.642e-01

Coefficients:
                                       Estimate Std. Error t value Pr(>|t|)   
(Intercept)                          -1.792e-16  1.055e-01   0.000   1.0000   
OneMonthConversionRateInUVNormalized  1.329e-01  3.597e-01   0.369   0.7305   
OneWeekConversionRateInUVNormalized   8.605e-01  3.483e-01   2.470   0.0689 . 
SellerReputationNormalized           -3.474e-01  1.395e-01  -2.490   0.0675 . 
IsDealNormalized                      6.585e-02  1.247e-01   0.528   0.6255   
IsNewNormalized                      -1.654e-01  1.851e-01  -0.893   0.4222   
IsLimitedStockNormalized              7.790e-01  1.535e-01   5.076   0.0071 **
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.3499 on 4 degrees of freedom
Multiple R-squared:  0.951,    Adjusted R-squared:  0.8776 
F-statistic: 12.95 on 6 and 4 DF,  p-value: 0.01346

从结果来看,IsLimitedStockNormalized的P值非常小,是最为可靠的因素,而系数为正,这表明对于刚性需求的商品而言,如果它们的库存有限,那么其销售转化率会更高。原因可能是顾客担心自己经常使用的日用品缺货。其次,OneWeekConversionRateInUVNormalized的P值也较低,说明前一周的转化对于之后的转化预测有比较可靠的贡献。而对于商家的信誉度SellerReputationNormalized依然是比较反常的负系数。从整体上看,调整后的R方(Adjusted R-squared)达到了87%,解释性比较好。

下一个大的分类组是饮料和零食:

> listing_for_prediction_drink.snack <- subset(listing_for_prediction, 
listing_for_prediction$CategoryName == "坚果" | listing_for_prediction$CategoryName == "巧克力" |
listing_for_prediction$CategoryName == "饼干" | listing_for_prediction$CategoryName == "饮料饮品" |
listing_for_prediction$CategoryName == "方便面")
> listing_for_prediction_drink.snack[, 1:4]
    ID   Title CategoryID CategoryName
10  6275 德芙 兄弟 品牌 脆 香米 脆 米 心 牛奶 巧克力 500g 散装    6    巧克力
13  1290 雅 客 花生 口味 法式 薄饼 夹心饼干 500g 小包装 零食 美 食品 糕 点心    1    饼干
19  6083 德芙 士力架 花生 巧克力 桶装 460克 全家 桶装    6    巧克力
20  9082 圣 碧 涛 san benedetto 天然 矿泉水 500ml 瓶 意大利 进口 瓶装水 更 自然 更 
         健康 更 纯净    7    饮料饮品
26  1140 aji 芒 果味 夹心饼干 270g 休闲 零食    1    饼干
28  5945 hershey s 好 时 巧克力 kisses 结婚 喜糖 1斤 500g 散装 称重 约 105粒 
         牛奶 黑 巧 扁 桃仁 榛 仁 曲奇    6    巧克力
30  2068 康师傅 脆 海带 香 锅 牛肉面 121 5 袋    2    方便面
32 10718 大徐 南瓜子 独立 小包 散 称 500g 盐 焗 味 南瓜子 休闲 零食 小 南瓜子    8    坚果
34  2269 寿桃 牌 儿童 萝卜 面    2    方便面
44  9150 海 太 冰斗 哩 儿童 饮料 蓝 粉色 各 2瓶 280ml 韩国 进口 儿童 果汁 棉花 糖 味 正品    7    饮料饮品
45  1227 meilijia bakery cake 美丽 家 食品 饼干 礼包 煎饼 礼盒 精挑细选 大礼包 650g    1    饼干
46  9904 正 林 黑 瓜子 甘草 味 315g    8    坚果
49  7519 怡 泉 c 柠檬 味 汽水 500ml 支    7    饮料饮品
50  1324 喔 依 喜 食品 黄油 蜂蜜 杏仁酥 250g 独立 小包装    1    饼干

对该大类进行z分数标准化和线性回归,之后的结果如下:

> listing_prediction_linearreg_model_drink.snack <- lm(TargetValueNormalized ~ OneMonthConversionRateInUVNormalized + OneWeekConversionRateInUVNormalized + Seller
ReputationNormalized + IsDealNormalized + IsNewNormalized + 
IsLimitedStockNormalized, data = listing_for_prediction_drink.snack)
> summary(listing_prediction_linearreg_model_drink.snack)

Call:
lm(formula = TargetValueNormalized ~ OneMonthConversionRateInUVNormalized + 
    OneWeekConversionRateInUVNormalized + SellerReputationNormalized + 
    IsDealNormalized + IsNewNormalized + IsLimitedStockNormalized, 
    data = listing_for_prediction_drink.snack)

Residuals:
    Min       1Q   Median       3Q      Max 
-0.82870 -0.10268 -0.00554  0.19772  0.54805 

Coefficients:
                                       Estimate Std. Error t value Pr(>|t|)  
(Intercept)                           5.447e-16  1.315e-01   0.000   1.0000  
OneMonthConversionRateInUVNormalized -1.228e+00  9.020e-01  -1.361   0.2157  
OneWeekConversionRateInUVNormalized   1.941e+00  9.309e-01   2.085   0.0755 .
SellerReputationNormalized            1.470e-01  1.708e-01   0.861   0.4179  
IsDealNormalized                     -1.237e-01  1.756e-01  -0.704   0.5039  
IsNewNormalized                       2.834e-01  1.772e-01   1.599   0.1538  
IsLimitedStockNormalized              1.442e-01  1.587e-01   0.908   0.3939  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.4921 on 7 degrees of freedom
Multiple R-squared:  0.8696,    Adjusted R-squared:  0.7578 
F-statistic: 7.779 on 6 and 7 DF,  p-value: 0.00801

从中可以看出,依旧是OneWeekConversionRateInUVNormalized的P值较低,说明前一周的转化率对于之后的转化预测仍然有着比较可靠的贡献,不过相对于日用品大类,这个因素在本大类中的权重更高。从整体上看,调整后的R方(Adjusted R-squared)只有76%左右,解释性一般。

最后一组是生鲜和干货:

> listing_for_prediction_fresh.dried <- subset(listing_for_prediction, 
listing_for_prediction$CategoryName == "海鲜水产" | listing_for_prediction$CategoryName == "新鲜水果" |
listing_for_prediction$CategoryName == "进口牛奶" | listing_for_prediction$CategoryName == "枣类" |
listing_for_prediction$CategoryName == "茶叶")
> listing_for_prediction_fresh.dried[, 1:4]
    ID   Title CategoryID CategoryName
3   3590 金本位 美味 章 鱼丸 250g    3    海鲜水产
4   3787 莲花 居 预售 阳澄湖 大闸蟹 实物 558 型 公 3.3-3.6 两 母 2.3-2.6 两 5对 装    3    海鲜水产
8  14707 魏 小 宏 weixiaohong 长寿 枣 400克 袋装 美容 养颜 安徽 宣城 水 东 特产    10    枣类
9  28657 80 茶客 特级 平阴 玫瑰花 玫瑰 茶 花草 茶 花茶 女人 茶 冲 饮 50克 袋    18    茶叶
12 15229 民 信 南汇 8424 西瓜 4只 装 中 约 26斤    11    新鲜水果
15 13200 东阿 阿胶 金丝 枣 360g- 独立 包装    10    枣类
16  3440 宅 鲜 配 味 付 八 爪 鱼 芝麻 寿司 料理 材料 必备 1000g 盒    3    海鲜水产
18  4955 芭 蔻 玛 原装 进口 欧洲 纯正 奶 源 欧式 香浓 牛奶 榛子 味 230g 瓶 新品 上市    4    进口牛奶
22  4826 波 顿 美国 原装 进口 牛奶 borden 脱脂 牛奶 946ml 单 盒装 11月 到期    4    进口牛奶
23  3910 水 锦 洋 加拿大 牡丹 虾 刺 身 级 20-24 头 盒 1000g 进口 虾 顶级 刺 身 日 料 好 海鲜    3    海鲜水产
25 13428 绿 帝 金丝 枣 500g 2袋 河北 沧州 特产 一级 无核 红枣 阿胶 枣 金丝小枣 蜜枣 仙 枣    10    枣类
33 15577 都 乐 新西兰 佳 沛 金 奇异果 猕猴桃 大箱 装 10斤    11    新鲜水果
36  2998 光明 渔业 新西兰 青 口 贝 1000g 进口 海鲜 半 壳 新鲜 超大 海鲜 美食 肉质 鲜 滑 原装 进口    3    海鲜水产
39  4690 宾格 瑞 韩国 进口 binggrae 宾格 瑞 香蕉 牛奶 饮料 200ml 6 瓶装 1200ml 果汁 牛奶 饮品    4    进口牛奶
41 26946 杭 梅 花草 茶 金银花 特级 金银 花茶 河南 封丘 35g 罐 新花    18    茶叶
43 13999 铁 大哥 无核 蜜饯 阿胶 枣 280g 3    10    枣类

对该大类进行z分数标准化和线性回归,之后的结果如下:

> listing_prediction_linearreg_model_fresh.dried <- lm(TargetValueNormalized ~ 
OneMonthConversionRateInUVNormalized + OneWeekConversionRateInUVNormalized + 
SellerReputationNormalized + IsDealNormalized + IsNewNormalized + IsLimitedStock
Normalized, data = listing_for_prediction_fresh.dried)
> summary(listing_prediction_linearreg_model_fresh.dried)

Call:
lm(formula = TargetValueNormalized ~ OneMonthConversionRateInUVNormalized + 
    OneWeekConversionRateInUVNormalized + SellerReputationNormalized + 
    IsDealNormalized + IsNewNormalized + IsLimitedStockNormalized, 
    data = listing_for_prediction_fresh.dried)

Residuals:
    Min       1Q   Median       3Q      Max 
-0.49216 -0.24227  0.03231  0.22336  0.48001 

Coefficients:
                                       Estimate Std. Error t value Pr(>|t|)  
(Intercept)                           1.854e-16  9.802e-02   0.000   1.0000  
OneMonthConversionRateInUVNormalized  1.619e+00  5.090e-01   3.180   0.0112 *
OneWeekConversionRateInUVNormalized  -7.188e-01  5.431e-01  -1.323   0.2183  
SellerReputationNormalized            3.490e-01  1.240e-01   2.815   0.0202 *
IsDealNormalized                      1.550e-01  1.081e-01   1.434   0.1854  
IsNewNormalized                      -6.841e-02  1.345e-01  -0.509   0.6232  
IsLimitedStockNormalized             -3.699e-02  1.368e-01  -0.270   0.7929  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.3921 on 9 degrees of freedom
Multiple R-squared:  0.9078,    Adjusted R-squared:  0.8463 
F-statistic: 14.76 on 6 and 9 DF,  p-value: 0.0003359

终于,这次SellerReputationNormalized的系数为正了,而且P值降到了很低的范围,说明偶然性很小。这也许是因为对于生鲜和干货类商品而言,售前咨询、售中运输和售后保障等的因素更为关键,因此商家的良好口碑尤为重要。而OneMonthConversionRateInUVNormalized的系数和P值表明,销售的历史也起到了较大的作用。从整体上看,调整后的R方(Adjusted R-squared)达到84%左右,解释性尚可。

“小明哥,看来线性回归分析在不同的数据集上,会产生完全不同的结论啊!你看,将原本的数据集进行回归后,我们几乎没有什么结论。可是,将数据集合细分成几个不同的组,就会有新的发现。”

“是的,现实中也的确如此。人们在购买电子产品时所考虑的因素与购买日常快消品时所考虑的因素肯定是有所不同的,如果混为一谈,当然无法找到有趣的结论。所以,我们不仅要学会算法本身,还需要根据实际的应用环境合理使用。最后,由于线性回归基本上都是用于离线分析的,模型处理速度快,而且学习出来的系数用于实时运算也是非常高效的,因此不再需要Mahout或其他类似的Java类库来协助线上服务。我们还可以使用线性回归学习而来的系数,提升搜索或推荐系统的排序准确率。”

相关实践学习
简单用户画像分析
本场景主要介绍基于海量日志数据进行简单用户画像分析为背景,如何通过使用DataWorks完成数据采集 、加工数据、配置数据质量监控和数据可视化展现等任务。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
相关文章
|
25天前
|
负载均衡 测试技术 持续交付
高效后端开发实践:构建可扩展的微服务架构
在当今快速发展的互联网时代,后端开发扮演着至关重要的角色。本文将重点探讨如何构建可扩展的微服务架构,以及在后端开发中提高效率的一些实践方法。通过合理的架构设计和技术选型,我们可以更好地应对日益复杂的业务需求,实现高效可靠的后端系统。
|
30天前
|
设计模式 API 数据库
构建高效微服务架构:从理论到实践
【2月更文挑战第29天】 在现代软件开发领域,微服务架构已经成为一种流行的设计模式,它通过将大型应用程序拆分成一系列小型、独立的服务来提高系统的可维护性、扩展性和敏捷性。本文将深入探讨微服务的核心概念、设计原则以及如何在实际项目中实现和优化微服务架构。我们将从微服务的定义出发,讨论其与传统单体架构的区别,并分析微服务的优势与挑战。接着,文章将提供一套实践指南,包括服务划分、通信机制、数据一致性问题以及安全性考虑等方面,以指导开发者构建和维护一个高效的微服务系统。
|
9天前
|
Kubernetes 安全 Java
构建高效微服务架构:从理论到实践
【4月更文挑战第9天】 在当今快速迭代与竞争激烈的软件市场中,微服务架构以其灵活性、可扩展性及容错性,成为众多企业转型的首选。本文将深入探讨如何从零开始构建一个高效的微服务系统,覆盖从概念理解、设计原则、技术选型到部署维护的各个阶段。通过实际案例分析与最佳实践分享,旨在为后端工程师提供一套全面的微服务构建指南,帮助读者在面对复杂系统设计时能够做出明智的决策,并提升系统的可靠性与维护效率。
|
25天前
|
消息中间件 敏捷开发 运维
构建高效可靠的微服务架构:策略与实践
随着现代软件开发的复杂性增加,微服务架构逐渐成为企业解决大型应用系统分解、敏捷开发和持续部署问题的有效手段。本文深入探讨了构建一个高效且可靠的微服务架构的关键策略,包括服务的合理划分、通信机制的选择、数据一致性保障以及容错处理。通过分析这些策略在具体案例中的应用,我们旨在为开发者提供一套可行的微服务设计及实施指南。
130 6
|
28天前
|
Cloud Native 安全 持续交付
构建未来:云原生架构的演进与实践
【2月更文挑战第30天】 随着数字化转型的深入,企业对于信息技术的需求日益复杂化和动态化。传统的IT架构已难以满足快速迭代、灵活扩展及成本效率的双重要求。云原生技术作为解决这一矛盾的关键途径,通过容器化、微服务、持续集成/持续部署(CI/CD)等手段,实现了应用的快速开发、部署及运维。本文将探讨云原生架构的最新发展,分析其如何助力企业构建更加灵活、高效的业务系统,并结合实际案例,展示云原生转型过程中的最佳实践和面临的挑战。
|
2天前
|
消息中间件 运维 监控
现代化软件开发中的微服务架构设计与实践
本文将深入探讨现代化软件开发中微服务架构的设计原则和实践经验。通过分析微服务架构的优势、挑战以及常见的设计模式,结合实际案例,帮助开发者更好地理解如何构建可靠、可扩展、高效的微服务系统。
|
2天前
|
负载均衡 Java 开发者
细解微服务架构实践:如何使用Spring Cloud进行Java微服务治理
【4月更文挑战第17天】Spring Cloud是Java微服务治理的首选框架,整合了Eureka(服务发现)、Ribbon(客户端负载均衡)、Hystrix(熔断器)、Zuul(API网关)和Config Server(配置中心)。通过Eureka实现服务注册与发现,Ribbon提供负载均衡,Hystrix实现熔断保护,Zuul作为API网关,Config Server集中管理配置。理解并运用Spring Cloud进行微服务治理是现代Java开发者的关键技能。
|
2天前
|
算法 数据可视化 数据挖掘
R语言社区主题检测算法应用案例
R语言社区主题检测算法应用案例
|
5天前
|
Linux 数据安全/隐私保护
Linux基础与服务器架构综合小实践
【4月更文挑战第9天】Linux基础与服务器架构综合小实践
1148 6
|
17天前
|
消息中间件 安全 API
构建高效微服务架构:策略与实践
【4月更文挑战第1天】在数字化转型的浪潮中,微服务架构已成为企业追求敏捷、可扩展和灵活部署的重要技术手段。本文将深入探讨如何通过合理的设计原则和先进的技术栈,构建一个高效的微服务系统。我们将剖析微服务设计的核心要点,包括服务的划分、通信机制、数据一致性以及安全性问题,并结合案例分析,展示如何在现实世界中应用这些策略以提升系统的可靠性和性能。