{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.14","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":84896,"databundleVersionId":10305135,"sourceType":"competition"}],"dockerImageVersionId":30804,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import numpy as np \nimport pandas as pd \nfrom sklearn.metrics import mean_squared_log_error\nfrom sklearn.impute import SimpleImputer\nfrom sklearn.preprocessing import LabelEncoder\nfrom tqdm import tqdm \nfrom sklearn.model_selection import KFold\nimport optuna\nfrom sklearn.metrics import mean_squared_error\nfrom catboost import CatBoostRegressor\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input/playground-series-s4e12'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n\n","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"pip install skimpy","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from skimpy import skim","metadata":{"trusted":true},"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},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train.drop(columns = ['id'], inplace = True)\ntest.drop(columns = ['id'], inplace = True)","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train.duplicated().sum()","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"skim(train)","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train.dtypes","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train['Policy Start Date'] = pd.to_datetime(train['Policy Start Date'])\ntest['Policy Start Date'] = pd.to_datetime(test['Policy Start Date'])","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"cat_c = [col for col in train.columns if train[col].dtype == 'object']\n\nfor c in cat_c:\n    train[c] = train[c].fillna('missing').astype('category')\n    test[c] = test[c].fillna('missing').astype('category')","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"imputer = SimpleImputer(strategy = 'most_frequent')\ntrain['Previous Claims']= imputer.fit_transform(train[['Previous Claims']])\ntest['Previous Claims']= imputer.transform(test[['Previous Claims']])\ntrain['Vehicle Age']= imputer.fit_transform(train[['Vehicle Age']])\ntest['Vehicle Age']= imputer.transform(test[['Vehicle Age']])\ntrain['Insurance Duration']= imputer.fit_transform(train[['Insurance Duration']])\ntest['Insurance Duration']= imputer.transform(test[['Insurance Duration']])\ntrain['Number of Dependents']= imputer.fit_transform(train[['Number of Dependents']])\ntest['Number of Dependents']= imputer.transform(test[['Number of Dependents']])","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"assigning values based on the distribution\n","metadata":{}},{"cell_type":"code","source":"occupation_dist = train['Occupation'].value_counts(normalize=True)\ntrain['Occupation']= train['Occupation'].fillna(pd.Series(np.random.choice(occupation_dist.index,size = train['Occupation'].isna().sum(), p= occupation_dist.values),\n                                                index= train[train['Occupation'].isna()].index))\noccupation_dist1 = test['Occupation'].value_counts(normalize = True)\ntest['Occupation']= test['Occupation'].fillna(pd.Series(np.random.choice(occupation_dist1.index, size = test[\"Occupation\"].isna().sum(), p = occupation_dist1.values), \n                                                        index = test[test['Occupation'].isna()].index))\nmarital_dist = train['Marital Status'].value_counts(normalize = True)\ntrain['Marital Status']= train['Marital Status'].fillna(pd.Series(np.random.choice(marital_dist.index, size =train['Marital Status'].isna().sum(), p = marital_dist.values),\n                                                                  index = train[train['Marital Status'].isna()].index))\nmarital_dist1 = test['Marital Status'].value_counts(normalize = True)\ntest['Marital Status'] = test['Marital Status'].fillna(pd.Series(np.random.choice(marital_dist1.index, size = test['Marital Status'].isna().sum(), p= marital_dist1.values),\n                                                                 index = test[test['Marital Status'].isna()].index))\nfeedback_dist = train['Customer Feedback'].value_counts(normalize = True)\ntrain['Customer Feedback'] = train['Customer Feedback'].fillna(pd.Series(np.random.choice(feedback_dist.index, size= train['Customer Feedback'].isna().sum(), p= feedback_dist.values),\n                                                                          index = train[train['Customer Feedback'].isna()].index))\nfeedback_dist1 = test['Customer Feedback'].value_counts(normalize = True)\ntest['Customer Feedback'] = test['Customer Feedback'].fillna(pd.Series(np.random.choice(feedback_dist1.index, size =test['Customer Feedback'].isna().sum(), p = feedback_dist1.values),\n                                                                        index = test[test['Customer Feedback'].isna()].index))\n","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"imputer1= SimpleImputer(strategy = 'median')\ntrain['Credit Score']= imputer1.fit_transform(train[['Credit Score']])\ntest['Credit Score']= imputer1.transform(test[['Credit Score']])\ntrain['Health Score']= imputer1.fit_transform(train[['Health Score']])\ntest['Health Score']= imputer1.transform(test[['Health Score']])\ntrain['Age']= imputer1.fit_transform(train[['Age']])\ntest['Age']= imputer1.transform(test[['Age']])\ntrain['Annual Income']= imputer1.fit_transform(train[['Annual Income']])\ntest['Annual Income']= imputer1.transform(test[['Annual Income']])\ntrain['Vehicle Age']= imputer1.fit_transform(train[['Vehicle Age']])\ntest['Vehicle Age']= imputer1.transform(test[['Vehicle Age']])\ntrain['Insurance Duration']= imputer1.fit_transform(train[['Insurance Duration']])\ntest['Insurance Duration']= imputer1.transform(test[['Insurance Duration']])\n","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"\ntrain['Policy Start Year'] = train['Policy Start Date'].dt.year\ntrain['Policy Start Month'] = train['Policy Start Date'].dt.month\ntrain['Policy Start Day'] = train['Policy Start Date'].dt.day\n\ntest['Policy Start Year'] = test['Policy Start Date'].dt.year\ntest['Policy Start Month'] = test['Policy Start Date'].dt.month\ntest['Policy Start Day'] = test['Policy Start Date'].dt.day","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train.drop(columns = ['Policy Start Date'], inplace = True)\ntest.drop(columns = ['Policy Start Date'], inplace = True)","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train.isna().sum()","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train.dropna(inplace = True)\ntest.dropna(inplace = True)","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train['Premium Amount'] = np.log(train['Premium Amount'])\ny= train['Premium Amount']\ntrain.drop(columns= ['Premium Amount'], inplace = True)","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def obj_cat(trial):\n    params={\n        'iterations':1000,\n        'learning_rate': trial.suggest_float('learning_rate', .01,.02)\n        \n    }\n    cat_features = [train.columns.get_loc(col) for col in train.select_dtypes(include=['category', 'object']).columns]\n    optuna_model = CatBoostRegressor(**params, verbose = False)\n    cv = KFold(n_splits = 10, shuffle = True, random_state = 0)\n    scores = []\n    for train_index, test_index in cv.split(train, y):\n        trainx, testx = train.iloc[train_index], train.iloc[test_index]\n        trainy, testy = y.iloc[train_index], y.iloc[test_index]\n        optuna_model.fit(trainx, trainy,cat_features=cat_features)\n        predy = optuna_model.predict(testx)\n        rmsle_score = np.sqrt(mean_squared_log_error(testy, predy))\n        scores.append(rmsle_score)\n    return np.mean(scores)\nstudy_cat = optuna.create_study(direction = 'minimize')\noptuna.logging.set_verbosity(optuna.logging.WARNING)\nn_trials = 2\nwith tqdm(total = n_trials) as pbar:\n    for i in range(n_trials):\n        study_cat.optimize(obj_cat, n_trials = 1)\n        pbar.update(1)","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"cv = KFold(n_splits = 10, shuffle = True, random_state =0)\npred_cat = np.zeros(test.shape[0])\nrmle_cat[]\nn=0\nfor train_index, test_index in cv.split(train, y):\n    trainx, testx = train.iloc[train_index], train.iloc[test_index]\n    trainy, testy = y.iloc[train_index], y.iloc[test_index] \n    \n    cat_features = [train.columns.get_loc(col) for col in train.select_dtypes(include=['category', 'object']).columns]\n    model_cat = CatBoostRegressor(**study_cat.best_params)\n    model_cat.fit(trainx,trainy,eval_set=[(testx, testy)],cat_features=cat_features,early_stopping_rounds=100,verbose= False ) \n    pred_cat+=model_cat.predict(test)/cv.n_splits\n    rmle_cat.append(mean_squared_log_error(testy, model_cat.predict(testx), squared=False))\n","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"submission = pd.read_csv('/kaggle/input/playground-series-s4e12/sample_submission.csv')\nsubmission['cat'] = pred_cat\nsubmission['Premium Amount'] = submission['cat']\nfinal_submission = pd.DataFrame(submission, columns=['id', 'Premium Amount'])\nfinal_submission.to_csv('predictions.csv', index = False)","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}