App: dự báo chuỗi với RNN và LSTM
Xây app dự báo chuỗi thời gian: baseline trung bình trượt, RNN tự viết với BPTT, LSTM cổng, so RMSE và vẽ dự báo nhiều bước.
Chuyên giaThuật toán ~120 phút
Ôn lại trước khi học
Giới thiệu
Bài này xây app dự báo như giá điện ngày mai. Dùng quá khứ 30 ngày để đoán ngày tiếp theo.
Kiến thức cần nhớ
Cửa sổ trượt và baseline
- Cắt chuỗi thành cửa sổ input 30 bước đoán bước 31.
- Baseline naive lặp giá trị cuối, trung bình trượt lấy trung bình.
- Model học sâu phải vượt baseline mới tính là giỏi.
- Ví dụ đời thường: đoán mai nắng vì 3 hôm nay đều nắng.
RNN và BPTT
- RNN lan truyền theo từng bước thời gian, nhớ quá khứ ngắn.
- BPTT là lan truyền ngược trải ra theo thời gian.
- Clip gradient để khỏi nổ số khi learning rate lớn.
- Chia train test theo thời gian, cấm shuffle kẻo rò tương lai.
LSTM giữ nhớ dài
- LSTM thêm cell state và 3 cổng quên, vào, ra.
- Cổng giữ gradient chảy xa nên nhớ phụ thuộc dài.
- Dự báo nhiều bước kiểu đệ quy: lấy output làm input tiếp.
- Chuỗi mùa vụ mạnh thì baseline mùa vụ đã rất khó vượt.
Ví dụ
- Input: chuỗi điện 1000 điểm, RNN dự báo 1 bước. Output: RMSE thấp hơn trung bình trượt 10%.
- Giải thích: RNN bắt được quán tính ngắn hạn của chuỗi.
- Input: dự báo 7 bước tiếp theo. Output: LSTM vượt RNN rõ rệt.
- Giải thích: phụ thuộc dài cần cell state của LSTM mới giữ được.
💻 Bài tập
Ngôn ngữ: Python 3 với PyTorch. Dùng code ngày 100, 101. Nộp vào day-141-forecast/.
Bài 1: Dữ liệu và baseline
Dữ liệu: điện tiêu thụ theo giờ, nhiệt độ theo ngày, hoặc số lượt truy cập website (dữ liệu công khai).
- Chia theo thời gian 70/15/15, không xáo trộn. Chuẩn hóa bằng thống kê của train.
- Cửa sổ 30 bước đoán bước 31.
- 3 baseline: naive (bằng giá trị cuối), trung bình trượt 7, seasonal naive (bằng giá trị cùng giờ hôm trước).
In MAE, RMSE, MAPE trên test cho 3 baseline.
Bài 2: RNN và LSTM
| Mô hình | Cấu hình |
|---|---|
| RNN | 1 tầng, hidden 64, clip gradient 1.0 |
| LSTM | 1 tầng, hidden 64 |
| LSTM + đặc trưng lịch | Thêm giờ trong ngày, thứ trong tuần (mã hóa sin/cos) |
Dừng sớm theo validation. In bảng metric so với baseline. Mô hình phải thắng seasonal naive mới tính là có ích.
Bài 3: Dự báo nhiều bước (nâng cao)
- Đệ quy: dự báo 1 bước, đưa kết quả vào làm input, lặp 24 bước.
- Trực tiếp: mô hình xuất 24 giá trị một lúc.
- Vẽ MAE theo độ xa dự báo (bước 1 tới 24) cho 2 cách.
- Vẽ 3 tuần cuối test: giá trị thật, dự báo 1 bước, dự báo 24 bước.
✅ Tiêu chí hoàn thành
- Không rò rỉ: chuẩn hóa chỉ dùng train, không xáo trộn theo thời gian.
- Bảng metric 3 baseline và 3 mô hình.
- Hình MAE theo độ xa cho 2 cách dự báo nhiều bước.
- Nhận xét khi nào mô hình học sâu không đáng dùng.
❓ Câu hỏi ôn tập
- Cửa sổ trượt biến chuỗi thành bài toán gì?
- BPTT khác backprop thường ở điểm gì?
- 3 cổng LSTM mỗi cổng giữ việc gì?
- Vì sao chia chuỗi phải theo thời gian?
🌕 Bạn đã hoàn thành ngày 141. Làm hết bài tập phía trên rồi sang ngày tiếp theo.