DS & AI

[DS & AI Blog #40] Khoa Học Dự Báo Chuỗi Thời Gian (Time-Series Forecasting): Từ ARIMA, Prophet Đến Deep Learning (TFT, PatchTST) & Dự Báo Xác Suất

1 views
[DS & AI Blog #40] Khoa Học Dự Báo Chuỗi Thời Gian (Time-Series Forecasting): Từ ARIMA, Prophet Đến Deep Learning (TFT, PatchTST) & Dự Báo Xác Suất

1. Bối cảnh thực tế (Context & Problem Statement)

Dự báo tương lai dựa trên dữ liệu quá khứ (Time-Series Forecasting) là mạch máu của các quyết định kinh doanh chiến lược:

  • Bán lẻ & Thương mại điện tử (Shopee, Amazon, Walmart): Dự báo nhu cầu mua sắm (Demand Forecasting) của hàng triệu mặt hàng (SKUs) để tối ưu hóa tồn kho, giảm 20%20\% chi phí lưu kho và tránh tình trạng hết hàng (Out-of-Stock).
  • Vận tải & Giao nhận (Grab, Uber): Dự báo số lượng cuốc xe đặt trước trong từng khung giờ để điều phối đội ngũ tài xế.
  • Hạ tầng đám mây (Cloud Infrastructure): Dự báo mức tải CPU/RAM để kích hoạt Auto-scaling trước khi hệ thống bị nghẽn.

Tại sao dự báo chuỗi thời gian lại cực kỳ khó?

  1. Vi phạm giả định I.I.D: Dữ liệu chuỗi thời gian không độc lập và không cùng phân phối (Tự tương quan cao - Autocorrelation: giá trị hôm nay phụ thuộc chặt chẽ vào ngày hôm qua).
  2. Xu hướng và Tính mùa vụ đa tầng (Multi-Seasonality): Dữ liệu vừa có chu kỳ theo ngày (24 giờ), theo tuần (thứ Bảy/Chủ Nhật cao điểm), vừa có chu kỳ theo năm và các ngày lễ biến động (Tết Nguyên Đán).
  3. Cạm bẫy rò rỉ dữ liệu tương lai (Look-ahead Bias): Rất dễ vô tình dùng dữ liệu của ngày mai để chuẩn hóa cho ngày hôm nay, tạo ra độ chính xác ảo trên tập Train nhưng sụp đổ hoàn toàn trên Production.

2. Các Khái Niệm & Cơ Chế Cốt Lõi

2.1. Phân Rã Chuỗi Thời Gian (Classical Time-Series Decomposition)

Mọi chuỗi thời gian YtY_t đều có thể phân rã thành 3 thành phần cơ bản: Yt=Trend (Tt)+Seasonality (St)+Residual / Noise (Rt)(Moˆ hıˋnh Cộng - Additive)Y_t = \text{Trend } (T_t) + \text{Seasonality } (S_t) + \text{Residual / Noise } (R_t) \quad \text{(Mô hình Cộng - Additive)} Yt=Tt×St×Rt(Moˆ hıˋnh Nhaˆn - Multiplicative, khi bieˆn độ muˋa ta˘ng theo xu hướng)Y_t = T_t \times S_t \times R_t \quad \text{(Mô hình Nhân - Multiplicative, khi biên độ mùa tăng theo xu hướng)}


2.2. Tính Dừng (Stationarity) & Kiểm Định ADF (Augmented Dickey-Fuller)

Một chuỗi thời gian được gọi là Dừng (Stationary) khi các đặc trưng thống kê của nó không đổi theo thời gian:

  1. Giá trị trung bình không đổi: E[Yt]=μ,∀t\mathbb{E}[Y_t] = \mu, \forall t.
  2. Phương sai không đổi: Var(Yt)=σ2,∀t\text{Var}(Y_t) = \sigma^2, \forall t.
  3. Tự hiệp phương sai giữa 2 thời điểm chỉ phụ thuộc vào khoảng cách thời gian (Lag kk), không phụ thuộc vào mốc thời gian thực tế: Cov(Yt,Yt−k)=γk\text{Cov}(Y_t, Y_{t-k}) = \gamma_k.
  • Kiểm định ADF Test (Hypothesis Testing):
    • H0H_0: Chuỗi có chứa nghiệm đơn vị (Unit Root) →\rightarrow Chuỗi không dừng (Non-stationary).
    • H1H_1: Chuỗi là Dừng (Stationary).
    • Quy tắc: Nếu p-value<0.05→p\text{-value} < 0.05 \rightarrow Bác bỏ H0H_0, chuỗi đã đạt trạng thái dừng và sẵn sàng đưa vào các mô hình thống kê.
  • Kỹ thuật Sai phân (Differencing): Lấy ΔYt=Yt−Yt−1\Delta Y_t = Y_t - Y_{t-1} để triệt tiêu xu hướng; lấy ΔsYt=Yt−Yt−s\Delta_s Y_t = Y_t - Y_{t-s} để triệt tiêu tính mùa vụ chu kỳ ss.

2.3. Mô Hình Thống Kê Cổ Điển: SARIMAX

SARIMAX(p,d,q)×(P,D,Q)s\text{SARIMAX}(p, d, q) \times (P, D, Q)_s

  • d,Dd, D: Bậc sai phân thường và sai phân mùa vụ (để biến chuỗi về trạng thái dừng).
  • p,Pp, P: Bậc tự hồi quy (AR - Autoregressive): Sử dụng pp giá trị quá khứ để dự đoán tương lai.
  • q,Qq, Q: Bậc trung bình trượt (MA - Moving Average): Sử dụng qq sai số dự báo trong quá khứ để bù trừ sai lệch.
  • ss: Độ dài chu kỳ mùa vụ (ví dụ: s=7s = 7 cho chu kỳ tuần, s=12s = 12 cho chu kỳ tháng).
  • Đọc đồ thị ACF (Autocorrelation) và PACF (Partial Autocorrelation):
    • PACF cắt đứt đột ngột sau Lag pp: Chỉ định bậc AR(pp).
    • ACF cắt đứt đột ngột sau Lag qq: Chỉ định bậc MA(qq).
ACF:  Giảm dần theo hàm mũ / hình sin  --->  Gợi ý mô hình thuần AR
PACF: Cắt cụt sau Lag p                 --->  Chọn bậc p = giá trị Lag cắt đứt

2.4. Meta Prophet: Đột Phá Phân Rã Đa Thành Phần (Taylor & Letham)

Được phát triển bởi Meta, Prophet tiếp cận theo mô hình hồi quy cộng tính có thể phân rã trực quan: y(t)=g(t)+s(t)+h(t)+ϵty(t) = g(t) + s(t) + h(t) + \epsilon_t

  1. g(t)g(t) - Xu hướng (Trend): Mô hình hóa bằng hàm phi tuyến Logistic Growth hoặc Piecewise Linear (Đường gấp khúc có các điểm gãy thay đổi xu hướng - Changepoints). Tự động đặt phân phối chuẩn tiên nghiệm Laplace để chọn lọc các changepoint quan trọng.
  2. s(t)s(t) - Mùa vụ (Seasonality): Sử dụng chuỗi Fourier Series để mô hình hóa các chu kỳ mùa phức tạp (theo ngày, tuần, năm): s(t)=∑n=1N(ancos⁡(2πntP)+bnsin⁡(2πntP))s(t) = \sum_{n=1}^{N} \left( a_n \cos\left(\frac{2\pi n t}{P}\right) + b_n \sin\left(\frac{2\pi n t}{P}\right) \right)
  3. h(t)h(t) - Ngày lễ & Sự kiện (Holidays): Cho phép đưa vào danh sách các ngày đặc thù (Black Friday, Tết Nguyên Đán, Siêu sale 11.11) kèm cửa sổ ảnh hưởng trước/sau sự kiện.

2.5. Deep Learning Hiện Đại: Temporal Fusion Transformer (TFT) & PatchTST

Khi dự báo hàng nghìn chuỗi thời gian cùng lúc có mối tương quan chéo (ví dụ: doanh số của 10,000 cửa hàng):

  1. Temporal Fusion Transformer (TFT - Google/Oxford):
    • Kết hợp mạng LSTM để mã hóa tính tuần tự cục bộ và cơ chế Multi-Head Self-Attention để nắm bắt phụ thuộc dài hạn.
    • Sử dụng mạng GRN (Gated Residual Networks) để tự động loại bỏ các biến đầu vào không liên quan.
    • Khả năng giải thích vượt trội (Interpretability): Cho phép trích xuất trọng số Attention để trả lời: "Vào ngày mai, quyết định dự báo chịu ảnh hưởng bởi biến số khuyến mãi hay biến số thời tiết?"
  2. PatchTST (Patch Time Series Transformer - ICLR 2023):
    • Không đưa từng điểm thời gian đơn lẻ vào Transformer (dễ bị nhiễu).
    • Gom dữ liệu thành các Mảnh thời gian (Patches) nhỏ liền kề (tương tự Vision Transformer cắt ảnh).
    • →\rightarrow Giảm độ phức tạp tính toán từ O(L2)O(L^2) xuống O((L/P)2)O((L/P)^2), cho phép xử lý chuỗi lịch sử dài hàng nghìn bước với độ chính xác vượt trội hơn hẳn các mô hình cũ!

2.6. Thước Đo Sai Số & Dự Báo Xác Suất (Probabilistic Forecasting)

  • MAPE (Mean Absolute Percentage Error): MAPE=100%n∑∣y−y^y∣\text{MAPE} = \frac{100\%}{n} \sum \left|\frac{y - \hat{y}}{y}\right|.
    ⚠️ Cạm bẫy chí mạng: Khi giá trị thực tế y=0y = 0 (mặt hàng không bán được cái nào), MAPE bị chia cho 0 và bùng nổ tới vô cùng (NaN/Inf\text{NaN} / \text{Inf})!
  • WAPE (Weighted Absolute Percentage Error - Chuẩn mực công nghiệp): WAPE=∑t=1n∣yt−y^t∣∑t=1nyt\text{WAPE} = \frac{\sum_{t=1}^{n} |y_t - \hat{y}_t|}{\sum_{t=1}^{n} y_t} (Không bao giờ bị lỗi chia cho 0, phản ánh chính xác sai số theo quy mô tổng doanh thu).
  • Dự báo khoảng tin cậy với Pinball Loss (Quantile Loss): Trong chuỗi cung ứng, dự báo một con số duy nhất là chưa đủ. Doanh nghiệp cần biết:
    • P10P10 (Dự báo kịch bản xấu nhất: chỉ bán được 50 cái →\rightarrow Tránh nhập thừa).
    • P50P50 (Kịch bản trung bình: bán 100 cái).
    • P90P90 (Kịch bản cao điểm: bán được 180 cái →\rightarrow Chuẩn bị an toàn chống đứt hàng).

3. Các Bảng Markdown So Sánh Chi Tiết

📊 Bảng 1: So Sánh Toàn Diện Các Phương Pháp Dự Báo Chuỗi Thời Gian

Tiêu chíMô hình Thống kê (ARIMA/SARIMAX)Meta ProphetMachine Learning (LightGBM / XGBoost)Deep Learning (TFT / PatchTST)
Quy mô chuỗi xử lýĐơn biến (Từng chuỗi độc lập)Đơn biến (Từng chuỗi độc lập)Xử lý đồng thời hàng triệu chuỗi (Global Model)Xử lý đồng thời hàng triệu chuỗi (Global Model)
Tính đa mùa vụ (Multi-seasonality)Kém (Chỉ tối ưu 1 chu kỳ ss)Xuất sắc (Nhờ Fourier Series)Rất tốt (Qua Feature Engineering)Xuất sắc (Học tự động qua Attention)
Yêu cầu dữ liệu đầy đủKhắt khe (Không được khuyết thiếu thời gian)Rất linh hoạt (Chấp nhận khuyết dữ liệu/Outliers)Linh hoạtLinh hoạt
Biến giải thích bên ngoài (Exogenous)Hạn chế (Tuyến tính)Tốt (Thêm cột regressor)Cực mạnh (Nhận hàng trăm thuộc tính)Cực mạnh (Phân biệt biến tĩnh/quá khứ/tương lai)
Tốc độ huấn luyệnRất nhanh cho 1 chuỗiNhanhCực nhanhChậm (Cần huấn luyện trên GPU)
Khả năng dự báo xác suất (Quantiles)Có (dựa trên phân phối chuẩn)Có (qua MCMC hoặc MAP)Có (dùng Quantile Objective)Hỗ trợ tự nhiên (Multi-horizon Quantiles)
Trường hợp sử dụng tối ưuKinh tế vĩ mô, Số liệu tài chính tổng hợpKế hoạch kinh doanh, Doanh thu cấp công ty có ngày lễDự báo nhu cầu bán lẻ quy mô lớn ( hàng triệu SKUs)Dự báo đa bước phức tạp: Năng lượng, Giao thông, Chuỗi cung ứng lớn

📊 Bảng 2: So Sánh Các Thước Đo Đánh Giá Sai Số Dự Báo (Forecasting Metrics)

Thước đoCông thức tínhƯu điểm cốt lõiNhược điểm / Cạm bẫyThích hợp cho
MAE1n∑∥y−y^∥\frac{1}{n} \sum \|y - \hat{y}\|Cùng đơn vị đo với dữ liệu, không phạt quá nặng outlierKhông phản ánh được quy mô sai số tương đốiĐánh giá sai số số lượng sản phẩm tuyệt đối
RMSE1n∑(y−y^)2\sqrt{\frac{1}{n} \sum (y - \hat{y})^2}Phạt rất nặng các sai số lớn (Penalize large errors)Bị chi phối mạnh bởi các điểm dị biệt (Outliers)Khi một sai số lớn gây thiệt hại nặng nề cho vận hành
MAPE100%n∑∥y−y^y∥\frac{100\%}{n} \sum \|\frac{y - \hat{y}}{y}\|Đơn vị phần trăm, dễ giải thích cho kinh doanhLỗi chia cho 0 khi y=0y=0, phạt bất đối xứng khi y^>y\hat{y} > yDữ liệu luôn có giá trị lớn bản chất (Doanh thu >0>0)
WAPE∑∥y−y^∥∑y\frac{\sum \|y - \hat{y}\|}{\sum y}An toàn khi dữ liệu có nhiều số 0 (Intermittent Demand)Bị ảnh hưởng nếu tổng doanh số ∑y\sum y quá nhỏChuẩn mực đánh giá Demand Forecasting bán lẻ
Pinball Lossmax⁡(q(y−y^),(1−q)(y^−y))\max(q(y - \hat{y}), (1-q)(\hat{y} - y))Đo lường độ chính xác của khoảng phân vị xác suất qqKhó giải thích cho người không có chuyên môn thống kêĐánh giá rủi ro tài chính, Kịch bản tồn kho an toàn

📊 Bảng 3: So Sánh Các Chiến Lược Phân Chia Dữ Liệu Kiểm Thử (Cross-Validation)

Chiến lượcCơ chế thực hiệnNguy cơ rò rỉ dữ liệu (Data Leakage)Mức độ kiểm chứng tính ổn định
K-Fold Ngẫu Nhiên (Tránh)Xáo trộn ngẫu nhiên toàn bộ mốc thời gianCỰC KỲ NGUY HIỂM (Dùng tương lai đoán quá khứ)Hoàn toàn vô giá trị
Expanding Window (Cửa sổ mở rộng)Tập Train dài dần ra: [0,T1]→[0,T2]→[0,T3][0, T_1] \rightarrow [0, T_2] \rightarrow [0, T_3]Bằng 0 (Hoàn toàn an toàn)Rất tốt cho hệ thống có lịch sử dài tăng dần
Rolling / Sliding Window (Cửa sổ trượt)Tập Train có độ dài cố định trượt dần theo thời gianBằng 0 (Hoàn toàn an toàn)Tối ưu nhất khi môi trường kinh doanh có sự thay đổi xu hướng gần

4. Best Practices & Kỹ Thuật Dự Báo Bán Lẻ Thực Chiến (Pro-Tips)

💡 Kỹ nghệ đặc trưng (Feature Engineering) cho Mô hình ML (LightGBM/XGBoost)

Để biến bài toán chuỗi thời gian thành bài toán học máy dạng bảng:

import pandas as pd

def create_time_series_features(df: pd.DataFrame, target_col: str) -> pd.DataFrame:
    # 1. Thuộc tính Lịch và Chu kỳ (Calendar & Cyclical):
    df['dayofweek'] = df['date'].dt.dayofweek
    df['month'] = df['date'].dt.month
    df['is_weekend'] = df['dayofweek'].isin([5, 6]).astype(int)
    
    # 2. Đặc trưng Độ trễ (Lag Features - Bắt buộc chỉ lấy quá khứ):
    df['lag_7'] = df[target_col].shift(7)    # Doanh số cùng ngày tuần trước
    df['lag_14'] = df[target_col].shift(14)
    df['lag_28'] = df[target_col].shift(28)  # Doanh số cùng ngày 4 tuần trước
    
    # 3. Đặc trưng Cửa sổ trượt (Rolling Window Statistics):
    # Dùng shift(1) để đảm bảo KHÔNG rò rỉ giá trị của chính ngày hôm nay:
    df['rolling_mean_7'] = df[target_col].shift(1).rolling(window=7).mean()
    df['rolling_std_7'] = df[target_col].shift(1).rolling(window=7).std()
    df['rolling_mean_28'] = df[target_col].shift(1).rolling(window=28).mean()
    
    return df

💡 Xử Lý Nhu Cầu Gián Đoạn (Intermittent / Lumpy Demand)

  • Vấn đề: Các mặt hàng phụ tùng thay thế hoặc đồ xa xỉ có chuỗi dữ liệu: 0, 0, 0, 0, 15, 0, 0, 0, 20 (đa số ngày bán được 0 chiếc).
  • Giải pháp: Áp dụng phương pháp Croston's Method hoặc phân tách bài toán làm 2 bước (Two-Stage Model):
    1. Bước 1 (Classification): Dự đoán xác suất hôm nay có đơn hàng hay không (P(Order>0)P(\text{Order} > 0)).
    2. Bước 2 (Regression): Nếu có đơn hàng, dự đoán số lượng bán được là bao nhiêu.

5. Góc Ôn Luyện Phỏng Vấn (Interview Corner)

❓ Câu hỏi 1: Tính dừng (Stationarity) là gì? Tại sao các mô hình thống kê như ARIMA bắt buộc dữ liệu phải đạt trạng thái dừng? Làm thế nào để kiểm tra và biến đổi một chuỗi không dừng thành chuỗi dừng?

  • Gợi ý trả lời:
    • Định nghĩa tính dừng: Một chuỗi thời gian được gọi là dừng yếu (Weakly Stationary) khi giá trị trung bình (μ\mu), phương sai (σ2\sigma^2) không thay đổi theo thời gian và hàm tự hiệp phương sai giữa 2 thời điểm chỉ phụ thuộc vào độ trễ (Lag kk).
    • Tại sao ARIMA bắt buộc chuỗi phải dừng:
      • Nếu chuỗi có xu hướng tăng dần (Non-stationary mean), giá trị trung bình ở tương lai sẽ luôn cao hơn quá khứ →\rightarrow Mô hình không thể dùng các tham số tĩnh học được trong quá khứ để tổng quát hóa cho tương lai.
      • Đảm bảo các thuộc tính thống kê ổn định để việc ước lượng các hệ số tự hồi quy (AR) và trung bình trượt (MA) hội tụ và không bị hiện tượng tương quan giả (Spurious Correlation).
    • Cách kiểm tra & Biến đổi trong thực tế:
      1. Kiểm tra: Quan sát biểu đồ đường (Visual plot) và chạy kiểm định Augmented Dickey-Fuller (ADF) Test. Nếu p-value≥0.05→p\text{-value} \ge 0.05 \rightarrow Chuỗi không dừng.
      2. Biến đổi:
        • Nếu phương sai tăng dần theo thời gian: Áp dụng phép biến đổi Log Transform (ln⁡(Y)\ln(Y)) hoặc Box-Cox.
        • Nếu có xu hướng tăng/giảm tuyến tính: Lấy Sai phân bậc 1 (First-order Differencing: ΔYt=Yt−Yt−1\Delta Y_t = Y_t - Y_{t-1}).
        • Nếu có chu kỳ mùa: Lấy Sai phân mùa vụ (Seasonal Differencing: ΔsYt=Yt−Yt−s\Delta_s Y_t = Y_t - Y_{t-s}).

❓ Câu hỏi 2: So sánh ưu nhược điểm của MAPE và WAPE. Trong bài toán Dự báo nhu cầu bán lẻ (Demand Forecasting) cho một chuỗi siêu thị có 50,000 mặt hàng, tại sao bạn không nên dùng MAPE làm chỉ số KPI chính?

  • Gợi ý trả lời:
    • Hạn chế nghiêm trọng của MAPE trong bán lẻ:
      1. Vấn đề chia cho 0 (Zero-Demand): Trong 50,000 mặt hàng, có hàng chục nghìn mặt hàng chậm luân chuyển sẽ có những ngày doanh số thực tế bằng 0 (yt=0y_t = 0). Phép tính ∣0−y^∣0\frac{|0 - \hat{y}|}{0} sẽ gây ra lỗi ZeroDivisionError hoặc khiến MAPE tiến tới vô cùng.
      2. Xử phạt bất đối xứng (Asymmetric Penalty): MAPE phạt rất nặng các trường hợp dự báo thừa (Over-forecasting) nhưng lại nương tay với dự báo thiếu (Under-forecasting):
        • Thực tế bán 1010, đoán 20→APE=∣10−20∣10=100%20 \rightarrow \text{APE} = \frac{|10 - 20|}{10} = 100\%.
        • Thực tế bán 2020, đoán 10→APE=∣20−10∣20=50%10 \rightarrow \text{APE} = \frac{|20 - 10|}{20} = 50\%.
    • Lý do WAPE là chuẩn mực tối ưu:
      • WAPE=∑∣y−y^∣∑y\text{WAPE} = \frac{\sum |y - \hat{y}|}{\sum y}. WAPE tính tổng sai số tuyệt đối của toàn bộ danh mục rồi mới chia cho tổng doanh số thực tế.
      • Mẫu số là tổng doanh thu của cả siêu thị nên không bao giờ bằng 0.
      • Tự động gán trọng số lớn hơn cho các mặt hàng chủ lực mang lại doanh thu cao (Hero Products) và không bị làm méo mó bởi các mặt hàng nhỏ lẻ bán được 1–2 cái.

❓ Câu hỏi 3: Khi thiết kế hệ thống Machine Learning để dự báo doanh số cho 30 ngày tiếp theo (Multi-step Ahead Forecasting), bạn sẽ lựa chọn chiến lược Recursive Forecasting hay Direct Forecasting? Nêu ưu nhược điểm của từng chiến lược.

  • Gợi ý trả lời:
    • 1. Recursive Forecasting (Dự báo đệ quy / Tự hồi quy):
      • Huấn luyện 1 mô hình duy nhất dự đoán ngày tiếp theo (t+1t+1).
      • Để dự đoán ngày t+2t+2: Sử dụng giá trị dự đoán của ngày t+1t+1 làm biến đầu vào giả định. Lặp lại quá trình cho đến ngày t+30t+30.
      • Ưu điểm: Rất nhẹ, chỉ cần duy trì và bảo trì 1 mô hình duy nhất.
      • Nhược điểm: Lan truyền và phóng đại sai số (Compounding Error): Nếu dự đoán ở ngày 1 bị sai lệch một chút, sai số này sẽ tích lũy và bùng nổ theo cấp số nhân ở các ngày 20–30.
    • 2. Direct Forecasting (Dự báo trực tiếp):
      • Huấn luyện 30 mô hình độc lập: Mô hình 1 chuyên đoán ngày t+1t+1, Mô hình 2 chuyên đoán ngày t+2t+2 ... Mô hình 30 chuyên đoán ngày t+30t+30.
      • Ưu điểm: Không bị lan truyền sai số, mỗi mô hình tự tối ưu hóa các đặc trưng phù hợp cho độ trễ thời gian riêng của nó.
      • Nhược điểm: Tốn chi phí tính toán và bảo trì gấp 30 lần (phải train, theo dõi drift và deploy 30 model riêng biệt).
    • 3. Giải pháp hiện đại (Multi-Horizon Joint Output): Sử dụng các kiến trúc Deep Learning như Temporal Fusion Transformer (TFT) có khả năng nhận đầu vào một lần và xuất trực tiếp toàn bộ vector dự đoán cho cả 30 ngày cùng lúc qua một hàm mất mát chung, kết hợp ưu điểm của cả hai phương pháp.

6. Tóm Tắt Ghi Nhớ Nhanh (Key Takeaways)

  1. Dữ liệu Time-Series bắt buộc phải chuyển về trạng thái Dừng (Stationary) trước khi áp dụng các mô hình thống kê cổ điển (ARIMA/SARIMAX).
  2. Meta Prophet là lựa chọn tuyệt vời cho các chuỗi thời gian cấp độ doanh nghiệp có chứa đa tính mùa (Fourier) và ngày lễ đặc thù.
  3. Khi dùng Machine Learning (LightGBM/XGBoost), luôn tạo các biến Lag và Rolling Features từ quá khứ (shift(1)) để triệt tiêu Look-ahead Bias.
  4. Tuyệt đối không dùng Random K-Fold; luôn kiểm chứng mô hình bằng TimeSeriesSplit (Expanding/Rolling Window).
  5. Sử dụng WAPE thay cho MAPE để tránh lỗi chia cho 0 trong các bài toán bán lẻ; áp dụng Pinball Loss để đưa ra Dự báo khoảng xác suất (Quantiles).
0Claps