上期說過我們要用貝葉斯時間序列模型來試驗下負(fù)荷預(yù)測。而貝葉斯時間序列模型和上一期使用PROPHET和ARIMA時間序列分解模型一樣,也可以把時間序列分解為周期項和趨勢項。所以這一期我們通過上期的模型進(jìn)行實驗對比。 仍舊是熟悉的套路。 讓我們先來了解下這個模型:這個時間序列模型是基于線性動態(tài)系統(tǒng)(也叫線性高斯模型),實現(xiàn)是使用的卡爾曼濾波,是一種動態(tài)的時間序列預(yù)測方法。我們知道,在現(xiàn)實生活中的測量值都是有噪聲的,那么我們使用測量值去預(yù)測未來的值就存在先天的缺陷。而任何一個滿足物理規(guī)律的系統(tǒng)都是連續(xù)的,所以我們可以利用上一個狀態(tài)去預(yù)測當(dāng)前狀態(tài)。 圖1 模型示意圖 如圖1所示:y就表示就是我們的測量值,x表示狀態(tài)值。從狀態(tài)值指向測量值的是觀測方程(見圖2公式2),從上一狀態(tài)值指向下一狀態(tài)值的是狀態(tài)方程(見圖2公式1),觀測方程和狀態(tài)方程均為線性高斯分布,都含有一個噪聲項。 圖2 模型公式 卡爾曼濾波的本質(zhì)就是結(jié)合測量和預(yù)測去估計當(dāng)前狀態(tài)。求解過程比較復(fù)雜,我們這里舉一個例子來說明。 假如我昨天一共喝了500±60ml水,注意,在這里我用了±60ml,是我喝的水量有60ml的誤差?,F(xiàn)在我要得到我今天的喝水量。首先我根據(jù)上一天的喝水量來估計這一天的喝水量,因為我每天的喝水量都是差不多的,所以我還是預(yù)測我今天的喝水量是500±60ml,而我今天喝了4杯水,每杯水的容量是130ml,盛水的誤差為20ml,所以我今天的喝水值的測量值是520±80ml。由于我們用于估算今天的喝水量有兩個喝水量,分別是500ml和520ml。究竟實際的喝水量是多少呢?是相信500ml多一點還是520ml多一點,我們可以用他們的covariance(協(xié)方差)來判斷。因為 Kg^2=60^2/(60^2+80^2)所以Kg=0.6,我們可以估算出今天的實際喝水量是:500+0.6*(520-500)=512ml。我們還要算出今天那個最優(yōu)值(512 ml)的偏差。算法如下:((1-Kg)*60^2)^0.5=46.48ml。這里的60就是上面的昨天估算出的最優(yōu)值500ml的偏差,得出的46.48就是今天估算出的最優(yōu)值的偏差。就是這樣,卡爾曼濾波器就不斷的把 covariance遞歸,從而估算出最優(yōu)值。因為這個過程是一個不斷迭代的過程,每次都保留上次的方差,根據(jù)測量值不斷得到最優(yōu)值,所以可以做在線的預(yù)測任務(wù)。 如上圖所示:第一張是趨勢項,第二張是周期項,這兩張圖都是卡爾曼濾波后的結(jié)果,并且都有一個置信區(qū)間,表示最優(yōu)值的偏差范圍。第三張藍(lán)線是根據(jù)趨勢項和周期項求和得到的時間序列,黑線是測量值,在負(fù)荷預(yù)測中,指的是我們的負(fù)荷真實值??梢钥吹剑谶@個模型中,周期項不再是靜態(tài)的,而是動態(tài)變化的,這也就是這個模型相對prophet的一個優(yōu)勢。 除了趨勢項和周期項,這個模型還加入特征項,用一些關(guān)聯(lián)性的序列作為特征可以大幅提高算法的預(yù)測效果。 通過下圖中實際的真實值,可以看出,不同年份的春節(jié)時段的負(fù)荷規(guī)律驚人的相似,所以我們可以把去年的春節(jié)的時間序列作為特征項,加入到模型中,效果如何?請看下面分解。 現(xiàn)在我們可以通過我們實際的運(yùn)行結(jié)果來看一下在春節(jié)及春節(jié)后期這段時間的預(yù)測效果: 首先是老牌的ARIMA趨勢分解: 可以看出真實值的周期幅度逐漸變大,且較明顯,ARIMA對周期的擬合有一定的滯后性,所以其中一些值的準(zhǔn)確性還是存在一定的差距,表現(xiàn)的差強(qiáng)人意。 再來看下我們今天所介紹的貝葉斯時間序列模型: 第一個是:時間序列=趨勢項+周期項 第二個是:時間序列=趨勢項+周期項+特征項 通過這兩個可以發(fā)現(xiàn)這個較明顯的特質(zhì):跟ARIMA時間序列分解相比,第一個方法并沒有什么提升效果,也存在明顯的滯后性;在加上特征項之后,我們預(yù)測的負(fù)荷逐漸趨于實際負(fù)荷,使得整個時間段預(yù)測出的準(zhǔn)確度有了明顯的提升。讓我們看下最終的結(jié)果: 可以看出,不論春節(jié)時間,還是春節(jié)過后的這段時間,使用特征項的貝葉斯時間序列模型的準(zhǔn)確率都有很明顯的優(yōu)勢,這就是它的強(qiáng)大之處——把傳統(tǒng)的時間序列的預(yù)測方法和用特征回歸的方法結(jié)合起來,使得模型既能受近期數(shù)據(jù)的影響也能借鑒歷史的特征。 傳統(tǒng)的時間序列模型,都是在當(dāng)前序列值受臨近前n個序列值影響的思路下進(jìn)行建模,當(dāng)序列值是受不臨近序列值影響較大時,不能關(guān)聯(lián)到這種影響。雖然可以通過加入周期項彌補(bǔ)這一缺陷,例如上面的例子,如果加入年周期,也可以反映出遠(yuǎn)期的影響,但是這就要求我們有足夠多的周期長度的數(shù)據(jù)做支撐。 最重要的是,貝葉斯時間序列模型更加靈活,能夠加入其他類型的序列作為特征項,例如:該行業(yè)下的訂單量、銷售金額,這是傳統(tǒng)時間序列方法所不具有的。所以說,這個模型集成了傳統(tǒng)時間序列模型和特征回歸模型的特性,能夠更靈活的進(jìn)行建模,達(dá)到更好的預(yù)測效果。 本文版權(quán)歸“匯電云聯(lián)”所有,轉(zhuǎn)載請聯(lián)系作者。 |
|