{"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":30787,"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\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\n\nfrom sklearn.preprocessing import StandardScaler\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nfrom keras.models import Model\nfrom keras.layers import Input, Dense\nfrom keras.optimizers import Adam\n\n\nfrom colorama import Fore, Style\nfrom IPython.display import clear_output\nimport warnings\nfrom lightgbm import LGBMRegressor\nfrom xgboost import XGBRegressor\nfrom catboost import CatBoostRegressor\nfrom sklearn.ensemble import VotingRegressor, RandomForestRegressor, GradientBoostingRegressor\nfrom sklearn.impute import SimpleImputer\nfrom sklearn.pipeline import Pipeline\nwarnings.filterwarnings('ignore')\npd.options.display.max_columns = None\n\nSEED = 42\nn_splits = 5","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2024-10-17T17:35:36.412417Z","iopub.execute_input":"2024-10-17T17:35:36.412833Z","iopub.status.idle":"2024-10-17T17:35:36.632901Z","shell.execute_reply.started":"2024-10-17T17:35:36.412795Z","shell.execute_reply":"2024-10-17T17:35:36.632037Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"featuresCols_1 = ['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\n# ---------------------------------------------------------------------------------\n\nfeaturesCols_2 = ['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\n# ---------------------------------------------------------------------------------\n\nfeaturesCols_3 = [\n    'Basic_Demos-Enroll_Season',\n    'Basic_Demos-Age', \n    'Basic_Demos-Sex',\n    \n    'CGAS-Season',\n    'CGAS-CGAS_Score',\n    \n    'Physical-Season',\n    'Physical-BMI',\n    'Physical-Height',\n    'Physical-Weight',\n    'Physical-Waist_Circumference',\n    'Physical-Diastolic_BP',\n    'Physical-HeartRate',\n    'Physical-Systolic_BP',\n    \n    'Fitness_Endurance-Season', \n    'Fitness_Endurance-Max_Stage',\n    'Fitness_Endurance-Time_Mins',\n    'Fitness_Endurance-Time_Sec',\n    \n    'FGC-Season',\n    \n    'FGC-FGC_CU', \n    'FGC-FGC_CU_Zone',\n    \n    'FGC-FGC_GSND',\n    'FGC-FGC_GSND_Zone',\n    \n    'FGC-FGC_GSD', \n    'FGC-FGC_GSD_Zone', \n    \n    'FGC-FGC_PU',\n    'FGC-FGC_PU_Zone',\n    \n    'FGC-FGC_SRL',\n    'FGC-FGC_SRL_Zone',\n    'FGC-FGC_SRR',\n    'FGC-FGC_SRR_Zone',\n    \n    'FGC-FGC_TL',\n    'FGC-FGC_TL_Zone',\n    \n    'BIA-Season',\n    'BIA-BIA_Activity_Level_num',\n    'BIA-BIA_BMC',\n    'BIA-BIA_BMI',\n    'BIA-BIA_BMR',\n    'BIA-BIA_DEE',\n    'BIA-BIA_ECW', \n    'BIA-BIA_FFM',\n    'BIA-BIA_FFMI',\n    'BIA-BIA_FMI',\n    'BIA-BIA_Fat',\n    'BIA-BIA_Frame_num',    \n    'BIA-BIA_ICW',\n    'BIA-BIA_LDM',\n    'BIA-BIA_LST',\n    'BIA-BIA_SMM',\n    'BIA-BIA_TBW',\n    \n    'PAQ_A-Season',\n    'PAQ_A-PAQ_A_Total',\n    \n    'PAQ_C-Season',\n    'PAQ_C-PAQ_C_Total',\n    \n    'SDS-Season',\n    'SDS-SDS_Total_Raw',\n    'SDS-SDS_Total_T',\n    \n    'PreInt_EduHx-Season',\n    'PreInt_EduHx-computerinternet_hoursday',\n    \n    'sii'\n]","metadata":{"_kg_hide-input":true,"_kg_hide-output":true,"execution":{"iopub.status.busy":"2024-10-17T16:53:24.626490Z","iopub.execute_input":"2024-10-17T16:53:24.627353Z","iopub.status.idle":"2024-10-17T16:53:24.641523Z","shell.execute_reply.started":"2024-10-17T16:53:24.627305Z","shell.execute_reply":"2024-10-17T16:53:24.640582Z"},"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\ndef load_time_series(dirname) -> pd.DataFrame:\n    ids = os.listdir(dirname)\n    with ThreadPoolExecutor() as executor:\n        results = list(tqdm(executor.map(lambda fname: process_file(fname, dirname), ids), total=len(ids)))\n    stats, indexes = zip(*results)\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\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    #legacy_h5_format.save_model_to_hdf5(autoencoder, 'autoencoder_model', overwrite, include_optimizer)\n    return autoencoder, encoder\n\n\ndef perform_autoencoder(df, encoding_dim=50, epochs=50, batch_size=32):\n    scaler = StandardScaler()\n    df_scaled = scaler.fit_transform(df)\n    input_dim = df_scaled.shape[1]\n    autoencoder, encoder = build_autoencoder(input_dim, encoding_dim)\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    df_encoded = pd.DataFrame(encoded_data, columns=[f'Enc_{i+1}' for i in range(encoded_data.shape[1])])\n    return df_encoded","metadata":{"execution":{"iopub.status.busy":"2024-10-17T16:53:24.642673Z","iopub.execute_input":"2024-10-17T16:53:24.643047Z","iopub.status.idle":"2024-10-17T16:53:24.715543Z","shell.execute_reply.started":"2024-10-17T16:53:24.643006Z","shell.execute_reply":"2024-10-17T16:53:24.714724Z"},"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\ndisplay(train_ts.head(5))\n\n# import keras as kr\n# import tensorflow as tf\n\n# tf.random.set_seed(SEED)\n# kr.utils.set_random_seed(SEED) \n\ntrain_ts_encoded = perform_autoencoder(df_train, encoding_dim=96, epochs=100, batch_size=32)\ntest_ts_encoded  = perform_autoencoder(df_test,  encoding_dim=96, epochs=100, batch_size=32)\n\ndisplay(train_ts_encoded.head(5))\n\ntime_series_cols = train_ts_encoded.columns.tolist()\ntrain_ts_encoded['id'] = train_ts['id']\n\ntrain = pd.merge(train, train_ts_encoded, how=\"left\", on='id')\ntest  = pd.merge(test,  train_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\nfeaturesCols = featuresCols_1 + 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-17T16:53:24.717625Z","iopub.execute_input":"2024-10-17T16:53:24.717924Z","iopub.status.idle":"2024-10-17T16:55:02.139556Z","shell.execute_reply.started":"2024-10-17T16:53:24.717893Z","shell.execute_reply":"2024-10-17T16:55:02.138760Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"important_columns = [\n    'Basic_Demos-Age',  \n    'Basic_Demos-Sex', \n    'Physical-BMI',    \n    'Physical-Height',\n    'Physical-Weight',  \n    'Physical-Diastolic_BP',  \n    'Physical-Systolic_BP',  \n    'Fitness_Endurance-Max_Stage',  \n    'Fitness_Endurance-Time_Mins',   \n    'BIA-BIA_Activity_Level_num',  \n    'SDS-SDS_Total_Raw',  \n    'PreInt_EduHx-computerinternet_hoursday'\n]","metadata":{"execution":{"iopub.status.busy":"2024-10-17T17:42:16.520579Z","iopub.execute_input":"2024-10-17T17:42:16.521668Z","iopub.status.idle":"2024-10-17T17:42:16.527726Z","shell.execute_reply.started":"2024-10-17T17:42:16.521596Z","shell.execute_reply":"2024-10-17T17:42:16.526506Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for i in important_columns:\n    print(train[i].isna().sum())","metadata":{"execution":{"iopub.status.busy":"2024-10-17T17:42:18.279505Z","iopub.execute_input":"2024-10-17T17:42:18.279899Z","iopub.status.idle":"2024-10-17T17:42:18.288182Z","shell.execute_reply.started":"2024-10-17T17:42:18.279862Z","shell.execute_reply":"2024-10-17T17:42:18.287193Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.figure(figsize=(8, 6))\nsns.boxplot(data=train, x='Physical-BMI')\nplt.title('Boxplot of Physical-BMI')\nplt.grid(True)\nplt.show()\n","metadata":{"execution":{"iopub.status.busy":"2024-10-17T17:35:47.517332Z","iopub.execute_input":"2024-10-17T17:35:47.518094Z","iopub.status.idle":"2024-10-17T17:35:47.693950Z","shell.execute_reply.started":"2024-10-17T17:35:47.518053Z","shell.execute_reply":"2024-10-17T17:35:47.692716Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"median_bmi = train['Physical-BMI'].median()\noutliers_condition = (train['Physical-BMI'] > 30) | (train['Physical-BMI'] < 15)\ntrain['Physical-BMI'] = np.where(outliers_condition | train['Physical-BMI'].isna(), median_bmi, train['Physical-BMI'])","metadata":{"execution":{"iopub.status.busy":"2024-10-17T17:42:44.979310Z","iopub.execute_input":"2024-10-17T17:42:44.979728Z","iopub.status.idle":"2024-10-17T17:42:44.988288Z","shell.execute_reply.started":"2024-10-17T17:42:44.979692Z","shell.execute_reply":"2024-10-17T17:42:44.987331Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.figure(figsize=(8, 6))\nsns.boxplot(data=train, x='Fitness_Endurance-Max_Stage')\nplt.title('Boxplot of Physical-BMI')\nplt.grid(True)\nplt.show()\n","metadata":{"execution":{"iopub.status.busy":"2024-10-17T17:58:23.488701Z","iopub.execute_input":"2024-10-17T17:58:23.489845Z","iopub.status.idle":"2024-10-17T17:58:23.641528Z","shell.execute_reply.started":"2024-10-17T17:58:23.489789Z","shell.execute_reply":"2024-10-17T17:58:23.640514Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"median_bmi = train['Fitness_Endurance-Max_Stage'].median()\noutliers_condition = (train['Fitness_Endurance-Max_Stage'] > 9) | (train['Fitness_Endurance-Max_Stage'] < 1)\ntrain['Fitness_Endurance-Max_Stage'] = np.where(outliers_condition | train['Fitness_Endurance-Max_Stage'].isna(), median_bmi, train['Fitness_Endurance-Max_Stage'])","metadata":{"execution":{"iopub.status.busy":"2024-10-17T18:00:47.436412Z","iopub.execute_input":"2024-10-17T18:00:47.437418Z","iopub.status.idle":"2024-10-17T18:00:47.445530Z","shell.execute_reply.started":"2024-10-17T18:00:47.437356Z","shell.execute_reply":"2024-10-17T18:00:47.444413Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.figure(figsize=(8, 6))\nsns.boxplot(data=train, x='Fitness_Endurance-Time_Mins')\nplt.title('Boxplot of Physical-BMI')\nplt.grid(True)\nplt.show()\n","metadata":{"execution":{"iopub.status.busy":"2024-10-17T18:01:22.300369Z","iopub.execute_input":"2024-10-17T18:01:22.301235Z","iopub.status.idle":"2024-10-17T18:01:22.532628Z","shell.execute_reply.started":"2024-10-17T18:01:22.301194Z","shell.execute_reply":"2024-10-17T18:01:22.531599Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"median_bmi = train['Fitness_Endurance-Time_Mins'].median()\noutliers_condition = (train['Fitness_Endurance-Time_Mins'] > 13) | (train['Fitness_Endurance-Time_Mins'] < 2)\ntrain['Fitness_Endurance-Time_Mins'] = np.where(outliers_condition | train['Fitness_Endurance-Time_Mins'].isna(), median_bmi, train['Fitness_Endurance-Time_Mins'])","metadata":{"execution":{"iopub.status.busy":"2024-10-17T18:05:59.552291Z","iopub.execute_input":"2024-10-17T18:05:59.552666Z","iopub.status.idle":"2024-10-17T18:05:59.560404Z","shell.execute_reply.started":"2024-10-17T18:05:59.552630Z","shell.execute_reply":"2024-10-17T18:05:59.559430Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.figure(figsize=(8, 6))\nsns.boxplot(data=train, x='BIA-BIA_Activity_Level_num')\nplt.title('Boxplot of Physical-BMI')\nplt.grid(True)\nplt.show()\n","metadata":{"execution":{"iopub.status.busy":"2024-10-17T18:08:05.014079Z","iopub.execute_input":"2024-10-17T18:08:05.014495Z","iopub.status.idle":"2024-10-17T18:08:05.249815Z","shell.execute_reply.started":"2024-10-17T18:08:05.014458Z","shell.execute_reply":"2024-10-17T18:08:05.248746Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"median_bmi = train['BIA-BIA_Activity_Level_num'].median()\noutliers_condition = (train['BIA-BIA_Activity_Level_num'] > 4)\ntrain['BIA-BIA_Activity_Level_num'] = np.where(outliers_condition | train['BIA-BIA_Activity_Level_num'].isna(), median_bmi, train['BIA-BIA_Activity_Level_num'])","metadata":{"execution":{"iopub.status.busy":"2024-10-17T18:10:59.640335Z","iopub.execute_input":"2024-10-17T18:10:59.641050Z","iopub.status.idle":"2024-10-17T18:10:59.649349Z","shell.execute_reply.started":"2024-10-17T18:10:59.640996Z","shell.execute_reply":"2024-10-17T18:10:59.648345Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train= train.dropna(subset=important_columns, how='any')","metadata":{"execution":{"iopub.status.busy":"2024-10-17T18:15:35.859029Z","iopub.execute_input":"2024-10-17T18:15:35.859693Z","iopub.status.idle":"2024-10-17T18:15:35.868359Z","shell.execute_reply.started":"2024-10-17T18:15:35.859655Z","shell.execute_reply":"2024-10-17T18:15:35.867382Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for i in important_columns:\n    print(train[i].isna().sum())","metadata":{"execution":{"iopub.status.busy":"2024-10-17T18:15:38.036594Z","iopub.execute_input":"2024-10-17T18:15:38.037250Z","iopub.status.idle":"2024-10-17T18:15:38.044579Z","shell.execute_reply.started":"2024-10-17T18:15:38.037212Z","shell.execute_reply":"2024-10-17T18:15:38.043543Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def update(df):\n    global cat_c\n    for c in cat_c: \n        df[c] = df[c].fillna('Missing')\n        df[c] = df[c].astype('category')\n    return df\n        \ntrain = update(train)\ntest = update(test)\n\ndef create_mapping(column, dataset):\n    unique_values = dataset[column].unique()\n    return {value: idx for idx, value in enumerate(unique_values)}\n\nfor col in cat_c:\n    mapping = create_mapping(col, train)\n    mappingTe = create_mapping(col, test)\n    \n    train[col] = train[col].replace(mapping).astype(int)\n    test[col] = test[col].replace(mappingTe).astype(int)\n\ndef quadratic_weighted_kappa(y_true, y_pred):\n    return cohen_kappa_score(y_true, y_pred, weights='quadratic')\n\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\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","metadata":{"execution":{"iopub.status.busy":"2024-10-17T16:55:02.140693Z","iopub.execute_input":"2024-10-17T16:55:02.140999Z","iopub.status.idle":"2024-10-17T16:55:02.213116Z","shell.execute_reply.started":"2024-10-17T16:55:02.140966Z","shell.execute_reply":"2024-10-17T16:55:02.212386Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def TrainML(model_class, test_data):\n    X = train.drop(['sii'], axis=1)\n    y = train['sii']\n\n    SKF = StratifiedKFold(n_splits=n_splits, shuffle=True, random_state=SEED)\n    \n    train_S = []\n    test_S = []\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\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\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        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        \n        test_preds[:, fold] = model.predict(test_data)\n        \n        print(f\"Fold {fold+1} - Train QWK: {train_kappa:.4f}, Validation QWK: {val_kappa:.4f}\")\n        clear_output(wait=True)\n\n    print(f\"Mean Train QWK --> {np.mean(train_S):.4f}\")\n    print(f\"Mean Validation QWK ---> {np.mean(test_S):.4f}\")\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    \n    oof_tuned = threshold_Rounder(oof_non_rounded, KappaOPtimizer.x)\n    tKappa = quadratic_weighted_kappa(y, oof_tuned)\n\n    print(f\"----> || Optimized QWK SCORE :: {Fore.CYAN}{Style.BRIGHT} {tKappa:.3f}{Style.RESET_ALL}\")\n\n    tpm = test_preds.mean(axis=1)\n    tpTuned = threshold_Rounder(tpm, KappaOPtimizer.x)\n    \n    submission = pd.DataFrame({\n        'id': sample['id'],\n        'sii': tpTuned\n    })\n\n    return submission","metadata":{"execution":{"iopub.status.busy":"2024-10-17T16:55:02.214050Z","iopub.execute_input":"2024-10-17T16:55:02.214336Z","iopub.status.idle":"2024-10-17T16:55:02.228178Z","shell.execute_reply.started":"2024-10-17T16:55:02.214305Z","shell.execute_reply":"2024-10-17T16:55:02.227113Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Params = {'learning_rate': 0.03884249148676395, 'max_depth': 12, 'num_leaves': 413, 'min_data_in_leaf': 14,\n           'feature_fraction': 0.7987976913702801, 'bagging_fraction': 0.7602261703576205, 'bagging_freq': 2, \n           'lambda_l1': 4.735462555910575, 'lambda_l2': 4.735028557007343e-06}\n\n\nXGB_Params = {\n    'learning_rate': 0.05,\n    'max_depth': 6,\n    'n_estimators': 200,\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    'tree_method': 'exact'\n}\n\n\nCatBoost_Params = {\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}","metadata":{"execution":{"iopub.status.busy":"2024-10-17T16:55:02.229373Z","iopub.execute_input":"2024-10-17T16:55:02.229709Z","iopub.status.idle":"2024-10-17T16:55:02.239514Z","shell.execute_reply.started":"2024-10-17T16:55:02.229677Z","shell.execute_reply":"2024-10-17T16:55:02.238704Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Create model instances\nLight = LGBMRegressor(**Params, random_state=SEED, verbose=-1, n_estimators=300)\nXGB_Model = XGBRegressor(**XGB_Params)\nCatBoost_Model = CatBoostRegressor(**CatBoost_Params)\n\n# Combine models using Voting Regressor\nvoting_model = VotingRegressor(estimators=[\n    ('lightgbm', Light),\n    ('xgboost', XGB_Model),\n    ('catboost', CatBoost_Model)\n])","metadata":{"execution":{"iopub.status.busy":"2024-10-17T16:55:02.240587Z","iopub.execute_input":"2024-10-17T16:55:02.240937Z","iopub.status.idle":"2024-10-17T16:55:02.254629Z","shell.execute_reply.started":"2024-10-17T16:55:02.240903Z","shell.execute_reply":"2024-10-17T16:55:02.253811Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Submission1 = TrainML(voting_model, test)\n\nSubmission1 # Submission1.to_csv('submission.csv', index=False)","metadata":{"execution":{"iopub.status.busy":"2024-10-17T16:55:02.255933Z","iopub.execute_input":"2024-10-17T16:55:02.256300Z","iopub.status.idle":"2024-10-17T16:55:12.492639Z","shell.execute_reply.started":"2024-10-17T16:55:02.256236Z","shell.execute_reply":"2024-10-17T16:55:12.490658Z"},"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\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']\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\ntime_series_cols = train_ts.columns.tolist()\ntime_series_cols.remove(\"id\")\n\ntrain = pd.merge(train, train_ts, 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\nfeaturesCols = featuresCols_2 + time_series_cols\n\ntrain = train[featuresCols]\ntrain = train.dropna(subset='sii')\n\ndef update(df):\n    global cat_c\n    for c in cat_c: \n        df[c] = df[c].fillna('Missing')\n        df[c] = df[c].astype('category')\n    return df\n        \ntrain = update(train)\ntest = update(test)\n\ndef create_mapping(column, dataset):\n    unique_values = dataset[column].unique()\n    return {value: idx for idx, value in enumerate(unique_values)}\n\nfor col in cat_c:\n    mapping = create_mapping(col, train)\n    mappingTe = create_mapping(col, test)\n    \n    train[col] = train[col].replace(mapping).astype(int)\n    test[col] = test[col].replace(mappingTe).astype(int)\n\ndef quadratic_weighted_kappa(y_true, y_pred):\n    return cohen_kappa_score(y_true, y_pred, weights='quadratic')\n\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\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, test_data):\n    X = train.drop(['sii'], axis=1)\n    y = train['sii']\n\n    SKF = StratifiedKFold(n_splits=n_splits, shuffle=True, random_state=SEED)\n    \n    train_S = []\n    test_S = []\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\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\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        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        \n        test_preds[:, fold] = model.predict(test_data)\n        \n        print(f\"Fold {fold+1} - Train QWK: {train_kappa:.4f}, Validation QWK: {val_kappa:.4f}\")\n        clear_output(wait=True)\n\n    print(f\"Mean Train QWK --> {np.mean(train_S):.4f}\")\n    print(f\"Mean Validation QWK ---> {np.mean(test_S):.4f}\")\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    \n    oof_tuned = threshold_Rounder(oof_non_rounded, KappaOPtimizer.x)\n    tKappa = quadratic_weighted_kappa(y, oof_tuned)\n\n    print(f\"----> || Optimized QWK SCORE :: {Fore.CYAN}{Style.BRIGHT} {tKappa:.3f}{Style.RESET_ALL}\")\n\n    tpm = test_preds.mean(axis=1)\n    tpTuned = threshold_Rounder(tpm, KappaOPtimizer.x)\n    \n    submission = pd.DataFrame({\n        'id': sample['id'],\n        'sii': tpTuned\n    })\n\n    return submission\n\nParams = {\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,  # Increased from 6.59\n    'lambda_l2': 0.01  # Increased from 2.68e-06\n}\n\nXGB_Params = {\n    'learning_rate': 0.05,\n    'max_depth': 6,\n    'n_estimators': 200,\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    'tree_method': 'exact'\n}\n\nCatBoost_Params = {\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\nLight = 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])\n\nSubmission2 = TrainML(voting_model, test)","metadata":{"execution":{"iopub.status.busy":"2024-10-17T16:55:12.493611Z","iopub.status.idle":"2024-10-17T16:55:12.494006Z","shell.execute_reply.started":"2024-10-17T16:55:12.493818Z","shell.execute_reply":"2024-10-17T16:55:12.493838Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Submission2","metadata":{"execution":{"iopub.status.busy":"2024-10-17T16:55:12.495299Z","iopub.status.idle":"2024-10-17T16:55:12.495803Z","shell.execute_reply.started":"2024-10-17T16:55:12.495529Z","shell.execute_reply":"2024-10-17T16:55:12.495555Z"},"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\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']\n\n#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\ntime_series_cols = train_ts.columns.tolist()\ntime_series_cols.remove(\"id\")\n\ntrain = pd.merge(train, train_ts, 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\nfeaturesCols = featuresCols_3 + time_series_cols\n\ntrain = train[featuresCols]\ntrain = train.dropna(subset='sii')\n\ndef update(df):\n    global cat_c\n    for c in cat_c: \n        df[c] = df[c].fillna('Missing')\n        df[c] = df[c].astype('category')\n    return df\n\ntrain = update(train)\ntest = update(test)\n\ndef create_mapping(column, dataset):\n    unique_values = dataset[column].unique()\n    return {value: idx for idx, value in enumerate(unique_values)}\n\nfor col in cat_c:\n    mapping = create_mapping(col, train)\n    mappingTe = create_mapping(col, test)\n    \n    train[col] = train[col].replace(mapping).astype(int)\n    test[col] = test[col].replace(mappingTe).astype(int)\n\ndef quadratic_weighted_kappa(y_true, y_pred):\n    return cohen_kappa_score(y_true, y_pred, weights='quadratic')\n\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\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, test_data):\n    X = train.drop(['sii'], axis=1)\n    y = train['sii']\n\n    SKF = StratifiedKFold(n_splits=n_splits, shuffle=True, random_state=SEED)\n    \n    train_S = []\n    test_S = []\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\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\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        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        \n        test_preds[:, fold] = model.predict(test_data)\n        \n        print(f\"Fold {fold+1} - Train QWK: {train_kappa:.4f}, Validation QWK: {val_kappa:.4f}\")\n        clear_output(wait=True)\n\n    print(f\"Mean Train QWK --> {np.mean(train_S):.4f}\")\n    print(f\"Mean Validation QWK ---> {np.mean(test_S):.4f}\")\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    \n    oof_tuned = threshold_Rounder(oof_non_rounded, KappaOPtimizer.x)\n    tKappa = quadratic_weighted_kappa(y, oof_tuned)\n\n    print(f\"----> || Optimized QWK SCORE :: {Fore.CYAN}{Style.BRIGHT} {tKappa:.3f}{Style.RESET_ALL}\")\n\n    tpm = test_preds.mean(axis=1)\n    tp_rounded = threshold_Rounder(tpm, KappaOPtimizer.x)\n\n    return tp_rounded\n\nimputer = SimpleImputer(strategy='median')\n\nensemble = VotingRegressor(estimators=[\n    ('lgb', Pipeline(steps=[('imputer', imputer), ('regressor', LGBMRegressor(random_state=SEED))])),\n    ('xgb', Pipeline(steps=[('imputer', imputer), ('regressor', XGBRegressor(random_state=SEED))])),\n    ('cat', Pipeline(steps=[('imputer', imputer), ('regressor', CatBoostRegressor(random_state=SEED, silent=True))])),\n    ('rf', Pipeline(steps=[('imputer', imputer), ('regressor', RandomForestRegressor(random_state=SEED))])),\n    ('gb', Pipeline(steps=[('imputer', imputer), ('regressor', GradientBoostingRegressor(random_state=SEED))]))\n])\n\nSubmission3 = TrainML(ensemble, test)\nsample['sii'] = Submission3\nSubmission3 = sample","metadata":{"execution":{"iopub.status.busy":"2024-10-17T16:55:12.497634Z","iopub.status.idle":"2024-10-17T16:55:12.498143Z","shell.execute_reply.started":"2024-10-17T16:55:12.497883Z","shell.execute_reply":"2024-10-17T16:55:12.497910Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Submission3","metadata":{"execution":{"iopub.status.busy":"2024-10-17T16:55:12.500000Z","iopub.status.idle":"2024-10-17T16:55:12.500497Z","shell.execute_reply.started":"2024-10-17T16:55:12.500233Z","shell.execute_reply":"2024-10-17T16:55:12.500258Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sub1 = Submission1\nsub2 = Submission2\nsub3 = Submission3\n\nsub1 = sub1.sort_values(by='id').reset_index(drop=True)\nsub2 = sub2.sort_values(by='id').reset_index(drop=True)\nsub3 = sub3.sort_values(by='id').reset_index(drop=True)\n\nsub1 = sub1.rename(columns={'sii': 'sii_1'})\nsub2 = sub2.rename(columns={'sii': 'sii_2'})\nsub3 = sub3.rename(columns={'sii': 'sii_3'})\nsubs = pd.merge(sub1,sub2,on=['id'])\nsubs = pd.merge(subs,sub3,on=['id'])\n\n#subs['sii_s'] = subs['sii_1'] *0.555 + 0.001* subs['sii_2'] + 0.444* subs['sii_3']\n#subs['sii_s'] = subs['sii_1'] *0.450 + 0.450* subs['sii_2'] + 0.100* subs['sii_3']\n#subs['sii_s'] = subs['sii_1'] *0.525 + 0.050* subs['sii_2'] + 0.425* subs['sii_3']\n#subs['sii_s'] = subs['sii_1'] *0.500 + 0.100* subs['sii_2'] + 0.400* subs['sii_3']\n\nsubs['sii_s'] = np.round(subs['sii_1'] *0.85 + 0.10* subs['sii_2'] + 0.05* subs['sii_3'])\n\nsubs['sii_s'] = subs['sii_s'].astype(int)\n\ncombined = pd.DataFrame({\n    \n    'id'   : sub1['id'],\n    \n    'sii_1': sub1['sii_1'],\n    'sii_2': sub2['sii_2'],\n    'sii_3': sub3['sii_3'],\n    \n    'sii_s': subs['sii_s'],\n})\n\ndisplay(combined)\n\ndef majority_vote(row):\n    return row.mode()[0]\n                                                         \ncombined['final_sii'] = combined[['sii_1', 'sii_2', 'sii_3', 'sii_s']].apply(majority_vote, axis=1)\n\nfinal_submission = combined[['id', 'final_sii']].rename(columns={'final_sii': 'sii'})\n\nfinal_submission.to_csv('submission.csv', index=False)\n\nprint(\"Majority voting completed and saved to 'Final_Submission.csv'\")","metadata":{"execution":{"iopub.status.busy":"2024-10-17T16:55:12.501567Z","iopub.status.idle":"2024-10-17T16:55:12.502071Z","shell.execute_reply.started":"2024-10-17T16:55:12.501810Z","shell.execute_reply":"2024-10-17T16:55:12.501836Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"final_submission","metadata":{"execution":{"iopub.status.busy":"2024-10-17T16:55:12.503451Z","iopub.status.idle":"2024-10-17T16:55:12.503944Z","shell.execute_reply.started":"2024-10-17T16:55:12.503676Z","shell.execute_reply":"2024-10-17T16:55:12.503699Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Arhiv\n\n# sub1 = Submission1\n# sub2 = Submission2\n# sub3 = Submission3\n\n# sub1 = sub1.sort_values(by='id').reset_index(drop=True)\n# sub2 = sub2.sort_values(by='id').reset_index(drop=True)\n# sub3 = sub3.sort_values(by='id').reset_index(drop=True)\n\n# combined = pd.DataFrame({\n#     'id': sub1['id'],\n#     'sii_1': sub1['sii'],\n#     'sii_2': sub2['sii'],\n#     'sii_3': sub3['sii']\n# })\n\n# def majority_vote(row):\n#     return row.mode()[0]\n\n# combined['final_sii'] = combined[['sii_1', 'sii_2', 'sii_3']].apply(majority_vote, axis=1)\n\n# final_submission = combined[['id', 'final_sii']].rename(columns={'final_sii': 'sii'})\n\n# final_submission.to_csv('submission.csv', index=False)\n\n# print(\"Majority voting completed and saved to 'Final_Submission.csv'\")\n\n# 0.466\n# subs['sii_s'] = np.round(subs['sii_1'] *0.495 + 0.495* subs['sii_2'] + 0.010* subs['sii_3']).astype(int)\n# 0.462\n#subs['sii_s'] = np.round(subs['sii_1']  *0.495 + 0.010* subs['sii_2'] + 0.495* subs['sii_3']).astype(int)\n# 0.463\n# subs['sii_s'] = np.round(subs['sii_1'] *0.010 + 0.495* subs['sii_2'] + 0.495* subs['sii_3']).astype(int)\n# 0.464 # 0.476\n# subs['sii_s'] = np.round(subs['sii_1'] *0.333 + 0.333* subs['sii_2'] + 0.334* subs['sii_3']).astype(int)\n#subs['sii_s'] = subs['sii_s'].astype(int)\n","metadata":{"_kg_hide-input":true,"execution":{"iopub.status.busy":"2024-10-17T16:55:12.504992Z","iopub.status.idle":"2024-10-17T16:55:12.505346Z","shell.execute_reply.started":"2024-10-17T16:55:12.505167Z","shell.execute_reply":"2024-10-17T16:55:12.505185Z"},"trusted":true},"execution_count":null,"outputs":[]}]}