{"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.10.14"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":81933,"databundleVersionId":9643020,"sourceType":"competition"},{"sourceId":10192402,"sourceType":"datasetVersion","datasetId":6297529},{"sourceId":10192545,"sourceType":"datasetVersion","datasetId":6297641},{"sourceId":10192638,"sourceType":"datasetVersion","datasetId":6297708},{"sourceId":10192666,"sourceType":"datasetVersion","datasetId":6297733},{"sourceId":10192677,"sourceType":"datasetVersion","datasetId":6297741},{"sourceId":10192697,"sourceType":"datasetVersion","datasetId":6297758},{"sourceId":10194972,"sourceType":"datasetVersion","datasetId":6299411},{"sourceId":7453542,"sourceType":"datasetVersion","datasetId":921302}],"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":false},"papermill":{"default_parameters":{},"duration":35.463969,"end_time":"2024-12-12T09:11:02.725013","environment_variables":{},"exception":null,"input_path":"__notebook__.ipynb","output_path":"__notebook__.ipynb","parameters":{},"start_time":"2024-12-12T09:10:27.261044","version":"2.6.0"}},"nbformat_minor":4,"nbformat":4,"cells":[{"id":"5c5f8699","cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport os\nfrom colorama import Fore, Style\n\nfrom lightgbm import LGBMRegressor\nfrom catboost import CatBoostRegressor\nfrom xgboost import XGBRegressor\n\nfrom sklearn.base import clone\nfrom sklearn.preprocessing import StandardScaler\nfrom sklearn.impute import KNNImputer\nfrom sklearn.model_selection import StratifiedKFold\nfrom sklearn.metrics import cohen_kappa_score\nfrom scipy.optimize import minimize\nfrom sklearn.ensemble import VotingRegressor\n\n# from scipy.optimize import minimize\nfrom concurrent.futures import ThreadPoolExecutor\nfrom tqdm import tqdm\n\nimport torch\nimport torch.nn as nn\nimport torch.optim as optim\nfrom IPython.display import clear_output\n","metadata":{"_cell_guid":"17c47664-8074-4fb5-915b-96e458d74d15","_uuid":"df25e8ef-eff5-4e3f-9fe4-f58279a00a26","collapsed":false,"execution":{"iopub.status.busy":"2024-12-14T03:20:02.901486Z","iopub.execute_input":"2024-12-14T03:20:02.902029Z","iopub.status.idle":"2024-12-14T03:20:02.911220Z","shell.execute_reply.started":"2024-12-14T03:20:02.901982Z","shell.execute_reply":"2024-12-14T03:20:02.909023Z"},"jupyter":{"outputs_hidden":false},"papermill":{"duration":5.215957,"end_time":"2024-12-12T09:10:34.898595","exception":false,"start_time":"2024-12-12T09:10:29.682638","status":"completed"},"tags":[],"trusted":true},"outputs":[],"execution_count":null},{"id":"ade33c88-a3ff-4a63-9498-cfef7ce69b6f","cell_type":"code","source":"!pip -q install /kaggle/input/pytorchtabnet/pytorch_tabnet-4.1.0-py3-none-any.whl","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-14T03:20:02.918663Z","iopub.execute_input":"2024-12-14T03:20:02.919149Z","iopub.status.idle":"2024-12-14T03:20:45.925531Z","shell.execute_reply.started":"2024-12-14T03:20:02.919108Z","shell.execute_reply":"2024-12-14T03:20:45.923648Z"}},"outputs":[],"execution_count":null},{"id":"0f4c9f53-3c3f-477c-9ff6-10c06e5473b4","cell_type":"code","source":"import random\ndef seed_everything(seed):\n    random.seed(seed)\n    os.environ['PYTHONHASHSEED'] = str(seed)\n    np.random.seed(seed)\n    torch.manual_seed(seed)\n    torch.cuda.manual_seed(seed)\n    torch.backends.cudnn.deterministic = True\n    torch.backends.cudnn.benchmark = True\nseed_everything(2024)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-14T03:20:45.928880Z","iopub.execute_input":"2024-12-14T03:20:45.929313Z","iopub.status.idle":"2024-12-14T03:20:45.943305Z","shell.execute_reply.started":"2024-12-14T03:20:45.929272Z","shell.execute_reply":"2024-12-14T03:20:45.942149Z"}},"outputs":[],"execution_count":null},{"id":"ebbfb9bf","cell_type":"markdown","source":"### Mapping - Dropping features not in test sets","metadata":{"papermill":{"duration":0.008336,"end_time":"2024-12-12T09:10:34.917799","exception":false,"start_time":"2024-12-12T09:10:34.909463","status":"completed"},"tags":[]}},{"id":"0b035662","cell_type":"code","source":"df = pd.read_csv(\"/kaggle/input/child-mind-institute-problematic-internet-use/train.csv\")\ndf = df.dropna(subset=['sii']).reset_index() # keeping labeled values only\ntest = pd.read_csv(\"/kaggle/input/child-mind-institute-problematic-internet-use/test.csv\")\nseason_mapping = {\n    'Winter': -1,\n    'Spring': -0.5,\n    'Summer': 0.5,\n    'Fall': 1\n}\n# mapping non-string values\ndf = df.replace(season_mapping)\ntest = test.replace(season_mapping)\n\n# dropping questions not in test dataset\ntest_missing_columns = set(df.columns) - set(test.columns)\nfor col in test_missing_columns:\n    if col != 'sii':  # Retain the target column for training\n        df.drop(columns=col, inplace=True)\n# for later use\ntrain_ids = df['id']\ntest_ids = test['id']\ntrain_labels = df['sii']\n\n","metadata":{"execution":{"iopub.status.busy":"2024-12-14T03:20:45.945065Z","iopub.execute_input":"2024-12-14T03:20:45.945452Z","iopub.status.idle":"2024-12-14T03:20:46.060447Z","shell.execute_reply.started":"2024-12-14T03:20:45.945415Z","shell.execute_reply":"2024-12-14T03:20:46.059055Z"},"papermill":{"duration":0.126014,"end_time":"2024-12-12T09:10:35.055089","exception":false,"start_time":"2024-12-12T09:10:34.929075","status":"completed"},"tags":[],"trusted":true},"outputs":[],"execution_count":null},{"id":"b79d2afc","cell_type":"code","source":"df['sii'].value_counts()","metadata":{"execution":{"iopub.status.busy":"2024-12-14T03:20:46.063084Z","iopub.execute_input":"2024-12-14T03:20:46.063447Z","iopub.status.idle":"2024-12-14T03:20:46.076522Z","shell.execute_reply.started":"2024-12-14T03:20:46.063410Z","shell.execute_reply":"2024-12-14T03:20:46.075170Z"},"papermill":{"duration":0.022936,"end_time":"2024-12-12T09:10:35.090491","exception":false,"start_time":"2024-12-12T09:10:35.067555","status":"completed"},"tags":[],"trusted":true},"outputs":[],"execution_count":null},{"id":"bb9e56b6","cell_type":"markdown","source":"# K-Nearest neighboors missing data imputation","metadata":{"papermill":{"duration":0.006529,"end_time":"2024-12-12T09:10:35.103896","exception":false,"start_time":"2024-12-12T09:10:35.097367","status":"completed"},"tags":[]}},{"id":"25a2bc06","cell_type":"code","source":"featureCols = sorted(list(set(df.columns) - set(['sii', 'id'])))\n# featureCols","metadata":{"execution":{"iopub.status.busy":"2024-12-14T03:20:46.077651Z","iopub.execute_input":"2024-12-14T03:20:46.078077Z","iopub.status.idle":"2024-12-14T03:20:46.086946Z","shell.execute_reply.started":"2024-12-14T03:20:46.078040Z","shell.execute_reply":"2024-12-14T03:20:46.085642Z"},"papermill":{"duration":0.012714,"end_time":"2024-12-12T09:10:35.123196","exception":false,"start_time":"2024-12-12T09:10:35.110482","status":"completed"},"tags":[],"trusted":true},"outputs":[],"execution_count":null},{"id":"7a9d946b","cell_type":"code","source":"dropCols = []\nfor column in featureCols:\n    if (df[column].isnull().sum() > 1300):\n        dropCols.append(column)\ndropCols\ndf = df.drop(dropCols, axis=1)","metadata":{"execution":{"iopub.status.busy":"2024-12-14T03:20:46.088318Z","iopub.execute_input":"2024-12-14T03:20:46.088718Z","iopub.status.idle":"2024-12-14T03:20:46.113487Z","shell.execute_reply.started":"2024-12-14T03:20:46.088652Z","shell.execute_reply":"2024-12-14T03:20:46.112059Z"},"papermill":{"duration":0.023916,"end_time":"2024-12-12T09:10:35.153676","exception":false,"start_time":"2024-12-12T09:10:35.129760","status":"completed"},"tags":[],"trusted":true},"outputs":[],"execution_count":null},{"id":"46744528","cell_type":"code","source":"featureCols = sorted(list(set(df.columns) - set(['sii', 'id'])))\ntrain = pd.DataFrame(df, columns=featureCols)","metadata":{"execution":{"iopub.status.busy":"2024-12-14T03:20:46.115234Z","iopub.execute_input":"2024-12-14T03:20:46.115575Z","iopub.status.idle":"2024-12-14T03:20:46.131025Z","shell.execute_reply.started":"2024-12-14T03:20:46.115540Z","shell.execute_reply":"2024-12-14T03:20:46.129770Z"},"papermill":{"duration":0.013238,"end_time":"2024-12-12T09:10:35.173317","exception":false,"start_time":"2024-12-12T09:10:35.160079","status":"completed"},"tags":[],"trusted":true},"outputs":[],"execution_count":null},{"id":"67b5f97f-432c-4e02-9634-1336aee56e9a","cell_type":"code","source":"# !pip install /kaggle/input/ml-dtypes-wheel/ml_dtypes-0.5.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-14T03:20:46.132415Z","iopub.execute_input":"2024-12-14T03:20:46.132794Z","iopub.status.idle":"2024-12-14T03:20:46.142883Z","shell.execute_reply.started":"2024-12-14T03:20:46.132758Z","shell.execute_reply":"2024-12-14T03:20:46.141475Z"}},"outputs":[],"execution_count":null},{"id":"7bae03fe-90e5-49d0-b838-c3adc49e4d56","cell_type":"code","source":"# !pip install /kaggle/input/cmi-wheel/cloudpickle-3.1.0-py3-none-any.whl\n# !pip install /kaggle/input/cmi-wheel/geomloss-0.2.4-py3-none-any.whl\n# !pip install /kaggle/input/cmi-wheel/loguru-0.6.0-py3-none-any.whl\n# !pip install /kaggle/input/cmi-wheel/miracle_imputation-0.1.6-py3-none-any.whl\n# !pip install /kaggle/input/cmi-wheel/pydantic-2.10.3-py3-none-any.whl\n# # !pip install /kaggle/input/cmi-wheel/redis_wheel-6.2.5.1-202410081222-cp311-cp311-manylinux_2_28_x86_64.whl","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-14T03:20:46.144510Z","iopub.execute_input":"2024-12-14T03:20:46.145023Z","iopub.status.idle":"2024-12-14T03:20:46.156901Z","shell.execute_reply.started":"2024-12-14T03:20:46.144972Z","shell.execute_reply":"2024-12-14T03:20:46.155766Z"}},"outputs":[],"execution_count":null},{"id":"bc775e22-6ba2-4dc7-8f28-6550bbb64717","cell_type":"code","source":"# !pip install /kaggle/input/cmi-wheel-fix/pydantic-1.10.0-py3-none-any.whl \n# !pip install /kaggle/input/cmi-wheel-fix/redis-5.2.1-py3-none-any.whl","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-14T03:20:46.160613Z","iopub.execute_input":"2024-12-14T03:20:46.161635Z","iopub.status.idle":"2024-12-14T03:20:46.169376Z","shell.execute_reply.started":"2024-12-14T03:20:46.161594Z","shell.execute_reply":"2024-12-14T03:20:46.168226Z"}},"outputs":[],"execution_count":null},{"id":"df079171-b938-4f8f-92bd-640e711ca7ac","cell_type":"code","source":"# pip install /kaggle/input/jupyter-lsp-wheel/jupyter_lsp-2.2.5-py3-none-any.whl\n# pip install /kaggle/input/jupyterlab-wheel/jupyterlab-4.3.3-py3-none-any.whl\n# !pip  install /kaggle/input/cmi-wheel-addition/jupyter-1.1.1-py2.py3-none-any.whl\n# !pip  install /kaggle/input/another-hyperimputer/hyperimpute-0.1.17-py3-none-any.whl","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-14T03:20:46.171120Z","iopub.execute_input":"2024-12-14T03:20:46.171577Z","iopub.status.idle":"2024-12-14T03:20:46.182511Z","shell.execute_reply.started":"2024-12-14T03:20:46.171526Z","shell.execute_reply":"2024-12-14T03:20:46.181081Z"}},"outputs":[],"execution_count":null},{"id":"377aa771-380c-489b-be95-915134bdfc83","cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"id":"49e06aa2-6367-49cb-8bfe-0c93ec8eed44","cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"id":"d0a1b356-fbc1-4770-9f3a-4ad65d1684b4","cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"id":"6edc8c90-10d0-4ebd-a46e-e8c7e731977c","cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"id":"c295c270-f433-4b6a-932a-a3ac838bdf19","cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"id":"97b9a436-76bc-4f80-90d5-e5e8b2500bb4","cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"id":"efacf0ee-7ea2-40cb-9dff-ed46b0305390","cell_type":"code","source":"# from hyperimpute.plugins.imputers import Imputers\n\n# imputers = Imputers()\n\n# imputers.list()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-14T03:20:46.184115Z","iopub.execute_input":"2024-12-14T03:20:46.184499Z","iopub.status.idle":"2024-12-14T03:20:46.196583Z","shell.execute_reply.started":"2024-12-14T03:20:46.184462Z","shell.execute_reply":"2024-12-14T03:20:46.195130Z"}},"outputs":[],"execution_count":null},{"id":"c846206d-846a-452c-a989-979aaae71cc6","cell_type":"code","source":"# plugin = Imputers().get(\n#     \"hyperimpute\",  # the name of the imputation method.\n#     # The rest of the kwargs are specific to the method\n#     # optimizer: str. The optimizer to use: simple, hyperband, bayesian\n#     optimizer=\"bayesian\",\n#     # classifier_seed: list. Model search pool for categorical columns.\n#     classifier_seed=[\"logistic_regression\", \"catboost\", \"xgboost\", \"random_forest\"],\n#     # regression_seed: list. Model search pool for continuous columns.\n#     regression_seed=[\n#         \"linear_regression\",\n#         \"catboost_regressor\",\n#         \"xgboost_regressor\",\n#         \"random_forest_regressor\",\n#     ],\n#     # class_threshold: int. how many max unique items must be in the column to be is associated with categorical\n#     class_threshold=5,\n#     # imputation_order: int. 0 - ascending, 1 - descending, 2 - random\n#     imputation_order=2,\n#     # n_inner_iter: int. number of imputation iterations\n#     n_inner_iter=100,\n#     # select_model_by_column: bool. If true, select a different model for each column. Else, it reuses the model chosen for the first column.\n#     select_model_by_column=True,\n#     # select_model_by_iteration: bool. If true, selects new models for each iteration. Else, it reuses the models chosen in the first iteration.\n#     select_model_by_iteration=True,\n#     # select_lazy: bool. If false, starts the optimizer on every column unless other restrictions apply. Else, if for the current iteration there is a trend(at least to columns of the same type got the same model from the optimizer), it reuses the same model class for all the columns without starting the optimizer.\n#     select_lazy=True,\n#     # select_patience: int. How many iterations without objective function improvement to wait.\n#     select_patience=5,\n# )\n\n# # method = \"gain\"\n\n# # plugin = Imputers().get(\"gian\")\n# data = pd.concat([train, test], axis=0, ignore_index=True)\n# imputed_data = plugin.fit_transform(data[featureCols])\n# data = pd.DataFrame(imputed_data, columns=featureCols)\n# data","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-14T03:20:46.198286Z","iopub.execute_input":"2024-12-14T03:20:46.198804Z","iopub.status.idle":"2024-12-14T03:20:46.213317Z","shell.execute_reply.started":"2024-12-14T03:20:46.198749Z","shell.execute_reply":"2024-12-14T03:20:46.212019Z"}},"outputs":[],"execution_count":null},{"id":"6049ea06","cell_type":"code","source":"# normal\nimputer = KNNImputer(n_neighbors=5)  # k=4\n# # test 1 0.439\n# imputed_data = imputer.fit_transform(df[featureCols])\n# train = pd.DataFrame(imputed_data, columns=featureCols)\n# # train['sii'] = df['sii']\n# test_imputed = imputer.fit_transform(test[featureCols])\n# test = pd.DataFrame(test_imputed, columns=featureCols)\n# test\n# test 2\ndata = pd.concat([train, test], axis=0, ignore_index=True)\nimputed_data = imputer.fit_transform(data[featureCols])\ndata = pd.DataFrame(imputed_data, columns=featureCols)\ndata\n","metadata":{"papermill":{"duration":1.608273,"end_time":"2024-12-12T09:10:36.787993","exception":false,"start_time":"2024-12-12T09:10:35.179720","status":"completed"},"tags":[],"trusted":true,"execution":{"iopub.status.busy":"2024-12-14T03:20:46.214928Z","iopub.execute_input":"2024-12-14T03:20:46.215930Z","iopub.status.idle":"2024-12-14T03:20:48.511275Z","shell.execute_reply.started":"2024-12-14T03:20:46.215873Z","shell.execute_reply":"2024-12-14T03:20:48.509770Z"}},"outputs":[],"execution_count":null},{"id":"22c82878","cell_type":"code","source":"train.shape[0]","metadata":{"papermill":{"duration":0.014664,"end_time":"2024-12-12T09:10:36.809998","exception":false,"start_time":"2024-12-12T09:10:36.795334","status":"completed"},"tags":[],"trusted":true,"execution":{"iopub.status.busy":"2024-12-14T03:20:48.512889Z","iopub.execute_input":"2024-12-14T03:20:48.513373Z","iopub.status.idle":"2024-12-14T03:20:48.524502Z","shell.execute_reply.started":"2024-12-14T03:20:48.513334Z","shell.execute_reply":"2024-12-14T03:20:48.522882Z"}},"outputs":[],"execution_count":null},{"id":"9d32dbb4","cell_type":"code","source":"train = data.head(train.shape[0])\ntest = data.drop(train.index, axis=0).reset_index()","metadata":{"papermill":{"duration":0.014747,"end_time":"2024-12-12T09:10:36.831724","exception":false,"start_time":"2024-12-12T09:10:36.816977","status":"completed"},"tags":[],"trusted":true,"execution":{"iopub.status.busy":"2024-12-14T03:20:48.526272Z","iopub.execute_input":"2024-12-14T03:20:48.526717Z","iopub.status.idle":"2024-12-14T03:20:48.537226Z","shell.execute_reply.started":"2024-12-14T03:20:48.526658Z","shell.execute_reply":"2024-12-14T03:20:48.535899Z"}},"outputs":[],"execution_count":null},{"id":"8b40c701","cell_type":"code","source":"train","metadata":{"papermill":{"duration":0.033459,"end_time":"2024-12-12T09:10:36.872478","exception":false,"start_time":"2024-12-12T09:10:36.839019","status":"completed"},"tags":[],"trusted":true,"execution":{"iopub.status.busy":"2024-12-14T03:20:48.539365Z","iopub.execute_input":"2024-12-14T03:20:48.539879Z","iopub.status.idle":"2024-12-14T03:20:48.580846Z","shell.execute_reply.started":"2024-12-14T03:20:48.539816Z","shell.execute_reply":"2024-12-14T03:20:48.578157Z"}},"outputs":[],"execution_count":null},{"id":"b3ef1487","cell_type":"code","source":"test","metadata":{"papermill":{"duration":0.038807,"end_time":"2024-12-12T09:10:36.918672","exception":false,"start_time":"2024-12-12T09:10:36.879865","status":"completed"},"tags":[],"trusted":true,"execution":{"iopub.status.busy":"2024-12-14T03:20:48.582719Z","iopub.execute_input":"2024-12-14T03:20:48.583539Z","iopub.status.idle":"2024-12-14T03:20:48.635000Z","shell.execute_reply.started":"2024-12-14T03:20:48.583463Z","shell.execute_reply":"2024-12-14T03:20:48.633129Z"}},"outputs":[],"execution_count":null},{"id":"328b1b20","cell_type":"code","source":"train['sii'] = df['sii']\n","metadata":{"papermill":{"duration":0.014679,"end_time":"2024-12-12T09:10:36.941556","exception":false,"start_time":"2024-12-12T09:10:36.926877","status":"completed"},"tags":[],"trusted":true,"execution":{"iopub.status.busy":"2024-12-14T03:20:48.637001Z","iopub.execute_input":"2024-12-14T03:20:48.637413Z","iopub.status.idle":"2024-12-14T03:20:48.648297Z","shell.execute_reply.started":"2024-12-14T03:20:48.637374Z","shell.execute_reply":"2024-12-14T03:20:48.646289Z"}},"outputs":[],"execution_count":null},{"id":"6c9b7cc9","cell_type":"code","source":"test","metadata":{"papermill":{"duration":0.038891,"end_time":"2024-12-12T09:10:36.988330","exception":false,"start_time":"2024-12-12T09:10:36.949439","status":"completed"},"tags":[],"trusted":true,"execution":{"iopub.status.busy":"2024-12-14T03:20:48.650949Z","iopub.execute_input":"2024-12-14T03:20:48.651805Z","iopub.status.idle":"2024-12-14T03:20:48.701305Z","shell.execute_reply.started":"2024-12-14T03:20:48.651746Z","shell.execute_reply":"2024-12-14T03:20:48.700099Z"}},"outputs":[],"execution_count":null},{"id":"9e8f7256","cell_type":"markdown","source":"# Training function using QWK metric and threshold optimization","metadata":{"papermill":{"duration":0.008412,"end_time":"2024-12-12T09:10:37.005406","exception":false,"start_time":"2024-12-12T09:10:36.996994","status":"completed"},"tags":[]}},{"id":"c7484458","cell_type":"code","source":"def extract_features(df):\n    # df[\"Feat_0\"] = df[\"Physical-BMI\"] * df[\"Basic_Demos-Age\"]\n    # df[\"Feat_1\"] = df[\"PreInt_EduHx-computerinternet_hoursday\"] * df[\"Basic_Demos-Age\"]\n    # df[\"Feat_2\"] = df[\"Physical-BMI\"] * df[\"PreInt_EduHx-computerinternet_hoursday\"]\n    # df[\"Feat_3\"] = df[\"BIA-BIA_Fat\"] / df[\"BIA-BIA_BMI\"]\n    # df[\"Feat_4\"] = df[\"BIA-BIA_FFMI\"] / df[\"BIA-BIA_Fat\"]\n    # df[\"Feat_5\"] = df[\"BIA-BIA_FMI\"] / df[\"BIA-BIA_Fat\"]\n    # df[\"Feat_6\"] = df[\"BIA-BIA_LST\"] / df[\"BIA-BIA_TBW\"]\n    # df[\"Feat_7\"] = df[\"BIA-BIA_Fat\"] * df[\"BIA-BIA_BMR\"]\n    # df[\"Feat_8\"] = df[\"BIA-BIA_Fat\"] * df[\"BIA-BIA_DEE\"]\n    # df[\"Feat_9\"] = df[\"BIA-BIA_BMR\"] / df[\"Physical-Weight\"]\n    # df[\"Feat_10\"] = df[\"BIA-BIA_DEE\"] / df[\"Physical-Weight\"]\n    # df[\"Feat_11\"] = df[\"BIA-BIA_SMM\"] / df[\"Physical-Height\"]\n    # df[\"Feat_12\"] = df[\"BIA-BIA_SMM\"] / df[\"BIA-BIA_FMI\"]\n    # df[\"Feat_13\"] = df[\"BIA-BIA_TBW\"] / df[\"Physical-Weight\"]\n    # df[\"Feat_14\"] = df[\"BIA-BIA_ICW\"] / df[\"BIA-BIA_TBW\"]\n    # df[\"Feat_15\"] = df[\"Physical-BMI\"] * df[\"Physical-HeartRate\"]\n    # df[\"Feat_0\"] = df[\"Physical-Height\"] * df[\"PAQ_C-PAQ_C_Total\"]\n    # df[\"Feat_1\"] = df[\"FGC-FGC_TL_Zone\"] * df[\"Physical-Height\"]\n    # df[\"Feat_2\"] = df[\"PreInt_EduHx-computerinternet_hoursday\"] * df[\"BIA-BIA_Activity_Level_num\"]\n    # # df[\"Feat_3\"] = df[\"Fitness_Endurance-Time_Sec\"] / df[\"PreInt_EduHx-computerinternet_hoursday\"]\n    # df[\"Feat_4\"] = df[\"CGAS-CGAS_Score\"] / df[\"FGC-FGC_CU_Zone\"]\n    # df[\"Feat_5\"] = df[\"Basic_Demos-Age\"] / df[\"FGC-FGC_SRR_Zone\"]\n    # df[\"Feat_7\"] = df[\"PAQ_C-PAQ_C_Total\"] * df[\"BIA-BIA_Frame_num\"]\n    # # df[\"Feat_9\"] = df[\"FGC-FGC_GSD\"] / df[\"SDS-SDS_Total_Raw\"]\n    # # df[\"Feat_10\"] = df[\"PAQ_A-PAQ_A_Total\"] / df[\"PreInt_EduHx-computerinternet_hoursday\"]\n    # df[\"Feat_11\"] = df[\"BIA-BIA_LDM\"] / df[\"PreInt_EduHx-computerinternet_hoursday\"]\n    # df[\"Feat_14\"] = df[\"BIA-BIA_BMI\"] / df[\"SDS-SDS_Total_Raw\"]\n    # df[\"Feat_15\"] = df[\"Physical-Height\"] * df[\"SDS-SDS_Total_T\"]\n    # df[\"Feat_16\"] = df[\"Physical-Height\"] * df[\"Physical-Height\"]\n    # df[\"Feat_17\"] = df[\"FGC-FGC_SRL_Zone\"] / df[\"Physical-Weight\"]\n    # df[\"Feat_18\"] = df[\"Basic_Demos-Sex\"] * df[\"Basic_Demos-Sex\"]\n    # df[\"Feat_19\"] = df[\"FGC-FGC_GSND_Zone\"] / df[\"BIA-BIA_Fat\"]\n\n    df['BMI_Age'] = df['Physical-BMI'] * df['Basic_Demos-Age']\n    df['Internet_Hours_Age'] = df['PreInt_EduHx-computerinternet_hoursday'] * df['Basic_Demos-Age']\n    df['BMI_Internet_Hours'] = df['Physical-BMI'] * df['PreInt_EduHx-computerinternet_hoursday']\n    df['BFP_BMI'] = df['BIA-BIA_Fat'] / df['BIA-BIA_BMI']\n    df['FFMI_BFP'] = df['BIA-BIA_FFMI'] / df['BIA-BIA_Fat']\n    df['FMI_BFP'] = df['BIA-BIA_FMI'] / df['BIA-BIA_Fat']\n    df['LST_TBW'] = df['BIA-BIA_LST'] / df['BIA-BIA_TBW']\n    df['BFP_BMR'] = df['BIA-BIA_Fat'] * df['BIA-BIA_BMR']\n    df['BFP_DEE'] = df['BIA-BIA_Fat'] * df['BIA-BIA_DEE']\n    df['BMR_Weight'] = df['BIA-BIA_BMR'] / df['Physical-Weight']\n    df['DEE_Weight'] = df['BIA-BIA_DEE'] / df['Physical-Weight']\n    df['SMM_Height'] = df['BIA-BIA_SMM'] / df['Physical-Height']\n    df['Muscle_to_Fat'] = df['BIA-BIA_SMM'] / df['BIA-BIA_FMI']\n    df['Hydration_Status'] = df['BIA-BIA_TBW'] / df['Physical-Weight']\n    df['ICW_TBW'] = df['BIA-BIA_ICW'] / df['BIA-BIA_TBW']\n    df['BMI_PHR'] = df['Physical-BMI'] * df['Physical-HeartRate']\n\n    return df\n\ntrain = extract_features(train)\ntest = extract_features(test)\n","metadata":{"papermill":{"duration":0.028364,"end_time":"2024-12-12T09:10:37.042192","exception":false,"start_time":"2024-12-12T09:10:37.013828","status":"completed"},"tags":[],"trusted":true,"execution":{"iopub.status.busy":"2024-12-14T03:20:48.703343Z","iopub.execute_input":"2024-12-14T03:20:48.703854Z","iopub.status.idle":"2024-12-14T03:20:48.739188Z","shell.execute_reply.started":"2024-12-14T03:20:48.703801Z","shell.execute_reply":"2024-12-14T03:20:48.737785Z"}},"outputs":[],"execution_count":null},{"id":"919fe047","cell_type":"code","source":"","metadata":{"papermill":{"duration":0.008668,"end_time":"2024-12-12T09:10:37.059611","exception":false,"start_time":"2024-12-12T09:10:37.050943","status":"completed"},"tags":[],"trusted":true},"outputs":[],"execution_count":null},{"id":"f314640e","cell_type":"code","source":"# qwk score\ndef quadratic_weighted_kappa(y_true, y_pred):\n    return cohen_kappa_score(y_true, y_pred, weights='quadratic')\n\n# threshold rounder\ndef threshold_Rounder(oof_non_rounded, thresholds):\n    return np.where(oof_non_rounded < thresholds[0], 0,\n                    np.where(oof_non_rounded < thresholds[1], 1,\n                             np.where(oof_non_rounded < thresholds[2], 2, 3)))\n# prediction evaluation using qwk function\ndef evaluate_predictions(thresholds, y_true, oof_non_rounded):\n    rounded_p = threshold_Rounder(oof_non_rounded, thresholds)\n    return -quadratic_weighted_kappa(y_true, rounded_p)\n\ndef TrainML(model_class, train, test_data, featureCols) -> list[float]:\n    X = train[featureCols]\n    y = train['sii']\n\n    # Identify rows with NaN values in X\n\n    # Fill NaN and infinite values in X and test_data\n    X = X.fillna(0)\n    X = X.replace([np.inf, -np.inf], 0)\n    # test_data = test_data.fillna(0)\n    test_data = test_data.replace([np.inf, -np.inf], 0)\n\n    scaler = StandardScaler()\n    scaler.fit(X)\n    X = pd.DataFrame(scaler.transform(X), columns=X.columns)\n    test_data = test_data[featureCols]\n    test_data = pd.DataFrame(scaler.transform(test_data), columns=test_data.columns)\n    # nan_mask = test_data.isnull().any(axis=1)\n    # nan_indices = nan_mask[nan_mask].index\n    # print(test_data)\n    # print(nan_indices)\n    n_splits = 5\n    random_state = 42\n    SKF = StratifiedKFold(n_splits=n_splits, shuffle=True, random_state=random_state)\n\n    oof_non_rounded = np.zeros(len(y), dtype=float)\n    oof_rounded = np.zeros(len(y), dtype=int)\n    test_preds = np.zeros((len(test_data), n_splits))\n    train_S = []\n    test_S = []\n\n    for fold, (train_idx, test_idx) in enumerate(tqdm(SKF.split(X, y), desc=\"Training Folds\", total=n_splits)):\n        X_train, X_val = X.iloc[train_idx], X.iloc[test_idx]\n        y_train, y_val = y.iloc[train_idx], y.iloc[test_idx]\n        model = clone(model_class)\n        model.fit(X_train, y_train)\n\n        y_train_pred = model.predict(X_train)\n        y_val_pred = model.predict(X_val)\n\n        oof_non_rounded[test_idx] = y_val_pred\n        y_val_pred_rounded = y_val_pred.round(0).astype(int)\n        oof_rounded[test_idx] = y_val_pred_rounded\n\n        test_preds[:, fold] = model.predict(test_data)\n        train_kappa = quadratic_weighted_kappa(y_train, y_train_pred.round(0).astype(int))\n        val_kappa = quadratic_weighted_kappa(y_val, y_val_pred_rounded)\n\n        train_S.append(train_kappa)\n        test_S.append(val_kappa)\n        print(f\"Fold {fold+1} - Train QWK: {train_kappa:.4f}, Validation QWK: {val_kappa:.4f}\")\n        clear_output(wait=True)\n\n    KappaOptimizer = minimize(evaluate_predictions,\n                              x0=[0.5, 1.5, 2.5], args=(y, oof_non_rounded), \n                              method='Nelder-Mead')\n    assert KappaOptimizer.success, \"Optimization did not converge.\"\n    oof_tuned = threshold_Rounder(oof_non_rounded, KappaOptimizer.x)\n\n    tpm = test_preds.mean(axis=1)\n    tp_rounded = threshold_Rounder(tpm, KappaOptimizer.x)\n    print(f\"Mean Train QWK --> {np.mean(train_S):.4f}\")\n    print(f\"Mean Validation QWK ---> {np.mean(test_S):.4f}\")\n    # Inject NaN predictions for rows with NaN in the original train\n    predictions = np.array(tp_rounded.tolist())\n    print(predictions)\n    print(oof_tuned)\n    # for idx in nan_indices:\n    #     predictions[idx] = np.nan\n\n    return predictions.tolist()\n","metadata":{"papermill":{"duration":0.021327,"end_time":"2024-12-12T09:10:37.089637","exception":false,"start_time":"2024-12-12T09:10:37.068310","status":"completed"},"tags":[],"trusted":true,"execution":{"iopub.status.busy":"2024-12-14T03:20:48.741112Z","iopub.execute_input":"2024-12-14T03:20:48.741519Z","iopub.status.idle":"2024-12-14T03:20:48.761049Z","shell.execute_reply.started":"2024-12-14T03:20:48.741483Z","shell.execute_reply":"2024-12-14T03:20:48.759794Z"}},"outputs":[],"execution_count":null},{"id":"adbc4616","cell_type":"markdown","source":"# Parameters","metadata":{"papermill":{"duration":0.008429,"end_time":"2024-12-12T09:10:37.106617","exception":false,"start_time":"2024-12-12T09:10:37.098188","status":"completed"},"tags":[]}},{"id":"af253010","cell_type":"code","source":"SEED = 42\nLGBM_params = {\n    'learning_rate': 0.046,\n    'max_depth': 12,\n    'num_leaves': 478,\n    'min_data_in_leaf': 13,\n    'feature_fraction': 0.893,\n    'bagging_fraction': 0.784,\n    'bagging_freq': 4,\n    'lambda_l1': 10,  \n    'lambda_l2': 0.01\n}\n\nXGB_Params = {\n    # 'learning_rate': 0.05,\n    # 'max_depth': 6,\n    # 'n_estimators': 400,\n    # 'subsample': 0.8,\n    # 'colsample_bytree': 0.8,\n    # 'reg_alpha': 1,  \n    # 'reg_lambda': 5,  \n    # 'random_state': 42,\n    'tree_method': 'exact',\n    'learning_rate': 0.05,\n    'max_depth': 6,\n    'n_estimators': 400,\n    'subsample': 0.8,\n    'colsample_bytree': 0.8,\n    'reg_alpha': 1,  # Increased from 0.1\n    'reg_lambda': 5,  # Increased from 1\n    'random_state': SEED\n}\n\n\nCatBoost_Params = {\n    'learning_rate': 0.05,\n    'depth': 6,\n    'iterations': 200,\n    'random_seed': 42,\n    'verbose': 0,\n    'l2_leaf_reg': 10  \n    # 'learning_rate': 0.05,\n    # 'depth': 6,\n    # 'iterations': 200,\n    # 'random_seed': SEED,\n    # 'cat_features': cat_c,\n    # 'verbose': 0,\n    # 'l2_leaf_reg': 10  # Increase this value\n}\n\n\n","metadata":{"papermill":{"duration":0.015565,"end_time":"2024-12-12T09:10:37.130883","exception":false,"start_time":"2024-12-12T09:10:37.115318","status":"completed"},"tags":[],"trusted":true,"execution":{"iopub.status.busy":"2024-12-14T03:20:48.762544Z","iopub.execute_input":"2024-12-14T03:20:48.763043Z","iopub.status.idle":"2024-12-14T03:20:48.779181Z","shell.execute_reply.started":"2024-12-14T03:20:48.762992Z","shell.execute_reply":"2024-12-14T03:20:48.777695Z"}},"outputs":[],"execution_count":null},{"id":"6c0bb1bd","cell_type":"code","source":"# !pip install --no-index --no-deps /kaggle/input/pytorchtransformer/tab_transformer_pytorch-0.3.0-py3-none-any.whl\n","metadata":{"papermill":{"duration":0.014127,"end_time":"2024-12-12T09:10:37.153605","exception":false,"start_time":"2024-12-12T09:10:37.139478","status":"completed"},"tags":[],"trusted":true,"execution":{"iopub.status.busy":"2024-12-14T03:20:48.780820Z","iopub.execute_input":"2024-12-14T03:20:48.781200Z","iopub.status.idle":"2024-12-14T03:20:48.797587Z","shell.execute_reply.started":"2024-12-14T03:20:48.781160Z","shell.execute_reply":"2024-12-14T03:20:48.796247Z"}},"outputs":[],"execution_count":null},{"id":"4bdf10ed","cell_type":"code","source":"# from pytorch_tabnet.tab_model import TabNetRegressor\n# import torch\n# from sklearn.base import BaseEstimator, RegressorMixin\n# from sklearn.impute import SimpleImputer\n# from sklearn.model_selection import train_test_split\n# from pytorch_tabnet.callbacks import Callback\n# import os\n# import torch\n# from pytorch_tabnet.callbacks import Callback\n\n# class TabNetWrapper(BaseEstimator, RegressorMixin):\n#     def __init__(self, **kwargs):\n#         self.model = TabNetRegressor(**kwargs)\n#         self.kwargs = kwargs\n#         self.imputer = SimpleImputer(strategy='median')\n#         self.best_model_path = 'best_tabnet_model.pt'\n        \n#     def fit(self, X, y):\n#         # Handle missing values\n#         X_imputed = self.imputer.fit_transform(X)\n        \n#         if hasattr(y, 'values'):\n#             y = y.values\n            \n#         # Create internal validation set\n#         X_train, X_valid, y_train, y_valid = train_test_split(\n#             X_imputed, \n#             y, \n#             test_size=0.2,\n#             random_state=42\n#         )\n                \n#         # Train TabNet model\n#         history = self.model.fit(\n#             X_train=X_train,\n#             y_train=y_train.reshape(-1, 1),\n#             eval_set=[(X_valid, y_valid.reshape(-1, 1))],\n#             eval_name=['valid'],\n#             eval_metric=['mse'],\n#             max_epochs=500,\n#             patience=50,\n#             batch_size=1024,\n#             virtual_batch_size=128,\n#             num_workers=0,\n#             drop_last=False,\n#             callbacks=[\n#                 TabNetPretrainedModelCheckpoint(\n#                     filepath=self.best_model_path,\n#                     monitor='valid_mse',\n#                     mode='min',\n#                     save_best_only=True,\n#                     verbose=True\n#                 )\n#             ]\n#         )\n#                 # Load the best model\n#         if os.path.exists(self.best_model_path):\n#             self.model.load_model(self.best_model_path)\n#             os.remove(self.best_model_path)  # Remove temporary file\n        \n#         return self\n#         def predict(self, X):\n#             X_imputed = self.imputer.transform(X)\n#             return self.model.predict(X_imputed).flatten()\n    \n#     def __deepcopy__(self, memo):\n#         # Add deepcopy support for scikit-learn\n#         cls = self.__class__\n#         result = cls.__new__(cls)\n#         memo[id(self)] = result\n#         for k, v in self.__dict__.items():\n#             setattr(result, k, deepcopy(v, memo))\n#         return result\n\n# TabNet_Params = {\n#     'n_d': 64,              # Width of the decision prediction layer\n#     'n_a': 64,              # Width of the attention embedding for each step\n#     'n_steps': 5,           # Number of steps in the architecture\n#     'gamma': 1.5,           # Coefficient for feature selection regularization\n#     'n_independent': 2,     # Number of independent GLU layer in each GLU block\n#     'n_shared': 2,          # Number of shared GLU layer in each GLU block\n#     'lambda_sparse': 1e-4,  # Sparsity regularization\n#     'optimizer_fn': torch.optim.Adam,\n#     'optimizer_params': dict(lr=2e-2, weight_decay=1e-5),\n#     'mask_type': 'entmax',\n#     'scheduler_params': dict(mode=\"min\", patience=10, min_lr=1e-5, factor=0.5),\n#     'scheduler_fn': torch.optim.lr_scheduler.ReduceLROnPlateau,\n#     'verbose': 1,\n#     'device_name': 'cuda' if torch.cuda.is_available() else 'cpu'\n# }\n\n# class TabNetPretrainedModelCheckpoint(Callback):\n#     def __init__(self, filepath, monitor='val_loss', mode='min', \n#                  save_best_only=True, verbose=1):\n#         super().__init__()  # Initialize parent class\n#         self.filepath = filepath\n#         self.monitor = monitor\n#         self.mode = mode\n#         self.save_best_only = save_best_only\n#         self.verbose = verbose\n#         self.best = float('inf') if mode == 'min' else -float('inf')\n        \n#     def on_train_begin(self, logs=None):\n#         self.model = self.trainer  # Use trainer itself as model\n        \n#     def on_epoch_end(self, epoch, logs=None):\n#         logs = logs or {}\n#         current = logs.get(self.monitor)\n#         if current is None:\n#             return\n\n#     # Check if current metric is better than best\n#     if (self.mode == 'min' and current < self.best) or \\\n#        (self.mode == 'max' and current > self.best):\n#         if self.verbose:\n#             print(f'\\nEpoch {epoch}: {self.monitor} improved from {self.best:.4f} to {current:.4f}')\n#         self.best = current\n#         if self.save_best_only:\n#             self.model.save_model(self.filepath)  # Save the entire model","metadata":{"papermill":{"duration":0.016714,"end_time":"2024-12-12T09:10:37.179178","exception":false,"start_time":"2024-12-12T09:10:37.162464","status":"completed"},"tags":[],"trusted":true,"execution":{"iopub.status.busy":"2024-12-14T03:20:48.799507Z","iopub.execute_input":"2024-12-14T03:20:48.799904Z","iopub.status.idle":"2024-12-14T03:20:48.814012Z","shell.execute_reply.started":"2024-12-14T03:20:48.799859Z","shell.execute_reply":"2024-12-14T03:20:48.812557Z"}},"outputs":[],"execution_count":null},{"id":"be206194","cell_type":"markdown","source":"# Model decleration","metadata":{"papermill":{"duration":0.008478,"end_time":"2024-12-12T09:10:37.196287","exception":false,"start_time":"2024-12-12T09:10:37.187809","status":"completed"},"tags":[]}},{"id":"d637e27c","cell_type":"code","source":"Light = LGBMRegressor(**LGBM_params, random_state=42, verbose=-1, n_estimators=300)\nXGB_Model = XGBRegressor(**XGB_Params)\nCatBoost_Model = CatBoostRegressor(**CatBoost_Params)\n\nvoting_model = VotingRegressor(estimators=[\n    ('lightgbm', Light),\n    ('xgboost', XGB_Model),\n    ('catboost', CatBoost_Model)],\n     weights=[0.3, 0.5, 0.2]\n)\n","metadata":{"papermill":{"duration":0.017463,"end_time":"2024-12-12T09:10:37.222296","exception":false,"start_time":"2024-12-12T09:10:37.204833","status":"completed"},"tags":[],"trusted":true,"execution":{"iopub.status.busy":"2024-12-14T03:20:48.815467Z","iopub.execute_input":"2024-12-14T03:20:48.816109Z","iopub.status.idle":"2024-12-14T03:20:48.836282Z","shell.execute_reply.started":"2024-12-14T03:20:48.816050Z","shell.execute_reply":"2024-12-14T03:20:48.834640Z"}},"outputs":[],"execution_count":null},{"id":"6b230d98","cell_type":"markdown","source":"# XGboost model","metadata":{"papermill":{"duration":0.008501,"end_time":"2024-12-12T09:10:37.239517","exception":false,"start_time":"2024-12-12T09:10:37.231016","status":"completed"},"tags":[]}},{"id":"2f7176ac","cell_type":"code","source":"# xgb_preds = TrainML(model_class=XGB_Model, test_data=test)\n# sub = pd.DataFrame({\n    \n#     'id'   : test_ids,\n    \n#     'sii': xgb_preds\n# })\n# xgb_preds\n# sub","metadata":{"papermill":{"duration":0.014199,"end_time":"2024-12-12T09:10:37.262433","exception":false,"start_time":"2024-12-12T09:10:37.248234","status":"completed"},"tags":[],"trusted":true,"execution":{"iopub.status.busy":"2024-12-14T03:20:48.838291Z","iopub.execute_input":"2024-12-14T03:20:48.838825Z","iopub.status.idle":"2024-12-14T03:20:48.855541Z","shell.execute_reply.started":"2024-12-14T03:20:48.838774Z","shell.execute_reply":"2024-12-14T03:20:48.854015Z"}},"outputs":[],"execution_count":null},{"id":"fa407ba4","cell_type":"markdown","source":"# Light Gradient Boosting Machine model","metadata":{"papermill":{"duration":0.008554,"end_time":"2024-12-12T09:10:37.280081","exception":false,"start_time":"2024-12-12T09:10:37.271527","status":"completed"},"tags":[]}},{"id":"5583b22a","cell_type":"code","source":"# lgbm_preds = TrainML(model_class=Light, test_data=test)\n# sub = pd.DataFrame({\n    \n#     'id'   : test_ids,\n    \n#     'sii': lgbm_preds\n# })\n\n# sub","metadata":{"papermill":{"duration":0.014207,"end_time":"2024-12-12T09:10:37.302971","exception":false,"start_time":"2024-12-12T09:10:37.288764","status":"completed"},"tags":[],"trusted":true,"execution":{"iopub.status.busy":"2024-12-14T03:20:48.862730Z","iopub.execute_input":"2024-12-14T03:20:48.863147Z","iopub.status.idle":"2024-12-14T03:20:48.868278Z","shell.execute_reply.started":"2024-12-14T03:20:48.863107Z","shell.execute_reply":"2024-12-14T03:20:48.866968Z"}},"outputs":[],"execution_count":null},{"id":"96c7dea3","cell_type":"markdown","source":"# Catboost model","metadata":{"papermill":{"duration":0.008494,"end_time":"2024-12-12T09:10:37.320657","exception":false,"start_time":"2024-12-12T09:10:37.312163","status":"completed"},"tags":[]}},{"id":"05f3c261","cell_type":"code","source":"# cat_preds = TrainML(model_class=CatBoost_Model, test_data=test)\n# sub = pd.DataFrame({\n    \n#     'id'   : test_ids,\n    \n#     'sii': cat_preds\n# })\n\n# sub","metadata":{"papermill":{"duration":0.014122,"end_time":"2024-12-12T09:10:37.343387","exception":false,"start_time":"2024-12-12T09:10:37.329265","status":"completed"},"tags":[],"trusted":true,"execution":{"iopub.status.busy":"2024-12-14T03:20:48.869698Z","iopub.execute_input":"2024-12-14T03:20:48.870293Z","iopub.status.idle":"2024-12-14T03:20:48.885563Z","shell.execute_reply.started":"2024-12-14T03:20:48.870119Z","shell.execute_reply":"2024-12-14T03:20:48.884487Z"}},"outputs":[],"execution_count":null},{"id":"af267fcd","cell_type":"markdown","source":"<h1>Handle Time Series Data</h1>","metadata":{"papermill":{"duration":0.008461,"end_time":"2024-12-12T09:10:37.360495","exception":false,"start_time":"2024-12-12T09:10:37.352034","status":"completed"},"tags":[]}},{"id":"45ab1f30","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    return df\n\n\n","metadata":{"papermill":{"duration":0.016955,"end_time":"2024-12-12T09:10:37.386300","exception":false,"start_time":"2024-12-12T09:10:37.369345","status":"completed"},"tags":[],"trusted":true,"execution":{"iopub.status.busy":"2024-12-14T03:20:48.886874Z","iopub.execute_input":"2024-12-14T03:20:48.887295Z","iopub.status.idle":"2024-12-14T03:20:48.901397Z","shell.execute_reply.started":"2024-12-14T03:20:48.887257Z","shell.execute_reply":"2024-12-14T03:20:48.900128Z"}},"outputs":[],"execution_count":null},{"id":"f8195f2b","cell_type":"code","source":"# train_ts = load_time_series('/kaggle/input/child-mind-institute-problematic-internet-use/series_train.parquet')\n# test_ts = load_time_series('/kaggle/input/child-mind-institute-problematic-internet-use/series_test.parquet')\n# train_ts","metadata":{"papermill":{"duration":0.014243,"end_time":"2024-12-12T09:10:37.409308","exception":false,"start_time":"2024-12-12T09:10:37.395065","status":"completed"},"tags":[],"trusted":true,"execution":{"iopub.status.busy":"2024-12-14T03:20:48.902964Z","iopub.execute_input":"2024-12-14T03:20:48.903344Z","iopub.status.idle":"2024-12-14T03:20:48.918508Z","shell.execute_reply.started":"2024-12-14T03:20:48.903309Z","shell.execute_reply":"2024-12-14T03:20:48.917111Z"}},"outputs":[],"execution_count":null},{"id":"9a904b98","cell_type":"code","source":"# train","metadata":{"papermill":{"duration":0.014134,"end_time":"2024-12-12T09:10:37.432297","exception":false,"start_time":"2024-12-12T09:10:37.418163","status":"completed"},"tags":[],"trusted":true,"execution":{"iopub.status.busy":"2024-12-14T03:20:48.920221Z","iopub.execute_input":"2024-12-14T03:20:48.920625Z","iopub.status.idle":"2024-12-14T03:20:48.932201Z","shell.execute_reply.started":"2024-12-14T03:20:48.920575Z","shell.execute_reply":"2024-12-14T03:20:48.930892Z"}},"outputs":[],"execution_count":null},{"id":"12b25d28","cell_type":"code","source":"# train_with_ts = pd.concat([train, train_ts], axis=1, join='inner')\n# test_with_ts = pd.concat([test, test_ts], axis=1).reindex(test.index)\n\n# train_with_ts","metadata":{"papermill":{"duration":0.01396,"end_time":"2024-12-12T09:10:37.454926","exception":false,"start_time":"2024-12-12T09:10:37.440966","status":"completed"},"tags":[],"trusted":true,"execution":{"iopub.status.busy":"2024-12-14T03:20:48.933928Z","iopub.execute_input":"2024-12-14T03:20:48.934323Z","iopub.status.idle":"2024-12-14T03:20:48.947016Z","shell.execute_reply.started":"2024-12-14T03:20:48.934287Z","shell.execute_reply":"2024-12-14T03:20:48.945207Z"}},"outputs":[],"execution_count":null},{"id":"87dd3940","cell_type":"markdown","source":"# Voting regressor model - ensembler","metadata":{"papermill":{"duration":0.00853,"end_time":"2024-12-12T09:10:37.472030","exception":false,"start_time":"2024-12-12T09:10:37.463500","status":"completed"},"tags":[]}},{"id":"fd4d4cc6","cell_type":"code","source":"# test_with_ts","metadata":{"papermill":{"duration":0.014227,"end_time":"2024-12-12T09:10:37.495088","exception":false,"start_time":"2024-12-12T09:10:37.480861","status":"completed"},"tags":[],"trusted":true,"execution":{"iopub.status.busy":"2024-12-14T03:20:48.948395Z","iopub.execute_input":"2024-12-14T03:20:48.948889Z","iopub.status.idle":"2024-12-14T03:20:48.959639Z","shell.execute_reply.started":"2024-12-14T03:20:48.948752Z","shell.execute_reply":"2024-12-14T03:20:48.958354Z"}},"outputs":[],"execution_count":null},{"id":"e44d7f55","cell_type":"code","source":"# # featureCols\n# normal_preds = TrainML(voting_model, train, test, featureCols)","metadata":{"papermill":{"duration":0.01455,"end_time":"2024-12-12T09:10:37.518661","exception":false,"start_time":"2024-12-12T09:10:37.504111","status":"completed"},"tags":[],"trusted":true,"execution":{"iopub.status.busy":"2024-12-14T03:20:48.961328Z","iopub.execute_input":"2024-12-14T03:20:48.961708Z","iopub.status.idle":"2024-12-14T03:20:48.978519Z","shell.execute_reply.started":"2024-12-14T03:20:48.961658Z","shell.execute_reply":"2024-12-14T03:20:48.977001Z"}},"outputs":[],"execution_count":null},{"id":"b15e3087","cell_type":"code","source":"# normal_preds","metadata":{"papermill":{"duration":0.014081,"end_time":"2024-12-12T09:10:37.541440","exception":false,"start_time":"2024-12-12T09:10:37.527359","status":"completed"},"tags":[],"trusted":true,"execution":{"iopub.status.busy":"2024-12-14T03:20:48.981455Z","iopub.execute_input":"2024-12-14T03:20:48.982449Z","iopub.status.idle":"2024-12-14T03:20:48.997229Z","shell.execute_reply.started":"2024-12-14T03:20:48.982402Z","shell.execute_reply":"2024-12-14T03:20:48.995819Z"}},"outputs":[],"execution_count":null},{"id":"f9e15218","cell_type":"code","source":"# def TrainML(model_class, train, test_data, featureCols) -> list[int]:\nnots_featureCols = sorted(list(set(train.columns) - set(['sii', 'id'])))\n# featureCols\nnots_preds = TrainML(voting_model, train, test, nots_featureCols)","metadata":{"papermill":{"duration":24.293735,"end_time":"2024-12-12T09:11:01.843877","exception":false,"start_time":"2024-12-12T09:10:37.550142","status":"completed"},"tags":[],"trusted":true,"execution":{"iopub.status.busy":"2024-12-14T03:20:48.999407Z","iopub.execute_input":"2024-12-14T03:20:49.000166Z","iopub.status.idle":"2024-12-14T03:21:36.190048Z","shell.execute_reply.started":"2024-12-14T03:20:49.000076Z","shell.execute_reply":"2024-12-14T03:21:36.188719Z"}},"outputs":[],"execution_count":null},{"id":"46d35f5d","cell_type":"code","source":"nots_preds","metadata":{"papermill":{"duration":0.017182,"end_time":"2024-12-12T09:11:01.871189","exception":false,"start_time":"2024-12-12T09:11:01.854007","status":"completed"},"tags":[],"trusted":true,"execution":{"iopub.status.busy":"2024-12-14T03:21:36.191862Z","iopub.execute_input":"2024-12-14T03:21:36.192589Z","iopub.status.idle":"2024-12-14T03:21:36.205316Z","shell.execute_reply.started":"2024-12-14T03:21:36.192535Z","shell.execute_reply":"2024-12-14T03:21:36.203964Z"}},"outputs":[],"execution_count":null},{"id":"622e3218","cell_type":"code","source":"# # def TrainML(model_class, train, test_data, featureCols) -> list[int]:\n# ts_featureCols = sorted(list(set(train_with_ts.columns) - set(['sii', 'id'])))\n# # featureCols\n# ts_preds = TrainML(voting_model, train_with_ts, test_with_ts, ts_featureCols)","metadata":{"papermill":{"duration":0.015176,"end_time":"2024-12-12T09:11:01.895858","exception":false,"start_time":"2024-12-12T09:11:01.880682","status":"completed"},"tags":[],"trusted":true,"execution":{"iopub.status.busy":"2024-12-14T03:21:36.206734Z","iopub.execute_input":"2024-12-14T03:21:36.207314Z","iopub.status.idle":"2024-12-14T03:21:36.216280Z","shell.execute_reply.started":"2024-12-14T03:21:36.207264Z","shell.execute_reply":"2024-12-14T03:21:36.214761Z"}},"outputs":[],"execution_count":null},{"id":"00b20636","cell_type":"code","source":"# ts_preds","metadata":{"papermill":{"duration":0.014728,"end_time":"2024-12-12T09:11:01.919786","exception":false,"start_time":"2024-12-12T09:11:01.905058","status":"completed"},"tags":[],"trusted":true,"execution":{"iopub.status.busy":"2024-12-14T03:21:36.217596Z","iopub.execute_input":"2024-12-14T03:21:36.217957Z","iopub.status.idle":"2024-12-14T03:21:36.234545Z","shell.execute_reply.started":"2024-12-14T03:21:36.217921Z","shell.execute_reply":"2024-12-14T03:21:36.233238Z"}},"outputs":[],"execution_count":null},{"id":"8fc9b01c","cell_type":"code","source":"# nots_preds","metadata":{"papermill":{"duration":0.014741,"end_time":"2024-12-12T09:11:01.943777","exception":false,"start_time":"2024-12-12T09:11:01.929036","status":"completed"},"tags":[],"trusted":true,"execution":{"iopub.status.busy":"2024-12-14T03:21:36.236109Z","iopub.execute_input":"2024-12-14T03:21:36.236471Z","iopub.status.idle":"2024-12-14T03:21:36.253100Z","shell.execute_reply.started":"2024-12-14T03:21:36.236434Z","shell.execute_reply":"2024-12-14T03:21:36.251691Z"}},"outputs":[],"execution_count":null},{"id":"781b3d8f","cell_type":"code","source":"# vote_preds = TrainML(model_class=voting_model, test_data=test)\nfinal_sub = pd.DataFrame({\n    \n    'id'   : test_ids,\n    'sii': nots_preds\n})\n\n\nfinal_sub.to_csv('submission.csv', index=False)\nfinal_sub","metadata":{"papermill":{"duration":0.023432,"end_time":"2024-12-12T09:11:01.976606","exception":false,"start_time":"2024-12-12T09:11:01.953174","status":"completed"},"tags":[],"trusted":true,"execution":{"iopub.status.busy":"2024-12-14T03:21:36.254466Z","iopub.execute_input":"2024-12-14T03:21:36.254822Z","iopub.status.idle":"2024-12-14T03:21:36.278322Z","shell.execute_reply.started":"2024-12-14T03:21:36.254779Z","shell.execute_reply":"2024-12-14T03:21:36.276977Z"}},"outputs":[],"execution_count":null},{"id":"1d953c09","cell_type":"code","source":"","metadata":{"papermill":{"duration":0.009694,"end_time":"2024-12-12T09:11:01.996166","exception":false,"start_time":"2024-12-12T09:11:01.986472","status":"completed"},"tags":[],"trusted":true},"outputs":[],"execution_count":null}]}