5.1 LSTM Forecasting
時間序列預測的核心,是用過去一段時間的觀測值預測未來。本篇使用程式產生的週期加趨勢資料,示範如何把一條連續序列轉成 LSTM 可以訓練的 sliding window,並用 MAE、RMSE 與預測曲線檢查模型表現。
1. 學習目標
本篇聚焦單變量 forecasting 問題。例如用過去 24 小時的流量預測下一小時、用過去 30 天銷售量預測明天、或用過去一段感測器讀值預測下一個時間點。重點不是只會呼叫 LSTM,而是建立時間序列資料切分、標準化與評估的完整流程。
2. 資料格式長什麼樣子?
原始資料通常是一張依時間排序的表格:
| timestamp | value |
|---|---|
| 2026-01-01 00:00 | 10.2 |
| 2026-01-01 01:00 | 11.1 |
模型訓練前要轉成 (samples, timesteps, features)。若使用過去 24 個時間點預測下一個時間點,輸入 shape 就會是 (樣本數, 24, 1)。
3. 為什麼不能隨機切分?
時間序列有先後順序。如果把未來資料隨機混進訓練集,模型評估會過度樂觀。Forecasting 通常使用 chronological split:前段訓練、中段驗證、後段測試,確保模型只用過去資料學習。
4. 實作流程
Notebook 會建立一條包含 trend、seasonality 與 noise 的合成序列,接著:
- 用 sliding window 建立
X與y。 - 依時間順序切分 train、validation、test。
- 只用訓練集統計量做標準化。
- 建立 LSTM forecasting model。
- 用 MAE、RMSE 與實際/預測曲線評估。
5. 如何套用自己的資料?
換成自己的資料時,先確認時間欄位排序正確、頻率一致,並處理缺值或重複時間點。接著決定 WINDOW_SIZE,例如使用過去 24 小時、7 天或 30 筆觀測值。若有多個特徵,例如溫度、促銷、節日或設備狀態,輸入 shape 會變成 (samples, timesteps, features)。
6. 常見調整方向
若預測落後真實值,可以調整 window size、加入外生變數或增加模型容量。若 validation loss 明顯上升,則可能需要 EarlyStopping、Dropout 或更簡單的模型。若資料有強烈週期,window size 至少要涵蓋一個完整週期。
7. 小結
LSTM forecasting 的關鍵不只在模型,而是時間切分、sliding window 與標準化流程是否正確。只要資料格式整理清楚,後續可以把 LSTM 換成 GRU、1D CNN 或 Transformer 類模型比較。