Data LMS

← Tất cả các tuần · Phase 5: Dự báo · khoảng 270 phút

Tuần 14: Dự báo chuỗi thời gian

Bản nháp, đang chờ duyệt nội dung

Sau tuần này bạn có thể:
Video tóm tắt Tuần 14 · Video · Tiếng Việt

Video sắp có.

Podcast Tuần 14 · Audio · Tiếng Việt

Audio tóm tắt tuần (NotebookLM) sắp có.

Dự báo doanh số, số khách, lượng hàng cần nhập là việc hằng ngày của nhiều phòng ban. Tuần này dùng AirPassengers: số hành khách đi máy bay quốc tế mỗi tháng (nghìn người) từ 1949 đến 1960, một chuỗi có cả trend và seasonality rõ.

Bài 14.1. Train bằng quá khứ, test bằng tương lai [7]

Với dữ liệu theo thời gian, không được chia train/test ngẫu nhiên. Nếu chia ngẫu nhiên, tháng 6/1960 có thể nằm trong train còn tháng 5/1960 trong test: model “nhìn thấy tương lai” để đoán quá khứ, nên điểm test đẹp hơn thực tế.

Cách đúng: chọn một mốc thời gian. Mọi thứ trước mốc là train, mọi thứ sau mốc là test. Đây cũng là cách model sẽ được dùng thật: chỉ biết quá khứ, phải đoán tương lai.

Ý chính bắt buộc: train bằng quá khứ, test bằng tương lai. Chia ngẫu nhiên với dữ liệu theo thời gian thì model “nhìn thấy tương lai”.

Bài 14.2. Ba baseline cho chuỗi thời gian [6]

Phương pháp Cách đoán Hợp khi
Naive Mọi tháng tương lai = tháng cuối cùng đã biết Chuỗi không có mùa vụ, thay đổi chậm
Seasonal naive Tháng tương lai = cùng tháng của năm gần nhất Chuỗi có mùa vụ rõ
Moving average Trung bình N tháng gần nhất Chuỗi nhiễu, cần làm mượt

Model phức tạp nào cũng phải thắng được ba cách này mới đáng dùng.

AirPassengers: naive, seasonal naive, moving average

Seasonal naive vẫn đoán thấp vì không tính đến trend tăng: năm sau luôn đông hơn năm trước.

Bài 14.3. Exponential smoothing [5]

Exponential smoothing (làm mượt hàm mũ) dự báo bằng trung bình có trọng số của quá khứ, trong đó dữ liệu gần đây có trọng số lớn hơn. Phiên bản Holt-Winters tách riêng ba phần: mức hiện tại, trend và seasonality, nên xử lý được chuỗi như AirPassengers. Bạn chỉ cần chạy code mẫu và đọc MAE.

Holt-Winters so với các baseline

Bài 14.4. Dự báo luôn có sai số [6]

Dự báo “tháng sau bán 1.000 đơn” gần như chắc chắn sai: câu hỏi chỉ là sai bao nhiêu. Người dùng dự báo (mua hàng, nhân sự, tài chính) cần biết khoảng để quyết định tồn kho an toàn, ngân sách dự phòng.

Một cách đơn giản để có khoảng: backtest. Giả vờ đứng ở quá khứ, dự báo giai đoạn đã biết đáp án, đo sai số, rồi dùng phân phối sai số đó để tạo khoảng cho dự báo mới.

Ý chính bắt buộc: luôn trình bày dự báo kèm khoảng, ví dụ “dự kiến 1.000 đơn, 80% khả năng trong khoảng 850–1.150”, không chỉ một con số.
Khoảng dự báo từ sai số backtest
Câu hỏi nhanh
1. Dữ liệu doanh số theo ngày 3 năm được chia train/test ngẫu nhiên 80/20. Vấn đề là gì?
2. Chuỗi có mùa vụ năm rõ rệt. Baseline nào hợp lý nhất?
3. Cách trình bày dự báo nào hữu ích nhất cho bộ phận mua hàng?

Luyện tập tình huống

Tình huống: chia ngẫu nhiên dữ liệu theo ngày

Bối cảnh. Một analyst xây model dự báo doanh số theo ngày từ dữ liệu 3 năm. Họ dùng train_test_split ngẫu nhiên 80/20 và báo cáo MAE test rất thấp. Model dùng các feature như doanh số của ngày hôm trước và ngày hôm sau.

Câu hỏi. Cách chia này có vấn đề gì? Nên làm lại thế nào?

Câu trả lời đã nộp sẽ được khoá lại, không sửa được.

Tình huống: 'tháng sau bán đúng 1.000 đơn'

Bối cảnh. Bộ phận kế hoạch nhận báo cáo dự báo: 'Tháng sau bán 1.000 đơn.' Bộ phận mua hàng đặt đúng 1.000 bộ nguyên liệu. Sai số dự báo trong backtest 12 tháng qua dao động từ −15% đến +15%.

Câu hỏi. Cách dùng dự báo này có vấn đề gì? Nên trình bày và dùng dự báo thế nào?

Câu trả lời đã nộp sẽ được khoá lại, không sửa được.

Tóm tắt tuần và chuẩn bị Checkpoint 5

Checkpoint 5 (cuối tuần này): phần A giải thích closed-book overfitting, baseline, chi phí FP/FN, train quá khứ test tương lai [7], data leakage, dự báo kèm khoảng [6]; phần B: Iris, precision/recall, Wine Quality, AirPassengers, đã có ở các ô code tuần 12–14; phần C 5 tình huống (gian lận 99%, churn 98%, chia ngẫu nhiên, bệnh và spam, 1.000 đơn). Đạt khi đủ ý chính, 100% assert pass, và đúng ≥ 4/5 tình huống. Xem Sổ tay Phase 5.