Cài đặt Môi trường & Cấu trúc Repository
Hướng dẫn cài đặt môi trường Python 3.12 với uv, cấu trúc thư mục mã nguồn và cấu hình kết nối DWH.
Yêu cầu Hệ thống & Công nghệ Cốt lõi
Module dự báo được phát triển và kiểm thử trên nền tảng:
- Python:
3.12+(quản lý gói và môi trường ảo bằnguv). - Xử lý Dữ liệu Bảng & Parquet:
polars >= 1.0,pyarrow,openpyxl. - Hệ sinh thái Học máy & Foundation Model:
torch(hỗ trợ CPU & Apple Silicon MPS / CUDA).chronos-forecasting >= 2.3.2(cung cấpChronos2Pipelinechoamazon/chronos-2120M vàChronosBoltPipelinechoamazon/chronos-bolt-small48M).lightgbm,catboost,scikit-learn,scipy,joblib.
- Tầng API & Dịch vụ Web:
fastapi,uvicorn,pydantic,sqlite3.
Cấu trúc Thư mục Dự án (Repository Layout)
forecast_engineer/
├── Makefile # Lệnh chuẩn cấp cao: tải và chuẩn hóa Parquet từ DWH
├── forecast_pipeline/ # Đường ống chung: Parquet từ DWH & dự báo 3 Grain
│ ├── Makefile
│ ├── sql/full_dwh.sql # Truy vấn SQL hợp nhất toàn bộ DWH theo ngày
│ └── src/forecast_pipeline/
│ ├── core/paths.py # Mọi đường dẫn, khai báo một lần
│ ├── export/
│ │ ├── full_dwh.py # Kéo và cập nhật bảng phẳng 353 cột từ DWH + lịch sử 2021+
│ │ ├── columns.py # Từ điển schema 354 cột nghiêm ngặt
│ │ └── ml_parquet.py # Lọc dòng nhiễu, làm sạch tồn kho, xuất Parquet 329 cột
│ └── forecast/
│ ├── monthly.py # Entrypoint Production dự báo đầu tháng 3 Grain
│ └── yearly_3grains.py # Engine Chronos-2 Đa biến + 28 biến ngoại sinh + Stein
├── model_lab/ # Thư viện lõi Mô hình AI, Đặc trưng & Kiểm định (Core Library)
│ ├── pyproject.toml
│ ├── Makefile
│ └── src/model_lab/
│ ├── core/ # Kết nối DB, cấu hình, tiện ích dùng chung
│ ├── data/ # Xây dựng đặc trưng (features.py), chuỗi SKU (sku_series.py)
│ ├── models/ # 40 mô hình: catalog.py, frontier.py, chronos2_exp.py
│ ├── decompose/ # Phân rã Shapley 6 khe hệ số K (Base × (1 + ΣK))
│ └── scoring/ # Đánh giá WMAPE, Bias, phân cụm nhịp bán KMeans
├── forecast_demo/ # Module Dịch vụ Vận hành, API, CLI & Lưu trữ Lượt chạy
│ ├── pyproject.toml
│ ├── Makefile
│ └── src/forecast_demo/
│ ├── core/ # Cấu hình luật vận hành (settings.py, paths.py)
│ ├── store/ # Quản lý SQLite (CTKM, lượt chạy, điều chỉnh hệ số, chốt bản)
│ ├── ingest/ # Bộ đọc và kiểm tra hợp lệ tệp Excel CTKM
│ ├── engine/ # Dựng khung dòng (skeleton), định tuyến grain, tính dự báo
│ ├── api/ # FastAPI REST endpoints
│ └── cli/ # Giao diện dòng lệnh (forecast-demo)
├── out/
│ └── export/ # Nơi lưu trữ các tệp Parquet chuẩn hóa theo DWH
└── online_docs/ # Cổng tài liệu trực tuyến (Hugo)Cài đặt Môi trường Phát triển
Cài đặt môi trường cho model_lab và forecast_demo
# 1. Cài đặt môi trường thư viện mô hình lõi (model_lab)
cd model_lab
uv sync
# 2. Cài đặt môi trường dịch vụ vận hành & API (forecast_demo)
cd ../forecast_demo
make installCấu hình Biến môi trường Kết nối DWH (.env)
Lưu ý: Kết nối PostgreSQL DWH chỉ cần thiết khi bạn chạy lệnh kéo/cập nhật tệp Parquet mới từ DWH. Nếu đã có sẵn các tệp
.parquettrongout/export/vàmodel_lab/out/panel/, bạn không cần kết nối DB để build model hay chạy dự báo.
Tạo tệp model_lab/.env từ model_lab/.env.example:
DB_HOST=localhost
DB_PORT=3022 # 3022 = PROD (SSH tunnel từ daithuan.bi), 3021 = DEV
DB_USER=postgres
DB_PASSWORD=<mat_khau_dwh>
DB_NAME=bi_dwChạy Kiểm thử Tự động (Unit & Integration Tests)
Trước khi thay đổi mã nguồn ở tầng đặc trưng hoặc tầng động cơ dự báo, luôn chạy bộ kiểm thử để đảm bảo các bất biến toán học (như cộng dồn cấp gộp $\sum \text{nhóm} = \text{tổng}$ và đẳng thức $\text{Dự báo} = \text{Base} \times (1 + \sum K)$) không bị phá vỡ:
# Kiểm thử thư viện lõi model_lab
cd model_lab && uv run pytest
# Kiểm thử tầng dịch vụ và API forecast_demo
cd ../forecast_demo && uv run pytest