1.問題提出
時間序列是一列關於時間的序列,例如股票數據,在每一個時刻對應一個觀察值或者多個觀察值。
像這樣:
time, measure
正如我們所知大多數機器學習使用監督學習來解決實際問題,如何把這時間序列轉換成我們所熟知的監督學習所適應的形式呢,然后用監督學習的方法來解決。
像這樣:
X, y
2.滑動窗口(sliding window)用於時間序列
該方法對時間進行重組,大致的意思是前一個時間序列的數值作為下一個時間序列數值的輸入,就像馬爾科夫定義一樣
當前時刻的狀況只受上一個時刻的狀態的影響。舉例子說明
time, measure
- 我們可以看到前一個時間值是輸入(X),下一個時間值是我們監督學習問題中的輸出(y)。
- 我們可以看到觀察之間的順序被保留,並且在使用該數據集訓練監督模型時必須繼續保留。
- 我們可以看到,我們沒有先前的值可用於預測序列中的第一個值。我們將刪除此行,因為我們無法使用它。
- 我們還可以看到,我們沒有已知的下一個值來預測序列中的最后一個值。我們也可能希望在訓練我們的監督模型時刪除此值。
3.具有多變量時間序列數據的滑動窗口
什么是多變量時間序列,就是每次觀察到兩個或多個變量的數據集。例如:
time, measure1, measure2
我們可以看到第一行和最后兩行不能用於訓練監督模型。
4.具有多步預測的滑動窗口
- 一步預測:這是預測下一個時間步(t + 1)的地方。
- 多步預測:這是預測兩個或更多未來時間步驟的位置。
考慮來自上面第一個滑動窗口示例的相同的單變量時間序列數據集:
time, measure
1, 100
2, 110
3, 108
4, 115
5, 120
我們可以將這個時間序列構建為一個兩步預測數據集,用於窗口寬度為1的監督學習,如下所示:
X1, y1, y2
? 100, 110
100, 110, 108
110, 108, 115
108, 115, 120
115, 120, ?
120, ?, ?
具體而言,監督模型僅使用X1來預測y1和y2。
5. 使用Python方法實現轉換
主要使用pandas中的shift()方法
from pandas import DataFrame df = DataFrame() df['t'] = [x for x in range(10)] print(df)
輸出結果是
t
from pandas import DataFrame df = DataFrame() df['t'] = [x for x in range(10)] df['t-1'] = df['t'].shift(1) print(df)
輸出結果
t t-1
from pandas import DataFrame df = DataFrame() df['t'] = [x for x in range(10)] df['t+1'] = df['t'].shift(-1) print(df)
t t+1
0 0 1.0
1 1 2.0
2 2 3.0
3 3 4.0
4 4 5.0
5 5 6.0
6 6 7.0
7 7 8.0
8 8 9.0
9 9 NaN
其實就是對t列進行有限步移動獲得t-1或者t+1列
更多知識:https://machinelearningmastery.com/convert-time-series-supervised-learning-problem-python/