{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.12","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":30822,"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-31T14:48:52.826793Z","iopub.execute_input":"2024-12-31T14:48:52.827158Z","iopub.status.idle":"2024-12-31T14:48:52.835076Z","shell.execute_reply.started":"2024-12-31T14:48:52.827131Z","shell.execute_reply":"2024-12-31T14:48:52.833908Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"tmp=pd.read_csv('/kaggle/input/playground-series-s4e12/train.csv')\nprint(tmp.isnull().sum())\nprint(tmp.dtypes)\nprint(tmp.shape)\nprint(len(tmp),len(tmp.id.unique()))\ndisplay(tmp.head())","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-31T12:26:39.985709Z","iopub.execute_input":"2024-12-31T12:26:39.986216Z","iopub.status.idle":"2024-12-31T12:26:49.829002Z","shell.execute_reply.started":"2024-12-31T12:26:39.986186Z","shell.execute_reply":"2024-12-31T12:26:49.827691Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# tmp=pd.read_csv('/kaggle/input/playground-series-s4e12/test.csv')\n# print(tmp.isnull().sum())\n# print(tmp.dtypes)\n# print(tmp.shape)\n# print(len(tmp),len(tmp.id.unique()))\n# display(tmp.head())","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-31T10:11:28.74641Z","iopub.execute_input":"2024-12-31T10:11:28.746765Z","iopub.status.idle":"2024-12-31T10:11:28.751051Z","shell.execute_reply.started":"2024-12-31T10:11:28.746735Z","shell.execute_reply":"2024-12-31T10:11:28.749485Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from sklearn.model_selection import train_test_split\nimport matplotlib.pyplot as plt\n\nfrom sklearn.metrics import mean_squared_error\nfrom sklearn.metrics import mean_absolute_error\n\ndef rmsle(y_true: np.ndarray, y_pred: np.ndarray) -> np.float64:\n    rmsle = mean_squared_error(np.log1p(y_true), np.log1p(y_pred))\n    return np.sqrt(rmsle)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-31T12:26:53.055599Z","iopub.execute_input":"2024-12-31T12:26:53.05607Z","iopub.status.idle":"2024-12-31T12:26:53.062595Z","shell.execute_reply.started":"2024-12-31T12:26:53.056038Z","shell.execute_reply":"2024-12-31T12:26:53.061132Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"Premium Amountに関してroot_mean_squared_log_error","metadata":{}},{"cell_type":"markdown","source":"# 特徴量に関してみてみる(整数)","metadata":{}},{"cell_type":"code","source":"import seaborn as sns\nimport matplotlib.pyplot as plt\n\n\n###############1変数\n##num\nnumlist=tmp.dtypes[tmp.dtypes=='float'].index.tolist()\nprint(len(numlist))\n\n\nfig=plt.figure(tight_layout=True,figsize=(20,10))\noneloc=0\nfor onecol in numlist:\n    oneloc+=1\n    ax=fig.add_subplot(2,5,oneloc)\n    ax.hist(tmp[onecol])\n\n    ax.set_title(onecol)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-31T13:10:21.28442Z","iopub.execute_input":"2024-12-31T13:10:21.284794Z","iopub.status.idle":"2024-12-31T13:10:24.526553Z","shell.execute_reply.started":"2024-12-31T13:10:21.284765Z","shell.execute_reply":"2024-12-31T13:10:24.525378Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"sns.heatmap(tmp[numlist].corr(),annot=True,cmap='coolwarm',fmt='.2f')\n\n##previous claimsとcredit　scoreが少しだけ、あとは無少し","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-31T13:10:24.528035Z","iopub.execute_input":"2024-12-31T13:10:24.528373Z","iopub.status.idle":"2024-12-31T13:10:25.471704Z","shell.execute_reply.started":"2024-12-31T13:10:24.528343Z","shell.execute_reply":"2024-12-31T13:10:25.470553Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# ##1000ランダムで\n# sns.pairplot(tmp[numlist].sample(n=100))","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-31T10:05:58.401515Z","iopub.execute_input":"2024-12-31T10:05:58.401864Z","iopub.status.idle":"2024-12-31T10:05:58.40602Z","shell.execute_reply.started":"2024-12-31T10:05:58.401838Z","shell.execute_reply":"2024-12-31T10:05:58.40485Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# カテゴリ変数","metadata":{}},{"cell_type":"code","source":"##文字列\nob_list=tmp.dtypes[tmp.dtypes=='object'].index.tolist()\nprint(ob_list)\nprint(len(ob_list))\n\nfor onecol in ob_list:\n    print(onecol,len(tmp[onecol].unique()))\n\n\nfig=plt.figure(tight_layout=True,figsize=(20,10))\noneloc=0\nfor onecol in ob_list:\n    if onecol!='Policy Start Date':\n        print(onecol)\n        oneloc+=1\n        ax=fig.add_subplot(2,5,oneloc)\n        aaa=tmp.groupby(onecol,dropna=False).agg({'Premium Amount':'mean'}).\\\n        reset_index().fillna({onecol:'nankoba'})\n        ax.bar(aaa[onecol],aaa['Premium Amount'])    \n\n        ax.set_title(onecol)\n\n        del aaa","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-31T12:27:16.112152Z","iopub.execute_input":"2024-12-31T12:27:16.112588Z","iopub.status.idle":"2024-12-31T12:27:21.095539Z","shell.execute_reply.started":"2024-12-31T12:27:16.112562Z","shell.execute_reply":"2024-12-31T12:27:21.093962Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# 決定木","metadata":{}},{"cell_type":"code","source":"tmp2=tmp.copy()\n\n##時間さよなら\ntmp2=tmp2.drop('Policy Start Date',axis=1)\n\n\n##文字列→数値型へ変更\nfor onecol in ob_list:\n    print(onecol)\n    if onecol!='Policy Start Date':\n        ##欠損を埋める\n        tmp2=tmp2.fillna({\n            onecol:'nan'\n        })\n        tmp2=pd.concat(\n            [\n            tmp2,\n            pd.get_dummies(tmp2[onecol],drop_first=True,dtype=int,prefix=onecol)\n            ],axis=1\n        )\n        tmp2=tmp2.drop(onecol,axis=1)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-30T15:51:42.434647Z","iopub.execute_input":"2024-12-30T15:51:42.434973Z","iopub.status.idle":"2024-12-30T15:51:51.318544Z","shell.execute_reply.started":"2024-12-30T15:51:42.434942Z","shell.execute_reply":"2024-12-30T15:51:51.317587Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"tmp2.shape","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-30T15:15:56.391687Z","iopub.execute_input":"2024-12-30T15:15:56.392082Z","iopub.status.idle":"2024-12-30T15:15:56.398599Z","shell.execute_reply.started":"2024-12-30T15:15:56.39205Z","shell.execute_reply":"2024-12-30T15:15:56.397406Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from sklearn.model_selection import train_test_split\nfrom sklearn.tree import DecisionTreeRegressor\n\n#trainとテストデータの作成\nx=tmp2.drop(['Premium Amount','id'],axis=1)\ny=tmp2['Premium Amount']\n\nx_train, x_test, y_train, y_test = \\\ntrain_test_split(x, y, random_state=0,train_size=0.7,shuffle=True)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-30T15:51:51.320195Z","iopub.execute_input":"2024-12-30T15:51:51.320622Z","iopub.status.idle":"2024-12-30T15:51:52.015714Z","shell.execute_reply.started":"2024-12-30T15:51:51.320588Z","shell.execute_reply":"2024-12-30T15:51:52.014447Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"tmp2.isnull().sum()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-30T15:51:52.017494Z","iopub.execute_input":"2024-12-30T15:51:52.017894Z","iopub.status.idle":"2024-12-30T15:51:52.08338Z","shell.execute_reply.started":"2024-12-30T15:51:52.017845Z","shell.execute_reply":"2024-12-30T15:51:52.082419Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"clf_model = DecisionTreeRegressor(max_depth=10)\n# clf_model.fit(x_train, y_train)\nclf_model.fit(x_train.fillna(0), y_train)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-30T15:51:52.084399Z","iopub.execute_input":"2024-12-30T15:51:52.0848Z","iopub.status.idle":"2024-12-30T15:52:00.487203Z","shell.execute_reply.started":"2024-12-30T15:51:52.084768Z","shell.execute_reply":"2024-12-30T15:52:00.486017Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from sklearn.metrics import mean_squared_error\n\n\ndef rmsle(y_true: np.ndarray, y_pred: np.ndarray) -> np.float64:\n    rmsle = mean_squared_error(np.log1p(y_true), np.log1p(y_pred))\n    return np.sqrt(rmsle)","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"print(rmsle(y_train,clf_model.predict(x_train.fillna(0))))\nprint(rmsle(y_test,clf_model.predict(x_test.fillna(0))))\n\n## 1.1323635967453252\n## 1.1403915944290433","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-30T15:52:00.494897Z","iopub.execute_input":"2024-12-30T15:52:00.495264Z","iopub.status.idle":"2024-12-30T15:52:00.996876Z","shell.execute_reply.started":"2024-12-30T15:52:00.495218Z","shell.execute_reply":"2024-12-30T15:52:00.995671Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import matplotlib.pyplot as plt\nfrom sklearn.tree import DecisionTreeClassifier, plot_tree\n\nplt.figure(figsize=(15,10))\nplot_tree(clf_model, feature_names=x_test.columns, filled=True)\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-30T15:52:00.999352Z","iopub.execute_input":"2024-12-30T15:52:00.99967Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# lightgbm\n\nダミー変数化しない方が強い","metadata":{}},{"cell_type":"code","source":"tmp3=tmp.copy()\n\n##時間さよなら\ntmp3=tmp3.drop('Policy Start Date',axis=1)\n\n\n##文字列→数値型へ変更\nfor onecol in ob_list:\n    if onecol!='Policy Start Date':\n        print(onecol)\n        tmp3[onecol]=tmp3[onecol].astype('category')","metadata":{"trusted":true,"execution":{"iopub.status.idle":"2024-12-30T15:53:06.924441Z","shell.execute_reply.started":"2024-12-30T15:53:05.673843Z","shell.execute_reply":"2024-12-30T15:53:06.922962Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"x=tmp3.drop(['Premium Amount','id'],axis=1)\ny=tmp3['Premium Amount']\n\nx_train_tmp, x_test, y_train_tmp, y_test = \\\ntrain_test_split(x, y, random_state=0,train_size=0.7,shuffle=True)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-30T15:53:06.925515Z","iopub.execute_input":"2024-12-30T15:53:06.925879Z","iopub.status.idle":"2024-12-30T15:53:07.198492Z","shell.execute_reply.started":"2024-12-30T15:53:06.925848Z","shell.execute_reply":"2024-12-30T15:53:07.197457Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"###検証データの作成\nx_train2,x_va,y_train2,y_va=train_test_split(\n    x_train_tmp,y_train_tmp,test_size=0.2,shuffle=True,random_state=0\n)\n\n##ダミー変数化バージョン\n# x_train2,x_va,y_train2,y_va=train_test_split(\n#     x_train,y_train,test_size=0.2,shuffle=True,random_state=0\n# )","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-30T15:53:07.1995Z","iopub.execute_input":"2024-12-30T15:53:07.199794Z","iopub.status.idle":"2024-12-30T15:53:07.383171Z","shell.execute_reply.started":"2024-12-30T15:53:07.199769Z","shell.execute_reply":"2024-12-30T15:53:07.382026Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"##ハイパーパラメータの設定\nimport lightgbm as lgb\n\n#学習データ\nlgb_trian=lgb.Dataset(x_train2,y_train2)\n#検証データ\nlgb_eval=lgb.Dataset(x_va,y_va,reference=lgb_trian)\n\n# params={\n#     'objective': 'regression', \n#     # 'metric':'rmse','mae',#'rmse',\n#     'seed':0,\n#     'verbose':-1\n# }\n\n#こいつ最強\nparams={\n    'objective':'mae',\n    'seed':0,\n    'verbose':-1\n}\n\n\n\n\n##誤差プロット用\nevals_result={}","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-30T15:53:07.384365Z","iopub.execute_input":"2024-12-30T15:53:07.38481Z","iopub.status.idle":"2024-12-30T15:53:07.391538Z","shell.execute_reply.started":"2024-12-30T15:53:07.384715Z","shell.execute_reply":"2024-12-30T15:53:07.390126Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"model=lgb.train(\n    params,\n    lgb_trian,\n    num_boost_round=10000,\n    valid_sets=[lgb_trian,lgb_eval],\n    valid_names=['train','valid'],\n    callbacks=[lgb.early_stopping(300),\n              lgb.log_evaluation(500)])\n#検証データの予測と評価\nprint(rmsle(y_va,\n            model.predict(x_va,num_iteration=model.best_iteration)\n     ))\n\nprint(rmsle(y_test,\n            model.predict(x_test,num_iteration=model.best_iteration)\n     ))\n\n###1.0922977448302216\n###1.0942411258494005\n\n\n#ダミー変数化無\n# 1.0863742717619245\n# 1.0882836146101098","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-30T15:53:07.392718Z","iopub.execute_input":"2024-12-30T15:53:07.393118Z","iopub.status.idle":"2024-12-30T15:53:34.029015Z","shell.execute_reply.started":"2024-12-30T15:53:07.393073Z","shell.execute_reply":"2024-12-30T15:53:34.027594Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# lightgbm2","metadata":{}},{"cell_type":"markdown","source":"## 時間処理","metadata":{}},{"cell_type":"code","source":"tmp4=tmp.copy()\n\ntmp4['PSD_datetime']=pd.to_datetime(tmp4['Policy Start Date'])\ntmp4['PSD_str']=tmp4['PSD_datetime'].astype('str')\n\ntmp4['PSD_year']=tmp4['PSD_str'].str[0:4]\ntmp4['PSD_month']=tmp4['PSD_str'].str[5:7]\n\n\n######確認\ndisplay(tmp4[['Policy Start Date','PSD_datetime','PSD_str',\\\n             'PSD_year','PSD_month']])\n##文字数ユニーク\nprint(tmp4['PSD_str'].str.len().unique())\n\n##いらない列の削除\ntmp4=tmp4.drop(['Policy Start Date','PSD_datetime','PSD_str'],axis=1)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-31T14:55:11.333379Z","iopub.execute_input":"2024-12-31T14:55:11.333787Z","iopub.status.idle":"2024-12-31T14:55:16.116219Z","shell.execute_reply.started":"2024-12-31T14:55:11.333745Z","shell.execute_reply":"2024-12-31T14:55:16.114894Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"##文字列\nob_list=tmp4.dtypes[tmp4.dtypes=='object'].index.tolist()\nprint(ob_list)\nprint(len(ob_list))\n\nfor onecol in ob_list:\n    print(onecol,len(tmp4[onecol].unique()))\n\n\nfig=plt.figure(tight_layout=True,figsize=(20,10))\noneloc=0\nfor onecol in ob_list:\n    if onecol!='Policy Start Date':\n        print(onecol)\n        oneloc+=1\n        ax=fig.add_subplot(3,5,oneloc)\n        aaa=tmp4.groupby(onecol,dropna=False).agg({'Premium Amount':'mean'}).\\\n        reset_index().fillna({onecol:'nankoba'})\n        ax.bar(aaa[onecol],aaa['Premium Amount'])    \n\n        ax.set_title(onecol)\n\n        del aaa","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-31T14:55:16.117746Z","iopub.execute_input":"2024-12-31T14:55:16.118194Z","iopub.status.idle":"2024-12-31T14:55:21.510409Z","shell.execute_reply.started":"2024-12-31T14:55:16.118149Z","shell.execute_reply":"2024-12-31T14:55:21.508837Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"##文字列\nob_list=tmp4.dtypes[tmp4.dtypes=='object'].index.tolist()\n\n##文字列→カテゴリー型へ変更\nfor onecol in ob_list:\n    if onecol!='Policy Start Date':\n        print(onecol)\n        tmp4[onecol]=tmp4[onecol].astype('category')\n\n##①数値型へ(そこまで変わらず)\n# tmp4['PSD_year']=tmp4['PSD_year'].astype('int')\n# tmp4['PSD_month']=tmp4['PSD_month'].astype('int')\n\n##②monthだけsin,cos変換\ndef encode(df, col):\n    # この方法だと場合によって最大値が変化するデータでは正確な値は出ない\n    # 例：月の日数が30日や31日の場合がある\n    df[col + '_cos'] = np.cos(2 * np.pi * df[col].astype('int') / df[col].astype('int').max())\n    df[col + '_sin'] = np.sin(2 * np.pi * df[col].astype('int') / df[col].astype('int').max())\n    return df\n\ntmp4=encode(tmp4, 'PSD_month').copy()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-31T14:55:21.512282Z","iopub.execute_input":"2024-12-31T14:55:21.512772Z","iopub.status.idle":"2024-12-31T14:55:22.746325Z","shell.execute_reply.started":"2024-12-31T14:55:21.512727Z","shell.execute_reply":"2024-12-31T14:55:22.745018Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## train_test_validの作成＆モデルの作成","metadata":{}},{"cell_type":"code","source":"from sklearn.model_selection import train_test_split\n\nx=tmp4.drop(['id','Premium Amount','PSD_month'],axis=1)\ny=tmp4['Premium Amount']\n\nx_train_tmp, x_test, y_train_tmp, y_test = \\\ntrain_test_split(x, y, random_state=0,train_size=0.7,shuffle=True)\n\n###検証データの作成\nx_train2,x_va,y_train2,y_va=train_test_split(\n    x_train_tmp,y_train_tmp,test_size=0.2,shuffle=True,random_state=0)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-31T14:55:01.865445Z","iopub.execute_input":"2024-12-31T14:55:01.865825Z","iopub.status.idle":"2024-12-31T14:55:02.393151Z","shell.execute_reply.started":"2024-12-31T14:55:01.865795Z","shell.execute_reply":"2024-12-31T14:55:02.391466Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"##ハイパーパラメータの設定\nimport lightgbm as lgb\n\n#学習データ\nlgb_trian=lgb.Dataset(x_train2,y_train2)\n#検証データ\nlgb_eval=lgb.Dataset(x_va,y_va,reference=lgb_trian)\n\n# params={\n# 'objective': 'regression', \n#     'metric':'mae',\n#     'seed':0,\n#     'verbose':-1\n# }\n\n##こいつ最強\nparams={\n    'objective':'mae',\n    'seed':0,\n    'verbose':-1\n}\n\n\n##誤差プロット用\nevals_result={}","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-31T14:35:57.451916Z","iopub.execute_input":"2024-12-31T14:35:57.45234Z","iopub.status.idle":"2024-12-31T14:35:57.459342Z","shell.execute_reply.started":"2024-12-31T14:35:57.4523Z","shell.execute_reply":"2024-12-31T14:35:57.458166Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"model=lgb.train(\n    params,\n    lgb_trian,\n    num_boost_round=15,\n    valid_sets=[lgb_trian,lgb_eval],\n    valid_names=['train','valid'],\n    callbacks=[\n        # lgb.early_stopping(300),\n        lgb.early_stopping(2),\n        lgb.log_evaluation(100),\nlgb.record_evaluation(evals_result)]\n)\n\n\n#検証データの予測と評価\nprint(rmsle(y_va,\n            model.predict(x_va,num_iteration=model.best_iteration)\n     ))\n\nprint(rmsle(y_test,\n            model.predict(x_test,num_iteration=model.best_iteration)\n     ))\n\n\n# print(mean_absolute_error(y_va, model.predict(x_va,num_iteration=model.best_iteration)))\n# print(mean_absolute_error(y_test, model.predict(x_test,num_iteration=model.best_iteration)))\n\n###1.0922977448302216\n###1.0942411258494005\n\n\n#ダミー変数化無\n# 1.0863742717619245\n# 1.0882836146101098","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-31T14:35:57.460585Z","iopub.execute_input":"2024-12-31T14:35:57.46117Z","iopub.status.idle":"2024-12-31T14:35:59.760904Z","shell.execute_reply.started":"2024-12-31T14:35:57.461127Z","shell.execute_reply":"2024-12-31T14:35:59.759688Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"#学習データと検証データの誤差プロット\nprint(mean_absolute_error(y_va, model.predict(x_va,num_iteration=model.best_iteration)))\nprint(mean_absolute_error(y_test, model.predict(x_test,num_iteration=model.best_iteration)))\nprint('---------------------------')\nprint(model.best_iteration)\nlgb.plot_metric(evals_result)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-31T14:36:00.121379Z","iopub.execute_input":"2024-12-31T14:36:00.121763Z","iopub.status.idle":"2024-12-31T14:36:00.681664Z","shell.execute_reply.started":"2024-12-31T14:36:00.121733Z","shell.execute_reply":"2024-12-31T14:36:00.680497Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## クロスバリデーション","metadata":{}},{"cell_type":"code","source":"from sklearn.model_selection import StratifiedKFold\n\n#KFoldで学習データ5分割\nkf=StratifiedKFold(n_splits=5,shuffle=True,random_state=0)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-31T14:57:58.831134Z","iopub.execute_input":"2024-12-31T14:57:58.831575Z","iopub.status.idle":"2024-12-31T14:57:58.837304Z","shell.execute_reply.started":"2024-12-31T14:57:58.831548Z","shell.execute_reply":"2024-12-31T14:57:58.83603Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"x=tmp4.drop(['id','Premium Amount','PSD_month'],axis=1)\ny=tmp4['Premium Amount']\n\nx_train, x_test, y_train, y_test = \\\ntrain_test_split(x, y, random_state=0,train_size=0.7,shuffle=True)\n\n###検証データの作成\n# x_train2,x_va,y_train2,y_va=train_test_split(\n#     x_train_tmp,y_train_tmp,test_size=0.2,shuffle=True,random_state=0)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-31T14:57:59.979491Z","iopub.execute_input":"2024-12-31T14:57:59.979904Z","iopub.status.idle":"2024-12-31T14:58:00.31007Z","shell.execute_reply.started":"2024-12-31T14:57:59.979873Z","shell.execute_reply":"2024-12-31T14:58:00.308897Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"##ハイパーパラメータの設定\nimport lightgbm as lgb\n\nvalie_list=[]\ntest_list=[]\nmodel_list=[]\n\n##こいつ最強\nparams={\n    'objective':'mae',\n    'seed':0,\n    'verbose':-1\n}\n\n\n##誤差プロット用\nevals_result={}\n\n\n\n\n\nfor fold,(tr_idx,va_idx) in enumerate(kf.split(x_train,y_train)):\n    print(fold)\n    X_tr=x_train.iloc[tr_idx]\n    X_va=x_train.iloc[va_idx]\n    y_tr=y_train.iloc[tr_idx]\n    y_va=y_train.iloc[va_idx]\n    \n    lgb_train=lgb.Dataset(X_tr,y_tr)\n    lgb_eval=lgb.Dataset(X_va,y_va,reference=lgb_train)\n    \n    model=lgb.train(\n        params,\n                   lgb_train,\n                   num_boost_round=15,\n                   valid_sets=[lgb_train,lgb_eval],\n                   valid_names=['train','eval'],\n                   callbacks=[lgb.early_stopping(2),\n                             lgb.log_evaluation(100)])\n\n\n    valid_=rmsle(y_va,\n            model.predict(X_va,num_iteration=model.best_iteration))\n    print('va',valid_)\n    test_=rmsle(y_test,\n            model.predict(x_test,num_iteration=model.best_iteration))\n    print('test',test_)\n\n    valie_list.append(valid_)\n    test_list.append(test_)\n    model_list.append(model)\n    ","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-31T14:58:01.569564Z","iopub.execute_input":"2024-12-31T14:58:01.56998Z","iopub.status.idle":"2024-12-31T14:58:15.370158Z","shell.execute_reply.started":"2024-12-31T14:58:01.569943Z","shell.execute_reply":"2024-12-31T14:58:15.368961Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# #格納用データの箱\n# valie_list=[]\n# test_list=[]\n# model_list=[]\n\n# ##こいつ最強\n# params={\n#     'objective':'mae',\n#     'seed':0,\n#     'verbose':-1\n# }\n\n\n# for fold,(tr_idx,va_idx) in enumerate(kf.split(x_train_tmp,y_train_tmp)):\n    \n#     print(fold)\n#     x_train=x_train_tmp.iloc[tr_idx]\n#     x_va=x_train_tmp.iloc[va_idx]\n#     y_train=y_train_tmp.iloc[tr_idx]\n#     y_va=y_train_tmp.iloc[va_idx]\n#     display(x_train.dtypes,x_va.dtypes)\n    \n#     lgb_train=lgb.Dataset(x_train,y_train)\n#     lgb_eval=lgb.Dataset(x_va,y_va,reference=lgb_train)\n\n\n#     model=lgb.train(\n#         params,\n#         lgb_trian,\n#         num_boost_round=15,\n#         valid_sets=[lgb_trian,lgb_eval],\n#         valid_names=['train','valid'],\n#         callbacks=[\n#         # lgb.early_stopping(300),\n#         lgb.early_stopping(2),\n#         lgb.log_evaluation(100),\n#         lgb.record_evaluation(evals_result)]\n#     )\n    \n\n#     valid_=rmsle(y_va,\n#             model.predict(x_va,num_iteration=model.best_iteration))\n#     print('va',valid_)\n#     test_=rmsle(y_test,\n#             model.predict(x_test,num_iteration=model.best_iteration))\n#     print('test',test_)\n    \n#     valie_list.append(valid_)\n#     test_list.append(test_)\n#     model_list.append(model)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-31T14:30:16.224274Z","iopub.execute_input":"2024-12-31T14:30:16.224754Z","iopub.status.idle":"2024-12-31T14:30:19.51561Z","shell.execute_reply.started":"2024-12-31T14:30:16.224707Z","shell.execute_reply":"2024-12-31T14:30:19.514071Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"model","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-31T15:01:52.746251Z","iopub.execute_input":"2024-12-31T15:01:52.74661Z","iopub.status.idle":"2024-12-31T15:01:52.753899Z","shell.execute_reply.started":"2024-12-31T15:01:52.74658Z","shell.execute_reply":"2024-12-31T15:01:52.752295Z"}},"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},{"cell_type":"markdown","source":"# shap","metadata":{}},{"cell_type":"code","source":"import shap\nexplainer = shap.TreeExplainer(model=model,feature_perturbation='tree_path_dependent')\nshap_values = explainer.shap_values(X=x_test)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-31T13:06:36.474484Z","iopub.execute_input":"2024-12-31T13:06:36.474858Z","iopub.status.idle":"2024-12-31T13:06:49.346118Z","shell.execute_reply.started":"2024-12-31T13:06:36.474831Z","shell.execute_reply":"2024-12-31T13:06:49.345177Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"shap.summary_plot(shap_values, x_test, plot_type=\"bar\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-31T13:07:03.619517Z","iopub.execute_input":"2024-12-31T13:07:03.619955Z","iopub.status.idle":"2024-12-31T13:07:04.497412Z","shell.execute_reply.started":"2024-12-31T13:07:03.619913Z","shell.execute_reply":"2024-12-31T13:07:04.495915Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"shap.summary_plot(shap_values, x_test)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-31T13:08:36.124502Z","iopub.execute_input":"2024-12-31T13:08:36.124977Z","iopub.status.idle":"2024-12-31T13:09:10.061837Z","shell.execute_reply.started":"2024-12-31T13:08:36.124943Z","shell.execute_reply":"2024-12-31T13:09:10.060517Z"}},"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":"markdown","source":"# 提出","metadata":{}},{"cell_type":"code","source":"tmptest=pd.read_csv('/kaggle/input/playground-series-s4e12/test.csv')\nprint(tmptest.isnull().sum())\nprint(tmptest.dtypes)\nprint(tmptest.shape)\nprint(len(tmptest),len(tmptest.id.unique()))\ndisplay(tmptest)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-31T15:02:15.216941Z","iopub.execute_input":"2024-12-31T15:02:15.217372Z","iopub.status.idle":"2024-12-31T15:02:18.902701Z","shell.execute_reply.started":"2024-12-31T15:02:15.217344Z","shell.execute_reply":"2024-12-31T15:02:18.90126Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"tmptest2=tmptest.copy()\n\ntmptest2['PSD_datetime']=pd.to_datetime(tmptest2['Policy Start Date'])\ntmptest2['PSD_str']=tmptest2['PSD_datetime'].astype('str')\n\ntmptest2['PSD_year']=tmptest2['PSD_str'].str[0:4]\ntmptest2['PSD_month']=tmptest2['PSD_str'].str[5:7]\n\n\n\n##いらない列の削除\ntmptest2=tmptest2.drop(['Policy Start Date','PSD_datetime','PSD_str'],axis=1)\n\n\n##文字列\nob_list=tmptest2.dtypes[tmptest2.dtypes=='object'].index.tolist()\n\n##文字列→カテゴリー型へ変更\nfor onecol in ob_list:\n    if onecol!='Policy Start Date':\n        print(onecol)\n        tmptest2[onecol]=tmptest2[onecol].astype('category')\n\n\n##②monthだけsin,cos変換\ndef encode(df, col):\n    # この方法だと場合によって最大値が変化するデータでは正確な値は出ない\n    # 例：月の日数が30日や31日の場合がある\n    df[col + '_cos'] = np.cos(2 * np.pi * df[col].astype('int') / df[col].astype('int').max())\n    df[col + '_sin'] = np.sin(2 * np.pi * df[col].astype('int') / df[col].astype('int').max())\n    return df\n\ntmptest2=encode(tmptest2, 'PSD_month').copy()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-31T15:02:22.202023Z","iopub.execute_input":"2024-12-31T15:02:22.202541Z","iopub.status.idle":"2024-12-31T15:02:25.858302Z","shell.execute_reply.started":"2024-12-31T15:02:22.202498Z","shell.execute_reply":"2024-12-31T15:02:25.856444Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"sample_=pd.read_csv('/kaggle/input/playground-series-s4e12/sample_submission.csv')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-31T15:02:25.860367Z","iopub.execute_input":"2024-12-31T15:02:25.86084Z","iopub.status.idle":"2024-12-31T15:02:26.046499Z","shell.execute_reply.started":"2024-12-31T15:02:25.860787Z","shell.execute_reply":"2024-12-31T15:02:26.045146Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"model_list[5]","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-31T15:03:25.580901Z","iopub.execute_input":"2024-12-31T15:03:25.581278Z","iopub.status.idle":"2024-12-31T15:03:25.604456Z","shell.execute_reply.started":"2024-12-31T15:03:25.581251Z","shell.execute_reply":"2024-12-31T15:03:25.602797Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# val=model.predict(tmptest2.drop(['id','PSD_month'],axis=1),num_iteration=model.best_iteration)\n\n\n\n\n# final=pd.concat([sample_,pd.DataFrame(val)],axis=1).drop('Premium Amount',axis=1)\n# final=final.rename(columns={0:'Premium Amount'})\n# final.to_csv('test_241231_sub3.csv',index=False)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-31T15:04:34.112516Z","iopub.execute_input":"2024-12-31T15:04:34.112928Z","iopub.status.idle":"2024-12-31T15:04:36.31814Z","shell.execute_reply.started":"2024-12-31T15:04:34.112897Z","shell.execute_reply":"2024-12-31T15:04:36.317143Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"val_0= model_list[0].predict(tmptest2.drop(['id','PSD_month'],axis=1),num_iteration=model.best_iteration)\nval_1= model_list[1].predict(tmptest2.drop(['id','PSD_month'],axis=1),num_iteration=model.best_iteration)\nval_2= model_list[2].predict(tmptest2.drop(['id','PSD_month'],axis=1),num_iteration=model.best_iteration)\nval_3= model_list[3].predict(tmptest2.drop(['id','PSD_month'],axis=1),num_iteration=model.best_iteration)\nval_4= model_list[4].predict(tmptest2.drop(['id','PSD_month'],axis=1),num_iteration=model.best_iteration)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-31T15:04:51.092041Z","iopub.execute_input":"2024-12-31T15:04:51.09243Z","iopub.status.idle":"2024-12-31T15:04:53.404473Z","shell.execute_reply.started":"2024-12-31T15:04:51.0924Z","shell.execute_reply":"2024-12-31T15:04:53.403572Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"\nfinal=pd.concat([sample_,\n                 pd.DataFrame(val_0),\n                 pd.DataFrame(val_1).rename(columns={0:1}),\n                 pd.DataFrame(val_2).rename(columns={0:2}),\n                 pd.DataFrame(val_3).rename(columns={0:3}),\n                 pd.DataFrame(val_4).rename(columns={0:4}),\n                ],axis=1).drop('Premium Amount',axis=1)\n\n\nfinal['Premium Amount']=(final[0]+final[1]+final[2]+final[3]+final[4])/5\nfinal[['id','Premium Amount']].to_csv('test_241231_sub4.csv',index=False)\n\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-31T15:09:48.722482Z","iopub.execute_input":"2024-12-31T15:09:48.72291Z","iopub.status.idle":"2024-12-31T15:09:50.497596Z","shell.execute_reply.started":"2024-12-31T15:09:48.722875Z","shell.execute_reply":"2024-12-31T15:09:50.49616Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"final","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-31T15:09:56.287916Z","iopub.execute_input":"2024-12-31T15:09:56.288329Z","iopub.status.idle":"2024-12-31T15:09:56.307741Z","shell.execute_reply.started":"2024-12-31T15:09:56.288297Z","shell.execute_reply":"2024-12-31T15:09:56.306373Z"}},"outputs":[],"execution_count":null}]}