# SYLLABUS ECONOMIC FORECASTING (5)

## Giai đoạn 7 - Economic Data Engineering (Ngày 766–825, 60 ngày)

### PHẦN A: DATA SOURCES (Ngày 766–780)

**Ngày 766: Tổng quan Hệ sinh thái Nguồn Dữ liệu Kinh tế Quốc tế**

*   Mục tiêu: Có bức tranh tổng thể về các nguồn dữ liệu chính sẽ dùng trong hệ thống forecasting.
    
*   Lý thuyết: Phân loại nguồn dữ liệu: tổ chức quốc tế (IMF, World Bank, OECD), quốc gia (FRED, GSO), tần suất khác nhau.
    
*   Thực hành: Vẽ sơ đồ tổng hợp toàn bộ nguồn dữ liệu đã dùng rải rác qua các giai đoạn trước.
    

**Ngày 767: IMF - Giới thiệu và Bộ Dữ liệu Chính**

*   Mục tiêu: Biết các bộ dữ liệu quan trọng nhất của IMF.
    
*   Lý thuyết: International Financial Statistics (IFS), World Economic Outlook (WEO) database.
    
*   Thực hành: Duyệt qua giao diện IMF Data để tìm dữ liệu liên quan Việt Nam.
    

**Ngày 768: IMF API - Truy cập Dữ liệu qua Python**

*   Mục tiêu: Tự động hóa việc lấy dữ liệu IMF.
    
*   Lý thuyết: Ôn lại cấu trúc IMF API (SDMX-based).
    
*   Thực hành: Viết script Python truy vấn dữ liệu IFS cho Việt Nam qua API.
    

**Ngày 769: World Bank - Giới thiệu và WDI**

*   Mục tiêu: Biết bộ dữ liệu phát triển toàn diện nhất.
    
*   Lý thuyết: World Development Indicators (WDI), phạm vi bao phủ rộng (kinh tế, xã hội, môi trường).
    
*   Thực hành: Duyệt qua WDI để tìm các chỉ báo kinh tế Việt Nam có sẵn.
    

**Ngày 770: World Bank API - Truy cập qua Python**

*   Mục tiêu: Tự động hóa việc lấy dữ liệu World Bank.
    
*   Lý thuyết: Ôn lại thư viện `wbgapi` hoặc `wbdata`.
    
*   Thực hành: Viết script Python tải toàn bộ chỉ báo GDP, lạm phát Việt Nam từ World Bank.
    

**Ngày 771: OECD - Giới thiệu và OECD.Stat**

*   Mục tiêu: Biết nguồn dữ liệu chuẩn cho các nước phát triển (tham chiếu so sánh).
    
*   Lý thuyết: OECD.Stat, phạm vi các chỉ báo kinh tế vĩ mô chi tiết.
    
*   Thực hành: Tìm hiểu liệu Việt Nam có dữ liệu trong OECD hay chỉ dùng để so sánh benchmark quốc tế.
    

**Ngày 772: OECD API - Truy cập qua Python**

*   Mục tiêu: Tự động hóa việc lấy dữ liệu OECD.
    
*   Lý thuyết: Ôn lại cấu trúc API OECD (SDMX).
    
*   Thực hành: Viết script Python truy vấn một chỉ báo OECD mẫu.
    

**Ngày 773: FRED - Giới thiệu**

*   Mục tiêu: Biết kho dữ liệu kinh tế lớn và tiện dụng nhất.
    
*   Lý thuyết: Federal Reserve Economic Data (FRED), hàng trăm nghìn chuỗi dữ liệu kinh tế Mỹ và quốc tế.
    
*   Thực hành: Tìm các chuỗi dữ liệu quốc tế/hàng hóa hữu ích cho mô hình Việt Nam (VD: giá dầu, lãi suất Fed Funds).
    

**Ngày 774: FRED API - Truy cập qua Python**

*   Mục tiêu: Thành thạo công cụ được dùng phổ biến nhất trong thực hành.
    
*   Lý thuyết: Ôn lại thư viện `fredapi`.
    
*   Thực hành: Viết script Python tải giá dầu WTI và lãi suất Fed Funds - hai biến quan trọng cho mô hình CPI/tỷ giá Việt Nam.
    

**Ngày 775: GSO Việt Nam - Cấu trúc Dữ liệu**

*   Mục tiêu: Củng cố hiểu biết về nguồn dữ liệu nội địa chính.
    
*   Lý thuyết: Ôn lại cấu trúc công bố của Tổng cục Thống kê (đã dùng xuyên suốt syllabus).
    
*   Thực hành: Tổng hợp lại toàn bộ cách thu thập dữ liệu GSO đã thực hiện qua các giai đoạn trước thành một tài liệu tham khảo.
    

**Ngày 776: SBV và Bộ Tài chính - Nguồn Bổ sung**

*   Mục tiêu: Biết đầy đủ các nguồn dữ liệu chính thức Việt Nam.
    
*   Lý thuyết: Ôn lại dữ liệu lãi suất, tỷ giá từ SBV; dữ liệu ngân sách từ Bộ Tài chính.
    
*   Thực hành: Lập danh sách đầy đủ URL/nguồn truy cập cho từng loại dữ liệu Việt Nam.
    

**Ngày 777: So sánh Cấu trúc và Độ trễ Công bố**

*   Mục tiêu: Hiểu đặc thù từng nguồn để thiết kế pipeline phù hợp.
    
*   Lý thuyết: So sánh format (API/CSV/Excel), tần suất cập nhật, độ trễ công bố giữa các nguồn.
    
*   Thực hành: Lập bảng tổng hợp so sánh toàn bộ nguồn dữ liệu (quốc tế + Việt Nam) về các tiêu chí trên.
    

**Ngày 778: Xây dựng Data Catalog Cá nhân**

*   Mục tiêu: Có tài liệu tham khảo tổng hợp cho toàn bộ dự án sau này.
    
*   Lý thuyết: Data catalog, tài liệu hóa nguồn gốc, tần suất, đơn vị đo của từng chuỗi dữ liệu.
    
*   Thực hành: Viết file catalog (markdown/YAML) liệt kê toàn bộ ~20-30 chuỗi dữ liệu đã dùng xuyên suốt syllabus.
    

**Ngày 779: Project - Viết Wrapper Python Thống nhất**

*   Mục tiêu: Đơn giản hóa việc truy cập đa nguồn.
    
*   Lý thuyết: Ôn lại API của IMF, World Bank, FRED, GSO.
    
*   Thực hành: Viết class `DataFetcher` với các method `get_imf()`, `get_worldbank()`, `get_fred()`, trả về DataFrame có định dạng thống nhất.
    

**Ngày 780: Tổng kết Data Sources**

*   Mục tiêu: Củng cố toàn bộ Phần A.
    
*   Lý thuyết: Ôn tập Ngày 766–779.
    
*   Thực hành: Kiểm tra lại `DataFetcher` bằng cách tải đồng thời 5 chuỗi dữ liệu từ 3 nguồn khác nhau.
    

### PHẦN B: ETL (Ngày 781–805)

**Ngày 781: Giới thiệu ETL cho Dữ liệu Kinh tế**

*   Mục tiêu: Hiểu quy trình Extract-Transform-Load áp dụng cho bài toán forecasting.
    
*   Lý thuyết: ETL pipeline, vai trò trong hệ thống production forecasting.
    
*   Thực hành: Vẽ sơ đồ ETL tổng quát cho hệ thống dữ liệu kinh tế Việt Nam.
    

**Ngày 782: Ôn lại Pandas Nâng cao**

*   Mục tiêu: Củng cố kỹ năng pandas cho xử lý dữ liệu phức tạp.
    
*   Lý thuyết: Merge, groupby, pivot, resample - ôn tập và mở rộng.
    
*   Thực hành: Thực hành merge nhiều bộ dữ liệu kinh tế có tần suất khác nhau bằng `pd.merge_asof`.
    

**Ngày 783: Xử lý Time Series với Pandas**

*   Mục tiêu: Thành thạo các thao tác time series chuyên biệt.
    
*   Lý thuyết: `reindex`, `asfreq`, `resample`, xử lý DatetimeIndex.
    
*   Thực hành: Chuẩn hóa toàn bộ chuỗi dữ liệu đã thu thập về cùng index thời gian đầy đủ (không thiếu tháng).
    

**Ngày 784: Giới thiệu Polars**

*   Mục tiêu: Biết công cụ thay thế hiệu năng cao hơn pandas.
    
*   Lý thuyết: Polars, viết bằng Rust, nhanh hơn đáng kể cho dữ liệu lớn.
    
*   Thực hành: So sánh tốc độ đọc/xử lý cùng một file giữa pandas và polars.
    

**Ngày 785: Polars Cơ bản**

*   Mục tiêu: Làm quen cú pháp polars.
    
*   Lý thuyết: Polars DataFrame, lazy evaluation (khác biệt lớn với pandas eager evaluation).
    
*   Thực hành: Viết lại một vài thao tác pandas cơ bản (filter, select, groupby) bằng polars.
    

**Ngày 786: Polars - Các Thao tác Tương đương Pandas**

*   Mục tiêu: Có khả năng chuyển đổi qua lại giữa hai thư viện.
    
*   Lý thuyết: Bảng tra cứu tương đương pandas ↔ polars cho các thao tác phổ biến.
    
*   Thực hành: Viết lại toàn bộ pipeline chuẩn hóa dữ liệu (Ngày 783) bằng polars.
    

**Ngày 787: Khi nào dùng Polars thay vì Pandas**

*   Mục tiêu: Có quyết định thực dụng cho từng tình huống.
    
*   Lý thuyết: Với dữ liệu kinh tế vĩ mô (thường nhỏ, vài trăm-nghìn dòng), pandas thường đã đủ; polars hữu ích khi dữ liệu lớn (VD: dữ liệu giao dịch tần suất cao).
    
*   Thực hành: Thảo luận và quyết định công cụ chính cho hệ thống sẽ xây (khuyến nghị: pandas cho phần lớn, polars cho phần dữ liệu lớn nếu có).
    

**Ngày 788: Giới thiệu DuckDB**

*   Mục tiêu: Biết công cụ SQL hiệu năng cao chạy trực tiếp trên file.
    
*   Lý thuyết: DuckDB, in-process SQL OLAP database, không cần server riêng.
    
*   Thực hành: Cài đặt DuckDB, chạy truy vấn SQL đầu tiên.
    

**Ngày 789: DuckDB - Truy vấn Cơ bản trên File**

*   Mục tiêu: Thực hành truy vấn trực tiếp trên CSV/Parquet.
    
*   Lý thuyết: Ôn lại cú pháp SQL kết hợp đọc file trực tiếp (`SELECT * FROM 'file.csv'`).
    
*   Thực hành: Viết truy vấn SQL tổng hợp dữ liệu từ nhiều file CSV kinh tế đã thu thập.
    

**Ngày 790: DuckDB - Kết hợp với Pandas/Polars**

*   Mục tiêu: Tích hợp DuckDB vào workflow Python hiện có.
    
*   Lý thuyết: DuckDB có thể đọc/ghi trực tiếp DataFrame pandas/polars.
    
*   Thực hành: Viết pipeline kết hợp: dùng DuckDB SQL để join/filter, chuyển sang pandas để tiếp tục xử lý.
    

**Ngày 791: Thiết kế Schema Dữ liệu cho Hệ thống Forecasting**

*   Mục tiêu: Có thiết kế dữ liệu chuẩn hóa, dễ mở rộng.
    
*   Lý thuyết: Long format vs wide format, schema chuẩn (date, indicator\_code, value, source, vintage).
    
*   Thực hành: Thiết kế schema chi tiết cho toàn bộ dữ liệu kinh tế sẽ lưu trữ.
    

**Ngày 792: Định dạng Lưu trữ**

*   Mục tiêu: Chọn định dạng lưu trữ phù hợp.
    
*   Lý thuyết: CSV (đơn giản, dễ đọc) vs Parquet (nén tốt, nhanh, giữ kiểu dữ liệu) vs database (SQLite/PostgreSQL cho truy vấn phức tạp).
    
*   Thực hành: So sánh dung lượng và tốc độ đọc giữa CSV và Parquet cho cùng bộ dữ liệu.
    

**Ngày 793: Xây dựng Data Pipeline Tự động - Kiến trúc**

*   Mục tiêu: Thiết kế pipeline có thể chạy lặp lại tự động.
    
*   Lý thuyết: Kiến trúc pipeline: extract functions → transform functions → load functions, tách biệt rõ ràng.
    
*   Thực hành: Vẽ sơ đồ kiến trúc pipeline sẽ xây dựng trong project.
    

**Ngày 794: Scheduling - Chạy Pipeline Định kỳ**

*   Mục tiêu: Biết cách tự động hóa việc chạy pipeline theo lịch.
    
*   Lý thuyết: Cron job cơ bản, giới thiệu sơ lược Airflow (sẽ học sâu ở Giai đoạn 8).
    
*   Thực hành: Viết crontab đơn giản để chạy script Python thu thập dữ liệu hàng ngày.
    

**Ngày 795: Idempotency trong Data Pipeline**

*   Mục tiêu: Hiểu nguyên tắc thiết kế quan trọng cho pipeline đáng tin cậy.
    
*   Lý thuyết: Idempotency - chạy pipeline nhiều lần cho cùng kết quả, không tạo dữ liệu trùng lặp.
    
*   Thực hành: Rà soát và sửa lại pipeline đã viết để đảm bảo idempotent (dùng upsert thay vì insert đơn thuần).
    

**Ngày 796: Logging và Monitoring cho Pipeline**

*   Mục tiêu: Có khả năng theo dõi tình trạng pipeline.
    
*   Lý thuyết: Python `logging` module, các mức log (INFO, WARNING, ERROR).
    
*   Thực hành: Thêm logging đầy đủ vào pipeline: log số dòng dữ liệu tải được, thời gian chạy, lỗi nếu có.
    

**Ngày 797: Xử lý Lỗi trong Pipeline**

*   Mục tiêu: Xây dựng pipeline bền vững trước lỗi.
    
*   Lý thuyết: Retry logic, alerting khi pipeline thất bại.
    
*   Thực hành: Thêm cơ chế retry (thử lại 3 lần khi API timeout) vào `DataFetcher`.
    

**Ngày 798: Version Control cho Dữ liệu**

*   Mục tiêu: Biết công cụ quản lý phiên bản dữ liệu (khác với code).
    
*   Lý thuyết: Giới thiệu DVC (Data Version Control), lý do cần thiết khi dữ liệu thay đổi theo thời gian (data revisions).
    
*   Thực hành: Cài đặt DVC cơ bản, thử track một file dữ liệu.
    

**Ngày 799: Project ETL - Thiết kế Pipeline Tổng thể**

*   Mục tiêu: Bắt đầu project ETL toàn diện cho toàn bộ dữ liệu Việt Nam.
    
*   Lý thuyết: Ôn lại kiến trúc đã thiết kế (Ngày 793).
    
*   Thực hành: Viết tài liệu thiết kế chi tiết cho pipeline (nguồn, tần suất, schema đích).
    

**Ngày 800: Project ETL - Cài đặt Extraction Layer**

*   Mục tiêu: Xây lớp thu thập dữ liệu.
    
*   Lý thuyết: Ôn lại `DataFetcher` (Ngày 779).
    
*   Thực hành: Hoàn thiện module extraction cho toàn bộ nguồn (IMF, World Bank, FRED, GSO).
    

**Ngày 801: Project ETL - Cài đặt Transformation Layer**

*   Mục tiêu: Xây lớp biến đổi dữ liệu.
    
*   Lý thuyết: Ôn lại chuẩn hóa schema (long format), resampling tần suất.
    
*   Thực hành: Viết module transform chuyển đổi dữ liệu thô về schema chuẩn đã thiết kế.
    

**Ngày 802: Project ETL - Cài đặt Loading Layer**

*   Mục tiêu: Xây lớp lưu trữ dữ liệu.
    
*   Lý thuyết: Ôn lại lựa chọn định dạng lưu trữ (Parquet/SQLite).
    
*   Thực hành: Viết module load lưu dữ liệu đã transform vào kho lưu trữ đã chọn.
    

**Ngày 803: Project ETL - Thêm Logging và Error Handling**

*   Mục tiêu: Hoàn thiện tính bền vững của pipeline.
    
*   Lý thuyết: Ôn lại logging, retry logic.
    
*   Thực hành: Tích hợp đầy đủ logging và error handling vào toàn bộ pipeline.
    

**Ngày 804: Project ETL - Kiểm thử Đầu cuối**

*   Mục tiêu: Xác nhận pipeline hoạt động chính xác toàn diện.
    
*   Lý thuyết: End-to-end testing cho data pipeline.
    
*   Thực hành: Chạy toàn bộ pipeline từ đầu đến cuối, kiểm tra dữ liệu đầu ra khớp với kỳ vọng.
    

**Ngày 805: Tổng kết ETL**

*   Mục tiêu: Củng cố toàn bộ Phần B.
    
*   Lý thuyết: Ôn tập Ngày 781–804.
    
*   Thực hành: Viết tài liệu vận hành (runbook) mô tả cách chạy và bảo trì pipeline ETL đã xây.
    

### PHẦN C: DATA QUALITY (Ngày 806–825)

**Ngày 806: Tầm quan trọng của Data Quality trong Forecasting**

*   Mục tiêu: Hiểu nguyên tắc "garbage in, garbage out" áp dụng cho forecasting.
    
*   Lý thuyết: Data quality ảnh hưởng trực tiếp đến độ tin cậy của mọi mô hình đã học từ đầu syllabus.
    
*   Thực hành: Thảo luận ví dụ cụ thể: một lỗi dữ liệu nhỏ có thể làm sai lệch dự báo CPI thế nào.
    

**Ngày 807: Missing Values - Phân loại**

*   Mục tiêu: Hiểu các cơ chế khác nhau gây ra dữ liệu thiếu.
    
*   Lý thuyết: MCAR (Missing Completely At Random), MAR (Missing At Random), MNAR (Missing Not At Random).
    
*   Thực hành: Phân loại các trường hợp missing values đã gặp trong dữ liệu Việt Nam đã thu thập theo 3 loại trên.
    

**Ngày 808: Xử lý Missing Values - Phương pháp Cơ bản**

*   Mục tiêu: Biết các kỹ thuật đơn giản nhất.
    
*   Lý thuyết: Drop rows/columns, forward fill, backward fill, mean/median imputation.
    
*   Thực hành: Áp dụng từng phương pháp cho một chuỗi có missing values, so sánh kết quả.
    

**Ngày 809: Xử lý Missing Values - Interpolation**

*   Mục tiêu: Biết phương pháp phù hợp hơn cho time series.
    
*   Lý thuyết: Linear interpolation, spline interpolation.
    
*   Thực hành: So sánh kết quả interpolation tuyến tính và spline cho một chuỗi kinh tế có missing values.
    

**Ngày 810: Xử lý Missing Values - Kalman-based Imputation**

*   Mục tiêu: Áp dụng lại kỹ thuật nâng cao đã học ở Giai đoạn 4.
    
*   Lý thuyết: Ôn lại Kalman Filter xử lý missing data (Ngày 417).
    
*   Thực hành: So sánh kết quả imputation giữa interpolation đơn giản và Kalman-based cho cùng một chuỗi.
    

**Ngày 811: Phát hiện Outlier trong Dữ liệu Kinh tế**

*   Mục tiêu: Nhận diện các giá trị bất thường có thể là lỗi hoặc sự kiện thực.
    
*   Lý thuyết: Outlier detection methods: Z-score, IQR method, so sánh với biến động lịch sử.
    
*   Thực hành: Áp dụng IQR method để phát hiện outlier trong toàn bộ chuỗi dữ liệu Việt Nam đã có.
    

**Ngày 812: Xử lý Outliers**

*   Mục tiêu: Biết cách xử lý outlier một cách hợp lý (không đơn giản là xóa).
    
*   Lý thuyết: Winsorization, robust statistics, phân biệt outlier do lỗi dữ liệu vs sự kiện kinh tế thực (VD: COVID).
    
*   Thực hành: Quyết định xử lý cho từng outlier đã phát hiện - giữ lại (nếu là sự kiện thực) hay winsorize (nếu nghi ngờ lỗi).
    

**Ngày 813: Data Revisions - Bản chất và Tác động**

*   Mục tiêu: Củng cố hiểu biết đã học sơ lược ở Giai đoạn 6 (Ngày 638).
    
*   Lý thuyết: Data revisions ảnh hưởng đến cả việc xây mô hình (dùng số liệu nào) và đánh giá (real-time vs final).
    
*   Thực hành: Tìm ví dụ cụ thể GDP hoặc CPI Việt Nam có sự khác biệt giữa số liệu sơ bộ và số liệu điều chỉnh (nếu có thể tra cứu được).
    

**Ngày 814: Xây dựng Cơ sở Dữ liệu Vintage - Lý thuyết**

*   Mục tiêu: Hiểu thiết kế cần thiết để lưu trữ đa phiên bản dữ liệu.
    
*   Lý thuyết: Vintage database design, mỗi quan sát có thêm chiều "ngày công bố/phiên bản".
    
*   Thực hành: Thiết kế schema mở rộng từ Ngày 791 để hỗ trợ lưu vintage (thêm cột `release_date` hoặc `vintage_date`).
    

**Ngày 815: Xây dựng Cơ sở Dữ liệu Vintage - Thực hành**

*   Mục tiêu: Cài đặt thực tế khả năng lưu đa phiên bản.
    
*   Lý thuyết: Ôn lại schema đã thiết kế.
    
*   Thực hành: Sửa lại pipeline ETL (Phần B) để lưu mỗi lần cập nhật là một vintage riêng biệt thay vì ghi đè.
    

**Ngày 816: Đánh giá Tác động của Revisions lên Đánh giá Mô hình**

*   Mục tiêu: Hiểu tại sao đánh giá real-time khác với đánh giá dùng số liệu cuối cùng.
    
*   Lý thuyết: Ôn lại pseudo real-time evaluation (Giai đoạn 4, 6), giờ có nền tảng vintage database để làm chính xác hơn.
    
*   Thực hành: So sánh RMSE của một mô hình khi đánh giá bằng dữ liệu final (đã biết trước) vs vintage data (chỉ dùng thông tin có tại thời điểm đó) - minh họa "phóng đại" hiệu năng nếu dùng sai.
    

**Ngày 817: Kiểm tra Tính Nhất quán Dữ liệu**

*   Mục tiêu: Xây dựng các kiểm tra tự động phát hiện lỗi.
    
*   Lý thuyết: Consistency checks - VD: GDP = C+I+G+NX phải khớp (trong sai số làm tròn), tỷ lệ phần trăm phải nằm trong \[0,100\].
    
*   Thực hành: Viết các hàm kiểm tra consistency cho dữ liệu GDP theo thành phần đã thu thập ở Giai đoạn 1.
    

**Ngày 818: Kiểm tra Logic Nghiệp vụ**

*   Mục tiêu: Xây dựng kiểm tra dựa trên hiểu biết kinh tế.
    
*   Lý thuyết: Business rule validation - VD: lãi suất không âm (thường), CPI YoY phải nhất quán với chuỗi mức giá.
    
*   Thực hành: Viết các business rule cụ thể cho từng loại dữ liệu kinh tế đã thu thập.
    

**Ngày 819: Xây dựng Automated Data Quality Checks**

*   Mục tiêu: Đóng gói toàn bộ kiểm tra thành hệ thống tự động.
    
*   Lý thuyết: Ôn lại toàn bộ các loại kiểm tra đã học (missing, outlier, consistency, business rules).
    
*   Thực hành: Viết class Python `DataQualityChecker` chạy toàn bộ các kiểm tra và trả về báo cáo.
    

**Ngày 820: Data Quality Dashboard/Report**

*   Mục tiêu: Trực quan hóa tình trạng chất lượng dữ liệu.
    
*   Lý thuyết: Data quality report - tỷ lệ missing, số outlier phát hiện, số consistency check thất bại theo từng nguồn.
    
*   Thực hành: Xây dashboard đơn giản (Streamlit) hiển thị kết quả từ `DataQualityChecker`.
    

**Ngày 821: Project Data Quality - Áp dụng Toàn bộ Kiểm tra**

*   Mục tiêu: Chạy toàn diện hệ thống đã xây trên dữ liệu thực.
    
*   Lý thuyết: Ôn lại `DataQualityChecker`.
    
*   Thực hành: Chạy `DataQualityChecker` trên toàn bộ dữ liệu kinh tế Việt Nam đã thu thập xuyên suốt syllabus.
    

**Ngày 822: Project Data Quality - Xử lý Vấn đề Phát hiện**

*   Mục tiêu: Khắc phục các vấn đề chất lượng dữ liệu đã tìm thấy.
    
*   Lý thuyết: Ôn lại các phương pháp xử lý missing/outlier đã học trong Phần C.
    
*   Thực hành: Xử lý từng vấn đề cụ thể được liệt kê trong báo cáo data quality.
    

**Ngày 823: Project Data Quality - Viết Báo cáo**

*   Mục tiêu: Hoàn thiện tài liệu cho project.
    
*   Lý thuyết: Ôn lại cấu trúc báo cáo data quality.
    
*   Thực hành: Viết báo cáo tổng kết chất lượng dữ liệu: vấn đề phát hiện, cách xử lý, tình trạng cuối cùng.
    

**Ngày 824: Ôn tập Giai đoạn 7**

*   Mục tiêu: Củng cố toàn bộ kiến thức trước khi tổng kết.
    
*   Lý thuyết: Ôn tập tổng hợp cả 3 phần: Data Sources, ETL, Data Quality.
    
*   Thực hành: Làm bộ câu hỏi ôn tập tổng hợp về toàn bộ giai đoạn.
    

**Ngày 825: Tổng kết Giai đoạn 7 - Economic Data Engineering**

*   Mục tiêu: Củng cố toàn diện trước khi bước vào Production Forecasting.
    
*   Lý thuyết: Tổng hợp toàn bộ hệ thống dữ liệu đã xây dựng (nguồn → ETL → chất lượng → vintage database).
    
*   Thực hành: Viết sơ đồ kiến trúc tổng thể hệ thống dữ liệu hoàn chỉnh, làm nền tảng hạ tầng cho Giai đoạn 8 (Production Forecasting) và các Capstone sau này.
    

## Giai đoạn 8 - Production Forecasting (Ngày 826–915, 90 ngày)

### PHẦN A: MLOPS (Ngày 826–870)

**Ngày 826: Giới thiệu MLOps cho Forecasting Systems**

*   Mục tiêu: Hiểu vì sao một mô hình tốt trong notebook chưa đủ để chạy production.
    
*   Lý thuyết: MLOps, khoảng cách giữa nghiên cứu (research) và triển khai thực tế (production).
    
*   Thực hành: Liệt kê những gì còn thiếu để biến các project đã xây (Giai đoạn 3-6) thành hệ thống chạy tự động hàng ngày.
    

**Ngày 827: Vòng đời của Mô hình Forecasting trong Production**

*   Mục tiêu: Hiểu toàn bộ chu trình từ dữ liệu đến dự báo được sử dụng.
    
*   Lý thuyết: ML lifecycle: data → train → validate → deploy → monitor → retrain.
    
*   Thực hành: Vẽ sơ đồ vòng đời đầy đủ áp dụng cho hệ thống nowcasting đã xây ở Giai đoạn 6.
    

**Ngày 828: Reproducibility**

*   Mục tiêu: Hiểu tầm quan trọng của khả năng tái lập kết quả.
    
*   Lý thuyết: Reproducibility - cùng code, cùng dữ liệu phải cho cùng kết quả; random seed, environment pinning.
    
*   Thực hành: Rà soát lại một project cũ (VD: XGBoost CPI ở Giai đoạn 5), thêm random seed cố định để đảm bảo tái lập được.
    

**Ngày 829: Quản lý Môi trường**

*   Mục tiêu: Đảm bảo môi trường chạy nhất quán.
    
*   Lý thuyết: Virtualenv, conda, `requirements.txt`/`pyproject.toml`.
    
*   Thực hành: Tạo file `requirements.txt` đầy đủ cho toàn bộ dependencies đã dùng xuyên suốt syllabus.
    

**Ngày 830: Giới thiệu Docker**

*   Mục tiêu: Hiểu khái niệm containerization.
    
*   Lý thuyết: Docker, container vs virtual machine, lợi ích cho reproducibility.
    
*   Thực hành: Cài đặt Docker, chạy thử container "hello world" đầu tiên.
    

**Ngày 831: Docker - Viết Dockerfile Cơ bản**

*   Mục tiêu: Tự đóng gói môi trường Python.
    
*   Lý thuyết: Cú pháp Dockerfile: FROM, COPY, RUN, CMD.
    
*   Thực hành: Viết Dockerfile đóng gói môi trường Python với các thư viện forecasting đã dùng.
    

**Ngày 832: Docker - Build và Run Container**

*   Mục tiêu: Chạy được pipeline forecasting bên trong container.
    
*   Lý thuyết: Ôn lại `docker build`, `docker run`, volume mounting.
    
*   Thực hành: Build image từ Dockerfile đã viết, chạy pipeline ETL (Giai đoạn 7) bên trong container.
    

**Ngày 833: Docker Compose**

*   Mục tiêu: Quản lý nhiều container phối hợp với nhau.
    
*   Lý thuyết: Docker Compose, định nghĩa multi-container application (VD: pipeline + database).
    
*   Thực hành: Viết `docker-compose.yml` kết hợp container Python pipeline với container database (Postgres).
    

**Ngày 834: Giới thiệu MLflow**

*   Mục tiêu: Biết công cụ chuẩn để theo dõi thí nghiệm ML.
    
*   Lý thuyết: MLflow, các thành phần chính (Tracking, Projects, Models, Model Registry).
    
*   Thực hành: Cài đặt MLflow, chạy MLflow UI lần đầu.
    

**Ngày 835: MLflow Tracking**

*   Mục tiêu: Ghi lại thông tin thí nghiệm một cách có hệ thống.
    
*   Lý thuyết: `mlflow.log_param`, `mlflow.log_metric`, `mlflow.log_artifact`.
    
*   Thực hành: Thêm MLflow tracking vào một quy trình fit XGBoost đơn giản, log tham số và RMSE.
    

**Ngày 836: MLflow - So sánh Nhiều lần Chạy**

*   Mục tiêu: Sử dụng MLflow để so sánh các thí nghiệm.
    
*   Lý thuyết: MLflow UI, so sánh nhiều run trên cùng một biểu đồ/bảng.
    
*   Thực hành: Chạy nhiều lần với hyperparameter khác nhau, so sánh trên MLflow UI.
    

**Ngày 837: MLflow Model Registry**

*   Mục tiêu: Quản lý vòng đời phiên bản mô hình.
    
*   Lý thuyết: Model Registry, các stage (Staging, Production, Archived).
    
*   Thực hành: Đăng ký một mô hình đã train vào Model Registry, chuyển qua các stage.
    

**Ngày 838: MLflow - Đóng gói Mô hình để Deploy**

*   Mục tiêu: Chuẩn bị mô hình sẵn sàng phục vụ dự báo.
    
*   Lý thuyết: MLflow Model format, `mlflow.pyfunc` cho mô hình tùy chỉnh (VD: ARIMA/statsmodels không chuẩn sklearn).
    
*   Thực hành: Đóng gói một mô hình ARIMA bằng `mlflow.pyfunc` custom wrapper.
    

**Ngày 839: Project MLflow - Tích hợp vào Pipeline đã xây**

*   Mục tiêu: Áp dụng MLflow cho các mô hình thực tế đã có.
    
*   Lý thuyết: Ôn lại toàn bộ API MLflow đã học.
    
*   Thực hành: Tích hợp MLflow tracking vào pipeline XGBoost/LSTM dự báo CPI đã xây ở Giai đoạn 5.
    

**Ngày 840: Project MLflow - Log Toàn bộ Experiment**

*   Mục tiêu: Có lịch sử đầy đủ các thí nghiệm đã thực hiện xuyên suốt syllabus.
    
*   Lý thuyết: Ôn lại cách tổ chức experiment theo tên (ARIMA, VAR, XGBoost, LSTM, TFT...).
    
*   Thực hành: Chạy lại và log các mô hình chính từ Giai đoạn 3-5 vào MLflow, tạo bảng so sánh tổng hợp.
    

**Ngày 841: Giới thiệu Apache Airflow**

*   Mục tiêu: Biết công cụ orchestration chuẩn cho pipeline phức tạp.
    
*   Lý thuyết: Airflow, vai trò điều phối các bước pipeline có phụ thuộc lẫn nhau.
    
*   Thực hành: Cài đặt Airflow (qua Docker để đơn giản), truy cập Airflow UI.
    

**Ngày 842: Airflow - Khái niệm DAG**

*   Mục tiêu: Hiểu đơn vị tổ chức cơ bản của Airflow.
    
*   Lý thuyết: Directed Acyclic Graph (DAG), task dependencies.
    
*   Thực hành: Vẽ sơ đồ DAG cho pipeline ETL → train → evaluate đã có.
    

**Ngày 843: Airflow - Viết DAG Đầu tiên**

*   Mục tiêu: Tự viết được một DAG đơn giản.
    
*   Lý thuyết: Ôn lại cú pháp Python DAG definition (`@dag`, `@task` decorators).
    
*   Thực hành: Viết DAG đơn giản gồm 2-3 task tuần tự (extract → transform → load).
    

**Ngày 844: Airflow - Operators và Tasks**

*   Mục tiêu: Biết các loại operator phổ biến.
    
*   Lý thuyết: PythonOperator, BashOperator, và các operator khác.
    
*   Thực hành: Viết task sử dụng PythonOperator để gọi hàm ETL đã xây ở Giai đoạn 7.
    

**Ngày 845: Airflow - Scheduling và Trigger Rules**

*   Mục tiêu: Điều khiển thời điểm và điều kiện chạy pipeline.
    
*   Lý thuyết: Schedule interval (cron-like), trigger rules (all\_success, one\_failed...).
    
*   Thực hành: Cấu hình DAG chạy hàng ngày lúc 6h sáng (giả lập).
    

**Ngày 846: Airflow - XCom**

*   Mục tiêu: Truyền dữ liệu giữa các task.
    
*   Lý thuyết: XCom (cross-communication), giới hạn kích thước dữ liệu truyền qua XCom.
    
*   Thực hành: Sửa DAG để task "transform" nhận đường dẫn file từ task "extract" qua XCom.
    

**Ngày 847: Airflow - Error Handling và Retry**

*   Mục tiêu: Xây DAG bền vững trước lỗi.
    
*   Lý thuyết: Ôn lại retry logic (đã học Giai đoạn 7), áp dụng cấu hình `retries`, `retry_delay` trong Airflow.
    
*   Thực hành: Cấu hình retry cho task extraction (dễ gặp lỗi mạng khi gọi API).
    

**Ngày 848: Airflow - Monitoring qua UI**

*   Mục tiêu: Sử dụng UI để theo dõi tình trạng pipeline.
    
*   Lý thuyết: Airflow UI - Graph view, Gantt chart, Task logs.
    
*   Thực hành: Chạy DAG và theo dõi tiến trình qua UI, đọc log khi có lỗi giả lập.
    

**Ngày 849: Project Airflow - Chuyển đổi Pipeline ETL**

*   Mục tiêu: Đưa pipeline ETL đã xây (Giai đoạn 7) vào Airflow.
    
*   Lý thuyết: Ôn lại kiến trúc extraction/transformation/loading layer.
    
*   Thực hành: Viết DAG hoàn chỉnh cho pipeline ETL với các task tương ứng.
    

**Ngày 850: Project Airflow - Thêm Task Ước lượng Mô hình**

*   Mục tiêu: Mở rộng DAG để bao gồm bước huấn luyện mô hình.
    
*   Lý thuyết: Ôn lại cách gọi hàm train mô hình (VD: XGBoost CPI) từ task Airflow.
    
*   Thực hành: Thêm task "train\_model" vào DAG, phụ thuộc vào task ETL đã hoàn thành.
    

**Ngày 851: Project Airflow - Thêm Task Đánh giá và Log MLflow**

*   Mục tiêu: Hoàn thiện DAG với bước đánh giá và ghi lại kết quả.
    
*   Lý thuyết: Ôn lại tích hợp MLflow (Ngày 839).
    
*   Thực hành: Thêm task "evaluate\_and\_log" gọi MLflow tracking sau khi train xong.
    

**Ngày 852: Project Airflow - Kiểm thử Toàn bộ DAG**

*   Mục tiêu: Xác nhận DAG hoạt động đúng đầu cuối.
    
*   Lý thuyết: Ôn lại end-to-end testing (đã học Giai đoạn 7).
    
*   Thực hành: Chạy toàn bộ DAG (Extract → Transform → Load → Train → Evaluate), kiểm tra kết quả trên MLflow UI.
    

**Ngày 853: Giới thiệu Kubernetes**

*   Mục tiêu: Biết khái niệm cơ bản về orchestration container ở quy mô lớn.
    
*   Lý thuyết: Kubernetes (K8s), quản lý và scale container tự động.
    
*   Thực hành: Đọc tổng quan kiến trúc Kubernetes, không cần cài đặt đầy đủ nếu môi trường hạn chế.
    

**Ngày 854: Kubernetes - Pods, Deployments, Services**

*   Mục tiêu: Hiểu các đối tượng cơ bản của K8s.
    
*   Lý thuyết: Pod (đơn vị chạy container nhỏ nhất), Deployment (quản lý số lượng pod), Service (network access).
    
*   Thực hành: Đọc và diễn giải một file YAML cấu hình Deployment mẫu.
    

**Ngày 855: Khi nào cần Kubernetes cho Forecasting System**

*   Mục tiêu: Có quan điểm thực dụng, tránh over-engineering.
    
*   Lý thuyết: K8s hữu ích khi cần scale nhiều instance, high availability; với hệ thống forecasting kinh tế vĩ mô quy mô nhỏ, Docker Compose thường đã đủ.
    
*   Thực hành: Thảo luận: hệ thống nowcasting Việt Nam đã xây (Giai đoạn 6) có cần Kubernetes không, tại sao.
    

**Ngày 856: Model Serving - Khái niệm**

*   Mục tiêu: Hiểu cách biến mô hình thành dịch vụ có thể gọi được.
    
*   Lý thuyết: Model serving, batch prediction vs real-time serving.
    
*   Thực hành: Thảo luận: hệ thống dự báo CPI hàng tháng cần batch hay real-time serving?
    

**Ngày 857: Xây dựng REST API bằng FastAPI**

*   Mục tiêu: Tạo giao diện lập trình để truy cập mô hình.
    
*   Lý thuyết: FastAPI, framework Python hiện đại cho xây API nhanh.
    
*   Thực hành: Viết API FastAPI cơ bản với 1 endpoint trả về "hello world".
    

**Ngày 858: FastAPI - Endpoint Dự báo**

*   Mục tiêu: Xây endpoint thực tế trả về kết quả dự báo.
    
*   Lý thuyết: Request/response models bằng Pydantic, input validation.
    
*   Thực hành: Viết endpoint `/forecast/cpi` load mô hình XGBoost đã train và trả về dự báo.
    

**Ngày 859: Đóng gói API bằng Docker**

*   Mục tiêu: Chuẩn bị API sẵn sàng triển khai.
    
*   Lý thuyết: Ôn lại Dockerfile, áp dụng cho ứng dụng FastAPI.
    
*   Thực hành: Viết Dockerfile cho API, build và chạy container, test gọi API.
    

**Ngày 860: Giới thiệu CI/CD cho ML Systems**

*   Mục tiêu: Hiểu quy trình tự động hóa kiểm thử và triển khai.
    
*   Lý thuyết: Continuous Integration/Continuous Deployment, đặc thù khi áp dụng cho ML (thêm bước kiểm thử mô hình, không chỉ code).
    
*   Thực hành: Vẽ sơ đồ quy trình CI/CD cho hệ thống forecasting đã xây.
    

**Ngày 861: CI/CD - GitHub Actions Cơ bản**

*   Mục tiêu: Thực hành công cụ CI/CD phổ biến.
    
*   Lý thuyết: GitHub Actions, cú pháp YAML workflow cơ bản.
    
*   Thực hành: Viết workflow đơn giản tự động chạy test khi push code lên GitHub.
    

**Ngày 862: Testing cho ML Pipeline**

*   Mục tiêu: Hiểu các loại kiểm thử cần thiết.
    
*   Lý thuyết: Unit test (từng hàm), integration test (toàn bộ pipeline), data validation test.
    
*   Thực hành: Liệt kê danh sách các hàm/module cần test trong hệ thống đã xây (feature engineering, model training, API).
    

**Ngày 863: Viết Unit Test cho Feature Engineering**

*   Mục tiêu: Thực hành viết test cụ thể.
    
*   Lý thuyết: `pytest` cơ bản, assert statements.
    
*   Thực hành: Viết unit test cho các hàm tạo lag/rolling features đã viết ở Giai đoạn 5.
    

**Ngày 864: Viết Integration Test cho Pipeline**

*   Mục tiêu: Kiểm thử toàn bộ luồng hoạt động.
    
*   Lý thuyết: Integration test, kiểm tra đầu ra cuối cùng đúng định dạng và hợp lý.
    
*   Thực hành: Viết integration test chạy toàn bộ pipeline ETL → feature → predict, kiểm tra output shape và giá trị hợp lý.
    

**Ngày 865: Infrastructure as Code**

*   Mục tiêu: Biết khái niệm quản lý hạ tầng bằng code.
    
*   Lý thuyết: Infrastructure as Code (IaC), giới thiệu sơ lược Terraform.
    
*   Thực hành: Đọc một file Terraform mẫu, diễn giải nó định nghĩa hạ tầng gì.
    

**Ngày 866: Project MLOps Toàn diện - Kiến trúc Hệ thống**

*   Mục tiêu: Thiết kế hệ thống MLOps hoàn chỉnh cho toàn bộ syllabus.
    
*   Lý thuyết: Ôn lại toàn bộ thành phần: Docker, MLflow, Airflow, FastAPI.
    
*   Thực hành: Vẽ sơ đồ kiến trúc tổng thể kết hợp toàn bộ công cụ đã học.
    

**Ngày 867: Project MLOps Toàn diện - Containerize Pipeline**

*   Mục tiêu: Đóng gói toàn bộ hệ thống.
    
*   Lý thuyết: Ôn lại Docker Compose cho multi-service.
    
*   Thực hành: Viết `docker-compose.yml` kết hợp Airflow, MLflow, database, API.
    

**Ngày 868: Project MLOps Toàn diện - Orchestrate bằng Airflow**

*   Mục tiêu: Kết nối toàn bộ pipeline qua Airflow.
    
*   Lý thuyết: Ôn lại DAG đã xây (Ngày 849-852).
    
*   Thực hành: Hoàn thiện DAG tổng thể: ETL → Feature Engineering → Train → Evaluate → Log MLflow → Update model registry.
    

**Ngày 869: Project MLOps Toàn diện - Deploy API Dự báo**

*   Mục tiêu: Có endpoint sống phục vụ dự báo từ mô hình mới nhất trong registry.
    
*   Lý thuyết: Ôn lại FastAPI load mô hình từ MLflow Model Registry (thay vì file cố định).
    
*   Thực hành: Sửa API để tự động load phiên bản mô hình "Production" mới nhất từ MLflow.
    

**Ngày 870: Tổng kết MLOps**

*   Mục tiêu: Củng cố toàn bộ Phần A.
    
*   Lý thuyết: Ôn tập Ngày 826–869.
    
*   Thực hành: Viết tài liệu kiến trúc hệ thống MLOps hoàn chỉnh (data flow diagram + component list) làm tài liệu tham khảo cho Capstone sau này.
    

### PHẦN B: FORECAST MONITORING (Ngày 871–890)

**Ngày 871: Giới thiệu Forecast Monitoring**

*   Mục tiêu: Hiểu vì sao cần giám sát liên tục sau khi deploy.
    
*   Lý thuyết: Model performance có thể suy giảm theo thời gian dù không có lỗi kỹ thuật (data drift, concept drift - sẽ học sâu ở Phần C).
    
*   Thực hành: Thảo luận: nếu không giám sát, làm sao biết mô hình CPI đã xây bắt đầu dự báo kém đi?
    

**Ngày 872: Thiết kế Hệ thống Theo dõi Metric**

*   Mục tiêu: Lên kế hoạch cho hệ thống giám sát.
    
*   Lý thuyết: Các thành phần: log dự báo, log giá trị thực tế khi có, tính metric định kỳ.
    
*   Thực hành: Vẽ sơ đồ luồng dữ liệu cho hệ thống monitoring sẽ xây.
    

**Ngày 873: Theo dõi MAE/RMSE theo Thời gian**

*   Mục tiêu: Thực hành theo dõi metric cơ bản.
    
*   Lý thuyết: Ôn lại rolling evaluation (Giai đoạn 5), áp dụng liên tục theo thời gian thực.
    
*   Thực hành: Viết hàm tính rolling RMSE 12 tháng gần nhất, cập nhật mỗi khi có dữ liệu thực tế mới.
    

**Ngày 874: Theo dõi MAPE và Metric Tương đối**

*   Mục tiêu: Bổ sung góc nhìn tương đối bên cạnh MAE/RMSE.
    
*   Lý thuyết: Ôn lại MAPE/SMAPE (Giai đoạn 5), phù hợp để so sánh giữa các chuỗi có độ lớn khác nhau.
    
*   Thực hành: Tính rolling MAPE cho CPI và GDP, so sánh mức độ biến động.
    

**Ngày 875: Alerting khi Hiệu năng Suy giảm**

*   Mục tiêu: Thiết lập cơ chế cảnh báo tự động.
    
*   Lý thuyết: Ngưỡng cảnh báo (VD: RMSE vượt quá 1.5 lần mức trung bình lịch sử).
    
*   Thực hành: Viết hàm kiểm tra ngưỡng và gửi cảnh báo (in ra log/email giả lập) khi RMSE vượt ngưỡng.
    

**Ngày 876: Xây dựng Dashboard Giám sát Hiệu năng**

*   Mục tiêu: Trực quan hóa tình trạng mô hình theo thời gian thực.
    
*   Lý thuyết: Ôn lại Streamlit (đã dùng ở Giai đoạn 1, 6).
    
*   Thực hành: Xây dashboard hiển thị rolling RMSE/MAPE, actual vs predicted qua thời gian.
    

**Ngày 877: So sánh Hiệu năng Across Mô hình theo Thời gian**

*   Mục tiêu: Theo dõi đồng thời nhiều mô hình.
    
*   Lý thuyết: Ôn lại các mô hình đã xây (ARIMA, XGBoost, LSTM, TFT) cho cùng một biến mục tiêu.
    
*   Thực hành: Mở rộng dashboard để hiển thị hiệu năng của nhiều mô hình song song.
    

**Ngày 878: Model Champion/Challenger Framework**

*   Mục tiêu: Biết cách quản lý việc chọn mô hình chính thức đang phục vụ.
    
*   Lý thuyết: Champion (mô hình đang production) vs Challenger (mô hình mới đang thử nghiệm).
    
*   Thực hành: Thiết kế quy trình: challenger phải vượt champion trên rolling window bao nhiêu kỳ mới được thay thế.
    

**Ngày 879: A/B Testing cho Mô hình Forecasting**

*   Mục tiêu: Biết phương pháp so sánh khách quan giữa hai mô hình trong production.
    
*   Lý thuyết: A/B testing áp dụng cho forecasting (khác với A/B test sản phẩm thông thường - thường dùng song song trên các horizon/thời điểm khác nhau).
    
*   Thực hành: Thiết kế thử nghiệm A/B đơn giản: chạy song song 2 mô hình CPI, so sánh sau 6 tháng.
    

**Ngày 880: Logging Dự báo và Giá trị Thực tế**

*   Mục tiêu: Xây dựng nền tảng dữ liệu cho việc giám sát lâu dài.
    
*   Lý thuyết: Prediction log schema (ngày dự báo, model version, giá trị dự báo, giá trị thực tế khi có).
    
*   Thực hành: Thiết kế và cài đặt bảng log dự báo trong database đã có (từ Giai đoạn 7).
    

**Ngày 881: Backtesting Định kỳ**

*   Mục tiêu: Đảm bảo mô hình vẫn tốt khi đánh giá lại theo lịch.
    
*   Lý thuyết: Backtesting định kỳ (VD: hàng quý), re-run toàn bộ walk-forward validation với dữ liệu mới nhất.
    
*   Thực hành: Thiết kế quy trình backtest tự động chạy mỗi quý.
    

**Ngày 882: Project Monitoring - Xây Hệ thống Log Dự báo**

*   Mục tiêu: Bắt đầu project monitoring toàn diện.
    
*   Lý thuyết: Ôn lại schema log (Ngày 880).
    
*   Thực hành: Cài đặt hệ thống tự động log mỗi lần mô hình đưa ra dự báo.
    

**Ngày 883: Project Monitoring - Xây Dashboard Giám sát**

*   Mục tiêu: Hoàn thiện giao diện theo dõi.
    
*   Lý thuyết: Ôn lại thiết kế dashboard (Ngày 876-877).
    
*   Thực hành: Xây dashboard đầy đủ: rolling metrics, so sánh mô hình, lịch sử dự báo vs thực tế.
    

**Ngày 884: Project Monitoring - Thiết lập Alerting**

*   Mục tiêu: Hoàn thiện cơ chế cảnh báo.
    
*   Lý thuyết: Ôn lại ngưỡng cảnh báo (Ngày 875).
    
*   Thực hành: Tích hợp alerting vào hệ thống, test bằng cách giả lập một giai đoạn dự báo kém.
    

**Ngày 885: Project Monitoring - Backtesting Định kỳ Tự động**

*   Mục tiêu: Tự động hóa việc tái đánh giá.
    
*   Lý thuyết: Ôn lại thiết kế backtest (Ngày 881), tích hợp vào Airflow DAG (Phần A).
    
*   Thực hành: Thêm task backtest định kỳ vào Airflow DAG đã xây.
    

**Ngày 886: Project Monitoring - Kiểm thử Toàn bộ Hệ thống**

*   Mục tiêu: Xác nhận toàn bộ hệ thống monitoring hoạt động đúng.
    
*   Lý thuyết: Ôn lại end-to-end testing.
    
*   Thực hành: Chạy thử toàn bộ chu trình: dự báo → log → so sánh với thực tế → cập nhật dashboard → kiểm tra alert.
    

**Ngày 887: Project Monitoring - Viết Báo cáo**

*   Mục tiêu: Hoàn thiện tài liệu cho project.
    
*   Lý thuyết: Ôn lại cấu trúc báo cáo hệ thống.
    
*   Thực hành: Viết báo cáo mô tả kiến trúc và cách vận hành hệ thống monitoring đã xây.
    

**Ngày 888: Case study - Giám sát Mô hình tại Tổ chức Tài chính**

*   Mục tiêu: Học từ thực tiễn ngành.
    
*   Lý thuyết: Đọc tổng quan cách các ngân hàng/quỹ đầu tư giám sát mô hình dự báo/rủi ro của họ.
    
*   Thực hành: Tóm tắt 1 case study thực tế về model monitoring trong tài chính.
    

**Ngày 889: Ôn tập Forecast Monitoring**

*   Mục tiêu: Củng cố kiến thức Phần B.
    
*   Lý thuyết: Ôn tập Ngày 871–888.
    
*   Thực hành: Làm bộ câu hỏi ôn tập tổng hợp về monitoring, alerting, champion/challenger.
    

**Ngày 890: Tổng kết Forecast Monitoring**

*   Mục tiêu: Củng cố toàn bộ Phần B.
    
*   Lý thuyết: Tổng hợp toàn bộ hệ thống giám sát đã xây.
    
*   Thực hành: Cập nhật sơ đồ kiến trúc tổng thể (từ Ngày 870) để bao gồm cả lớp monitoring.
    

### PHẦN C: CONCEPT DRIFT (Ngày 891–915)

**Ngày 891: Giới thiệu Concept Drift**

*   Mục tiêu: Hiểu khái niệm cốt lõi của phần này.
    
*   Lý thuyết: Concept drift - mối quan hệ thống kê giữa biến đầu vào và đầu ra thay đổi theo thời gian.
    
*   Thực hành: Thảo luận ví dụ cụ thể trong kinh tế: mối quan hệ lãi suất-lạm phát có thể thay đổi qua các giai đoạn.
    

**Ngày 892: Phân loại Concept Drift**

*   Mục tiêu: Hiểu các dạng drift khác nhau.
    
*   Lý thuyết: Sudden drift (thay đổi đột ngột), gradual drift (thay đổi từ từ), recurring drift (lặp lại theo chu kỳ).
    
*   Thực hành: Phân loại các sự kiện kinh tế đã biết (COVID, khủng hoảng 2008, thay đổi chính sách) theo 3 dạng trên.
    

**Ngày 893: Regime Shift trong Kinh tế**

*   Mục tiêu: Hiểu khái niệm gần gũi trong kinh tế học.
    
*   Lý thuyết: Regime shift, giai đoạn kinh tế chuyển từ trạng thái này sang trạng thái khác (VD: từ lạm phát thấp sang lạm phát cao).
    
*   Thực hành: Xác định các regime rõ ràng trong lịch sử kinh tế Việt Nam (dựa trên dữ liệu đã có).
    

**Ngày 894: Phát hiện Regime Shift - Phương pháp Thống kê**

*   Mục tiêu: Kết nối lại với kiến thức đã học.
    
*   Lý thuyết: Ôn lại Markov-switching models (đã gợi ý bổ sung ban đầu), Chow test (Giai đoạn 2, Ngày 174).
    
*   Thực hành: Áp dụng lại Chow test để xác định điểm gãy cấu trúc trong chuỗi CPI/GDP Việt Nam.
    

**Ngày 895: Phát hiện Concept Drift - CUSUM và Page-Hinkley**

*   Mục tiêu: Biết các thuật toán phát hiện drift chuyên dụng.
    
*   Lý thuyết: CUSUM (Cumulative Sum) test, Page-Hinkley test - theo dõi tích lũy sai lệch để phát hiện thay đổi.
    
*   Thực hành: Cài đặt CUSUM test đơn giản, áp dụng cho chuỗi residual của mô hình CPI.
    

**Ngày 896: Phát hiện Concept Drift bằng ML**

*   Mục tiêu: Biết hướng tiếp cận hiện đại dựa trên giám sát residual.
    
*   Lý thuyết: Drift detection trên distribution của residuals/errors theo thời gian (ADWIN, DDM - giới thiệu khái niệm).
    
*   Thực hành: Vẽ rolling distribution của residual mô hình CPI qua các giai đoạn, quan sát thay đổi bằng mắt trước khi thử thuật toán.
    

**Ngày 897: Case study - COVID-19 như một Cú sốc Kinh tế Lớn**

*   Mục tiêu: Phân tích sâu một trường hợp sudden drift điển hình.
    
*   Lý thuyết: Ôn lại tác động COVID lên các chuỗi kinh tế đã học rải rác (Giai đoạn 1, 3).
    
*   Thực hành: Vẽ toàn bộ các chuỗi kinh tế chính (GDP, CPI, thất nghiệp, lãi suất) Việt Nam quanh giai đoạn 2020, đánh dấu điểm gãy.
    

**Ngày 898: Phân tích Tác động COVID lên Mô hình đã Xây**

*   Mục tiêu: Đánh giá cụ thể mức độ ảnh hưởng lên các mô hình trong syllabus.
    
*   Lý thuyết: Ôn lại RESET test, Chow test.
    
*   Thực hành: Chạy lại các mô hình ARIMA/VAR (Giai đoạn 3) với/không có giai đoạn COVID, so sánh hệ số và độ chính xác dự báo.
    

**Ngày 899: Case study - Khủng hoảng Tài chính 2008**

*   Mục tiêu: Phân tích một trường hợp lịch sử khác.
    
*   Lý thuyết: Ôn lại bối cảnh khủng hoảng tài chính toàn cầu 2008 và ảnh hưởng lan tỏa đến các nước mới nổi.
    
*   Thực hành: Nếu dữ liệu Việt Nam đủ dài, xác định tác động của khủng hoảng 2008 lên GDP/xuất khẩu.
    

**Ngày 900: Phân tích Tác động Khủng hoảng 2008 lên Mô hình**

*   Mục tiêu: So sánh hai loại cú sốc (2008 tài chính vs 2020 y tế) về đặc điểm drift.
    
*   Lý thuyết: Ôn lại phân loại sudden/gradual drift.
    
*   Thực hành: So sánh tốc độ phục hồi và hình dạng cú sốc giữa 2008 và 2020 trên chuỗi GDP Việt Nam.
    

**Ngày 901: Chiến lược Ứng phó - Retrain Định kỳ**

*   Mục tiêu: Biết chiến lược đơn giản nhất để đối phó drift.
    
*   Lý thuyết: Retraining định kỳ (VD: mỗi quý) để mô hình luôn cập nhật với dữ liệu mới nhất.
    
*   Thực hành: Thiết kế lịch retrain cho hệ thống forecasting đã xây, cân nhắc trade-off giữa tần suất retrain và chi phí tính toán.
    

**Ngày 902: Chiến lược Ứng phó - Rolling Window Training**

*   Mục tiêu: Biết chiến lược giới hạn dữ liệu huấn luyện.
    
*   Lý thuyết: Rolling window training, chỉ dùng N năm gần nhất thay vì toàn bộ lịch sử - giúp mô hình thích ứng nhanh hơn với regime mới.
    
*   Thực hành: So sánh hiệu năng mô hình XGBoost CPI khi train trên toàn bộ lịch sử vs chỉ 5 năm gần nhất.
    

**Ngày 903: Chiến lược Ứng phó - Adaptive Models**

*   Mục tiêu: Kết nối lại với mô hình thích ứng đã học ở Giai đoạn 4.
    
*   Lý thuyết: Ôn lại time-varying parameter models (Ngày 418), tự nhiên thích ứng với thay đổi theo thời gian.
    
*   Thực hành: So sánh khả năng thích ứng của TVP model với mô hình OLS cố định tham số quanh giai đoạn COVID.
    

**Ngày 904: Chiến lược Ứng phó - Ensemble Model Mới/Cũ**

*   Mục tiêu: Biết chiến lược kết hợp để giảm rủi ro khi retrain.
    
*   Lý thuyết: Kết hợp dự báo từ mô hình cũ (ổn định) và mô hình mới (thích ứng nhanh) bằng weighted combination (Giai đoạn 6).
    
*   Thực hành: Thiết kế combination động: tăng trọng số mô hình mới khi phát hiện drift, giảm khi ổn định.
    

**Ngày 905: Xây dựng Cơ chế Tự động Phát hiện Drift**

*   Mục tiêu: Đóng gói kỹ thuật phát hiện thành hệ thống tự động.
    
*   Lý thuyết: Ôn lại CUSUM/Page-Hinkley (Ngày 895).
    
*   Thực hành: Viết class Python `DriftDetector` chạy kiểm tra CUSUM trên residual stream liên tục.
    

**Ngày 906: Xây dựng Cơ chế Tự động Retrain**

*   Mục tiêu: Kết nối phát hiện drift với hành động retrain.
    
*   Lý thuyết: Trigger-based retraining, khi `DriftDetector` báo drift thì kích hoạt retrain trong Airflow.
    
*   Thực hành: Thêm task điều kiện vào Airflow DAG: chỉ retrain khi `DriftDetector` phát hiện drift (thay vì retrain theo lịch cố định).
    

**Ngày 907: Project Concept Drift - Mô phỏng Regime Shift**

*   Mục tiêu: Kiểm thử toàn bộ hệ thống trên dữ liệu có drift thực tế.
    
*   Lý thuyết: Ôn lại giai đoạn COVID đã phân tích (Ngày 897-898).
    
*   Thực hành: Chuẩn bị dữ liệu CPI/GDP Việt Nam trải dài qua giai đoạn COVID để test hệ thống.
    

**Ngày 908: Project Concept Drift - Áp dụng Phương pháp Phát hiện**

*   Mục tiêu: Xác nhận `DriftDetector` hoạt động đúng trên trường hợp thực tế đã biết.
    
*   Lý thuyết: Ôn lại CUSUM.
    
*   Thực hành: Chạy `DriftDetector` trên residual mô hình CPI quanh giai đoạn COVID, kiểm tra có phát hiện đúng thời điểm không.
    

**Ngày 909: Project Concept Drift - Xây Cơ chế Retrain Tự động**

*   Mục tiêu: Hoàn thiện vòng lặp phát hiện-phản ứng.
    
*   Lý thuyết: Ôn lại trigger-based retraining (Ngày 906).
    
*   Thực hành: Cài đặt và test cơ chế tự động retrain khi `DriftDetector` kích hoạt.
    

**Ngày 910: Project Concept Drift - Đánh giá Hiệu quả Ứng phó**

*   Mục tiêu: Định lượng lợi ích của hệ thống thích ứng.
    
*   Lý thuyết: Ôn lại các metric đánh giá (RMSE).
    
*   Thực hành: So sánh RMSE dự báo quanh giai đoạn COVID giữa mô hình tĩnh (không retrain) và mô hình có cơ chế drift detection + retrain.
    

**Ngày 911: Project Concept Drift - Viết Báo cáo**

*   Mục tiêu: Hoàn thiện tài liệu cho project.
    
*   Lý thuyết: Ôn lại cấu trúc báo cáo.
    
*   Thực hành: Viết báo cáo mô tả toàn bộ hệ thống phát hiện và ứng phó concept drift, kèm kết quả định lượng.
    

**Ngày 912: Giới hạn của Mô hình trước Sự kiện Chưa từng có**

*   Mục tiêu: Có góc nhìn thực dụng và khiêm tốn về khả năng của mọi mô hình đã học.
    
*   Lý thuyết: "Unknown unknowns" - không mô hình nào (kể cả có drift detection) dự báo được sự kiện hoàn toàn mới chưa từng xảy ra trong lịch sử.
    
*   Thực hành: Viết bài luận ngắn thảo luận vai trò của judgment con người và scenario analysis (sẽ gặp lại ở Capstone 3) bên cạnh mô hình định lượng.
    

**Ngày 913: Đọc Paper về Concept Drift trong Economic Forecasting**

*   Mục tiêu: Cập nhật nghiên cứu mới nhất.
    
*   Lý thuyết: Tìm và đọc 1 paper về concept drift/structural break trong dự báo kinh tế.
    
*   Thực hành: Tóm tắt phương pháp và bài học áp dụng được.
    

**Ngày 914: Ôn tập Concept Drift**

*   Mục tiêu: Củng cố kiến thức Phần C trước khi tổng kết Giai đoạn 8.
    
*   Lý thuyết: Ôn tập Ngày 891–913.
    
*   Thực hành: Làm bộ câu hỏi ôn tập tổng hợp về phát hiện và ứng phó concept drift.
    

**Ngày 915: Tổng kết Giai đoạn 8 - Production Forecasting**

*   Mục tiêu: Củng cố toàn diện trước khi bước vào các Capstone cuối cùng.
    
*   Lý thuyết: Ôn tập tổng hợp cả 3 phần: MLOps, Forecast Monitoring, Concept Drift.
    
*   Thực hành: Hoàn thiện sơ đồ kiến trúc hệ thống production forecasting đầy đủ (Data → ETL → Model → Deploy → Monitor → Drift Detection → Retrain), sẵn sàng làm nền tảng trực tiếp cho Capstone 1, 2, 3.
