{"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":84493,"databundleVersionId":9849268,"sourceType":"competition"}],"dockerImageVersionId":30786,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# **FOREWORD**","metadata":{}},{"cell_type":"markdown","source":"This kernel is a base import kernel for all further steps - it uses the latest available Kaggle environment as on 14Oct2024 <br>\n\nI import and save key package wheels here and also load up my training script and feature importance scripts herewith. <br>\n\nLightGBM, XGBoost and scikit-learn are updated- rest of the packages are as available in the base environment. In also add polars GPU using NVidia RAPIDS framework so that we could leverage GPUs in data wrangling <br>\n\nI am also downloading the latest version of polars==1.12.0 as on 28Oct2024, as on releasing my concurrent version of the kernel. I am also retaining the past polars version==1.9.0 for reference <br>","metadata":{}},{"cell_type":"code","source":"%%writefile -a req_kaggle.txt\n\nlightgbm==4.5.0\nxgboost==2.1.1\nscikit-learn==1.5.2\nnumpy==1.26.4\nscipy==1.14.1","metadata":{"execution":{"iopub.status.busy":"2024-10-15T20:02:29.105796Z","iopub.execute_input":"2024-10-15T20:02:29.106307Z","iopub.status.idle":"2024-10-15T20:02:29.146779Z","shell.execute_reply.started":"2024-10-15T20:02:29.106255Z","shell.execute_reply":"2024-10-15T20:02:29.145508Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%%capture\n\nimport os\ntry:\n    os.mkdir(f\"/kaggle/working/packages\")\nexcept:\n    pass\n\n!pip download -q -r req_kaggle.txt -d /kaggle/working/packages\n!pip download --extra-index-url=https://pypi.nvidia.com polars[gpu]==1.9.0 -q -d /kaggle/working/polars\n!pip download --extra-index-url=https://pypi.nvidia.com polars[gpu]==1.12.0 -q -d /kaggle/working/polars1120   ","metadata":{"execution":{"iopub.status.busy":"2024-10-15T20:02:47.459312Z","iopub.execute_input":"2024-10-15T20:02:47.459877Z","iopub.status.idle":"2024-10-15T20:03:27.365988Z","shell.execute_reply.started":"2024-10-15T20:02:47.459826Z","shell.execute_reply":"2024-10-15T20:03:27.364461Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# **KEY IMPORTS**\n\nPlease feel free to use these imports in your pipeline. All the best! <br>","metadata":{}},{"cell_type":"code","source":"%%writefile -a myimports.py\n\nprint(f\"\\n---> Commencing imports-part1\")\n\nfrom gc import collect\nfrom warnings import filterwarnings\nfilterwarnings('ignore')\nfrom IPython.display import display_html, clear_output\nclear_output()\n\nimport os, sys, logging, re, joblib, ctypes, shutil\nfrom copy import deepcopy\n\nimport xgboost as xgb, lightgbm as lgb, catboost as cb, sklearn as sk, pandas as pd\n\n# General library imports:-\nfrom warnings import filterwarnings\nfilterwarnings('ignore')\nfrom gc import collect\n\nfrom os import path, walk, getpid\nfrom psutil import Process\nfrom collections import Counter\nfrom itertools import product\n\nimport ctypes\nlibc = ctypes.CDLL(\"libc.so.6\")\n\nfrom pprint import pprint\nfrom functools import partial\nfrom copy import deepcopy\nimport pandas as pd, numpy as np, os, joblib\nfrom scipy.optimize import minimize\nfrom numpy.typing import ArrayLike, NDArray\nimport polars as pl\nimport polars.selectors as cs\n\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nimport plotly.graph_objects as go\n\nfrom colorama import Fore, Style, init\nfrom warnings import filterwarnings\nfilterwarnings('ignore')\nfrom tqdm.notebook import tqdm\n\nprint(f\"---> Imports- part 1 done\\n\")","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%%writefile -a myimports.py\n\n# Importing model and pipeline specifics:-\nfrom category_encoders import OrdinalEncoder, OneHotEncoder, TargetEncoder\n\n# Pipeline specifics:-\nfrom sklearn.preprocessing import (RobustScaler,\n                                   MinMaxScaler,\n                                   StandardScaler,\n                                   FunctionTransformer as FT,\n                                   PowerTransformer,\n                                  )\nfrom sklearn.impute import SimpleImputer as SI\nfrom sklearn.model_selection import (RepeatedStratifiedKFold as RSKF,\n                                     StratifiedKFold as SKF,\n                                     StratifiedGroupKFold as SGKF,\n                                     KFold,\n                                     GroupKFold as GKF,\n                                     RepeatedKFold as RKF,\n                                     PredefinedSplit as PDS,\n                                     cross_val_score,\n                                     cross_val_predict,\n                                    )\nfrom sklearn.inspection import permutation_importance\nfrom sklearn.feature_selection import VarianceThreshold as VT\nfrom sklearn.pipeline import Pipeline, make_pipeline\nfrom sklearn.base import BaseEstimator, TransformerMixin, clone\nfrom sklearn.compose import ColumnTransformer\nfrom sklearn.linear_model import Ridge\n\n# ML Model training:-\nfrom sklearn.metrics import (mean_squared_error as mse, \n                             r2_score,\n                             make_scorer,\n                             ConfusionMatrixDisplay,\n                             confusion_matrix,\n                             )\n\nfrom xgboost import QuantileDMatrix, XGBRegressor as XGBR\nfrom lightgbm import log_evaluation, early_stopping, LGBMRegressor as LGBMR\nfrom catboost import CatBoostRegressor as CBR, Pool\n\n\n# Ensemble and tuning:-\nimport optuna\nfrom optuna import Trial, trial, create_study\nfrom optuna.pruners import HyperbandPruner\nfrom optuna.samplers import TPESampler, CmaEsSampler\n\n# Setting rc parameters in seaborn for plots and graphs-\nsns.set({\"axes.facecolor\"       : \"#ffffff\",\n         \"figure.facecolor\"     : \"#ffffff\",\n         \"axes.edgecolor\"       : \"#000000\",\n         \"grid.color\"           : \"#ffffff\",\n         \"font.family\"          : ['Cambria'],\n         \"axes.labelcolor\"      : \"#000000\",\n         \"xtick.color\"          : \"#000000\",\n         \"ytick.color\"          : \"#000000\",\n         \"grid.linewidth\"       : 0.50,\n         \"grid.linestyle\"       : \"--\",\n         \"axes.titlecolor\"      : '#0099e6',\n         'axes.titlesize'       : 9.5,\n         'axes.labelweight'     : \"bold\",\n         'legend.fontsize'      : 7.0,\n         'legend.title_fontsize': 7.0,\n         'font.size'            : 10.0,\n         'xtick.labelsize'      : 12,\n         'ytick.labelsize'      : 9.0,\n        }\n       )\n\n# Color printing\ndef PrintColor(text: str, color = Fore.BLUE, style = Style.BRIGHT):\n    \"Prints color outputs using colorama using a text F-string\"\n    print(style + color + text + Style.RESET_ALL)\n","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%%writefile -a myimports.py\n\nprint(f\"---> Commencing imports-part2\")\noptuna.logging.set_verbosity = optuna.logging.ERROR\noptuna.logging.disable_default_handler()\nprint(f\"---> XGBoost = {xgb.__version__} | LightGBM = {lgb.__version__}\")\n\nfrom sklearn import set_config\npd.set_option('display.max_columns', 1000)\npd.set_option('display.max_rows', 200)\n\n##################################################################\n# Customizing logging for LGBM\nclass MyLogger:\n    \"\"\"\n    This class helps to suppress logs in lightgbm and Optuna\n    Source - https://github.com/microsoft/LightGBM/issues/6014\n    \"\"\"\n\n    def init(self, logging_lbl: str):\n        self.logger = logging.getLogger(logging_lbl)\n        self.logger.setLevel(logging.ERROR)\n\n    def info(self, message):\n        pass\n\n    def warning(self, message):\n        pass\n\n    def error(self, message):\n        self.logger.error(message)\n\nl = MyLogger()\nl.init(logging_lbl = \"lightgbm_custom\")\nlgb.register_logger(l)\n\n##################################################################\n# Customizing logging for XGBoost\nfor handler in logging.root.handlers[:]:\n    logging.root.removeHandler(handler)\n\nlogger = logging.getLogger(__name__)\nlogger.setLevel(logging.ERROR)\nformatter = logging.Formatter('%(asctime)s | %(levelname)s | %(message)s')\n\nstdout_handler = logging.StreamHandler(sys.stdout)\nstdout_handler.setLevel(logging.INFO)\nstdout_handler.setFormatter(formatter)\n\nfile_handler = logging.FileHandler(f'xgb_optimize.log')\nfile_handler.setLevel(logging.ERROR)\nfile_handler.setFormatter(formatter)\n\nlogger.addHandler(file_handler)\nlogger.addHandler(stdout_handler)\n\nclass XGBLogging(xgb.callback.TrainingCallback):\n    \"\"\"log train logs to file\"\"\"\n\n    def __init__(self, epoch_log_interval=100):\n        self.epoch_log_interval = epoch_log_interval\n\n    def after_iteration(self, model, epoch:int,\n                        evals_log:xgb.callback.TrainingCallback.EvalsLog\n                        ):\n\n        if self.epoch_log_interval <= 0:\n            pass\n\n        elif (epoch %  self.epoch_log_interval == 0):\n            for data, metric in evals_log.items():\n                for metric_name, log in metric.items():\n                    score = log[-1][0] if isinstance(log[-1], tuple) else log[-1]\n                    logger.info(f\"XGBLogging epoch {epoch} dataset {data} {metric_name} {score}\")\n\n        return False\n\nprint(f\"---> Imports- part 2 done\")\nprint(f\"---> Imports done\")","metadata":{},"execution_count":null,"outputs":[]}]}