{"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"},{"sourceId":9178166,"sourceType":"datasetVersion","datasetId":5547076}],"dockerImageVersionId":30786,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# <p style=\"font-family:Consolas Mono; font-weight:normal; letter-spacing: 2px; color:#37FABC; font-size:160%; text-align:center;padding: 0px; border-bottom: 5px solid #407A68\">PlayGround Series S4 E12 EDA and simple model</p>","metadata":{},"attachments":{"b3f6fae3-3e70-43f4-9fda-62c39d6db929.png":{"image/png":"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"},"6339d3cb-4784-4908-ac83-49cf6b28d45f.png":{"image/png":"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"}}},{"cell_type":"markdown","source":"## <p style=\"font-family:Consolas Mono; font-weight:normal; letter-spacing: 2px; color:#06D1C7; font-size:130%; text-align:left;padding: 0px; border-bottom: 5px solid #008F77\">Intro</p>\n​\n**🟦EN**:\n<div class=\"alert alert-block alert-info\" style=\"font-size:14px; font-family:verdana; line-height: 1.7em; color:#5361fc;\">\nThis Kaggle workbook aims to provide a comprehensive exploratory data analysis (EDA) and a set of simple models (which will not be optimized), but which can give a vague idea of how to choose the best model for the given data set, with the ultimate goal of making decisions.\nThrough this EDA, we will be able to get a deeper understanding of the structure of the data, the values that have a relationship between them and the missing values and pattern or outliers that may affect when performing the modeling or selecting the model we want to use for prediction/recommendation. By performing an EDA, we can identify potential pitfalls and make the decisions and subsequent processing necessary to improve the performance and accuracy of the models.\n</div>\n\n**🟥ES**: \n<div class=\"alert alert-block alert-info\" style=\"font-size:14px; font-family:verdana; line-height: 1.7em; background-color: #c9b1fa; color:#38196e;\">\nEste cuaderno Kaggle tiene el objetivo proporcionar un análisis exploratorio de datos (AED) exhaustivo y un conjunto de modelos simples (los cuales no estarán optimizados), pero que pueden llegar a dar una vaga idea para escoger el mejor modelo, para el conjunto de datos dado, con el objetivo final de tomar decisiones.\n​\nA través de este AED, podremos obtener una comprensión más profunda de la estructura de los datos, los valores que tiene una relación entre ellos y los valores que faltan y patrón o valores anómalos que pueda afectar a la hora de realizar el modelado o seleccionar el modelo que queremos utilizar para la predicción / recomendación. Al realizar un EDA, podemos identificar posibles obstáculos y tomar las decisiones, y posteriormente el procesado necesario para mejorar el rendimiento y la precisión de los modelos.\n</div>","metadata":{}},{"cell_type":"markdown","source":"## <p style=\"font-family:Consolas Mono; font-weight:normal; letter-spacing: 2px; color:#06D1C7; font-size:130%; text-align:left;padding: 0px; border-bottom: 3px solid #008F77\">Data information</p>\n​\n**🟦EN**:\n​\n# Dataset Description\n## Overview\n\nThe dataset for this competition (both train and test) was generated from a deep learning model trained on the Insurance Premium Prediction dataset. Feature distributions are close to, but not exactly the same, as the original. Feel free to use the original dataset as part of this competition, both to explore differences as well as to see whether incorporating the original in training improves model performance.\n​\n### Dataset Features:\r\n\r\n* **id**: Unique identifier for each record in the dataset, useful for referencing individual observations.\r\n* **Age**: Age of the person, can impact various aspects of the dataset.\r\n* **Gender**: Gender of the person, relevant for demographic analyses.\r\n* **Annual Income**: Yearly income of the person, useful in financial studies.\r\n* **Marital Status**: Indicates marital status, useful in demographic and social studies.\r\n* **Number of Dependents**: Number of dependents associated with the person, important for financial planning analyses.\r\n* **Education Level**: Education level attained, relevant for socio-economic studies.\r\n* **Occupation**: The profession or job role of the individual, useful for occupational analysis.\r\n* **Health Score**: Health index of the person, useful for wellness studies.\r\n* **Location**: Place of residence, relevant for geographic analysis.\r\n* **Policy Type**: Type of insurance policy, useful for insurance studies.\r\n* **Previous Claims**: Number of previous insurance claims, relevant for risk assessment.\r\n* **Vehicle Age**: Age of the vehicle, significant in auto insurance datasets.\r\n* **Credit Score**: Creditworthiness of the individual, important for financial analyses.\r\n* **Insurance Duration**: Duration of the current insurance policy, relevant for retention studies.\r\n* **Policy Start Date**: Date when the policy started, useful for timeline analysis.\r\n* **Customer Feedback**: Feedback provided by the customer, significant for satisfaction studies.\r\n* **Smoking Status**: Indicates whether the person is a smoker, relevant for health analyses.\r\n* **Exercise Frequency**: Frequency of exercise activities, useful in wellness and health studies.\r\n* **Property Type**: Type of property owned, relevant for property-related analyses.\r\n* **Premium Amount**: Amount of insurance premium, essential for financial and insurance analysis.\n\n​\n## Files\n- `train.csv` - the tPremium Amountpressiondataset; price is the continuous targe\n- `test.csv` - the test dataset; your objective is to predict the value of price for each row\n- `sample_submission.csv` - a sample submission file in## Variable Information\r\n\r\n| Name                     | Data Type       | Has Nulls   | Categorical/Continuous | Description                                  | Units  |\r\n|--------------------------|-----------------|-------------|------------------------|----------------------------------------------|--------|\r\n| id                       | int             | No          | Continuous             | Unique identifier                           | N/A    |\r\n| Age                      | float           | Yes         | Continuous             | Age of the person                           | N/A    |\r\n| Gender                   | string          | No          | Categorical            | Gender of the person                        | N/A    |\r\n| Annual Income            | float           | Yes         | Continuous             | Yearly income                               | N/A    |\r\n| Marital Status           | string          | Yes         | Categorical            | Marital status                              | N/A    |\r\n| Number of Dependents     | float           | Yes         | Continuous             | Number of dependents                        | N/A    |\r\n| Education Level          | string          | No          | Categorical            | Education level attained                    | N/A    |\r\n| Occupation               | string          | Yes         | Categorical            | Profession or job role                      | N/A    |\r\n| Health Score             | float           | Yes         | Continuous             | Health index                                | N/A    |\r\n| Location                 | string          | No          | Categorical            | Place of residence                          | N/A    |\r\n| Policy Type              | string          | No          | Categorical            | Type of insurance policy                    | N/A    |\r\n| Previous Claims          | float           | Yes         | Continuous             | Number of previous claims                   | N/A    |\r\n| Vehicle Age              | float           | No          | Continuous             | Age of the vehicle                          | N/A    |\r\n| Credit Score             | float           | Yes         | Continuous             | Creditworthiness                            | N/A    |\r\n| Insurance Duration       | float           | No          | Continuous             | Current insurance duration                  | N/A    |\r\n| Policy Start Date        | string          | No          | Categorical            | Date of policy start                        | N/A    |\r\n| Customer Feedback        | string          | Yes         | Categorical            | Feedback provided by the customer           | N/A    |\r\n| Smoking Status           | string          | No          | Categorical            | Smoking status                              | N/A    |\r\n| Exercise Frequency       | string          | No          | Categorical            | Exercise frequency                          | N/A    |\r\n| Property Type            | string          | No          | Categorical            | Type of property owned                      | N/A    |\r\n| Premium Amount           | float           | No          | Continuous             | Amount of insurance premium         | N/A    |\n\n\nl conjunto ddel conjunto de datose datos\n\n\n​\n​\n​\n​\n​\n**🟥ES**:\n​\n# Descripción \n\nEl conjunto de datos de esta competición (tanto de entrenamiento como de prueba) se generó a partir de un modelo de aprendizaje profundo entrenado en el conjunto de datos Insurance Premium Prediction. Las distribuciones de las características son similares, aunque no exactamente iguales, a las del original. Siéntase libre de utilizar el conjunto de datos original como parte de esta competición, tanto para explorar las diferencias como para ver si la incorporación del original en el entrenamiento mejora el rendimiento del modelo.\n​* **id**: Identificador único para cada registro en el dataset, útil para referenciar observaciones individuales.\r\n* **Age**: Edad de la persona, puede influir en varios aspectos del análisis.\r\n* **Gender**: Género de la persona, relevante para análisis demográficos.\r\n* **Annual Income**: Ingreso anual de la persona, útil en estudios financieros.\r\n* **Marital Status**: Indica el estado civil, relevante en estudios demográficos y sociales.\r\n* **Number of Dependents**: Número de dependientes asociados a la persona, importante para análisis de planificación financiera.\r\n* **Education Level**: Nivel educativo alcanzado, relevante en estudios socioeconómicos.\r\n* **Occupation**: Profesión u ocupación de la persona, útil para análisis laborales.\r\n* **Health Score**: Índice de salud de la persona, útil para estudios de bienestar.\r\n* **Location**: Lugar de residencia, relevante para análisis geográficos.\r\n* **Policy Type**: Tipo de póliza de seguro, útil en estudios de seguros.\r\n* **Previous Claims**: Número de reclamos previos de seguro, relevante para evaluaciones de riesgo.\r\n* **Vehicle Age**: Edad del vehículo, significativa en datasets de seguros de automóviles.\r\n* **Credit Score**: Puntuación crediticia de la persona, importante en análisis financieros.\r\n* **Insurance Duration**: Duración de la póliza de seguro actual, relevante en estudios de retención.\r\n* **Policy Start Date**: Fecha de inicio de la póliza, útil para análisis temporales.\r\n* **Customer Feedback**: Opinión proporcionada por el cliente, importante en estudios de satisfacción.\r\n* **Smoking Status**: Indica si la persona fuma, relevante para análisis de salud.\r\n* **Exercise Frequency**: Frecuencia de actividades físicas, útil en estudios de bienestar y salud.\r\n* **Property Type**: Tipo de propiedad que posee la persona, relevante en análisis relacionados con bienes inmuebles.\r\n* **Premium Amount**: Monto de la prima de seguro, esencial para análisis financieros y de seguros.a persona ha sido diagnosticada con depresiónPremium Amountivos\n- `train.csv` -depressiono de datos de formación; loan_status es el objetivo binario\n- `test.csv` - el conjunto de datos de prueba; su objetivo es predecir la probabilidad del estado_préstamo objetivo para cada fila\n- `sample_submission.csv`## Información de las Variables\r\n\r\n| Nombre                   | Tipo de Dato    | Tiene Nulos | Categórica/Continua | Descripción                                      | Unidades                 |\r\n|--------------------------|-----------------|-------------|----------------------|--------------------------------------------------|--------------------------|\r\n| id                       | int             | No          | Continua             | Identificador único                              | N/A                      |\r\n| Age                      | float           | Sí          | Continua             | Edad de la persona                               | Años                     |\r\n| Gender                   | string          | No          | Categórica           | Género de la persona                             | N/A                      |\r\n| Annual Income            | float           | Sí          | Continua             | Ingreso anual                                    | Dólares                  |\r\n| Marital Status           | string          | Sí          | Categórica           | Estado civil                                     | N/A                      |\r\n| Number of Dependents     | float           | Sí          | Continua             | Número de dependientes                           | Cantidad                 |\r\n| Education Level          | string          | No          | Categórica           | Nivel educativo alcanzado                        | N/A                      |\r\n| Occupation               | string          | Sí          | Categórica           | Profesión u ocupación                            | N/A                      |\r\n| Health Score             | float           | Sí          | Continua             | Índice de salud                                  | Puntuación (0-100)       |\r\n| Location                 | string          | No          | Categórica           | Lugar de residencia                              | N/A                      |\r\n| Policy Type              | string          | No          | Categórica           | Tipo de póliza de seguro                         | N/A                      |\r\n| Previous Claims          | float           | Sí          | Continua             | Número de reclamos previos                       | Cantidad                 |\r\n| Vehicle Age              | float           | No          | Continua             | Edad del vehículo                                | Años                     |\r\n| Credit Score             | float           | Sí          | Continua             | Puntuación crediticia                            | Puntos (0-850)           |\r\n| Insurance Duration       | float           | No          | Continua             | Duración de la póliza de seguro                  | Años                     |\r\n| Policy Start Date        | string          | No          | Categórica           | Fecha de inicio de la póliza                     | Fecha                    |\r\n| Customer Feedback        | string          | Sí          | Categórica           | Opinión del cliente                              | N/A                      |\r\n| Smoking Status           | string          | No          | Categórica           | Indica si la persona fuma                        | N/A                      |\r\n| Exercise Frequency       | string          | No          | Categórica           | Frecuencia de ejercicio                          | Frecuencia (diaria, semanal, etc.) |\r\n| Property Type            | string          | No          | Categórica           | Tipo de propiedad                                | N/A                      |\r\n| Premium Amount           | float           | No          | Continua             | Monto de la prima de seguro                      | Dólares                  |ncia de diagnóstico de depresión             | N/A              |\n","metadata":{}},{"cell_type":"markdown","source":"## <p style=\"font-family:Consolas Mono; font-weight:normal; letter-spacing: 2px; color:#06D1C7; font-size:130%; text-align:left;padding: 0px; border-bottom: 3px solid #008F77\">Library import</p>","metadata":{}},{"cell_type":"code","source":"import os \nimport re\nimport gc\nimport sys\nimport math\nimport time\nimport random\nimport warnings\nimport catboost\nimport datetime\nimport numpy as np \nimport pandas as pd\nimport seaborn as sns\nimport lightgbm as lgb\nimport missingno as msno\nimport plotly.express as px\nimport category_encoders as ce\nimport matplotlib.pyplot as plt\nimport plotly.graph_objects as go\nimport matplotlib.colors as mcolors\n\nfrom tqdm import tqdm\nfrom lightgbm import early_stopping  \nfrom IPython.display import clear_output\nfrom sklearn.preprocessing import LabelEncoder\nfrom sklearn.model_selection import RepeatedKFold\nfrom sklearn.metrics import mean_squared_log_error \nfrom sklearn.feature_extraction import FeatureHasher\nfrom catboost import CatBoostRegressor, CatBoostClassifier, Pool\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-04T07:49:53.403413Z","iopub.execute_input":"2024-12-04T07:49:53.40436Z","iopub.status.idle":"2024-12-04T07:49:59.819119Z","shell.execute_reply.started":"2024-12-04T07:49:53.404312Z","shell.execute_reply":"2024-12-04T07:49:59.818052Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Put theme of notebook \nfrom colorama import Fore, Style\n\n# Colors\nred = Fore.RED + Style.BRIGHT\nmgta = Fore.MAGENTA + Style.BRIGHT\nyllw = Fore.YELLOW + Style.BRIGHT\ncyn = Fore.CYAN + Style.BRIGHT\nblue = Fore.BLUE + Style.BRIGHT\n\n# Reset\nres = Style.RESET_ALL\nplt.style.use({\"figure.facecolor\": \"#282a36\"})","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2024-12-04T07:49:59.821127Z","iopub.execute_input":"2024-12-04T07:49:59.821708Z","iopub.status.idle":"2024-12-04T07:49:59.828166Z","shell.execute_reply.started":"2024-12-04T07:49:59.821673Z","shell.execute_reply":"2024-12-04T07:49:59.826995Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Colors\nYELLOW = \"#F7C53E\"\n\nCYAN_G = \"#0CF7AF\"\nCYAB_DARK = \"#11AB7C\"\n\nPURPLE = \"#D826F8\"\nPURPLE_DARJ = \"#9309AB\"\nPURPLE_L = \"#b683d6\"\n\nBLUE = \"#0C97FA\"\nRED = \"#FA1D19\"\nORANGE = \"#FA9F19\"\nGREEN = \"#0CFA58\"\nLIGTH_BLUE = \"#01FADC\"\nS_BLUE = \"#81c9e6\"\nDARK_BLUE = \"#394be6\"\n# Palettes\nPALETTE_2 = [CYAN_G, PURPLE]\nPALETTE_3 = [YELLOW, CYAN_G, PURPLE]\nPALETTE_4 = [YELLOW, ORANGE, PURPLE, LIGTH_BLUE]\nPALETTE_5 = [PURPLE_DARJ, PURPLE_L, PURPLE, BLUE, LIGTH_BLUE]\nPALETTE_6 = [BLUE, RED, ORANGE, GREEN, LIGTH_BLUE, PURPLE]\n\n# Vaporwave palette by Francesc Oliveras\nPALETTE_7 = [PURPLE_DARJ, PURPLE_L, PURPLE, BLUE, LIGTH_BLUE, DARK_BLUE, S_BLUE]\nPALETTE_7_C = [PURPLE_DARJ, BLUE, PURPLE, LIGTH_BLUE, PURPLE_L, S_BLUE, DARK_BLUE]\nsns.palplot(sns.color_palette(PALETTE_7))\n\n# Set Style\nsns.set_style(\"whitegrid\")\nsns.despine(left=True, bottom=True)\n\ncmap = mcolors.LinearSegmentedColormap.from_list(\"\", PALETTE_2)\ncmap_2 = mcolors.LinearSegmentedColormap.from_list(\"\", [S_BLUE, PURPLE_DARJ])\n\nfont_family = dict(layout=go.Layout(font=dict(family=\"Franklin Gothic\", size=10), width=1000, height=500))\n\nwarnings.filterwarnings('ignore')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-04T07:49:59.829801Z","iopub.execute_input":"2024-12-04T07:49:59.830274Z","iopub.status.idle":"2024-12-04T07:50:00.010929Z","shell.execute_reply.started":"2024-12-04T07:49:59.830227Z","shell.execute_reply":"2024-12-04T07:50:00.009341Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## <p style=\"font-family:Consolas Mono; font-weight:normal; letter-spacing: 2px; color:#06D1C7; font-size:130%; text-align:left;padding: 0px; border-bottom: 3px solid #008F77\">Constants</p>","metadata":{}},{"cell_type":"code","source":"PATH = \"/kaggle/input/playground-series-s4e12\"\nSUBMISSION_FILENAME = \"sample_submission.csv\"\nTEST_FILENAME = \"test.csv\"\nTRAIN_FILENAME = \"train.csv\"\n\nTARGET = \"Premium Amount\"\n\nSUBMISSION_DIR = os.path.join(PATH, SUBMISSION_FILENAME)\nTRAIN_DIR = os.path.join(PATH, TRAIN_FILENAME) \nTEST_DIR = os.path.join(PATH, TEST_FILENAME)\nORIGINAL_DIR = \"/kaggle/input/insurance-premium-prediction/Insurance Premium Prediction Dataset.csv\"\n\nNUM_FOLD = 5\nE_STOP = 50\nMODEL = \"LGBM\"\nn_splits = 10\nSEED = 250","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-04T07:50:00.014519Z","iopub.execute_input":"2024-12-04T07:50:00.016508Z","iopub.status.idle":"2024-12-04T07:50:00.027411Z","shell.execute_reply.started":"2024-12-04T07:50:00.016428Z","shell.execute_reply":"2024-12-04T07:50:00.026153Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## <p style=\"font-family:Consolas Mono; font-weight:normal; letter-spacing: 2px; color:#06D1C7; font-size:130%; text-align:left;padding: 0px; border-bottom: 3px solid #008F77\">Functions</p>","metadata":{}},{"cell_type":"code","source":"def show_corr_heatmap(df, title):\n    \n    corr = df.corr()\n    mask = np.zeros_like(corr)\n    mask[np.triu_indices_from(mask)] = True\n\n    plt.figure(figsize = (15, 10))\n    plt.title(title)\n    # sns.heatmap(corr, annot = False, linewidths=.5, fmt=\".2f\", square=True, mask = mask, cmap=cmap_2)\n    if df.shape[1] < 25:\n        sns.heatmap(corr, annot=True, linewidths=.5, fmt=\".2f\", square=True, mask=mask, cmap=cmap_2)\n    else:\n        sns.heatmap(corr, annot=False, linewidths=.5, square=True, mask=mask, cmap=cmap_2)\n\n    plt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-04T07:50:00.029911Z","iopub.execute_input":"2024-12-04T07:50:00.030522Z","iopub.status.idle":"2024-12-04T07:50:00.044542Z","shell.execute_reply.started":"2024-12-04T07:50:00.030458Z","shell.execute_reply":"2024-12-04T07:50:00.043133Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def data_description(df):\n    print(\"Data description\")\n    print(f\"Total number of records {df.shape[0]}\")\n    print(f'number of features {df.shape[1]}\\n\\n')\n    columns = df.columns\n    data_type = []\n    \n    # Get the datatype of features\n    for col in df.columns:\n        data_type.append(df[col].dtype)\n        \n    n_uni = df.nunique()\n    # Number of NaN values\n    n_miss = df.isna().sum()\n    \n    names = list(zip(columns, data_type, n_uni, n_miss))\n    variable_desc = pd.DataFrame(names, columns=[\"Name\",\"Type\",\"Unique levels\",\"Missing\"])\n    print(variable_desc)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-04T07:50:00.046423Z","iopub.execute_input":"2024-12-04T07:50:00.047024Z","iopub.status.idle":"2024-12-04T07:50:00.062346Z","shell.execute_reply.started":"2024-12-04T07:50:00.046964Z","shell.execute_reply":"2024-12-04T07:50:00.060938Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def plot_cont(col, ax, color=PALETTE_7[0]):\n    sns.histplot(data=comb_df, x=col,\n                hue=\"set\",ax=ax, hue_order=labels,\n                common_norm=False, **histplot_hyperparams)\n    \n    ax_2 = ax.twinx()\n    ax_2 = plot_cont_dot(\n        comb_df.query('set==\"train\"'),\n        col, TARGET, ax_2,\n        color=color\n    )\n    \n    ax_2 = plot_cont_dot(\n        comb_df, col,\n        TARGET, ax_2,\n        color=color\n    )","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-04T07:50:00.063939Z","iopub.execute_input":"2024-12-04T07:50:00.064537Z","iopub.status.idle":"2024-12-04T07:50:00.077519Z","shell.execute_reply.started":"2024-12-04T07:50:00.064468Z","shell.execute_reply":"2024-12-04T07:50:00.075754Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def show_pie_mult(dataframe, target = TARGET):\n    target_counts = dataframe[target].sum()\n\n    # Creando el gráfico de pastel con un agujero en el centro\n    fig, ax = plt.subplots(figsize=(10, 8))\n    wedges, texts, autotexts = ax.pie(target_counts, labels=target, autopct='%1.1f%%', startangle=140, colors=PALETTE_7_C)\n\n    # Agregando un círculo blanco en el centro para hacer un agujero\n    centre_circle = plt.Circle((0,0),0.70,fc='white')\n    fig = plt.gcf()\n    fig.gca().add_artist(centre_circle)\n\n    # Ajustando el aspecto para que sea un círculo y mostrando el gráfico\n    plt.title('Distribución de los Targets')\n    plt.axis('equal')\n    plt.tight_layout()\n    plt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-04T07:50:00.079806Z","iopub.execute_input":"2024-12-04T07:50:00.080204Z","iopub.status.idle":"2024-12-04T07:50:00.088284Z","shell.execute_reply.started":"2024-12-04T07:50:00.080157Z","shell.execute_reply":"2024-12-04T07:50:00.087145Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def show_pie_categorical(dataframe, target=TARGET):\n    target_counts = dataframe[target].value_counts()\n\n    # Creando el gráfico de pastel con un agujero en el centro\n    fig, ax = plt.subplots(figsize=(10, 8))\n    wedges, texts, autotexts = ax.pie(target_counts, labels=target_counts.index, autopct='%1.1f%%', startangle=140, colors=[PALETTE_7_C[0],PALETTE_7_C[1]])\n\n    centre_circle = plt.Circle((0,0),0.70,fc='white')\n    fig = plt.gcf()\n    fig.gca().add_artist(centre_circle)\n\n    # Ajustando el aspecto para que sea un círculo y mostrando el gráfico\n    plt.title('Distribución de los Targets')\n    plt.axis('equal')\n    plt.tight_layout()\n    plt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-04T07:50:00.089712Z","iopub.execute_input":"2024-12-04T07:50:00.090089Z","iopub.status.idle":"2024-12-04T07:50:00.111676Z","shell.execute_reply.started":"2024-12-04T07:50:00.090056Z","shell.execute_reply":"2024-12-04T07:50:00.110469Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def show_box_plot(dataframe):\n    # numerical_features_for_boxplot = train_df.select_dtypes(include=['int64', 'float64']).columns.drop('id')\n    numerical_features_for_boxplot = dataframe.select_dtypes(include=['int64', 'float64'])\n\n    plt.figure(figsize=(20, 15))\n\n    for i, feature in enumerate(numerical_features_for_boxplot, 1):\n        plt.subplot(7, 5, i)\n        sns.boxplot(y=train_df[feature], color=PALETTE_7_C[i % len(PALETTE_7_C)])\n        plt.title(feature)\n\n    plt.tight_layout()\n    plt.show()\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-04T07:50:00.116534Z","iopub.execute_input":"2024-12-04T07:50:00.117079Z","iopub.status.idle":"2024-12-04T07:50:00.126966Z","shell.execute_reply.started":"2024-12-04T07:50:00.117039Z","shell.execute_reply":"2024-12-04T07:50:00.125981Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def show_hist(dataframe):\n    # Filtrando las columnas numéricas para sus histogramas\n    numerical_features = train_df.select_dtypes(include=['int64', 'float64']).columns\n\n    # Configurando el tamaño de la figura\n    plt.figure(figsize=(20, 15))\n\n    # Creando un histograma para cada característica numérica\n    for i, feature in enumerate(numerical_features, 1):\n        plt.subplot(7, 5, i) # Ajustar según el número de características numéricas\n        dataframe[feature].hist(bins=20, color=PALETTE_7_C[int(i%7)])\n        plt.title(feature)\n\n    plt.tight_layout()\n    plt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-04T07:50:00.128261Z","iopub.execute_input":"2024-12-04T07:50:00.12855Z","iopub.status.idle":"2024-12-04T07:50:00.142912Z","shell.execute_reply.started":"2024-12-04T07:50:00.128523Z","shell.execute_reply":"2024-12-04T07:50:00.141899Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def apply_one_hot_encoding(df, threshold=10):\n    \"\"\"\n    Apply One-Hot Encoding to categorical columns with unique values below a given threshold.\n\n    Parameters:\n    df (pd.DataFrame): The input dataframe.\n    threshold (int): The maximum number of unique values for a column to be eligible for OHE.\n\n    Returns:\n    pd.DataFrame: The dataframe with One-Hot Encoding applied to selected columns.\n    \"\"\"\n    # Identify categorical columns\n    categorical_columns = df.select_dtypes(include=['object']).columns\n    \n    # Determine columns eligible for OHE\n    ohe_columns = [col for col in categorical_columns if df[col].nunique() < threshold]\n    \n    # Apply One-Hot Encoding\n    df_ohe = pd.get_dummies(df, columns=ohe_columns, drop_first=True)\n    \n    return df_ohe","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-04T07:50:00.144295Z","iopub.execute_input":"2024-12-04T07:50:00.14478Z","iopub.status.idle":"2024-12-04T07:50:00.163321Z","shell.execute_reply.started":"2024-12-04T07:50:00.144733Z","shell.execute_reply":"2024-12-04T07:50:00.162162Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def apply_label_encoding(df, columns):\n    \"\"\"\n    Apply Label Encoding to specified columns.\n\n    Parameters:\n    df (pd.DataFrame): The input dataframe.\n    columns (list): List of column names to apply Label Encoding.\n\n    Returns:\n    pd.DataFrame: DataFrame with Label Encoding applied.\n    \"\"\"\n    df_encoded = df.copy()\n    for col in columns:\n        label_encoder = LabelEncoder()\n        df_encoded[col] = label_encoder.fit_transform(df_encoded[col])\n    return df_encoded","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-04T07:50:00.165072Z","iopub.execute_input":"2024-12-04T07:50:00.165547Z","iopub.status.idle":"2024-12-04T07:50:00.180329Z","shell.execute_reply.started":"2024-12-04T07:50:00.1655Z","shell.execute_reply":"2024-12-04T07:50:00.179062Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def apply_frequency_encoding(df, columns):\n    \"\"\"\n    Apply Frequency Encoding to specified columns.\n\n    Parameters:\n    df (pd.DataFrame): The input dataframe.\n    columns (list): List of column names to apply Frequency Encoding.\n\n    Returns:\n    pd.DataFrame: DataFrame with Frequency Encoding applied.\n    \"\"\"\n    df_encoded = df.copy()\n    for col in columns:\n        freq_map = df[col].value_counts(normalize=True).to_dict()\n        df_encoded[col] = df[col].map(freq_map)\n    return df_encoded","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-04T07:50:00.18205Z","iopub.execute_input":"2024-12-04T07:50:00.182423Z","iopub.status.idle":"2024-12-04T07:50:00.196621Z","shell.execute_reply.started":"2024-12-04T07:50:00.182389Z","shell.execute_reply":"2024-12-04T07:50:00.195075Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def apply_hashing_encoding(df, columns, n_features=8):\n    \"\"\"\n    Apply Hashing Encoding to specified columns.\n\n    Parameters:\n    df (pd.DataFrame): The input dataframe.\n    columns (list): List of column names to apply Hashing Encoding.\n    n_features (int): Number of features to generate for each column.\n\n    Returns:\n    pd.DataFrame: DataFrame with Hashing Encoding applied.\n    \"\"\"\n    df_encoded = df.copy()\n    for col in columns:\n        hasher = FeatureHasher(n_features=n_features, input_type='string')\n        hashed_features = hasher.transform(df_encoded[col].astype(str))\n        hashed_df = pd.DataFrame(hashed_features.toarray(), columns=[f\"{col}_hash_{i}\" for i in range(n_features)])\n        df_encoded = df_encoded.drop(columns=[col]).join(hashed_df)\n    return df_encoded","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-04T07:50:00.198348Z","iopub.execute_input":"2024-12-04T07:50:00.198822Z","iopub.status.idle":"2024-12-04T07:50:00.214178Z","shell.execute_reply.started":"2024-12-04T07:50:00.19877Z","shell.execute_reply":"2024-12-04T07:50:00.212901Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def apply_binary_encoding(df, columns):\n    \"\"\"\n    Apply Binary Encoding to specified columns.\n\n    Parameters:\n    df (pd.DataFrame): The input dataframe.\n    columns (list): List of column names to apply Binary Encoding.\n\n    Returns:\n    pd.DataFrame: DataFrame with Binary Encoding applied.\n    \"\"\"\n    binary_encoder = ce.BinaryEncoder(cols=columns)\n    df_encoded = binary_encoder.fit_transform(df)\n    return df_encoded","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-04T07:50:00.215839Z","iopub.execute_input":"2024-12-04T07:50:00.21632Z","iopub.status.idle":"2024-12-04T07:50:00.228128Z","shell.execute_reply.started":"2024-12-04T07:50:00.216271Z","shell.execute_reply":"2024-12-04T07:50:00.226653Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def date_encoding(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    min_year = df['Year'].min()\n    max_year = df['Year'].max()\n    df['Year_sin'] = np.sin(2 * np.pi * (df['Year'] - min_year) / (max_year - min_year))\n    df['Year_cos'] = np.cos(2 * np.pi * (df['Year'] - min_year) / (max_year - min_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\n    return df","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-04T07:50:00.230179Z","iopub.execute_input":"2024-12-04T07:50:00.230604Z","iopub.status.idle":"2024-12-04T07:50:00.244086Z","shell.execute_reply.started":"2024-12-04T07:50:00.230537Z","shell.execute_reply":"2024-12-04T07:50:00.242948Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## <p style=\"font-family:Consolas Mono; font-weight:normal; letter-spacing: 2px; color:#06D1C7; font-size:130%; text-align:left;padding: 0px; border-bottom: 3px solid #008F77\">Import data</p>","metadata":{}},{"cell_type":"code","source":"train_df = pd.read_csv(TRAIN_DIR, index_col=\"id\")\ntest_df = pd.read_csv(TEST_DIR, index_col=\"id\")\noriginal_df = pd.read_csv(ORIGINAL_DIR)\nsubmission_df = pd.read_csv(SUBMISSION_DIR)\n\ntrain_df = pd.concat([train_df, original_df])","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-04T07:50:00.245623Z","iopub.execute_input":"2024-12-04T07:50:00.24669Z","iopub.status.idle":"2024-12-04T07:50:13.699697Z","shell.execute_reply.started":"2024-12-04T07:50:00.246629Z","shell.execute_reply":"2024-12-04T07:50:13.698566Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"data_description(train_df)\ndata_description(test_df)\ndata_description(original_df)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-04T07:50:13.701183Z","iopub.execute_input":"2024-12-04T07:50:13.701547Z","iopub.status.idle":"2024-12-04T07:50:17.590617Z","shell.execute_reply.started":"2024-12-04T07:50:13.701513Z","shell.execute_reply":"2024-12-04T07:50:17.589358Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"msno.matrix(df=train_df, figsize=(15,5), color=(0,0.6,0.5))","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-04T07:50:17.59276Z","iopub.execute_input":"2024-12-04T07:50:17.593078Z","iopub.status.idle":"2024-12-04T07:50:27.453472Z","shell.execute_reply.started":"2024-12-04T07:50:17.593048Z","shell.execute_reply":"2024-12-04T07:50:27.452142Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_df = date_encoding(train_df)\ntest_df = date_encoding(test_df)\noriginal_df = date_encoding(original_df)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-04T07:50:27.454755Z","iopub.execute_input":"2024-12-04T07:50:27.455058Z","iopub.status.idle":"2024-12-04T07:50:30.090951Z","shell.execute_reply.started":"2024-12-04T07:50:27.455029Z","shell.execute_reply":"2024-12-04T07:50:30.089625Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_df.columns","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-04T07:50:30.092514Z","iopub.execute_input":"2024-12-04T07:50:30.093026Z","iopub.status.idle":"2024-12-04T07:50:30.102946Z","shell.execute_reply.started":"2024-12-04T07:50:30.092967Z","shell.execute_reply":"2024-12-04T07:50:30.101597Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from sklearn.preprocessing import LabelEncoder\nimport pandas as pd\nfrom sklearn.impute import SimpleImputer\nimport category_encoders as ce\n\ndef preprocess_data(df):\n    # Copiar el dataframe original\n    df_processed = df.copy()\n\n    # Imputación para columnas numéricas\n    numeric_columns = df_processed.select_dtypes(include=['float64', 'int64']).columns\n    if not numeric_columns.empty:\n        numeric_imputer = SimpleImputer(strategy='mean')\n        df_processed[numeric_columns] = numeric_imputer.fit_transform(df_processed[numeric_columns])\n\n    # Imputación para columnas categóricas\n    categorical_columns = df_processed.select_dtypes(include=['object']).columns\n    if not categorical_columns.empty:\n        categorical_imputer = SimpleImputer(strategy='constant', fill_value='Unknown')\n        df_processed[categorical_columns] = categorical_imputer.fit_transform(df_processed[categorical_columns])\n\n    # Codificación de columnas categóricas con One-Hot Encoding\n    one_hot_columns = ['Property Type', 'Policy Type', 'Gender', 'Location', 'Exercise Frequency']\n    df_processed = pd.get_dummies(df_processed, columns=[col for col in one_hot_columns if col in df_processed.columns], drop_first=True)\n\n    # Codificación de columnas categóricas ordinales con Label Encoding\n    label_columns = ['Education Level', 'Marital Status', 'Occupation', 'Customer Feedback', 'Smoking Status']\n    for col in label_columns:\n        if col in df_processed.columns:\n            label_encoder = LabelEncoder()\n            df_processed[col] = label_encoder.fit_transform(df_processed[col])\n\n    # Conversión de fechas a datetime\n    date_columns = ['Policy Start Date']\n    for col in date_columns:\n        if col in df_processed.columns:\n            df_processed[col] = pd.to_datetime(df_processed[col], errors='coerce')\n\n    # Normalización opcional de columnas numéricas\n    # df_processed[numeric_columns] = (df_processed[numeric_columns] - df_processed[numeric_columns].mean()) / df_processed[numeric_columns].std()\n\n    return df_processed","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-04T07:50:30.104631Z","iopub.execute_input":"2024-12-04T07:50:30.10507Z","iopub.status.idle":"2024-12-04T07:50:30.307463Z","shell.execute_reply.started":"2024-12-04T07:50:30.105034Z","shell.execute_reply":"2024-12-04T07:50:30.306257Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_enc_df = preprocess_data(train_df)\ntest_enc_df = preprocess_data(test_df)\noriginal_enc_df = preprocess_data(original_df)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-04T07:50:30.309057Z","iopub.execute_input":"2024-12-04T07:50:30.309395Z","iopub.status.idle":"2024-12-04T07:50:39.331763Z","shell.execute_reply.started":"2024-12-04T07:50:30.309363Z","shell.execute_reply":"2024-12-04T07:50:39.330622Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_enc_df.columns","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-04T07:50:39.333048Z","iopub.execute_input":"2024-12-04T07:50:39.333363Z","iopub.status.idle":"2024-12-04T07:50:39.341063Z","shell.execute_reply.started":"2024-12-04T07:50:39.333333Z","shell.execute_reply":"2024-12-04T07:50:39.339782Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"display(show_corr_heatmap(train_enc_df, \"Train dataframe heatmap\"))\ndisplay(show_corr_heatmap(test_enc_df, \"Test dataframe heatmap\"))\ndisplay(show_corr_heatmap(original_enc_df, \"Original dataframe heatmap\"))","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-04T07:50:39.342591Z","iopub.execute_input":"2024-12-04T07:50:39.342974Z","iopub.status.idle":"2024-12-04T07:50:51.643468Z","shell.execute_reply.started":"2024-12-04T07:50:39.342942Z","shell.execute_reply":"2024-12-04T07:50:51.642371Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"show_hist(train_enc_df)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-04T07:50:51.645064Z","iopub.execute_input":"2024-12-04T07:50:51.645409Z","iopub.status.idle":"2024-12-04T07:50:56.611011Z","shell.execute_reply.started":"2024-12-04T07:50:51.645376Z","shell.execute_reply":"2024-12-04T07:50:56.609607Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"","metadata":{}},{"cell_type":"code","source":"X = train_enc_df.drop([TARGET], axis=1)\ny = train_enc_df[TARGET]","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-04T07:50:56.617594Z","iopub.execute_input":"2024-12-04T07:50:56.618137Z","iopub.status.idle":"2024-12-04T07:50:56.703393Z","shell.execute_reply.started":"2024-12-04T07:50:56.618086Z","shell.execute_reply":"2024-12-04T07:50:56.702225Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def rmsle_metric(y_true, y_pred):\n    y_pred = np.maximum(y_pred, 1e-6)\n    return np.sqrt(mean_squared_log_error(y_true, y_pred))","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-04T07:50:56.704919Z","iopub.execute_input":"2024-12-04T07:50:56.705271Z","iopub.status.idle":"2024-12-04T07:50:56.710182Z","shell.execute_reply.started":"2024-12-04T07:50:56.705239Z","shell.execute_reply":"2024-12-04T07:50:56.708995Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def model_train(params, test_data, model_name='LGBM', e_stop=50):\n    kfold = RepeatedKFold(n_splits=n_splits, n_repeats=1, random_state=SEED)\n\n    train_rmse_scores = []\n    val_rmse_scores = []\n    fold_test_preds = []\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        y_train_log = np.log1p(y_train)\n        y_val_log = np.log1p(y_val)\n        \n        if model_name == 'LGBM':\n            callbacks = [lgb.early_stopping(stopping_rounds=e_stop, verbose=False)]\n            model = lgb.LGBMRegressor(**params, random_state=SEED, verbose=-1, n_jobs=-1, device='cpu')\n            model.fit(X_train, y_train_log, \n                      eval_set=[(X_val, y_val_log)], \n                      eval_metric='rmse', \n                      callbacks=callbacks)\n        elif model_name == 'CAT':\n            model = CatBoostRegressor(**params, random_state=SEED, verbose=0, task_type='GPU')\n            model.fit(X_train, y_train_log, \n                      eval_set=(X_val, y_val_log), \n                      early_stopping_rounds=100, \n                      verbose=0)\n        \n        y_train_log_pred = model.predict(X_train)\n        y_val_log_pred = model.predict(X_val)\n        test_log_pred = model.predict(test_data)\n        \n        y_train_pred = np.expm1(y_train_log_pred)\n        y_val_pred = np.expm1(y_val_log_pred)\n        test_pred = np.expm1(test_log_pred)\n\n        fold_test_preds.append(test_pred)\n\n        train_rmse = rmsle_metric(y_train, y_train_pred)\n        val_rmse = rmsle_metric(y_val, y_val_pred)\n\n        train_rmse_scores.append(train_rmse)\n        val_rmse_scores.append(val_rmse)\n\n        print(f\"Fold {fold+1} - Train RMSLE: {red}{train_rmse:.4f}{res}, Validation RMSLE: {red}{val_rmse:.4f}´{res}\")\n        clear_output(wait=True)\n    \n    mean_test_preds = np.mean(fold_test_preds, axis=0)\n\n    print(f\"\\n {blue}Final Mean Scores{res} \")\n    print(f\"{blue}Mean Train RMSLE:{res} {red}{np.mean(train_rmse_scores):.4f}{res}\")\n    print(f\"{blue}Mean Validation RMSLE:{res} {red}{np.mean(val_rmse_scores):.4f}{res}\")\n\n    mean_val_scores = f'{np.mean(val_rmse_scores):.4f}'\n\n    results_df = pd.DataFrame({\n        'Fold': np.arange(1, n_splits+1),\n        'Train RMSLE': train_rmse_scores,\n        'Validation RMSLE': val_rmse_scores\n    })\n    \n    print(f\"\\n {blue}KFold Results{res}\")\n    print(results_df)\n\n    return mean_test_preds, mean_val_scores","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-04T07:50:56.711431Z","iopub.execute_input":"2024-12-04T07:50:56.711779Z","iopub.status.idle":"2024-12-04T07:50:56.73416Z","shell.execute_reply.started":"2024-12-04T07:50:56.711747Z","shell.execute_reply":"2024-12-04T07:50:56.732637Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"params_v1 = {'n_estimators':200}\n\nmod_pred = model_train(params_v1, test_enc_df, model_name=MODEL,e_stop=E_STOP)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-04T07:50:56.735424Z","iopub.execute_input":"2024-12-04T07:50:56.735913Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"params_v2 = {\n    'bagging_fraction': 0.95,\n    'feature_fraction': 0.75, \n    'learning_rate': 0.087, \n    'min_data_in_leaf': 95,\n    'min_child_weight': 1, \n    'scale_pos_weight': 4,\n    'bagging_freq': 1,\n    'n_estimators':200,\n    'num_leaves': 85, \n    'max_depth': 15, \n    'max_bin': 305, \n}\n\n","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"mod_pred_1 = model_train(params_v2, test_enc_df, model_name=MODEL,e_stop=E_STOP)","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"test_pred = mod_pred[0]\ntest_pred_1 = mod_pred_1[0] ","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"submission_df[TARGET] = test_pred*0.5 + test_pred_1*0.5\n\nsubmission_df.to_csv('submission.csv', index = False)\nsubmission_df.head()","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}