{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import os\nimport random\nimport joblib\nimport gc\nimport itertools\nfrom itertools import combinations\nimport re\n\nimport scipy as sp\nimport numpy as np\nimport pandas as pd\nfrom tqdm.notebook import tqdm\n\nimport lightgbm as lgb\nfrom sklearn.preprocessing import LabelEncoder\nfrom hyperopt import STATUS_OK, Trials, fmin, hp, tpe\nfrom sklearn.model_selection import StratifiedKFold, train_test_split\n\n\npd.set_option('display.width', 1000)\npd.set_option('display.max_rows', 500)\npd.set_option('display.max_columns', 500)\nimport warnings; warnings.filterwarnings('ignore')","metadata":{"execution":{"iopub.status.busy":"2022-08-03T06:14:37.221289Z","iopub.execute_input":"2022-08-03T06:14:37.222551Z","iopub.status.idle":"2022-08-03T06:14:37.230489Z","shell.execute_reply.started":"2022-08-03T06:14:37.222493Z","shell.execute_reply":"2022-08-03T06:14:37.229539Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def get_difference(data, num_features):\n    df1 = []\n    customer_ids = []\n    \n    for customer_id, df in tqdm(data.groupby(['customer_ID'])):\n        diff_df1 = df[num_features].diff(1).iloc[[-1]].values.astype(np.float16)#float32をfloat16に変えた\n        df1.append(diff_df1)\n        customer_ids.append(customer_id)\n    \n    df1 = np.concatenate(df1, axis = 0)\n    df1 = pd.DataFrame(df1, columns = [col + '_diff1' for col in df[num_features].columns])\n    df1['customer_ID'] = customer_ids\n    return df1","metadata":{"execution":{"iopub.status.busy":"2022-08-03T06:14:37.232358Z","iopub.execute_input":"2022-08-03T06:14:37.233038Z","iopub.status.idle":"2022-08-03T06:14:37.243952Z","shell.execute_reply.started":"2022-08-03T06:14:37.232998Z","shell.execute_reply":"2022-08-03T06:14:37.242752Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# trainデータの前処理","metadata":{}},{"cell_type":"code","source":"def read_preprocess_traindata(train_, train_labels_):    \n    # 特徴量の指定(customerとS_2以外のすべて)\n    features = train_.drop(['customer_ID', 'target', 'S_2'], axis = 1).columns.to_list()\n    # カテゴリ変数の指定\n    cat_features = [\n        \"B_30\",\n        \"B_38\",\n        \"D_114\",\n        \"D_116\",\n        \"D_117\",\n        \"D_120\",\n        \"D_126\",\n        \"D_63\",\n        \"D_64\",\n        \"D_66\",\n        \"D_68\",\n    ]\n    \n    # 数値変数の個数(特徴量の中からカテゴリ変数で指定したものを除く)\n    num_features = [col for col in features if col not in cat_features]\n    \n    # floatデータのメモリ削減(もともとfloat32だったものをfloat16まで減らす)\n    print('Starting reducing memory. (num feature: cast float32 to float16)')\n    float_cols = list(train_.dtypes[train_.dtypes == 'float32'].index)\n    for col in tqdm(float_cols):\n        train_[col] = train_[col].astype(np.float16)\n    \n    # 特徴量の生成\n    print('Starting training feature engineer...')    \n    train_num_agg = train_.groupby(\"customer_ID\")[num_features].agg(['mean', 'std', 'min', 'max', 'last'])\n    train_num_agg.columns = ['_'.join(x) for x in train_num_agg.columns]\n    train_num_agg.reset_index(inplace = True)\n    train_cat_agg = train_.groupby(\"customer_ID\")[cat_features].agg(['count', 'last', 'nunique'])\n    train_cat_agg.columns = ['_'.join(x) for x in train_cat_agg.columns]\n    train_cat_agg.reset_index(inplace = True)\n    \n    print('Starting reducing memory. (new features:cast 64->8)')\n    # floatデータのメモリ削減(もともとfloat32だったものをfloat16まで減らす)\n    cols = list(train_num_agg.dtypes[train_num_agg.dtypes == 'float64'].index)    \n    for col in tqdm(cols):\n        train_num_agg[col] = train_num_agg[col].astype(np.float16)\n        \n    # intデータのメモリ削減(もともとint32だったものをint8まで減らす)\n    cols = list(train_cat_agg.dtypes[train_cat_agg.dtypes == 'int64'].index)    \n    for col in tqdm(cols):\n        train_cat_agg[col] = train_cat_agg[col].astype(np.int8)\n        \n    print('Starting calculate difference...')\n    train_diff = get_difference(train_, num_features)\n    train_ = train_num_agg.merge(train_cat_agg, how = 'inner', on = 'customer_ID').merge(train_diff, how = 'inner', on = 'customer_ID').merge(train_labels_, how = 'inner', on = 'customer_ID')\n    \n    del train_num_agg, train_cat_agg, train_diff\n    gc.collect()\n    \n    # floatデータのメモリ削減(もともとfloat32だったものをfloat16まで減らす)\n    print('Starting reducing memory. (num feature: cast float16 to float32)')\n    float_cols = list(train_.dtypes[train_.dtypes == 'float16'].index)\n    for col in tqdm(float_cols):\n        train_[col] = train_[col].astype(np.float32)\n    \n    print('Saving file ...')\n    train_.to_parquet('train_fe.parquet')\n    print('Finished Saving file.')","metadata":{"execution":{"iopub.status.busy":"2022-08-03T06:14:37.245569Z","iopub.execute_input":"2022-08-03T06:14:37.246326Z","iopub.status.idle":"2022-08-03T06:14:37.261367Z","shell.execute_reply.started":"2022-08-03T06:14:37.246289Z","shell.execute_reply":"2022-08-03T06:14:37.260235Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# testデータの前処理(trainと同じ)","metadata":{}},{"cell_type":"code","source":"def read_preprocess_testdata(test_):\n    print('Starting test feature engineer...')    \n    test_num_agg = test_.groupby(\"customer_ID\")[num_features].agg(['mean', 'std', 'min', 'max', 'last'])\n    test_num_agg.columns = ['_'.join(x) for x in test_num_agg.columns]\n    test_num_agg.reset_index(inplace = True)\n    test_cat_agg = test_.groupby(\"customer_ID\")[cat_features].agg(['count', 'last', 'nunique'])\n    test_cat_agg.columns = ['_'.join(x) for x in test_cat_agg.columns]\n    test_cat_agg.reset_index(inplace = True)\n    \n    # floatデータのメモリ削減(もともとfloat32だったものをfloat16まで減らす)\n    print('Starting reducing memory. (num feature: cast float32 to float16)')\n    float_cols = list(test_.dtypes[test_.dtypes == 'float32'].index)\n    for col in tqdm(float_cols):\n        test_[col] = test_[col].astype(np.float16)\n    \n    print('Starting reducing memory(cast 64->16) ...')\n    cols = list(test_num_agg.dtypes[test_num_agg.dtypes == 'float64'].index)\n    for col in tqdm(cols):\n        test_num_agg[col] = test_num_agg[col].astype(np.float16)\n        \n    cols = list(test_cat_agg.dtypes[test_cat_agg.dtypes == 'int64'].index)    \n    for col in tqdm(cols):\n        test_cat_agg[col] = test_cat_agg[col].astype(np.int8)\n    \n    print('Starting calculate difference...')\n    test_diff = get_difference(test_, num_features)\n    test_ = test_num_agg.merge(test_cat_agg, how = 'inner', on = 'customer_ID').merge(test_diff, how = 'inner', on = 'customer_ID')\n    \n    del test_num_agg, test_cat_agg, test_diff\n    gc.collect()\n    \n    print('Starting reducing memory. (num feature: cast float16 to float32)')\n    float_cols = list(test_.dtypes[test_.dtypes == 'float16'].index)\n    for col in tqdm(float_cols):\n        test_[col] = test_[col].astype(np.float32)\n    \n    print('Saving file ...')\n    test_.to_parquet('test_fe.parquet')\n    print('Finished Saving file.')","metadata":{"execution":{"iopub.status.busy":"2022-08-03T06:14:37.263707Z","iopub.execute_input":"2022-08-03T06:14:37.264422Z","iopub.status.idle":"2022-08-03T06:14:37.280025Z","shell.execute_reply.started":"2022-08-03T06:14:37.264382Z","shell.execute_reply":"2022-08-03T06:14:37.278635Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# 引数は、相関係数を作成したいdf\ndef sort_by_abs_corr(df):\n    # 相関係数行列を作成\n    corr_mat = df.corr(method='pearson')\n\n    # 行（列）サイズを取得\n    n = corr_mat.shape[0]\n\n    # 項目名を取得\n    columns = corr_mat.columns.tolist()\n\n    # 変数名1, 変数名2, 値を一つの配列に入れたものを作成\n    # 相関係数行列の下三角部分（対角成分除く）だけ\n    corr_ary = []\n    var1_ary = []\n    var2_ary = []\n    for i in range(n):\n        for j in range(i):\n            if i == j:\n                continue\n            corr_ary.append(corr_mat.iloc[i,j])\n            var1_ary.append(columns[i])\n            var2_ary.append(columns[j])\n\n    # dfにする\n    df_new = pd.DataFrame([])\n    df_new[\"var1\"] = var1_ary\n    df_new[\"var2\"] = var2_ary\n    df_new[\"corr\"] = corr_ary\n\n    return df_new.sort_values(\"corr\")","metadata":{"execution":{"iopub.status.busy":"2022-08-03T06:14:37.281892Z","iopub.execute_input":"2022-08-03T06:14:37.282552Z","iopub.status.idle":"2022-08-03T06:14:37.295744Z","shell.execute_reply.started":"2022-08-03T06:14:37.282506Z","shell.execute_reply":"2022-08-03T06:14:37.294745Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"* D_* = Delinquency variables\n* S_* = Spend variables\n* P_* = Payment variables\n* B_* = Balance variables\n* R_* = Risk variables","metadata":{}},{"cell_type":"markdown","source":"## trainデータの前処理を実行","metadata":{}},{"cell_type":"code","source":"train = pd.read_parquet('../input/amex-parquet/train_data.parquet')\n# train_labels = pd.read_csv('../input/amex-default-prediction/train_labels.csv')","metadata":{"execution":{"iopub.status.busy":"2022-08-03T06:14:37.297679Z","iopub.execute_input":"2022-08-03T06:14:37.298280Z","iopub.status.idle":"2022-08-03T06:15:20.609083Z","shell.execute_reply.started":"2022-08-03T06:14:37.298244Z","shell.execute_reply":"2022-08-03T06:15:20.606631Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 欠損の確認","metadata":{}},{"cell_type":"code","source":"train_columns = list(train.columns)","metadata":{"execution":{"iopub.status.busy":"2022-08-03T06:15:54.631786Z","iopub.execute_input":"2022-08-03T06:15:54.632566Z","iopub.status.idle":"2022-08-03T06:15:54.639060Z","shell.execute_reply.started":"2022-08-03T06:15:54.632517Z","shell.execute_reply":"2022-08-03T06:15:54.637654Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_columns[2]","metadata":{"execution":{"iopub.status.busy":"2022-08-03T06:16:11.733438Z","iopub.execute_input":"2022-08-03T06:16:11.734745Z","iopub.status.idle":"2022-08-03T06:16:11.741217Z","shell.execute_reply.started":"2022-08-03T06:16:11.734698Z","shell.execute_reply":"2022-08-03T06:16:11.740153Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train[train_columns[2]].isnull().sum()","metadata":{"execution":{"iopub.status.busy":"2022-08-03T06:17:03.113768Z","iopub.execute_input":"2022-08-03T06:17:03.114132Z","iopub.status.idle":"2022-08-03T06:17:03.138898Z","shell.execute_reply.started":"2022-08-03T06:17:03.114088Z","shell.execute_reply":"2022-08-03T06:17:03.137545Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"null_num_list = []\n\nfor column in train_columns:\n    null_num = train[column].isnull().sum()\n    percentage_null = null_num / len(train)\n    if null_num != 0:\n        null_num_list.append([column, null_num, percentage_null])\n\nnull_num_df = pd.DataFrame(null_num_list, columns=[\"column\",\"null_num\",\"null_percent\"])\ndisplay(null_num_df)\nnull_num_df.to_csv(\"null_num.csv\", index=False)","metadata":{"execution":{"iopub.status.busy":"2022-08-03T06:18:37.608590Z","iopub.execute_input":"2022-08-03T06:18:37.609005Z","iopub.status.idle":"2022-08-03T06:18:40.595060Z","shell.execute_reply.started":"2022-08-03T06:18:37.608968Z","shell.execute_reply":"2022-08-03T06:18:40.593983Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"include_null_columns = list(null_num_df[null_num_df[\"null_percent\"] > 0.3][\"column\"].values)\nprint(include_null_columns)","metadata":{"execution":{"iopub.status.busy":"2022-08-03T06:19:12.689204Z","iopub.execute_input":"2022-08-03T06:19:12.689657Z","iopub.status.idle":"2022-08-03T06:19:12.700321Z","shell.execute_reply.started":"2022-08-03T06:19:12.689618Z","shell.execute_reply":"2022-08-03T06:19:12.699042Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 相関の確認","metadata":{}},{"cell_type":"code","source":"corr_thr = 0.8","metadata":{"execution":{"iopub.status.busy":"2022-08-03T04:53:47.672953Z","iopub.execute_input":"2022-08-03T04:53:47.673433Z","iopub.status.idle":"2022-08-03T04:53:47.679442Z","shell.execute_reply.started":"2022-08-03T04:53:47.673384Z","shell.execute_reply":"2022-08-03T04:53:47.678125Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"DROP_COLUMNS = []","metadata":{"execution":{"iopub.status.busy":"2022-08-03T04:53:47.680750Z","iopub.execute_input":"2022-08-03T04:53:47.681665Z","iopub.status.idle":"2022-08-03T04:53:47.691151Z","shell.execute_reply.started":"2022-08-03T04:53:47.681616Z","shell.execute_reply":"2022-08-03T04:53:47.689970Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# D_ の相関係数が高いものを確認","metadata":{}},{"cell_type":"code","source":"D_drop_list = \"D_87\"\nD_columns = [s for s in train_columns if s.startswith('D_') and (not s in D_drop_list)]\nprint(len(D_columns))\nprint(D_columns)","metadata":{"execution":{"iopub.status.busy":"2022-08-03T04:53:47.692548Z","iopub.execute_input":"2022-08-03T04:53:47.692878Z","iopub.status.idle":"2022-08-03T04:53:47.702626Z","shell.execute_reply.started":"2022-08-03T04:53:47.692850Z","shell.execute_reply":"2022-08-03T04:53:47.701349Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"D_corr_df = sort_by_abs_corr(train[D_columns])\ndisplay(D_corr_df.head(20))\ndisplay(D_corr_df.tail(20))\nprint(\" === \")\ndisplay(D_corr_df[abs(D_corr_df[\"corr\"]) > corr_thr])\n\nD_DROP = list(D_corr_df[abs(D_corr_df[\"corr\"]) > corr_thr][\"var1\"].unique())\nprint(D_DROP)\nDROP_COLUMNS.extend(D_DROP)\n\nD_corr_df.to_csv(\"D_corr.csv\", index=False)\n\ndel D_corr_df, D_columns\ngc.collect()","metadata":{"execution":{"iopub.status.busy":"2022-08-03T04:53:47.707001Z","iopub.execute_input":"2022-08-03T04:53:47.707631Z","iopub.status.idle":"2022-08-03T04:55:37.104564Z","shell.execute_reply.started":"2022-08-03T04:53:47.707592Z","shell.execute_reply":"2022-08-03T04:55:37.103472Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# S_ の相関係数が高いものを確認","metadata":{}},{"cell_type":"code","source":"S_drop_list = \"\"\nS_columns = [s for s in train_columns if s.startswith('S_') and (not s in S_drop_list)]\nprint(len(S_columns))\nprint(S_columns)","metadata":{"execution":{"iopub.status.busy":"2022-08-03T04:55:37.105983Z","iopub.execute_input":"2022-08-03T04:55:37.106802Z","iopub.status.idle":"2022-08-03T04:55:37.112661Z","shell.execute_reply.started":"2022-08-03T04:55:37.106762Z","shell.execute_reply":"2022-08-03T04:55:37.111712Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"S_corr_df = sort_by_abs_corr(train[S_columns])\ndisplay(S_corr_df.head(20))\ndisplay(S_corr_df.tail(20))\nprint(\" === \")\ndisplay(S_corr_df[abs(S_corr_df[\"corr\"]) > corr_thr])\n\nS_DROP = list(S_corr_df[abs(S_corr_df[\"corr\"]) > corr_thr][\"var1\"].unique())\nprint(S_DROP)\nDROP_COLUMNS.extend(S_DROP)\n\nS_corr_df.to_csv(\"S_corr.csv\",index=False)\n\ndel S_corr_df, S_columns\ngc.collect()","metadata":{"execution":{"iopub.status.busy":"2022-08-03T04:55:37.113831Z","iopub.execute_input":"2022-08-03T04:55:37.114502Z","iopub.status.idle":"2022-08-03T04:55:45.018175Z","shell.execute_reply.started":"2022-08-03T04:55:37.114443Z","shell.execute_reply":"2022-08-03T04:55:45.016988Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# P_ の相関係数が高いものを確認","metadata":{}},{"cell_type":"code","source":"P_drop_list = \"\"\nP_columns = [s for s in train_columns if s.startswith('P_') and (not s in P_drop_list)]\nprint(len(P_columns))\nprint(P_columns)","metadata":{"execution":{"iopub.status.busy":"2022-08-03T04:55:45.020326Z","iopub.execute_input":"2022-08-03T04:55:45.021094Z","iopub.status.idle":"2022-08-03T04:55:45.027942Z","shell.execute_reply.started":"2022-08-03T04:55:45.021058Z","shell.execute_reply":"2022-08-03T04:55:45.026559Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"P_corr_df = sort_by_abs_corr(train[P_columns])\ndisplay(P_corr_df.head())\nprint(\" \")\nprint(f\" === correlation is more than {corr_thr} === \")\nprint(\" \")\ndisplay(P_corr_df[abs(P_corr_df[\"corr\"]) > corr_thr])\n\nP_DROP = list(P_corr_df[abs(P_corr_df[\"corr\"]) > corr_thr][\"var1\"].unique())\nprint(P_DROP)\nDROP_COLUMNS.extend(P_DROP)\n\nP_corr_df.to_csv(\"P_corr.csv\",index=False)\n\ndel P_corr_df, P_columns\ngc.collect()","metadata":{"execution":{"iopub.status.busy":"2022-08-03T04:55:45.029575Z","iopub.execute_input":"2022-08-03T04:55:45.030685Z","iopub.status.idle":"2022-08-03T04:55:45.515589Z","shell.execute_reply.started":"2022-08-03T04:55:45.030609Z","shell.execute_reply":"2022-08-03T04:55:45.514340Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# B_ の相関係数が高いものを確認","metadata":{}},{"cell_type":"code","source":"B_drop_list = \"\"\nB_columns = [s for s in train_columns if s.startswith('B_') and (not s in B_drop_list)]\nprint(len(B_columns))\nprint(B_columns)","metadata":{"execution":{"iopub.status.busy":"2022-08-03T04:55:45.517293Z","iopub.execute_input":"2022-08-03T04:55:45.517976Z","iopub.status.idle":"2022-08-03T04:55:45.524385Z","shell.execute_reply.started":"2022-08-03T04:55:45.517928Z","shell.execute_reply":"2022-08-03T04:55:45.523176Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"B_corr_df = sort_by_abs_corr(train[B_columns])\ndisplay(B_corr_df.head(20))\ndisplay(B_corr_df.tail(20))\nprint(\" \")\nprint(f\" === correlation is more than {corr_thr} === \")\nprint(\" \")\n\ndisplay(B_corr_df[abs(B_corr_df[\"corr\"]) > corr_thr])\n\nB_DROP = list(B_corr_df[abs(B_corr_df[\"corr\"]) > corr_thr][\"var1\"].unique())\nprint(B_DROP)\nDROP_COLUMNS.extend(B_DROP)\n\nB_corr_df.to_csv(\"B_corr.csv\",index=False)\n\ndel B_corr_df, B_columns\ngc.collect()","metadata":{"execution":{"iopub.status.busy":"2022-08-03T04:55:45.526003Z","iopub.execute_input":"2022-08-03T04:55:45.526585Z","iopub.status.idle":"2022-08-03T04:56:08.373848Z","shell.execute_reply.started":"2022-08-03T04:55:45.526539Z","shell.execute_reply":"2022-08-03T04:56:08.372889Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# R_ の相関係数が高いものを確認","metadata":{}},{"cell_type":"code","source":"R_drop_list = \"\"\nR_columns = [s for s in train_columns if s.startswith('R_') and (not s in R_drop_list)]\nprint(len(R_columns))\nprint(R_columns)","metadata":{"execution":{"iopub.status.busy":"2022-08-03T04:56:08.375220Z","iopub.execute_input":"2022-08-03T04:56:08.376423Z","iopub.status.idle":"2022-08-03T04:56:08.383977Z","shell.execute_reply.started":"2022-08-03T04:56:08.376370Z","shell.execute_reply":"2022-08-03T04:56:08.382383Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"R_corr_df = sort_by_abs_corr(train[R_columns])\ndisplay(R_corr_df.head(20))\ndisplay(R_corr_df.tail(20))\nprint(\" \")\nprint(f\" === correlation is more than {corr_thr} === \")\nprint(\" \")\n\ndisplay(R_corr_df[abs(R_corr_df[\"corr\"]) > corr_thr])\n\nR_DROP = list(R_corr_df[abs(R_corr_df[\"corr\"]) > corr_thr][\"var1\"].unique())\nprint(R_DROP)\nDROP_COLUMNS.extend(R_DROP)\n\nR_corr_df.to_csv(\"R_corr.csv\",index=False)\n\ndel R_corr_df, R_columns\ngc.collect()","metadata":{"execution":{"iopub.status.busy":"2022-08-03T04:56:08.385615Z","iopub.execute_input":"2022-08-03T04:56:08.385974Z","iopub.status.idle":"2022-08-03T04:56:20.933598Z","shell.execute_reply.started":"2022-08-03T04:56:08.385941Z","shell.execute_reply":"2022-08-03T04:56:20.932541Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"DROP_COLUMNS","metadata":{"execution":{"iopub.status.busy":"2022-08-03T04:56:20.934897Z","iopub.execute_input":"2022-08-03T04:56:20.935887Z","iopub.status.idle":"2022-08-03T04:56:20.942900Z","shell.execute_reply.started":"2022-08-03T04:56:20.935846Z","shell.execute_reply":"2022-08-03T04:56:20.941742Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(DROP_COLUMNS)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"DROP_COLUMNS.extend(include_null_columns)\nprint(DROP_COLUMNS)","metadata":{},"execution_count":null,"outputs":[]}]}