{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.14","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":81933,"databundleVersionId":9643020,"sourceType":"competition"},{"sourceId":10086174,"sourceType":"datasetVersion","datasetId":6218704},{"sourceId":10087282,"sourceType":"datasetVersion","datasetId":6219579}],"dockerImageVersionId":30804,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import pandas as pd\nimport numpy as np\n\n# 讀取 csv 檔案，並去除預設的索引\ntrain_file_path = \"/kaggle/input/child-mind-institute-problematic-internet-use/train.csv\"\ntest_file_path = \"/kaggle/input/child-mind-institute-problematic-internet-use/test.csv\"\n\ntrain_df = pd.read_csv(train_file_path, index_col=None)\ntest_df = pd.read_csv(test_file_path, index_col=None)\n\n# 僅篩選出 test_df 有的 columns\nprint(test_df.columns)\ndf = train_df[test_df.columns.tolist()+['sii']]\ndf = df[df['sii'].notna()]","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-05T15:37:41.276957Z","iopub.execute_input":"2024-12-05T15:37:41.277381Z","iopub.status.idle":"2024-12-05T15:37:41.385035Z","shell.execute_reply.started":"2024-12-05T15:37:41.277345Z","shell.execute_reply":"2024-12-05T15:37:41.383446Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import classification_report, confusion_matrix\nimport lightgbm as lgb","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-05T15:40:39.975241Z","iopub.execute_input":"2024-12-05T15:40:39.975693Z","iopub.status.idle":"2024-12-05T15:40:39.981237Z","shell.execute_reply.started":"2024-12-05T15:40:39.975654Z","shell.execute_reply":"2024-12-05T15:40:39.979900Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"X = df.drop(['id', 'sii'], axis=1)\ny = df['sii']\n\n# 處理缺失值\ndef manage_missing_values(df):\n  # 自動檢測數值型欄位\n  numeric_columns = df.select_dtypes(include=['int64', 'float64']).columns\n  # 填充數值型欄位的空值為該欄位的平均值\n  df[numeric_columns] = df[numeric_columns].apply(lambda col: col.fillna(col.mean()))\n\n  # 自動檢測類別型欄位\n  categorical_columns = df.select_dtypes(include=['object']).columns\n  # 填充類別型欄位的空值為 'Unknown'\n  df[categorical_columns] = df[categorical_columns].fillna('Unknown')\n  return numeric_columns.tolist(), categorical_columns.tolist()\n\nnumeric_columns, categorical_columns = manage_missing_values(X)\n\n# 處理類別型變數\nX[categorical_columns] = X[categorical_columns].astype('category')  # 類別型變數\n\n\n# Deploy the final model\n# 1. 準備資料\ntrain_data = lgb.Dataset(X, label=y, categorical_feature=categorical_columns)  # 使用所有資料進行訓練\n\n# 2. 模型參數\nparams = {\n    'objective': 'multiclass',  # 多分類\n    'metric': 'multi_logloss',  # 評估指標\n    'num_class': 4,  # 分類數\n    'boosting_type': 'gbdt',\n    'learning_rate': 0.1,\n    'num_leaves': 31,\n    'max_depth': -1,\n    'feature_fraction': 0.8,\n    'bagging_fraction': 0.8,\n    'bagging_freq': 5,\n    'verbose': -1\n}\n\n# 3. 模型訓練\nnum_round = 100  # 訓練輪數\nfinal_lgbm_model = lgb.train(\n    params,\n    train_data,\n    num_boost_round=num_round  # 不進行評估，不需 valid_sets\n)\n\n# 4. 預測\ny_pred_proba = final_lgbm_model.predict(X)  # 使用同一批資料進行預測\ny_pred = np.argmax(y_pred_proba, axis=1)  # 機率最大的類別作為預測\n\n# 5. 特徵重要性\nlgb.plot_importance(final_lgbm_model, max_num_features=10, importance_type='gain')\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-05T15:40:57.349567Z","iopub.execute_input":"2024-12-05T15:40:57.350205Z","iopub.status.idle":"2024-12-05T15:41:01.408332Z","shell.execute_reply.started":"2024-12-05T15:40:57.350162Z","shell.execute_reply":"2024-12-05T15:41:01.406916Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Deploy Pipeline\ntest_X_df = test_df.drop(['id'], axis=1)\n\nnumeric_columns, categorical_columns = manage_missing_values(test_X_df)\ntest_X_df[categorical_columns] = test_X_df[categorical_columns].astype('category')\ny_pred_proba = final_lgbm_model.predict(test_X_df)  # 每個類別的預測機率\ny_pred = np.argmax(y_pred_proba, axis=1)  # 機率最大的類別作為預測\nprint(y_pred)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-05T15:41:20.347948Z","iopub.execute_input":"2024-12-05T15:41:20.348346Z","iopub.status.idle":"2024-12-05T15:41:20.412127Z","shell.execute_reply.started":"2024-12-05T15:41:20.348309Z","shell.execute_reply":"2024-12-05T15:41:20.410965Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Create submission dataframe\nids = [str(id) for id in test_df['id']]\nsubmission = pd.DataFrame({'id': ids, 'sii': y_pred})\npredictions = submission","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-05T15:42:49.634321Z","iopub.execute_input":"2024-12-05T15:42:49.634738Z","iopub.status.idle":"2024-12-05T15:42:49.641048Z","shell.execute_reply.started":"2024-12-05T15:42:49.634697Z","shell.execute_reply":"2024-12-05T15:42:49.639864Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import pandas as pd\n\n# predictions = pd.read_csv('/kaggle/input/child-mind-institute-problematic-internet-use/sample_submission.csv', index_col=None)\n# predictions = pd.read_csv('/kaggle/input/submission/submission_2024-12-03_18-44-40.csv', index_col=None)\npredictions.to_csv('submission.csv', index=False)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-05T15:43:03.537746Z","iopub.execute_input":"2024-12-05T15:43:03.538160Z","iopub.status.idle":"2024-12-05T15:43:03.548793Z","shell.execute_reply.started":"2024-12-05T15:43:03.538124Z","shell.execute_reply":"2024-12-05T15:43:03.547591Z"}},"outputs":[],"execution_count":null}]}