{"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":30786,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# <div style=\"text-align:center\"><span style=\"background-color:#15a15b;padding:15px;border-radius:40px;\">Child Mind Institute - Problametic Internet Usage</span></div>\n\n![](https://i.postimg.cc/4dm5Wrvn/pexels-ron-lach-9783813.jpg)","metadata":{}},{"cell_type":"markdown","source":"# <span style=\"background-color:#b27eed;padding:15px;border-radius:40px;\">🎒Import Libraries</span>","metadata":{}},{"cell_type":"code","source":"import numpy as np # linear algebra\nimport pandas as pd #\nimport xgboost as xgb\nimport os\nfrom tqdm import tqdm\nfrom concurrent.futures import ThreadPoolExecutor\nfrom sklearn.model_selection import GridSearchCV","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","_kg_hide-input":false,"execution":{"iopub.status.busy":"2024-10-09T07:39:54.654971Z","iopub.execute_input":"2024-10-09T07:39:54.655489Z","iopub.status.idle":"2024-10-09T07:39:54.662743Z","shell.execute_reply.started":"2024-10-09T07:39:54.655441Z","shell.execute_reply":"2024-10-09T07:39:54.661339Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# <span style=\"background-color:#b27eed;padding:15px;border-radius:40px;\">📚Load and Prepare Data</span>\n\n**CSV Files**","metadata":{}},{"cell_type":"code","source":"train_data = pd.read_csv('/kaggle/input/child-mind-institute-problematic-internet-use/train.csv')\n\nTARGET_COLS = [\n    \"PCIAT-Season\",\n    \"PCIAT-PCIAT_01\",\n    \"PCIAT-PCIAT_02\",\n    \"PCIAT-PCIAT_03\",\n    \"PCIAT-PCIAT_04\",\n    \"PCIAT-PCIAT_05\",\n    \"PCIAT-PCIAT_06\",\n    \"PCIAT-PCIAT_07\",\n    \"PCIAT-PCIAT_08\",\n    \"PCIAT-PCIAT_09\",\n    \"PCIAT-PCIAT_10\",\n    \"PCIAT-PCIAT_11\",\n    \"PCIAT-PCIAT_12\",\n    \"PCIAT-PCIAT_13\",\n    \"PCIAT-PCIAT_14\",\n    \"PCIAT-PCIAT_15\",\n    \"PCIAT-PCIAT_16\",    \n    \"PCIAT-PCIAT_17\",\n    \"PCIAT-PCIAT_18\",\n    \"PCIAT-PCIAT_19\",\n    \"PCIAT-PCIAT_20\",\n    \"PCIAT-PCIAT_Total\"\n]\n\ntrain_data = train_data.drop(TARGET_COLS,axis=1)\n\ntest_df = pd.read_csv('/kaggle/input/child-mind-institute-problematic-internet-use/test.csv')\nids = test_df['id']","metadata":{"execution":{"iopub.status.busy":"2024-10-09T07:39:54.678647Z","iopub.execute_input":"2024-10-09T07:39:54.679101Z","iopub.status.idle":"2024-10-09T07:39:54.743418Z","shell.execute_reply.started":"2024-10-09T07:39:54.679044Z","shell.execute_reply":"2024-10-09T07:39:54.742027Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Parquet Files**","metadata":{}},{"cell_type":"code","source":"def process_file(filename, dirname):\n    df = pd.read_parquet(os.path.join(dirname, filename, 'part-0.parquet'))\n    df.drop('step', axis=1, inplace=True)\n    return df.describe().values.reshape(-1), filename.split('=')[1]\n\ndef load_time_series(dirname) -> pd.DataFrame:\n    ids = os.listdir(dirname)\n    \n    with ThreadPoolExecutor() as executor:\n        results = list(tqdm(executor.map(lambda fname: process_file(fname, dirname), ids), total=len(ids)))\n    \n    stats, indexes = zip(*results)\n    \n    df = pd.DataFrame(stats, columns=[f\"Stat_{i}\" for i in range(len(stats[0]))])\n    df['id'] = indexes\n    \n    return df\n\ntrain_ts = load_time_series(\"/kaggle/input/child-mind-institute-problematic-internet-use/series_train.parquet\")\ntest_ts = load_time_series(\"/kaggle/input/child-mind-institute-problematic-internet-use/series_test.parquet\")\ntime_series_cols = train_ts.columns.tolist()\n\ntrain = pd.merge(train_data, train_ts, how=\"left\", on='id')\ntest = pd.merge(test_df, test_ts, how=\"left\", on='id')\n\ntrain = train.drop('id', axis=1)\ntest = test.drop('id', axis=1)\ntrain = train.dropna(subset=['sii'])","metadata":{"execution":{"iopub.status.busy":"2024-10-09T07:39:54.768511Z","iopub.execute_input":"2024-10-09T07:39:54.769069Z","iopub.status.idle":"2024-10-09T07:41:33.513829Z","shell.execute_reply.started":"2024-10-09T07:39:54.769014Z","shell.execute_reply":"2024-10-09T07:41:33.512246Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train.shape","metadata":{"execution":{"iopub.status.busy":"2024-10-09T07:41:33.515538Z","iopub.execute_input":"2024-10-09T07:41:33.516092Z","iopub.status.idle":"2024-10-09T07:41:33.525039Z","shell.execute_reply.started":"2024-10-09T07:41:33.516047Z","shell.execute_reply":"2024-10-09T07:41:33.523822Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test.shape","metadata":{"execution":{"iopub.status.busy":"2024-10-09T07:41:33.527870Z","iopub.execute_input":"2024-10-09T07:41:33.528764Z","iopub.status.idle":"2024-10-09T07:41:33.537497Z","shell.execute_reply.started":"2024-10-09T07:41:33.528706Z","shell.execute_reply":"2024-10-09T07:41:33.536009Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# <span style=\"background-color:#b27eed;padding:15px;border-radius:40px;\">✨Preprocessing</span>","metadata":{}},{"cell_type":"code","source":"from sklearn.preprocessing import StandardScaler, LabelEncoder\n\ndef preprocess_data(df,train_data=False):\n    # Handle numerical columns\n    scaler = StandardScaler()\n    num_cols = df.select_dtypes(include=np.number).columns\n    df[num_cols] = df[num_cols].fillna(df[num_cols].median())\n    \n    # Handle categorical columns\n    cat_cols = df.select_dtypes(include='object').columns\n    for col in cat_cols:\n        df[col] = df[col].fillna(df[col].mode()[0])  # Fill missing with the most frequent value\n        df[col] = LabelEncoder().fit_transform(df[col].astype(str))\n    \n    if train_data:\n        y = list(df['sii'])\n        X = scaler.fit_transform(df.drop(['sii'],axis=1))\n        return X,y\n    scaled_df = scaler.fit_transform(df)\n    \n    \n    return scaled_df\n\nX,y = preprocess_data(train,train_data=True)\ntest_data = preprocess_data(test)","metadata":{"execution":{"iopub.status.busy":"2024-10-09T07:41:33.538975Z","iopub.execute_input":"2024-10-09T07:41:33.539537Z","iopub.status.idle":"2024-10-09T07:41:33.789927Z","shell.execute_reply.started":"2024-10-09T07:41:33.539490Z","shell.execute_reply":"2024-10-09T07:41:33.788641Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# <span style=\"background-color:#b27eed;padding:15px;border-radius:40px;\">🔎GridSearchCV</span>","metadata":{}},{"cell_type":"code","source":"# Define parameter grid\n# param_grid = {\n#     'n_estimators': [100, 200, 300],\n#     'learning_rate': [0.1, 0.05, 0.01],\n#     'max_depth': [3, 5, 7],\n#     'subsample': [0.8, 0.9, 1.0],\n# }\n\n# # Create XGBoost classifier\n# xgb = XGBClassifier()\n\n# # Create grid search object\n# grid_search = GridSearchCV(xgb, param_grid, cv=5)\n\n# # Fit grid search to your data\n# grid_search.fit(X, y)\n\n# # Best parameters\n# best_params = grid_search.best_params_\n\nbest_params = {'learning_rate': 0.1, 'max_depth': 3, 'n_estimators': 100, 'subsample': 0.8}\nprint(best_params)","metadata":{"execution":{"iopub.status.busy":"2024-10-09T07:41:33.820598Z","iopub.execute_input":"2024-10-09T07:41:33.821314Z","iopub.status.idle":"2024-10-09T07:41:33.831345Z","shell.execute_reply.started":"2024-10-09T07:41:33.821256Z","shell.execute_reply":"2024-10-09T07:41:33.829745Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# <span style=\"background-color:#b27eed;padding:15px;border-radius:40px;\">🛡️XGBClassifier</span>","metadata":{}},{"cell_type":"code","source":"xgb_best = xgb.XGBClassifier(**best_params)\nxgb_best.fit(X, y, verbose=False)\n\ntest_result = xgb_best.predict(test_data).astype(np.int32)\ncsv_submission = pd.DataFrame(columns=['id','sii'])\ncsv_submission['id'] = ids\ncsv_submission['sii'] = test_result\ncsv_submission.to_csv('submission.csv',index=False)\n\ncsv_submission.head(20)","metadata":{"execution":{"iopub.status.busy":"2024-10-09T07:41:33.834713Z","iopub.execute_input":"2024-10-09T07:41:33.835196Z","iopub.status.idle":"2024-10-09T07:41:34.956458Z","shell.execute_reply.started":"2024-10-09T07:41:33.835126Z","shell.execute_reply":"2024-10-09T07:41:34.955523Z"},"trusted":true},"execution_count":null,"outputs":[]}]}