{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"gpu","dataSources":[{"sourceId":84896,"databundleVersionId":10305135,"sourceType":"competition"},{"sourceId":10274354,"sourceType":"datasetVersion","datasetId":6357304},{"sourceId":10281890,"sourceType":"datasetVersion","datasetId":6362706},{"sourceId":10281942,"sourceType":"datasetVersion","datasetId":6362739},{"sourceId":10283001,"sourceType":"datasetVersion","datasetId":6363415}],"dockerImageVersionId":30823,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"from lightgbm import LGBMRegressor, early_stopping, log_evaluation\nfrom ydf import GradientBoostedTreesLearner\nfrom catboost import CatBoostRegressor, Pool\nfrom xgboost import XGBRegressor\nfrom sklearn.ensemble import HistGradientBoostingRegressor\nfrom sklearn.base import BaseEstimator, RegressorMixin\nfrom sklearn.preprocessing import OrdinalEncoder\nfrom sklearn.linear_model import Ridge, Lasso\nfrom sklearn.model_selection import KFold\nfrom sklearn.base import clone\nimport matplotlib.pyplot as plt\nimport contextlib, io\nimport seaborn as sns\nimport pandas as pd\nimport numpy as np\nimport warnings\nimport pickle\nimport shutil\nimport optuna\nimport json\nimport glob\nimport ydf\nimport os\nimport gc\n\nfrom sklearn.model_selection import *\nfrom sklearn.metrics import *\nfrom tqdm import tqdm\nfrom termcolor import colored\n\nfrom functools import partial\nimport scipy as sp\n\nimport matplotlib.pyplot as plt\nimport joblib\nimport warnings\nwarnings.filterwarnings('ignore')\npd.options.display.max_columns = None","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2024-12-26T19:18:04.161018Z","iopub.execute_input":"2024-12-26T19:18:04.161391Z","iopub.status.idle":"2024-12-26T19:18:09.051793Z","shell.execute_reply.started":"2024-12-26T19:18:04.161351Z","shell.execute_reply":"2024-12-26T19:18:09.050903Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"%%time\n\ndata_train = pd.read_csv('/kaggle/input/playground-series-s4e12/train.csv')\ndata_test = pd.read_csv('/kaggle/input/playground-series-s4e12/test.csv')\nsample = pd.read_csv('/kaggle/input/playground-series-s4e12/sample_submission.csv')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-26T19:18:09.052911Z","iopub.execute_input":"2024-12-26T19:18:09.05332Z","iopub.status.idle":"2024-12-26T19:18:17.413845Z","shell.execute_reply.started":"2024-12-26T19:18:09.053298Z","shell.execute_reply":"2024-12-26T19:18:17.412921Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Modelos Buenos: 1.03003 - 1.03016\ntrain_cat , test_cat = joblib.load(\"/kaggle/input/modelos/CATBOOST_ENSEMBLE_V4_BEST_TRIAL_CV_5_SPLITS_ROUND_2_RETUNE.pkl\")\ntrain_lgbm , test_lgbm = joblib.load(\"/kaggle/input/modelos/LBGM_ENSEMBLE_V7_1_CV_5_SPLITS_ROUND_2.pkl\")\ntrain_xgb , test_xgb = joblib.load(\"/kaggle/input/modelos/XGB_ENSEMBLE_V1_CV_5_SPLITS_ROUND_1.pkl\")\n\n\n# Modelos Malos: 1.045 - 1.050\ntrain_cat_0 , test_cat_0 = joblib.load(\"/kaggle/input/baseline/CATBOOST_BASELINE_V1.pkl\")\ntrain_lgbm_0 , test_lgbm_0 = joblib.load(\"/kaggle/input/baseline/LBGM_BASELINE_V2_TUNE.pkl\")\ntrain_xgb_0 , test_xgb_0 = joblib.load(\"/kaggle/input/baseline/XGB_BASELINE_V1.pkl\")\n\n\n# Modelos Intermedios: 1.031 - 1.034\ntrain_lgbm_stack , test_lgbm_stack = joblib.load(\"/kaggle/input/ensemble/STACK_LGBM_V1_CV_5_SPLITS_ROUND_1.pkl\")\ntrain_w_v3 , test_w_v3 = joblib.load(\"/kaggle/input/ensemble-2/ENSEMBLE_WEIGHT_v3.pkl\")\ntrain_lgbm_nonlog_v3 , test_lgbm_nonlog_v3 = joblib.load(\"/kaggle/input/ensemble-2/LGBM_NONLOG_V5.pkl\")\ntrain_lgbm_stack_goss , test_lgbm_stack_goss = joblib.load(\"/kaggle/input/ensemble-2/STACK_LGBM_V2_CV_5_SPLITS_GOSS_ROUND_3.pkl\")\ntrain_cat_nolog , test_cat_nolog = joblib.load(\"/kaggle/input/ensemble-2/cat_non_loged.pkl\")\ntrain_cat_v1_1 , test_cat_v1_1 = joblib.load(\"/kaggle/input/ensemble-2/catboost_ensemble_nonlog_model_v1_1.pkl\")\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-26T19:18:17.415907Z","iopub.execute_input":"2024-12-26T19:18:17.416178Z","iopub.status.idle":"2024-12-26T19:18:19.120317Z","shell.execute_reply.started":"2024-12-26T19:18:17.416157Z","shell.execute_reply":"2024-12-26T19:18:19.119541Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"data_train['premium_amount_cat'] = train_cat\ndata_test['premium_amount_cat'] = test_cat\n\ndata_train['premium_amount_lgbm'] = train_lgbm\ndata_test['premium_amount_lgbm'] = test_lgbm\n\ndata_train['premium_amount_xgb'] = train_xgb\ndata_test['premium_amount_xgb'] = test_xgb\n\ndata_train['premium_amount_lgbm_0'] = train_lgbm_0\ndata_test['premium_amount_lgbm_0'] = test_lgbm_0\n\ndata_train['premium_amount_cat_0'] = train_cat_0\ndata_test['premium_amount_cat_0'] = test_cat_0\n\ndata_train['premium_amount_xgb_0'] = train_xgb_0\ndata_test['premium_amount_xgb_0'] = test_xgb_0\n\ndata_train['premium_amount_lgbm_stack'] = train_lgbm_stack\ndata_test['premium_amount_lgbm_stack'] = test_lgbm_stack\n\ndata_train['premium_amount_w_v3'] = train_w_v3\ndata_test['premium_amount_w_v3'] = test_w_v3\n\ndata_train['premium_amount_lgbm_nonlog_v3'] = train_lgbm_nonlog_v3\ndata_test['premium_amount_lgbm_nonlog_v3'] = test_lgbm_nonlog_v3\n\ndata_train['premium_amount_lgbm_stack_goss'] = train_lgbm_stack_goss\ndata_test['premium_amount_lgbm_stack_goss'] = test_lgbm_stack_goss\n\ndata_train['premium_amount_cat_nolog'] = train_cat_nolog\ndata_test['premium_amount_cat_nolog'] = test_cat_nolog\n\ndata_train['premium_amount_cat_v1_1'] = train_cat_v1_1\ndata_test['premium_amount_cat_v1_1'] = test_cat_v1_1","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-26T19:18:19.121694Z","iopub.execute_input":"2024-12-26T19:18:19.122014Z","iopub.status.idle":"2024-12-26T19:18:19.229024Z","shell.execute_reply.started":"2024-12-26T19:18:19.121989Z","shell.execute_reply":"2024-12-26T19:18:19.228088Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train = pd.DataFrame()\ntrain['premium_amount_cat'] = data_train['premium_amount_cat']\ntrain['premium_amount_lgbm'] = data_train['premium_amount_lgbm']\ntrain['premium_amount_xgb'] = data_train['premium_amount_xgb']\n\ntrain['premium_amount_lgbm_0'] = data_train['premium_amount_lgbm_0']\ntrain['premium_amount_cat_0'] = data_train['premium_amount_cat_0']\ntrain['premium_amount_xgb_0'] = data_train['premium_amount_xgb_0']\n\ntrain['premium_amount_lgbm_stack'] = data_train['premium_amount_lgbm_stack']\ntrain['premium_amount_w_v3'] = data_train['premium_amount_w_v3']\ntrain['premium_amount_lgbm_nonlog_v3'] = data_train['premium_amount_lgbm_nonlog_v3']\ntrain['premium_amount_lgbm_stack_goss'] = data_train['premium_amount_lgbm_stack_goss']\ntrain['premium_amount_cat_nolog'] = data_train['premium_amount_cat_nolog']\ntrain['premium_amount_cat_v1_1'] = data_train['premium_amount_cat_v1_1']\n\ntrain['Premium Amount'] = data_train['Premium Amount']","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-26T19:18:19.22996Z","iopub.execute_input":"2024-12-26T19:18:19.230208Z","iopub.status.idle":"2024-12-26T19:18:19.322344Z","shell.execute_reply.started":"2024-12-26T19:18:19.230187Z","shell.execute_reply":"2024-12-26T19:18:19.321435Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"test = pd.DataFrame()\ntest['premium_amount_cat'] = data_test['premium_amount_cat']\ntest['premium_amount_lgbm'] = data_test['premium_amount_lgbm']\ntest['premium_amount_xgb'] = data_test['premium_amount_xgb']\n\ntest['premium_amount_lgbm_0'] = data_test['premium_amount_lgbm_0']\ntest['premium_amount_cat_0'] = data_test['premium_amount_cat_0']\ntest['premium_amount_xgb_0'] = data_test['premium_amount_xgb_0']\n\ntest['premium_amount_lgbm_stack'] = data_test['premium_amount_lgbm_stack']\ntest['premium_amount_w_v3'] = data_test['premium_amount_w_v3']\ntest['premium_amount_lgbm_nonlog_v3'] = data_test['premium_amount_lgbm_nonlog_v3']\ntest['premium_amount_lgbm_stack_goss'] = data_test['premium_amount_lgbm_stack_goss']\ntest['premium_amount_cat_nolog'] = data_test['premium_amount_cat_nolog']\ntest['premium_amount_cat_v1_1'] = data_test['premium_amount_cat_v1_1']","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-26T19:18:19.323223Z","iopub.execute_input":"2024-12-26T19:18:19.323516Z","iopub.status.idle":"2024-12-26T19:18:19.382239Z","shell.execute_reply.started":"2024-12-26T19:18:19.323487Z","shell.execute_reply":"2024-12-26T19:18:19.381596Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"X = train.drop(['Premium Amount'], axis=1)\ny = train['Premium Amount']","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-26T19:18:19.383126Z","iopub.execute_input":"2024-12-26T19:18:19.383456Z","iopub.status.idle":"2024-12-26T19:18:19.456368Z","shell.execute_reply.started":"2024-12-26T19:18:19.383425Z","shell.execute_reply":"2024-12-26T19:18:19.455411Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Stack LGBM","metadata":{}},{"cell_type":"code","source":"modelos = []\noof_train = np.zeros(len(X))","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-26T19:28:48.011412Z","iopub.execute_input":"2024-12-26T19:28:48.011706Z","iopub.status.idle":"2024-12-26T19:28:48.023719Z","shell.execute_reply.started":"2024-12-26T19:28:48.011685Z","shell.execute_reply":"2024-12-26T19:28:48.022783Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def TrainLGBM(params, n_splits, SEED):\n     kfold = RepeatedKFold(n_splits=n_splits, n_repeats=1, random_state=SEED)\n     train_rmse_scores = []\n     val_rmse_scores = []\n     models = []\n     oof = np.zeros(len(X))\n\n     for fold, (train_idx, val_idx) in enumerate(tqdm(kfold.split(X, y), desc=\"Training Folds\", total=n_splits)):\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         print(f\"-------- Woking on fold {fold} --------\")\n         \n         y_train_log = np.log1p(y_train)\n         y_val_log = np.log1p(y_val)\n\n         model = LGBMRegressor(**params, device='gpu', verbose=-1, n_jobs=-1)\n         model.fit(X_train, y_train_log, \n                   eval_set=[(X_val, y_val_log)], \n                  eval_metric='rmse')\n         \n         models.append(model)\n         modelos.append(model)\n         \n         y_train_log_pred = model.predict(X_train)\n         y_val_log_pred = model.predict(X_val)\n        \n         y_train_pred = np.expm1(y_train_log_pred)\n         y_val_pred = np.expm1(y_val_log_pred)\n\n         y_train_pred = np.clip(y_train_pred, 20, 4999)\n         y_val_pred = np.clip(y_val_pred, 20, 4999)\n         \n         train_rmse = np.sqrt(mean_squared_log_error(y_train, y_train_pred))\n         val_rmse = np.sqrt(mean_squared_log_error(y_val, y_val_pred))\n\n         train_rmse_scores.append(train_rmse)\n         val_rmse_scores.append(val_rmse)\n         \n         oof[val_idx] = y_val_pred\n         \n         print(f\"\\n Scores Fold: {fold}\")\n         print(f\"Train RMSLE: {train_rmse:.4f}\")\n         print(f\"Validation RMSLE: {val_rmse:.4f}\")\n\n         if val_rmse > 1.035:\n             return 9999, 9999, models, oof\n    \n     mean_train_rmse = np.mean(train_rmse_scores)\n     mean_val_rmse = np.mean(val_rmse_scores)\n    \n     print(\"\\n Final Mean Scores:\")\n     print(f\"Mean Train RMSLE: {mean_train_rmse:.4f}\")\n     print(f\"Mean Validation RMSLE: {mean_val_rmse:.4f}\")\n\n     oof_train = oof\n    \n     return mean_train_rmse, mean_val_rmse, models, oof","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-26T19:28:50.017348Z","iopub.execute_input":"2024-12-26T19:28:50.017659Z","iopub.status.idle":"2024-12-26T19:28:50.026177Z","shell.execute_reply.started":"2024-12-26T19:28:50.017634Z","shell.execute_reply":"2024-12-26T19:28:50.025408Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def objectiveLGBM(trial):\n  params = {\n        #'boosting_type': trial.suggest_categorical('boosting_type', [\"gbdt\", \"dart\", \"goss\"]),\n        'n_estimators': trial.suggest_int('n_estimators', 100, 20000, step=100),\n        'num_iterations': trial.suggest_int('iterations', 100, 2000, step=50),\n        'learning_rate': trial.suggest_float('learning_rate', 0.005, 0.2, log=True),\n        #'num_leaves': trial.suggest_int('num_leaves', 20, 150),\n        #'max_depth': trial.suggest_int('max_depth', 3, 15),\n        #'min_child_samples': trial.suggest_int('min_child_samples', 5, 100),\n        #'subsample': trial.suggest_float('subsample', 0.5, 1.0),\n        #'colsample_bytree': trial.suggest_float('colsample_bytree', 0.5, 1.0),\n        #'reg_alpha': trial.suggest_float('reg_alpha', 1e-4, 10.0, log=True),\n        #'reg_lambda': trial.suggest_float('reg_lambda', 1e-4, 10.0, log=True),\n        #'lambda_l2': trial.suggest_loguniform('l2_leaf_reg', 1e-3, 10.0),\n        #'device': 'gpu',\n    }\n\n  SEED = 42\n  n_splits = 5\n\n  mean_train_rmse, mean_val_rmse, models, oof = TrainLGBM(params, n_splits, SEED)\n\n  return mean_val_rmse","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-26T19:28:55.181113Z","iopub.execute_input":"2024-12-26T19:28:55.181417Z","iopub.status.idle":"2024-12-26T19:28:55.186234Z","shell.execute_reply.started":"2024-12-26T19:28:55.181394Z","shell.execute_reply":"2024-12-26T19:28:55.185353Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Optimizacion Hiper parametros","metadata":{}},{"cell_type":"code","source":"RETUNE_LGBM = True  \n\nlgbm_params = {'n_estimators': 12500, 'iterations': 550, 'learning_rate': 0.013871895630165432}\n\n\n# Trial 5 finished with value: 1.0313415012948433 and parameters: {'n_estimators': 12500, 'iterations': 550, 'learning_rate': 0.013871895630165432}. Best is trial 5 with value: 1.0313415012948433.\n\nif RETUNE_LGBM:\n    study = optuna.create_study(direction='minimize')\n    study.enqueue_trial(lgbm_params)\n    study.optimize(objectiveLGBM, n_trials=1)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-26T19:28:59.985911Z","iopub.execute_input":"2024-12-26T19:28:59.986191Z","iopub.status.idle":"2024-12-26T19:30:46.983752Z","shell.execute_reply.started":"2024-12-26T19:28:59.986171Z","shell.execute_reply":"2024-12-26T19:30:46.983053Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Entrenamiento","metadata":{}},{"cell_type":"code","source":"#SEED = 42\n#n_splits = 5\n#mean_train_rmse, mean_val_rmse, models, oof = TrainLGBM(lgbm_params, n_splits, SEED)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-26T19:18:25.058634Z","iopub.status.idle":"2024-12-26T19:18:25.058945Z","shell.execute_reply":"2024-12-26T19:18:25.058802Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"len(modelos)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-26T19:37:34.459266Z","iopub.execute_input":"2024-12-26T19:37:34.459581Z","iopub.status.idle":"2024-12-26T19:37:34.464642Z","shell.execute_reply.started":"2024-12-26T19:37:34.459558Z","shell.execute_reply":"2024-12-26T19:37:34.463919Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"test_predictions = np.zeros(len(test))\n\nfor model in modelos:\n    test_predictions += np.clip(np.expm1(model.predict(test)), 20, 4999) / len(modelos)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-26T19:37:37.483589Z","iopub.execute_input":"2024-12-26T19:37:37.483927Z","iopub.status.idle":"2024-12-26T19:38:12.566029Z","shell.execute_reply.started":"2024-12-26T19:37:37.4839Z","shell.execute_reply":"2024-12-26T19:38:12.565277Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Output: 1.02981 Public Score","metadata":{}},{"cell_type":"code","source":"sample['Premium Amount'] = test_predictions\nsample.to_csv('STACK_LGBM_V2_CV_5_SPLITS_ROUND_8.csv', index=False)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-26T19:38:18.186166Z","iopub.execute_input":"2024-12-26T19:38:18.186479Z","iopub.status.idle":"2024-12-26T19:38:19.472265Z","shell.execute_reply.started":"2024-12-26T19:38:18.186454Z","shell.execute_reply":"2024-12-26T19:38:19.471313Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"sample","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-26T19:38:21.945652Z","iopub.execute_input":"2024-12-26T19:38:21.946064Z","iopub.status.idle":"2024-12-26T19:38:21.955701Z","shell.execute_reply.started":"2024-12-26T19:38:21.946036Z","shell.execute_reply":"2024-12-26T19:38:21.954916Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"joblib.dump([oof_train,test_predictions],\"STACK_LGBM_V2_CV_5_SPLITS_ROUND_8.pkl\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-26T19:38:27.848791Z","iopub.execute_input":"2024-12-26T19:38:27.849147Z","iopub.status.idle":"2024-12-26T19:38:27.86993Z","shell.execute_reply.started":"2024-12-26T19:38:27.84912Z","shell.execute_reply":"2024-12-26T19:38:27.869072Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Importancia Variables","metadata":{}},{"cell_type":"code","source":"for model in modelos:\n    # Obtener la importancia de las características\n    importance = model.feature_importances_\n\n    # Crear un DataFrame para mostrar las importancias junto con los nombres de características\n    importance_df = pd.DataFrame({'feature': X.columns, 'importance': importance})\n\n    # Mostrar las importancias\n    print(importance_df.sort_values(by='importance', ascending=False))\n    print(' ')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-26T19:38:31.150931Z","iopub.execute_input":"2024-12-26T19:38:31.151243Z","iopub.status.idle":"2024-12-26T19:38:31.167141Z","shell.execute_reply.started":"2024-12-26T19:38:31.151219Z","shell.execute_reply":"2024-12-26T19:38:31.166372Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"class Training():\n    def optuna_optimizer(self, X_train:pd.DataFrame, y_train:pd.Series, splits_cv:int, trials:int, scoring:str='f1') -> dict:\n        def objective(trial):\n\n            params = {'objective':'binary',\n                'metric':'binary_logloss',\n                'boosting_type':'gbdt', \n                'verbosity':-1,\n                'n_estimators': trial.suggest_int('n_estimators', 10000, 20000), \n                'max_depth': trial.suggest_int('max_depth', 5,30), \n                'num_leaves': trial.suggest_int('num_leaves', 2, 64), \n                'min_child_samples': trial.suggest_int('min_child_samples', 10, 100),\n                'max_bin': trial.suggest_int('max_bin', 10, 100), \n                'learning_rate': trial.suggest_float('learning_rate', 0.0001, 0.005)\n            }\n    \n            pipe = Pipeline([\n                #('smote', SMOTE(random_state=100)),\n                ('classifier', LGBMClassifier(**params))])\n\n            \n            stratified_kfold = StratifiedKFold(n_splits=splits_cv, shuffle=True, random_state=100)\n\n            score = cross_val_score(estimator=pipe, X=X_train, y=y_train, cv=stratified_kfold, scoring=scoring, n_jobs=-1)\n            score = score.mean()\n            return score\n\n        study = optuna.create_study(direction='maximize')\n        study.optimize(objective, n_trials=trials)\n        \n        return study.best_params, study.best_value\n\n\n\n\n    def train_final_model(self, X_train:pd.DataFrame, y_train:pd.Series, X_test:pd.DataFrame, y_test:pd.Series, params:dict) -> pd.DataFrame:\n        oversample = SMOTE(random_state=100)    \n        X_train, y_train = oversample.fit_resample(X_train, y_train)\n        model = LGBMClassifier(**params)\n        model.fit(X_train, y_train)\n        y_pred_proba = model.predict_proba(X_test)\n        y_pred = model.predict(X_test)\n        return model, y_pred, y_pred_proba","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}