分享

贝叶斯老爷子掐指一算,春节负荷预测应该这样做

 汇电云联 2019-04-12

上期说过我们要用贝叶斯时间序列模型来试验下负荷预测。而贝叶斯时间序列模型和上一期使用PROPHET和ARIMA时间序列分解模型一样,也可以把时间序列分解为周期项和趋势项。所以这一期我们通过上期的模型进行实验对比。

仍旧是熟悉的套路。

让我们先来了解下这个模型:

这个时间序列模型是基于线性动态系统(也叫线性高斯模型),实现是使用的卡尔曼滤波,是一种动态的时间序列预测方法。我们知道,在现实生活中的测量值都是有噪声的,那么我们使用测量值去预测未来的值就存在先天的缺陷。而任何一个满足物理规律的系统都是连续的,所以我们可以利用上一个状态去预测当前状态。

贝叶斯老爷子掐指一算,春节负荷预测应该这样做

图1 模型示意图

如图1所示:y就表示就是我们的测量值,x表示状态值。从状态值指向测量值的是观测方程(见图2公式2),从上一状态值指向下一状态值的是状态方程(见图2公式1),观测方程和状态方程均为线性高斯分布,都含有一个噪声项。

贝叶斯老爷子掐指一算,春节负荷预测应该这样做

图2 模型公式

卡尔曼滤波的本质就是结合测量和预测去估计当前状态。求解过程比较复杂,我们这里举一个例子来说明。

假如我昨天一共喝了500±60ml水,注意,在这里我用了±60ml,是我喝的水量有60ml的误差。现在我要得到我今天的喝水量。首先我根据上一天的喝水量来估计这一天的喝水量,因为我每天的喝水量都是差不多的,所以我还是预测我今天的喝水量是500±60ml,而我今天喝了4杯水,每杯水的容量是130ml,盛水的误差为20ml,所以我今天的喝水值的测量值是520±80ml。由于我们用于估算今天的喝水量有两个喝水量,分别是500ml和520ml。究竟实际的喝水量是多少呢?是相信500ml多一点还是520ml多一点,我们可以用他们的covariance(协方差)来判断。因为 Kg^2=60^2/(60^2+80^2)所以Kg=0.6,我们可以估算出今天的实际喝水量是:500+0.6*(520-500)=512ml。我们还要算出今天那个最优值(512 ml)的偏差。算法如下:((1-Kg)*60^2)^0.5=46.48ml。这里的60就是上面的昨天估算出的最优值500ml的偏差,得出的46.48就是今天估算出的最优值的偏差。就是这样,卡尔曼滤波器就不断的把 covariance递归,从而估算出最优值。因为这个过程是一个不断迭代的过程,每次都保留上次的方差,根据测量值不断得到最优值,所以可以做在线的预测任务。

贝叶斯老爷子掐指一算,春节负荷预测应该这样做

贝叶斯老爷子掐指一算,春节负荷预测应该这样做

贝叶斯老爷子掐指一算,春节负荷预测应该这样做

如上图所示:第一张是趋势项,第二张是周期项,这两张图都是卡尔曼滤波后的结果,并且都有一个置信区间,表示最优值的偏差范围。第三张蓝线是根据趋势项和周期项求和得到的时间序列,黑线是测量值,在负荷预测中,指的是我们的负荷真实值。可以看到,在这个模型中,周期项不再是静态的,而是动态变化的,这也就是这个模型相对prophet的一个优势。

除了趋势项和周期项,这个模型还加入特征项,用一些关联性的序列作为特征可以大幅提高算法的预测效果。

通过下图中实际的真实值,可以看出,不同年份的春节时段的负荷规律惊人的相似,所以我们可以把去年的春节的时间序列作为特征项,加入到模型中,效果如何?请看下面分解。

贝叶斯老爷子掐指一算,春节负荷预测应该这样做

现在我们可以通过我们实际的运行结果来看一下在春节及春节后期这段时间的预测效果:

首先是老牌的ARIMA趋势分解:

贝叶斯老爷子掐指一算,春节负荷预测应该这样做

可以看出真实值的周期幅度逐渐变大,且较明显,ARIMA对周期的拟合有一定的滞后性,所以其中一些值的准确性还是存在一定的差距,表现的差强人意。

贝叶斯老爷子掐指一算,春节负荷预测应该这样做

贝叶斯老爷子掐指一算,春节负荷预测应该这样做

再来看下我们今天所介绍的贝叶斯时间序列模型:

第一个是:时间序列=趋势项+周期项

第二个是:时间序列=趋势项+周期项+特征项

通过这两个可以发现这个较明显的特质:跟ARIMA时间序列分解相比,第一个方法并没有什么提升效果,也存在明显的滞后性;在加上特征项之后,我们预测的负荷逐渐趋于实际负荷,使得整个时间段预测出的准确度有了明显的提升。让我们看下最终的结果:

贝叶斯老爷子掐指一算,春节负荷预测应该这样做

可以看出,不论春节时间,还是春节过后的这段时间,使用特征项的贝叶斯时间序列模型的准确率都有很明显的优势,这就是它的强大之处——把传统的时间序列的预测方法和用特征回归的方法结合起来,使得模型既能受近期数据的影响也能借鉴历史的特征。

传统的时间序列模型,都是在当前序列值受临近前n个序列值影响的思路下进行建模,当序列值是受不临近序列值影响较大时,不能关联到这种影响。虽然可以通过加入周期项弥补这一缺陷,例如上面的例子,如果加入年周期,也可以反映出远期的影响,但是这就要求我们有足够多的周期长度的数据做支撑。

最重要的是,贝叶斯时间序列模型更加灵活,能够加入其他类型的序列作为特征项,例如:该行业下的订单量、销售金额,这是传统时间序列方法所不具有的。所以说,这个模型集成了传统时间序列模型和特征回归模型的特性,能够更灵活的进行建模,达到更好的预测效果。

本文版权归“汇电云联”所有,转载请联系作者。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多