{"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":"# for Google colab","metadata":{"id":"zT5dMiQK3qD3"}},{"cell_type":"code","source":"from google.colab import drive\ndrive.mount('/content/drive')","metadata":{"executionInfo":{"elapsed":27606,"status":"ok","timestamp":1659651763284,"user":{"displayName":"松田龍","userId":"10818678393291437164"},"user_tz":-540},"id":"_C1se0Es2vQA","outputId":"505c97a9-a649-4460-b941-2091adef9ed4"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%cd ./drive/MyDrive/Colab Notebooks/Kaggle/AMEX/notebook","metadata":{"executionInfo":{"elapsed":567,"status":"ok","timestamp":1659651763847,"user":{"displayName":"松田龍","userId":"10818678393291437164"},"user_tz":-540},"id":"AedahjB92C39","outputId":"994ea0e8-135a-45d2-bba1-c039bba47c21"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## pip installs\n\n```\n# !pip install xxx\n```\n","metadata":{"id":"B73fWukU5DjM"}},{"cell_type":"code","source":"!pip install catboost","metadata":{"executionInfo":{"elapsed":13173,"status":"ok","timestamp":1659651777015,"user":{"displayName":"松田龍","userId":"10818678393291437164"},"user_tz":-540},"id":"pBy4U7Ea5HiK","outputId":"1138923c-ce3e-4b94-ce52-e59d200f5a80"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!pip install --upgrade wandb","metadata":{"executionInfo":{"elapsed":12274,"status":"ok","timestamp":1659651789286,"user":{"displayName":"松田龍","userId":"10818678393291437164"},"user_tz":-540},"id":"h3FZpmHv5r14","outputId":"d2f5a160-39bf-41e9-c23e-406668afc858"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# pre settings","metadata":{"id":"WjzaHeuHYOwx"}},{"cell_type":"markdown","source":"import","metadata":{"id":"x9zk5JVJVhuD"}},{"cell_type":"code","source":"import os\nimport gc\nimport random\nfrom tqdm.notebook import tqdm\nimport scipy as sp\nimport numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nimport itertools\nfrom typing import Tuple, Dict\nfrom sklearn.metrics import confusion_matrix\nfrom sklearn.preprocessing import LabelEncoder\nfrom sklearn.model_selection import StratifiedKFold\nfrom catboost import CatBoostClassifier\nimport wandb","metadata":{"executionInfo":{"elapsed":1327,"status":"ok","timestamp":1659651790594,"user":{"displayName":"松田龍","userId":"10818678393291437164"},"user_tz":-540},"id":"NTSA9KuY1rRD"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"methods","metadata":{"id":"e2Ybs9rpVni7"}},{"cell_type":"code","source":"def seed_everything(seed: int=42) -> None:\n    '''\n    update os seed\n    '''\n    random.seed(seed)\n    np.random.seed(seed)\n    os.environ[\"PYTHONHASHSEED\"] = str(seed)\n\ndef pre_proccesed_data(path: str, suffix='last') -> pd.DataFrame:\n    \"\"\"\n    :path: str - path to data with format pickle\n        ../input/amex-agg-data-pickle/train_agg.pkl\n    \"\"\"\n    data = pd.read_pickle(path, compression=\"gzip\")\n    for col in data.columns:\n        if data[col].dtype=='float16':\n            data[col] = data[col].astype('float32').round(decimals=2).astype('float16')\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    cat_features = [f\"{cf}_{suffix}\" for cf in cat_features]\n    le_encoder = LabelEncoder()\n    \n    for categorical_feature in cat_features:\n        print('\\ncategorical_feature:', categorical_feature)\n        print('before\\n', data[categorical_feature].head(10))\n        data[categorical_feature] = le_encoder.fit_transform(data[categorical_feature])\n        print('after\\n', data[categorical_feature].head(10))\n        #data[categorical_feature] = le_encoder.transform(data[categorical_feature])\n        \n    return data\n\ndef amex_metric_mod(y_true, y_pred) -> Tuple[float, float, float]:\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\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    \n    normalized_gini_coefficient = gini[1]/gini[0]\n    evaluation_metric = 0.5 * (normalized_gini_coefficient + top_four)\n\n    return normalized_gini_coefficient, top_four, evaluation_metric","metadata":{"executionInfo":{"elapsed":397,"status":"ok","timestamp":1659651790986,"user":{"displayName":"松田龍","userId":"10818678393291437164"},"user_tz":-540},"id":"4leMAE1U1rRE"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"setting","metadata":{"id":"K9mJOFPLVjc0"}},{"cell_type":"code","source":"# wandb class\nclass WANDB:\n  PROJECT = 'AMEX'\n  ENTITY = 'nyantaro'\n  RUNNAME_PREFIX = 'AMEX_CATBOOST'","metadata":{"executionInfo":{"elapsed":5,"status":"ok","timestamp":1659651790987,"user":{"displayName":"松田龍","userId":"10818678393291437164"},"user_tz":-540},"id":"coh361lW3u50"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# pd display option\npd.set_option('display.max_rows', 500)\npd.set_option('display.max_columns', 500)\npd.set_option('display.width', 1000)\n\n# Log in to WANDB\nwith  open('../wandb/wandb_api_key.txt', 'r') as f:\n WANDB_API_KEY = f.read().rstrip('\\n')\n\ntry:\n    wandb.login(key=WANDB_API_KEY) # please use your api key of wandb\n    anony = None\nexcept:\n    anony = \"must\"\n    print('If you want to use your W&B account, go to Add-ons -> Secrets and provide your W&B access token. Use the Label name as wandb_api_key. \\nGet your W&B access token from here: https://wandb.ai/authorize')\n\n# set dataframe and feature columns\ntrain_df = pre_proccesed_data('../input/amex-agg-data-pickle/train_agg.pkl')\nFEATURES = [col for col in train_df.columns if col not in ['target']]","metadata":{"executionInfo":{"elapsed":36336,"status":"ok","timestamp":1659651827319,"user":{"displayName":"松田龍","userId":"10818678393291437164"},"user_tz":-540},"id":"ssqol1ksVwh3","outputId":"ba91fbdf-5a42-4ed9-a7a3-de3db070937a"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"based notebook: https://www.kaggle.com/code/kartushovdanil/baseline-amex-catboost-blending-wandb","metadata":{"id":"kSiag3SQLPzu"}},{"cell_type":"markdown","source":"# catboost","metadata":{"id":"YjR3wLBsPelj"}},{"cell_type":"code","source":"# parameter class\nclass CONFIG:\n    SEED = 42\n    FOLDS = 10\n    ITERATIONS = 2000\n    START_FOLD = 1\n    VERBOSE = 100\nseed_everything(CONFIG.SEED)","metadata":{"id":"H5FfHi07XP0x"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%mkdir ../models\n\nimportance = []\ny_test = pd.DataFrame()\ngc.collect()\nskf = StratifiedKFold(n_splits=CONFIG.FOLDS, shuffle=True, random_state=CONFIG.SEED)\n\nfor i, (train_idx, valid_idx) in enumerate(tqdm(skf.split(train_df[FEATURES], train_df.target), total=skf.get_n_splits(), desc=\"k-fold\")):\n    if i+1 < CONFIG.START_FOLD:\n      continue\n    num_fold = i + 1\n    run = wandb.init(project=WANDB.PROJECT, entity=WANDB.ENTITY,\n                     settings=wandb.Settings(start_method=\"fork\"),\n                     dir='..')\n    wandb.config.seed = CONFIG.SEED\n    wandb.config.folds = CONFIG.FOLDS\n    wandb.config.iterations = CONFIG.ITERATIONS\n    wandb.run.name = f'{WANDB.RUNNAME_PREFIX}_{num_fold}'\n\n    print('#'*50)\n    print(f'Fold: {num_fold}')\n    \n    # Split data to folds\n    tr_x, tr_y = train_df.iloc[train_idx].reset_index(drop=True)[FEATURES], train_df.iloc[train_idx].reset_index(drop=True)['target']\n    print(f'train X shape: {tr_x.shape}, train Y shape: {tr_y.shape}')\n    val_x, val_y = train_df.iloc[valid_idx].reset_index(drop=True)[FEATURES], train_df.iloc[valid_idx].reset_index(drop=True)['target']\n    print(f'valid X shape: {tr_x.shape}, valid Y shape: {tr_y.shape}')\n    print('#'*50)\n    print(' ')\n\n    # Save Model\n    try:\n        clf = CatBoostClassifier(iterations=CONFIG.ITERATIONS, random_state=CONFIG.SEED, task_type='GPU', \n                                 snapshot_file='..', learning_rate=0.008449)\n        clf.fit(tr_x, tr_y, eval_set=[(val_x, val_y)], verbose=CONFIG.VERBOSE)\n        importance.append(clf.get_feature_importance())\n    finally:\n        clf.save_model(f'../models/catboost_amex_model_{num_fold}.cbm', format='cbm')\n        _y_values = clf.get_evals_result()['learn']['Logloss']\n        _table = wandb.Table(data=[[x+1, y] for (x, y) in enumerate(_y_values)], columns = [\"epoc\", \"Logloss\"])\n        wandb.log({\"my_custom_plot_id\" : \n                  wandb.plot.line(_table, \n                                  \"epoc\", \"Logloss\",\n                                  title=\"Custom Y vs X Line Plot\")})\n        artifact = wandb.Artifact(name=f'catboost_{num_fold}of{CONFIG.FOLDS}', type='model')\n        artifact.add_file(f'../models/catboost_amex_model_{num_fold}.cbm')\n        run.log_artifact(artifact)\n        \n        print(' ')\n        print('Model has been saved')\n        print(' ')\n    \n    print(' ')\n    preds = clf.predict_proba(val_x)[:, 1]\n    _normalized_gini_coefficient, _top_four, _evaluation_metric = amex_metric_mod(val_y, preds)\n    print(f'NORMALIZED_GINI_COEFFICIENT: {_normalized_gini_coefficient:.6f}')\n    print(f'TOP_FOUR: {_top_four:.6f}')\n    print(f'KAGGLE METRICS: {_evaluation_metric:.6f}')\n    \n    wandb.log({'normalized_gini_coefficient': _normalized_gini_coefficient, \n              'top_four': _top_four, \n              'kaggle_metric': _evaluation_metric})\n    \n    #CLEAR RAM\n    del tr_x, tr_y, val_x, val_y, preds\n    gc.collect()\n    print(' ')\n    print(' ')\n    break\nrun.finish()\n    \n        ","metadata":{"id":"USzSmCeC1rRF","executionInfo":{"status":"ok","timestamp":1659482181707,"user_tz":-540,"elapsed":142152,"user":{"displayName":"松田龍","userId":"10818678393291437164"}},"outputId":"92442536-3ffa-4769-fe15-f2b2327fa45f"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Use saved model","metadata":{"id":"yyvLVKbELKPI"}},{"cell_type":"markdown","source":"load from wandb","metadata":{"id":"_1TGvU45lp9f"}},{"cell_type":"code","source":"run = wandb.init()\nMODEL_APIS = [f'nyantaro/AMEX/catboost_{i}of10:v1' for i in range(1, 11)]\nARTIFACT_DIRS = list()\nfor n, _model_api in enumerate(MODEL_APIS):\n  artifact = run.use_artifact(_model_api, type='model')\n  ARTIFACT_DIRS.append(artifact.download()+f'/catboost_amex_model_{n+1}.cbm')\nrun.finish()","metadata":{"id":"OUMqvS4MQvCH"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"select save data manualy","metadata":{"id":"p8WZ6femluOG"}},{"cell_type":"markdown","source":"from artifacts","metadata":{"id":"fnEcpBJwWE7P"}},{"cell_type":"code","source":"ARTIFACT_DIRS = ['./artifacts/catboost_1of10:v1/catboost_amex_model_1.cbm','./artifacts/catboost_2of10:v1/catboost_amex_model_2.cbm',\n                 './artifacts/catboost_3of10:v1/catboost_amex_model_3.cbm','./artifacts/catboost_9of10:v1/catboost_amex_model_9.cbm',]","metadata":{"id":"Qd-TefS2lxAw"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"from models","metadata":{"id":"sJIKTyhnWHNK"}},{"cell_type":"code","source":"ARTIFACT_DIRS = [f'../models/catboost_amex_model_{i}.cbm' for i in range(1, 11)]","metadata":{"id":"ud-y_p1aWDCf","executionInfo":{"status":"ok","timestamp":1659651827320,"user_tz":-540,"elapsed":28,"user":{"displayName":"松田龍","userId":"10818678393291437164"}}},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"ARTIFACT_DIRS","metadata":{"executionInfo":{"elapsed":26,"status":"ok","timestamp":1659651827320,"user":{"displayName":"松田龍","userId":"10818678393291437164"},"user_tz":-540},"id":"rfZ7Q80JRhAB","outputId":"6657bb32-b626-465c-a6b9-40a78ab460fc"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_df = pre_proccesed_data('../input/amex-agg-data-pickle/test_agg.pkl')\ny_test = pd.DataFrame()\nfor i, _ARTIFACT_DIR in enumerate(tqdm(ARTIFACT_DIRS)):\n\n  print('model: ', _ARTIFACT_DIR.split('/')[-1])\n  from_file = CatBoostClassifier(task_type='GPU')\n\n  print('start loading\\n---------')\n  from_file.load_model(_ARTIFACT_DIR)\n  preds_test = from_file.predict_proba(test_df)[:, 1]\n  y_test[f'fold_{i+1}'] = preds_test\n  \n  print('---------\\nfinish loading')\n  del preds_test","metadata":{"id":"9h_r-YXMLnsr"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"ssub = pd.read_csv('../input/amex-default-prediction/sample_submission.csv', index_col='customer_ID')\nssub['prediction'] = y_test.T.mean().values * 0.99\nssub.to_csv('../output/submission.csv')\n\nssub","metadata":{"id":"jaaVY-v9WevP"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"ntails test df","metadata":{"id":"l0LojgNm9aud"}},{"cell_type":"code","source":"_FNAME = 'test'\ntest_df = pre_proccesed_data('../input/amex-agg-data-pickle/test_agg.pkl')\nN_TAIL = 3\nfor i in tqdm(range(2, N_TAIL+1)):\n  _ntail_df = pre_proccesed_data(f'../input/amex-ntail-data-pickle/{_FNAME}_tail{i}.pkl', suffix=f'tail{i}')\n  test_df = pd.concat([test_df, _ntail_df], axis=1)\ntest_df","metadata":{"id":"BYWB_raA9dZR"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_df = concat_df.copy()\ndel concat_df\ny_test = pd.DataFrame()\nfor i, _ARTIFACT_DIR in enumerate(tqdm(ARTIFACT_DIRS)):\n\n  print('model: ', _ARTIFACT_DIR.split('/')[-1])\n  from_file = CatBoostClassifier(task_type='GPU')\n\n  print('start loading\\n---------')\n  from_file.load_model(_ARTIFACT_DIR)\n  preds_test = from_file.predict_proba(test_df)[:, 1]\n  y_test[f'fold_{i+1}'] = preds_test\n  \n  print('---------\\nfinish loading')\n  del preds_test","metadata":{"id":"QEmOBRHD9wgy","executionInfo":{"status":"ok","timestamp":1659654329633,"user_tz":-540,"elapsed":2076109,"user":{"displayName":"松田龍","userId":"10818678393291437164"}},"outputId":"94472317-a2d6-4c06-8105-18f101031a42"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"ssub = pd.read_csv('../input/amex-default-prediction/sample_submission.csv', index_col='customer_ID')\nssub['prediction'] = y_test.T.mean().values * 0.99\nssub.to_csv('../output/submission.csv')\n\nssub","metadata":{"id":"dBjtNYkS90Gl","executionInfo":{"status":"ok","timestamp":1659654339556,"user_tz":-540,"elapsed":9944,"user":{"displayName":"松田龍","userId":"10818678393291437164"}},"outputId":"caebea44-0100-42ca-c2b0-b5868bff68d5"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Train data","metadata":{"id":"ep680tp4tlwx"}},{"cell_type":"code","source":"train_df.drop(columns='target').columns","metadata":{"executionInfo":{"elapsed":2846,"status":"ok","timestamp":1658317104836,"user":{"displayName":"松田龍","userId":"10818678393291437164"},"user_tz":-540},"id":"F7tP4afirYkR","outputId":"cc6f49c4-c865-4807-ee56-c53dd20b55c7"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"ARTIFACT_DIRS = [f'./artifacts/catboost_{i}of10:v1/catboost_amex_model_{i}.cbm' for i in range(1, 11)]\nARTIFACT_DIRS","metadata":{"executionInfo":{"elapsed":4,"status":"ok","timestamp":1658317104836,"user":{"displayName":"松田龍","userId":"10818678393291437164"},"user_tz":-540},"id":"jnMZofpVQ6PY","outputId":"254fb53d-448e-4099-d717-484c14f7e2e8"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# feature_importance dataframe\nfrom_file = CatBoostClassifier(task_type='GPU')\nfor _ARTIFACT_DIR in ARTIFACT_DIRS:\n  print('\\nDirectory: ', _ARTIFACT_DIR, '\\n---------')\n  from_file.load_model(_ARTIFACT_DIR)\n  feature_importance = from_file.get_feature_importance()\n  tick_label = train_df.drop(columns='target').columns\n  fimportance_df = pd.DataFrame(feature_importance, index=tick_label)\n  fimportance_df\n\n  # plot\n  fig, ax = plt.subplots(1, 1, figsize=(10, 10))\n  fimportance_df.iloc[0:30,:].sort_values(by=0).plot(kind='barh', ax=ax)\n\n  plt.xlabel('importance')\n  plt.ylabel('features')\n  plt.grid()\n  plt.show()\n","metadata":{"executionInfo":{"elapsed":14195,"status":"ok","timestamp":1658317571338,"user":{"displayName":"松田龍","userId":"10818678393291437164"},"user_tz":-540},"id":"Aaj7aBQIuryK","outputId":"be0d0748-cba1-44f6-a162-a2e8d64616a4"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"fimportance_df.sort_values(by=0).to_csv('../output/fimportance_df.csv')","metadata":{"id":"2QkZRLEWSizn"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# with only high rate columns","metadata":{"id":"ld-8QrylVZCD"}},{"cell_type":"code","source":"# parameter class\nclass CONFIG:\n    SEED = 42\n    FOLDS = 10\n    ITERATIONS = 2000\n    START_FOLD = 1\n    FEATURETOP = 0\nseed_everything(CONFIG.SEED)","metadata":{"id":"WCjaR-W-XSWE"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"fimportance_df = pd.read_csv('../output/fimportance_df.csv', index_col='Unnamed: 0')","metadata":{"id":"BE9kd130aE-7"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%mkdir ../models\n\nimportance = []\ny_test = pd.DataFrame()\ngc.collect()\nskf = StratifiedKFold(n_splits=CONFIG.FOLDS, shuffle=True, random_state=CONFIG.SEED)\nfor FEATURETOP in range(100, 1000, 100):\n  CONFIG.FEATURETOP = FEATURETOP\n  FEATURES = fimportance_df.sort_values(by='0', ascending=False).index[0:CONFIG.FEATURETOP]\n  train_idx, valid_idx = next(skf.split(train_df[FEATURES], train_df.target))\n  run = wandb.init(project=WANDB.PROJECT, entity=WANDB.ENTITY,\n                  settings=wandb.Settings(start_method=\"fork\"),\n                  dir='..')\n  wandb.config.seed = CONFIG.SEED\n  wandb.config.folds = CONFIG.FOLDS\n  wandb.config.iterations = CONFIG.ITERATIONS\n  wandb.config.featuretop = CONFIG.FEATURETOP\n  wandb.run.name = f'{WANDB.RUNNAME_PREFIX}_{num_fold}_ftop{CONFIG.FEATURETOP}'\n\n  print('#'*50)\n  print(f'Fold: {num_fold}\\nFeatures: {CONFIG.FEATURETOP}')\n  \n  # Split data to folds\n  tr_x, tr_y = train_df.iloc[train_idx].reset_index(drop=True)[FEATURES], train_df.iloc[train_idx].reset_index(drop=True)['target']\n  print(f'train X shape: {tr_x.shape}, train Y shape: {tr_y.shape}')\n  val_x, val_y = train_df.iloc[valid_idx].reset_index(drop=True)[FEATURES], train_df.iloc[valid_idx].reset_index(drop=True)['target']\n  print(f'valid X shape: {val_x.shape}, valid Y shape: {val_y.shape}')\n  print('#'*50)\n  print(' ')\n\n  # Save Model\n  try:\n      clf = CatBoostClassifier(iterations=CONFIG.ITERATIONS, random_state=CONFIG.SEED, task_type='GPU', \n                              snapshot_file='..', learning_rate=0.008449)\n      clf.fit(tr_x, tr_y, eval_set=[(val_x, val_y)], verbose=100)\n      importance.append(clf.get_feature_importance())\n  finally:\n      clf.save_model(f'../models/catboost_amex_model_{num_fold}.cbm', format='cbm')\n      _y_values = clf.get_evals_result()['learn']['Logloss']\n      _table = wandb.Table(data=[[x+1, y] for (x, y) in enumerate(_y_values)], columns = [\"epoc\", \"Logloss\"])\n      wandb.log({\"my_custom_plot_id\" : \n                wandb.plot.line(_table, \n                                \"epoc\", \"Logloss\",\n                                title=\"Custom Y vs X Line Plot\")})\n      artifact = wandb.Artifact(name=f'catboost_{num_fold}of{CONFIG.FOLDS}_ftop{CONFIG.FEATURETOP}', type='model')\n      artifact.add_file(f'../models/catboost_amex_model_{num_fold}.cbm')\n      run.log_artifact(artifact)\n      \n      print(' ')\n      print('Model has been saved')\n      print(' ')\n  \n  print(' ')\n  preds = clf.predict_proba(val_x)[:, 1]\n  _normalized_gini_coefficient, _top_four, _evaluation_metric = amex_metric_mod(val_y, preds)\n  print(f'NORMALIZED_GINI_COEFFICIENT: {_normalized_gini_coefficient:.6f}')\n  print(f'TOP_FOUR: {_top_four:.6f}')\n  print(f'KAGGLE METRICS: {_evaluation_metric:.6f}')\n  \n  wandb.log({'normalized_gini_coefficient': _normalized_gini_coefficient, \n            'top_four': _top_four, \n            'kaggle_metric': _evaluation_metric})\n  \n  #CLEAR RAM\n  del tr_x, tr_y, val_x, val_y, preds\n  gc.collect()\n  print(' ')\n  print(' ')\n\nrun.finish()\n    \n        ","metadata":{"id":"OGHKXAuUW3Id"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Hyper tuning parameter","metadata":{"id":"YX21lN0uiSFn"}},{"cell_type":"code","source":"# parameter class\nclass CONFIG:\n    SEED = 42\n    FOLDS = 10\n    ITERATIONS = 20000\n    START_FOLD = 1\n    VERBOSE = 2000\n    BREAKLOOP = False\nseed_everything(CONFIG.SEED)","metadata":{"id":"v8AY7l7biVEz"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"param = {'objective': 'Logloss',\n         'depth': 11,\n         'random_strength': 0.00803073910474994,\n         'learning_rate': 0.009992242536155601, \n         'bootstrap_type': 'Bayesian',\n         'bagging_temperature': 1.2390740088643806,\n         'eval_metric': 'Logloss'\n         }","metadata":{"id":"Ic7X_pUci6Qf"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"param = {'objective': 'CrossEntropy',\n         'depth': 9,\n         'random_strength': 0.4988877463209964,\n         'learning_rate': 0.01, \n         'bootstrap_type': 'Bernoulli',\n         'subsample': 0.8812157558028204,\n         'eval_metric': 'NormalizedGini'\n         }","metadata":{"id":"vofgIzJC0AhT"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%mkdir ../models\n\nimportance = []\ny_test = pd.DataFrame()\ngc.collect()\nskf = StratifiedKFold(n_splits=CONFIG.FOLDS, shuffle=True, random_state=CONFIG.SEED)\n\nfor i, (train_idx, valid_idx) in enumerate(tqdm(skf.split(train_df[FEATURES], train_df.target), total=skf.get_n_splits(), desc=\"k-fold\")):\n    if i+1 < CONFIG.START_FOLD:\n      continue\n    num_fold = i + 1\n    run = wandb.init(project=WANDB.PROJECT, entity=WANDB.ENTITY,\n                     settings=wandb.Settings(start_method=\"fork\"),\n                     dir='..')\n    wandb.config.seed = CONFIG.SEED\n    wandb.config.folds = CONFIG.FOLDS\n    wandb.config.iterations = CONFIG.ITERATIONS\n    wandb.run.name = f'{WANDB.RUNNAME_PREFIX}_{num_fold}'\n\n    print('#'*50)\n    print(f'Fold: {num_fold}')\n    \n    # Split data to folds\n    tr_x, tr_y = train_df.iloc[train_idx].reset_index(drop=True)[FEATURES], train_df.iloc[train_idx].reset_index(drop=True)['target']\n    print(f'train X shape: {tr_x.shape}, train Y shape: {tr_y.shape}')\n    val_x, val_y = train_df.iloc[valid_idx].reset_index(drop=True)[FEATURES], train_df.iloc[valid_idx].reset_index(drop=True)['target']\n    print(f'valid X shape: {tr_x.shape}, valid Y shape: {tr_y.shape}')\n    print('#'*50)\n    print(' ')\n\n    # Save Model\n    try:\n        clf = CatBoostClassifier(**param, \n                                 iterations=CONFIG.ITERATIONS, random_state=CONFIG.SEED, task_type='GPU', \n                                 use_best_model=True,\n                                 snapshot_file='..')\n        clf.fit(tr_x, tr_y, eval_set=[(val_x, val_y)], verbose=CONFIG.VERBOSE)\n        importance.append(clf.get_feature_importance())\n    finally:\n        clf.save_model(f'../models/catboost_amex_model_{num_fold}.cbm', format='cbm')\n        _y_values = clf.get_evals_result()['learn'][param['objective']]\n        _table = wandb.Table(data=[[x+1, y] for (x, y) in enumerate(_y_values)], columns = [\"epoc\", param['objective']])\n        wandb.log({\"my_custom_plot_id\" : \n                  wandb.plot.line(_table, \n                                  \"epoc\", param[\"objective\"],\n                                  title=\"Custom Y vs X Line Plot\")})\n        artifact = wandb.Artifact(name=f'catboost_{num_fold}of{CONFIG.FOLDS}', type='model')\n        artifact.add_file(f'../models/catboost_amex_model_{num_fold}.cbm')\n        run.log_artifact(artifact)\n        \n        print(' ')\n        print('Model has been saved')\n        print(' ')\n    \n    print(' ')\n    preds = clf.predict_proba(val_x)[:, 1]\n    _normalized_gini_coefficient, _top_four, _evaluation_metric = amex_metric_mod(val_y, preds)\n    print(f'NORMALIZED_GINI_COEFFICIENT: {_normalized_gini_coefficient:.6f}')\n    print(f'TOP_FOUR: {_top_four:.6f}')\n    print(f'KAGGLE METRICS: {_evaluation_metric:.6f}')\n    \n    wandb.log({'normalized_gini_coefficient': _normalized_gini_coefficient, \n              'top_four': _top_four, \n              'kaggle_metric': _evaluation_metric})\n    \n    #CLEAR RAM\n    del tr_x, tr_y, val_x, val_y, preds\n    gc.collect()\n    print(' ')\n    print(' ')\n    if CONFIG.BREAKLOOP:\n      break\n\nrun.finish()\n    \n        ","metadata":{"executionInfo":{"elapsed":16051788,"status":"ok","timestamp":1658811210742,"user":{"displayName":"松田龍","userId":"10818678393291437164"},"user_tz":-540},"id":"WEMfn3Ydihkh","outputId":"9d8bc541-6d15-4933-93d4-b4baaacc46d0"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"_y_values = clf.get_evals_result()['learn'][param['objective']]\n_table = wandb.Table(data=[[x+1, y] for (x, y) in enumerate(_y_values)], columns = [\"epoc\", \"Logloss\"])\nwandb.log({\"my_custom_plot_id\" : \n          wandb.plot.line(_table, \n                          \"epoc\", \"Logloss\",\n                          title=\"Custom Y vs X Line Plot\")})\nartifact = wandb.Artifact(name=f'catboost_{num_fold}of{CONFIG.FOLDS}', type='model')\nartifact.add_file(f'../models/catboost_amex_model_{num_fold}.cbm')\nrun.log_artifact(artifact)\n\nprint(' ')\nprint('Model has been saved')\nprint(' ')\n\nprint(' ')\npreds = clf.predict_proba(val_x)[:, 1]\n_normalized_gini_coefficient, _top_four, _evaluation_metric = amex_metric_mod(val_y, preds)\nprint(f'NORMALIZED_GINI_COEFFICIENT: {_normalized_gini_coefficient:.6f}')\nprint(f'TOP_FOUR: {_top_four:.6f}')\nprint(f'KAGGLE METRICS: {_evaluation_metric:.6f}')\n\nwandb.log({'normalized_gini_coefficient': _normalized_gini_coefficient, \n      'top_four': _top_four, \n      'kaggle_metric': _evaluation_metric})\n\n#CLEAR RAM\ndel tr_x, tr_y, val_x, val_y, preds\ngc.collect()\nprint(' ')\nprint(' ')\nrun.finish()","metadata":{"executionInfo":{"elapsed":531,"status":"error","timestamp":1658663762758,"user":{"displayName":"松田龍","userId":"10818678393291437164"},"user_tz":-540},"id":"yjwCn_Rb6BZ9","outputId":"b4a861c2-ca6c-4403-87ca-e68167b34b72"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"clf.get_evals_result()['learn'][param['objective']]","metadata":{"executionInfo":{"elapsed":276,"status":"ok","timestamp":1658664304602,"user":{"displayName":"松田龍","userId":"10818678393291437164"},"user_tz":-540},"id":"WOeG1Bdj6OWy","outputId":"f8080fac-f67c-4ae8-f65b-627d68b0e619"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"id":"YlwnO75u6Z8A"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# new feature","metadata":{"id":"XY-RYMDhNA9X"}},{"cell_type":"markdown","source":"## create new feature df","metadata":{"id":"FuKLW1PU2TRn"}},{"cell_type":"markdown","source":"**import**","metadata":{"id":"tfIbn404PSxY"}},{"cell_type":"code","source":"from typing import Tuple, List","metadata":{"executionInfo":{"elapsed":24,"status":"ok","timestamp":1659612626568,"user":{"displayName":"松田龍","userId":"10818678393291437164"},"user_tz":-540},"id":"Byn7fopzXd7E"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"methods","metadata":{"id":"E63pqQ7INI1K"}},{"cell_type":"code","source":"def read_data(path: str, groupby_col: str, tail=2) -> pd.DataFrame:\n    df = pd.read_parquet(path).groupby(groupby_col).tail(tail).set_index(groupby_col, drop=True).sort_index()\n    return df\n\ndef n_tail_list(df: pd.DataFrame, n_tail=3) -> List[List]:\n    INDEX_LIST = df.index.unique()\n    tail_list = []\n\n    for i in range(0, n_tail):\n        tail_list.append([])\n\n    for _index in tqdm(INDEX_LIST):\n        _byIndex_df = df.loc[_index, :]\n        if type(_byIndex_df) == pd.Series:\n            _byIndex_df = pd.DataFrame(_byIndex_df).T\n        _columns_len = len(_byIndex_df.columns)\n        _df_len = len(_byIndex_df)\n\n        if _df_len < n_tail:\n            for i in range(0, n_tail-_df_len):\n                tail_list[i].append([np.nan] *_columns_len)\n\n        for i, j in enumerate(range(n_tail-_df_len, n_tail)):\n            tail_list[j].append(_byIndex_df.iloc[i, :].tolist())\n    return tail_list","metadata":{"executionInfo":{"elapsed":23,"status":"ok","timestamp":1659612626569,"user":{"displayName":"松田龍","userId":"10818678393291437164"},"user_tz":-540},"id":"V3oIwZpYXR4-"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for fname in ['test']:\n    print(fname, '\\n-------')\n    _N_TAIL = 2\n    _df = read_data(f'../input/amex-data-integer-dtypes-parquet-format/{fname}.parquet', \n                        'customer_ID', _N_TAIL).drop(columns='S_2')\n\n    _INDEX_LIST = _df.index.unique()\n    _COLUMN_LIST = _df.columns\n    tail_list = n_tail_list(_df, _N_TAIL)\n    del _df\n    for i in range(0, _N_TAIL):\n        _df = pd.DataFrame(tail_list[i], index=_INDEX_LIST, columns=_COLUMN_LIST).add_suffix(f'_tail{_N_TAIL-i}')\n        _df.to_pickle(f'../input/amex-ntail-data-pickle/{fname}_tail{_N_TAIL-i}.pkl', compression=\"gzip\")\n        print(_df.head(3))\n        del _df","metadata":{"id":"SYvehkrWNZ9P","outputId":"8656f05a-41d7-4811-8a4e-80272a421909"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"for reduce RAM","metadata":{"id":"nybFHc-JTZhb"}},{"cell_type":"code","source":"def n_tail_ithOnly(df: pd.DataFrame, ith: int) -> List:\n  _INDEX_LIST = df.index.unique()\n  ith_list = []\n  _COLUMNS_LEN = len(df.columns)\n  for _index in tqdm(_INDEX_LIST):\n      _byIndex_df = df.loc[_index, :]\n      if type(_byIndex_df) == pd.Series:\n          _byIndex_df = pd.DataFrame(_byIndex_df).T\n      _n_tails = len(_byIndex_df)\n      if _n_tails < ith:\n        ith_list.append([np.nan] *_COLUMNS_LEN)\n      else:\n        ith_list.append(_byIndex_df.iloc[_n_tails-ith, :].tolist())      \n  \n  return ith_list","metadata":{"id":"tCMC2yqMTvBE","executionInfo":{"status":"ok","timestamp":1659612694999,"user_tz":-540,"elapsed":414,"user":{"displayName":"松田龍","userId":"10818678393291437164"}}},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for _N_TAIL in [4, 5]:\n  fname = 'test'\n  print(fname, '\\n-------')\n  _df = read_data(f'../input/amex-data-integer-dtypes-parquet-format/{fname}.parquet', \n                      'customer_ID', _N_TAIL).drop(columns='S_2')\n  _INDEX_LIST = _df.index.unique()\n  _COLUMN_LIST = _df.columns\n  _tail_list = n_tail_ithOnly(_df, _N_TAIL)\n  _df = pd.DataFrame(_tail_list, index=_INDEX_LIST, columns=_COLUMN_LIST).add_suffix(f'_tail{_N_TAIL}')\n  _df.to_pickle(f'../input/amex-ntail-data-pickle/{fname}_tail{_N_TAIL}.pkl', compression=\"gzip\")\n  print(_df.head(3))\n  del _INDEX_LIST, _COLUMN_LIST, tail_list, _df","metadata":{"id":"6jlmb1KATY6a","outputId":"e430311b-f865-43ad-efcb-f41571381b0a","executionInfo":{"status":"ok","timestamp":1659615504642,"user_tz":-540,"elapsed":2171867,"user":{"displayName":"松田龍","userId":"10818678393291437164"}}},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## learning with the new features","metadata":{"id":"Znn9QdPo2WY-"}},{"cell_type":"markdown","source":"concat df","metadata":{"id":"UJEhkGxloSGM"}},{"cell_type":"code","source":"_FNAME = 'train'\nconcat_df = train_df.copy()\nN_TAIL = 3\nfor i in tqdm(range(2, N_TAIL+1)):\n  _ntail_df = pre_proccesed_data(f'../input/amex-ntail-data-pickle/{_FNAME}_tail{i}.pkl', suffix=f'tail{i}')\n  concat_df = pd.concat([concat_df, _ntail_df], axis=1)\nFEATURES = [col for col in concat_df.drop(columns='target').columns]\ndel train_df\nconcat_df","metadata":{"id":"5MVPN9Q6oUco","executionInfo":{"status":"ok","timestamp":1659525090586,"user_tz":-540,"elapsed":33602,"user":{"displayName":"松田龍","userId":"10818678393291437164"}},"outputId":"08a102de-948e-44cd-9f7a-fcf255a319e0"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"catboost","metadata":{"id":"aWx2skVcoU9s"}},{"cell_type":"code","source":"# wandb class\nclass WANDB:\n  PROJECT = 'AMEX'\n  ENTITY = 'nyantaro'\n  RUNNAME_PREFIX = f'AMEX_CB_TAIL{N_TAIL}'\n\n# parameter class\nclass CONFIG:\n    SEED = 42\n    FOLDS = 10\n    ITERATIONS = 2000\n    START_FOLD = 1\n    VERBOSE = 100\nseed_everything(CONFIG.SEED)","metadata":{"id":"KeWT0oj6sU7l"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%mkdir ../models\n\nimportance = []\ny_test = pd.DataFrame()\ngc.collect()\nskf = StratifiedKFold(n_splits=CONFIG.FOLDS, shuffle=True, random_state=CONFIG.SEED)\n\nfor i, (train_idx, valid_idx) in enumerate(tqdm(skf.split(concat_df[FEATURES], concat_df.target), total=skf.get_n_splits(), desc=\"k-fold\")):\n    if i+1 < CONFIG.START_FOLD:\n      continue\n    num_fold = i + 1\n    run = wandb.init(project=WANDB.PROJECT, entity=WANDB.ENTITY,\n                     settings=wandb.Settings(start_method=\"fork\"),\n                     dir='..')\n    wandb.config.seed = CONFIG.SEED\n    wandb.config.folds = CONFIG.FOLDS\n    wandb.config.iterations = CONFIG.ITERATIONS\n    wandb.run.name = f'{WANDB.RUNNAME_PREFIX}_{num_fold}'\n\n    print('#'*50)\n    print(f'Fold: {num_fold}')\n    \n    # Split data to folds\n    tr_x, tr_y = concat_df.iloc[train_idx].reset_index(drop=True)[FEATURES], concat_df.iloc[train_idx].reset_index(drop=True)['target']\n    print(f'train X shape: {tr_x.shape}, train Y shape: {tr_y.shape}')\n    val_x, val_y = concat_df.iloc[valid_idx].reset_index(drop=True)[FEATURES], concat_df.iloc[valid_idx].reset_index(drop=True)['target']\n    print(f'valid X shape: {tr_x.shape}, valid Y shape: {tr_y.shape}')\n    print('#'*50)\n    print(' ')\n\n    # Save Model\n    try:\n        clf = CatBoostClassifier(iterations=CONFIG.ITERATIONS, random_state=CONFIG.SEED, task_type='GPU', \n                                 snapshot_file='..', learning_rate=0.008449)\n        clf.fit(tr_x, tr_y, eval_set=[(val_x, val_y)], verbose=CONFIG.VERBOSE)\n        importance.append(clf.get_feature_importance())\n    finally:\n        clf.save_model(f'../models/catboost_amex_model_{num_fold}.cbm', format='cbm')\n        _y_values = clf.get_evals_result()['learn']['Logloss']\n        _table = wandb.Table(data=[[x+1, y] for (x, y) in enumerate(_y_values)], columns = [\"epoc\", \"Logloss\"])\n        wandb.log({\"my_custom_plot_id\" : \n                  wandb.plot.line(_table, \n                                  \"epoc\", \"Logloss\",\n                                  title=\"Custom Y vs X Line Plot\")})\n        artifact = wandb.Artifact(name=f'catboost_{num_fold}of{CONFIG.FOLDS}_tail{N_TAIL}', type='model')\n        artifact.add_file(f'../models/catboost_amex_model_{num_fold}.cbm')\n        run.log_artifact(artifact)\n        \n        print(' ')\n        print('Model has been saved')\n        print(' ')\n    \n    print(' ')\n    preds = clf.predict_proba(val_x)[:, 1]\n    _normalized_gini_coefficient, _top_four, _evaluation_metric = amex_metric_mod(val_y, preds)\n    print(f'NORMALIZED_GINI_COEFFICIENT: {_normalized_gini_coefficient:.6f}')\n    print(f'TOP_FOUR: {_top_four:.6f}')\n    print(f'KAGGLE METRICS: {_evaluation_metric:.6f}')\n    \n    wandb.log({'normalized_gini_coefficient': _normalized_gini_coefficient, \n              'top_four': _top_four, \n              'kaggle_metric': _evaluation_metric})\n    \n    #CLEAR RAM\n    del tr_x, tr_y, val_x, val_y, preds\n    gc.collect()\n    print(' ')\n    print(' ')\n    break\nrun.finish()\n    \n        ","metadata":{"id":"G1NgwVlAsU7l","executionInfo":{"status":"ok","timestamp":1659484436649,"user_tz":-540,"elapsed":160965,"user":{"displayName":"松田龍","userId":"10818678393291437164"}},"outputId":"4060af3d-7475-466b-815e-11ac143cc484"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"ARTIFACT_DIRS = [f'../models/catboost_amex_model_{num_fold}.cbm']\n# feature_importance dataframe\nfrom_file = CatBoostClassifier(task_type='GPU')\nfor _artifact_dir in ARTIFACT_DIRS:\n  print('\\nDirectory: ', _artifact_dir, '\\n---------')\n  from_file.load_model(_artifact_dir)\n  feature_importance = from_file.get_feature_importance()\n  tick_label = concat_df.drop(columns='target').columns\n  fimportance_df = pd.DataFrame(feature_importance, index=tick_label)\n  fimportance_df\n\n  # plot\n  fig, ax = plt.subplots(1, 1, figsize=(10, 10))\n  fimportance_df.iloc[:30,:].sort_values(by=0).plot(kind='barh', ax=ax)\n\n  plt.xlabel('importance')\n  plt.ylabel('features')\n  plt.grid()\n  plt.show()","metadata":{"id":"MfQtv3nf_X_s","executionInfo":{"status":"ok","timestamp":1659484734667,"user_tz":-540,"elapsed":1654,"user":{"displayName":"松田龍","userId":"10818678393291437164"}},"outputId":"93a09e90-99a5-4fd7-aa49-4a9dffc9054b"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# conpare two feature set","metadata":{"id":"rgNarcy6X3xi"}},{"cell_type":"markdown","source":"catboost method ","metadata":{"id":"2m1BuyB21TQu"}},{"cell_type":"code","source":"def catboost_withparams(param: Dict, df: pd.DataFrame, \n             wandb_param=dict(project='AMEX', \n                              entity='nyantaro', \n                              runtime_prefix='AMEX_CATBOOST'), \n             config_param=dict(seed=42, \n                               folds=10, \n                               iterations=20000, \n                               start_fold=1, \n                               verbose=2000, \n                               breakloop=False)):\n  # wandb class\n  class Wandb:\n\n    def __init__(self, wandb_param: Dict):\n      self.PROJECT = wandb_param['project']\n      self.ENTITY = wandb_param['entity']\n      self.RUNNAME_PREFIX = wandb_param['runtime_prefix']\n\n  # parameter class\n  class Config:\n    \n    def __init__(self, config_param):\n      self.SEED = config_param['seed']\n      self.FOLDS = config_param['folds']\n      self.ITERATIONS = config_param['iterations']\n      self.START_FOLD = config_param['start_fold']\n      self.VERBOSE = config_param['verbose']\n      self.BREAKLOOP = config_param['breakloop']\n\n  WANDB = Wandb(wandb_param)\n  CONFIG = Config(config_param)\n\n  importance = []\n  y_test = pd.DataFrame()\n  gc.collect()\n  skf = StratifiedKFold(n_splits=CONFIG.FOLDS, shuffle=True, random_state=CONFIG.SEED)\n    \n  for i, (train_idx, valid_idx) in enumerate(tqdm(skf.split(df[FEATURES], df.target), total=skf.get_n_splits(), desc=\"k-fold\")):\n      if i+1 < CONFIG.START_FOLD:\n        continue\n      num_fold = i + 1\n      run = wandb.init(project=WANDB.PROJECT, entity=WANDB.ENTITY,\n                      settings=wandb.Settings(start_method=\"fork\"),\n                      dir='..')\n      wandb.config.seed = CONFIG.SEED\n      wandb.config.folds = CONFIG.FOLDS\n      wandb.config.iterations = CONFIG.ITERATIONS\n      wandb.run.name = f'{WANDB.RUNNAME_PREFIX}_{num_fold}'\n\n      print('#'*50)\n      print(f'Fold: {num_fold}')\n      \n      # Split data to folds\n      tr_x, tr_y = df.iloc[train_idx].reset_index(drop=True)[FEATURES], df.iloc[train_idx].reset_index(drop=True)['target']\n      print(f'train X shape: {tr_x.shape}, train Y shape: {tr_y.shape}')\n      val_x, val_y = df.iloc[valid_idx].reset_index(drop=True)[FEATURES], df.iloc[valid_idx].reset_index(drop=True)['target']\n      print(f'valid X shape: {tr_x.shape}, valid Y shape: {tr_y.shape}')\n      print('#'*50)\n      print(' ')\n\n      # Save Model\n      try:\n          clf = CatBoostClassifier(**param, \n                                  iterations=CONFIG.ITERATIONS, random_state=CONFIG.SEED, task_type='GPU', \n                                  use_best_model=True,\n                                  snapshot_file='..')\n          clf.fit(tr_x, tr_y, eval_set=[(val_x, val_y)], verbose=CONFIG.VERBOSE)\n          importance.append(clf.get_feature_importance())\n      finally:\n          clf.save_model(f'../models/catboost_amex_model_{num_fold}.cbm', format='cbm')\n          _y_values = clf.get_evals_result()['learn'][param['objective']]\n          _table = wandb.Table(data=[[x+1, y] for (x, y) in enumerate(_y_values)], columns = [\"epoc\", param['objective']])\n          wandb.log({\"my_custom_plot_id\" : \n                    wandb.plot.line(_table, \n                                    \"epoc\", param[\"objective\"],\n                                    title=\"Custom Y vs X Line Plot\")})\n          artifact = wandb.Artifact(name=f'catboost_{num_fold}of{CONFIG.FOLDS}', type='model')\n          artifact.add_file(f'../models/catboost_amex_model_{num_fold}.cbm')\n          run.log_artifact(artifact)\n          \n          print(' ')\n          print('Model has been saved')\n          print(' ')\n      \n      print(' ')\n      preds = clf.predict_proba(val_x)[:, 1]\n      _normalized_gini_coefficient, _top_four, _evaluation_metric = amex_metric_mod(val_y, preds)\n      print(f'NORMALIZED_GINI_COEFFICIENT: {_normalized_gini_coefficient:.6f}')\n      print(f'TOP_FOUR: {_top_four:.6f}')\n      print(f'KAGGLE METRICS: {_evaluation_metric:.6f}')\n      \n      wandb.log({'normalized_gini_coefficient': _normalized_gini_coefficient, \n                'top_four': _top_four, \n                'kaggle_metric': _evaluation_metric})\n      \n      #CLEAR RAM\n      del tr_x, tr_y, val_x, val_y, preds\n      gc.collect()\n      print(' ')\n      print(' ')\n      if CONFIG.BREAKLOOP:\n        break\n\n  run.finish()","metadata":{"id":"ARWOfwvH1SmC","executionInfo":{"status":"ok","timestamp":1659618637231,"user_tz":-540,"elapsed":513,"user":{"displayName":"松田龍","userId":"10818678393291437164"}}},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"modeling","metadata":{"id":"MMSv71baaFiE"}},{"cell_type":"code","source":"# parameters for fitting \nparam = {'objective': 'CrossEntropy',\n         'depth': 9,\n         'random_strength': 0.4988877463209964,\n         'learning_rate': 0.01, \n         'bootstrap_type': 'Bernoulli',\n         'subsample': 0.8812157558028204,\n         'eval_metric': 'NormalizedGini'\n         }","metadata":{"id":"3xggsdm-7gfY","executionInfo":{"status":"ok","timestamp":1659618691169,"user_tz":-540,"elapsed":290,"user":{"displayName":"松田龍","userId":"10818678393291437164"}}},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# set dataframe and feature columns\ntrain_df = pre_proccesed_data('../input/amex-agg-data-pickle/train_agg.pkl')\nFEATURES = [col for col in train_df.columns if col not in ['target']]\n\n# summary statistics\nwandb_param=dict(project='AMEX', \n                 entity='nyantaro', \n                 runtime_prefix='AMEX_CATBOOST')\nconfig_param=dict(seed=42, \n                  folds=10, \n                  iterations=3000, \n                  start_fold=1, \n                  verbose=2000, \n                  breakloop=True)\n\ncatboost_withparams(param, train_df, wandb_param=wandb_param, config_param=config_param)","metadata":{"id":"RNH7IarnX10L","executionInfo":{"status":"error","timestamp":1659616513672,"user_tz":-540,"elapsed":4585,"user":{"displayName":"松田龍","userId":"10818678393291437164"}},"outputId":"a5fb3b95-0a85-4818-94a5-b7a9528b64fb"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"_FNAME = 'train'\ntrain_df = pre_proccesed_data('../input/amex-agg-data-pickle/train_agg.pkl')\nconcat_df = train_df.copy()\ndel train_df\nN_TAIL = 3\nfor i in tqdm(range(2, N_TAIL+1)):\n  _ntail_df = pre_proccesed_data(f'../input/amex-ntail-data-pickle/{_FNAME}_tail{i}.pkl', suffix=f'tail{i}')\n  concat_df = pd.concat([concat_df, _ntail_df], axis=1)\ndel _ntail_df\nFEATURES = [col for col in concat_df.drop(columns='target').columns]\n\n# summary statistics + ntails\nwandb_param=dict(project='AMEX', \n                 entity='nyantaro', \n                 runtime_prefix=f'AMEX_CB_TAIL{N_TAIL}')\nconfig_param=dict(seed=42, \n                  folds=10, \n                  iterations=20000, \n                  start_fold=1, \n                  verbose=2000, \n                  breakloop=True)\n\ncatboost_withparams(param, concat_df, wandb_param=wandb_param, config_param=config_param)","metadata":{"id":"R_27PcnfYpLe"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"config_param=dict(seed=42, \n                  folds=10, \n                  iterations=20000, \n                  start_fold=2, \n                  verbose=2000, \n                  breakloop=False)\ncatboost_withparams(param, concat_df, wandb_param=wandb_param, config_param=config_param)","metadata":{"id":"lzQeukyZgs_b","executionInfo":{"status":"ok","timestamp":1659632386518,"user_tz":-540,"elapsed":12054223,"user":{"displayName":"松田龍","userId":"10818678393291437164"}},"outputId":"4094a6d4-70f1-4844-dcce-3b32c01b3b60"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"id":"zUY6fiw1FJEG"},"execution_count":null,"outputs":[]}]}