{"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":"code","source":"import numpy as np\nimport pandas as pd\nimport os\nimport re\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nfrom sklearn.base import clone\nfrom sklearn.metrics import cohen_kappa_score\nfrom sklearn.model_selection import StratifiedKFold\nfrom scipy.optimize import minimize\nfrom concurrent.futures import ThreadPoolExecutor\nfrom tqdm import tqdm\nfrom sklearn.preprocessing import StandardScaler\nfrom sklearn.impute import SimpleImputer\nfrom sklearn.pipeline import Pipeline\nfrom keras.models import Model\nfrom keras.layers import Input, Dense\nfrom keras.optimizers import Adam\nfrom lightgbm import LGBMRegressor\nfrom xgboost import XGBRegressor\nfrom catboost import CatBoostRegressor\nfrom sklearn.ensemble import VotingRegressor, RandomForestRegressor, GradientBoostingRegressor\nfrom sklearn.linear_model import Ridge\nfrom colorama import Fore, Style\nfrom IPython.display import clear_output\nimport warnings\n\nwarnings.filterwarnings('ignore')\npd.options.display.max_columns = None\n\nSEED = 42\nn_splits = 5\n\n","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2024-10-15T19:10:21.995345Z","iopub.execute_input":"2024-10-15T19:10:21.995864Z","iopub.status.idle":"2024-10-15T19:10:22.006688Z","shell.execute_reply.started":"2024-10-15T19:10:21.995818Z","shell.execute_reply":"2024-10-15T19:10:22.005387Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train = pd.read_csv('/kaggle/input/child-mind-institute-problematic-internet-use/train.csv')\ntest = pd.read_csv('/kaggle/input/child-mind-institute-problematic-internet-use/test.csv')\nsample= pd.read_csv('/kaggle/input/child-mind-institute-problematic-internet-use/sample_submission.csv')","metadata":{"execution":{"iopub.status.busy":"2024-10-15T19:10:22.008984Z","iopub.execute_input":"2024-10-15T19:10:22.009418Z","iopub.status.idle":"2024-10-15T19:10:22.075281Z","shell.execute_reply.started":"2024-10-15T19:10:22.009374Z","shell.execute_reply":"2024-10-15T19:10:22.074086Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(\"Train Dataset Overview:\")\nprint(train.info())","metadata":{"execution":{"iopub.status.busy":"2024-10-15T19:10:22.076613Z","iopub.execute_input":"2024-10-15T19:10:22.076973Z","iopub.status.idle":"2024-10-15T19:10:22.101264Z","shell.execute_reply.started":"2024-10-15T19:10:22.076937Z","shell.execute_reply":"2024-10-15T19:10:22.100032Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(\"\\nTest Dataset Overview:\")\nprint(test.info())","metadata":{"execution":{"iopub.status.busy":"2024-10-15T19:10:22.104549Z","iopub.execute_input":"2024-10-15T19:10:22.105544Z","iopub.status.idle":"2024-10-15T19:10:22.1209Z","shell.execute_reply.started":"2024-10-15T19:10:22.10548Z","shell.execute_reply":"2024-10-15T19:10:22.119666Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(\"\\nSample Submission Overview:\")\nprint(sample.head())","metadata":{"execution":{"iopub.status.busy":"2024-10-15T19:10:22.122807Z","iopub.execute_input":"2024-10-15T19:10:22.123293Z","iopub.status.idle":"2024-10-15T19:10:22.134213Z","shell.execute_reply.started":"2024-10-15T19:10:22.123248Z","shell.execute_reply":"2024-10-15T19:10:22.132807Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train.describe()","metadata":{"execution":{"iopub.status.busy":"2024-10-15T19:10:22.136241Z","iopub.execute_input":"2024-10-15T19:10:22.13679Z","iopub.status.idle":"2024-10-15T19:10:22.345927Z","shell.execute_reply.started":"2024-10-15T19:10:22.136746Z","shell.execute_reply":"2024-10-15T19:10:22.344808Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(train.columns)\n","metadata":{"execution":{"iopub.status.busy":"2024-10-15T19:10:22.347277Z","iopub.execute_input":"2024-10-15T19:10:22.347652Z","iopub.status.idle":"2024-10-15T19:10:22.353879Z","shell.execute_reply.started":"2024-10-15T19:10:22.347613Z","shell.execute_reply":"2024-10-15T19:10:22.352782Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(\"\\nUnique values in target column 'sii':\")\nprint(train['sii'].value_counts())\n","metadata":{"execution":{"iopub.status.busy":"2024-10-15T19:10:22.355493Z","iopub.execute_input":"2024-10-15T19:10:22.355978Z","iopub.status.idle":"2024-10-15T19:10:22.367466Z","shell.execute_reply.started":"2024-10-15T19:10:22.355936Z","shell.execute_reply":"2024-10-15T19:10:22.365876Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import seaborn as sns\nimport matplotlib.pyplot as plt\n\n# Check if the target column exists\nif 'sii' in train.columns:\n    # Plot distribution of the target variable\n    plt.figure(figsize=(8, 6))\n    sns.histplot(train['sii'], bins=20, kde=True)\n    plt.title('Distribution of Problematic Internet Use')\n    plt.xlabel('Problematic Use')\n    plt.ylabel('Frequency')\n    plt.show()\nelse:\n    print(\"The target column 'Problematic_Use' does not exist in the DataFrame.\")\n","metadata":{"execution":{"iopub.status.busy":"2024-10-15T19:10:22.369324Z","iopub.execute_input":"2024-10-15T19:10:22.370533Z","iopub.status.idle":"2024-10-15T19:10:22.761848Z","shell.execute_reply.started":"2024-10-15T19:10:22.370461Z","shell.execute_reply":"2024-10-15T19:10:22.760645Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.figure(figsize=(8,6))\nsns.countplot(x='sii', data=train, palette='Set2')\nplt.title(\"Distribution of Target Variable (sii)\")\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-10-15T19:10:22.765678Z","iopub.execute_input":"2024-10-15T19:10:22.766124Z","iopub.status.idle":"2024-10-15T19:10:23.034084Z","shell.execute_reply.started":"2024-10-15T19:10:22.766082Z","shell.execute_reply":"2024-10-15T19:10:23.032612Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"numeric_train = train.select_dtypes(include=['float64', 'int64'])\n\nplt.figure(figsize=(12,8))\nsns.heatmap(numeric_train.corr(), annot=True, cmap='coolwarm', fmt='.2f')\nplt.title(\"Correlation Matrix of Numerical Features\")\nplt.show()\n","metadata":{"execution":{"iopub.status.busy":"2024-10-15T19:10:23.035943Z","iopub.execute_input":"2024-10-15T19:10:23.036467Z","iopub.status.idle":"2024-10-15T19:10:34.688159Z","shell.execute_reply.started":"2024-10-15T19:10:23.03641Z","shell.execute_reply":"2024-10-15T19:10:34.686621Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(\"\\nData types of columns in train dataset:\")\nprint(train.dtypes)","metadata":{"execution":{"iopub.status.busy":"2024-10-15T19:10:34.689842Z","iopub.execute_input":"2024-10-15T19:10:34.690285Z","iopub.status.idle":"2024-10-15T19:10:34.699004Z","shell.execute_reply.started":"2024-10-15T19:10:34.690241Z","shell.execute_reply":"2024-10-15T19:10:34.6976Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# numerical_features = train.select_dtypes(include=['int64', 'float64']).columns.tolist()\n# for feature in numerical_features:\n#     if feature != 'sii':\n#         plt.figure(figsize=(10,6))\n#         sns.boxplot(x='sii', y=feature, data=train, palette='Set3')\n#         plt.title(f\"{feature} vs sii\")\n#         plt.show()","metadata":{"execution":{"iopub.status.busy":"2024-10-15T19:10:34.700498Z","iopub.execute_input":"2024-10-15T19:10:34.700941Z","iopub.status.idle":"2024-10-15T19:10:34.70986Z","shell.execute_reply.started":"2024-10-15T19:10:34.700892Z","shell.execute_reply":"2024-10-15T19:10:34.708443Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from math import ceil\nnumerical_features = train.select_dtypes(include=['int64', 'float64']).columns.tolist()\nnumerical_features = [feature for feature in numerical_features if feature != 'sii']\n\nnum_features = len(numerical_features)\ncols = 2 \nrows = ceil(num_features / cols) \nfig, axes = plt.subplots(rows, cols, figsize=(15, rows * 5)) \nfig.tight_layout(pad=5.0)  \naxes = axes.flatten()\n\nfor i, feature in enumerate(numerical_features):\n    sns.boxplot(x='sii', y=feature, data=train, palette='Set3', ax=axes[i])\n    axes[i].set_title(f\"{feature} vs sii\")\n\nfor j in range(i + 1, len(axes)):\n    fig.delaxes(axes[j])\n\nplt.show()\n","metadata":{"execution":{"iopub.status.busy":"2024-10-15T19:10:34.711544Z","iopub.execute_input":"2024-10-15T19:10:34.712207Z","iopub.status.idle":"2024-10-15T19:10:52.099849Z","shell.execute_reply.started":"2024-10-15T19:10:34.712157Z","shell.execute_reply":"2024-10-15T19:10:52.098493Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"categorical_features = train.select_dtypes(include=['object']).columns.tolist()\nfor feature in categorical_features:\n    plt.figure(figsize=(10,6))\n    sns.countplot(x=feature, hue='sii', data=train, palette='coolwarm')\n    plt.title(f\"Distribution of {feature} vs sii\")\n    plt.xticks(rotation=90)\n    plt.show()","metadata":{"execution":{"iopub.status.busy":"2024-10-15T19:10:52.101618Z","iopub.execute_input":"2024-10-15T19:10:52.102058Z","iopub.status.idle":"2024-10-15T19:12:03.192034Z","shell.execute_reply.started":"2024-10-15T19:10:52.102014Z","shell.execute_reply":"2024-10-15T19:12:03.190855Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(\"Missing values in the train dataset:\")\nprint(train.isnull().sum())\n\nprint(\"\\nMissing values in the test dataset:\")\nprint(test.isnull().sum())","metadata":{"execution":{"iopub.status.busy":"2024-10-15T19:12:03.193614Z","iopub.execute_input":"2024-10-15T19:12:03.194099Z","iopub.status.idle":"2024-10-15T19:12:03.207912Z","shell.execute_reply.started":"2024-10-15T19:12:03.194049Z","shell.execute_reply":"2024-10-15T19:12:03.206621Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"missing_train = train.isnull().sum() / len(train) * 100\nmissing_test = test.isnull().sum() / len(test) * 100\n\nmissing_train = missing_train[missing_train > 0].sort_values(ascending=False)\nmissing_test = missing_test[missing_test > 0].sort_values(ascending=False)\n\nprint(\"Missing Values in Train Dataset (%):\")\nprint(missing_train)\n\nprint(\"\\nMissing Values in Test Dataset (%):\")\nprint(missing_test)\n","metadata":{"execution":{"iopub.status.busy":"2024-10-15T19:12:03.209373Z","iopub.execute_input":"2024-10-15T19:12:03.209892Z","iopub.status.idle":"2024-10-15T19:12:03.2319Z","shell.execute_reply.started":"2024-10-15T19:12:03.209846Z","shell.execute_reply":"2024-10-15T19:12:03.230692Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train = train.drop(columns=missing_train[missing_train > 50].index)\ntest = test.drop(columns=missing_test[missing_test > 50].index)","metadata":{"execution":{"iopub.status.busy":"2024-10-15T19:12:03.233563Z","iopub.execute_input":"2024-10-15T19:12:03.234058Z","iopub.status.idle":"2024-10-15T19:12:03.245034Z","shell.execute_reply.started":"2024-10-15T19:12:03.234005Z","shell.execute_reply":"2024-10-15T19:12:03.24373Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"common_num_columns = train.select_dtypes(include=['float64', 'int64']).columns.intersection(test.select_dtypes(include=['float64', 'int64']).columns)\n\ntrain[common_num_columns] = train[common_num_columns].fillna(train[common_num_columns].median())\ntest[common_num_columns] = test[common_num_columns].fillna(test[common_num_columns].median())\n\ncommon_cat_columns = train.select_dtypes(include=['object']).columns.intersection(test.select_dtypes(include=['object']).columns)\ntrain[common_cat_columns] = train[common_cat_columns].fillna(train[common_cat_columns].mode().iloc[0])\ntest[common_cat_columns] = test[common_cat_columns].fillna(test[common_cat_columns].mode().iloc[0])\n","metadata":{"execution":{"iopub.status.busy":"2024-10-15T19:12:03.246689Z","iopub.execute_input":"2024-10-15T19:12:03.247142Z","iopub.status.idle":"2024-10-15T19:12:03.311875Z","shell.execute_reply.started":"2024-10-15T19:12:03.247101Z","shell.execute_reply":"2024-10-15T19:12:03.310804Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for col in missing_train.index:\n    if col in train.columns:\n        train[f'{col}_missing'] = train[col].isnull().astype(int)\n\nfor col in missing_test.index:\n    if col in test.columns:\n        test[f'{col}_missing'] = test[col].isnull().astype(int)\n","metadata":{"execution":{"iopub.status.busy":"2024-10-15T19:12:03.312985Z","iopub.execute_input":"2024-10-15T19:12:03.313343Z","iopub.status.idle":"2024-10-15T19:12:03.381949Z","shell.execute_reply.started":"2024-10-15T19:12:03.313305Z","shell.execute_reply":"2024-10-15T19:12:03.380866Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(\"Missing values after imputation in train dataset:\")\nprint(train.isnull().sum().sum())\n\nprint(\"\\nMissing values after imputation in test dataset:\")\nprint(test.isnull().sum().sum())\n","metadata":{"execution":{"iopub.status.busy":"2024-10-15T19:12:03.383266Z","iopub.execute_input":"2024-10-15T19:12:03.383636Z","iopub.status.idle":"2024-10-15T19:12:03.403092Z","shell.execute_reply.started":"2024-10-15T19:12:03.3836Z","shell.execute_reply":"2024-10-15T19:12:03.401876Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"missing_after_imputation = train.isnull().sum()\nmissing_after_imputation = missing_after_imputation[missing_after_imputation > 0]\nprint(\"Columns with missing values after imputation in train dataset:\")\nprint(missing_after_imputation)\n","metadata":{"execution":{"iopub.status.busy":"2024-10-15T19:12:03.404936Z","iopub.execute_input":"2024-10-15T19:12:03.405283Z","iopub.status.idle":"2024-10-15T19:12:03.421747Z","shell.execute_reply.started":"2024-10-15T19:12:03.405248Z","shell.execute_reply":"2024-10-15T19:12:03.420469Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"columns_to_impute = ['CGAS-CGAS_Score', 'BIA-BIA_Activity_Level_num', 'BIA-BIA_BMC', \n                     'BIA-BIA_BMI', 'BIA-BIA_BMR', 'BIA-BIA_DEE', 'BIA-BIA_ECW', \n                     'BIA-BIA_FFM', 'BIA-BIA_FFMI', 'BIA-BIA_FMI', 'BIA-BIA_Fat', \n                     'BIA-BIA_Frame_num', 'BIA-BIA_ICW', 'BIA-BIA_LDM', 'BIA-BIA_LST', \n                     'BIA-BIA_SMM', 'BIA-BIA_TBW', 'PCIAT-PCIAT_01', 'PCIAT-PCIAT_02', \n                     'PCIAT-PCIAT_03', 'PCIAT-PCIAT_04', 'PCIAT-PCIAT_05', 'PCIAT-PCIAT_06', \n                     'PCIAT-PCIAT_07', 'PCIAT-PCIAT_08', 'PCIAT-PCIAT_09', 'PCIAT-PCIAT_10', \n                     'PCIAT-PCIAT_11', 'PCIAT-PCIAT_12', 'PCIAT-PCIAT_13', 'PCIAT-PCIAT_14', \n                     'PCIAT-PCIAT_15', 'PCIAT-PCIAT_16', 'PCIAT-PCIAT_17', 'PCIAT-PCIAT_18', \n                     'PCIAT-PCIAT_19', 'PCIAT-PCIAT_20', 'PCIAT-PCIAT_Total']\n\n\ntrain[columns_to_impute] = train[columns_to_impute].fillna(train[columns_to_impute].median())\n","metadata":{"execution":{"iopub.status.busy":"2024-10-15T19:12:03.423252Z","iopub.execute_input":"2024-10-15T19:12:03.423853Z","iopub.status.idle":"2024-10-15T19:12:03.462812Z","shell.execute_reply.started":"2024-10-15T19:12:03.423805Z","shell.execute_reply":"2024-10-15T19:12:03.461492Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"categorical_columns_to_impute = ['PCIAT-Season', 'BIA-Season', 'sii']\n\ntrain[categorical_columns_to_impute] = train[categorical_columns_to_impute].fillna(train[categorical_columns_to_impute].mode().iloc[0])\n","metadata":{"execution":{"iopub.status.busy":"2024-10-15T19:12:03.464415Z","iopub.execute_input":"2024-10-15T19:12:03.464923Z","iopub.status.idle":"2024-10-15T19:12:03.480291Z","shell.execute_reply.started":"2024-10-15T19:12:03.464869Z","shell.execute_reply":"2024-10-15T19:12:03.479211Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(\"Remaining missing values in train dataset after re-imputation:\")\nprint(train.isnull().sum().sum())\n","metadata":{"execution":{"iopub.status.busy":"2024-10-15T19:12:03.486353Z","iopub.execute_input":"2024-10-15T19:12:03.486834Z","iopub.status.idle":"2024-10-15T19:12:03.504784Z","shell.execute_reply.started":"2024-10-15T19:12:03.486791Z","shell.execute_reply":"2024-10-15T19:12:03.503579Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.preprocessing import StandardScaler\ncommon_columns = train.columns.intersection(test.columns)\nnum_columns = train[common_columns].select_dtypes(include=['float64', 'int64']).columns\nscaler = StandardScaler()\ntrain[num_columns] = scaler.fit_transform(train[num_columns])\ntest[num_columns] = scaler.transform(test[num_columns])\n\nprint(\"Feature scaling completed for numerical columns.\")\n","metadata":{"execution":{"iopub.status.busy":"2024-10-15T19:12:03.5062Z","iopub.execute_input":"2024-10-15T19:12:03.506669Z","iopub.status.idle":"2024-10-15T19:12:03.544428Z","shell.execute_reply.started":"2024-10-15T19:12:03.506611Z","shell.execute_reply":"2024-10-15T19:12:03.543274Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(f\"Number of NaN values in y_train: {y_train.isna().sum()}\")\n","metadata":{"execution":{"iopub.status.busy":"2024-10-15T19:12:03.545926Z","iopub.execute_input":"2024-10-15T19:12:03.546295Z","iopub.status.idle":"2024-10-15T19:12:03.553126Z","shell.execute_reply.started":"2024-10-15T19:12:03.546257Z","shell.execute_reply":"2024-10-15T19:12:03.551829Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_train_clean = X_train[~y_train.isna()] \ny_train_clean = y_train[~y_train.isna()] \n","metadata":{"execution":{"iopub.status.busy":"2024-10-15T19:12:03.555032Z","iopub.execute_input":"2024-10-15T19:12:03.555561Z","iopub.status.idle":"2024-10-15T19:12:03.56678Z","shell.execute_reply.started":"2024-10-15T19:12:03.555468Z","shell.execute_reply":"2024-10-15T19:12:03.565612Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Impute missing values in y_train using the median\ny_train.fillna(y_train.median(), inplace=True)\n","metadata":{"execution":{"iopub.status.busy":"2024-10-15T19:12:03.5682Z","iopub.execute_input":"2024-10-15T19:12:03.569055Z","iopub.status.idle":"2024-10-15T19:12:03.575942Z","shell.execute_reply.started":"2024-10-15T19:12:03.569009Z","shell.execute_reply":"2024-10-15T19:12:03.57479Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.metrics import make_scorer, cohen_kappa_score\n\ndef qwk_scorer(estimator, X, y):\n    y_pred = estimator.predict(X) \n    return cohen_kappa_score(y, y_pred, weights='quadratic')\n\nscorer = make_scorer(qwk_scorer, greater_is_better=True)\n","metadata":{"execution":{"iopub.status.busy":"2024-10-15T19:12:03.577285Z","iopub.execute_input":"2024-10-15T19:12:03.577677Z","iopub.status.idle":"2024-10-15T19:12:03.587756Z","shell.execute_reply.started":"2024-10-15T19:12:03.577638Z","shell.execute_reply":"2024-10-15T19:12:03.586581Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.linear_model import LogisticRegression\nfrom sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier\nfrom xgboost import XGBClassifier\nfrom lightgbm import LGBMClassifier\nfrom catboost import CatBoostClassifier\n\nmodels = {\n    \"Logistic Regression\": LogisticRegression(max_iter=1000),\n    \"Random Forest\": RandomForestClassifier(),\n    \"Gradient Boosting\": GradientBoostingClassifier(),\n    \"XGBoost\": XGBClassifier(),\n    \"LightGBM\": LGBMClassifier(),\n    \"CatBoost\": CatBoostClassifier(verbose=0)\n}\n","metadata":{"execution":{"iopub.status.busy":"2024-10-15T19:12:03.589387Z","iopub.execute_input":"2024-10-15T19:12:03.590439Z","iopub.status.idle":"2024-10-15T19:12:03.599834Z","shell.execute_reply.started":"2024-10-15T19:12:03.590386Z","shell.execute_reply":"2024-10-15T19:12:03.598714Z"},"trusted":true},"execution_count":null,"outputs":[]},{"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\n\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\ndef build_autoencoder(input_dim, encoding_dim):\n    input_layer = Input(shape=(input_dim,))\n    encoded = Dense(encoding_dim, activation='relu')(input_layer)\n    decoded = Dense(input_dim, activation='sigmoid')(encoded)\n    autoencoder = Model(inputs=input_layer, outputs=decoded)\n    encoder = Model(inputs=input_layer, outputs=encoded)\n    autoencoder.compile(optimizer=Adam(), loss='mse')\n    \n    return autoencoder, encoder\n\ndef perform_autoencoder(df, encoding_dim=50, epochs=50, batch_size=32):\n    scaler = StandardScaler()\n    df_scaled = scaler.fit_transform(df)\n    \n    imputer = SimpleImputer(strategy='median')\n    df_scaled = pd.DataFrame(imputer.fit_transform(df_scaled))\n\n    input_dim = df_scaled.shape[1]\n    autoencoder, encoder = build_autoencoder(input_dim, encoding_dim)\n    \n    autoencoder.fit(df_scaled, df_scaled, epochs=epochs, batch_size=batch_size, shuffle=True, verbose=1)\n    encoded_data = encoder.predict(df_scaled)\n    \n    df_encoded = pd.DataFrame(encoded_data, columns=[f'Enc_{i+1}' for i in range(encoded_data.shape[1])])\n    \n    return df_encoded","metadata":{"execution":{"iopub.status.busy":"2024-10-15T19:12:03.601301Z","iopub.execute_input":"2024-10-15T19:12:03.601757Z","iopub.status.idle":"2024-10-15T19:12:03.616943Z","shell.execute_reply.started":"2024-10-15T19:12:03.601697Z","shell.execute_reply":"2024-10-15T19:12:03.615731Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train = pd.read_csv('/kaggle/input/child-mind-institute-problematic-internet-use/train.csv')\ntest = pd.read_csv('/kaggle/input/child-mind-institute-problematic-internet-use/test.csv')\nsample = pd.read_csv('/kaggle/input/child-mind-institute-problematic-internet-use/sample_submission.csv')\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\")\n\ndf_train = train_ts.drop('id', axis=1)\ndf_test = test_ts.drop('id', axis=1)\n\ntrain_ts_encoded = perform_autoencoder(df_train, encoding_dim=50, epochs=100, batch_size=32)\ntest_ts_encoded = perform_autoencoder(df_test, encoding_dim=50, epochs=100, batch_size=32)\n\ntime_series_cols = train_ts_encoded.columns.tolist()\n\ntrain_ts_encoded['id'] = train_ts['id']\ntest_ts_encoded['id'] = test_ts['id']\n\ntrain = pd.merge(train, train_ts_encoded, how=\"left\", on='id')\ntest = pd.merge(test, test_ts_encoded, how=\"left\", on='id')\ntest_ = pd.merge(test, test_ts, how='left', on='id')\n\ntrain = train.drop('id', axis=1)\ntest = test.drop('id', axis=1)   \n\n\nfeaturesCols = ['Basic_Demos-Enroll_Season', 'Basic_Demos-Age', 'Basic_Demos-Sex',\n                'CGAS-Season', 'CGAS-CGAS_Score', 'Physical-Season', 'Physical-BMI',\n                'Physical-Height', 'Physical-Weight', 'Physical-Waist_Circumference',\n                'Physical-Diastolic_BP', 'Physical-HeartRate', 'Physical-Systolic_BP',\n                'Fitness_Endurance-Season', 'Fitness_Endurance-Max_Stage',\n                'Fitness_Endurance-Time_Mins', 'Fitness_Endurance-Time_Sec',\n                'FGC-Season', 'FGC-FGC_CU', 'FGC-FGC_CU_Zone', 'FGC-FGC_GSND',\n                'FGC-FGC_GSND_Zone', 'FGC-FGC_GSD', 'FGC-FGC_GSD_Zone', 'FGC-FGC_PU',\n                'FGC-FGC_PU_Zone', 'FGC-FGC_SRL', 'FGC-FGC_SRL_Zone', 'FGC-FGC_SRR',\n                'FGC-FGC_SRR_Zone', 'FGC-FGC_TL', 'FGC-FGC_TL_Zone', 'BIA-Season',\n                'BIA-BIA_Activity_Level_num', 'BIA-BIA_BMC', 'BIA-BIA_BMI',\n                'BIA-BIA_BMR', 'BIA-BIA_DEE', 'BIA-BIA_ECW', 'BIA-BIA_FFM',\n                'BIA-BIA_FFMI', 'BIA-BIA_FMI', 'BIA-BIA_Fat', 'BIA-BIA_Frame_num',\n                'BIA-BIA_ICW', 'BIA-BIA_LDM', 'BIA-BIA_LST', 'BIA-BIA_SMM',\n                'BIA-BIA_TBW', 'PAQ_A-Season', 'PAQ_A-PAQ_A_Total', 'PAQ_C-Season',\n                'PAQ_C-PAQ_C_Total', 'SDS-Season', 'SDS-SDS_Total_Raw',\n                'SDS-SDS_Total_T', 'PreInt_EduHx-Season',\n                'PreInt_EduHx-computerinternet_hoursday', 'sii']\n\nfeaturesCols += time_series_cols\n\ntrain = train[featuresCols]\ntrain = train.dropna(subset='sii')\n\ncat_c = ['Basic_Demos-Enroll_Season', 'CGAS-Season', 'Physical-Season', \n          'Fitness_Endurance-Season', 'FGC-Season', 'BIA-Season', \n          'PAQ_A-Season', 'PAQ_C-Season', 'SDS-Season', 'PreInt_EduHx-Season']","metadata":{"execution":{"iopub.status.busy":"2024-10-15T19:12:03.619058Z","iopub.execute_input":"2024-10-15T19:12:03.619438Z","iopub.status.idle":"2024-10-15T19:13:49.982739Z","shell.execute_reply.started":"2024-10-15T19:12:03.619399Z","shell.execute_reply":"2024-10-15T19:13:49.981629Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Light = LGBMRegressor(**Params, random_state=SEED, 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])","metadata":{"execution":{"iopub.status.busy":"2024-10-15T19:13:49.984162Z","iopub.execute_input":"2024-10-15T19:13:49.984661Z","iopub.status.idle":"2024-10-15T19:13:49.994041Z","shell.execute_reply.started":"2024-10-15T19:13:49.984485Z","shell.execute_reply":"2024-10-15T19:13:49.992707Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.preprocessing import StandardScaler, OneHotEncoder\nfrom sklearn.compose import ColumnTransformer\nfrom sklearn.pipeline import Pipeline\nfrom sklearn.impute import SimpleImputer\nfrom sklearn.model_selection import train_test_split\n\nX = train.drop('sii', axis=1)\ny = train['sii']\n\nX_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42)\n\ncategorical_features = cat_c\ncategorical_transformer = Pipeline(steps=[\n    ('imputer', SimpleImputer(strategy='most_frequent')),  \n    ('onehot', OneHotEncoder(handle_unknown='ignore'))   \n])\n\n\nnumerical_features = list(set(X.columns) - set(categorical_features))\nnumerical_transformer = Pipeline(steps=[\n    ('imputer', SimpleImputer(strategy='median')), \n    ('scaler', StandardScaler())                   \n])\n\npreprocessor = ColumnTransformer(\n    transformers=[\n        ('num', numerical_transformer, numerical_features),\n        ('cat', categorical_transformer, categorical_features)\n    ])\n\n","metadata":{"execution":{"iopub.status.busy":"2024-10-15T19:13:49.995746Z","iopub.execute_input":"2024-10-15T19:13:49.996245Z","iopub.status.idle":"2024-10-15T19:13:50.013083Z","shell.execute_reply.started":"2024-10-15T19:13:49.996191Z","shell.execute_reply":"2024-10-15T19:13:50.011712Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.ensemble import RandomForestRegressor\nfrom sklearn.pipeline import Pipeline\n\nmodel = RandomForestRegressor(n_estimators=100, random_state=42)\n\npipeline = Pipeline(steps=[\n    ('preprocessor', preprocessor),\n    ('model', model)\n])\n\npipeline.fit(X_train, y_train)\n\ny_pred = pipeline.predict(X_val)\n\nfrom sklearn.metrics import mean_squared_error\nmse = mean_squared_error(y_val, y_pred)\nprint(f\"Validation MSE: {mse:.4f}\")\n","metadata":{"execution":{"iopub.status.busy":"2024-10-15T19:13:50.014958Z","iopub.execute_input":"2024-10-15T19:13:50.015564Z","iopub.status.idle":"2024-10-15T19:13:57.21856Z","shell.execute_reply.started":"2024-10-15T19:13:50.01546Z","shell.execute_reply":"2024-10-15T19:13:57.217395Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_predictions = pipeline.predict(test)\n\nsubmission = sample.copy()\n\nif 'sii' in submission.columns:\n    submission['sii'] = np.round(test_predictions).astype(int)\nelse:\n    raise ValueError(\"The submission format is incorrect. 'sii' column is missing.\")\n\nif submission.shape[0] != test.shape[0]:\n    raise ValueError(f\"Submission shape {submission.shape[0]} does not match test shape {test.shape[0]}.\")\n\nsubmission.to_csv('final_submission.csv', index=False)\n\nprint(\"Submission file saved successfully!\")\n","metadata":{"execution":{"iopub.status.busy":"2024-10-15T19:13:57.220002Z","iopub.execute_input":"2024-10-15T19:13:57.220369Z","iopub.status.idle":"2024-10-15T19:13:57.246365Z","shell.execute_reply.started":"2024-10-15T19:13:57.220331Z","shell.execute_reply":"2024-10-15T19:13:57.245021Z"},"trusted":true},"execution_count":null,"outputs":[]}]}