Time Series Foundation Model: Dự Báo Nhu Cầu Không Cần Train
Posted on: 9/30/2026 10:54:32 AM
Table of contents
- 1. Mọi quyết định vận hành đều là một bài toán dự báo
- 2. Ba thế hệ dự báo: từ ARIMA đến foundation model
- 3. Bên trong một Time Series Foundation Model
- 4. Bước nhảy 2026: từ đơn biến sang học trong ngữ cảnh với covariates
- 5. Bản đồ mô hình 2026
- 6. Từ dự báo đến quyết định: phân vị mới là thứ tạo ra tiền
- 7. Đánh giá đúng cách: đừng tin leaderboard, hãy backtest
- 8. Bắt tay vào code
- 9. Khi nào foundation model KHÔNG phải câu trả lời
- 10. Kiến trúc triển khai production
- Kết luận
Ngày mai cửa hàng cần nhập bao nhiêu thùng sữa? Tổng đài cần xếp bao nhiêu nhân viên ca tối thứ Sáu? Cụm máy chủ cần thêm bao nhiêu node trước đợt khuyến mãi 11/11? Kho cần giữ bao nhiêu hàng tồn an toàn? Nghe thì khác nhau, nhưng tất cả đều là cùng một bài toán: dự báo chuỗi thời gian (time series forecasting). Và trong hầu hết doanh nghiệp, đây là nơi AI tạo ra giá trị vận hành trực tiếp nhất — mỗi điểm phần trăm sai số dự báo được quy đổi thẳng ra tiền: hàng tồn chết vốn, hàng hết mất doanh thu, nhân sự thừa hay thiếu.
Suốt nhiều thập kỷ, làm dự báo tốt đồng nghĩa với việc có một nhóm data scientist, xây riêng từng mô hình cho từng chuỗi dữ liệu, tinh chỉnh hàng tuần. Năm 2026, cuộc chơi đã đổi: Time Series Foundation Model (TSFM) — những mô hình được huấn luyện sẵn trên hàng trăm tỷ đến hơn một nghìn tỷ điểm dữ liệu — có thể nhận một chuỗi số bất kỳ và trả về dự báo xác suất ngay lập tức, không cần huấn luyện. Ngày 31/8/2026, Google phát hành TimesFM-3, mô hình đầu tiên của dòng TimesFM hỗ trợ đa biến và biến ngoại sinh (covariates) một cách tự nhiên. Bài viết này mổ xẻ cách TSFM hoạt động, bản đồ mô hình 2026, cách biến dự báo thành quyết định vận hành, và những cái bẫy cần tránh khi đưa vào production.
1. Mọi quyết định vận hành đều là một bài toán dự báo
Hãy nhìn vào bất kỳ quy trình vận hành nào và bạn sẽ thấy một con số "tương lai" nằm ở giữa:
- Bán lẻ & chuỗi cung ứng: dự báo nhu cầu theo SKU × cửa hàng × ngày để đặt hàng, phân bổ tồn kho, lên kế hoạch khuyến mãi.
- Nhân sự & tổng đài: dự báo lượng cuộc gọi/ticket theo từng khung 30 phút để xếp ca.
- Hạ tầng IT: dự báo CPU, lưu lượng request, dung lượng lưu trữ để autoscale chủ động và lập kế hoạch dung lượng (capacity planning).
- Năng lượng: dự báo phụ tải điện, sản lượng điện mặt trời/gió, giá điện theo giờ.
- Tài chính vận hành: dự báo dòng tiền, doanh thu theo tuần, tỷ lệ hoàn trả.
Điểm chung là chi phí sai số không đối xứng. Dự báo thiếu 100 đơn vị sữa (hết hàng, mất khách) không tốn bằng dự báo thừa 100 đơn vị (hủy hàng hết hạn) — và tỷ lệ này khác nhau ở từng ngành. Vì vậy một hệ thống dự báo tốt không chỉ cần trả về "con số trung bình", mà cần trả về phân phối xác suất: "70% khả năng nhu cầu nằm dưới 1.240 đơn vị". Đây chính là điểm mà thế hệ foundation model 2026 làm rất tốt, và ta sẽ quay lại ở phần 6.
2. Ba thế hệ dự báo: từ ARIMA đến foundation model
Để hiểu vì sao TSFM là bước nhảy, cần nhìn lại hai thế hệ trước:
flowchart LR
subgraph G1["Thế hệ 1 — Thống kê cục bộ"]
A1["ARIMA / ETS / Prophet"] --> A2["1 mô hình cho MỖI chuỗi
fit lại khi có dữ liệu mới"]
end
subgraph G2["Thế hệ 2 — ML toàn cục"]
B1["LightGBM / DeepAR / N-BEATS / TFT"] --> B2["1 mô hình cho CẢ tập dữ liệu
của bạn, cần feature engineering"]
end
subgraph G3["Thế hệ 3 — Foundation model"]
C1["TimesFM / Chronos / TiRex / Toto"] --> C2["Pretrain trên hàng trăm tỷ điểm
dự báo zero-shot, học trong ngữ cảnh"]
end
G1 --> G2 --> G3
style A1 fill:#f8f9fa,stroke:#e94560,color:#2c3e50
style B1 fill:#2c3e50,stroke:#fff,color:#fff
style C1 fill:#e94560,stroke:#fff,color:#fff
Thế hệ 1 — thống kê cục bộ (local): ARIMA, Exponential Smoothing (ETS), Prophet. Mỗi chuỗi có một mô hình riêng, học từ chính lịch sử của nó. Ưu điểm: dễ giải thích, rẻ. Nhược điểm: không "mượn" được tri thức giữa các chuỗi — một SKU mới ra mắt với 3 tuần lịch sử gần như không dự báo được.
Thế hệ 2 — ML toàn cục (global): một mô hình duy nhất học trên toàn bộ các chuỗi của doanh nghiệp. LightGBM với feature lag/rolling/calendar từng thống trị cuộc thi M5 (dữ liệu bán lẻ Walmart); DeepAR, N-BEATS, Temporal Fusion Transformer đưa deep learning vào cuộc chơi. Mạnh hơn nhiều, nhưng mỗi doanh nghiệp vẫn phải tự xây pipeline huấn luyện, feature engineering, tuning, retrain định kỳ.
Thế hệ 3 — foundation model: giống như LLM học "ngôn ngữ" từ Internet, TSFM học "ngữ pháp của chuỗi thời gian" — xu hướng, mùa vụ, đột biến, chu kỳ lồng nhau — từ khối dữ liệu khổng lồ đa lĩnh vực (năng lượng, giao thông, bán lẻ, thời tiết, cloud ops) cộng dữ liệu tổng hợp. Khi gặp chuỗi mới, mô hình không cần huấn luyện lại: nó đọc lịch sử như đọc một "prompt" và suy ra phần tiếp theo.
3. Bên trong một Time Series Foundation Model
Câu hỏi đầu tiên ai cũng thắc mắc: LLM xử lý từ, vậy làm sao "token hóa" một dãy số như 1.203, 1.187, 1.455...? Có ba vấn đề kỹ thuật cần giải quyết.
3.1. Chuẩn hóa: đưa mọi chuỗi về cùng thang đo
Doanh số một cửa hàng có thể là 50 đơn vị/ngày, phụ tải điện một tỉnh là 3.000.000 kW. Một mô hình dùng chung phải "quên" thang đo tuyệt đối để học hình dạng. TSFM chuẩn hóa từng chuỗi (per-series normalization) trước khi đưa vào mô hình và đảo ngược ở đầu ra. Chronos-2 dùng robust scaling kết hợp phép biến đổi sinh-1 để giảm ảnh hưởng của giá trị cực đoan.
3.2. Patching: "từ" của chuỗi thời gian là một đoạn
Thay vì mỗi điểm dữ liệu là một token (quá dài, quá nhiễu), các mô hình hiện đại cắt chuỗi thành patch — ví dụ TimesFM-3 dùng patch 32 bước. Mỗi patch được nhúng thành một vector, giống như một "từ" mang theo hình dạng cục bộ (đang tăng, đang giảm, có đỉnh). Thế hệ Chronos đầu tiên từng dùng cách khác: lượng tử hóa giá trị vào các "bin" rời rạc như từ vựng của LLM; các thế hệ sau chuyển sang patch vì hiệu quả hơn với ngữ cảnh dài.
3.3. Đầu ra xác suất: quantile head
Thay vì một con số, TSFM hiện đại xuất ra nhiều phân vị (quantile) cùng lúc: TimesFM-3 xuất 9 phân vị (P10 → P90), Chronos-2 xuất 21 phân vị (từ P1 đến P99). Mô hình được huấn luyện bằng quantile loss (pinball loss), và nhiều mô hình dự báo toàn bộ tầm nhìn (horizon) trong một lượt forward thay vì sinh từng bước — tránh việc sai số tích lũy như khi sinh tự hồi quy (autoregressive).
flowchart LR RAW["Chuỗi thô
1203, 1187, 1455..."] --> NORM["Chuẩn hóa
theo từng chuỗi"] NORM --> PATCH["Cắt patch
(vd 32 bước)"] PATCH --> EMB["Nhúng patch
thành vector"] EMB --> TR["Transformer / xLSTM
attention theo thời gian
+ theo biến"] TR --> QH["Quantile head
P10 ... P90"] QH --> DENORM["Đảo chuẩn hóa"] DENORM --> OUT["Dự báo xác suất
cho cả horizon"] style RAW fill:#f8f9fa,stroke:#e94560,color:#2c3e50 style TR fill:#e94560,stroke:#fff,color:#fff style OUT fill:#2c3e50,stroke:#fff,color:#fff
Vì sao "zero-shot" lại hoạt động?
Chuỗi thời gian trong thế giới thực chia sẻ một bộ "mẫu hình" hữu hạn: xu hướng tuyến tính/phi tuyến, mùa vụ theo ngày/tuần/năm, hiệu ứng ngày lễ, đột biến rồi hồi quy về trung bình, bước nhảy cấu trúc. Khi được pretrain trên đủ đa dạng dữ liệu (cộng thêm dữ liệu tổng hợp sinh từ các quá trình AR, ETS, kernel ngẫu nhiên), mô hình học được cách nhận diện và ngoại suy các mẫu hình này. Chuỗi của bạn, dù mới, gần như chắc chắn là tổ hợp của những mẫu hình mô hình đã từng thấy.
4. Bước nhảy 2026: từ đơn biến sang học trong ngữ cảnh với covariates
Thế hệ TSFM đầu tiên có một điểm yếu chí mạng với bài toán vận hành: chúng chỉ nhìn lịch sử của chính chuỗi cần dự báo. Nhưng doanh số ngày mai không chỉ phụ thuộc doanh số hôm qua — nó phụ thuộc lịch khuyến mãi, giá bán, ngày lễ, thời tiết. Nhu cầu điện phụ thuộc nhiệt độ. Lượng ticket hỗ trợ phụ thuộc lịch phát hành phiên bản mới. Những biến này gọi là covariates (biến ngoại sinh), và có ba loại:
| Loại covariate | Định nghĩa | Ví dụ vận hành |
|---|---|---|
| Past-only (chỉ biết quá khứ) | Có giá trị trong lịch sử, không biết trước tương lai | Lượt khách vào cửa hàng, số phiên truy cập web, nhiệt độ thực đo |
| Known future (biết trước tương lai) | Biết giá trị cả trong quá khứ lẫn tương lai | Lịch khuyến mãi, giá niêm yết, ngày lễ, cuối tuần, lịch phát hành |
| Static / categorical | Thuộc tính không đổi theo thời gian hoặc dạng nhãn | Vùng miền, loại cửa hàng, nhóm ngành hàng |
Các mô hình 2025–2026 giải bài toán này bằng học trong ngữ cảnh (in-context learning): target và covariates được đưa vào cùng lúc, và cơ chế attention học cách chúng ảnh hưởng lẫn nhau — ngay tại thời điểm suy luận, không cần huấn luyện.
- Chronos-2 dùng group attention: các chuỗi liên quan (target + covariates, hoặc nhiều biến của một chuỗi đa biến) được gom thành một nhóm, và tại mỗi vị trí patch, thông tin được chia sẻ trong nhóm. Chi phí tăng tuyến tính theo số biến thay vì bình phương như khi "làm phẳng" tất cả thành một chuỗi dài.
- TimesFM-3 xen kẽ hai loại attention: temporal attention nhân quả (theo chiều thời gian, trong từng chuỗi) và variate attention đầy đủ (theo chiều ngang, giữa các chuỗi). Với covariates biết trước, mỗi token còn được ghép thêm patch tương lai của tín hiệu đó ("lookahead").
- Toto 2.0 và TiRex-2 cũng đi theo hướng đa biến; riêng Toto 2.0 hiện vẫn ghi hỗ trợ covariates là "dự kiến trong bản phát hành sau".
flowchart TB
subgraph IN["Đầu vào trong cùng một nhóm ngữ cảnh"]
T["Target: doanh số
(quá khứ)"]
P["Past covariate: lượt khách
(chỉ quá khứ)"]
F["Future covariate: lịch khuyến mãi
(quá khứ + tương lai)"]
end
T --> ATT["Attention theo thời gian
xen kẽ attention giữa các biến"]
P --> ATT
F --> ATT
ATT --> Q["Phân vị dự báo doanh số
đã tính đến ngày khuyến mãi"]
style ATT fill:#e94560,stroke:#fff,color:#fff
style Q fill:#2c3e50,stroke:#fff,color:#fff
style T fill:#f8f9fa,stroke:#e94560,color:#2c3e50
style P fill:#f8f9fa,stroke:#e94560,color:#2c3e50
style F fill:#f8f9fa,stroke:#e94560,color:#2c3e50
Covariates có thật sự được dùng? Bài kiểm tra "covariate hoàn hảo"
Một mô hình "hỗ trợ covariates" trên giấy chưa chắc đã khai thác chúng. Một thí nghiệm công bố ngày 28/9/2026 trên blog AI Horizon Forecast đã kiểm tra đúng điều này: tạo chuỗi doanh số tổng hợp 4 năm với mùa vụ tuần/năm và 48 đợt khuyến mãi bất thường (mỗi đợt làm doanh số lệch khoảng 55 đơn vị), rồi đưa cho mô hình một cờ lịch khuyến mãi chính xác tuyệt đối cùng một cờ "mồi nhử" vô nghĩa. Kết quả sai số MSE trong cửa sổ sự kiện:
| Mô hình | MSE không covariate | MSE có covariate | Cải thiện |
|---|---|---|---|
| TimesFM-3 | 154,3 | 32,4 | ~4,8 lần |
| Chronos-2 | 153,7 | 38,8 | ~4,0 lần |
| TiRex-2 | 152,7 | 55,1 | ~2,8 lần |
| Toto-2.0 | 153,7 | 153,6 | Gần như không đổi |
Bài học thực chiến
Trước khi tin một mô hình với lịch khuyến mãi của bạn, hãy chạy bài kiểm tra covariate hoàn hảo: đưa vào một biến mà bạn biết chắc quyết định target (ví dụ chính cờ khuyến mãi trên dữ liệu có hiệu ứng rõ), rồi so dự báo có và không có biến đó. Nếu dự báo gần như không đổi, mô hình đang phớt lờ covariates — dù tài liệu nói gì đi nữa.
5. Bản đồ mô hình 2026
| Mô hình | Tổ chức | Kích thước & kiến trúc | Covariates / đa biến | Giấy phép |
|---|---|---|---|---|
| TimesFM-3 (8/2026) | Google Research | 330M, decoder-only, patch 32, attention thời gian + attention giữa biến, 9 phân vị | Có: đa target, past & future covariates | Trọng số tải về: phi thương mại. Dùng thương mại qua Google Cloud (BigQuery ML) |
| TimesFM 2.5 (9/2025) | Google Research | 200M, ngữ cảnh tới 16k điểm | Đơn biến; covariates qua hồi quy ngoài (XReg) | Apache-2.0 |
| Chronos-2 (10/2025) | Amazon | 120M (bản nhỏ 28M), encoder-only kiểu T5, group attention, ngữ cảnh 8.192, 21 phân vị | Có: đa biến, past & future, số và phân loại | Apache-2.0 |
| TiRex / TiRex-2 | NX-AI | 35M, xLSTM (giữ state-tracking), rất nhanh | TiRex-2: đa biến + streaming | NXAI Community License (doanh nghiệp lớn dùng thương mại phải trả phí) |
| Moirai 2.0 (11/2025) | Salesforce | Decoder-only, quantile loss, dự đoán nhiều token; bản chính 11,4M tham số, nhỏ hơn 30 lần Moirai 1.0-Large | Chỉ đơn biến — chủ động bỏ hỗ trợ đa biến và covariates | Mở trọng số — kiểm tra model card |
| Toto 2.0 (2026) | Datadog | 4M → 2.5B, transformer u-μP, attention thời gian/biến xen kẽ, 9 phân vị | Đa biến; covariates dự kiến bản sau | Mở trọng số — kiểm tra model card |
Vài nhận xét quan trọng khi đọc bảng này:
- Hai triết lý trái ngược về covariates. Google, Amazon và NX-AI đặt cược vào đa biến và covariates; Salesforce thì bỏ hẳn tính năng này ở Moirai 2.0 vì thấy "lợi ích tối thiểu" trên benchmark. Cả hai đều đúng một phần: trên dữ liệu benchmark tổng quát, covariates ít tạo khác biệt; trên dữ liệu vận hành có khuyến mãi, lễ, giá — chúng tạo khác biệt gấp nhiều lần (xem thí nghiệm ở phần 4).
- Mô hình nhỏ vẫn rất mạnh. TiRex với 35M tham số từng đứng đầu GIFT-Eval; với Moirai 2.0, các bản lớn hơn (87M, 305M) lại kém bản small 11,4M. Ngược lại Toto 2.0 báo cáo mỗi nấc kích thước đều tốt hơn nấc dưới, chưa bão hòa ở 2.5B. "Scaling law" cho chuỗi thời gian vẫn là câu hỏi mở.
- Giấy phép là tiêu chí lọc đầu tiên, không phải cuối cùng. TimesFM-3 mạnh nhất trên benchmark nhưng trọng số tải về chỉ dùng cho mục đích phi thương mại, phi production; muốn dùng thương mại phải đi qua dịch vụ Google Cloud. Với hệ thống tự host, Chronos-2 (Apache-2.0) hiện là lựa chọn an toàn và trưởng thành nhất.
- Tốc độ: Chronos-2 đạt khoảng 300 chuỗi/giây trên một GPU A10G (batch 1.024, ngữ cảnh 2.048, horizon 64); bản 28M nhanh gần gấp đôi với độ chính xác chỉ kém khoảng 1%. Nghĩa là dự báo hàng trăm nghìn SKU mỗi đêm hoàn toàn khả thi với một GPU tầm trung.
6. Từ dự báo đến quyết định: phân vị mới là thứ tạo ra tiền
Sai lầm phổ biến nhất khi áp dụng AI dự báo là chỉ lấy đường trung vị (P50) rồi đem đi đặt hàng. Giá trị thật của TSFM nằm ở phân phối. Bài toán kinh điển newsvendor (người bán báo) cho công thức rất gọn:
Công thức critical ratio
Gọi Cu là chi phí thiếu 1 đơn vị (lợi nhuận mất đi) và Co là chi phí thừa 1 đơn vị (hủy hàng, lưu kho). Lượng đặt hàng tối ưu là phân vị thứ q* = Cu / (Cu + Co) của phân phối nhu cầu.
Ví dụ chuỗi bánh mì: mỗi ổ bán được lãi 12.000đ, mỗi ổ không bán được phải hủy mất 8.000đ → q* = 12 / (12 + 8) = 0,6 → nên nướng đúng bằng P60 của dự báo, không phải P50. Với sữa tươi ngắn hạn (hủy đắt), q* giảm; với hàng khô biên lợi nhuận cao, q* tăng lên P80–P90.
Nguyên tắc tương tự áp dụng khắp nơi trong vận hành:
- Xếp ca tổng đài: nhân sự cố định theo P50, nhóm dự phòng (on-call) phủ tới P90 của lượng cuộc gọi.
- Hạ tầng cloud: scale chủ động theo P95 của lưu lượng dự báo 30–60 phút tới, thay vì chờ CPU vượt ngưỡng rồi mới phản ứng.
- Tồn kho an toàn: khoảng cách P95 − P50 trên tổng thời gian chờ hàng (lead time) chính là safety stock, thay cho công thức giả định phân phối chuẩn.
Nhưng dùng phân vị để ra quyết định chỉ an toàn khi chúng được hiệu chuẩn (calibrated) — tức là P90 thật sự chứa khoảng 90% giá trị thực tế. Một nghiên cứu tại ICLR 2026 cho thấy các TSFM được hiệu chuẩn tốt hơn nhất quán so với mô hình baseline, và không bị thiên lệch hệ thống về phía quá tự tin hay quá dè dặt — khác với hiện tượng quá tự tin thường gặp ở các mô hình deep learning khác. Tin tốt, nhưng vẫn phải đo trên dữ liệu của chính bạn.
flowchart LR FC["TSFM
dự báo phân vị"] --> POL["Chính sách quyết định
q* = Cu / (Cu + Co)"] COST["Chi phí thiếu / thừa
theo ngành hàng"] --> POL POL --> ACT["Hành động
đặt hàng, xếp ca, scale"] ACT --> REAL["Kết quả thực tế"] REAL --> MON["Giám sát
coverage P10–P90, MASE"] MON -->|"lệch hiệu chuẩn"| FC style FC fill:#e94560,stroke:#fff,color:#fff style POL fill:#2c3e50,stroke:#fff,color:#fff style COST fill:#f8f9fa,stroke:#e94560,color:#2c3e50
7. Đánh giá đúng cách: đừng tin leaderboard, hãy backtest
Leaderboard như GIFT-Eval (97 tác vụ từ 55 bộ dữ liệu) hay fev-bench (100 tác vụ) rất hữu ích để chọn danh sách rút gọn, nhưng có hai vấn đề:
- Rò rỉ dữ liệu (data leakage): các bộ dữ liệu công khai lâu năm rất có thể đã nằm trong khối dữ liệu pretrain của mô hình. Benchmark TIME (2026) ra đời để xử lý đúng điều này, với 50 bộ dữ liệu mới hoàn toàn và 98 tác vụ thuộc 8 lĩnh vực (năng lượng, giao thông, y tế, tài chính, bán lẻ, cloud ops...).
- Xếp hạng tổng thể che giấu chi tiết: TIME phát hiện rằng thứ hạng theo từng mẫu hình (mùa vụ mạnh, không dừng, nhiễu cao...) khác đáng kể so với thứ hạng tổng thể. Mô hình số 1 trung bình chưa chắc là số 1 cho dữ liệu của bạn.
Tin tốt từ TIME: các TSFM hàng đầu (Chronos-2, TimesFM-2.5, TiRex) nhất quán vượt Seasonal Naive, đặc biệt trên chuỗi không dừng và có mùa vụ mạnh. Nhưng cách duy nhất để biết chắc là backtest kiểu rolling-origin trên dữ liệu của bạn:
- Chọn nhiều "điểm cắt" trong quá khứ (ví dụ 8–12 tuần gần nhất), tại mỗi điểm chỉ cho mô hình thấy dữ liệu trước đó và dự báo horizon tiếp theo.
- Đo MASE (sai số tuyệt đối đã chuẩn hóa theo seasonal naive — dưới 1 nghĩa là tốt hơn naive) cho dự báo điểm, và WQL/CRPS cho dự báo xác suất.
- Luôn có baseline: Seasonal Naive, ETS/AutoARIMA, và nếu đã có, mô hình LightGBM hiện tại. Không có baseline thì con số nào cũng "trông có vẻ tốt".
- Kiểm tra coverage: tỷ lệ giá trị thực rơi trong khoảng P10–P90 phải gần 80%.
8. Bắt tay vào code
8.1. Chronos-2 tự host với covariates (Apache-2.0)
Cài đặt bằng pip install "chronos-forecasting>=2.0". API làm việc trực tiếp với pandas DataFrame dạng "long": mỗi dòng là một (id, timestamp) với target và các cột covariate. Mô hình chạy được cả trên GPU lẫn CPU.
import pandas as pd
from chronos import Chronos2Pipeline
pipeline = Chronos2Pipeline.from_pretrained("amazon/chronos-2", device_map="cuda")
# context_df: lich su -- cot id (store_sku), timestamp, target (units_sold),
# cong them covariates: is_promo, price, foot_traffic
# future_df : cac ngay can du bao -- CHI chua covariates biet truoc
# (is_promo, price), KHONG co cot target
context_df = pd.read_parquet("sales_history.parquet")
future_df = pd.read_parquet("promo_calendar_next_28d.parquet")
pred_df = pipeline.predict_df(
context_df,
future_df=future_df,
prediction_length=28,
quantile_levels=[0.1, 0.5, 0.6, 0.9],
id_column="store_sku",
timestamp_column="timestamp",
target="units_sold",
)
# pred_df co cac cot phan vi -> dua cot 0.6 vao he thong dat hang (q* = 0.6)
Cột nào có mặt trong context_df nhưng không có trong future_df (như foot_traffic) sẽ được coi là past-only covariate; cột có ở cả hai là known-future covariate.
8.2. TimesFM-3 qua BigQuery (dùng thương mại hợp lệ)
Nếu dữ liệu đã nằm trong BigQuery, hàm AI.FORECAST cho phép gọi TimesFM ngay trong SQL. Dự báo đa biến với covariates yêu cầu model 'TimesFM 3.0' (đang ở trạng thái Preview):
SELECT *
FROM AI.FORECAST(
TABLE `retail.daily_sales_with_calendar`,
target_cols => ['units_sold'],
timestamp_col => 'sale_date',
model => 'TimesFM 3.0',
id_cols => ['store_id'],
horizon => 28,
past_covariate_cols => ['foot_traffic'],
future_covariate_cols => ['is_promo', 'is_holiday'],
confidence_level => 0.8
);
Lưu ý khi dùng AI.FORECAST
- Khi có
future_covariate_cols, dữ liệu đầu vào phải phủ đủ độ dài context window + horizon — nghĩa là bảng phải chứa sẵn các dòng tương lai với lịch khuyến mãi, ngày lễ. - Với TimesFM 3.0: horizon tối đa 1.024 bước, context window là bội số của 32 (tối đa 2.048). Với TimesFM 2.5 (mặc định, đơn biến): horizon tới 10.000, context tới 15.360.
- Mỗi chuỗi cần tối thiểu 3 điểm dữ liệu; cột
ai_forecast_statussẽ báo lỗi cho từng chuỗi thay vì làm hỏng cả truy vấn.
8.3. Tự viết bài kiểm tra covariate hoàn hảo
def covariate_uplift(pipeline, ctx, fut, cov_cols, **kw):
"""So sanh sai so co / khong co covariates tren cung backtest window."""
with_cov = pipeline.predict_df(ctx, future_df=fut, **kw)
no_cov = pipeline.predict_df(ctx.drop(columns=cov_cols),
future_df=None, **kw)
return with_cov, no_cov
# Neu MASE(with_cov) ~= MASE(no_cov) tren cac cua so CO khuyen mai
# -> mo hinh dang bo qua covariates, dung tin vao no cho lich khuyen mai.
9. Khi nào foundation model KHÔNG phải câu trả lời
TSFM là một bước tiến lớn, nhưng không phải cây đũa thần. Những tình huống cần thận trọng:
- Nhu cầu gián đoạn (intermittent demand): SKU đuôi dài bán 0, 0, 1, 0, 0, 3... Dữ liệu thưa là vùng khó cho mọi phương pháp; một nghiên cứu 2025 trên dữ liệu bán lẻ thưa và nhiều khoảng trống cho thấy các mô hình cây (XGBoost, LightGBM) vẫn vượt các kiến trúc deep learning như N-BEATS, N-HiTS, TFT. Hãy backtest kỹ nhóm SKU này, cân nhắc gộp theo tuần hoặc theo nhóm hàng.
- Đứt gãy cấu trúc (structural break): thay đổi chính sách giá, mở kênh bán mới, đại dịch. Không mô hình nào học được điều chưa từng xảy ra trong lịch sử nếu bạn không đưa nó vào dưới dạng covariate.
- Tính nhất quán phân cấp: tổng dự báo các cửa hàng phải khớp với dự báo cấp vùng và toàn quốc. TSFM dự báo từng chuỗi độc lập, bạn vẫn cần bước hòa giải phân cấp (hierarchical reconciliation) như MinT.
- Tầm nhìn quá xa: nghiên cứu Moirai 2.0 ghi nhận hiệu năng giảm ở horizon dài. Dự báo 3 ngày tới và 6 tháng tới nên được đánh giá riêng.
- Covariates phi số: mô tả sản phẩm, hình ảnh, tin tức chưa được Chronos-2 hỗ trợ trực tiếp — cần tự mã hóa thành số hoặc cờ.
- Bẫy giấy phép: tải trọng số TimesFM-3 về chạy production là vi phạm điều khoản; TiRex yêu cầu doanh nghiệp lớn trả phí khi dùng thương mại. Hãy để bộ phận pháp chế đọc model card trước khi viết dòng code đầu tiên.
10. Kiến trúc triển khai production
flowchart TB DW["Kho dữ liệu
bán hàng, vận hành"] --> PREP["Chuẩn bị dữ liệu
làm sạch, lấp khoảng trống"] CAL["Lịch nghiệp vụ
khuyến mãi, lễ, giá"] --> PREP PREP --> ROUTE{"Phân nhóm chuỗi"} ROUTE -->|"chuỗi đều, đủ dài"| TSFM["TSFM
Chronos-2 / TimesFM"] ROUTE -->|"thưa, gián đoạn"| TREE["Mô hình chuyên biệt
LightGBM / Croston"] TSFM --> ENS["Kết hợp + hòa giải phân cấp"] TREE --> ENS ENS --> STORE["Kho phân vị dự báo"] STORE --> DEC["Hệ thống quyết định
đặt hàng, xếp ca, autoscale"] STORE --> MON["Giám sát
MASE, coverage, drift"] MON -->|"suy giảm"| FB["Fallback
Seasonal Naive / ETS"] FB --> STORE style TSFM fill:#e94560,stroke:#fff,color:#fff style DEC fill:#2c3e50,stroke:#fff,color:#fff style ROUTE fill:#f8f9fa,stroke:#e94560,color:#2c3e50
Ba nguyên tắc thiết kế đáng chú ý:
- Phân nhóm (routing) trước khi dự báo: không phải chuỗi nào cũng hợp với TSFM. Phân loại theo độ thưa, độ dài lịch sử, mức biến động rồi chọn mô hình phù hợp cho từng nhóm.
- Champion–challenger: chạy song song mô hình mới (challenger) với mô hình hiện tại (champion) vài tuần trước khi chuyển đổi; so sánh trên cùng tập chuỗi, cùng metric.
- Fallback luôn sẵn sàng: nếu GPU sự cố hoặc metric suy giảm đột ngột, hệ thống tự rơi về Seasonal Naive/ETS — kém hơn nhưng không bao giờ "trắng" dự báo, vì hệ thống đặt hàng phía sau không thể chờ.
Checklist đưa TSFM vào vận hành
- Xác định rõ quyết định cần hỗ trợ và chi phí thiếu/thừa → suy ra phân vị cần dùng.
- Lọc mô hình theo giấy phép và cách triển khai (tự host hay qua cloud) trước khi so độ chính xác.
- Backtest rolling-origin với ít nhất 8 điểm cắt, luôn kèm baseline Seasonal Naive và mô hình hiện tại.
- Chạy bài kiểm tra covariate hoàn hảo cho từng covariate quan trọng (khuyến mãi, giá, lễ).
- Tách riêng nhóm chuỗi thưa/gián đoạn và đánh giá riêng.
- Đo coverage của khoảng phân vị hằng tuần; cảnh báo khi lệch quá 5–10 điểm phần trăm.
- Thiết kế fallback và hòa giải phân cấp ngay từ đầu, không đợi sự cố.
Kết luận
Time Series Foundation Model đang làm với dự báo điều mà LLM đã làm với xử lý ngôn ngữ: biến một năng lực từng cần đội ngũ chuyên gia và nhiều tháng xây dựng thành một lời gọi hàm. Năm điều cần nhớ:
- Zero-shot là thật: pretrain trên hàng trăm tỷ đến hơn một nghìn tỷ điểm, TSFM hàng đầu nhất quán vượt các baseline cổ điển mà không cần huấn luyện.
- 2026 là năm của covariates: Chronos-2, TimesFM-3, TiRex-2 học trong ngữ cảnh từ lịch khuyến mãi, giá, thời tiết — nhưng hãy kiểm chứng bằng bài test covariate hoàn hảo.
- Phân vị mới tạo ra tiền: dùng critical ratio để chọn đúng phân vị cho từng quyết định, thay vì đặt hàng theo trung vị.
- Giấy phép là bộ lọc đầu tiên: mạnh nhất trên benchmark chưa chắc là thứ bạn được phép chạy trong production.
- Backtest trên dữ liệu của bạn: leaderboard chỉ để rút gọn danh sách; quyết định cuối cùng thuộc về rolling-origin backtest và baseline.
Với phần lớn doanh nghiệp, câu hỏi không còn là "có nên dùng AI để dự báo không", mà là "bao giờ thì thay thế những bảng Excel trung bình trượt 4 tuần". Đó có lẽ là khoản đầu tư AI có ROI rõ ràng và đo đếm được nhất trong vận hành hôm nay.
Nguồn tham khảo
- Google Research — TimesFM-3: A zero-shot foundation model for multivariate forecasting
- GitHub — google-research/timesfm
- Google Cloud — The AI.FORECAST function (BigQuery ML)
- arXiv — Chronos-2: From Univariate to Universal Forecasting
- Hugging Face — amazon/chronos-2 model card
- Amazon Science — Introducing Chronos-2
- arXiv — TiRex: Zero-Shot Forecasting Across Long and Short Horizons
- arXiv — Moirai 2.0: When Less Is More for Time Series Forecasting
- Datadog — Toto 2.0
- arXiv — It’s TIME: Towards the Next Generation of Time Series Forecasting Benchmarks
- arXiv — Beyond Accuracy: Are Time Series Foundation Models Well-Calibrated?
- AI Horizon Forecast — Can a Time-Series Foundation Model See a Promotion Coming?
- arXiv — Comparative Analysis of Modern Machine Learning Models for Retail Sales Forecasting
Disclaimer: The opinions expressed in this blog are solely my own and do not reflect the views or opinions of my employer or any affiliated organizations. The content provided is for informational and educational purposes only and should not be taken as professional advice. While I strive to provide accurate and up-to-date information, I make no warranties or guarantees about the completeness, reliability, or accuracy of the content. Readers are encouraged to verify the information and seek independent advice as needed. I disclaim any liability for decisions or actions taken based on the content of this blog.