{"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":"gpu","dataSources":[{"sourceId":84896,"databundleVersionId":10305135,"sourceType":"competition"}],"dockerImageVersionId":30805,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import polars as pl # data processing, CSV file I/O (e.g. pd.read_csv)\npl.Config.set_tbl_cols(20)\npl.Config.set_tbl_rows(30)\nimport pandas as pd\nimport numpy as np\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2024-12-16T09:00:42.930607Z","iopub.execute_input":"2024-12-16T09:00:42.931174Z","iopub.status.idle":"2024-12-16T09:00:44.196976Z","shell.execute_reply.started":"2024-12-16T09:00:42.931134Z","shell.execute_reply":"2024-12-16T09:00:44.195868Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_df =pd.read_csv('/kaggle/input/playground-series-s4e12/train.csv',index_col=0)\ntest_df = pd.read_csv('/kaggle/input/playground-series-s4e12/test.csv',index_col=0)\nsample_df = pd.read_csv('/kaggle/input/playground-series-s4e12/sample_submission.csv')\n# train_df.drop('id', axis=1, inplace=True)\n# test_df.drop('id', axis=1, inplace=True) \n\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    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\n    \ntrain_df = date(train_df)\ntest_df = date(test_df)\n\ncat_c = [col for col in train_df.columns if train_df[col].dtype == 'object']\n\ndef update(df):\n    \n    global cat_c\n\n    for c in cat_c:\n        df[c] = df[c].fillna('None').astype('object')\n                \n    return df\n\ntrain_df = update(train_df)\ntest_df = update(test_df)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-16T09:05:24.226037Z","iopub.execute_input":"2024-12-16T09:05:24.226563Z","iopub.status.idle":"2024-12-16T09:05:33.890465Z","shell.execute_reply.started":"2024-12-16T09:05:24.226524Z","shell.execute_reply":"2024-12-16T09:05:33.889478Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"numerical_vars = ['Age', 'Annual Income', 'Health Score',\n                  'Previous Claims', 'Vehicle Age', 'Credit Score',\n                  'Insurance Duration', 'Premium Amount']\ndef feature_changer(df):\n\n    global numerical_vars\n    vars = numerical_vars.copy()\n\n    vars = [var for var in vars if var not in ['Health Score', 'Previous Claims']]\n    if 'Premium Amount' in vars:\n      vars.remove('Premium Amount')\n\n\n    # Counter for missing values per row\n    df['MissingValuesCount'] = df.isna().sum(axis=1)\n    df['MissingHealth'] = df['Health Score'].isna().astype(int)\n    # Number of days passed between last policy started and current policy\n    df['Policy Start Date'] = pd.to_datetime(df['Policy Start Date'])\n\n    df['Days Passed'] = (df['Policy Start Date'].max() - df['Policy Start Date']).dt.days\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\n    # Ratio of number of claims vs insurance duration\n    df['Claims v Duration'] = df['Previous Claims'] / df['Insurance Duration']\n    df['Health vs Claims'] = df['Health Score'] / df['Previous Claims']\n    df['Cat Credit Score'] = df['Credit Score'].copy()\n    df['Int Credit Score'] = df['Credit Score'].apply(lambda x: int(x) if pd.notna(x) else x)\n    vars+= ['Days Passed']\n    cats = [col for col in df.columns if col not in vars]\n\n    # Filling missing data\n    df['HealthScore'] = df['Health Score'].apply(lambda x: int(x) if pd.notna(x) else x)\n    #df[cats] = df[cats].fillna('None').astype('string')\n    #df[vars] = df[vars].fillna(0).astype(float)\n\n    df = df.drop([ 'Policy Start Date'], axis = 1)\n\n    return df\ntrain_df = feature_changer(train_df)\ntest_df = feature_changer(test_df)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-16T09:05:33.891693Z","iopub.execute_input":"2024-12-16T09:05:33.89206Z","iopub.status.idle":"2024-12-16T09:05:38.731364Z","shell.execute_reply.started":"2024-12-16T09:05:33.892022Z","shell.execute_reply":"2024-12-16T09:05:38.730393Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"pip install lightautoml","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-16T09:05:42.323177Z","iopub.execute_input":"2024-12-16T09:05:42.323529Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from lightautoml.automl.presets.tabular_presets import TabularAutoML\nfrom lightautoml.tasks import Task","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_df['Week']=train_df['Week'].astype('category')\ntrain_df.info()","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"categorical_columns = [col for col in train_df.select_dtypes(include=['object']).columns]\nfor col in categorical_columns:\n    train_df[col] = train_df[col].astype('str')\ntrain_df","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from sklearn.model_selection import train_test_split\nX_train, X_val = train_test_split(train_df, test_size=0.3, random_state=42, shuffle=True)\nX_train.reset_index(inplace=True)\nX_val.reset_index(inplace=True)\n# X_train.drop('index',axis=1,inplace=True)\n# X_val.drop('index',axis=1,inplace=True)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-04T02:45:58.280767Z","iopub.execute_input":"2024-12-04T02:45:58.281766Z","iopub.status.idle":"2024-12-04T02:45:59.187658Z","shell.execute_reply.started":"2024-12-04T02:45:58.281707Z","shell.execute_reply":"2024-12-04T02:45:59.186908Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"X_train = X_train.replace([np.inf, -np.inf], np.nan)\nX_train = X_train.fillna(np.nan)  # 或其他合适的填充方式\n\n# 确保所有分类变量都是字符串类型\ncategorical_columns = [col for col in X_train.select_dtypes(include=['object']).columns]\nfor col in categorical_columns:\n    X_train[col] = X_train[col].astype(str)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-04T02:50:44.497219Z","iopub.execute_input":"2024-12-04T02:50:44.497826Z","iopub.status.idle":"2024-12-04T02:50:48.94489Z","shell.execute_reply.started":"2024-12-04T02:50:44.49779Z","shell.execute_reply":"2024-12-04T02:50:48.943936Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"automl = TabularAutoML(\n    task = Task('binary'), \n    timeout = 600 * 3600,\n    cpu_limit = 5,\n    gpu_ids = '0',\n)\n\nout_of_fold_predictions = automl.fit_predict(\n    X_train, valid_data=X_val,\n    roles = {\n        'target': 'Premium Amount',\n        #'drop': ['id'],\n    }, \n    verbose = 4)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-04T02:50:58.566905Z","iopub.execute_input":"2024-12-04T02:50:58.567562Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"automl = TabularAutoML(\n    task = Task('binary'), \n    timeout = 600 * 3600,\n    cpu_limit = 5,\n    gpu_ids = '0',\n    general_params = {\"use_algos\": [['denselight']]},\n    nn_params = {\n        \"n_epochs\": 100, \n        \"bs\": 2, \n        \"num_workers\": 0, \n        \"path_to_save\": None, \n        \"freeze_defaults\": True,\n        \"cont_embedder\": 'plr',\n        'cat_embedder': 'weighted',\n        'act_fun': 'SiLU',\n        \"hidden_size\": [512, 256], #32,\n        'stop_by_metric': True,\n        'embedding_size': 64,\n        'verbose_bar': True,\n        \"snap_params\": { 'k': 2, 'early_stopping': True, 'patience': 1, 'swa': True }, \n        'opt_params': { 'lr': 0.0003 , 'weight_decay': 0 }\n    },\n    nn_pipeline_params = {\"use_qnt\": True, \"use_te\": False},\n    #reader_params = {'n_jobs': 12, 'cv': 5, 'random_state': 42, 'advanced_roles': True}\n)\n\nout_of_fold_predictions = automl.fit_predict(\n    X_train, valid_data=X_val,\n    roles = {\n        'target': 'Premium Amount',\n        'drop': ['id'],\n    }, \n    verbose = 4)","metadata":{"execution":{"iopub.status.busy":"2024-12-03T03:19:12.800148Z","iopub.execute_input":"2024-12-03T03:19:12.800728Z","iopub.status.idle":"2024-12-03T03:19:21.88021Z","shell.execute_reply.started":"2024-12-03T03:19:12.800675Z","shell.execute_reply":"2024-12-03T03:19:21.878743Z"}}},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}