{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "%pip install fastapi\n",
    "%pip install uvicorn\n",
    "%pip install librosa\n",
    "%pip install xgboost\n",
    "%pip install pandas"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import datetime\n",
    "import string\n",
    "import random\n",
    "from pycaret.classification import *"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# data = pd.read_csv('data/data_feature_eng.csv')\n",
    "data = pd.read_csv('data/feature_ori.csv')\n",
    "# print(data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "
\n",
       "  \n",
       "    \n",
       "      |   | \n",
       "      Description | \n",
       "      Value | \n",
       "    
\n",
       "  \n",
       "  \n",
       "    \n",
       "      | 0 | \n",
       "      session_id | \n",
       "      6597 | \n",
       "    
\n",
       "    \n",
       "      | 1 | \n",
       "      Target | \n",
       "      label | \n",
       "    
\n",
       "    \n",
       "      | 2 | \n",
       "      Target Type | \n",
       "      Binary | \n",
       "    
\n",
       "    \n",
       "      | 3 | \n",
       "      Label Encoded | \n",
       "      0.0: 0, 1.0: 1 | \n",
       "    
\n",
       "    \n",
       "      | 4 | \n",
       "      Original Data | \n",
       "      (64800, 11) | \n",
       "    
\n",
       "    \n",
       "      | 5 | \n",
       "      Missing Values | \n",
       "      0 | \n",
       "    
\n",
       "    \n",
       "      | 6 | \n",
       "      Numeric Features | \n",
       "      8 | \n",
       "    
\n",
       "    \n",
       "      | 7 | \n",
       "      Categorical Features | \n",
       "      2 | \n",
       "    
\n",
       "    \n",
       "      | 8 | \n",
       "      Ordinal Features | \n",
       "      0 | \n",
       "    
\n",
       "    \n",
       "      | 9 | \n",
       "      High Cardinality Features | \n",
       "      0 | \n",
       "    
\n",
       "    \n",
       "      | 10 | \n",
       "      High Cardinality Method | \n",
       "      None | \n",
       "    
\n",
       "    \n",
       "      | 11 | \n",
       "      Transformed Train Set | \n",
       "      (45359, 19) | \n",
       "    
\n",
       "    \n",
       "      | 12 | \n",
       "      Transformed Test Set | \n",
       "      (19441, 19) | \n",
       "    
\n",
       "    \n",
       "      | 13 | \n",
       "      Shuffle Train-Test | \n",
       "      True | \n",
       "    
\n",
       "    \n",
       "      | 14 | \n",
       "      Stratify Train-Test | \n",
       "      False | \n",
       "    
\n",
       "    \n",
       "      | 15 | \n",
       "      Fold Generator | \n",
       "      StratifiedKFold | \n",
       "    
\n",
       "    \n",
       "      | 16 | \n",
       "      Fold Number | \n",
       "      10 | \n",
       "    
\n",
       "    \n",
       "      | 17 | \n",
       "      CPU Jobs | \n",
       "      -1 | \n",
       "    
\n",
       "    \n",
       "      | 18 | \n",
       "      Use GPU | \n",
       "      1 | \n",
       "    
\n",
       "    \n",
       "      | 19 | \n",
       "      Log Experiment | \n",
       "      0 | \n",
       "    
\n",
       "    \n",
       "      | 20 | \n",
       "      Experiment Name | \n",
       "      clf-default-name | \n",
       "    
\n",
       "    \n",
       "      | 21 | \n",
       "      USI | \n",
       "      717f | \n",
       "    
\n",
       "    \n",
       "      | 22 | \n",
       "      Imputation Type | \n",
       "      simple | \n",
       "    
\n",
       "    \n",
       "      | 23 | \n",
       "      Iterative Imputation Iteration | \n",
       "      None | \n",
       "    
\n",
       "    \n",
       "      | 24 | \n",
       "      Numeric Imputer | \n",
       "      mean | \n",
       "    
\n",
       "    \n",
       "      | 25 | \n",
       "      Iterative Imputation Numeric Model | \n",
       "      None | \n",
       "    
\n",
       "    \n",
       "      | 26 | \n",
       "      Categorical Imputer | \n",
       "      constant | \n",
       "    
\n",
       "    \n",
       "      | 27 | \n",
       "      Iterative Imputation Categorical Model | \n",
       "      None | \n",
       "    
\n",
       "    \n",
       "      | 28 | \n",
       "      Unknown Categoricals Handling | \n",
       "      least_frequent | \n",
       "    
\n",
       "    \n",
       "      | 29 | \n",
       "      Normalize | \n",
       "      0 | \n",
       "    
\n",
       "    \n",
       "      | 30 | \n",
       "      Normalize Method | \n",
       "      None | \n",
       "    
\n",
       "    \n",
       "      | 31 | \n",
       "      Transformation | \n",
       "      0 | \n",
       "    
\n",
       "    \n",
       "      | 32 | \n",
       "      Transformation Method | \n",
       "      None | \n",
       "    
\n",
       "    \n",
       "      | 33 | \n",
       "      PCA | \n",
       "      0 | \n",
       "    
\n",
       "    \n",
       "      | 34 | \n",
       "      PCA Method | \n",
       "      None | \n",
       "    
\n",
       "    \n",
       "      | 35 | \n",
       "      PCA Components | \n",
       "      None | \n",
       "    
\n",
       "    \n",
       "      | 36 | \n",
       "      Ignore Low Variance | \n",
       "      0 | \n",
       "    
\n",
       "    \n",
       "      | 37 | \n",
       "      Combine Rare Levels | \n",
       "      0 | \n",
       "    
\n",
       "    \n",
       "      | 38 | \n",
       "      Rare Level Threshold | \n",
       "      None | \n",
       "    
\n",
       "    \n",
       "      | 39 | \n",
       "      Numeric Binning | \n",
       "      0 | \n",
       "    
\n",
       "    \n",
       "      | 40 | \n",
       "      Remove Outliers | \n",
       "      0 | \n",
       "    
\n",
       "    \n",
       "      | 41 | \n",
       "      Outliers Threshold | \n",
       "      None | \n",
       "    
\n",
       "    \n",
       "      | 42 | \n",
       "      Remove Multicollinearity | \n",
       "      0 | \n",
       "    
\n",
       "    \n",
       "      | 43 | \n",
       "      Multicollinearity Threshold | \n",
       "      None | \n",
       "    
\n",
       "    \n",
       "      | 44 | \n",
       "      Remove Perfect Collinearity | \n",
       "      1 | \n",
       "    
\n",
       "    \n",
       "      | 45 | \n",
       "      Clustering | \n",
       "      0 | \n",
       "    
\n",
       "    \n",
       "      | 46 | \n",
       "      Clustering Iteration | \n",
       "      None | \n",
       "    
\n",
       "    \n",
       "      | 47 | \n",
       "      Polynomial Features | \n",
       "      0 | \n",
       "    
\n",
       "    \n",
       "      | 48 | \n",
       "      Polynomial Degree | \n",
       "      None | \n",
       "    
\n",
       "    \n",
       "      | 49 | \n",
       "      Trignometry Features | \n",
       "      0 | \n",
       "    
\n",
       "    \n",
       "      | 50 | \n",
       "      Polynomial Threshold | \n",
       "      None | \n",
       "    
\n",
       "    \n",
       "      | 51 | \n",
       "      Group Features | \n",
       "      0 | \n",
       "    
\n",
       "    \n",
       "      | 52 | \n",
       "      Feature Selection | \n",
       "      0 | \n",
       "    
\n",
       "    \n",
       "      | 53 | \n",
       "      Feature Selection Method | \n",
       "      classic | \n",
       "    
\n",
       "    \n",
       "      | 54 | \n",
       "      Features Selection Threshold | \n",
       "      None | \n",
       "    
\n",
       "    \n",
       "      | 55 | \n",
       "      Feature Interaction | \n",
       "      0 | \n",
       "    
\n",
       "    \n",
       "      | 56 | \n",
       "      Feature Ratio | \n",
       "      0 | \n",
       "    
\n",
       "    \n",
       "      | 57 | \n",
       "      Interaction Threshold | \n",
       "      None | \n",
       "    
\n",
       "    \n",
       "      | 58 | \n",
       "      Fix Imbalance | \n",
       "      0 | \n",
       "    
\n",
       "    \n",
       "      | 59 | \n",
       "      Fix Imbalance Method | \n",
       "      SMOTE | \n",
       "    
\n",
       "  \n",
       "
\n"
      ],
      "text/plain": [
       ""
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "m_setup = setup(data=data, target='label', normalize=False, \n",
    "                   feature_interaction=False, \n",
    "                   feature_ratio=False,\n",
    "                   trigonometry_features=False,\n",
    "                   use_gpu=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "\n",
       "  \n",
       "    \n",
       "      |   | \n",
       "      Accuracy | \n",
       "      AUC | \n",
       "      Recall | \n",
       "      Prec. | \n",
       "      F1 | \n",
       "      Kappa | \n",
       "      MCC | \n",
       "    
\n",
       "  \n",
       "  \n",
       "    \n",
       "      | 0 | \n",
       "      0.9810 | \n",
       "      0.9957 | \n",
       "      0.9388 | \n",
       "      0.9360 | \n",
       "      0.9374 | \n",
       "      0.9262 | \n",
       "      0.9262 | \n",
       "    
\n",
       "    \n",
       "      | 1 | \n",
       "      0.9861 | \n",
       "      0.9980 | \n",
       "      0.9563 | \n",
       "      0.9522 | \n",
       "      0.9542 | \n",
       "      0.9461 | \n",
       "      0.9461 | \n",
       "    
\n",
       "    \n",
       "      | 2 | \n",
       "      0.9852 | \n",
       "      0.9967 | \n",
       "      0.9563 | \n",
       "      0.9467 | \n",
       "      0.9515 | \n",
       "      0.9428 | \n",
       "      0.9428 | \n",
       "    
\n",
       "    \n",
       "      | 3 | \n",
       "      0.9806 | \n",
       "      0.9954 | \n",
       "      0.9432 | \n",
       "      0.9297 | \n",
       "      0.9364 | \n",
       "      0.9250 | \n",
       "      0.9250 | \n",
       "    
\n",
       "    \n",
       "      | 4 | \n",
       "      0.9850 | \n",
       "      0.9977 | \n",
       "      0.9607 | \n",
       "      0.9415 | \n",
       "      0.9510 | \n",
       "      0.9422 | \n",
       "      0.9422 | \n",
       "    
\n",
       "    \n",
       "      | 5 | \n",
       "      0.9843 | \n",
       "      0.9961 | \n",
       "      0.9578 | \n",
       "      0.9400 | \n",
       "      0.9488 | \n",
       "      0.9396 | \n",
       "      0.9396 | \n",
       "    
\n",
       "    \n",
       "      | 6 | \n",
       "      0.9846 | \n",
       "      0.9965 | \n",
       "      0.9534 | \n",
       "      0.9452 | \n",
       "      0.9493 | \n",
       "      0.9402 | \n",
       "      0.9402 | \n",
       "    
\n",
       "    \n",
       "      | 7 | \n",
       "      0.9885 | \n",
       "      0.9975 | \n",
       "      0.9665 | \n",
       "      0.9582 | \n",
       "      0.9623 | \n",
       "      0.9556 | \n",
       "      0.9556 | \n",
       "    
\n",
       "    \n",
       "      | 8 | \n",
       "      0.9824 | \n",
       "      0.9959 | \n",
       "      0.9418 | \n",
       "      0.9418 | \n",
       "      0.9418 | \n",
       "      0.9314 | \n",
       "      0.9314 | \n",
       "    
\n",
       "    \n",
       "      | 9 | \n",
       "      0.9830 | \n",
       "      0.9967 | \n",
       "      0.9519 | \n",
       "      0.9369 | \n",
       "      0.9443 | \n",
       "      0.9343 | \n",
       "      0.9343 | \n",
       "    
\n",
       "    \n",
       "      | Mean | \n",
       "      0.9841 | \n",
       "      0.9966 | \n",
       "      0.9527 | \n",
       "      0.9428 | \n",
       "      0.9477 | \n",
       "      0.9383 | \n",
       "      0.9383 | \n",
       "    
\n",
       "    \n",
       "      | SD | \n",
       "      0.0023 | \n",
       "      0.0008 | \n",
       "      0.0084 | \n",
       "      0.0078 | \n",
       "      0.0075 | \n",
       "      0.0089 | \n",
       "      0.0089 | \n",
       "    
\n",
       "  \n",
       "
\n"
      ],
      "text/plain": [
       ""
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# max_depth = 트리 최대 깊이\n",
    "# max_leaves = 트리 최대 리프\n",
    "# subsample = row sampling\n",
    "# colsample_bytree = column sampling 각 이터레이션에 사용되는 칼럼의 비율\n",
    "# learning_rate = 러닝레이트\n",
    "# 일반적으로 row sampling 보다는 column sampling이 모형성능과 학습시간에 더 큰 영향을 준다\n",
    "# xgboost = create_model('xgboost', max_depth=16, max_leaves=255)\n",
    "# xgboost = create_model('xgboost')\n",
    "xgboost = create_model('xgboost', max_depth=8, max_leaves=256)\n",
    "# best_model = compare_models(n_select=6)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "\n",
       "  \n",
       "    \n",
       "      |   | \n",
       "      Accuracy | \n",
       "      AUC | \n",
       "      Recall | \n",
       "      Prec. | \n",
       "      F1 | \n",
       "      Kappa | \n",
       "      MCC | \n",
       "    
\n",
       "  \n",
       "  \n",
       "    \n",
       "      | 0 | \n",
       "      0.9784 | \n",
       "      0.9949 | \n",
       "      0.9271 | \n",
       "      0.9298 | \n",
       "      0.9285 | \n",
       "      0.9157 | \n",
       "      0.9157 | \n",
       "    
\n",
       "    \n",
       "      | 1 | \n",
       "      0.9837 | \n",
       "      0.9974 | \n",
       "      0.9374 | \n",
       "      0.9541 | \n",
       "      0.9457 | \n",
       "      0.9361 | \n",
       "      0.9361 | \n",
       "    
\n",
       "    \n",
       "      | 2 | \n",
       "      0.9797 | \n",
       "      0.9959 | \n",
       "      0.9287 | \n",
       "      0.9369 | \n",
       "      0.9327 | \n",
       "      0.9208 | \n",
       "      0.9208 | \n",
       "    
\n",
       "    \n",
       "      | 3 | \n",
       "      0.9740 | \n",
       "      0.9930 | \n",
       "      0.9112 | \n",
       "      0.9165 | \n",
       "      0.9139 | \n",
       "      0.8985 | \n",
       "      0.8986 | \n",
       "    
\n",
       "    \n",
       "      | 4 | \n",
       "      0.9821 | \n",
       "      0.9966 | \n",
       "      0.9447 | \n",
       "      0.9379 | \n",
       "      0.9413 | \n",
       "      0.9307 | \n",
       "      0.9307 | \n",
       "    
\n",
       "    \n",
       "      | 5 | \n",
       "      0.9793 | \n",
       "      0.9950 | \n",
       "      0.9374 | \n",
       "      0.9266 | \n",
       "      0.9320 | \n",
       "      0.9198 | \n",
       "      0.9198 | \n",
       "    
\n",
       "    \n",
       "      | 6 | \n",
       "      0.9846 | \n",
       "      0.9963 | \n",
       "      0.9389 | \n",
       "      0.9584 | \n",
       "      0.9485 | \n",
       "      0.9395 | \n",
       "      0.9395 | \n",
       "    
\n",
       "    \n",
       "      | 7 | \n",
       "      0.9872 | \n",
       "      0.9976 | \n",
       "      0.9520 | \n",
       "      0.9632 | \n",
       "      0.9575 | \n",
       "      0.9500 | \n",
       "      0.9500 | \n",
       "    
\n",
       "    \n",
       "      | 8 | \n",
       "      0.9775 | \n",
       "      0.9946 | \n",
       "      0.9127 | \n",
       "      0.9372 | \n",
       "      0.9248 | \n",
       "      0.9116 | \n",
       "      0.9117 | \n",
       "    
\n",
       "    \n",
       "      | 9 | \n",
       "      0.9791 | \n",
       "      0.9952 | \n",
       "      0.9344 | \n",
       "      0.9276 | \n",
       "      0.9310 | \n",
       "      0.9187 | \n",
       "      0.9187 | \n",
       "    
\n",
       "    \n",
       "      | Mean | \n",
       "      0.9806 | \n",
       "      0.9956 | \n",
       "      0.9324 | \n",
       "      0.9388 | \n",
       "      0.9356 | \n",
       "      0.9241 | \n",
       "      0.9242 | \n",
       "    
\n",
       "    \n",
       "      | SD | \n",
       "      0.0037 | \n",
       "      0.0013 | \n",
       "      0.0123 | \n",
       "      0.0144 | \n",
       "      0.0121 | \n",
       "      0.0143 | \n",
       "      0.0143 | \n",
       "    
\n",
       "  \n",
       "
\n"
      ],
      "text/plain": [
       ""
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# max leaves -> 2**(n-1), n = max_depth\n",
    "params    = {'max_depth': [128, 64, 32],\n",
    "             'max_leaves': [256, 1024, 4096],              \n",
    "             'colsample_bytree':[0.2, 0.4, 0.6, 0.8, 1.0],\n",
    "             'learning_rate':[0.05, 0.005]\n",
    "             }#range(14,17)}\n",
    "# tuned_xgboost = tune_model(xgboost, optimize='F1', custom_grid=params)\n",
    "tuned_xgboost = tune_model(xgboost, optimize='Accuracy', custom_grid=params, tuner_verbose=3)\n",
    "# tuned_xgboost = tune_model(xgboost, optimize='Kappa')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "XGBClassifier(base_score=0.5, booster='gbtree', colsample_bylevel=1,\n",
       "              colsample_bynode=1, colsample_bytree=0.4,\n",
       "              enable_categorical=False, gamma=0, gpu_id=0, importance_type=None,\n",
       "              interaction_constraints='', learning_rate=0.05, max_delta_step=0,\n",
       "              max_depth=64, max_leaves=4096, min_child_weight=1, missing=nan,\n",
       "              monotone_constraints='()', n_estimators=100, n_jobs=-1,\n",
       "              num_parallel_tree=1, objective='binary:logistic',\n",
       "              predictor='auto', random_state=6597, reg_alpha=0, reg_lambda=1,\n",
       "              scale_pos_weight=1, subsample=1, tree_method='gpu_hist',\n",
       "              use_label_encoder=True, validate_parameters=1, ...)"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tuned_xgboost"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# plot_model(tuned_dt, plot='auc')\n",
    "evaluate_model(tuned_xgboost)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Transformation Pipeline and Model Successfully Saved\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "(Pipeline(memory=None,\n",
       "          steps=[('dtypes',\n",
       "                  DataTypes_Auto_infer(categorical_features=[],\n",
       "                                       display_types=True, features_todrop=[],\n",
       "                                       id_columns=[],\n",
       "                                       ml_usecase='classification',\n",
       "                                       numerical_features=[], target='label',\n",
       "                                       time_features=[])),\n",
       "                 ('imputer',\n",
       "                  Simple_Imputer(categorical_strategy='not_available',\n",
       "                                 fill_value_categorical=None,\n",
       "                                 fill_value_numerical=None,\n",
       "                                 numeric_strate...\n",
       "                                max_delta_step=0, max_depth=64, max_leaves=4096,\n",
       "                                min_child_weight=1, missing=nan,\n",
       "                                monotone_constraints='()', n_estimators=100,\n",
       "                                n_jobs=-1, num_parallel_tree=1,\n",
       "                                objective='binary:logistic', predictor='auto',\n",
       "                                random_state=6597, reg_alpha=0, reg_lambda=1,\n",
       "                                scale_pos_weight=1, subsample=1,\n",
       "                                tree_method='gpu_hist', use_label_encoder=True,\n",
       "                                validate_parameters=1, ...)]],\n",
       "          verbose=False),\n",
       " 'tuned_xgboost_orifeature_0323.pkl')"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mdl = finalize_model(tuned_xgboost)\n",
    "save_model(mdl, 'tuned_xgboost_orifeature_0323')\n",
    "# save_model(tuned_xgboost, 'tuned_xgboost_0207')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "load_mdl = load_model('tuned_xgboost_orifeature_0323')\n",
    "prediction = predict_model(load_mdl, data=data.iloc[-10000:])\n",
    "prediction = prediction.astype({'Label':'float64'})\n",
    "prediction.info()\n",
    "from pycaret.utils import check_metric\n",
    "check_metric(prediction['Label'], prediction['label'], metric = 'F1')"
   ]
  }
 ],
 "metadata": {
  "interpreter": {
   "hash": "916dbcbb3f70747c44a77c7bcd40155683ae19c65e1c03b4aa3499c5328201f1"
  },
  "kernelspec": {
   "display_name": "Python 3.8.10 64-bit",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.12"
  },
  "orig_nbformat": 4
 },
 "nbformat": 4,
 "nbformat_minor": 2
}