{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":50160,"databundleVersionId":7921029,"sourceType":"competition"},{"sourceId":7829103,"sourceType":"datasetVersion","datasetId":4588119},{"sourceId":7829138,"sourceType":"datasetVersion","datasetId":4588144},{"sourceId":7829150,"sourceType":"datasetVersion","datasetId":4588151}],"dockerImageVersionId":30664,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nimport os\nimport lightgbm\nimport math\n\nfrom collections import Counter\nfrom tqdm import tqdm\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import roc_auc_score","metadata":{"execution":{"iopub.status.busy":"2024-03-27T03:00:58.541859Z","iopub.execute_input":"2024-03-27T03:00:58.542347Z","iopub.status.idle":"2024-03-27T03:00:58.554731Z","shell.execute_reply.started":"2024-03-27T03:00:58.542311Z","shell.execute_reply":"2024-03-27T03:00:58.553296Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"os.mkdir('./test_f')\nos.mkdir('./test_f/depth0')\nos.mkdir('./test_f/depth1')\nos.mkdir('./test_f/depth2')","metadata":{"execution":{"iopub.status.busy":"2024-03-27T01:51:39.920347Z","iopub.execute_input":"2024-03-27T01:51:39.920911Z","iopub.status.idle":"2024-03-27T01:51:39.926275Z","shell.execute_reply.started":"2024-03-27T01:51:39.920877Z","shell.execute_reply":"2024-03-27T01:51:39.925487Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"***feature engineering functions：***\n   - depth0:\n           D: (date_decision - d), rename col end with _days\n           *: other features remind same\n   - depth1:\n           D: mean((date_decision - d)), rename col end with _days\n           Float: groupby(case_id).mean, .max, .min\n           Category: groupby(case_id) select lastest, unique_num, most_common\n   - depth2:\n           no clear meaning in group2:\n               person2: filter num_group1=0\n               applprev2: only use num_group1\n           clear explanation of group1,2:\n               D: mean, max of date diff within group2\n               float: mean, max for all recorders\n               no category col\n------------------------------------------------------------------------------------\ntrain features cooking are done in local compute due to high resource consumption.\ntest features cooking are done in the notebook.","metadata":{}},{"cell_type":"code","source":"def clean_0(df, naratio, train_base):\n    '''\n    return: df,columns=[date_decision, col1...], index=['case_id']\n    '''\n    _result = pd.DataFrame(train_base[['WEEK_NUM']])\n    _nalist = []  # store high na ratio col\n    _trainbase = pd.DataFrame(train_base[['date_decision']])\n    df = df.set_index('case_id').join(_trainbase, on='case_id', how='left')\n\n    _list = df.columns.tolist()\n    _list.remove('date_decision')\n\n    for col in _list:\n        # 计算缺省率\n        _na = df[col].isna().mean()\n        if _na > naratio:\n            _nalist.append((col, _na))\n            continue\n        else:\n            if col[-1] == 'D':\n                _d = df[[col, 'date_decision']]\n                _temp1 = col + '_days'\n                _d[_temp1] = (pd.to_datetime(_d['date_decision']) - pd.to_datetime(_d[col])).dt.days\n                _dd = pd.DataFrame(_d[_temp1])\n                _result = _result.join(_dd, on='case_id', how='left')\n                del _d, _dd\n            else:\n                _ddd = df[col]\n                _result = _result.join(_ddd, on='case_id', how='left')\n                del _ddd\n\n    return _result, _nalist\n\ndef clean_1(df, naratio, train_base):\n    _result = pd.DataFrame(train_base[['WEEK_NUM']])\n    _nalist = []\n    _trainbase = pd.DataFrame(train_base[['date_decision']])\n    df = df.set_index('case_id').join(_trainbase, on='case_id', how='left')\n\n    _list = df.columns.tolist()\n    _list.remove('date_decision')\n    _list.remove('num_group1')\n\n    for col in _list:\n        # 计算缺省率\n        _na = df[col].isna().mean()\n        if _na > naratio:\n            _nalist.append((col, _na))\n            continue\n        else:\n            if col[-1] == 'd':\n                # 与决策日天数的差的均值\n                _d = df[[col, 'date_decision', 'num_group1']].reset_index()\n                _temp1 = col + '_days'\n                _d[_temp1] = (pd.to_datetime(_d['date_decision']) - pd.to_datetime(_d[col])).dt.days\n                _dd = pd.DataFrame(_d.groupby('case_id')[_temp1].mean()[_temp1])\n                _result = _result.join(_dd, on='case_id')\n                del _d, _dd\n\n            elif df[col].dtype == 'float':\n                _d = df[[col, 'num_group1']].reset_index()\n\n                _d1 = pd.DataFrame(_d.groupby('case_id')[col].mean())\n                _d1.columns = [col + '_mean']\n\n                _d2 = pd.DataFrame(_d.groupby('case_id')[col].max())\n                _d2.columns = [col + '_max']\n\n                _d3 = pd.DataFrame(_d.groupby('case_id')[col].min())\n                _d3.columns = [col + '_min']\n\n                _result = _result.join(_d1, on='case_id').join(_d2, on='case_id').join(_d3, on='case_id')\n                del _d, _d1, _d2, _d3\n\n            elif df[col].dtype == 'object':\n                _d = df[[col, 'num_group1']].reset_index()\n\n                _d1 = pd.DataFrame(_d.groupby('case_id')[col].apply(lambda x: x.values[-1]))\n                _d1.columns = [col + '_lastest']\n\n                _d2 = pd.DataFrame(_d.groupby('case_id')[col].apply(lambda x: len(x.unique())))\n                _d2.columns = [col + '_uniquenum']\n\n                _d3 = pd.DataFrame(\n                    _d.groupby('case_id')[col].apply(lambda x: Counter(x.tolist()).most_common(1)[0][0]))\n                _d3.columns = [col + '_mostcommon']\n\n                _result = _result.join(_d1, on='case_id').join(_d2, on='case_id').join(_d3, on='case_id')\n                del _d, _d1, _d2, _d3\n\n            else:\n                print('col:{}, dtype:{}. \\n'.format(col, df[col].dtypes.name))\n    return _result, _nalist\n\ndef clean3_1(df):\n    # 处理num_group1, num_group2\n    _result = pd.DataFrame({'case_id': df['case_id'].unique().tolist()})\n    _result.set_index('case_id', inplace=True)\n    _list = df.columns.to_list()\n    _list.remove('case_id')\n    _list.remove('num_group1')\n    _list.remove('num_group2')\n\n    for col in _list:\n        _d = df[['case_id', 'num_group1', 'num_group2', col]]\n\n        if col[\n            -1] == 'D':  # pmts_date_1107D, Payment date for an active contract according to credit bureau (num_group1 - contract, num_group2 - payment).\n            _d1 = _d.groupby(['case_id', 'num_group1'], as_index=False)[col].apply(\n                lambda x: pd.to_datetime(x).diff().mean().days)\n            _d1 = pd.DataFrame(_d1.groupby('case_id')[col].max())\n            _d1.columns = [col + '_maxdiff_A']\n            _result = _result.join(_d1, on='case_id', how='left')\n            del _d1\n\n        elif col[-1] in ['P', 'A']:  # float, 计算mean, max\n            _d1 = pd.DataFrame(_d.groupby('case_id')[col].mean())\n            _d2 = pd.DataFrame(_d.groupby('case_id')[col].max())\n\n            _d1.columns = [col + '_mean']\n            _d2.columns = [col + '_max']\n\n            _result = _result.join(_d1, on='case_id', how='left').join(_d2, on='case_id', how='left')\n            del _d1, _d2\n\n        else:\n            continue\n        del _d\n    return _result\n\ndef get_importance(model, feature_names):\n    _r = {}\n    m = model.feature_importance()\n    for num,i in enumerate(feature_names):\n        _r.update({i: m[num]})\n    return pd.DataFrame.from_dict(_r, orient='index')","metadata":{"execution":{"iopub.status.busy":"2024-03-27T02:15:57.149326Z","iopub.execute_input":"2024-03-27T02:15:57.149829Z","iopub.status.idle":"2024-03-27T02:15:57.185590Z","shell.execute_reply.started":"2024-03-27T02:15:57.149789Z","shell.execute_reply":"2024-03-27T02:15:57.184286Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_base = pd.read_csv('/kaggle/input/home-credit-credit-risk-model-stability/csv_files/train/train_base.csv',\n                        low_memory=False).set_index('case_id')\n\ntest_base = pd.read_csv('/kaggle/input/home-credit-credit-risk-model-stability/csv_files/test/test_base.csv',\n                        low_memory=False).set_index('case_id')","metadata":{"execution":{"iopub.status.busy":"2024-03-27T01:51:55.230996Z","iopub.execute_input":"2024-03-27T01:51:55.232021Z","iopub.status.idle":"2024-03-27T01:51:56.479094Z","shell.execute_reply.started":"2024-03-27T01:51:55.231971Z","shell.execute_reply":"2024-03-27T01:51:56.478130Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# test - depth0 - features\nsample_0 = {'static': ['test_static_0_0.csv', 'test_static_0_1.csv'], \n            'static_cb':['test_static_cb_0.csv']}\nfor key in sample_0.keys():\n    _f = pd.DataFrame()\n    for sample in sample_0[key]:\n        _d = pd.read_csv(os.path.join('../input/home-credit-credit-risk-model-stability/csv_files/test', sample), \n                         low_memory=False)\n        _f = pd.concat([_f, _d], axis=0)\n        del _d  # save RAM\n    # cooking features\n    _featrues, _ = clean_0(_f, 0.2, test_base)\n    _temp = './test_f/depth0/' + key + '.csv'\n    _featrues.to_csv(_temp)\n    print('shape of {} features: {}'.format(key, _featrues.shape))\n    del _f, _featrues","metadata":{"execution":{"iopub.status.busy":"2024-03-27T02:16:00.377812Z","iopub.execute_input":"2024-03-27T02:16:00.378186Z","iopub.status.idle":"2024-03-27T02:16:00.712029Z","shell.execute_reply.started":"2024-03-27T02:16:00.378158Z","shell.execute_reply":"2024-03-27T02:16:00.711243Z"},"collapsed":true,"jupyter":{"outputs_hidden":true},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# depth1 - features\nsample_1 = {'applprev': ['test_applprev_1_0.csv', 'test_applprev_1_1.csv'],\n           'credit_bureau_a1': ['test_credit_bureau_a_1_0.csv', 'test_credit_bureau_a_1_1.csv', \n                                'test_credit_bureau_a_1_2.csv','test_credit_bureau_a_1_3.csv'],\n           'credit_bureau_b1': ['test_credit_bureau_b_1.csv'], 'debitcard': ['test_debitcard_1.csv'],\n           'deposit': ['test_deposit_1.csv'], 'other': ['test_other_1.csv'], 'person1': ['test_person_1.csv'],\n            'tax': ['test_tax_registry_a_1.csv', 'test_tax_registry_b_1.csv', 'test_tax_registry_c_1.csv']\n           }\n\nfor key in sample_1.keys():\n    frames = []\n    col = 0\n    for sample in tqdm(sample_1[key]):\n        _f = pd.read_csv(os.path.join('../input/home-credit-credit-risk-model-stability/csv_files/test', sample), \n                                 low_memory=False)\n        # cooking features\n        _featrues, _ = clean_1(_f, 0.2, test_base)\n        frames.append(_featrues)\n        del _f\n    _f1 = pd.concat(frames, axis=0)\n    del frames # save RAM\n    _temp = './test_f/depth1/' + key + '.csv'\n    _f1.to_csv(_temp)\n    print('shape of {} features: {}'.format(key, _featrues.shape))\n    del _f1\n\n# depth2 - features with no special meanings in group2\nperson2 = pd.read_csv('../input/home-credit-credit-risk-model-stability/csv_files/test/test_person_2.csv',\n                     low_memory = False)\nperson2 = person2[person2['num_group1']==0]\nperson2.drop(['num_group1'], axis=1, inplace=True)\nperson2 = person2.rename(columns={'num_group2':'num_group1'})\nperson2_clean, _ = clean_1(person2, 0.2, test_base)\nperson2_clean.to_csv('./test_f/depth2/person2.csv')\ndel person2, person2_clean\n\napplprev2 = pd.read_csv('../input/home-credit-credit-risk-model-stability/csv_files/test/test_applprev_2.csv', \n                     low_memory=False)\napplprev2.drop(['num_group2'], axis=1, inplace=True)\napplprev2_clean, _ = clean_1(applprev2, 0.2, test_base)\napplprev2_clean.to_csv('./test_f/depth2/applprev2.csv')\ndel applprev2, applprev2_clean","metadata":{"execution":{"iopub.status.busy":"2024-03-27T02:20:57.346912Z","iopub.execute_input":"2024-03-27T02:20:57.347311Z","iopub.status.idle":"2024-03-27T02:20:59.432965Z","shell.execute_reply.started":"2024-03-27T02:20:57.347281Z","shell.execute_reply":"2024-03-27T02:20:59.432141Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"depth2_col = ['pmts_date_1107D','pmts_dpdvalue_108P','pmts_pmtsoverdue_635A',\n 'pmts_dpd_1073P','pmts_dpd_303P',\n 'pmts_month_158T','pmts_month_706T',\n 'pmts_overdue_1140A','pmts_overdue_1152A','pmts_year_1139T','pmts_year_507T','subjectroles_name_541M',\n              'subjectroles_name_838M']\n\n# 每一个feature单独清洗\nfeature_col = pd.read_csv('../input/home-credit-credit-risk-model-stability/csv_files/test/test_credit_bureau_a_2_0.csv', \n                          low_memory=False).columns.to_list()[1:]\nfeature_col.remove('num_group1')\nfeature_col.remove('num_group2')\n\nf_g1 = []\nf_g2 = []\nfor i in tqdm(range(11)):\n    _temp = 'test_credit_bureau_a_2_{}.csv'.format(str(i))\n    _path = os.path.join('../input/home-credit-credit-risk-model-stability/csv_files/test', _temp)\n    _d = pd.read_csv(_path, low_memory=False)\n    _f_g1 = pd.DataFrame({'case_id': _d['case_id'].unique().tolist()})\n    _f_g1.set_index('case_id', inplace=True)\n    _f_g2 = pd.DataFrame({'case_id': _d['case_id'].unique().tolist()})\n    _f_g2.set_index('case_id', inplace=True)\n    for col in feature_col:\n        if col in depth2_col:\n            # 需要使用group2索引\n            _f = _d[['case_id', col, 'num_group1', 'num_group2']]\n            _fclean = clean3_1(_f)\n            _f_g2 = _f_g2.join(_fclean, on='case_id')\n            del _f, _fclean\n        else:\n            # 使用group1索引\n            _f = _d[['case_id', col, 'num_group1']]\n            _fclean, _ = clean_1(_f, 0.5, test_base)\n            _fclean = _fclean.iloc[:, 2:]\n            _f_g1 = _f_g1.join(_fclean, on='case_id')\n            del _f, _fclean\n    f_g1.append(_f_g1)\n    f_g2.append(_f_g2)\n    del _f_g1, _f_g2\n    \nf_g1 = pd.concat(f_g1, axis=0)\nf_g2 = pd.concat(f_g2, axis=0)\nprint(f_g1.shape, f_g2.shape)\n\n# credit_bureau_a2 特征工程\nf_g1.to_csv('./test_f/depth2/credit_bureau_a2_0.csv')\nf_g2.to_csv('./test_f/depth2/credit_bureau_a2_1.csv')\n\ndel f_g1, f_g2\n\n# credit_bureau_b_2\ncb_b2 = pd.read_csv('../input/home-credit-credit-risk-model-stability/csv_files/test/test_credit_bureau_b_2.csv',\n                   low_memory=False)\nf_cb_g1 = pd.DataFrame({'case_id': cb_b2['case_id'].unique().tolist()})\nf_cb_g1.set_index('case_id', inplace=True)\nf_cb_g2 = pd.DataFrame({'case_id': cb_b2['case_id'].unique().tolist()})\nf_cb_g2.set_index('case_id', inplace=True)\n\nfor col in tqdm(cb_b2.columns[3:]):\n    if col in depth2_col:\n        # 需要使用group2索引\n        _f = cb_b2[['case_id', col, 'num_group1', 'num_group2']]\n        _fclean = clean3_1(_f)\n        f_cb_g2 = f_cb_g2.join(_fclean, on='case_id')\n        del _f, _fclean\n    else:\n        # 使用group1索引\n        _f = cb_b2[['case_id', col, 'num_group1']]\n        _fclean, _ = clean_1(_f, 0.5, test_base)\n        _fclean = _fclean.iloc[:, 2:]\n        f_cb_g1 = f_cb_g1.join(_fclean, on='case_id')\n        del _f, _fclean\n\nf_cb_g1.to_csv('./test_f/depth2/credit_bureau_b2_0.csv')\nf_cb_g2.to_csv('./test_f/depth2/credit_bureau_b2_1.csv')\n\ndel cb_b2, f_cb_g1, f_cb_g2","metadata":{"execution":{"iopub.status.busy":"2024-03-27T02:28:09.379602Z","iopub.execute_input":"2024-03-27T02:28:09.380027Z","iopub.status.idle":"2024-03-27T02:28:10.614626Z","shell.execute_reply.started":"2024-03-27T02:28:09.379997Z","shell.execute_reply":"2024-03-27T02:28:10.613491Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# combine all train-features\ncate_features = []\nfor _ in range(3):\n    _temp = '../input/depth{}/depth{}'.format(str(_), str(_))\n    for path in tqdm([os.path.join(_temp, i) for i in os.listdir(_temp)]):\n        _f = pd.read_csv(path, low_memory=False)\n        for col in ['WEEK_NUM', 'target', 'date_decision', 'num_group1', 'num_group2']:\n            if col in _f.columns:\n                _f.drop(columns=col, inplace=True)\n        for col in _f.columns:\n            if _f[col].isna().mean() > 0.2:\n                _f.drop(columns=col, inplace=True)\n            elif _f[col].dtypes == 'object':\n                    cate_features.append(col)\n                    _c = _f[col].unique().tolist()\n                    _cc = []\n                    for j in _c:\n                        try:\n                            if np.isnan(j):\n                                continue\n                            else:\n                                _cc.append(j)\n                        except:\n                            _cc.append(j)\n                    _c = pd.CategoricalDtype(_cc)\n                    _f[col] = _f[col].astype(_c)\n                    _f[col] = _f[col].cat.codes\n            else:\n                continue\n        train_base = train_base.join(_f.set_index('case_id'), on='case_id')\n        del _f","metadata":{"execution":{"iopub.status.busy":"2024-03-27T02:36:04.886203Z","iopub.execute_input":"2024-03-27T02:36:04.887285Z","iopub.status.idle":"2024-03-27T02:42:40.727074Z","shell.execute_reply.started":"2024-03-27T02:36:04.887244Z","shell.execute_reply":"2024-03-27T02:42:40.725386Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# combine all test-features\ntest_cate_features = []\nfor _ in range(3):\n    _temp = './test_f/depth{}'.format(str(_))\n    for path in tqdm([os.path.join(_temp, i) for i in os.listdir(_temp)]):\n        _f = pd.read_csv(path, low_memory=False)\n        for col in ['WEEK_NUM', 'target', 'date_decision', 'num_group1', 'num_group2']:\n            if col in _f.columns:\n                _f.drop(columns=col, inplace=True)\n        for col in _f.columns:\n            if _f[col].isna().mean() > 0.2:\n                _f.drop(columns=col, inplace=True)\n            elif _f[col].dtypes == 'object':\n                    test_cate_features.append(col)\n                    _c = _f[col].unique().tolist()\n                    _cc = []\n                    for j in _c:\n                        try:\n                            if np.isnan(j):\n                                continue\n                            else:\n                                _cc.append(j)\n                        except:\n                            _cc.append(j)\n                    _c = pd.CategoricalDtype(_cc)\n                    _f[col] = _f[col].astype(_c)\n                    _f[col] = _f[col].cat.codes\n            else:\n                continue\n        test_base = test_base.join(_f.set_index('case_id'), on='case_id')\n        del _f\n\ntest_base.head()","metadata":{"execution":{"iopub.status.busy":"2024-03-27T02:35:04.912592Z","iopub.execute_input":"2024-03-27T02:35:04.913026Z","iopub.status.idle":"2024-03-27T02:35:05.313151Z","shell.execute_reply.started":"2024-03-27T02:35:04.912992Z","shell.execute_reply":"2024-03-27T02:35:05.312138Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# lightBGM\nfeature_names = train_base.columns.to_list()[4:]\nprint('num of features: %s' % (len(feature_names)))\nx_all = train_base.iloc[:, 4:].values\ny_all = train_base['target'].values\n\nx_train_all, x_test_all, y_train_all, y_test_all = train_test_split(x_all, y_all, test_size=0.25, random_state=22, shuffle=True)\n\nprint('------------- 拆分训练集完成 --------------------')\ntrain_set_all = lightgbm.Dataset(x_train_all, label=y_train_all, feature_name=feature_names, categorical_feature=cate_features, free_raw_data=False)\ntest_set_all = lightgbm.Dataset(x_test_all, label=y_test_all, feature_name=feature_names, categorical_feature=cate_features, free_raw_data=False)\n\nparams = {\n    'objective': 'binary', 'is_unbalanced': True,\n    'num_iterations': 100, 'learning_rate': 0.005, 'num_leaves': 31, 'device_type': 'cpu', 'seed': 22,\n    'max_depth': 6, 'min_data_in_leaf': math.ceil(train_base.shape[0]*0.05), 'metric': 'auc', \n    'verbosity': -1, 'num_threads': 14\n}\n\nprint('=================================== 开始训练 ========================================')\nmodel_all = lightgbm.train(params=params, train_set=train_set_all, valid_sets=[test_set_all], \n                           callbacks=[lightgbm.log_evaluation(10)])\n\n# lightgbm.plot_importance(model_all, max_num_features=30)","metadata":{"execution":{"iopub.status.busy":"2024-03-27T02:46:38.291202Z","iopub.execute_input":"2024-03-27T02:46:38.292125Z","iopub.status.idle":"2024-03-27T02:51:35.596546Z","shell.execute_reply.started":"2024-03-27T02:46:38.292075Z","shell.execute_reply":"2024-03-27T02:51:35.595738Z"},"collapsed":true,"jupyter":{"outputs_hidden":true},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Submission**","metadata":{}},{"cell_type":"code","source":"def gini_stability(base, w_fallingrate=88.0, w_resstd=-0.5):\n    gini_in_time = base.loc[:, [\"WEEK_NUM\", \"target\", \"score\"]]\\\n        .sort_values(\"WEEK_NUM\")\\\n        .groupby(\"WEEK_NUM\")[[\"target\", \"score\"]]\\\n        .apply(lambda x: 2*roc_auc_score(x[\"target\"], x[\"score\"])-1).tolist()\n    \n    x = np.arange(len(gini_in_time))\n    y = gini_in_time\n    a, b = np.polyfit(x, y, 1)\n    y_hat = a*x + b\n    residuals = y - y_hat\n    res_std = np.std(residuals)\n    avg_gini = np.mean(gini_in_time)\n    return avg_gini + w_fallingrate * min(0, a) + w_resstd * res_std","metadata":{"execution":{"iopub.status.busy":"2024-03-27T03:08:33.998349Z","iopub.execute_input":"2024-03-27T03:08:33.999029Z","iopub.status.idle":"2024-03-27T03:08:34.007991Z","shell.execute_reply.started":"2024-03-27T03:08:33.998991Z","shell.execute_reply":"2024-03-27T03:08:34.006716Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_predict = model_all.predict(test_base.iloc[:,3:], num_iteration=model_all.best_iteration, predict_disable_shape_check=True)","metadata":{"execution":{"iopub.status.busy":"2024-03-27T03:12:39.090745Z","iopub.execute_input":"2024-03-27T03:12:39.091213Z","iopub.status.idle":"2024-03-27T03:12:39.104924Z","shell.execute_reply.started":"2024-03-27T03:12:39.091176Z","shell.execute_reply":"2024-03-27T03:12:39.103250Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission = pd.DataFrame({\n    \"case_id\": test_base.index.to_numpy(),\n    \"score\": test_predict\n}).set_index('case_id')\nsubmission.to_csv(\"./submission.csv\")","metadata":{"execution":{"iopub.status.busy":"2024-03-27T03:19:22.942895Z","iopub.execute_input":"2024-03-27T03:19:22.943275Z","iopub.status.idle":"2024-03-27T03:19:22.951373Z","shell.execute_reply.started":"2024-03-27T03:19:22.943247Z","shell.execute_reply":"2024-03-27T03:19:22.950361Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}