{"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":"markdown","source":"# Amex - Model Part\n\n\nThis is a starter code template for model tuning \n\n##### DDL: 7.21(Meet on 7.14)\n##### Deliverables: code(shown above)\n\nData Address: https://www.kaggle.com/datasets/hongyishao/amexshycombinedfeatures\n\n#### Explaination:\n- '../input/amexshycombinedfeatures/trainRFCVSelected.pkl' -> Final combined Data with 600 features\n- '../input/amexshycombinedfeatures/trainKsSelected.pkl' -> Use KS to select from 1299 to 800\n- '../input/amexshycombinedfeatures/trainClean.pkl' -> Just combine and clean without selection\n\nFeatures' Dictionary: https://docs.google.com/spreadsheets/d/1UsodGz_lkmzVmvweA_0YZZwRoB2VBpdAVuEuPtb38wI/edit?usp=sharing\n\n### Details\n\n- Hongyi: XGBOOST,CATBOOST MODEL TUNING + MODEL STACKING\n- Delivables: Model performance in Excel sheet, a stacking function\n\n\n- Duanmu: MODEL BLENDING METHOD RESEARCH(RANK,WEIGHT,...)\n- Delivables: A blending function and improved performance better than the records in Excel Sheet\n\n\n- Ziyi: LR,SVM,BAYES,RF,LIGHTGBM MODEL TUNING\n- Delivables: Model performance in Excel sheet\n\n\n- Haobo: TUNING NN MODELS PARAMETERS\n- Delivables: NN code + performance record\n","metadata":{}},{"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport os\n\nimport gc\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nfrom sklearn.naive_bayes import GaussianNB\nfrom sklearn.model_selection import KFold, StratifiedKFold\nimport lightgbm as lgb\nimport xgboost as xgb\nimport sklearn","metadata":{"execution":{"iopub.status.busy":"2022-07-30T00:06:55.610783Z","iopub.execute_input":"2022-07-30T00:06:55.611303Z","iopub.status.idle":"2022-07-30T00:06:57.642991Z","shell.execute_reply.started":"2022-07-30T00:06:55.611198Z","shell.execute_reply":"2022-07-30T00:06:57.641954Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train = pd.read_pickle('../input/amexshycombinedfeatures/train.pkl')\ntrainY = pd.read_pickle('../input/amexshycombinedfeatures/trainY.pkl')","metadata":{"execution":{"iopub.status.busy":"2022-07-30T00:06:57.646807Z","iopub.execute_input":"2022-07-30T00:06:57.647912Z","iopub.status.idle":"2022-07-30T00:07:24.208231Z","shell.execute_reply.started":"2022-07-30T00:06:57.647841Z","shell.execute_reply":"2022-07-30T00:07:24.206992Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train.columns = [f'f_{_}' for _ in range(0,train.shape[1])]\nfor i in train.columns:\n    if train[i].dtypes == 'object':\n        train[i]=train[i].apply(lambda x: hash(str(x))%997)\nimport pickle\nwith open('../input/amexshycombinedfeatures/selected1.pickle', 'rb') as file:    \n    selected1 = pickle.load(file)    \nwith open('../input/amexshycombinedfeatures/selected2.pickle', 'rb') as file:    \n    selected2 = pickle.load(file)    \nwith open('../input/amexshycombinedfeatures/selected3.pickle', 'rb') as file:    \n    selected3 = pickle.load(file)    \ncolumns = []\nfor i,j,k,l in zip(train.columns,selected1,selected2,selected3):\n    if j == k == l == True:\n        columns.append(i)\ntrain = train[columns]\ngc.collect()","metadata":{"execution":{"iopub.status.busy":"2022-07-30T00:07:24.210065Z","iopub.execute_input":"2022-07-30T00:07:24.210569Z","iopub.status.idle":"2022-07-30T00:07:32.219426Z","shell.execute_reply.started":"2022-07-30T00:07:24.210517Z","shell.execute_reply":"2022-07-30T00:07:32.217888Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# model robustness indicator\ndef calc_vdr(pred, actual, vdr_cutoff = 0.2):\n    # Function to calculate VDR at a given cutoff\n\n    df_vdr_train = pd.DataFrame(zip(pred), columns = ['predicted_proba'])\n    df_vdr_train['actual'] = np.array(actual)\n    df_vdr_train = df_vdr_train.sort_values(by = 'predicted_proba', ascending = False)\n    num_bad = df_vdr_train['actual'].sum()\n    top_20_pct = int(len(df_vdr_train['actual'])*vdr_cutoff)\n    vdr = df_vdr_train.head(top_20_pct)['actual'].sum()/num_bad\n    return vdr\n\n# evaluation matrix\n\n# 4% cutoff measures the true positive rate of the 4% data\n# positives are given 20x weights\n# cut_vals   = labels[np.cumsum(weights) <= int(0.04 * np.sum(weights))]\n# the code above indicates that if we successfully detect more positive cases, we will get less cut_samples\n# since negative samples have weight of 1, we should have more samples to let cut_vals reach threshold\n# the top four value equals to the ture positive numbers in cut_vals samples/the number of all true positive samples\n# therefore, our models should be more sensitive to true positive cases and have a larger true positive rate\n\n# gini = 2(ROC-0.5)\n\ndef amex_metric_mod(y_true, y_pred):\n\n    labels     = np.transpose(np.array([y_true, y_pred]))\n    labels     = labels[labels[:, 1].argsort()[::-1]]\n    weights    = np.where(labels[:,0]==0, 20, 1)\n    cut_vals   = labels[np.cumsum(weights) <= int(0.04 * np.sum(weights))]\n    top_four   = np.sum(cut_vals[:,0]) / np.sum(labels[:,0])\n    print(f'Top four({len(cut_vals[:,0])} total cases) has {top_four*100}% positives cases being predicted')    \n\n    gini = [0,0]\n    for i in [1,0]:\n        labels         = np.transpose(np.array([y_true, y_pred]))\n        labels         = labels[labels[:, i].argsort()[::-1]]\n        weight         = np.where(labels[:,0]==0, 20, 1)\n        weight_random  = np.cumsum(weight / np.sum(weight))\n        total_pos      = np.sum(labels[:, 0] *  weight)\n        cum_pos_found  = np.cumsum(labels[:, 0] * weight)\n        lorentz        = cum_pos_found / total_pos\n        gini[i]        = np.sum((lorentz - weight_random) * weight)\n    print(f'Gini value is {gini[1]/gini[0]}')\n    \n    \n    return 0.5 * (gini[1]/gini[0] + top_four)\n\n# matplotlib\ndef plot_auc(y_test, pred_prob1,pred_prob2,modelname,modelname2):\n    from sklearn.metrics import roc_curve\n\n    # roc curve for models\n    fpr1, tpr1, thresh1 = roc_curve(y_test, pred_prob1, pos_label=1)\n    fpr2, tpr2, thresh2 = roc_curve(y_test, pred_prob2, pos_label=1)\n\n\n    # roc curve for tpr = fpr \n    random_probs = [0 for i in range(len(y_test))]\n    p_fpr, p_tpr, _ = roc_curve(y_test, random_probs, pos_label=1)\n\n    plt.style.use('seaborn')\n\n    # plot roc curves\n    plt.plot(fpr1, tpr1, linestyle='--',color='orange', label=modelname)\n    plt.plot(fpr2, tpr2, linestyle='--',color='green', label=modelname2)\n    plt.plot(p_fpr, p_tpr, linestyle='--', color='blue')\n    # title\n    plt.title('ROC curve')\n    # x label\n    plt.xlabel('False Positive Rate')\n    # y label\n    plt.ylabel('True Positive rate')\n\n    plt.legend(loc='best')\n#     plt.savefig('ROC',dpi=)\n    plt.show()\n    \ndef evaluation(gbm, train_x, valid_x, sig):\n    # lightgbm single model evaluation in cv\n    # predict the valid dataset in cv\n    if sig == 'class':\n        train_score_lgm = gbm.predict_proba(train_x)[:,1]\n        valid_score_lgm = gbm.predict_proba(valid_x)[:,1]\n    elif sig == 'reg':\n        train_score_lgm = gbm.predict(train_x)\n        valid_score_lgm = gbm.predict(valid_x)\n    # get roc score\n    roc_auc_train = sklearn.metrics.roc_auc_score(train_y, train_score_lgm)\n    roc_auc_valid = sklearn.metrics.roc_auc_score(valid_y, valid_score_lgm)\n    # get the provided evaluation metrics of Gini and D score\n    score_train = amex_metric_mod(train_y, train_score_lgm)\n    score_valid = amex_metric_mod(valid_y, valid_score_lgm)\n\n    print('LGB - METRICS')\n    print('LGB: Train_score: {:.4f} valid_score: {:.4f}'.format(roc_auc_train , roc_auc_valid))\n    print(f'LGB: train_vdr score: {calc_vdr(train_score_lgm,actual=train_y)}')\n    print(f'LGB: valid_vdr score: {calc_vdr(valid_score_lgm,actual=valid_y)}')\n    #joblib.dump(gbm,'./model_shy/lgm'+str(round(sklearn.metrics.roc_auc_score(valid_y, valid_score_lgm),5)).replace('0.','')+'.model')\n    print('LGB: Train_score: {:.4f} valid_score: {:.4f}'.format(score_train, score_valid))","metadata":{"execution":{"iopub.status.busy":"2022-07-30T00:07:32.222920Z","iopub.execute_input":"2022-07-30T00:07:32.223298Z","iopub.status.idle":"2022-07-30T00:07:32.251683Z","shell.execute_reply.started":"2022-07-30T00:07:32.223256Z","shell.execute_reply":"2022-07-30T00:07:32.250726Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import pickle\nwith open('../input/modelspackages/models.pickle','rb') as file:\n    models1 = pickle.load(file)\nwith open('../input/modelspackages/models2.pickle','rb') as file:\n    models2 = pickle.load(file)\nwith open('../input/modelspackages/models3.pickle','rb') as file:\n    models3 = pickle.load(file)","metadata":{"execution":{"iopub.status.busy":"2022-07-30T00:07:32.253460Z","iopub.execute_input":"2022-07-30T00:07:32.253995Z","iopub.status.idle":"2022-07-30T00:07:45.268048Z","shell.execute_reply.started":"2022-07-30T00:07:32.253944Z","shell.execute_reply":"2022-07-30T00:07:45.264935Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from catboost import CatBoostClassifier\n\nmodelNum = [2022,725,233,514,2333,0]\nmodels = []\nnewTrainDF = pd.DataFrame()\n\nfor idx,_ in enumerate(modelNum):\n    folds = StratifiedKFold(n_splits= 5, shuffle=True, random_state=_)\n    list_ = []\n    list_2 = []\n    list_3 = []\n    list_4 = []\n    y_ = []\n    for n_fold, (train_idx, valid_idx) in enumerate(folds.split(train, trainY)):\n        train_x, train_y = train.iloc[train_idx], trainY.iloc[train_idx]\n        valid_x, valid_y = train.iloc[valid_idx], trainY.iloc[valid_idx]\n        \n        gbm2 = models1[idx*5 + n_fold][0]\n        gbm3 = models2[idx*5 + n_fold][0]\n        gbm = models3[idx*5 + n_fold][0]\n        \n        list_+= list(gbm.predict_proba(valid_x)[:,1])\n        list_2+= list(gbm2.predict_proba(valid_x)[:,1])\n        list_3+= list(gbm3.predict_proba(valid_x)[:,1])\n        \n        train_x = train_x.replace([np.inf,-np.inf],0)\n        train_x.fillna(0,inplace=True)\n        valid_x = valid_x.replace([np.inf,-np.inf],0)\n        valid_x.fillna(0,inplace=True)\n#xgboost\n        xgbc = xgb.XGBClassifier(\n            n_estimators=200, \n            learning_rate=0.1, \n            subsample=0.6, \n            seed=_, \n            max_depth=5,\n            colsample_bytree=0.3, \n            reg_alpha=1, \n            reg_lambda=1)\n\n        xgbc.fit(train_x, \n                 train_y, \n                 eval_set=[(valid_x, valid_y)], \n                 eval_metric= 'rmse',\n                 verbose=40)\n        \n        evaluation(xgbc, train_x, valid_x,'class')\n#         gbm = CatBoostClassifier(\n#                         learning_rate=0.03,\n#                         max_depth=9,\n#                         n_estimators=500,\n#                          colsample_bylevel=0.3,\n#                         min_data_in_leaf=200,\n#                          subsample = 0.4,\n#                          random_state=_,\n#                          reg_lambda=10,\n#                          objective='Logloss')\n# #                          max_bin=501)\n#         gbm.fit(train_x, train_y,verbose = 100)\n        list_4+= list(xgbc.predict(valid_x))\n        y_ += list(valid_y)\n        \n        models.append([xgbc])\n        \n        del train_x, train_y, valid_x, valid_y\n        gc.collect()  \n    newTrainDF[f'{_}_pred'] = list_\n    newTrainDF[f'{_}_pred2'] = list_2\n    newTrainDF[f'{_}_pred3'] = list_3\n    newTrainDF[f'{_}_pred4'] = list_4\n    gc.collect()\n           ","metadata":{"execution":{"iopub.status.busy":"2022-07-30T00:13:33.895195Z","iopub.execute_input":"2022-07-30T00:13:33.896046Z","iopub.status.idle":"2022-07-30T00:26:41.998146Z","shell.execute_reply.started":"2022-07-30T00:13:33.896003Z","shell.execute_reply":"2022-07-30T00:26:41.994049Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"newTrainDF                                                   ","metadata":{"execution":{"iopub.status.busy":"2022-07-30T00:08:11.426377Z","iopub.status.idle":"2022-07-30T00:08:11.427427Z","shell.execute_reply.started":"2022-07-30T00:08:11.427093Z","shell.execute_reply":"2022-07-30T00:08:11.427124Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import pickle\nwith open('models2.pickle','wb') as file:      \n    pickle.dump(models,file)            \nnewTrainDF.to_pickle('./newTrainDF2.pkl') ","metadata":{"execution":{"iopub.status.busy":"2022-07-30T00:08:11.428936Z","iopub.status.idle":"2022-07-30T00:08:11.429472Z","shell.execute_reply.started":"2022-07-30T00:08:11.429214Z","shell.execute_reply":"2022-07-30T00:08:11.429243Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"with open('y_2.pickle','wb') as file:\n    pickle.dump(y_,file)","metadata":{"execution":{"iopub.status.busy":"2022-07-30T00:08:11.431685Z","iopub.status.idle":"2022-07-30T00:08:11.432271Z","shell.execute_reply.started":"2022-07-30T00:08:11.431978Z","shell.execute_reply":"2022-07-30T00:08:11.432008Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"trainY2 = pd.Series(y_)     ","metadata":{"execution":{"iopub.status.busy":"2022-07-30T00:08:11.433724Z","iopub.status.idle":"2022-07-30T00:08:11.434280Z","shell.execute_reply.started":"2022-07-30T00:08:11.434004Z","shell.execute_reply":"2022-07-30T00:08:11.434030Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"folds = StratifiedKFold(n_splits= 5, shuffle=True, random_state=0)\nmodels_stage2 = []\nfor n_fold, (train_idx, valid_idx) in enumerate(folds.split(newTrainDF, trainY2)):\n    train_x, train_y = newTrainDF.iloc[train_idx], trainY2.iloc[train_idx]\n    valid_x, valid_y = newTrainDF.iloc[valid_idx], trainY2.iloc[valid_idx]\n    gbm = lgb.LGBMClassifier(\n        objective='binary', \n        boosting_type='dart',\n        num_leaves=50, \n        learning_rate=0.05,\n        n_estimators=200,\n        class_weight = {1:1,0:1},\n        min_child_samples = 100,\n        subsample = 0.3,\n        colsample_bytree = 1,\n        reg_alpha = 10,\n        reg_lambda = 10,\n        # n_jobs = 4,\n        random_state = 2022  , \n    )\n    gbm.fit(train_x, \n            train_y, \n            eval_set=[(valid_x, valid_y)], \n            eval_metric='auc', \n            early_stopping_rounds=20,\n            verbose = 10)\n\n    models_stage2.append([gbm])\n    evaluation(gbm,train_x,valid_x,'class')\n\n    del train_x, train_y, valid_x, valid_y\n    gc.collect()  \ngc.collect()","metadata":{"execution":{"iopub.status.busy":"2022-07-30T00:08:11.435838Z","iopub.status.idle":"2022-07-30T00:08:11.436418Z","shell.execute_reply.started":"2022-07-30T00:08:11.436115Z","shell.execute_reply":"2022-07-30T00:08:11.436143Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"del train  \ngc.collect()","metadata":{"execution":{"iopub.status.busy":"2022-07-30T00:08:11.437772Z","iopub.status.idle":"2022-07-30T00:08:11.438329Z","shell.execute_reply.started":"2022-07-30T00:08:11.438049Z","shell.execute_reply":"2022-07-30T00:08:11.438074Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test1 = pd.read_pickle('../input/amexshycombinedfeatures/test1.pkl')\ntest2 = pd.read_pickle('../input/amexshycombinedfeatures/test2.pkl')\ntest3 = pd.read_pickle('../input/amexshycombinedfeatures/test3.pkl')\ntest4 = pd.read_pickle('../input/amexshycombinedfeatures/test4.pkl')\ntest5 = pd.read_pickle('../input/amexshycombinedfeatures/test5.pkl')\ntest6 = pd.read_pickle('../input/amexshycombinedfeatures/test6.pkl')   \ntest7 = pd.read_pickle('../input/amexshycombinedfeatures/test7.pkl')","metadata":{"execution":{"iopub.status.busy":"2022-07-30T00:08:11.440034Z","iopub.status.idle":"2022-07-30T00:08:11.440594Z","shell.execute_reply.started":"2022-07-30T00:08:11.440296Z","shell.execute_reply":"2022-07-30T00:08:11.440325Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"gc.collect()  ","metadata":{"execution":{"iopub.status.busy":"2022-07-30T00:08:11.442230Z","iopub.status.idle":"2022-07-30T00:08:11.442642Z","shell.execute_reply.started":"2022-07-30T00:08:11.442446Z","shell.execute_reply":"2022-07-30T00:08:11.442466Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for i in test1.columns:\n    if test1[i].dtypes == 'object':\n        test1[i]=test1[i].apply(lambda x: hash(str(x))%997)\nfor i in test2.columns:\n    if test2[i].dtypes == 'object':\n        test2[i]=test2[i].apply(lambda x: hash(str(x))%997)\nfor i in test3.columns:\n    if test3[i].dtypes == 'object':\n        test3[i]=test3[i].apply(lambda x: hash(str(x))%997)\nfor i in test4.columns:\n    if test4[i].dtypes == 'object':\n        test4[i]=test4[i].apply(lambda x: hash(str(x))%997)\nfor i in test1.columns:\n    if test5[i].dtypes == 'object':\n        test5[i]=test5[i].apply(lambda x: hash(str(x))%997)\nfor i in test6.columns:\n    if test6[i].dtypes == 'object':\n        test6[i]=test6[i].apply(lambda x: hash(str(x))%997)\nfor i in test1.columns:\n    if test7[i].dtypes == 'object':\n        test7[i]=test7[i].apply(lambda x: hash(str(x))%997)\n","metadata":{"execution":{"iopub.status.busy":"2022-07-30T00:08:11.444293Z","iopub.status.idle":"2022-07-30T00:08:11.444708Z","shell.execute_reply.started":"2022-07-30T00:08:11.444513Z","shell.execute_reply":"2022-07-30T00:08:11.444533Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"result = pd.DataFrame()\nfor idx,model in enumerate(zip(models,models1,models2,models3)):\n    array = []\n    array1 = []\n    array2 = []\n    \n    array+=list(model[1][0].predict_proba(test1)[:,1])\n    array+=list(model[1][0].predict_proba(test2)[:,1])\n    array+=list(model[1][0].predict_proba(test3)[:,1])\n    array+=list(model[1][0].predict_proba(test4)[:,1])\n    array+=list(model[1][0].predict_proba(test5)[:,1])\n    array+=list(model[1][0].predict_proba(test6)[:,1])\n    array+=list(model[1][0].predict_proba(test7)[:,1])\n    \n    array1+=list(model[2][0].predict_proba(test1)[:,1])\n    array1+=list(model[2][0].predict_proba(test2)[:,1])\n    array1+=list(model[2][0].predict_proba(test3)[:,1])\n    array1+=list(model[2][0].predict_proba(test4)[:,1])\n    array1+=list(model[2][0].predict_proba(test5)[:,1])\n    array1+=list(model[2][0].predict_proba(test6)[:,1])\n    array1+=list(model[2][0].predict_proba(test7)[:,1])\n    \n    array2+=list(model[3][0].predict_proba(test1)[:,1])\n    array2+=list(model[3][0].predict_proba(test2)[:,1])\n    array2+=list(model[3][0].predict_proba(test3)[:,1])\n    array2+=list(model[3][0].predict_proba(test4)[:,1])\n    array2+=list(model[3][0].predict_proba(test5)[:,1])\n    array2+=list(model[3][0].predict_proba(test6)[:,1])\n    array2+=list(model[3][0].predict_proba(test7)[:,1])\n          \n    gc.collect()   \n    print(len(array))    \n    \n#     result.append(np.mean(np.array([array,array1]),axis=0))\n    result[f'm0_{idx}'] = array\n    result[f'm1_{idx}'] = array1\n    result[f'm2_{idx}'] = array2\n\ntest1 = test1.replace([np.inf,-np.inf],0)\ntest1.fillna(0,inplace=True)\ntest2 = test2.replace([np.inf,-np.inf],0)\ntest2.fillna(0,inplace=True)\ntest3 = test3.replace([np.inf,-np.inf],0)\ntest3.fillna(0,inplace=True)\ntest4 = test4.replace([np.inf,-np.inf],0)\ntest4.fillna(0,inplace=True)\ntest5 = test5.replace([np.inf,-np.inf],0)\ntest5.fillna(0,inplace=True)\ntest6 = test6.replace([np.inf,-np.inf],0)\ntest6.fillna(0,inplace=True)\ntest7 = test7.replace([np.inf,-np.inf],0)\ntest7.fillna(0,inplace=True)\n\nfor idx,model in enumerate(models):\n    array = []\n    \n    array+=list(model[0].predict_proba(test1)[:,1])\n    array+=list(model[0].predict_proba(test2)[:,1])\n    array+=list(model[0].predict_proba(test3)[:,1])\n    array+=list(model[0].predict_proba(test4)[:,1])\n    array+=list(model[0].predict_proba(test5)[:,1])\n    array+=list(model[0].predict_proba(test6)[:,1])\n    array+=list(model[0].predict_proba(test7)[:,1])\n    \n    result[f'm3_{idx}'] = array\n\n    \n\nresult.head()\n    ","metadata":{"execution":{"iopub.status.busy":"2022-07-30T00:08:11.446371Z","iopub.status.idle":"2022-07-30T00:08:11.447704Z","shell.execute_reply.started":"2022-07-30T00:08:11.447462Z","shell.execute_reply":"2022-07-30T00:08:11.447487Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for idx,i in enumerate(modelNum):\n    for j in [0,1,2,3]:\n        result[f'{i}_pred{j}'] = (result[f'm{j}_{0*idx}'] + result[f'm{j}_{0*idx+1}'] + result[f'm{j}_{0*idx+2}'] + result[f'm{j}_{0*idx+3}'] + result[f'm{j}_{0*idx+4}'])/5","metadata":{"execution":{"iopub.status.busy":"2022-07-30T00:08:11.449041Z","iopub.status.idle":"2022-07-30T00:08:11.450144Z","shell.execute_reply.started":"2022-07-30T00:08:11.449722Z","shell.execute_reply":"2022-07-30T00:08:11.449757Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"result = result.iloc[:,-24:]\nresult","metadata":{"execution":{"iopub.status.busy":"2022-07-30T00:08:11.452071Z","iopub.status.idle":"2022-07-30T00:08:11.454248Z","shell.execute_reply.started":"2022-07-30T00:08:11.454012Z","shell.execute_reply":"2022-07-30T00:08:11.454037Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"predictions = []\n\nfor i in models_stage2:\n    predictions.append(list(i[0].predict_proba(result)[:,1]))","metadata":{"execution":{"iopub.status.busy":"2022-07-30T00:08:11.455696Z","iopub.status.idle":"2022-07-30T00:08:11.456125Z","shell.execute_reply.started":"2022-07-30T00:08:11.455925Z","shell.execute_reply":"2022-07-30T00:08:11.455946Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"result['combined'] = np.mean(predictions,axis=0)\nresult['combined']","metadata":{"execution":{"iopub.status.busy":"2022-07-30T00:08:11.458166Z","iopub.status.idle":"2022-07-30T00:08:11.458630Z","shell.execute_reply.started":"2022-07-30T00:08:11.458420Z","shell.execute_reply":"2022-07-30T00:08:11.458440Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"ids = pd.read_pickle('../input/amexlgbselectedfeatures/ids.pkl')\nsubmission = pd.DataFrame({'customer_ID':ids,'prediction':result['combined']})\nsubmission.to_csv('submission.csv',index=False)","metadata":{"execution":{"iopub.status.busy":"2022-07-30T00:08:11.460364Z","iopub.status.idle":"2022-07-30T00:08:11.460777Z","shell.execute_reply.started":"2022-07-30T00:08:11.460582Z","shell.execute_reply":"2022-07-30T00:08:11.460601Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def plot_submission(df):\n    sns.distplot(df['prediction'])\n    print(df['prediction'].describe())\n    print(len(df[df['prediction']>0.95]))\n    plt.show()   \n\nplot_submission(submission)","metadata":{"execution":{"iopub.status.busy":"2022-07-30T00:08:11.461973Z","iopub.status.idle":"2022-07-30T00:08:11.462380Z","shell.execute_reply.started":"2022-07-30T00:08:11.462181Z","shell.execute_reply":"2022-07-30T00:08:11.462200Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# submission['prediction'] *= .99\n# submission.to_csv('submission.csv',index=False)","metadata":{"execution":{"iopub.status.busy":"2022-07-30T00:08:11.464246Z","iopub.status.idle":"2022-07-30T00:08:11.464682Z","shell.execute_reply.started":"2022-07-30T00:08:11.464471Z","shell.execute_reply":"2022-07-30T00:08:11.464491Z"},"trusted":true},"execution_count":null,"outputs":[]}]}