{"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":30761,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# Imports","metadata":{}},{"cell_type":"code","source":"import os\nimport random\nfrom tqdm import tqdm\nfrom pathlib import Path\nfrom concurrent.futures import ThreadPoolExecutor\n\nimport numpy as np\nimport pandas as pd\n\nfrom sklearn.metrics import make_scorer\nfrom sklearn.metrics import cohen_kappa_score\nfrom sklearn.model_selection import StratifiedKFold\nfrom sklearn.model_selection import cross_val_score\nfrom sklearn.model_selection import cross_val_predict\nfrom sklearn.preprocessing import OrdinalEncoder\nfrom sklearn.ensemble import VotingRegressor\nfrom sklearn.impute import SimpleImputer\n\nfrom scipy.optimize import minimize\nimport optuna\n\nimport lightgbm as lgb\n\nimport warnings\nwarnings.filterwarnings('ignore')\n\n#new\nfrom sklearn.base import clone\n\n\nSEED = 42\n\nKAPPA_SCORER = make_scorer(\n    cohen_kappa_score, \n    greater_is_better=True, \n    weights='quadratic',\n)","metadata":{"execution":{"iopub.status.busy":"2024-12-21T16:44:46.861337Z","iopub.execute_input":"2024-12-21T16:44:46.861657Z","iopub.status.idle":"2024-12-21T16:44:51.027968Z","shell.execute_reply.started":"2024-12-21T16:44:46.861621Z","shell.execute_reply":"2024-12-21T16:44:51.026432Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Load data","metadata":{}},{"cell_type":"code","source":"def process_file(filename, dirname):\n    df = pd.read_parquet(os.path.join(dirname, filename, 'part-0.parquet'))\n    df.drop('step', axis=1, inplace=True)\n    \n    return df.describe().values.reshape(-1), filename.split('=')[1]","metadata":{"execution":{"iopub.status.busy":"2024-12-21T16:44:51.030645Z","iopub.execute_input":"2024-12-21T16:44:51.031206Z","iopub.status.idle":"2024-12-21T16:44:51.037421Z","shell.execute_reply.started":"2024-12-21T16:44:51.031166Z","shell.execute_reply":"2024-12-21T16:44:51.036232Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def load_time_series(dirname):\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    df = pd.DataFrame(stats, columns=[f\"stat_{i}\" for i in range(len(stats[0]))])\n    df['id'] = indexes\n    \n    return df","metadata":{"execution":{"iopub.status.busy":"2024-12-21T16:44:51.039820Z","iopub.execute_input":"2024-12-21T16:44:51.040228Z","iopub.status.idle":"2024-12-21T16:44:51.066724Z","shell.execute_reply.started":"2024-12-21T16:44:51.040191Z","shell.execute_reply":"2024-12-21T16:44:51.065363Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"root = Path('/kaggle/input/child-mind-institute-problematic-internet-use')","metadata":{"execution":{"iopub.status.busy":"2024-12-21T16:44:51.068046Z","iopub.execute_input":"2024-12-21T16:44:51.068418Z","iopub.status.idle":"2024-12-21T16:44:51.080792Z","shell.execute_reply.started":"2024-12-21T16:44:51.068383Z","shell.execute_reply":"2024-12-21T16:44:51.079428Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Tabular Data","metadata":{}},{"cell_type":"code","source":"df_train = pd.read_csv(root / 'train.csv')\ndf_test = pd.read_csv(root / 'test.csv')\ndf_subm = pd.read_csv(root / 'sample_submission.csv', index_col='id')","metadata":{"execution":{"iopub.status.busy":"2024-12-21T16:44:51.082216Z","iopub.execute_input":"2024-12-21T16:44:51.082554Z","iopub.status.idle":"2024-12-21T16:44:51.200262Z","shell.execute_reply.started":"2024-12-21T16:44:51.082520Z","shell.execute_reply":"2024-12-21T16:44:51.199008Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Time Series Data","metadata":{}},{"cell_type":"code","source":"ts_train = load_time_series(root / \"series_train.parquet\")\nts_test = load_time_series(root / \"series_test.parquet\")\n\ntime_series_cols = ts_train.columns.tolist()\ntime_series_cols.remove(\"id\")","metadata":{"execution":{"iopub.status.busy":"2024-12-21T16:44:51.201537Z","iopub.execute_input":"2024-12-21T16:44:51.201866Z","iopub.status.idle":"2024-12-21T16:46:29.039399Z","shell.execute_reply.started":"2024-12-21T16:44:51.201833Z","shell.execute_reply":"2024-12-21T16:46:29.038153Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Merge Operation","metadata":{}},{"cell_type":"code","source":"df_train = pd.merge(df_train, ts_train, how=\"left\", on='id')\ndf_test = pd.merge(df_test, ts_test, how=\"left\", on='id')\n\ndf_train = df_train.set_index('id')\ndf_test = df_test.set_index('id')","metadata":{"execution":{"iopub.status.busy":"2024-12-21T16:46:29.043332Z","iopub.execute_input":"2024-12-21T16:46:29.043741Z","iopub.status.idle":"2024-12-21T16:46:29.085341Z","shell.execute_reply.started":"2024-12-21T16:46:29.043699Z","shell.execute_reply":"2024-12-21T16:46:29.084110Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Features","metadata":{}},{"cell_type":"markdown","source":"## Global Variables","metadata":{}},{"cell_type":"code","source":"cat_cols = [\n    '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', \n    'PreInt_EduHx-Season'\n]\nnum_cols = [\n    'Basic_Demos-Age', 'Basic_Demos-Sex', 'CGAS-CGAS_Score', \n    'Physical-BMI', 'Physical-Height', 'Physical-Weight', \n    'Physical-Waist_Circumference', 'Physical-Diastolic_BP', \n    'Physical-HeartRate', 'Physical-Systolic_BP', \n    'Fitness_Endurance-Max_Stage', 'Fitness_Endurance-Time_Mins', 'Fitness_Endurance-Time_Sec', \n    'FGC-FGC_CU', 'FGC-FGC_CU_Zone', 'FGC-FGC_GSND', 'FGC-FGC_GSND_Zone', \n    'FGC-FGC_GSD', 'FGC-FGC_GSD_Zone', 'FGC-FGC_PU', 'FGC-FGC_PU_Zone', \n    'FGC-FGC_SRL', 'FGC-FGC_SRL_Zone', 'FGC-FGC_SRR', 'FGC-FGC_SRR_Zone', \n    'FGC-FGC_TL', 'FGC-FGC_TL_Zone', \n    'BIA-BIA_Activity_Level_num', 'BIA-BIA_BMC', \n    'BIA-BIA_BMI', 'BIA-BIA_BMR', 'BIA-BIA_DEE', \n    'BIA-BIA_ECW', 'BIA-BIA_FFM', 'BIA-BIA_FFMI', \n    'BIA-BIA_FMI', 'BIA-BIA_Fat', 'BIA-BIA_Frame_num', \n    'BIA-BIA_ICW', 'BIA-BIA_LDM', 'BIA-BIA_LST', 'BIA-BIA_SMM', 'BIA-BIA_TBW', \n    'PAQ_A-PAQ_A_Total', 'PAQ_C-PAQ_C_Total', \n    'SDS-SDS_Total_Raw', 'SDS-SDS_Total_T', \n    'PreInt_EduHx-computerinternet_hoursday'\n]\ntabular_cols = [\n    'Basic_Demos-Enroll_Season', 'Basic_Demos-Age', 'Basic_Demos-Sex', \n    'CGAS-Season', 'CGAS-CGAS_Score', \n    'Physical-Season', 'Physical-BMI', 'Physical-Height', \n    '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', 'FGC-FGC_GSND_Zone', \n    'FGC-FGC_GSD', 'FGC-FGC_GSD_Zone', 'FGC-FGC_PU', 'FGC-FGC_PU_Zone', \n    'FGC-FGC_SRL', 'FGC-FGC_SRL_Zone', 'FGC-FGC_SRR', 'FGC-FGC_SRR_Zone', \n    'FGC-FGC_TL', 'FGC-FGC_TL_Zone',\n    'BIA-Season', 'BIA-BIA_Activity_Level_num', 'BIA-BIA_BMC', \n    'BIA-BIA_BMI', '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', 'BIA-BIA_TBW', \n    'PAQ_A-Season', 'PAQ_A-PAQ_A_Total', 'PAQ_C-Season', 'PAQ_C-PAQ_C_Total',\n    'SDS-Season', 'SDS-SDS_Total_Raw', 'SDS-SDS_Total_T', \n    'PreInt_EduHx-Season', 'PreInt_EduHx-computerinternet_hoursday'\n]\ntarget_col = 'sii'\n\nfeature_cols = tabular_cols + time_series_cols\nnum_cols = num_cols + time_series_cols","metadata":{"execution":{"iopub.status.busy":"2024-12-21T16:46:29.086738Z","iopub.execute_input":"2024-12-21T16:46:29.087160Z","iopub.status.idle":"2024-12-21T16:46:29.098476Z","shell.execute_reply.started":"2024-12-21T16:46:29.087116Z","shell.execute_reply":"2024-12-21T16:46:29.096766Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Drop Rows with Missing Targets","metadata":{}},{"cell_type":"code","source":"df_train = df_train.dropna(subset=[target_col])","metadata":{"execution":{"iopub.status.busy":"2024-12-21T16:46:29.099888Z","iopub.execute_input":"2024-12-21T16:46:29.100387Z","iopub.status.idle":"2024-12-21T16:46:29.130621Z","shell.execute_reply.started":"2024-12-21T16:46:29.100332Z","shell.execute_reply":"2024-12-21T16:46:29.129367Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Numeric Value Imputing","metadata":{}},{"cell_type":"code","source":"imputer = SimpleImputer(\n    strategy='mean',\n)\n\ndf_train[num_cols] = imputer.fit_transform(df_train[num_cols])\ndf_test[num_cols] = imputer.transform(df_test[num_cols])","metadata":{"execution":{"iopub.status.busy":"2024-12-21T16:46:29.132212Z","iopub.execute_input":"2024-12-21T16:46:29.132570Z","iopub.status.idle":"2024-12-21T16:46:29.201750Z","shell.execute_reply.started":"2024-12-21T16:46:29.132529Z","shell.execute_reply":"2024-12-21T16:46:29.200345Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Category Encoding","metadata":{}},{"cell_type":"code","source":"encoder = OrdinalEncoder(\n    dtype=np.int32,\n    handle_unknown='use_encoded_value',\n    unknown_value=-1,\n    encoded_missing_value=-2,\n)\n\ndf_train[cat_cols] = encoder.fit_transform(df_train[cat_cols])\ndf_train[cat_cols] = df_train[cat_cols].astype('category')\n\ndf_test[cat_cols] = encoder.transform(df_test[cat_cols])\ndf_test[cat_cols] = df_test[cat_cols].astype('category')","metadata":{"execution":{"iopub.status.busy":"2024-12-21T16:46:29.203509Z","iopub.execute_input":"2024-12-21T16:46:29.204026Z","iopub.status.idle":"2024-12-21T16:46:29.247682Z","shell.execute_reply.started":"2024-12-21T16:46:29.203972Z","shell.execute_reply":"2024-12-21T16:46:29.246540Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"df_train","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T16:46:29.249051Z","iopub.execute_input":"2024-12-21T16:46:29.249400Z","iopub.status.idle":"2024-12-21T16:46:29.291980Z","shell.execute_reply.started":"2024-12-21T16:46:29.249365Z","shell.execute_reply":"2024-12-21T16:46:29.290822Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Train","metadata":{}},{"cell_type":"markdown","source":"## QWK","metadata":{}},{"cell_type":"code","source":"def quadratic_weighted_kappa(estimator, X, y_true):\n    y_pred = estimator.predict(X).round()\n    return cohen_kappa_score(y_true, y_pred, weights='quadratic')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T16:46:29.293467Z","iopub.execute_input":"2024-12-21T16:46:29.294118Z","iopub.status.idle":"2024-12-21T16:46:29.300582Z","shell.execute_reply.started":"2024-12-21T16:46:29.294053Z","shell.execute_reply":"2024-12-21T16:46:29.299353Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def threshold_rounder(y_pred, thresholds):\n    return np.where(y_pred < thresholds[0], 0,\n                    np.where(y_pred < thresholds[1], 1,\n                             np.where(y_pred < thresholds[2], 2, 3)))","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T16:46:29.302072Z","iopub.execute_input":"2024-12-21T16:46:29.302744Z","iopub.status.idle":"2024-12-21T16:46:29.317961Z","shell.execute_reply.started":"2024-12-21T16:46:29.302706Z","shell.execute_reply":"2024-12-21T16:46:29.316716Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def eval_preds(thresholds, y_true, y_pred):\n    y_pred = threshold_rounder(y_pred, thresholds)\n    score = cohen_kappa_score(y_true, y_pred, weights='quadratic')\n    return -score","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T16:46:29.319670Z","iopub.execute_input":"2024-12-21T16:46:29.320213Z","iopub.status.idle":"2024-12-21T16:46:29.332258Z","shell.execute_reply.started":"2024-12-21T16:46:29.320172Z","shell.execute_reply":"2024-12-21T16:46:29.331023Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## LightGBM","metadata":{}},{"cell_type":"code","source":"class CustomLGBMRegressor(lgb.LGBMRegressor):\n    '''\n    Custom LightGBM Regressor\n    \n    It optimizes threshold values during fitting.\n    Main goal is preventing overfit on validation data.\n    '''\n    def fit(self, X, y, **kwargs):\n        super().fit(X, y, **kwargs)\n        y_pred = super().predict(X, **kwargs)\n        \n        self.optimizer = minimize(\n            eval_preds, \n            x0=[0.5, 1.5, 2.5], \n            args=(y, y_pred), \n            method='Nelder-Mead',\n        )\n        \n    def predict(self, X, **kwargs):\n        y_pred = super().predict(X, **kwargs)\n        y_pred = threshold_rounder(y_pred, self.optimizer.x)\n        return y_pred","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T16:46:29.334221Z","iopub.execute_input":"2024-12-21T16:46:29.334696Z","iopub.status.idle":"2024-12-21T16:46:29.348772Z","shell.execute_reply.started":"2024-12-21T16:46:29.334642Z","shell.execute_reply":"2024-12-21T16:46:29.347340Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Optuna - Hyperparameter Tuning","metadata":{}},{"cell_type":"code","source":"def lgb_objective(trial):\n    params = {\n        'objective':         'l2',\n        'verbosity':         -1,\n        'n_iter':            200,\n        'random_state':      SEED,\n        'boosting_type':     'gbdt',\n        'lambda_l1':         trial.suggest_float('lambda_l1', 1e-3, 10.0, log=True),\n        'lambda_l2':         trial.suggest_float('lambda_l2', 1e-3, 10.0, log=True),\n        'learning_rate':     trial.suggest_float('learning_rate', 1e-2, 1e-1, log=True),\n        'max_depth':         trial.suggest_int('max_depth', 4, 8),\n        'num_leaves':        trial.suggest_int('num_leaves', 16, 256),\n        'colsample_bytree':  trial.suggest_float('colsample_bytree', 0.4, 1.0),\n        'colsample_bynode':  trial.suggest_float('colsample_bynode', 0.4, 1.0),\n        'bagging_fraction':  trial.suggest_float('bagging_fraction', 0.4, 1.0),\n        'bagging_freq':      trial.suggest_int('bagging_freq', 1, 7),\n        'min_data_in_leaf':  trial.suggest_int('min_data_in_leaf', 5, 100),\n    }\n    \n    X = df_train[feature_cols]\n    y = df_train[target_col]\n    cv = StratifiedKFold(5, shuffle=True, random_state=SEED)\n    estimator = CustomLGBMRegressor(**params)\n\n    val_scores = cross_val_score(\n        estimator=estimator, \n        X=X, y=y, \n        cv=cv, \n        scoring=KAPPA_SCORER,\n    )\n\n    return np.mean(val_scores)","metadata":{"execution":{"iopub.status.busy":"2024-12-21T16:46:29.350386Z","iopub.execute_input":"2024-12-21T16:46:29.350931Z","iopub.status.idle":"2024-12-21T16:46:29.373776Z","shell.execute_reply.started":"2024-12-21T16:46:29.350818Z","shell.execute_reply":"2024-12-21T16:46:29.372172Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# study = optuna.create_study(direction='maximize', study_name='Regressor')\n# study.optimize(lgb_objective, n_trials=30, show_progress_bar=True)","metadata":{"execution":{"iopub.status.busy":"2024-12-21T16:46:29.375220Z","iopub.execute_input":"2024-12-21T16:46:29.375591Z","iopub.status.idle":"2024-12-21T16:46:29.393561Z","shell.execute_reply.started":"2024-12-21T16:46:29.375554Z","shell.execute_reply":"2024-12-21T16:46:29.392108Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Tuned Hyperparameters","metadata":{}},{"cell_type":"code","source":"params = {\n    'objective'       : 'l2',\n    'verbosity'       : -1,\n    'n_iter'          : 200,\n    'lambda_l1'       : 0.005116829730239727,\n    'lambda_l2'       : 0.0011520776712645852,\n    'learning_rate'   : 0.02376367323636638,\n    'max_depth'       : 5,\n    'num_leaves'      : 207,\n    'colsample_bytree': 0.7759862336963801,\n    'colsample_bynode': 0.5110355095943208,\n    'bagging_fraction': 0.5485770314992224,\n    'bagging_freq'    : 7,\n    'min_data_in_leaf': 78,\n}\n\nmodel = CustomLGBMRegressor(**params, random_state=SEED)","metadata":{"execution":{"iopub.status.busy":"2024-12-21T16:46:29.395193Z","iopub.execute_input":"2024-12-21T16:46:29.395675Z","iopub.status.idle":"2024-12-21T16:46:29.416734Z","shell.execute_reply.started":"2024-12-21T16:46:29.395604Z","shell.execute_reply":"2024-12-21T16:46:29.415380Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Cross Validation","metadata":{}},{"cell_type":"code","source":"X = df_train[feature_cols]\ny = df_train[target_col]\n\n# cv = StratifiedKFold(5, shuffle=True, random_state=SEED)\n# val_scores = cross_val_score(\n#     model, X, y, cv=cv, \n#     scoring=KAPPA_SCORER,\n# )\n# print(f'kappa score: {np.mean(val_scores):.4f}')\n\noof_preds = np.zeros(len(y), dtype=float)\n\ncv = StratifiedKFold(5, shuffle=True, random_state=SEED)\n\nval_scores = []\ntrain_scores = []\n\nfor train_idx, val_idx in cv.split(X, y):\n    X_train, X_val = X.iloc[train_idx], X.iloc[val_idx]\n    y_train, y_val = y.iloc[train_idx], y.iloc[val_idx]\n    \n    model_fold = clone(model)\n    model_fold.fit(X_train, y_train)\n\n    val_preds = model_fold.predict(X_val)\n    oof_preds[val_idx] = val_preds  \n    \n    train_kappa = quadratic_weighted_kappa(model_fold, X_train, y_train)\n    val_kappa = quadratic_weighted_kappa(model_fold, X_val, y_val)\n    \n    train_scores.append(train_kappa)\n    val_scores.append(val_kappa)\n    \n    print(f\"Fold {len(train_scores)}: Train QWK = {train_kappa:.4f}, Validation QWK = {val_kappa:.4f}\")\n\nmean_train_kappa = np.mean(train_scores)\nmean_val_kappa = np.mean(val_scores)\n\nprint(f\"\\nMean Train QWK ---> {mean_train_kappa:.4f}\")\nprint(f\"Mean Validation QWK ---> {mean_val_kappa:.4f}\")\n\nKappaOptimizer = minimize(\n    eval_preds, \n    x0=[0.5, 1.5, 2.5], \n    args=(y, oof_preds),\n    method='Nelder-Mead'\n)\nassert KappaOptimizer.success, \"Optimization did not converge.\"\n\noptimized_thresholds = KappaOptimizer.x\noof_tuned = threshold_rounder(oof_preds, optimized_thresholds)\noptimized_qwk = cohen_kappa_score(y, oof_tuned, weights='quadratic')\n\nprint(f\"Optimized QWK SCORE ---> {optimized_qwk:.4f}\")","metadata":{"execution":{"iopub.status.busy":"2024-12-21T16:46:29.418736Z","iopub.execute_input":"2024-12-21T16:46:29.419377Z","iopub.status.idle":"2024-12-21T16:46:34.886326Z","shell.execute_reply.started":"2024-12-21T16:46:29.419323Z","shell.execute_reply":"2024-12-21T16:46:34.884625Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Seed Ensembling","metadata":{}},{"cell_type":"code","source":"ensemble_model = VotingRegressor([\n    ('lgb_0', CustomLGBMRegressor(**params, random_state=12)),\n    ('lgb_1', CustomLGBMRegressor(**params, random_state=22)),\n    ('lgb_2', CustomLGBMRegressor(**params, random_state=32)),\n    ('lgb_3', CustomLGBMRegressor(**params, random_state=42)),\n    ('lgb_4', CustomLGBMRegressor(**params, random_state=52)),\n    ('lgb_5', CustomLGBMRegressor(**params, random_state=62)),\n    ('lgb_6', CustomLGBMRegressor(**params, random_state=72)),\n    ('lgb_7', CustomLGBMRegressor(**params, random_state=82)),\n    ('lgb_8', CustomLGBMRegressor(**params, random_state=92)),\n    ('lgb_9', CustomLGBMRegressor(**params, random_state=102)),\n])","metadata":{"execution":{"iopub.status.busy":"2024-12-21T16:46:34.888741Z","iopub.execute_input":"2024-12-21T16:46:34.889250Z","iopub.status.idle":"2024-12-21T16:46:34.900226Z","shell.execute_reply.started":"2024-12-21T16:46:34.889200Z","shell.execute_reply":"2024-12-21T16:46:34.898683Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Training","metadata":{}},{"cell_type":"code","source":"X = df_train[feature_cols]\ny = df_train[target_col]\n\nensemble_model.fit(X, y)","metadata":{"execution":{"iopub.status.busy":"2024-12-21T16:46:34.905020Z","iopub.execute_input":"2024-12-21T16:46:34.905569Z","iopub.status.idle":"2024-12-21T16:46:48.118175Z","shell.execute_reply.started":"2024-12-21T16:46:34.905532Z","shell.execute_reply":"2024-12-21T16:46:48.116757Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Prediction","metadata":{}},{"cell_type":"code","source":"df_subm[target_col] = ensemble_model.predict(df_test[feature_cols])\ndf_subm[target_col] = df_subm[target_col].round()\n\ndf_subm.to_csv('submission.csv')","metadata":{"execution":{"iopub.status.busy":"2024-12-21T16:46:48.120067Z","iopub.execute_input":"2024-12-21T16:46:48.121034Z","iopub.status.idle":"2024-12-21T16:46:48.284626Z","shell.execute_reply.started":"2024-12-21T16:46:48.120988Z","shell.execute_reply":"2024-12-21T16:46:48.283195Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"df_subm","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T16:46:48.286832Z","iopub.execute_input":"2024-12-21T16:46:48.287477Z","iopub.status.idle":"2024-12-21T16:46:48.303411Z","shell.execute_reply.started":"2024-12-21T16:46:48.287439Z","shell.execute_reply":"2024-12-21T16:46:48.302269Z"}},"outputs":[],"execution_count":null}]}