日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

DeepAR多重多元多步时间序列预测

發(fā)布時(shí)間:2023/12/20 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DeepAR多重多元多步时间序列预测 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、前情分析

在現(xiàn)實(shí)世界的預(yù)測問題中,試圖共同學(xué)習(xí)多個(gè)時(shí)間序列時(shí)經(jīng)常遇到的一個(gè)挑戰(zhàn)是,時(shí)間序列的數(shù)量級(jí)差異很大,而且數(shù)量級(jí)的分布具有很強(qiáng)的傾斜性。這個(gè)問題如圖1所示,圖中顯示了亞馬遜銷售的數(shù)百萬件商品的銷售速度(即平均每周銷售一件商品)的分布情況。分布在幾個(gè)數(shù)量級(jí)上,近似冪律。

據(jù)我們所知,這一發(fā)現(xiàn)是新的(盡管可能并不令人驚訝),并且對試圖從這些數(shù)據(jù)集學(xué)習(xí)全局模型的預(yù)測方法具有基本意義。由于該分布的無標(biāo)度特性,很難將數(shù)據(jù)集劃分為具有一定速度帶的時(shí)間序列子組,并為它們學(xué)習(xí)單獨(dú)的模型,因?yàn)槊總€(gè)速度子組都會(huì)有相似的偏態(tài)。此外,基于分組的正則化方案,比如Chapados[4]提出的方案,可能會(huì)失敗,因?yàn)槊總€(gè)分組的速度將有很大的不同。最后,這種偏態(tài)分布使得使用某些常用的標(biāo)準(zhǔn)化技術(shù),如輸入標(biāo)準(zhǔn)化或批標(biāo)準(zhǔn)化[14],效果較差。

這里說的是最常見的多序列預(yù)測問題,web traffic,rossman store forecasting等比賽以及電商的商品銷量預(yù)測的都是典型的多序列預(yù)測問題,不同商品的base level(時(shí)序數(shù)據(jù)四分量之一)差異很大,整體也呈現(xiàn)冪律分布,常規(guī)標(biāo)準(zhǔn)化處理無效,因?yàn)槌R?guī)的標(biāo)準(zhǔn)化基于全局的統(tǒng)計(jì)特征無法改變不同商品之間的相對大小關(guān)系,使得不同商品的base level差異仍舊很大,冷門商品的銷量和熱門商品的銷量相差成千上萬倍,這導(dǎo)致輸入數(shù)據(jù)的量綱差異極大(一般基本是做分組標(biāo)準(zhǔn)化),即不同的商品自己內(nèi)部做標(biāo)準(zhǔn)化,從而使得不同商品的序列數(shù)據(jù)具有可比性。

2、deepar模型說明部分

為了便于說明,這里我們以電商銷量預(yù)測的問題為例:


其中已有從時(shí)刻1~時(shí)刻t0 -1的商品的銷量數(shù)據(jù),

而Xi,1:T表示從時(shí)刻1到時(shí)刻T的所有的協(xié)變量

這里需要說明,我們假設(shè)[1, t0? 1]為已知銷量的時(shí)間區(qū)間,[t0, T]為我們需要預(yù)測的時(shí)間區(qū)間,而Xi,1:T是橫跨了[1, t0? 1]和[t0, T]兩個(gè)時(shí)間區(qū)間的,這意味著X 必然是 靜態(tài)特征(例如商品的大類,商品所在的省,城市或商品的歷史銷量的統(tǒng)計(jì)值)或者是可以推斷的動(dòng)態(tài)特征,time varying known features,例如月份,年份,隨著時(shí)間變化,但是他們未來的值是可以直接推算出來的,而銷量這種數(shù)據(jù)屬于不可推斷的動(dòng)態(tài)特征(同時(shí)也是標(biāo)簽),即time varying unknown features。

模型結(jié)構(gòu)圖如上,在理解上圖之前,需要了解兩個(gè)背景知識(shí):

1、時(shí)間序列預(yù)測中的自回歸模型:

時(shí)間序列預(yù)測中進(jìn)行自回歸式的預(yù)測本質(zhì)上是把多步預(yù)測轉(zhuǎn)化為多個(gè)遞歸式的單步預(yù)測,一個(gè)典型的例子就是基于RNN的seq2seq結(jié)構(gòu)。seq2seq的結(jié)構(gòu)有兩種形式:

簡單的seq2seq的結(jié)構(gòu)是無法使用預(yù)測的數(shù)據(jù)的特征,僅僅是將t時(shí)刻的隱層輸出作為decoder部分的共同輸入。


實(shí)際上上圖的seq2seq結(jié)構(gòu)才算是在做真正意義上的自回歸,t+1時(shí)刻的預(yù)測結(jié)果被用于幫助預(yù)測t+2時(shí)刻的結(jié)果,t+2時(shí)刻的預(yù)測結(jié)果被用于幫助預(yù)測t+3時(shí)刻的結(jié)果。

當(dāng)然,在這個(gè)過程中,外生變量是可以放進(jìn)來的,假設(shè)我們的encoder部分的輸入的序列數(shù)據(jù)是[5,4,3,2,1,0]對應(yīng)t-5到t,外生變量是[a5,b5,c5]…[a0,b0,c0],則encoder部分的輸入數(shù)據(jù)的形式就是[5,a5,b5,c5]…[0,a0,b0,c0],decoder部分的初始輸入是t時(shí)刻的特征即[0,a0,b0,c0],我們在decoder的t時(shí)刻部分產(chǎn)生了t+1時(shí)刻的預(yù)測 t+1_pred,然后我們將t+1_pred和t+1時(shí)刻的可推斷特征(例如城市,省份,店鋪,品類,月份,星期等)合并得到了[t+1_pred,a-1,b-1,c-1],作為t+2時(shí)刻的輸入特征幫助預(yù)測t+2,依次類推。

由于這種遞歸式的訓(xùn)練很容易產(chǎn)生誤差累積的問題,即如果t+1的預(yù)測誤差大,則后續(xù)的decoder都是在錯(cuò)誤的預(yù)測結(jié)果上繼續(xù)訓(xùn)練的,所以更常見的訓(xùn)練方式是使用teacher forcing:

decoder的時(shí)候直接使用真實(shí)的值幫助模型訓(xùn)練。

而常規(guī)的LSTM是直接做的向量輸出:


seq2seq式的encoder-decoder結(jié)構(gòu)相對于LSTM這樣單一的encoder的結(jié)構(gòu)有兩個(gè)好處:

  • 1、seq2seq可以支持不定長的輸入和輸出,而單一的encoder結(jié)構(gòu)只能支持不定長輸入無法支持不定長的輸出,因?yàn)閱我坏膃ncoder結(jié)構(gòu)最終是通過一個(gè)固定的dense層完成預(yù)測任務(wù)的,dense層的size是固定不變的;

  • 2、seq2seq的訓(xùn)練過程可以使用到未來的特征,當(dāng)然這些特征必須是可以推斷的(前面描述過過了),這可能可以幫助模型更好的學(xué)習(xí)。


即deepar中,encoder和decoder使用的是同一個(gè)RNN模型,這個(gè)RNN模型就是常規(guī)意義上的RNN模型,可以是單層的LSTM或多層的LSTM。

那么deepar的模型是怎么訓(xùn)練的?和使用teacher forcing的seq2seq一樣,deepar的訓(xùn)練和預(yù)測過程是不一樣的,基于teacher forcing訓(xùn)練策略的seq2seq訓(xùn)練的時(shí)候用到了真實(shí)的標(biāo)簽,但是預(yù)測的時(shí)候我們是沒有真實(shí)標(biāo)簽可用的,因此這類seq2seq預(yù)測的行為退化為了普通的recursive seq2seq:


在代碼實(shí)現(xiàn)上也比較麻煩,我們需要手動(dòng)寫decoder部分的循環(huán)(不知道有沒有什么方便的開源可以實(shí)現(xiàn)這個(gè)功能,沒有找過)


deepar的訓(xùn)練過程如上,其實(shí)去掉中間L的部分,deepar看起來就是一個(gè)LSTM,為了方便描述,中間部分暫時(shí)先不考慮,看一下deepar的輸入和輸出是什么


輸入部分:Xi,(t-1),即t-1時(shí)刻的外生變量,即可推斷的特征,比如前面說過的城市,省份,店鋪,品類,月份,星期等,Zi,(t-2),即t-2時(shí)刻的標(biāo)簽,比如商品的銷量(也就是我們想要預(yù)測的目標(biāo)),通過一個(gè)RNN cell得到 t-1時(shí)刻的表征,然后接一個(gè)dense(1)的層得到Zi,(t-2),依次類推。其中t-1,t和t+1都是我們需要預(yù)測的標(biāo)簽,和teacher forcing seq2seq一樣,訓(xùn)練的過程中,待預(yù)測的標(biāo)簽被放進(jìn)來用于模型訓(xùn)練了。

然后在預(yù)測階段:


和recursive seq2seq一樣,進(jìn)行迭代預(yù)測,這種預(yù)測方式可以預(yù)測無限長的序列,只不過當(dāng)預(yù)測的序列變長之后精度往往很差,這也是時(shí)序預(yù)測問題的一個(gè)挑戰(zhàn),長時(shí)序的預(yù)測如何保證精度的問題,和本文無關(guān),不廢話。

2、概率部分


當(dāng)然deepar沒這么簡單,deepar的設(shè)計(jì)本身不是針對點(diǎn)預(yù)測,而是針對概率預(yù)測的。主要問題在于,怎么用nn來對標(biāo)簽的概率分布直接進(jìn)行建模。

如果熟悉貝葉斯深度學(xué)習(xí),對這一套操作應(yīng)該會(huì)比較熟悉了:


總結(jié)一下,對于一個(gè)時(shí)序樣本來說,這個(gè)時(shí)序樣本包含了n個(gè)time step的時(shí)間切片,進(jìn)入了network(這個(gè)network是可以處理序列數(shù)據(jù)的網(wǎng)絡(luò)結(jié)構(gòu)例如LSTM,CNN,seq2seq的網(wǎng)絡(luò)機(jī)構(gòu)或者Transformer)處理之后,吐出了n個(gè)新的序列,然后這個(gè)序列分別接兩個(gè)dense層,兩個(gè)dence層的神經(jīng)元數(shù)量均為1,一個(gè)dense層用于擬合人為指定的高斯分布的u均值,一個(gè)用于擬合認(rèn)為指定的高斯分布的標(biāo)準(zhǔn)差sigma,然后為了避免sigma小于0,使用softplus,即log(1+e**x)來保證sigma大于0。這里的兩個(gè)dense層被封裝到一個(gè)layer,我們稱這個(gè)layer為gaussian layer,專門用于擬合高斯分布的特殊網(wǎng)絡(luò)層。

3、模型訓(xùn)練:

原文的實(shí)驗(yàn)設(shè)計(jì)有幾個(gè)地方需要注意:

第一:缺失值用0填充

第二:在nlp中,seq2seq使用teacher forcing有一個(gè)問題,就是模型訓(xùn)練和預(yù)測行為的不一致會(huì)導(dǎo)致模型的泛化性能下降,但是deepar的論文里提到他們沒有遇到這個(gè)問題。
第三:關(guān)于縮放的問題,考慮到模型的輸入是多個(gè)時(shí)間序列,這些時(shí)間序列的量級(jí)可能并不一樣,因此我們需要對它們做放縮,對于每一個(gè)時(shí)間序列i,都對應(yīng)有一個(gè)放縮因子(from 段易通:概率自回歸預(yù)測——DeepAR模型淺析)
可以看到,這里的處理其實(shí)就是每個(gè)時(shí)間序列做分組標(biāo)準(zhǔn)化,每個(gè)時(shí)序數(shù)據(jù)除以自己的均值,為了避免均值為0,所以對均值+1避免除0的問題。

原文中還提到了關(guān)于負(fù)二項(xiàng)似然的分布假設(shè),沒怎么用過,所以不想看了。。到時(shí)候有需要再看好了,問題不大。

第四:關(guān)于采樣的問題

這個(gè)工程技巧很有意思,原文中的意思是,我們對于銷量數(shù)據(jù)比較全,也就是比較熱門,上了比較久的商品的預(yù)測更看重,而對于冷門商品,銷量數(shù)據(jù)很少或者是新商品則其重要性相對低一些,所以選擇有權(quán)采樣的方式進(jìn)行采樣,關(guān)于時(shí)序數(shù)據(jù)的采樣,文中的意思是這樣的,比如假設(shè)我們的training window是100,prediction window是20,那么實(shí)際上每一次入模的樣本總的長度是120,正常的操作是我們要從某個(gè)商品的歷史數(shù)據(jù)中對數(shù)據(jù)進(jìn)行切分,比如某個(gè)商品的時(shí)序數(shù)據(jù)的長度一共是1000,則這個(gè)商品的序列數(shù)據(jù)可以拆分為多條樣本,按照文中加權(quán)采樣的意思,對于熱門的商品采樣的權(quán)重更大,即這種商品的序列數(shù)據(jù)會(huì)更頻繁的出現(xiàn)在訓(xùn)練數(shù)據(jù)中。

第五:特征工程

特征工程這塊兒就沒什么特別的,日期特征,一些靜態(tài)特征的處理之類的和常規(guī)的時(shí)序數(shù)據(jù)的特征工程沒有太大區(qū)別,最后都進(jìn)行了standardscaler標(biāo)準(zhǔn)化

第六:損失函數(shù)是啥?

我們前向傳播,將每一個(gè)樣本映射為了 u和sigma兩個(gè)值,那么怎么和實(shí)際的標(biāo)簽y關(guān)聯(lián)起來,顯然我們這個(gè)時(shí)候沒有辦法使用常規(guī)的用于回歸的loss,比如mae,mape,mse之類的,因?yàn)檫@類損失函數(shù)無法處理 u,sigma,y_true 三個(gè)輸入的關(guān)系。這塊兒的loss設(shè)計(jì)也非常直觀,我們高中的時(shí)候,高斯分布的均值和方差是有公式的,其推導(dǎo)過程如下

就是最大似然估計(jì),如果從nn的角度來看,我們就是希望能夠讓:


這個(gè)式子越小越好,那好辦,我們直接帶入這個(gè)公式就可以了,于是就有

最后,前向傳播和損失函數(shù)都已經(jīng)完事兒了,來看下模型是怎么預(yù)測的。

現(xiàn)在我們直接進(jìn)行predict一個(gè)樣本a1,得到的不是y1,而是y1所在的高斯分布的u和sigma(對于每一個(gè)y,其所在的高斯分布都是不同的,這一點(diǎn)非常重要,我們是認(rèn)為每一個(gè)觀測點(diǎn)服從的高斯分布都是不同的,(學(xué)完deepar,對貝葉斯統(tǒng)計(jì)和貝葉斯深度學(xué)習(xí)的理解會(huì)有一定的幫助),如果某個(gè)y的sigma很大,則這個(gè)y的預(yù)測的不確定性很高,我們可以很容易畫出不確定性的預(yù)測結(jié)果如下圖:

一般來說,我們得到了高斯分布的均值和方差,則直觀的思路是用高斯分布的期望值,


但是實(shí)際上,我們的所謂的高斯分布的估計(jì)都僅僅是建立在一個(gè)樣本上的而已,無論是訓(xùn)練還是預(yù)測都一樣,一個(gè)樣本就對應(yīng)一個(gè)mu和一個(gè)sigma,即一個(gè)樣本就對應(yīng)一個(gè)特定的基于該樣本的高斯分布,直接使用均值會(huì)一個(gè)問題:

這個(gè)均值不準(zhǔn),根據(jù)期望公式可以知道,高斯分布的期望的計(jì)算其實(shí)就是采樣一個(gè)x,計(jì)算這個(gè)x的概率密度,然后相乘,然后累加進(jìn)來,其實(shí)就是加權(quán)求和,因?yàn)閤的取值是無限的在正負(fù)無窮之間,所以通過積分公式來計(jì)算,但是實(shí)際上我們不必高斯分布的取值范圍里所有的點(diǎn),我們只需要使用置信度高的點(diǎn)就可以了,那么實(shí)現(xiàn)的方法也很簡單:


既然有了均值和方差,那么就從這個(gè)分布里隨機(jī)采樣出一些點(diǎn)直接做平均。這里的代碼設(shè)計(jì)是采樣300個(gè)點(diǎn)。實(shí)際使用的話,可以調(diào)整。

注意:
deepar的設(shè)計(jì)是非常靈活的,但是局限的地方在于,比如上面,我們優(yōu)化的是gaussian_loss,并不是直接優(yōu)化mape,rmse這類的損失函數(shù),所以相對來說,沒有辦法直接去優(yōu)化我們的業(yè)務(wù)指標(biāo)。除此 之外,如果假定的其它分布,則最終的輸出層需要做修改,比如possion分布,tweetie 分布,需要實(shí)現(xiàn)了解這些分布的參數(shù),然后相應(yīng)地去設(shè)計(jì)輸出層。

總結(jié)

以上是生活随笔為你收集整理的DeepAR多重多元多步时间序列预测的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。