# 📁 Cấu Trúc Project - Tóm Tắt ## 🎯 Tổng Quan Nhanh **Mục đích:** Dự đoán số nhân sự cần thiết cho mỗi ca làm việc dựa trên đặc điểm tòa nhà và công việc. --- ## 📊 Luồng Dữ Liệu ``` data_raw/ ├── Link LLV 1_5_2025.json → Thông tin ca làm việc, công việc └── Link LLV 2025_clean.json → Đặc điểm vật lý tòa nhà (diện tích TỔNG các tầng) ↓ [Tiền xử lý & Feature Engineering] ↓ final_2.csv/xlsx → Dataset training (đã có text features) ↓ [ML Training Pipeline] ↓ artifacts/ → Models đã train outputs/ → Kết quả validation ``` --- ## 🔄 Luồng Prediction ``` input.json (1 ca làm việc) ↓ all_predict.py ├── Gọi predict.py → Trích xuất keyword features từ text ├── Tiền xử lý các trường diện tích, đặc điểm tòa nhà ├── Kết hợp tất cả features ├── Load model từ artifacts/ └── Dự đoán ↓ Output: Số nhân sự cần thiết ``` --- ## 📂 Cấu Trúc Thư Mục ### 📁 **data_raw/** - Dữ liệu gốc - `Link LLV 1_5_2025.json` - Ca làm việc, công việc normal + dinhky - `Link LLV 2025_clean.json` - Diện tích tòa nhà (⚠️ TỔNG các tầng) ### 📁 **artifacts/** - Models - `extratrees_log1p.joblib` - Model chính - `extratrees_staff_model.joblib` - Model dự đoán nhân sự - `model_meta.joblib` - Metadata - `X_proc_columns.joblib` - Danh sách features ### 📁 **outputs/** - Kết quả - `val_predictions_extratrees.csv` - So sánh y_true vs y_pred trên validation set ### 📁 **models/** - Models cũ - Các models từ thử nghiệm trước --- ## 🔧 Files Script Chính ### 1. **predict.py** 🔤 **Vai trò:** Trích xuất keyword features từ text công việc **Input:** - `task_normal` (str): Công việc hằng ngày - `task_dinhky` (str): Công việc định kỳ tuần/tháng **Output:** - JSON string chứa 18 text features **Được gọi bởi:** `all_predict.py` --- ### 2. **all_predict.py** 🎯 **Vai trò:** Script chính để dự đoán **Workflow:** 1. Đọc `input.json` 2. **Gọi `predict.py`** để trích xuất keyword features 3. Tiền xử lý các trường khác (diện tích, đặc điểm tòa nhà) 4. Kết hợp tất cả features 5. Load model từ `artifacts/` 6. Dự đoán và trả về kết quả **Input:** `input.json` (1 ca làm việc) **Output:** Số nhân sự dự đoán --- ### 3. **extract_25_features_new.py** 📊 **Vai trò:** Trích xuất features từ text (phiên bản đầy đủ) Tương tự `predict.py` nhưng với nhiều features hơn --- ### 4. **merge_all_features.py** 🔗 **Vai trò:** Gộp features từ nhiều nguồn Tạo dataset hoàn chỉnh cho training --- ## 📄 Files Dữ Liệu ### **final_2.csv / final_2.xlsx** 📈 **Vai trò:** Dataset chính để training model **Nguồn:** - Ca làm việc ← `Link LLV 1_5_2025.json` - Diện tích tòa nhà ← `Link LLV 2025_clean.json` (⚠️ TỔNG các tầng) - Text features ← Trích xuất từ `all_task_normal` + `all_task_dinhky` **Features:** - Thông tin ca: `ca_sang`, `ca_chieu`, `ca_toi`, `ca_dem` - Diện tích: `dien_tich_hanh_lang`, `dien_tich_wc`, v.v. - Text features: `num_cleaning_tasks`, `cleaning_ratio`, v.v. - Target: `so_nhan_su` --- ### **input.json** 🎯 **Vai trò:** File input mẫu cho prediction **Nội dung:** - Thông tin tòa nhà: `ma_dia_diem`, `so_tang`, `so_cua_thang_may` - Thông tin ca: `loai_ca`, `bat_dau`, `ket_thuc`, `tong_gio_lam` - Công việc: - `all_task_normal` - Công việc **HẰNG NGÀY** - `all_task_dinhky` - Công việc **ĐỊNH KỲ (tuần/tháng)** - Diện tích: `dien_tich_*` (⚠️ TỔNG các tầng) - Đặc điểm: `doc_ham`, `op_tuong`, v.v. --- ### **input_explained.jsonc** 📚 **Vai trò:** File giải thích chi tiết các trường trong input.json Có comments đầy đủ (file JSONC) --- ## 📓 Notebooks ### **All_feature_Readme.ipynb** Chi tiết về text features ### **ML_Training_Pipeline_Complete.ipynb** Pipeline training model hoàn chỉnh ### **ML_Training_Pipeline.ipynb** Pipeline training cơ bản --- ## 📖 Documentation ### **README.md** 📘 Tài liệu chính của project ### **TASK_TYPES_GUIDE.md** 📋 Hướng dẫn phân biệt 2 loại công việc: - `all_task_normal` (hằng ngày) - `all_task_dinhky` (định kỳ tuần/tháng) ### **COMPLETE_25_FEATURES.md** 📝 Giải thích 25 features được trích xuất ### **ML_PIPELINE_PLAN.md** 🗺️ Kế hoạch pipeline ML --- ## ⚠️ Lưu Ý Quan Trọng ### 1. Về Diện Tích > **Tất cả diện tích là TỔNG của TẤT CẢ các tầng!** > > Ví dụ: 12 tầng × 150m²/tầng = 1800m² > > KHÔNG PHẢI 150m²! ### 2. Về Công Việc - `all_task_normal`: Làm **MỖI NGÀY** - `all_task_dinhky`: Làm **THEO TUẦN/THÁNG** - Model **GỘP CẢ 2** để phân tích ### 3. Về Pipeline Prediction ``` input.json → all_predict.py → predict.py → features → model → output ↓ [Tiền xử lý các trường khác] ↓ [Kết hợp features] ↓ [Load model] ↓ [Predict] ``` --- ## 🚀 Quick Start ### Dự đoán cho 1 ca: ```bash # 1. Chuẩn bị input.json # 2. Chạy prediction python all_predict.py # 3. Xem kết quả ``` ### Xem kết quả validation: ```bash # Mở file outputs/val_predictions_extratrees.csv # Cột: y_true (thực tế), y_pred (dự đoán), error ``` ### Test keyword extraction: ```python from predict import extract_text_features_to_json json_result = extract_text_features_to_json( "Lau sàn WC; Thu rác", "Cọ bồn cầu; Đánh sàn" ) print(json_result) ``` --- ## 📞 Tài Liệu Tham Khảo | Thắc mắc về... | Xem tài liệu | |----------------|--------------| | Tổng quan project | `README.md` | | Phân loại công việc | `TASK_TYPES_GUIDE.md` | | Text features | `All_feature_Readme.ipynb` | | Input format | `input_explained.jsonc` | | Pipeline | `README.md` → Pipeline Dự Đoán | | Validation | `outputs/val_predictions_extratrees.csv` | ---