{"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"}],"dockerImageVersionId":30804,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n\n# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2024-12-26T15:34:30.503800Z","iopub.execute_input":"2024-12-26T15:34:30.504220Z","iopub.status.idle":"2024-12-26T15:34:31.626058Z","shell.execute_reply.started":"2024-12-26T15:34:30.504186Z","shell.execute_reply":"2024-12-26T15:34:31.624977Z"},"collapsed":true,"jupyter":{"outputs_hidden":true}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# dict_data = pd.read_csv(\"/kaggle/input/child-mind-institute-problematic-internet-use/data_dictionary.csv\")\n\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-26T13:47:34.724892Z","iopub.execute_input":"2024-12-26T13:47:34.725321Z","iopub.status.idle":"2024-12-26T13:47:34.732591Z","shell.execute_reply.started":"2024-12-26T13:47:34.725275Z","shell.execute_reply":"2024-12-26T13:47:34.731770Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# missing_values_count = train_data['sii'].isna().sum()\n# missing_values_count","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-26T13:47:34.733787Z","iopub.execute_input":"2024-12-26T13:47:34.734191Z","iopub.status.idle":"2024-12-26T13:47:34.749089Z","shell.execute_reply.started":"2024-12-26T13:47:34.734144Z","shell.execute_reply":"2024-12-26T13:47:34.747968Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# train_cols = set(train_data.columns)\n# test_cols = set(test_data.columns)\n# columns_not_in_test = sorted(list(train_cols - test_cols))\n# print(columns_not_in_test)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-26T13:47:34.750870Z","iopub.execute_input":"2024-12-26T13:47:34.751301Z","iopub.status.idle":"2024-12-26T13:47:34.758574Z","shell.execute_reply.started":"2024-12-26T13:47:34.751256Z","shell.execute_reply":"2024-12-26T13:47:34.757755Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# pciat_min_max = train_data.groupby('sii')['PCIAT-PCIAT_Total'].agg(['min', 'max'])\n# pciat_min_max = pciat_min_max.rename(\n#     columns={'min': 'Minimum PCIAT total Score', 'max': 'Maximum total PCIAT Score'}\n# )\n# pciat_min_max","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-26T13:47:34.760824Z","iopub.execute_input":"2024-12-26T13:47:34.761142Z","iopub.status.idle":"2024-12-26T13:47:34.774013Z","shell.execute_reply.started":"2024-12-26T13:47:34.761113Z","shell.execute_reply":"2024-12-26T13:47:34.773188Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# remove rows which don't have sii value\ntrain_data = pd.read_csv(\"/kaggle/input/child-mind-institute-problematic-internet-use/train.csv\")\ntrain_data = train_data.dropna(subset=['sii'])\ntrain_data  = train_data.drop(columns = \"id\")\n\ncolumns_to_drop = [col for col in train_data.columns if \"PCIAT-PCIAT\" in col]\ntrain_data = train_data.drop(columns=columns_to_drop)\n\ncolumns_to_on_hot_encoding = [col for col in train_data.columns if \"Season\" in col]\ntrain_data = pd.get_dummies(train_data, columns=columns_to_on_hot_encoding, dummy_na=False, dtype=int)\n\n# train_data= train_data.dropna(thresh=train_data.shape[1]-15)\n# train_data[:5]","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-26T15:34:41.208844Z","iopub.execute_input":"2024-12-26T15:34:41.209247Z","iopub.status.idle":"2024-12-26T15:34:41.264723Z","shell.execute_reply.started":"2024-12-26T15:34:41.209213Z","shell.execute_reply":"2024-12-26T15:34:41.263858Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from sklearn.model_selection import train_test_split, ShuffleSplit, KFold \nfrom sklearn.preprocessing import StandardScaler\nfrom sklearn.metrics import ConfusionMatrixDisplay, classification_report, confusion_matrix, f1_score, precision_recall_curve\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nfrom sklearn.preprocessing import LabelEncoder\n\nfrom sklearn.impute import KNNImputer\nknn_imputer = KNNImputer(n_neighbors=5 )\n\n# from imblearn.over_sampling import SMOTE\n# smote = SMOTE()\n\nX = train_data.drop(columns=[ \"sii\"])\ntarget = train_data[\"sii\"]\nle = LabelEncoder()\nY = le.fit_transform(target)\n\nX_imputed = knn_imputer.fit_transform(X)\n# X_resampled, Y_resampled = smote.fit_resample(X_imputed, Y)\nX_train, X_test, Y_train, Y_test = train_test_split(X_imputed, Y, test_size=0.1, random_state=52)\n\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-26T15:34:45.175821Z","iopub.execute_input":"2024-12-26T15:34:45.176246Z","iopub.status.idle":"2024-12-26T15:34:47.864259Z","shell.execute_reply.started":"2024-12-26T15:34:45.176212Z","shell.execute_reply":"2024-12-26T15:34:47.863396Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# 計算每個類別的權重\n\nclass_distribution = train_data['sii'].value_counts()\ntotal_samples = len(train_data)\nnum_classes = len(class_distribution)\nclass_weights = [\n    total_samples / (class_count * num_classes) if class_count > 0 else 0 \n    for class_count in class_distribution\n]\n# 使用 class_weights\n# model = CatBoostClassifier(iterations=500, learning_rate=0.1, class_weights=class_weights)\n# model.fit(X, y)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-26T15:39:46.955087Z","iopub.execute_input":"2024-12-26T15:39:46.955483Z","iopub.status.idle":"2024-12-26T15:39:46.962469Z","shell.execute_reply.started":"2024-12-26T15:39:46.955448Z","shell.execute_reply":"2024-12-26T15:39:46.961248Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from catboost import CatBoostClassifier\n# CBC = CatBoostClassifier(verbose=0 )\nCBC = CatBoostClassifier(verbose=0, learning_rate=0.1, class_weights=class_weights)\nCBC.fit(X_train, Y_train)\n# CBC.fit(X_resampled, Y_resampled)\n\nY_pred  = CBC.predict(X_test)\ncm1 = confusion_matrix(Y_test, Y_pred)\nplt.figure(figsize=(8, 6))\nsns.heatmap(cm1, annot=True, fmt=\"d\", cmap=\"Blues\", xticklabels=le.classes_, yticklabels=le.classes_)\nplt.xlabel('Predicted')\nplt.ylabel('True')\nplt.title('Confusion Matrix')\nplt.show()\n\n\n# 顯示分類報告\nprint(\"Classification Report:\")\nprint(classification_report(Y_test, Y_pred, zero_division=0))\n\n# 計算 F1 分數\nf1 = f1_score(Y_test, Y_pred, average='weighted')\nprint(\"F1 Score:\", f1)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-26T15:34:53.008805Z","iopub.execute_input":"2024-12-26T15:34:53.009199Z","iopub.status.idle":"2024-12-26T15:35:35.363894Z","shell.execute_reply.started":"2024-12-26T15:34:53.009163Z","shell.execute_reply":"2024-12-26T15:35:35.362785Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"test_data = pd.read_csv(\"/kaggle/input/child-mind-institute-problematic-internet-use/test.csv\")\nidx = test_data[\"id\"]\ntest_data = test_data.drop(columns = \"id\")\ntest_data[:5]\ntrain_cols = train_data.columns\n\ncolumns_to_on_hot_encoding = [col for col in test_data.columns if \"Season\" in col]\ntest_data = pd.get_dummies(test_data, columns=columns_to_on_hot_encoding, dummy_na=False, dtype=int)\ntest_data = test_data.reindex(columns=train_cols, fill_value=0)\ntest_data = test_data.drop(columns = \"sii\")\npredictions = CBC.predict(test_data).flatten()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-26T15:35:39.689814Z","iopub.execute_input":"2024-12-26T15:35:39.690214Z","iopub.status.idle":"2024-12-26T15:35:39.718465Z","shell.execute_reply.started":"2024-12-26T15:35:39.690180Z","shell.execute_reply":"2024-12-26T15:35:39.717569Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"Submission = pd.DataFrame({\n    'id': idx,\n    'sii': predictions\n})\nSubmission.to_csv('submission.csv', index=False)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-26T15:35:42.298295Z","iopub.execute_input":"2024-12-26T15:35:42.298692Z","iopub.status.idle":"2024-12-26T15:35:42.306024Z","shell.execute_reply.started":"2024-12-26T15:35:42.298657Z","shell.execute_reply":"2024-12-26T15:35:42.304860Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"predictions","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-26T15:38:45.971425Z","iopub.execute_input":"2024-12-26T15:38:45.971859Z","iopub.status.idle":"2024-12-26T15:38:45.978928Z","shell.execute_reply.started":"2024-12-26T15:38:45.971824Z","shell.execute_reply":"2024-12-26T15:38:45.977848Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# from sklearn.ensemble import HistGradientBoostingClassifier\n\n# HGBC = HistGradientBoostingClassifier()\n# HGBC.fit(X_train, Y_train)\n# Y_pred  = HGBC.predict(X_test)\n\n# cm1 = confusion_matrix(Y_test, Y_pred)\n# plt.figure(figsize=(8, 6))\n# sns.heatmap(cm1, annot=True, fmt=\"d\", cmap=\"Blues\", xticklabels=le.classes_, yticklabels=le.classes_)\n# plt.xlabel('Predicted')\n# plt.ylabel('True')\n# plt.title('Confusion Matrix')\n# plt.show()\n\n# # 顯示分類報告\n# print(\"Classification Report:\")\n# print(classification_report(Y_test, Y_pred, zero_division=0))\n\n# # 計算 F1 分數\n# f1 = f1_score(Y_test, Y_pred, average='weighted')\n# print(\"F1 Score:\", f1)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-26T13:47:47.564098Z","iopub.execute_input":"2024-12-26T13:47:47.564395Z","iopub.status.idle":"2024-12-26T13:47:47.573149Z","shell.execute_reply.started":"2024-12-26T13:47:47.564366Z","shell.execute_reply":"2024-12-26T13:47:47.572188Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# test_data = pd.read_csv(\"/kaggle/input/child-mind-institute-problematic-internet-use/test.csv\")\n# idx = test_data[\"id\"]\n# test_data = test_data.drop(columns = \"id\")\n# test_data[:5]\n# train_cols = train_data.columns\n\n# columns_to_on_hot_encoding = [col for col in test_data.columns if \"Season\" in col]\n# test_data = pd.get_dummies(test_data, columns=columns_to_on_hot_encoding, dummy_na=False, dtype=int)\n# test_data = test_data.reindex(columns=train_cols, fill_value=0)\n# test_data = test_data.drop(columns = \"sii\")\n# predictions = HGBC.predict(test_data)\n\n\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-26T13:47:47.574220Z","iopub.execute_input":"2024-12-26T13:47:47.574493Z","iopub.status.idle":"2024-12-26T13:47:47.587447Z","shell.execute_reply.started":"2024-12-26T13:47:47.574467Z","shell.execute_reply":"2024-12-26T13:47:47.586126Z"}},"outputs":[],"execution_count":null}]}