# Dự án: Dự báo S2S các đợt nắng nóng (mùa hè), ấm bất thường (mùa đông), gọi chung là ngày nóng cực đoan (Extreme Heat Day - EHD) tại Việt Nam

## Điều kiện bắt buộc:
- Tuyệt đối không xoá, di chuyển, thay đổi bất cứ file/thư mục nào ngoài các file/thư mục nằm trong thư mục làm việc của CLAUDE
- Được phép tham khảo các thông tin khác trên HPC

## Bối cảnh
- Xây dựng hệ thống dự báo nội mùa subseasonal hiện tượng nắng nóng cực đoan (Extreme Heat Days) bằng mô hình AI dựa trên sản phẩm gốc của CFSv2.
- Định nghĩa ngưỡng EHD: min(Tx90p cục bộ trong cửa sổ 31 ngày, 35°C) — theo hình 1 của HW_HPC_1_cla.docx, tức hợp của HD (Tx≥35) và HWD (Tx≥Tx90p).
- Toàn bộ số liệu nằm tại thư mục /home/tanpv/Data/QG.25.196/CFS_Rfcs/cfs_flux và /home/tanpv/Data/QG.25.196/CFS_Rfcs/cfs_pgb
- Hạn dự báo của số liệu gốc: Tối thiểu 90 ngày (3 tháng), nhưng có thể dài hơn tuỳ thuộc initial date 
- Độ phân giải: 1.0 x 1.0 độ kinh vĩ
- Số liệu chỉ có từ 1999-2011 nhưng không đầy đủ
- YÊU CẦU:
+ Downscaling (bao gồm cả quá trình hiệu chỉnh - Postprocessing) Tx của CFS về lưới 0.25 độ trên toàn bộ các điểm lưới thuộc lãnh thổ Việt Nam
+ Xây dựng mô hình dự báo EHD và EHDE cho từng điểm lưới với hạn dự báo chỉ 45 ngày tính từ ngày đứng sau initial date
  (nghĩa là từ 0-45 days, hoặc 1-46 nếu tính cả initial date)
+ Đánh giá và lựa chọn phương án tối ưu để dùng cho dự báo nghiệp vụ sau này
+ Nguyên tắc thử: Nên thử cho mỗi vùng khí hậu một vài gridpoint, tổng số 7 vùng lấy khoảng 20-21 gridpoint để kiểm thử và lựa chọn mô hình AI

## Môi trường kỹ thuật
- Chạy trên HPC, không có quyền sudo.
- Dùng conda environment tên `claudecode` (Node.js 20 qua conda-forge để chạy Claude Code, tránh lỗi glibc 2.17 quá cũ).
- Môi trường Python/khoa học dữ liệu riêng cho dự án (ghi rõ tên nếu khác `claudecode`).
- Chỉ chạy các lệnh cần internet (nếu có) trên login node; job tính toán nặng nộp qua SLURM.
- Khi tính toán nhiều nên sử dụng phương án tính song song (parallel) với tối đa số nodes available x 20 cores/node

## Cấu trúc thư mục
- `src/` — mã nguồn xử lý dữ liệu, huấn luyện mô hình, tiện ích
- `data/` — dữ liệu thô và đã xử lý
- `notebooks/` — notebook thử nghiệm, khám phá dữ liệu
- `outputs/` — kết quả mô hình, bảng số liệu, hình ảnh, báo cáo

## Quy ước làm việc
- Giải thích, trao đổi bằng **tiếng Việt**.
- Comment trong code có thể dùng tiếng Anh
- Được phép tự động chạy lệnh (script, submit job SLURM, cài đặt package, v.v.) mà không cần hỏi xác nhận trước.
- Chỉ được phép xóa dữ liệu (`rm -rf`, ghi đè file `outputs/`, `data/`,...) trong thư mục làm việc của Claude 
- Khi thêm phương pháp mới hoặc thay đổi ngưỡng/feature set, ghi chú lại vào file "developing.txt" để so sánh về sau.

## Lưu ý phân tích
- Các chỉ số MAE/RMSE/ME/CORR đánh giá theo giá trị (°C); POD/POFD/FAR/FBI/CSI/FBI/EDI/SEDI đánh giá theo khả năng phát hiện sự kiện EHD.
- Feature importance được tính bằng normalized/standardized tree gain, không dùng dữ liệu năm test.
- Mô hình hiện tại là pooled theo điểm trên toàn quốc, chưa phải mạng nơ-ron không gian; trường EOF chưa được đưa vào làm feature.
##
Claude có nhiệm vụ thử nghiệm các phương án, mô hình để cuối cùng xác định được các phương án, mô hình tốt nhất, với kỳ vọng sai số dự báo EHDE phải đạt được:
POD > 0.6
POFD < 0.2
FAR < 0.2
FBI ~ 1
CSI > 0.4
Một số điểm cần cân nhắc:
Về không gian: Có thể xây dựng các mô hình cho từng sub-region (dựa vào file Mask) hoặc national (toàn quốc)
Về thời gian: Có thể chia theo mùa
Về lựa chọn biến đầu vào: Có thể sử dụng các biến riêng biệt như hiện tại cũng có thể tạo biển derived variable từ các biến đó, có thể lựa chọn theo thứ tự ưu tiên hoặc tổ hợp bằng cách nào đó
Nói chung, Claude sẽ chủ động miễn là đạt được mục tiêu đề ra.

## -----------------
Các gợi ý thử nghiệm sau đây chỉ là đề xuất. Claude có thể chủ động modify hoặc lựa chọn phương án tối ưu.

## -----------------
EXP1 (Thử nghiệm 1)
## Giải pháp xây dựng dự báo và đánh giá theo vùng
Vì EHDE được xác định cho từng điểm lưới nên một vùng nào đó có phần lớn các ô lưới cùng xảy ra EHD=1 là rất hiếm. Thay cho điều đó,
khi dự báo vẫn thực hiện cho từng ô lưới, nhưng khi đánh giá EHDE thì xác định cho cả vùng:
Có tất cả 7 vùng (S1-S7), mỗi vùng sẽ có số ô lưới tương ứng là n1, n2,..., n7
Giả sử số ô lưới trong từng vùng có EHD=1 tương ứng là m1, m2,..., m7
Khi đó, xác suất xảy ra EHDE của các vùng tương ứng sẽ là: P1=m1/n1,..., P7=m7/n7
Một vùng nào đó được dự báo là có EHDE=1 nếu Pi>20%.

## -----------------
EXP2 (Thử nghiệm 2)
Một thử nghiệm khác:
Trên cơ sở EXP1, chia tập mẫu thành 2 nhóm: (1) Nhóm yEHD (có EHDE) và (2) Nhớm nEHD (không có EHDE)
Do EHDE thường xuất hiện theo vùng nên từ kết quả tính các P1-P7 cho 7 vùng, nếu vùng nào đó có Pi < 5% (dưới 5% số ô lưới) thì xem như ở vùng đó không có
EHDE (tức nEHD) tại tuần đang xét

## -----------------
EXP3 (Thử nghiệm 3)
Xây dựng mô hình cho từng điểm lưới: 
- Trước hết thử cho 3 điểm x 7 vùng = 21 điểm, đánh giá cho từng điểm dựa trên kết quả dự báo của cả nEHDE và yENDE trên toàn tập mẫu
- Mỗi điểm lưới xây dựng N mô hình AI
- Sử dụng Sev_obs làm target (tất cả các trường hợp Sev âm và không âm)
- Giả sử trong số N mô hình, có M mô hình cho yEHDE
- Tính xác suất xuất hiện EHDE: p(yEHDE)=M/N, tức q=p(nEHDE)=1-p
+ Nếu p đủ nhỏ, tức q lớn (ví dụ, ngưỡng p<0.3): Kết luận: nEHDE, bỏ qua mẫu đó
+ Nếu p đủ lớn, tức q nhỏ (ví dụ, ngưỡng p>0.3 - cần khảo sát chi tiết), lưu lại mẫu để xây dựng mô hình dự báo yEHDE
- Với tập mẫu còn lại (tức là những mẫu hầu như chắc chắn nEHDE):
+ Xây dựng các mô hình AI cho tập này, và giả sử vẫn sử dụng N mô hình trên (tuy nhiên, do đặc điểm tập mẫu này khác với tập mẫu trước, cả về dung lượng nên
  có thể sử dụng loại mô hình AI khác)
+ Giả sử kết quả nhận được là M mô hình cho yEHDE
+ Tính p(yEHDE)=M/N, tức q=p(nEHDE)=1-p
+ Đến đây, vẫn phải chọn ngưỡng p, ví dụ p=0.5
+ Từ đó: Nếu p>0.5: Kết luận yEHDE, ngược lại thì nEHDE.
- Đánh giá: Dựa trên kết quả dự báo của cả hai lần dự báo mô tả ở trên (lưu ý: có thể chỉ cần 1 lần nếu lần 1 đã kết luận nEHDE).
- Báo cáo qua html:
+ Liệt kê danh sách các mô hình AI được sử dụng trong cả hai lần dự báo 
+ Xuất 21 bảng contigency cho 21 điểm
** Lưu ý: Tập mẫu cho mỗi điểm lưới và mỗi lead day là 104 init x 20 năm = 2080.
   Giả sử có 90% trường hợp nEHDE thì số mẫu cho dự báo lần 2 chỉ còn 208 mẫu, liệu có quá it, kể cả khi chưa chia thành training và validating?
   Có thể làm tăng dung lượng mẫu bằng cách gộp cacs ngày trong từng tuần W1, W2,..., W6.
   Xây dựng mô hình cho từng tuần.







 
