来源:数据分析师 CPDA | 时间:2018-10-12 | 作者:admin
刘程浩 广州CPDA11期学员 经济学硕士
擅长通过数据对业务流程进行分析和优化。
前言:
才写完《业务解释和算法之间融合的再思考》还没多少天,下午我正在楼下放松下眼睛,看到周围林立的写字楼的外轮廓就好像很多玻璃立方体,回想起之前不停的做空间旋转观察,有一个发现在我脑海里盘旋着。
其实SVM应用于融合算法,在blending的回归领域其实是有一个很大的特点的,即在融合过程中对参与融合的模型有比较强的“纠错能力”。也就是说如果参与融合的模型的拟合结果和实际结果偏差比较大的话,即便加上权重也难以让融合结果拟合的更好。但是SVM却可以做到。
而且,这个独特的特点也可以在现实空间中呈现出来!
以下正文:
好了,我们现在开始进行这个观点的实验。
首先,我们回到业务场景中来。我们先回顾下之前的空调销量的场景
(手机横置的话,下表可以看完整,下同)
方法 | 2016年1月 | 2016年2月 | 2016年3月 | …… | 2017年12月 |
实际销售Y | Y1 | Y2 | Y3 | …… | Y24 |
市场空间法X1 | X11 | X12 | X13 | …… | X1 24 |
渠道卷积+促销卷积X2 | X21 | X22 | X23 | …… | X2 24 |
时间序列法X3 | X31 | X32 | X33 | …… | X3 24 |
上表是我们之前历史2年的实际销售数据和3种方法的预测数据,说成拟合值也对。
其中,每一个月份所在的列,其实是可以看做一个4维的空间点,每个点的坐标就是( Y, X1,X2,X3 )。这个4维空间,就是我们很难用业务语言解释的人为构造的空间。
不过,为了在三维坐标系中能够画出来,在这里我就剔除掉最后一个方法,将上表变成3维空间。
方法 | 2016年1月 | 2016年2月 | 2016年3月 | …… | 2017年12月 |
实际销售Y | Y1 | Y2 | Y3 | …… | Y24 |
市场空间法X1 | X11 | X12 | X13 | …… | X1 24 |
渠道卷积+促销卷积X2 | X21 | X22 | X23 | …… | X2 24 |
这样一来,每个月份的列就表征了一个空间的样本,每个样本的坐标就是( Y, X1,X2)。
如果我们先退一万步来看,假设上表的两种预测方法X1和X2拟合的效果非常好,能够和实际销售数量Y完全一致,也即是Yi=X1i=X2i,那么这样一来在这个新构建的三维空间里,这些样本就在一条直线上,并且和三维空间的每个面呈45°夹角。
还记得坐标轴怎么画的朋友,可以脑补下,下图我做了一个呈现展示
在这种场景下,由于样本点本身就是一条直线,因此用SVM来求解超平面就没有意义了。因为样本点本身就是超平面嘛!
在这种场景下,因为2种方法拟合的非常好,因此用传统经典的“规划求解法”得到的X1和X2两种方法的权重,也当然是各自50%!
当然了,这种场景是理想状态,现实中是不存在的。
不过,有了这个开始,我们慢慢放开假设。
我们假设这X1和X2两种方法的实际拟合效果并非完全等于Y,而是有一些可接受的偏差ε1和ε2,这个时候上表就会变成下面的样子
方法 | 2016年1月 | 2016年2月 | 2016年3月 | …… | 2017年12月 |
实际销售Y | Y1 | Y2 | Y3 | …… | Y24 |
市场空间法X1 | X11+ε11 | X12+ε12 | X13+ε13 | …… | X1 24+ε1 24 |
渠道卷积+促销卷积X2 | X21+ε21 | X22+ε22 | X23+ε23 | …… | X2 24+ε2 24 |
我们假定ε1和ε2都不是很大,大约也就是10%左右幅度吧,那么上表在3维空间里展示,就是应该是一个密集的 “点束”。
这个“点束”也是和每个面的夹角,近似的呈现45°的样子,如下图
其实道理很简单,所有的样本点都是因为存在着ε1和ε2,所以都在围绕着那条理想状态下的直线随机波动。
在这种场景下,由于样本点束本身就是接近一条直线,波动有限。因此用SVM来求解超平面意义也不大,它的结果也很容易预判出来,就是那条45°角直线,或者和它偏转很小夹角的另一条直线!
在这种场景下,因为2种方法拟合的也算比较好,因此用传统经典的“规划求解法”得到的X1和X2两种方法的权重,也当然是各自接近50%!
到此为止,我们可以得出初步的结论:
如果多种方法的拟合结果都比较好的话,用传动经典的“规划求解法”和SVM求解的超平面,效果都会差不多,或者效果是一致的。
大家分不出谁好谁坏。
现在进入关键时刻
我们假设这X1和X2两种方法中,有一种方法,我们假设X2的实际拟合效果比较差,而X1效果比较好,也就是说偏差ε1可接受但和ε2较难接受,这个时候对比就会变成下面的样子,我们把ε2换一个字母用ξ2表示。我们假定ξ2的变化幅度是-200%≤ξ2≤200% 吧。
方法 | 2016年1月 | 2016年2月 | 2016年3月 | …… | 2017年12月 |
实际销售Y | Y1 | Y2 | Y3 | …… | Y24 |
市场空间法X1 | X11+ε11 | X12+ε12 | X13+ε13 | …… | X1 24+ε1 24 |
渠道卷积+促销卷积X2 | X21+ξ21 | X22+ξ22 | X23+ξ23 | …… | X2 24+ξ2 24 |
这个时候,在三维空间中图案又会呈现怎样的情况呢?
我们看一下图
我们看,由于X1和Y之间偏移比较小,所以在这个视角上看呈现的是一幅分散的没那大的一条“点束”。
但由于X2和Y之间存在着很大的差异,实际上我走了一个很极端的尝试,就是让X2的噪声扰动呈现一个振幅很大的随机游程。这样一来我们旋转一下这个空间,就会发现在X2方向上,样本点之间的离散程度其实很大。
之前那一条密集的“点束”一下子就散开了,呈现出很离散的状态。
如果看不习惯,我们可以用二维折线图换个视角来看,
怎么样,确实3条折线有很大的差异吧?
在这种场景下,由于样本点束分的太散,我们确实值得用“规划求解”和SVM的算法做一下对比
“规划求解”得到的权重是
市场空间法 X1 | 渠道卷积+促销卷积 X2 | |
权重 | 88% | 12% |
这个很符合业务实际和业务逻辑,X1偏差下,所以权重大;X2偏差大,所以权重就小。
那么用SVM呢?
用R的e1071包,并用tune()求得最优参数的SVM得到的拟合效果与“规划求解”得到的效果做下对比,看下图
在这种场景下,我们会发现其实SVM的效果要比规划求解得到的效果好很多。
为了进一步说明问题,我们来看一下2者的泛化效果如何
在这里首先用X1和X2继续做预测,和实际值相比得到以下的结果
可以看到,预测效果和之前场景假设差不多,在预测期内,市场空间法X1继续表现的接近实际销量;而X2方法则继续保持随机游程。
接下来,我们用上一步得到的规划求解的权重组合,以及用训练好的最优参数的SVM模型进行预测。然后预测的效果如下
乍一看,两者直接的预测偏差一下子不太说的明白,不过这两者的偏差特点还不一样。
SVM的偏差,实际上受到X1的特征影响,还是保留了空调销售季节性波动的信息,因此我们会看到实际销售的和预测值的变化趋势是一样的。不过由于X2几乎接近随机游程,因此这个特征对于历史训练的“经验”复用的比较差,所以还是让最终的结果带来了偏差。
而“规划求解”的得到的组合预测,由于X1保留的销售季节性波动占了接近90%的影响力,因此它的预测的方向趋势和实际销售情况是保持一致的。不过受到X2的整体接近随机游程,振幅比较大的影响(我设定的X2的波动振幅为[200,20000],就是为了看出效果),也会对组合预测造成比较大的偏差。
那么,他们俩到底谁的预测偏差大呢?
为了能够定量的测量2者之间的差距,我们对两种融合方法的预测残差平方和做一个对比,结果比较诧异,规划求解的预测残差比SVM的还小。
月份 | 实际销量 | 方法X1 | 方法X2 | 规划求解预测残差平方 | SVM预测残差平方 |
201801 | 5022 | 4200 | 18075 | 600190.8 | 68857.96 |
201802 | 4845 | 3896 | 11260 | 10314.21 | 310588.9 |
201803 | 4325 | 3500 | 1267 | 1170661 | 547478.6 |
201804 | 5324 | 5190 | 12378 | 480508.6 | 1416521 |
201805 | 5577 | 5375 | 9854 | 98243.71 | 1208564 |
201806 | 6055 | 6029 | 481 | 441503.8 | 1235.171 |
残差平方和 | 2801423 | 3553246 |
这就难解释了!
我又重新去生成了10次的X2的随机结果,得到的结果却更加随机,X2在接近随机游程的情况下,两种预测的残差平方和做对比,胜负1:1,对比的结果确实很难说。
下表红色的,就是表示SVM的残差平方和要小于规划求解的
模拟次数 | 规划求解预测残差平方 | SVM预测残差平方 |
1 | 1721549 | 3274151 |
2 | 2083354 | 2324751 |
3 | 3628859 | 3757893 |
4 | 3716983 | 1121014 |
5 | 4076076 | 3111626 |
6 | 2167470 | 3226703 |
7 | 1935428 | 2153152 |
8 | 2458296 | 1483230 |
9 | 4757411 | 2280369 |
10 | 3175936 | 2456094 |
当然了,这种场景在现实中是不可能出现的。
像X2这种接近随机游程的预测效果,换了任何人都不会用的。
不过结合文正第二种场景,至少说明了一点,SVM在训练的时候,对于参与融合的子模型有比较强的抗干扰能力。
换句话说,如果参与融合的各个子模型的历史拟合的偏差都是可接受的话,那么它们的预测效果也不会和实际情况偏差很大,那么这个时候SVM凭借其较强的抗干扰能力做出的预测,是一定比规划求解要优。
于是接下来,我们进入到最严格的场景
我们假设这X1和X2两种方法中,偏差ε1和ε2较难接受,这个时候对比就会变成下面的样子,我们假定变化幅度都非常大,是远远超出原始预测本身的随机游程吧。
方法 | 2016年1月 | 2016年2月 | 2016年3月 | …… | 2017年12月 |
实际销售Y | Y1 | Y2 | Y3 | …… | Y24 |
市场空间法X1 | X11+ε11 | X12+ε12 | X13+ε13 | …… | X1 24+ε1 24 |
渠道卷积+促销卷积X2 | X21+ε21 | X22+ε22 | X23+ε23 | …… | X2 24+ε2 24 |
这个时候,在三维空间中图案又会呈现怎样的情况呢?
我们看,所有的样本点无论在哪个方向上,都离散的非常厉害,这个时候,X1和X2方法拟合出来的值作为特征,感觉也”特征不了啥了”
即便如此,这个时候做融合效果会如何?
我们试试看
结果我们发现,大吃一惊
SVM的历史期次那段时期,融合的效果比固化求解得到的情况要好很多。
预测期,SVM的表现也比规划求解的结果要好。
那么看来,SVM的融合效果确实比传统的“规划求解”融合要好,毕竟在如此极端恶劣的场景下,它做出来的回归和预测都要好于对手。
看到这么个场景,不禁激发我的思考动力,为什么SVM能够这么厉害,如此超强纠错?!
首先,对手能力差是一个原因。因为如果参与融合的子模型或子方法的预测效果都是很差,那么无论你赋予这些子模型或子方法何种权重组合,结果还是很差。
其次,就是SVM本身的设计特点,决定了它的“超强纠错能力”。
我们看SVM用于回归的数学表达
假定在一个确定的损失函数下
如果样本点落入了误差阈值管道y±ε内,那么就不计算损失,反而损失只计算在误差阈值管道外的样本。在这种条件先,设置规划求解如下
规划求解的最终目的,实际上是让尽可能多的拟合值,落入到这个误差管道中去。
由于这个误差阈值ε不会很大,实际情况下=0.2就让人比较难接受了,因此在这个约束条件中,本身就没有放宽模型训练的结果限制。或者说源于低偏差的约束,求解得到的超平面本身就最大可能贴近实际观测值。
这也就是它和最小二乘法不一样的地方,它在手段上就非常的直白,要的就是小误差!而最小二乘法则是按照总的偏差平方和最小,多了一个平方和就相当于绕了一个圈。这样一来SVM自然比最小二乘法做回归得到的值,更加直观的逼近。
这样就产生了一种视觉效果,SVM好像是可以忽略样本特征,哪怕特征呈现随机游程,最终的超平面也会有“超强纠错”的效果。而实际上,因为它直接对观测值y负责,让这个超平面尽可能在这个小的误差管道中,这样无疑就会有一个比较好的拟合效果。
而在做预测的时候,就要回到业务中来,由于历史期次里面的各个子模型本身预测效果不会差到那里去,要是差的话早就被踢出群了。因此未来期间内的样本特征,只要业务性质没有发生重大的改变,那么未来的趋势应该是稳定的,这样一来就相当于告知了SVM,未来特征与实际未来要发生的值偏差并不远,无论是否通过核函数映射到高维空间去,总能够像在历史期次训练那样,得到的超平面最大可能的与误差管道产生交集。
当然了,如果未来发生了断崖式或者直角上升般的巨变,那么SVM也是预测不出来的。
写到这里,我做一个回顾小结
1、如果多个模型的结果要融合,本身各个参与融合的模型拟合效果好的话,那么SVM和传统的“规划求解”法差异可以忽略不计,都很准。
2、如果多个模型的结果要融合,且只有有限个子模型的偏差较大的话,SVM在通过回归实现融合的时候,较传统的“规划求解”融合效果好;
但预测的效果来看,SVM和传统的“规划求解”差异不大。
3、如果多个模型的结果要融合,所有的子模型的偏差都较大的话,SVM在通过回归实现融合的时候,拟合与预测的效果一般来说都要较传统的“规划求解”融合效果好。