{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.12.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"nvidiaTeslaT4","dataSources":[{"sourceType":"competition","sourceId":4120,"databundleVersionId":44256},{"sourceType":"datasetVersion","sourceId":16447485,"datasetId":10541873,"databundleVersionId":17446240}],"dockerImageVersionId":31401,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"%%bash\n# ==========================================\n# 0. DỌN SẠCH CHƯỚNG NGẠI VẬT (CHỐNG KAGGLE CACHE)\n# ==========================================\necho \">>> Đang xóa mọi thứ cũ kỹ để dọn đường...\"\ncd /kaggle/working\nrm -rf IS405-CTR\nrm -rf avazu_processed\n\n# ==========================================\n# 1. TẢI MÃ NGUỒN VỪA SỬA LỖI XONG TỪ GITHUB\n# ==========================================\necho \">>> Tải code (đã ép min_freq: 2) mới nhất từ Github...\"\ngit clone https://github.com/UIT23521830/IS405-CTR.git\ncd IS405-CTR/CTR_Prediction\n\necho \">>> XÁC NHẬN MIN_FREQ TRONG CONFIG:\"\ngrep \"min_freq\" config/kaggle_t4x2.yaml\necho \"--------------------------------------------------------\"\n\n# ==========================================\n# 2. XỬ LÝ DỮ LIỆU ĐỂ TẠO TỪ ĐIỂN \n# ==========================================\necho \">>> Đang đếm tần suất để tạo từ điển MỚI (chờ khoảng 10-15p)...\"\npython -m scripts.prepare_from_parquet --config config/kaggle_t4x2.yaml\n\n# ==========================================\n# 3. HUẤN LUYỆN MÔ HÌNH VỚI DỮ LIỆU ĐÃ TĂNG CƯỜNG\n# ==========================================\necho \">>> Bắt đầu huấn luyện mô hình...\"\npython -m scripts.train --config config/kaggle_t4x2.yaml --model nafi\n\n# ==========================================\n# 4. ĐÁNH GIÁ (LẤY KẾT QUẢ CHO BÁO CÁO)\n# ==========================================\necho \">>> Đánh giá test set (Điểm AUC kì này sẽ khác hẳn)...\"\npython -m scripts.evaluate \\\n    --config config/kaggle_t4x2.yaml \\\n    --checkpoint /kaggle/working/outputs/checkpoints/best_model.pt \\\n    --split test\n\n# ==========================================\n# 5. DỰ ĐOÁN VÀ ĐÓNG GÓI BÀI NỘP\n# ==========================================\necho \">>> Tạo file submission...\"\npython -m scripts.predict_competition \\\n    --config config/kaggle_t4x2.yaml \\\n    --checkpoint /kaggle/working/outputs/checkpoints/best_model.pt \\\n    --output /kaggle/working/submission_minfreq2.csv\n\necho \">>> HOÀN THÀNH THẮNG LỢI! BẠN TẢI FILE VỀ THÔI!\"\n","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2026-05-31T15:40:30.976998Z","iopub.execute_input":"2026-05-31T15:40:30.977342Z","iopub.status.idle":"2026-05-31T15:40:34.324749Z","shell.execute_reply.started":"2026-05-31T15:40:30.977298Z","shell.execute_reply":"2026-05-31T15:40:34.323800Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import json\nimport pandas as pd\n\n# Mở file metadata do lúc nãy sinh ra\nwith open('/kaggle/working/avazu_processed/metadata.json') as f:\n    meta = json.load(f)\n\n# Phân tích ra bảng\ncounts = meta['split_counts']\ntotal = meta['num_rows']\n\ndf_report = pd.DataFrame({\n    \"Tập dữ liệu\": [\"Train\", \"Validation\", \"Test\", \"Tổng cộng\"],\n    \"Số lượng mẫu\": [counts['train'], counts['valid'], counts['test'], total],\n    \"Tỉ lệ (%)\": [\n        counts['train']/total * 100, \n        counts['valid']/total * 100, \n        counts['test']/total * 100, \n        100\n    ]\n})\n\nprint(\"==== BÁO CÁO CHIA TẬP DỮ LIỆU ====\")\nprint(df_report.to_markdown(index=False))\n\n# Lưu xuống file csv để báo cáo\ndf_report.to_csv('/kaggle/working/dataset_split_report.csv', index=False)\nprint(\"\\nĐã lưu báo cáo thành công tại /kaggle/working/dataset_split_report.csv\")\n","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}