{"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":84896,"databundleVersionId":10305135,"sourceType":"competition"}],"dockerImageVersionId":30804,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"pip install h2o","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2024-12-17T01:35:45.686745Z","iopub.execute_input":"2024-12-17T01:35:45.687045Z","iopub.status.idle":"2024-12-17T01:35:56.854261Z","shell.execute_reply.started":"2024-12-17T01:35:45.687005Z","shell.execute_reply":"2024-12-17T01:35:56.852727Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport gc\nfrom sklearn.metrics import roc_auc_score\nfrom sklearn.model_selection import train_test_split\n#from lightautoml.automl.presets.tabular_presets import TabularAutoML\n#from lightautoml.tasks import Task\nimport pandas as pd\nimport numpy as np\nfrom xgboost import XGBClassifier\nfrom lightgbm import LGBMClassifier\nfrom catboost import CatBoostClassifier\nfrom sklearn.metrics import matthews_corrcoef\n\nimport sklearn\nsklearn.set_config(transform_output=\"pandas\")\nimport pandas as pd\nimport numpy as np\nimport polars as pl\nimport pandas as pd\nimport matplotlib.pyplot as plt\nfrom sklearn.base import clone\nfrom copy import deepcopy\nimport optuna\nfrom scipy.optimize import minimize\nimport os\nimport plotly.graph_objs as go \nimport seaborn as sns\nimport matplotlib.pyplot as plt\n\nimport re\n\nfrom tqdm import tqdm\nfrom IPython.display import clear_output\nfrom concurrent.futures import ThreadPoolExecutor\n\nimport warnings\nwarnings.filterwarnings('ignore')\npd.options.display.max_columns = None\n\nimport lightgbm as lgb\nfrom catboost import CatBoostRegressor, CatBoostClassifier, Pool\nfrom xgboost import XGBClassifier\nfrom sklearn.ensemble import VotingClassifier\nfrom sklearn.model_selection import *\nfrom sklearn.preprocessing import *\nfrom sklearn.linear_model import *\nfrom sklearn.metrics import *\nfrom sklearn.impute import *\nimport numpy as np\nimport numpy as np\nimport pandas as pd\nimport gc\nfrom sklearn.metrics import roc_auc_score\nfrom sklearn.model_selection import train_test_split\n# from lightautoml.automl.presets.tabular_presets import TabularAutoML\n# from lightautoml.tasks import Task\nimport pandas as pd\nimport numpy as np\nfrom xgboost import XGBClassifier\nfrom lightgbm import LGBMClassifier\nfrom catboost import CatBoostClassifier\nfrom sklearn.metrics import matthews_corrcoef\n\nimport sklearn\nsklearn.set_config(transform_output=\"pandas\")\nimport numpy as np \nimport pandas as pd\nimport os\nfrom sklearn.base import clone\nfrom sklearn.metrics import classification_report\nfrom sklearn.linear_model import LogisticRegression\nfrom sklearn.naive_bayes import GaussianNB\nfrom sklearn.svm import SVC\nfrom sklearn.tree import DecisionTreeClassifier\nfrom sklearn.ensemble import RandomForestClassifier, AdaBoostClassifier, GradientBoostingClassifier\nfrom sklearn.ensemble import RandomForestClassifier, HistGradientBoostingClassifier, GradientBoostingClassifier, ExtraTreesClassifier, VotingClassifier, StackingClassifier\nfrom sklearn.metrics import accuracy_score\nfrom xgboost import XGBClassifier\nfrom lightgbm import LGBMClassifier\nfrom sklearn.model_selection import ShuffleSplit\nfrom sklearn.metrics import accuracy_score\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import roc_auc_score \nfrom sklearn.linear_model import LogisticRegression\nfrom sklearn.metrics import roc_auc_score,roc_curve,auc\nfrom sklearn.preprocessing import StandardScaler\nimport math\nfrom sklearn.naive_bayes import GaussianNB\nfrom sklearn.metrics import accuracy_score\nimport polars as pl\nimport lightgbm as lgb\nimport xgboost as xgb\nfrom matplotlib import pyplot as plt\nimport warnings\nwarnings.filterwarnings('ignore')\nfrom sklearn.model_selection import train_test_split\nfrom catboost import CatBoostClassifier\nfrom sklearn.metrics import roc_auc_score \nimport warnings\nimport random\nwarnings.filterwarnings(\"ignore\")\nimport numpy as np, pandas as pd\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nfrom sklearn.preprocessing import StandardScaler\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import mean_squared_error\nfrom sklearn.metrics import mean_squared_log_error\nimport lightgbm as lgb\nfrom sklearn.model_selection import StratifiedKFold\nfrom sklearn.metrics import r2_score\nfrom sklearn.model_selection import KFold\nfrom xgboost import XGBRegressor\nfrom catboost import CatBoostRegressor\nfrom sklearn.preprocessing import OneHotEncoder","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T01:35:56.857144Z","iopub.execute_input":"2024-12-17T01:35:56.857922Z","iopub.status.idle":"2024-12-17T01:36:00.389315Z","shell.execute_reply.started":"2024-12-17T01:35:56.857868Z","shell.execute_reply":"2024-12-17T01:36:00.388253Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import h2o\nfrom h2o.frame import H2OFrame\nh2o.init()\ntrain = pd.read_csv(\"/kaggle/input/playground-series-s4e12/train.csv\")\ntest = pd.read_csv(\"/kaggle/input/playground-series-s4e12/test.csv\")\nsample = pd.read_csv('/kaggle/input/playground-series-s4e12/sample_submission.csv')\n\ntrain.drop('id', axis=1, inplace=True)\ntest.drop('id', axis=1, inplace=True) \ndef date(Df):\n\n    Df['Policy Start Date'] = pd.to_datetime(Df['Policy Start Date'])\n    Df['Year'] = Df['Policy Start Date'].dt.year\n    Df['Day'] = Df['Policy Start Date'].dt.day\n    Df['Month'] = Df['Policy Start Date'].dt.month\n    Df['Month_name'] = Df['Policy Start Date'].dt.month_name()\n    Df['Day_of_week'] = Df['Policy Start Date'].dt.day_name()\n    Df['Week'] = Df['Policy Start Date'].dt.isocalendar().week\n    Df['Year_sin'] = np.sin(2 * np.pi * Df['Year'])\n    Df['Year_cos'] = np.cos(2 * np.pi * Df['Year'])\n    Df['Month_sin'] = np.sin(2 * np.pi * Df['Month'] / 12) \n    Df['Month_cos'] = np.cos(2 * np.pi * Df['Month'] / 12)\n    Df['Day_sin'] = np.sin(2 * np.pi * Df['Day'] / 31)  \n    Df['Day_cos'] = np.cos(2 * np.pi * Df['Day'] / 31)\n    Df['Group']=(Df['Year']-2020)*48+Df['Month']*4+Df['Day']//7\n    \n    Df.drop('Policy Start Date', axis=1, inplace=True)\n    return Df\ntrain = date(train)\ntest = date(test)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T01:36:00.390698Z","iopub.execute_input":"2024-12-17T01:36:00.391199Z","iopub.status.idle":"2024-12-17T01:36:23.910931Z","shell.execute_reply.started":"2024-12-17T01:36:00.391166Z","shell.execute_reply":"2024-12-17T01:36:23.909867Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"cat_cols = [col for col in train.columns if train[col].dtype == 'object']\nfeature_cols = list(test.columns)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T01:36:23.914078Z","iopub.execute_input":"2024-12-17T01:36:23.914446Z","iopub.status.idle":"2024-12-17T01:36:23.921406Z","shell.execute_reply.started":"2024-12-17T01:36:23.914411Z","shell.execute_reply":"2024-12-17T01:36:23.920295Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"class CategoricalEncoder:\n    def __init__(self, train, test):\n        self.train = train\n        self.test = test\n\n    def frequency_encode(self, cat_cols, feature_cols, drop_org=False):\n\n        new_cat_cols = []\n        for col in cat_cols:\n            freq_encoding = self.train[col].value_counts().to_dict()\n\n            self.train[f\"{col}_freq\"] = self.train[col].map(freq_encoding).astype('category')\n            self.test[f\"{col}_freq\"] = self.test[col].map(freq_encoding).astype('category')\n\n            new_col_name = f\"{col}_freq\"\n            new_cat_cols.append(new_col_name)\n            feature_cols.append(new_col_name)\n            if drop_org:\n                feature_cols.remove(col)\n\n        return self.train, self.test, new_cat_cols, feature_cols\ndef rmsle(y_true, y_pred):\n    return np.sqrt(mean_squared_log_error(y_true, y_pred))","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T01:36:23.922708Z","iopub.execute_input":"2024-12-17T01:36:23.923002Z","iopub.status.idle":"2024-12-17T01:36:23.933952Z","shell.execute_reply.started":"2024-12-17T01:36:23.922973Z","shell.execute_reply":"2024-12-17T01:36:23.932901Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"encoder = CategoricalEncoder(train, test)\ntrain, test, cat_cols, feature_cols = encoder.frequency_encode(cat_cols, feature_cols, drop_org=True)\n\ntrain = train[feature_cols + ['Premium Amount']]\ntest = test[feature_cols]\n\ntrain['Premium Amount'] = np.log1p(train['Premium Amount'])","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T01:36:23.935101Z","iopub.execute_input":"2024-12-17T01:36:23.935409Z","iopub.status.idle":"2024-12-17T01:36:27.167437Z","shell.execute_reply.started":"2024-12-17T01:36:23.935381Z","shell.execute_reply":"2024-12-17T01:36:27.166697Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"kf = KFold(n_splits=5, shuffle=True, random_state=42)\n\nfor i, (_, val_index) in enumerate(kf.split(train)):\n    train.loc[val_index, 'fold'] = i\n\nh_train = h2o.H2OFrame(train)\nh_test = h2o.H2OFrame(test)\n\nx = [col for col in h_train.columns if col not in ['Premium Amount', 'fold']]\ny = 'Premium Amount'\nfold_column = 'fold'","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T01:36:27.168636Z","iopub.execute_input":"2024-12-17T01:36:27.168925Z","iopub.status.idle":"2024-12-17T01:37:30.365167Z","shell.execute_reply.started":"2024-12-17T01:36:27.168897Z","shell.execute_reply":"2024-12-17T01:37:30.363966Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"","metadata":{}},{"cell_type":"code","source":"import h2o\nimport joblib\nfrom h2o.automl import H2OAutoML\nif True:\n    aml = H2OAutoML(\n            max_runtime_secs=3600* 5,\n            include_algos=[\"GBM\", \"DRF\", \"XGBoost\", \"DeepLearning\"],\n            keep_cross_validation_predictions=True,\n            seed=42,stopping_rounds=500, stopping_tolerance=0.999,\n            verbosity=\"info\"\n        )\n    aml.train(x=x, y=y, training_frame=h_train,fold_column=fold_column)\n    \n    leaderboard = aml.leaderboard.as_data_frame()\n    print(leaderboard)\n\n    model_ids = leaderboard['model_id'].tolist()\n    \n    oofs = pd.DataFrame()\n    for model_id in model_ids:\n        model = h2o.get_model(model_id)\n        oof_predictions = model.cross_validation_holdout_predictions().as_data_frame()\n        oofs[model_id] = oof_predictions['predict']\n\n    preds = pd.DataFrame()\n    for model_id in model_ids:\n        model = h2o.get_model(model_id)\n        test_predictions = model.predict(h_test).as_data_frame()\n        preds[model_id] = test_predictions['predict']\n    \n    joblib.dump([oofs, preds], \"h2o_automl.pkl\")\n\nelse:\n    oofs, preds = joblib.load(\"/kaggle/input/h2o-automl/h2o_automl_2.pkl\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T01:39:51.080841Z","iopub.execute_input":"2024-12-17T01:39:51.081836Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"models = list(oofs.columns)\nfor model in models:\n    print(f\"{model}: {rmsle(np.expm1(oofs[model]), np.expm1(train['Premium Amount']))}\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T01:37:30.548596Z","iopub.status.idle":"2024-12-17T01:37:30.548984Z","shell.execute_reply.started":"2024-12-17T01:37:30.548808Z","shell.execute_reply":"2024-12-17T01:37:30.548828Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"ridge = Ridge(alpha=0.1)  \n\nridge.fit(oofs, train['Premium Amount'])\noof_preds = ridge.predict(oofs)\nprint(rmsle(np.expm1(oof_preds), np.expm1(train['Premium Amount'])))\ntest_predictions = ridge.predict(preds)\n\nsample['Premium Amount'] = np.expm1(test_predictions)\nsample.to_csv('submission.csv', index = False)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T01:37:30.551252Z","iopub.status.idle":"2024-12-17T01:37:30.552322Z","shell.execute_reply.started":"2024-12-17T01:37:30.55201Z","shell.execute_reply":"2024-12-17T01:37:30.55205Z"}},"outputs":[],"execution_count":null}]}