{"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\nfrom colorama import Fore, Style\n\nfrom lightgbm import LGBMRegressor\nfrom catboost import CatBoostRegressor\nfrom xgboost import XGBRegressor\n\nfrom sklearn.impute import SimpleImputer\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\nimport torch\nimport os\nimport torch.nn as nn\nfrom concurrent.futures import ThreadPoolExecutor\nimport torch.optim as optim\nfrom keras.optimizers import Adam\n\nfrom tqdm import tqdm\n\n","metadata":{"_uuid":"df25e8ef-eff5-4e3f-9fe4-f58279a00a26","_cell_guid":"17c47664-8074-4fb5-915b-96e458d74d15","trusted":true,"collapsed":false,"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2024-12-08T14:29:39.566997Z","iopub.execute_input":"2024-12-08T14:29:39.568030Z","iopub.status.idle":"2024-12-08T14:30:01.242674Z","shell.execute_reply.started":"2024-12-08T14:29:39.567974Z","shell.execute_reply":"2024-12-08T14:30:01.241291Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"### Mapping - Dropping features not in test sets","metadata":{}},{"cell_type":"code","source":"df = pd.read_csv(\"/kaggle/input/child-mind-institute-problematic-internet-use/train.csv\")\ndf = df.dropna(subset=['sii']) # keeping labeled values only\ntest = pd.read_csv(\"/kaggle/input/child-mind-institute-problematic-internet-use/test.csv\")\n\n\n\nseason_mapping = {\n    'Winter': -1,\n    'Spring': -0.5,\n    'Summer': 0.5,\n    'Fall': 1\n}\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']\ndf = df.drop(columns=['id'])\n\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-08T14:30:01.244692Z","iopub.execute_input":"2024-12-08T14:30:01.245448Z","iopub.status.idle":"2024-12-08T14:30:01.379848Z","shell.execute_reply.started":"2024-12-08T14:30:01.245407Z","shell.execute_reply":"2024-12-08T14:30:01.378584Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Dropping weakly correlated features","metadata":{}},{"cell_type":"code","source":"# correlations = df.corr()['sii']  # Get correlations of all features with 'sii'\n# threshold = 0.1\n# # Identify features to drop based on correlation threshold\n# weak_corr_features = correlations[(correlations > -threshold) & (correlations < threshold)].index\n\n# # Drop weakly correlated features\n# df = df.drop(columns=weak_corr_features)\n# test = test.drop(columns=weak_corr_features)\ndf = df.drop(columns=['sii'])\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-08T14:30:01.381904Z","iopub.execute_input":"2024-12-08T14:30:01.382335Z","iopub.status.idle":"2024-12-08T14:30:01.388709Z","shell.execute_reply.started":"2024-12-08T14:30:01.382290Z","shell.execute_reply":"2024-12-08T14:30:01.387527Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Dropping season columns","metadata":{}},{"cell_type":"code","source":"# df = df.loc[:, ~df.columns.str.contains('Season')]\n# test = test.loc[:, ~test.columns.str.contains('Season')]\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-08T14:30:01.392056Z","iopub.execute_input":"2024-12-08T14:30:01.392517Z","iopub.status.idle":"2024-12-08T14:30:01.404090Z","shell.execute_reply.started":"2024-12-08T14:30:01.392480Z","shell.execute_reply":"2024-12-08T14:30:01.402995Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# KNN missing data imputation","metadata":{}},{"cell_type":"code","source":"imputer = KNNImputer(n_neighbors=4)  # k=4\nimputed_data = imputer.fit_transform(df)\n\ntrain = pd.DataFrame(imputed_data, columns=df.columns)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-08T14:30:01.406031Z","iopub.execute_input":"2024-12-08T14:30:01.406951Z","iopub.status.idle":"2024-12-08T14:30:04.049323Z","shell.execute_reply.started":"2024-12-08T14:30:01.406892Z","shell.execute_reply":"2024-12-08T14:30:04.048075Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Auxiliary","metadata":{}},{"cell_type":"markdown","source":"## Parquet file opening functions","metadata":{}},{"cell_type":"code","source":"def load_time_series(dirname) -> pd.DataFrame:\n    # opening parquet files and returning 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 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]","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-08T14:30:04.050527Z","iopub.execute_input":"2024-12-08T14:30:04.050836Z","iopub.status.idle":"2024-12-08T14:30:04.059179Z","shell.execute_reply.started":"2024-12-08T14:30:04.050806Z","shell.execute_reply":"2024-12-08T14:30:04.057864Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def feature_engineering(df):\n    season_cols = [col for col in df.columns if 'Season' in col]\n    df = df.drop(season_cols, axis=1) \n\n    #Age\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\n    #BMI\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    \n    return df","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-08T14:30:04.060776Z","iopub.execute_input":"2024-12-08T14:30:04.061159Z","iopub.status.idle":"2024-12-08T14:30:04.072833Z","shell.execute_reply.started":"2024-12-08T14:30:04.061123Z","shell.execute_reply":"2024-12-08T14:30:04.071693Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train = feature_engineering(train)\ntrain = train.dropna(thresh=10, axis=0)\ntest = feature_engineering(test)\ntrain = train.replace([np.inf, -np.inf], 0)\ntest = test.replace([np.inf, -np.inf], 0)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-08T14:30:04.074408Z","iopub.execute_input":"2024-12-08T14:30:04.074950Z","iopub.status.idle":"2024-12-08T14:30:04.113475Z","shell.execute_reply.started":"2024-12-08T14:30:04.074899Z","shell.execute_reply":"2024-12-08T14:30:04.112504Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Autoencoder for accelerometer data -Compressing accelerometer tabular data to N features and merging them on original dataset.","metadata":{}},{"cell_type":"code","source":"class AutoEncoder(nn.Module):\n    def __init__(self, input_dim, encoding_dim):\n        super(AutoEncoder, self).__init__()\n        self.encoder = nn.Sequential(\n            nn.Linear(input_dim, encoding_dim*3),\n            nn.ReLU(),\n            nn.Linear(encoding_dim*3, encoding_dim*2),\n            nn.ReLU(),\n            nn.Linear(encoding_dim*2, encoding_dim),\n            nn.ReLU()\n        )\n        self.decoder = nn.Sequential(\n            nn.Linear(encoding_dim, input_dim*2),\n            nn.ReLU(),\n            nn.Linear(input_dim*2, input_dim*3),\n            nn.ReLU(),\n            nn.Linear(input_dim*3, input_dim),\n            nn.Sigmoid()\n        )\n        \n    def forward(self, x):\n        encoded = self.encoder(x)\n        decoded = self.decoder(encoded)\n        return decoded\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    data_tensor = torch.FloatTensor(df_scaled)\n    \n    input_dim = data_tensor.shape[1]\n    autoencoder = AutoEncoder(input_dim, encoding_dim)\n    \n    criterion = nn.MSELoss()\n    optimizer = optim.Adam(autoencoder.parameters())\n    \n    for epoch in range(epochs):\n        for i in range(0, len(data_tensor), batch_size):\n            batch = data_tensor[i : i + batch_size]\n            optimizer.zero_grad()\n            reconstructed = autoencoder(batch)\n            loss = criterion(reconstructed, batch)\n            loss.backward()\n            optimizer.step()\n            \n        if (epoch + 1) % 10 == 0:\n            print(f'Epoch [{epoch + 1}/{epochs}], Loss: {loss.item():.4f}]')\n                 \n    with torch.no_grad():\n        encoded_data = autoencoder.encoder(data_tensor).numpy()\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\n    ","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-08T14:30:04.114907Z","iopub.execute_input":"2024-12-08T14:30:04.115394Z","iopub.status.idle":"2024-12-08T14:30:04.128451Z","shell.execute_reply.started":"2024-12-08T14:30:04.115343Z","shell.execute_reply":"2024-12-08T14:30:04.127020Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## QWK, threshold rounder and prediction evaluator","metadata":{}},{"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)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-08T14:30:04.132824Z","iopub.execute_input":"2024-12-08T14:30:04.133908Z","iopub.status.idle":"2024-12-08T14:30:04.148567Z","shell.execute_reply.started":"2024-12-08T14:30:04.133850Z","shell.execute_reply":"2024-12-08T14:30:04.147276Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"#test = test.drop(columns='id')\n## accelerometer data\nprint('Loading train timeseries data...')\ntrain_ts = load_time_series(\"/kaggle/input/child-mind-institute-problematic-internet-use/series_train.parquet\")\nprint('Loading test timeseries data...')\ntest_ts = load_time_series(\"/kaggle/input/child-mind-institute-problematic-internet-use/series_test.parquet\")\nprint(f'Shape of Train accelerometer data: {train_ts.shape}')\nprint(f'Shape of Test accelerometer data: {test_ts.shape}')\n\ndf_train_ts = train_ts.drop('id', axis=1)\ndf_test_ts = test_ts.drop('id', axis=1)\n\ntrain_ts_encoded = perform_autoencoder(df_train_ts, encoding_dim=80, epochs=100, batch_size=32)\ntest_ts_encoded = perform_autoencoder(df_test_ts, encoding_dim=80, epochs=100, batch_size=32)\n\ntime_series_cols = train_ts_encoded.columns.tolist()\ntrain_ts_encoded[\"id\"]=train_ts[\"id\"]\ntest_ts_encoded['id']=test_ts[\"id\"]\n\n# re-adding primary keys\ntrain['id'] = train_ids\ntest['id'] = test_ids\ntrain = pd.merge(train, train_ts_encoded, how=\"left\", on='id')\ntest = pd.merge(test, test_ts_encoded, how=\"left\", on='id')\n\ntrain['id']","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-08T14:30:04.149767Z","iopub.execute_input":"2024-12-08T14:30:04.150122Z","iopub.status.idle":"2024-12-08T14:31:45.789660Z","shell.execute_reply.started":"2024-12-08T14:30:04.150082Z","shell.execute_reply":"2024-12-08T14:31:45.788481Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train[:5]","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-08T14:31:45.790871Z","iopub.execute_input":"2024-12-08T14:31:45.791534Z","iopub.status.idle":"2024-12-08T14:31:45.825496Z","shell.execute_reply.started":"2024-12-08T14:31:45.791496Z","shell.execute_reply":"2024-12-08T14:31:45.824150Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"test[:5]","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-08T14:31:45.826867Z","iopub.execute_input":"2024-12-08T14:31:45.827271Z","iopub.status.idle":"2024-12-08T14:31:45.854501Z","shell.execute_reply.started":"2024-12-08T14:31:45.827221Z","shell.execute_reply":"2024-12-08T14:31:45.853213Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Training function","metadata":{}},{"cell_type":"code","source":"# funciton that trains any regressor model using kfold cross validation, k hard coded = 5\ndef TrainML(model_class, test_data) -> list[int]:\n    global train\n    \n\n    \n    #train = train.drop(columns=['id'])\n    test_data = test_data.drop(columns=['id'])\n    train = train[test_data.columns]\n\n    \n\n    \n    X = train # .drop(['sii'], axis=1)\n    y = train_labels\n\n    ##\n    # imputer = SimpleImputer(strategy='mean')\n    # X = pd.DataFrame(imputer.fit_transform(train), columns=train.columns, index=train.index)\n\n    # # Ensure test_data also remains a DataFrame\n    # test_data = pd.DataFrame(imputer.transform(test_data), columns=test_data.columns, index=test_data.index)\n    #####\n    print(test_data.head())\n    n_splits=5\n    random_state=42\n    \n    ################    \n    scaler = StandardScaler()\n    \n    scaler.fit(X)\n\n\n    X = pd.DataFrame(scaler.transform(X), columns=X.columns)\n   \n    #ids are stored in test_ids variable\n    test_data = pd.DataFrame(scaler.transform(test_data), columns=test_data.columns)\n    #############\n    SKF = StratifiedKFold(n_splits=n_splits, shuffle=True, random_state=random_state)\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        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        \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    return tp_rounded.tolist()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-08T14:31:45.856545Z","iopub.execute_input":"2024-12-08T14:31:45.857014Z","iopub.status.idle":"2024-12-08T14:31:45.871746Z","shell.execute_reply.started":"2024-12-08T14:31:45.856961Z","shell.execute_reply":"2024-12-08T14:31:45.870323Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Parameters","metadata":{}},{"cell_type":"code","source":"LGBM_params = {\n    'n_estimators': 300,\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\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,  \n    'reg_lambda': 5,  \n    'random_state': 42,\n    'tree_method': 'exact'\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}\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-08T14:31:45.873324Z","iopub.execute_input":"2024-12-08T14:31:45.873873Z","iopub.status.idle":"2024-12-08T14:31:45.891333Z","shell.execute_reply.started":"2024-12-08T14:31:45.873833Z","shell.execute_reply":"2024-12-08T14:31:45.889800Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Model decleration","metadata":{}},{"cell_type":"code","source":"Light = LGBMRegressor(**LGBM_params, random_state=42, verbose=-1)\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     weights=[0.6, 0.6, 0.5] # 0.3 0.5 0.2\n)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-08T14:31:45.892758Z","iopub.execute_input":"2024-12-08T14:31:45.893295Z","iopub.status.idle":"2024-12-08T14:31:45.909680Z","shell.execute_reply.started":"2024-12-08T14:31:45.893236Z","shell.execute_reply":"2024-12-08T14:31:45.908451Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# XGboost model","metadata":{}},{"cell_type":"code","source":"xgb_preds = TrainML(model_class=XGB_Model, test_data=test)\nsub = pd.DataFrame({\n    \n    'id'   : test_ids,\n    \n    'sii': xgb_preds\n})\nxgb_preds\nsub","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-08T14:31:45.911326Z","iopub.execute_input":"2024-12-08T14:31:45.911674Z","iopub.status.idle":"2024-12-08T14:31:59.727430Z","shell.execute_reply.started":"2024-12-08T14:31:45.911640Z","shell.execute_reply":"2024-12-08T14:31:59.726308Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Light Gradient Boosting Machine model","metadata":{}},{"cell_type":"code","source":"lgbm_preds = TrainML(model_class=Light, test_data=test)\nsub = pd.DataFrame({\n    \n    'id'   : test_ids,\n    \n    'sii': lgbm_preds\n})\n\nsub","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-08T14:31:59.728726Z","iopub.execute_input":"2024-12-08T14:31:59.729060Z","iopub.status.idle":"2024-12-08T14:32:11.533296Z","shell.execute_reply.started":"2024-12-08T14:31:59.729027Z","shell.execute_reply":"2024-12-08T14:32:11.532272Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Catboost model","metadata":{}},{"cell_type":"code","source":"cat_preds = TrainML(model_class=CatBoost_Model, test_data=test)\nsub = pd.DataFrame({\n    \n    'id'   : test_ids,\n    \n    'sii': cat_preds\n})\n\nsub","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-08T14:32:11.534724Z","iopub.execute_input":"2024-12-08T14:32:11.535296Z","iopub.status.idle":"2024-12-08T14:32:25.940145Z","shell.execute_reply.started":"2024-12-08T14:32:11.535245Z","shell.execute_reply":"2024-12-08T14:32:25.939046Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Voting regressor model - ensembler","metadata":{}},{"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': vote_preds\n})\n\n\nfinal_sub.to_csv('submission.csv', index=False)\nfinal_sub","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-08T14:32:25.941422Z","iopub.execute_input":"2024-12-08T14:32:25.941739Z","iopub.status.idle":"2024-12-08T14:33:18.136440Z","shell.execute_reply.started":"2024-12-08T14:32:25.941702Z","shell.execute_reply":"2024-12-08T14:33:18.135167Z"}},"outputs":[],"execution_count":null}]}