在高方差時段(如節假日和體育賽事等等)準確的預測交通量,對於異常檢測、資源分配、預算規劃和其餘相關的任務都是相當重要,這些任務有助於網約車大規模優化用戶體驗,然而,預測這些變量極具挑戰性,由於這種極端事件預測取決於天氣、城市人口增加和其餘致使預測不肯定性的外部因素。近幾年來,長短時間記憶網絡技術以其端到端建模,易於映入外生變量和自動特徵抽取的特色,成爲了一種流行的時間序列建模框架。LSTM方法利用多個維度的大量數據,能夠對複雜的非線性特徵相互做用進行建模,這對於預測極端事件是相當重要的。在Lingxue Zhu和Nikolay Laptev發表在IEEE的一篇論文Deep and Confident Prediction for Time Series at Uber中,介紹一種新的端到端貝葉斯神經網絡(BNN)結構,它能在大規模的狀況下更精準地預測時間序列結果和不肯定性預測。前端
首先,咱們用函數python
接下來就詳細介紹這三個方面。算法
模型不肯定性估計的關鍵就是後驗分佈 c#
接下來,咱們要經過BNN模型去解決潛在的模型錯誤識別的問題。咱們解決這一問題的方法是,在訓練數據集中去預測那些具備徹底不一樣模式的未知樣本時獲取的不肯定性,和經過訓練一個從時間序列中自動抽取表明性特徵編碼器來肯定這種不肯定性的來源。在測試時,每個樣本的編碼效果都將會有助於計算樣本集與訓練集之間的距離。計算它們之間距離的另外一種方式是,使用一個encoder-decoder框架爲全部訓練集的時間序列擬合出一個潛在的embedding空間。這樣,咱們就能夠在這個embedding空間來測量測試樣本和訓練樣本之間的距離。接下來,咱們須要解決的問題就是如何將這種錯誤識別和模型不肯定性結合起來。在這裏,咱們採用了一個方法是,將encoder-decoder網絡與一個預測網絡鏈接起來,在推理時將其是爲一個大網絡,算法如圖一所示:網絡
最後,咱們來估計一下固有的噪聲架構
該論文中的實驗結果,是以lstm網絡+全鏈接爲基礎產生的。該神經網絡的完整結構主要包括兩部分:(i)encoder-decoder框架,用於獲得時間序列中的自有關係,而且在預訓練期間就學習好(ii)預測網絡,他的輸入來自於encoder-decoder框架所學習到embedding層以及潛在的外部特性(如天氣事件等)。這個魯棒的體系結構以下圖三所示:app
這裏咱們從kaggle上找到數據集NYC Uber Pickups with Weather and Holidays,這個數據集有不少咱們須要的特徵,可是咱們仍是須要對其處理一下,把區域字段合併,將節假日字段改成0-1數字表示,合併出來的數據如圖四所示:框架
def series_to_supervised(data, n_in=1, n_out=1, dropnan=True):
n_vars = 1 if type(data) is list else data.shape[1]
df = pd.DataFrame(data)
cols, names = list(), list()
# input sequence (t-n, ... t-1)
for i in range(n_in, 0, -1):
cols.append(df.shift(i))
names += [('var%d(t-%d)' % (j+1, i)) for j in range(n_vars)]
# forecast sequence (t, t+1, ... t+n)
for i in range(0, n_out):
cols.append(df.shift(-i))
if i == 0:
names += [('var%d(t)' % (j+1)) for j in range(n_vars)]
else:
names += [('var%d(t+%d)' % (j+1, i)) for j in range(n_vars)]
# put it all together
agg = pd.concat(cols, axis=1)
agg.columns = names
# drop rows with NaN values
if dropnan:
agg.dropna(inplace=True)
return agg
複製代碼
給定一個時間序列 yii
encoder_inputs = Input(shape=(train_X.shape[1], train_X.shape[2]))
encoder_lstm1 = LSTM((128), return_state=True,return_sequences=True)
encoder_outputs1, state_h1, state_c1 = encoder_lstm1(encoder_inputs)
drop_out1 = Dropout(0.05)
encoder_lstm2 = LSTM((64), return_state=True,return_sequences=False)
encoder_outputs2, state_h2, state_c2 = encoder_lstm2(encoder_outputs1)
drop_out2 = Dropout(0.05)
external_features = Input(shape=(6,))
print(external_features)
dense1 = Dense(128,activation='tanh')
temp = Concatenate(axis=1)([state_c2,external_features])
dense1_output = dense1(temp)
drop_out3 = Dropout(0.05)
dense2 = Dense(64,activation='tanh')
dense2_output = dense2(dense1_output)
drop_out4 = Dropout(0.05)
dense3 = Dense(16,activation='tanh')
dense3_output = dense3(dense2_output)
drop_out5 = Dropout(0.05)
dense4 = Dense(1,activation='tanh')
dense4_output = dense4(dense3_output)
model = Model(inputs=[encoder_inputs,external_features], outputs=dense4_output)
model.compile(loss='mse', optimizer='adam')
## fit network
input_list = []
input_list.append(train_X)
input_list.append(temp_train)
history = model.fit(input_list, train_y, epochs=1000, batch_size=10, validation_data=([test_X,temp_test], test_y), verbose=2,shuffle=False)
複製代碼
咱們用LSTM模型和這個模型分別來預測咱們的數據,咱們使用前15024個小時的數據做爲咱們的訓練集合,剩下3024個小時的數據做爲咱們的驗證集,實驗結果如圖五(LSTM模型)和圖六(論文模型)下:機器學習
這篇文章展現了一種用於Uber不肯定性估計的端到端神經網絡結構。利用MC dropout和固有噪聲估計,給出了一種爲神經網絡預測提供不肯定性估計的簡單方法,它覆蓋率大部分的不肯定性因素。這個框架的一個關鍵特性在於它不用修改底層架構的狀況下適用於任何神經網絡。用這種提出的不肯定性估計方法來對特殊事件(如假日,體育賽事,天氣等等)的不肯定度進行了估計,提升了異常檢測的精度。對於一些高不肯定性事件中,咱們能夠對內部異常檢測模型的置信區間進行調整,準確度能相應的提高,這有時能夠爲實際運營帶來很大的提高。項目源碼地址:https://momodel.cn/explore/5d3fb3121afd943289223b91?&tab=1&type=app
論文:Deep and Confident Prediction for Time Series at Uber論文:Long short-term memory 博客:Engineering Uncertainty Estimation in Neural Networks for Time Series Prediction at Uber論文:Learning phrase representations using rnn encoder-decoder for statistical machine translation博客:深度學習如何估計模型不肯定性(epistemic uncertainty)
Mo(網址:momodel.cn)是一個支持 Python 的人工智能在線建模平臺,能幫助你快速開發、訓練並部署模型。
Mo 人工智能俱樂部 是由網站的研發與產品設計團隊發起、致力於下降人工智能開發與使用門檻的俱樂部。團隊具有大數據處理分析、可視化與數據建模經驗,已承擔多領域智能項目,具有從底層到前端的全線設計開發能力。主要研究方向爲大數據管理分析與人工智能技術,並以此來促進數據驅動的科學研究。
目前俱樂部每週六在杭州舉辦以機器學習爲主題的線下技術沙龍活動,不按期進行論文分享與學術交流。但願能匯聚來自各行各業對人工智能感興趣的朋友,不斷交流共同成長,推進人工智能民主化、應用普及化。