{"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":30786,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n\n# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2024-12-20T16:13:06.969924Z","iopub.execute_input":"2024-12-20T16:13:06.970415Z","iopub.status.idle":"2024-12-20T16:13:08.173184Z","shell.execute_reply.started":"2024-12-20T16:13:06.970379Z","shell.execute_reply":"2024-12-20T16:13:08.171757Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"### TESTING WITH H2O AUTOML","metadata":{}},{"cell_type":"code","source":"import h2o\nfrom h2o.automl import H2OAutoML\nimport numpy as np\nfrom sklearn.metrics import mean_squared_log_error\nimport pandas as pd\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nfrom scipy.stats import skew, boxcox\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.linear_model import LinearRegression\nfrom sklearn.metrics import mean_squared_error","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T01:27:19.041952Z","iopub.execute_input":"2024-12-21T01:27:19.042433Z","iopub.status.idle":"2024-12-21T01:27:19.050196Z","shell.execute_reply.started":"2024-12-21T01:27:19.042394Z","shell.execute_reply":"2024-12-21T01:27:19.048615Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train = pd.read_csv('/kaggle/input/playground-series-s4e12/train.csv')\ntest = pd.read_csv('/kaggle/input/playground-series-s4e12/test.csv')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T01:27:19.412496Z","iopub.execute_input":"2024-12-21T01:27:19.412905Z","iopub.status.idle":"2024-12-21T01:27:27.773247Z","shell.execute_reply.started":"2024-12-21T01:27:19.412872Z","shell.execute_reply":"2024-12-21T01:27:27.772041Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"sns.histplot(train['Premium Amount'], kde=True, bins=30)\nplt.title(\"Distribuição da variável alvo antes da transformação\")\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T01:27:27.775737Z","iopub.execute_input":"2024-12-21T01:27:27.776191Z","iopub.status.idle":"2024-12-21T01:27:33.440824Z","shell.execute_reply.started":"2024-12-21T01:27:27.776142Z","shell.execute_reply":"2024-12-21T01:27:33.439504Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from scipy.stats import skew\n\nskewness = skew(train['Premium Amount'])\nprint(f\"Coeficiente de skewness: {skewness}\")\n\n# Valores típicos:\n# - Entre -0.5 e 0.5: aproximadamente simétrica\n# - Entre 0.5 e 1 ou -0.5 e -1: levemente enviesada\n# - Maior que 1 ou menor que -1: altamente enviesada","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T01:27:33.442672Z","iopub.execute_input":"2024-12-21T01:27:33.443152Z","iopub.status.idle":"2024-12-21T01:27:33.47221Z","shell.execute_reply.started":"2024-12-21T01:27:33.443104Z","shell.execute_reply":"2024-12-21T01:27:33.470895Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train['Premium Amount'], lambda_boxcox = boxcox(train['Premium Amount'] + 1)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T01:27:33.474795Z","iopub.execute_input":"2024-12-21T01:27:33.47515Z","iopub.status.idle":"2024-12-21T01:27:40.143065Z","shell.execute_reply.started":"2024-12-21T01:27:33.475116Z","shell.execute_reply":"2024-12-21T01:27:40.141952Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"print(\"Tamanho de test_processed:\", len(test))\nprint(\"Tamanho de test_predictions:\", len(train))\nprint(\"Tamanho do DataFrame de submissão:\", len(submission))","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T01:27:40.144408Z","iopub.execute_input":"2024-12-21T01:27:40.144755Z","iopub.status.idle":"2024-12-21T01:27:40.151659Z","shell.execute_reply.started":"2024-12-21T01:27:40.144721Z","shell.execute_reply":"2024-12-21T01:27:40.150271Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Visualizar a nova distribuição\nsns.histplot(train['Premium Amount'], kde=True, bins=30)\nplt.title(\"Distribuição da variável alvo após a transformação\")\nplt.show()\n\n# Verificar o novo coeficiente de skewness\nnew_skewness = skew(train['Premium Amount'])\nprint(f\"Novo coeficiente de skewness: {new_skewness}\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T01:27:40.153342Z","iopub.execute_input":"2024-12-21T01:27:40.153741Z","iopub.status.idle":"2024-12-21T01:27:45.701332Z","shell.execute_reply.started":"2024-12-21T01:27:40.153706Z","shell.execute_reply":"2024-12-21T01:27:45.699734Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"unique_summary = pd.DataFrame({\n    'Coluna': train.columns,\n    'Num Valores Únicos': [train[col].nunique() for col in train.columns],\n    'Valores Únicos': [train[col].unique() for col in train.columns]\n})\n\nunique_summary","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T01:27:50.995436Z","iopub.execute_input":"2024-12-21T01:27:50.995918Z","iopub.status.idle":"2024-12-21T01:27:53.3696Z","shell.execute_reply.started":"2024-12-21T01:27:50.995879Z","shell.execute_reply":"2024-12-21T01:27:53.368124Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train = train.drop('id', axis=1)\ntest = test.drop('id', axis=1)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T01:27:56.014599Z","iopub.execute_input":"2024-12-21T01:27:56.016009Z","iopub.status.idle":"2024-12-21T01:27:56.463955Z","shell.execute_reply.started":"2024-12-21T01:27:56.015952Z","shell.execute_reply":"2024-12-21T01:27:56.462666Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Check for null values ​​and handle according to data type\ndef handling_null_values(df):\n    for col in df.columns:\n        if df[col].isnull().sum() > 0:  # Check for null values\n            if df[col].dtype == 'float64':\n                # For float64 columns, assign the average\n                df[col].fillna(df[col].mean(), inplace=True)\n            elif df[col].dtype == 'int64':\n                # For int64 columns, assign the mode\n                df[col].fillna(df[col].mode()[0], inplace=True)\n            else:\n                # For categorical columns (object or category), assign the mode\n                df[col].fillna(df[col].mode()[0], inplace=True)\n    return df","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T01:27:58.924389Z","iopub.execute_input":"2024-12-21T01:27:58.925238Z","iopub.status.idle":"2024-12-21T01:27:58.933206Z","shell.execute_reply.started":"2024-12-21T01:27:58.925198Z","shell.execute_reply":"2024-12-21T01:27:58.931609Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Tratar valores nulos\ntrain = handling_null_values(train)\ntest = handling_null_values(test)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T01:28:01.911073Z","iopub.execute_input":"2024-12-21T01:28:01.911557Z","iopub.status.idle":"2024-12-21T01:28:03.895514Z","shell.execute_reply.started":"2024-12-21T01:28:01.91151Z","shell.execute_reply":"2024-12-21T01:28:03.894238Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def transform_int(df):\n    df['Age'] = df['Age'].astype('int')\n    df['Number of Dependents'] = df['Number of Dependents'].astype('int')\n    df['Previous Claims'] = df['Previous Claims'].astype('int')\n    df['Vehicle Age'] = df['Vehicle Age'].astype('int')\n    df['Insurance Duration'] = df['Insurance Duration'].astype('int')\n\n    return df","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T01:28:05.299212Z","iopub.execute_input":"2024-12-21T01:28:05.299715Z","iopub.status.idle":"2024-12-21T01:28:05.306953Z","shell.execute_reply.started":"2024-12-21T01:28:05.299663Z","shell.execute_reply":"2024-12-21T01:28:05.305457Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train = transform_int(train)\n#X_valid = transform_int(X_valid)\ntest = transform_int(test)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T01:28:08.813813Z","iopub.execute_input":"2024-12-21T01:28:08.814215Z","iopub.status.idle":"2024-12-21T01:28:08.877823Z","shell.execute_reply.started":"2024-12-21T01:28:08.81418Z","shell.execute_reply":"2024-12-21T01:28:08.876605Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train.info()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-20T16:13:47.744214Z","iopub.execute_input":"2024-12-20T16:13:47.744522Z","iopub.status.idle":"2024-12-20T16:13:48.414195Z","shell.execute_reply.started":"2024-12-20T16:13:47.744492Z","shell.execute_reply":"2024-12-20T16:13:48.413058Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Criar novas features a partir de variáveis existentes\ndef new_features(df):\n    df['Income_per_dependents'] = df['Annual Income'] / (df['Number of Dependents'] + 1)\n    df['Health_vs_Credit'] = df['Health Score'] / df['Credit Score']\n\n    return df","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T01:28:14.877788Z","iopub.execute_input":"2024-12-21T01:28:14.878182Z","iopub.status.idle":"2024-12-21T01:28:14.88486Z","shell.execute_reply.started":"2024-12-21T01:28:14.878147Z","shell.execute_reply":"2024-12-21T01:28:14.883538Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train = new_features(train)\ntest = new_features(test)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T01:28:20.448904Z","iopub.execute_input":"2024-12-21T01:28:20.449362Z","iopub.status.idle":"2024-12-21T01:28:20.48786Z","shell.execute_reply.started":"2024-12-21T01:28:20.449318Z","shell.execute_reply":"2024-12-21T01:28:20.486669Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Selecionar as colunas numéricas\nnum_cols = train.select_dtypes(include=['float64', 'int64']).columns","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T01:28:22.586677Z","iopub.execute_input":"2024-12-21T01:28:22.588061Z","iopub.status.idle":"2024-12-21T01:28:22.767869Z","shell.execute_reply.started":"2024-12-21T01:28:22.588014Z","shell.execute_reply":"2024-12-21T01:28:22.766689Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Criar histogramas para todas as colunas numéricas\ntrain[num_cols].hist(bins=30, figsize=(15, 10), color='skyblue', edgecolor='black')\nplt.tight_layout()\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T01:28:25.899365Z","iopub.execute_input":"2024-12-21T01:28:25.899822Z","iopub.status.idle":"2024-12-21T01:28:28.915431Z","shell.execute_reply.started":"2024-12-21T01:28:25.899779Z","shell.execute_reply":"2024-12-21T01:28:28.913948Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Selecionar as colunas numéricas\nnum_cols = test.select_dtypes(include=['float64', 'int64']).columns","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T01:28:32.079144Z","iopub.execute_input":"2024-12-21T01:28:32.079526Z","iopub.status.idle":"2024-12-21T01:28:32.137006Z","shell.execute_reply.started":"2024-12-21T01:28:32.079494Z","shell.execute_reply":"2024-12-21T01:28:32.135746Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Criar histogramas para todas as colunas numéricas\ntest[num_cols].hist(bins=30, figsize=(15, 10), color='skyblue', edgecolor='black')\nplt.tight_layout()\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T01:28:34.371027Z","iopub.execute_input":"2024-12-21T01:28:34.371398Z","iopub.status.idle":"2024-12-21T01:28:37.22001Z","shell.execute_reply.started":"2024-12-21T01:28:34.371367Z","shell.execute_reply":"2024-12-21T01:28:37.218589Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Função para remover outliers\n#def remove_outliers(df):\n #   num_cols = df.select_dtypes(include=['float64', 'int64']).columns\n  #  for col in num_cols:\n   #     Q1 = df[col].quantile(0.25)\n    #    Q3 = df[col].quantile(0.75)\n     #   IQR = Q3 - Q1\n      #  lower_bound = Q1 - 1.5 * IQR\n       # upper_bound = Q3 + 1.5 * IQR\n       # df = df[(df[col] >= lower_bound) & (df[col] <= upper_bound)]\n    #return df","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-20T16:13:54.814275Z","iopub.execute_input":"2024-12-20T16:13:54.814823Z","iopub.status.idle":"2024-12-20T16:13:54.823052Z","shell.execute_reply.started":"2024-12-20T16:13:54.814772Z","shell.execute_reply":"2024-12-20T16:13:54.821585Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Remover outliers no conjunto de treino e validação\n#train = remove_outliers(train)\n#test = remove_outliers(test)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-20T16:13:54.824439Z","iopub.execute_input":"2024-12-20T16:13:54.824826Z","iopub.status.idle":"2024-12-20T16:13:59.969575Z","shell.execute_reply.started":"2024-12-20T16:13:54.824792Z","shell.execute_reply":"2024-12-20T16:13:59.968397Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from sklearn.preprocessing import LabelEncoder\n\ndef encode_binary_columns(df):\n    \"\"\"\n    Transforma colunas do tipo object em category, aplica LabelEncoder nas colunas binárias, \n    e converte colunas de datas para o tipo datetime em um DataFrame.\n\n    Parâmetros:\n        df (pd.DataFrame): O DataFrame contendo as colunas a serem transformadas e codificadas.\n\n    Retorna:\n        pd.DataFrame: O DataFrame com as colunas do tipo object transformadas em category, colunas binárias codificadas, \n        e colunas de datas convertidas para datetime.\n    \"\"\"\n    # Converter colunas do tipo object para category\n    object_cols = df.select_dtypes(include=['object']).columns\n    df[object_cols] = df[object_cols].astype('category')\n\n    # Identificar colunas binárias\n    binary_cols = [col for col in df.columns if df[col].nunique() == 2]\n\n    # Criar uma cópia do DataFrame para não alterar o original\n    df_encoded = df.copy()\n\n    # Instanciar o LabelEncoder\n    encoder = LabelEncoder()\n\n    # Aplicar o LabelEncoder nas colunas binárias\n    for col in binary_cols:\n        df_encoded[col] = encoder.fit_transform(df_encoded[col])\n\n    # Converter colunas de datas para datetime\n    date_cols = [col for col in df.columns if 'date' in col.lower()]\n    for col in date_cols:\n        df_encoded[col] = pd.to_datetime(df_encoded[col], errors='coerce')\n\n    return df_encoded","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T01:28:40.018464Z","iopub.execute_input":"2024-12-21T01:28:40.019241Z","iopub.status.idle":"2024-12-21T01:28:40.027667Z","shell.execute_reply.started":"2024-12-21T01:28:40.019203Z","shell.execute_reply":"2024-12-21T01:28:40.026425Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train = encode_binary_columns(train)\ntest = encode_binary_columns(test)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T01:28:44.236765Z","iopub.execute_input":"2024-12-21T01:28:44.237147Z","iopub.status.idle":"2024-12-21T01:28:50.303866Z","shell.execute_reply.started":"2024-12-21T01:28:44.237116Z","shell.execute_reply":"2024-12-21T01:28:50.302381Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"unique_summary = pd.DataFrame({\n    'Coluna': train.columns,\n    'Num Valores Únicos': [train[col].nunique() for col in train.columns],\n    'Valores Únicos': [train[col].unique() for col in train.columns]\n})\n\nunique_summary","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T01:28:50.305948Z","iopub.execute_input":"2024-12-21T01:28:50.306318Z","iopub.status.idle":"2024-12-21T01:28:52.166233Z","shell.execute_reply.started":"2024-12-21T01:28:50.306284Z","shell.execute_reply":"2024-12-21T01:28:52.164922Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train.info()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T01:28:52.168155Z","iopub.execute_input":"2024-12-21T01:28:52.168668Z","iopub.status.idle":"2024-12-21T01:28:52.22617Z","shell.execute_reply.started":"2024-12-21T01:28:52.168591Z","shell.execute_reply":"2024-12-21T01:28:52.224747Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Dividir o conjunto de dados em treino e validação (antes da remoção de outliers)\n#X_train, X_valid, y_train, y_valid = train_test_split(train.drop('Premium Amount', axis=1), \n #                                                     train['Premium Amount'], \n  #                                                    test_size=0.2, \n   #                                                   random_state=42)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-20T16:14:07.232151Z","iopub.execute_input":"2024-12-20T16:14:07.232479Z","iopub.status.idle":"2024-12-20T16:14:07.529559Z","shell.execute_reply.started":"2024-12-20T16:14:07.232446Z","shell.execute_reply":"2024-12-20T16:14:07.528409Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"### TESTING WITH H2O AUTOML","metadata":{}},{"cell_type":"code","source":"h2o.init()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-13T15:44:08.723951Z","iopub.execute_input":"2024-12-13T15:44:08.724348Z","iopub.status.idle":"2024-12-13T15:44:15.763497Z","shell.execute_reply.started":"2024-12-13T15:44:08.724314Z","shell.execute_reply":"2024-12-13T15:44:15.762005Z"},"collapsed":true,"jupyter":{"outputs_hidden":true}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Preparar dados para o H2O\n#train_h2o = h2o.H2OFrame(pd.concat([X_train, y_train], axis=1))\ntrain_h2o = h2o.H2OFrame(train)\ntest_h2o = h2o.H2OFrame(test)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-13T15:44:15.766116Z","iopub.execute_input":"2024-12-13T15:44:15.766648Z","iopub.status.idle":"2024-12-13T15:45:02.048431Z","shell.execute_reply.started":"2024-12-13T15:44:15.766592Z","shell.execute_reply":"2024-12-13T15:45:02.047139Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_h2o.describe()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-13T15:45:02.050934Z","iopub.execute_input":"2024-12-13T15:45:02.051456Z","iopub.status.idle":"2024-12-13T15:45:02.080064Z","shell.execute_reply.started":"2024-12-13T15:45:02.051404Z","shell.execute_reply":"2024-12-13T15:45:02.078806Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"#def process_dates(h2o_df, date_column):\n #   h2o_df['Year'] = h2o_df[date_column].year().asfactor()\n #   h2o_df['Month'] = h2o_df[date_column].month().asfactor()\n #   h2o_df['Day'] = h2o_df[date_column].day().asfactor()\n #   h2o_df['Day_of_week'] = h2o_df[date_column].dayOfWeek().asfactor()\n #   return h2o_df","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Apply the function to process dates\n#train_h2o = process_dates(train_h2o, 'Policy Start Date')\n#test_h2o = process_dates(test_h2o, 'Policy Start Date')\n\n# Check column types after processing\n#print(train_h2o.types)","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Identificar variáveis\ntarget = \"Premium Amount\"\npredictors = [col for col in train_h2o.columns if col != target]","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-13T15:45:02.081621Z","iopub.execute_input":"2024-12-13T15:45:02.082022Z","iopub.status.idle":"2024-12-13T15:45:02.087998Z","shell.execute_reply.started":"2024-12-13T15:45:02.081986Z","shell.execute_reply":"2024-12-13T15:45:02.086409Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"aml = H2OAutoML(nfolds=5, sort_metric = \"rmsle\", seed=42, max_runtime_secs=3600,\n                   stopping_metric=\"rmsle\")\naml.train(x=predictors, y=target, training_frame=train_h2o)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-13T15:49:36.134418Z","iopub.execute_input":"2024-12-13T15:49:36.134984Z","iopub.status.idle":"2024-12-13T16:49:40.804147Z","shell.execute_reply.started":"2024-12-13T15:49:36.134943Z","shell.execute_reply":"2024-12-13T16:49:40.802904Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"print(aml.leaderboard)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-13T16:51:56.651895Z","iopub.execute_input":"2024-12-13T16:51:56.652422Z","iopub.status.idle":"2024-12-13T16:51:56.66961Z","shell.execute_reply.started":"2024-12-13T16:51:56.652378Z","shell.execute_reply":"2024-12-13T16:51:56.668142Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"leader_model = aml.leader\nprint(leader_model)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-13T16:52:09.884519Z","iopub.execute_input":"2024-12-13T16:52:09.884919Z","iopub.status.idle":"2024-12-13T16:52:09.910296Z","shell.execute_reply.started":"2024-12-13T16:52:09.884885Z","shell.execute_reply":"2024-12-13T16:52:09.908953Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"predictions = aml.leader.predict(test_h2o)\npredictions = predictions.as_data_frame()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-13T16:52:21.017994Z","iopub.execute_input":"2024-12-13T16:52:21.018468Z","iopub.status.idle":"2024-12-13T16:52:22.959839Z","shell.execute_reply.started":"2024-12-13T16:52:21.01835Z","shell.execute_reply":"2024-12-13T16:52:22.958737Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from scipy.special import inv_boxcox\n\npredictions['Premium Amount'] = inv_boxcox(predictions['predict'] + 1, lambda_boxcox)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-13T16:52:28.500017Z","iopub.execute_input":"2024-12-13T16:52:28.500431Z","iopub.status.idle":"2024-12-13T16:52:28.532699Z","shell.execute_reply.started":"2024-12-13T16:52:28.500399Z","shell.execute_reply":"2024-12-13T16:52:28.531474Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"#best_h2o_model = automl.leader","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Previsões no conjunto de treino\n#val_predictions = best_h2o_model.predict(train).as_data_frame()['predict']\n\n# Extração dos valores reais do conjunto de treino\n#y_real = train[y].as_data_frame()[y]\n\n# Cálculo do RMSLE\n#rmsle = np.sqrt(mean_squared_log_error(y_real, val_predictions))\n#print(f\"H2O AutoML RMSLE: {rmsle}\")","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"#test_predictions = best_h2o_model.predict(test).as_data_frame()","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Extrair as previsões para a variável Premium Amount\n#test_predictions = predictions['predict']","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"submission = pd.read_csv('/kaggle/input/playground-series-s4e12/sample_submission.csv')\nsubmission['Premium Amount'] = predictions['Premium Amount']\nsubmission.to_csv(\"submission.csv\",index = False)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-13T16:52:33.790376Z","iopub.execute_input":"2024-12-13T16:52:33.790796Z","iopub.status.idle":"2024-12-13T16:52:35.665541Z","shell.execute_reply.started":"2024-12-13T16:52:33.790761Z","shell.execute_reply":"2024-12-13T16:52:35.664388Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"h2o.shutdown(prompt=False)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-13T16:52:38.343082Z","iopub.execute_input":"2024-12-13T16:52:38.34429Z","iopub.status.idle":"2024-12-13T16:52:38.374672Z","shell.execute_reply.started":"2024-12-13T16:52:38.344243Z","shell.execute_reply":"2024-12-13T16:52:38.373635Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"### TESTING WITH CATBOOST","metadata":{}},{"cell_type":"code","source":"#train = pd.read_csv('/kaggle/input/playground-series-s4e12/train.csv')\n#test = pd.read_csv('/kaggle/input/playground-series-s4e12/test.csv')\n#train.drop('id', axis=1, inplace=True)\n#test.drop('id', axis=1, inplace=True)","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from sklearn.model_selection import train_test_split, cross_val_score\nfrom sklearn.preprocessing import LabelEncoder\nfrom xgboost import XGBRegressor\nfrom sklearn.metrics import mean_squared_error, r2_score\nfrom category_encoders import TargetEncoder\n\nfrom sklearn.preprocessing import PowerTransformer\nfrom sklearn.metrics import make_scorer, mean_squared_log_error\nfrom catboost import CatBoostRegressor\nfrom lightgbm import LGBMRegressor","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T01:29:10.325477Z","iopub.execute_input":"2024-12-21T01:29:10.326441Z","iopub.status.idle":"2024-12-21T01:29:10.332364Z","shell.execute_reply.started":"2024-12-21T01:29:10.326401Z","shell.execute_reply":"2024-12-21T01:29:10.331214Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Tratamento de dados faltantes\ndef prepare_data(df, y=None, is_train=True, target_encoder=None):\n    # Preenchimento de valores numéricos\n    numeric_columns = df.select_dtypes(include=['float64', 'int64']).columns\n    for col in numeric_columns:\n        df[col] = df[col].fillna(df[col].mean())\n\n    # Converter Policy Start Date (se existir)\n    if 'Policy Start Date' in df.columns:\n        df['Policy Start Date'] = pd.to_datetime(df['Policy Start Date'])\n        df['Policy_Year'] = df['Policy Start Date'].dt.year\n        df['Policy_Month'] = df['Policy Start Date'].dt.month\n        df['Policy_Month'] = df['Policy Start Date'].dt.weekday\n        df.drop('Policy Start Date', axis=1, inplace=True)\n    \n    # Preenchimento de valores categóricos\n    categorical_columns = df.select_dtypes(include=['object']).columns\n    for col in categorical_columns:\n        df[col] = df[col].fillna(df[col].mode()[0])\n\n    # Manter colunas categóricas como tipo category\n    for col in categorical_columns:\n        df[col] = df[col].astype('category')\n    \n    return df","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T01:29:18.907071Z","iopub.execute_input":"2024-12-21T01:29:18.907452Z","iopub.status.idle":"2024-12-21T01:29:18.91707Z","shell.execute_reply.started":"2024-12-21T01:29:18.907419Z","shell.execute_reply":"2024-12-21T01:29:18.915744Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Preparar os dados\ntrain_processed = prepare_data(train.copy())\ntest_processed = prepare_data(test.copy())","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T01:29:19.436604Z","iopub.execute_input":"2024-12-21T01:29:19.43708Z","iopub.status.idle":"2024-12-21T01:29:20.483866Z","shell.execute_reply.started":"2024-12-21T01:29:19.437043Z","shell.execute_reply":"2024-12-21T01:29:20.482424Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Dividir o conjunto de dados em treino e validação (antes da remoção de outliers)\nX_train, X_valid, y_train, y_valid = train_test_split(train_processed.drop('Premium Amount', axis=1), \n                                                      train_processed['Premium Amount'], \n                                                      test_size=0.2, \n                                                      random_state=42)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T01:29:20.519182Z","iopub.execute_input":"2024-12-21T01:29:20.519667Z","iopub.status.idle":"2024-12-21T01:29:21.168856Z","shell.execute_reply.started":"2024-12-21T01:29:20.519593Z","shell.execute_reply":"2024-12-21T01:29:21.16751Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"#def prepare_data(df):\n    # Tratamento de valores ausentes\n #   numeric_columns = df.select_dtypes(include=['float64', 'int64']).columns\n  #  for col in numeric_columns:\n   #     df[col].fillna(df[col].mean(), inplace=True)\n    \n  #  categorical_columns = df.select_dtypes(include=['object']).columns\n  #  for col in categorical_columns:\n  #      df[col].fillna(df[col].mode()[0], inplace=True)\n    \n    # Conversão de Policy Start Date\n  #  df['Policy Start Date'] = pd.to_datetime(df['Policy Start Date'])\n  #  df['Policy_Year'] = df['Policy Start Date'].dt.year\n  #  df['Policy_Month'] = df['Policy Start Date'].dt.month\n  #  df.drop('Policy Start Date', axis=1, inplace=True)\n    \n    # Manter colunas categóricas como tipo category\n  #  for col in df.select_dtypes(include=['object']).columns:\n  #      df[col] = df[col].astype('category')\n    \n  #  return df","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Transformação Box-Cox na variável alvo\n#pt = PowerTransformer(method='box-cox', standardize=True)\n|#y = pt.fit_transform(y.values.reshape(-1, 1)).flatten()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-18T15:07:39.18896Z","iopub.execute_input":"2024-12-18T15:07:39.189405Z","iopub.status.idle":"2024-12-18T15:07:44.02132Z","shell.execute_reply.started":"2024-12-18T15:07:39.189368Z","shell.execute_reply":"2024-12-18T15:07:44.019725Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Divisão entre treino e validação\n#X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-18T15:07:44.023536Z","iopub.execute_input":"2024-12-18T15:07:44.024058Z","iopub.status.idle":"2024-12-18T15:07:44.530889Z","shell.execute_reply.started":"2024-12-18T15:07:44.024005Z","shell.execute_reply":"2024-12-18T15:07:44.529589Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Preparar os dados\n#train_processed = prepare_data(train.copy())\n#test_processed = prepare_data(test.copy())","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Separar features e target\n#X = train_processed.drop('Premium Amount', axis=1)\n#y = train_processed['Premium Amount']","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Dividir dados em treino e validação\n#X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42)","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"cat_features = ['Gender', 'Marital Status', 'Education Level', 'Occupation', 'Policy Type', 'Location',\n                'Customer Feedback', 'Smoking Status', 'Exercise Frequency', 'Property Type']\n\n# 3. Modelagem\n#models = {\n #   'CatBoost': CatBoostRegressor(verbose=0, cat_features=cat_features, random_state=42),\n  #  'LightGBM': LGBMRegressor(random_state=42),\n   # 'XGBoost': XGBRegressor(random_state=42)\n#}","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T01:29:25.351599Z","iopub.execute_input":"2024-12-21T01:29:25.352055Z","iopub.status.idle":"2024-12-21T01:29:25.358007Z","shell.execute_reply.started":"2024-12-21T01:29:25.352017Z","shell.execute_reply":"2024-12-21T01:29:25.356673Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Avaliação de modelos\n#rmsle_scorer = make_scorer(lambda y_true, y_pred: np.sqrt(mean_squared_log_error(np.expm1(y_true), np.expm1(y_pred))), greater_is_better=False)\n\n#results = {}\n#for name, model in models.items():\n #   scores = cross_val_score(model, X_train, y_train, cv=5, scoring=rmsle_scorer)\n  #  results[name] = -np.mean(scores)\n   # print(f\"{name} RMSLE: {-np.mean(scores):.5f}\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-18T16:50:00.118433Z","iopub.execute_input":"2024-12-18T16:50:00.11886Z","iopub.status.idle":"2024-12-18T16:50:00.123802Z","shell.execute_reply.started":"2024-12-18T16:50:00.118822Z","shell.execute_reply":"2024-12-18T16:50:00.122635Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Escolher o melhor modelo\n#best_model_name = min(results, key=results.get)\n#print(f\"Best Model: {best_model_name}\")","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Treinar modelo final e prever no conjunto de teste\n#best_model = models[best_model_name]\n#best_model.fit(X, y_transformed)","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Previsão e inversão da transformação\n#preds = pt.inverse_transform(best_model.predict(test).reshape(-1, 1)).flatten()\n\n# 4. Geração de submissão\n#submission = sample_submission.copy()\n#submission['Premium Amount'] = preds\n#submission.to_csv('submission.csv', index=False)\n#print(\"Submissão gerada: submission.csv\")","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from catboost import CatBoostRegressor\n\ndef objective(trial):\n    param = {\n        'iterations': trial.suggest_int('iterations', 100, 1000),\n        'depth': trial.suggest_int('depth', 4, 12),\n        'learning_rate': trial.suggest_float('learning_rate', 0.001, 0.2, log=True),\n        'l2_leaf_reg': trial.suggest_float('l2_leaf_reg', 1e-8, 10.0, log=True),\n        'bagging_temperature': trial.suggest_float('bagging_temperature', 0.0, 1.0),\n        'random_strength': trial.suggest_float('random_strength', 1e-8, 10.0, log=True),\n        'min_data_in_leaf': trial.suggest_int('min_data_in_leaf', 1, 50),\n        'rsm': trial.suggest_float('rsm', 0.1, 1.0),\n        'random_seed': 42,\n        'verbose': False\n    }\n    \n    model = CatBoostRegressor(**param)\n    \n    model.fit(\n        X_train,\n        y_train,\n        eval_set=(X_valid, y_valid),\n        early_stopping_rounds=50,\n        verbose=False,\n        cat_features = cat_features\n    )\n    \n    y_pred = model.predict(X_valid)\n    rmse = np.sqrt(mean_squared_error(y_valid, y_pred))\n    \n    return rmse","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-20T16:14:24.121261Z","iopub.execute_input":"2024-12-20T16:14:24.121761Z","iopub.status.idle":"2024-12-20T16:14:24.13128Z","shell.execute_reply.started":"2024-12-20T16:14:24.12172Z","shell.execute_reply":"2024-12-20T16:14:24.129707Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import optuna\n\n# Criar estudo Optuna\nstudy = optuna.create_study(direction='minimize')\nstudy.optimize(objective, n_trials=50)\n\nprint(\"Melhores hiperparâmetros encontrados: \", study.best_params)\nprint(\"Melhor valor RMSE: \", study.best_value)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-20T16:14:26.334715Z","iopub.execute_input":"2024-12-20T16:14:26.335129Z","iopub.status.idle":"2024-12-21T00:18:32.308323Z","shell.execute_reply.started":"2024-12-20T16:14:26.33509Z","shell.execute_reply":"2024-12-21T00:18:32.306944Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"best_params = {\n    'iterations': 956,\n    'depth': 10,\n    'learning_rate': 0.021047432914101306,\n    'l2_leaf_reg': 1.149775408611266,\n    'bagging_temperature': 0.6614209945981254,\n    'random_strength': 0.0009009848770232129,\n    'min_data_in_leaf': 39,\n    'rsm': 0.9492323659969997,\n}","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T01:31:24.972616Z","iopub.execute_input":"2024-12-21T01:31:24.973112Z","iopub.status.idle":"2024-12-21T01:31:24.979726Z","shell.execute_reply.started":"2024-12-21T01:31:24.973075Z","shell.execute_reply":"2024-12-21T01:31:24.978463Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"cat_features = ['Gender', 'Marital Status', 'Education Level', 'Occupation', 'Policy Type', 'Location',\n                'Customer Feedback', 'Smoking Status', 'Exercise Frequency', 'Property Type']\n\n\n# Treinar modelo final com os melhores parâmetros\nbest_model = CatBoostRegressor(**study.best_params)\nbest_model.fit(\n    X_train, \n    y_train,\n    eval_set=[(X_valid, y_valid)],\n    early_stopping_rounds=50,\n    verbose=100,\n    cat_features = cat_features\n)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T01:31:58.018077Z","iopub.execute_input":"2024-12-21T01:31:58.018509Z","iopub.status.idle":"2024-12-21T01:58:47.587885Z","shell.execute_reply.started":"2024-12-21T01:31:58.01847Z","shell.execute_reply":"2024-12-21T01:58:47.58682Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Fazer previsões finais\ny_pred = best_model.predict(X_valid)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T02:10:00.547542Z","iopub.execute_input":"2024-12-21T02:10:00.548041Z","iopub.status.idle":"2024-12-21T02:10:01.209837Z","shell.execute_reply.started":"2024-12-21T02:10:00.548005Z","shell.execute_reply":"2024-12-21T02:10:01.208792Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Avaliar o modelo final\nrmse = np.sqrt(mean_squared_error(y_valid, y_pred))\nr2 = r2_score(y_valid, y_pred)\n\n# Calcular RMSLE\ndef calculate_rmsle(y_true, y_pred):\n    # Garantir que não há valores negativos\n    y_true = np.clip(y_true, 0, None)\n    y_pred = np.clip(y_pred, 0, None)\n    # Calcular RMSLE\n    return np.sqrt(np.mean(np.power(np.log1p(y_pred) - np.log1p(y_true), 2)))\n\nrmsle = calculate_rmsle(y_valid, y_pred)\n\nprint(f'RMSE: {rmse:.2f}')\nprint(f'R2 Score: {r2:.4f}')\nprint(f'RMSLE: {rmsle:.4f}')\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T02:10:03.651201Z","iopub.execute_input":"2024-12-21T02:10:03.651562Z","iopub.status.idle":"2024-12-21T02:10:03.678729Z","shell.execute_reply.started":"2024-12-21T02:10:03.65153Z","shell.execute_reply":"2024-12-21T02:10:03.677602Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from scipy.special import inv_boxcox\n\n# Reverter previsões\ny_pred = inv_boxcox(y_pred, lambda_boxcox)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T02:10:17.532651Z","iopub.execute_input":"2024-12-21T02:10:17.533055Z","iopub.status.idle":"2024-12-21T02:10:17.546937Z","shell.execute_reply.started":"2024-12-21T02:10:17.533021Z","shell.execute_reply":"2024-12-21T02:10:17.545828Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from catboost import Pool\n\n# Criar Pool e fazer previsões\ntest_pool = Pool(data=test_processed, cat_features=cat_features)\ntest_predictions = best_model.predict(test_pool)\n\n# Garantir que as previsões estão dentro do intervalo esperado\ntest_predictions = np.clip(test_predictions, 200, 4999)\n\n# Criar o DataFrame de submissão\nsubmission = pd.read_csv('/kaggle/input/playground-series-s4e12/sample_submission.csv')\nsubmission['Premium Amount'] = test_predictions\n\n# Salvar o arquivo de submissão\nsubmission.to_csv(\"submission.csv\", index=False)\n\nprint(\"Arquivo de submissão gerado com sucesso!\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T02:11:28.778021Z","iopub.execute_input":"2024-12-21T02:11:28.778442Z","iopub.status.idle":"2024-12-21T02:11:32.078606Z","shell.execute_reply.started":"2024-12-21T02:11:28.778406Z","shell.execute_reply":"2024-12-21T02:11:32.0775Z"}},"outputs":[],"execution_count":null}]}