{
"cells": [
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"%pip install awswrangler pycaret[full]\n",
"%pip install xgboost"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"# import awswrangler as wr\n",
"import pandas as pd\n",
"import numpy as np\n",
"# import boto3\n",
"# from sagemaker import get_execution_role\n",
"import datetime\n",
"import string\n",
"import random\n",
"from pycaret.classification import *"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"data = pd.read_csv('data/data_feature_eng.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",
" 6868 | \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, 13) | \n",
"
\n",
" \n",
" 5 | \n",
" Missing Values | \n",
" False | \n",
"
\n",
" \n",
" 6 | \n",
" Numeric Features | \n",
" 10 | \n",
"
\n",
" \n",
" 7 | \n",
" Categorical Features | \n",
" 2 | \n",
"
\n",
" \n",
" 8 | \n",
" Ordinal Features | \n",
" False | \n",
"
\n",
" \n",
" 9 | \n",
" High Cardinality Features | \n",
" False | \n",
"
\n",
" \n",
" 10 | \n",
" High Cardinality Method | \n",
" None | \n",
"
\n",
" \n",
" 11 | \n",
" Transformed Train Set | \n",
" (45359, 21) | \n",
"
\n",
" \n",
" 12 | \n",
" Transformed Test Set | \n",
" (19441, 21) | \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",
" True | \n",
"
\n",
" \n",
" 19 | \n",
" Log Experiment | \n",
" False | \n",
"
\n",
" \n",
" 20 | \n",
" Experiment Name | \n",
" clf-default-name | \n",
"
\n",
" \n",
" 21 | \n",
" USI | \n",
" 79bd | \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",
" True | \n",
"
\n",
" \n",
" 30 | \n",
" Normalize Method | \n",
" zscore | \n",
"
\n",
" \n",
" 31 | \n",
" Transformation | \n",
" False | \n",
"
\n",
" \n",
" 32 | \n",
" Transformation Method | \n",
" None | \n",
"
\n",
" \n",
" 33 | \n",
" PCA | \n",
" False | \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",
" False | \n",
"
\n",
" \n",
" 37 | \n",
" Combine Rare Levels | \n",
" False | \n",
"
\n",
" \n",
" 38 | \n",
" Rare Level Threshold | \n",
" None | \n",
"
\n",
" \n",
" 39 | \n",
" Numeric Binning | \n",
" False | \n",
"
\n",
" \n",
" 40 | \n",
" Remove Outliers | \n",
" False | \n",
"
\n",
" \n",
" 41 | \n",
" Outliers Threshold | \n",
" None | \n",
"
\n",
" \n",
" 42 | \n",
" Remove Multicollinearity | \n",
" False | \n",
"
\n",
" \n",
" 43 | \n",
" Multicollinearity Threshold | \n",
" None | \n",
"
\n",
" \n",
" 44 | \n",
" Remove Perfect Collinearity | \n",
" True | \n",
"
\n",
" \n",
" 45 | \n",
" Clustering | \n",
" False | \n",
"
\n",
" \n",
" 46 | \n",
" Clustering Iteration | \n",
" None | \n",
"
\n",
" \n",
" 47 | \n",
" Polynomial Features | \n",
" False | \n",
"
\n",
" \n",
" 48 | \n",
" Polynomial Degree | \n",
" None | \n",
"
\n",
" \n",
" 49 | \n",
" Trignometry Features | \n",
" True | \n",
"
\n",
" \n",
" 50 | \n",
" Polynomial Threshold | \n",
" 0.100000 | \n",
"
\n",
" \n",
" 51 | \n",
" Group Features | \n",
" False | \n",
"
\n",
" \n",
" 52 | \n",
" Feature Selection | \n",
" False | \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",
" False | \n",
"
\n",
" \n",
" 56 | \n",
" Feature Ratio | \n",
" False | \n",
"
\n",
" \n",
" 57 | \n",
" Interaction Threshold | \n",
" None | \n",
"
\n",
" \n",
" 58 | \n",
" Fix Imbalance | \n",
" False | \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=True, \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.9775 | \n",
" 0.9946 | \n",
" 0.9299 | \n",
" 0.9219 | \n",
" 0.9259 | \n",
" 0.9126 | \n",
" 0.9126 | \n",
"
\n",
" \n",
" 1 | \n",
" 0.9793 | \n",
" 0.9949 | \n",
" 0.9372 | \n",
" 0.9264 | \n",
" 0.9318 | \n",
" 0.9196 | \n",
" 0.9196 | \n",
"
\n",
" \n",
" 2 | \n",
" 0.9826 | \n",
" 0.9950 | \n",
" 0.9344 | \n",
" 0.9496 | \n",
" 0.9420 | \n",
" 0.9317 | \n",
" 0.9318 | \n",
"
\n",
" \n",
" 3 | \n",
" 0.9795 | \n",
" 0.9957 | \n",
" 0.9300 | \n",
" 0.9341 | \n",
" 0.9321 | \n",
" 0.9200 | \n",
" 0.9200 | \n",
"
\n",
" \n",
" 4 | \n",
" 0.9804 | \n",
" 0.9957 | \n",
" 0.9431 | \n",
" 0.9283 | \n",
" 0.9356 | \n",
" 0.9241 | \n",
" 0.9241 | \n",
"
\n",
" \n",
" 5 | \n",
" 0.9773 | \n",
" 0.9951 | \n",
" 0.9300 | \n",
" 0.9206 | \n",
" 0.9253 | \n",
" 0.9119 | \n",
" 0.9119 | \n",
"
\n",
" \n",
" 6 | \n",
" 0.9817 | \n",
" 0.9975 | \n",
" 0.9300 | \n",
" 0.9480 | \n",
" 0.9389 | \n",
" 0.9282 | \n",
" 0.9282 | \n",
"
\n",
" \n",
" 7 | \n",
" 0.9810 | \n",
" 0.9946 | \n",
" 0.9359 | \n",
" 0.9386 | \n",
" 0.9372 | \n",
" 0.9261 | \n",
" 0.9261 | \n",
"
\n",
" \n",
" 8 | \n",
" 0.9802 | \n",
" 0.9958 | \n",
" 0.9300 | \n",
" 0.9382 | \n",
" 0.9341 | \n",
" 0.9224 | \n",
" 0.9224 | \n",
"
\n",
" \n",
" 9 | \n",
" 0.9802 | \n",
" 0.9962 | \n",
" 0.9255 | \n",
" 0.9421 | \n",
" 0.9337 | \n",
" 0.9221 | \n",
" 0.9221 | \n",
"
\n",
" \n",
" Mean | \n",
" 0.9800 | \n",
" 0.9955 | \n",
" 0.9326 | \n",
" 0.9348 | \n",
" 0.9337 | \n",
" 0.9219 | \n",
" 0.9219 | \n",
"
\n",
" \n",
" SD | \n",
" 0.0016 | \n",
" 0.0008 | \n",
" 0.0048 | \n",
" 0.0098 | \n",
" 0.0050 | \n",
" 0.0059 | \n",
" 0.0059 | \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",
"# 일반적으로 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=255)\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.9757 | \n",
" 0.9949 | \n",
" 0.9197 | \n",
" 0.9197 | \n",
" 0.9197 | \n",
" 0.9054 | \n",
" 0.9054 | \n",
"
\n",
" \n",
" 1 | \n",
" 0.9786 | \n",
" 0.9957 | \n",
" 0.9358 | \n",
" 0.9236 | \n",
" 0.9297 | \n",
" 0.9171 | \n",
" 0.9171 | \n",
"
\n",
" \n",
" 2 | \n",
" 0.9826 | \n",
" 0.9960 | \n",
" 0.9402 | \n",
" 0.9444 | \n",
" 0.9423 | \n",
" 0.9320 | \n",
" 0.9320 | \n",
"
\n",
" \n",
" 3 | \n",
" 0.9813 | \n",
" 0.9964 | \n",
" 0.9388 | \n",
" 0.9374 | \n",
" 0.9381 | \n",
" 0.9271 | \n",
" 0.9271 | \n",
"
\n",
" \n",
" 4 | \n",
" 0.9837 | \n",
" 0.9966 | \n",
" 0.9490 | \n",
" 0.9435 | \n",
" 0.9462 | \n",
" 0.9366 | \n",
" 0.9366 | \n",
"
\n",
" \n",
" 5 | \n",
" 0.9782 | \n",
" 0.9955 | \n",
" 0.9271 | \n",
" 0.9285 | \n",
" 0.9278 | \n",
" 0.9149 | \n",
" 0.9149 | \n",
"
\n",
" \n",
" 6 | \n",
" 0.9832 | \n",
" 0.9980 | \n",
" 0.9373 | \n",
" 0.9512 | \n",
" 0.9442 | \n",
" 0.9343 | \n",
" 0.9344 | \n",
"
\n",
" \n",
" 7 | \n",
" 0.9804 | \n",
" 0.9953 | \n",
" 0.9402 | \n",
" 0.9307 | \n",
" 0.9355 | \n",
" 0.9239 | \n",
" 0.9239 | \n",
"
\n",
" \n",
" 8 | \n",
" 0.9813 | \n",
" 0.9956 | \n",
" 0.9373 | \n",
" 0.9387 | \n",
" 0.9380 | \n",
" 0.9270 | \n",
" 0.9270 | \n",
"
\n",
" \n",
" 9 | \n",
" 0.9806 | \n",
" 0.9967 | \n",
" 0.9241 | \n",
" 0.9462 | \n",
" 0.9350 | \n",
" 0.9236 | \n",
" 0.9237 | \n",
"
\n",
" \n",
" Mean | \n",
" 0.9806 | \n",
" 0.9961 | \n",
" 0.9350 | \n",
" 0.9364 | \n",
" 0.9356 | \n",
" 0.9242 | \n",
" 0.9242 | \n",
"
\n",
" \n",
" SD | \n",
" 0.0023 | \n",
" 0.0008 | \n",
" 0.0083 | \n",
" 0.0099 | \n",
" 0.0077 | \n",
" 0.0091 | \n",
" 0.0091 | \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.8,\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=32, max_leaves=1024, 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=6868, 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\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"interpret_model(tuned_xgboost)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "8a778f38647d4a368ad8730adfc4ea6c",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"interactive(children=(ToggleButtons(description='Plot Type:', icons=('',), options=(('Hyperparameters', 'param…"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# plot_model(tuned_dt, plot='auc')\n",
"evaluate_model(tuned_xgboost)"
]
}
],
"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
}