{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":103436,"databundleVersionId":12476472,"sourceType":"competition"}],"dockerImageVersionId":31040,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# -*- coding: utf-8 -*-\n\"\"\"Untitled8.ipynb\n\nAutomatically generated by Colab.\n\nOriginal file is located at\n    https://colab.research.google.com/drive/15Hr9YCENehT8mWlDEMvGuZN1kHdoUVa9\n\"\"\"\n\nfrom google.colab import drive\ndrive.mount('/content/drive')\n\nimport pandas as pd\nfrom sklearn.impute import SimpleImputer\nfrom sklearn.preprocessing import OrdinalEncoder\n\nfolder_path = '/content/drive/MyDrive/Kaggle'\n\ncolumns = [\n    'SPECIAL DIV', 'Stock class', 'SO_TIME', 'PURCHASE AMOUNT', 'VSD', 'CLASSIFY_CD', 'SUPPLIER_DIV',\n    'SO_DAY_OF_MONTH', 'DELI_DIV', 'OTHER AREA SHIP DIV', 'SOUF_RCV_NO', 'Consider count hodiday Saturday',\n    'SUPPLIER_CD', 'Ship Mode', 'PRODUCT_CD', 'GLOBAL_NO', 'SO_DAY_OF_WEEK', 'DIRECT SHIP FLG', 'QTUF_RCV_NO',\n    'SPECIAL_DIV', 'LOGICAL PLANT', 'SUBSIDIARY_CD', 'ALLOCATION QTY', 'Sales order line number', 'CUST_CD',\n    'WEIGHT PER PIECE', 'SHIP DECISION NO', 'PRODUCT ATTRIBUTION', 'PACKING RANK', 'Order date', 'REASON_CD',\n    'SUPPLIER INV AMOUNT', 'BRAND_CD', 'PACK QTY', 'SO QTY', 'INNER_CD'\n]\n\n# Load datasets theo nhãn và giai đoạn\nfile_groups = [\n    (\"delay_4_6\", 1),\n    (\"delay_7_9\", 1),\n    (\"not_delay_4_6\", 0),\n    (\"not_delay_7_9\", 0)\n]\n\ndf_all = {\n    name: pd.read_csv(f\"{folder_path}/{name}_CONDITION_PRODUCT_SUPPLIER.csv\", usecols=columns).assign(label=label)\n    for name, label in file_groups\n}\n\ntrain_df = pd.concat(df_all.values(), ignore_index=True)\n\nX = train_df.drop(columns=[\"label\"])\ny = train_df[\"label\"]\n\ncat_cols = X.select_dtypes(include=\"object\").columns.tolist()\nnum_cols = X.select_dtypes(include=\"number\").columns.tolist()\nX[cat_cols] = X[cat_cols].astype(str)\n\ncat_imputer = SimpleImputer(strategy=\"most_frequent\")\nnum_imputer = SimpleImputer(strategy=\"mean\")\nencoder = OrdinalEncoder(handle_unknown=\"use_encoded_value\", unknown_value=-1)\n\nX[cat_cols] = cat_imputer.fit_transform(X[cat_cols])\nX[cat_cols] = encoder.fit_transform(X[cat_cols])\nX[num_cols] = num_imputer.fit_transform(X[num_cols])\n\nfrom sklearn.model_selection import train_test_split\n\n# Chia tập huấn luyện và tập kiểm tra (validation)\nX_train, X_val, y_train, y_val = train_test_split(\n    X, y, test_size=0.2, random_state=42, stratify=y\n)\ny_val_proba = model.predict_proba(X_val)[:, 1] \n\nimport xgboost as xgb\nfrom xgboost import XGBClassifier\n\nmodel = XGBClassifier(\n    n_estimators=500,\n    max_depth=8,\n    learning_rate=0.05,\n    subsample=0.8,\n    colsample_bytree=0.8,\n    min_child_weight=5,\n    gamma=1,\n    reg_alpha=0.5,\n    reg_lambda=1.0,\n    use_label_encoder=False,\n    eval_metric='logloss',\n    random_state=42,\n    n_jobs=-1\n)\nmodel.fit(\n    X_train, y_train,\n    eval_set=[(X_train, y_train), (X_val, y_val)],\n    early_stopping_rounds=30,\n    verbose=20\n)\n\n\n# Huấn luyện\nmodel.fit(X, y)\n\ndf_test = pd.read_csv(f\"/content/drive/MyDrive/Kaggle/PILOT_10.csv\")\nids = df_test['ID'].copy()\n\nfor col in X.columns:\n    if col not in df_test.columns:\n        df_test[col] = \"missing\" if col in cat_cols else 0\n\ndf_test = df_test[X.columns]  # giữ đúng thứ tự\ndf_test[cat_cols] = df_test[cat_cols].astype(str)\ndf_test[cat_cols] = cat_imputer.transform(df_test[cat_cols])\ndf_test[cat_cols] = encoder.transform(df_test[cat_cols])\ndf_test[num_cols] = num_imputer.transform(df_test[num_cols])\n\ny_pred_proba = model.predict_proba(df_test)[:, 1]\ny_pred = (y_pred_proba >= 0.5).astype(int)\n\nsubmission = pd.DataFrame({\n    'ID': ids,\n    'label': y_pred\n})\n\n# Lưu submission\nsubmission_path = '/content/drive/MyDrive/Kaggle/submission.csv'\nsubmission.to_csv(submission_path, index=False)\nprint(f\"Saved: {submission_path}\")","metadata":{"_uuid":"87456f31-fb99-4360-b6d5-d9a3bc199e23","_cell_guid":"f18ce4a0-50a7-46a4-a0fc-d2cd552b1d7f","trusted":true,"collapsed":false,"jupyter":{"outputs_hidden":false}},"outputs":[],"execution_count":null}]}