時間序列預測作為監督學習


1.問題提出

時間序列是一列關於時間的序列,例如股票數據,在每一個時刻對應一個觀察值或者多個觀察值。

像這樣:

time, measure

1, 100
2, 110
3, 108
4, 115
5, 120

正如我們所知大多數機器學習使用監督學習來解決實際問題,如何把這時間序列轉換成我們所熟知的監督學習所適應的形式呢,然后用監督學習的方法來解決。

像這樣:

X, y

5, 0.9
4, 0.8
5, 1.0
3, 0.7
4, 0.9
對於這樣的數列無論是線性還是非線性我們很容易使用機器學習來找到映射函數。
Y = f(X)

2.滑動窗口(sliding window)用於時間序列

該方法對時間進行重組,大致的意思是前一個時間序列的數值作為下一個時間序列數值的輸入,就像馬爾科夫定義一樣

當前時刻的狀況只受上一個時刻的狀態的影響。舉例子說明

time, measure

1, 100
2, 110
3, 108
4, 115
5, 120
對於這樣一個時間序列使用滑動窗口方法重組后的結果是
X, y
?, 100
100, 110
110, 108
108, 115
115, 120
120, ?
可以觀察這條數列的一些規律
  • 我們可以看到前一個時間值是輸入(X),下一個時間值是我們監督學習問題中的輸出(y)。
  • 我們可以看到觀察之間的順序被保留,並且在使用該數據集訓練監督模型時必須繼續保留。
  • 我們可以看到,我們沒有先前的值可用於預測序列中的第一個值。我們將刪除此行,因為我們無法使用它。
  • 我們還可以看到,我們沒有已知的下一個值來預測序列中的最后一個值。我們也可能希望在訓練我們的監督模型時刪除此值。

3.具有多變量時間序列數據的滑動窗口

什么是多變量時間序列,就是每次觀察到兩個或多個變量的數據集。例如:

time, measure1, measure2

1, 0.2, 88
2, 0.5, 89
3, 0.7, 87
4, 0.4, 88
5, 1.0, 90
對於兩個變量時間序列,那么輸入變量也會變成兩個,例如:
X1, X2, X3, y
?, ?, 0.2 , 88
0.2, 88, 0.5, 89
0.5, 89, 0.7, 87
0.7, 87, 0.4, 88
0.4, 88, 1.0, 90
1.0, 90, ?, ?

我們可以看到第一行和最后兩行不能用於訓練監督模型。

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來預測y1y2

5. 使用Python方法實現轉換

主要使用pandas中的shift()方法

from pandas import DataFrame
df = DataFrame()
df['t'] = [x for x in range(10)]
print(df)

輸出結果是

   t

0  0
1  1
2  2
3  3
4  4
5  5
6  6
7  7
8  8
9  9
使用shift()方法
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  NaN
1  1  0.0
2  2  1.0
3  3  2.0
4  4  3.0
5  5  4.0
6  6  5.0
7  7  6.0
8  8  7.0
9  9  8.0
 
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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM