{
"cells": [
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# %pip install awswrangler\n",
"%pip install pycaret[full]\n",
"%pip install xgboost\n",
"# %pip install mlflow"
]
},
{
"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",
"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",
" 4505 | \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",
" False | \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",
" 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, 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",
" 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",
" c1be | \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",
" False | \n",
"
\n",
" \n",
" 30 | \n",
" Normalize Method | \n",
" None | \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",
" False | \n",
"
\n",
" \n",
" 50 | \n",
" Polynomial Threshold | \n",
" None | \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=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",
" Fold | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 0.9777 | \n",
" 0.9953 | \n",
" 0.9258 | \n",
" 0.9271 | \n",
" 0.9264 | \n",
" 0.9133 | \n",
" 0.9133 | \n",
"
\n",
" \n",
" 1 | \n",
" 0.9757 | \n",
" 0.9946 | \n",
" 0.9259 | \n",
" 0.9152 | \n",
" 0.9205 | \n",
" 0.9062 | \n",
" 0.9062 | \n",
"
\n",
" \n",
" 2 | \n",
" 0.9797 | \n",
" 0.9956 | \n",
" 0.9520 | \n",
" 0.9174 | \n",
" 0.9344 | \n",
" 0.9224 | \n",
" 0.9226 | \n",
"
\n",
" \n",
" 3 | \n",
" 0.9808 | \n",
" 0.9963 | \n",
" 0.9404 | \n",
" 0.9336 | \n",
" 0.9370 | \n",
" 0.9257 | \n",
" 0.9257 | \n",
"
\n",
" \n",
" 4 | \n",
" 0.9773 | \n",
" 0.9947 | \n",
" 0.9331 | \n",
" 0.9185 | \n",
" 0.9257 | \n",
" 0.9123 | \n",
" 0.9124 | \n",
"
\n",
" \n",
" 5 | \n",
" 0.9786 | \n",
" 0.9948 | \n",
" 0.9390 | \n",
" 0.9215 | \n",
" 0.9302 | \n",
" 0.9175 | \n",
" 0.9176 | \n",
"
\n",
" \n",
" 6 | \n",
" 0.9769 | \n",
" 0.9949 | \n",
" 0.9433 | \n",
" 0.9077 | \n",
" 0.9252 | \n",
" 0.9115 | \n",
" 0.9117 | \n",
"
\n",
" \n",
" 7 | \n",
" 0.9802 | \n",
" 0.9939 | \n",
" 0.9506 | \n",
" 0.9211 | \n",
" 0.9356 | \n",
" 0.9239 | \n",
" 0.9241 | \n",
"
\n",
" \n",
" 8 | \n",
" 0.9764 | \n",
" 0.9933 | \n",
" 0.9317 | \n",
" 0.9144 | \n",
" 0.9230 | \n",
" 0.9090 | \n",
" 0.9091 | \n",
"
\n",
" \n",
" 9 | \n",
" 0.9784 | \n",
" 0.9948 | \n",
" 0.9461 | \n",
" 0.9142 | \n",
" 0.9299 | \n",
" 0.9171 | \n",
" 0.9173 | \n",
"
\n",
" \n",
" Mean | \n",
" 0.9782 | \n",
" 0.9948 | \n",
" 0.9388 | \n",
" 0.9191 | \n",
" 0.9288 | \n",
" 0.9159 | \n",
" 0.9160 | \n",
"
\n",
" \n",
" Std | \n",
" 0.0016 | \n",
" 0.0008 | \n",
" 0.0090 | \n",
" 0.0069 | \n",
" 0.0053 | \n",
" 0.0062 | \n",
" 0.0062 | \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",
" Fold | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 0.9793 | \n",
" 0.9955 | \n",
" 0.9316 | \n",
" 0.9316 | \n",
" 0.9316 | \n",
" 0.9194 | \n",
" 0.9194 | \n",
"
\n",
" \n",
" 1 | \n",
" 0.9762 | \n",
" 0.9955 | \n",
" 0.9113 | \n",
" 0.9303 | \n",
" 0.9207 | \n",
" 0.9067 | \n",
" 0.9068 | \n",
"
\n",
" \n",
" 2 | \n",
" 0.9828 | \n",
" 0.9958 | \n",
" 0.9506 | \n",
" 0.9370 | \n",
" 0.9437 | \n",
" 0.9336 | \n",
" 0.9336 | \n",
"
\n",
" \n",
" 3 | \n",
" 0.9813 | \n",
" 0.9963 | \n",
" 0.9172 | \n",
" 0.9575 | \n",
" 0.9369 | \n",
" 0.9259 | \n",
" 0.9262 | \n",
"
\n",
" \n",
" 4 | \n",
" 0.9777 | \n",
" 0.9961 | \n",
" 0.9172 | \n",
" 0.9348 | \n",
" 0.9259 | \n",
" 0.9128 | \n",
" 0.9129 | \n",
"
\n",
" \n",
" 5 | \n",
" 0.9788 | \n",
" 0.9934 | \n",
" 0.9201 | \n",
" 0.9392 | \n",
" 0.9295 | \n",
" 0.9171 | \n",
" 0.9171 | \n",
"
\n",
" \n",
" 6 | \n",
" 0.9808 | \n",
" 0.9963 | \n",
" 0.9448 | \n",
" 0.9299 | \n",
" 0.9373 | \n",
" 0.9260 | \n",
" 0.9260 | \n",
"
\n",
" \n",
" 7 | \n",
" 0.9824 | \n",
" 0.9944 | \n",
" 0.9404 | \n",
" 0.9431 | \n",
" 0.9418 | \n",
" 0.9314 | \n",
" 0.9314 | \n",
"
\n",
" \n",
" 8 | \n",
" 0.9782 | \n",
" 0.9945 | \n",
" 0.9215 | \n",
" 0.9337 | \n",
" 0.9276 | \n",
" 0.9147 | \n",
" 0.9148 | \n",
"
\n",
" \n",
" 9 | \n",
" 0.9786 | \n",
" 0.9949 | \n",
" 0.9272 | \n",
" 0.9313 | \n",
" 0.9292 | \n",
" 0.9166 | \n",
" 0.9167 | \n",
"
\n",
" \n",
" Mean | \n",
" 0.9796 | \n",
" 0.9953 | \n",
" 0.9282 | \n",
" 0.9368 | \n",
" 0.9324 | \n",
" 0.9204 | \n",
" 0.9205 | \n",
"
\n",
" \n",
" Std | \n",
" 0.0020 | \n",
" 0.0009 | \n",
" 0.0126 | \n",
" 0.0080 | \n",
" 0.0069 | \n",
" 0.0081 | \n",
" 0.0081 | \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",
"params = {'max_depth': [128],\n",
" 'max_leaves': [1024], \n",
" 'colsample_bytree':[0.6, 0.8],\n",
" 'learning_rate':[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.005, max_delta_step=0,\n",
" max_depth=128, 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=4505, 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": 7,
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "873563af42834355a9d06a1960767093",
"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)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"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=128, max_leaves=1024,\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=4505, 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_239_0408.pkl')"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"mdl = finalize_model(tuned_xgboost)\n",
"save_model(mdl, 'tuned_xgboost_239_0408')\n",
"# save_model(tuned_xgboost, 'tuned_xgboost_0207')"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Transformation Pipeline and Model Successfully Loaded\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" \n",
" \n",
" | \n",
" Model | \n",
" Accuracy | \n",
" AUC | \n",
" Recall | \n",
" Prec. | \n",
" F1 | \n",
" Kappa | \n",
" MCC | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" Extreme Gradient Boosting | \n",
" 0.9913 | \n",
" 0.9985 | \n",
" 0.9643 | \n",
" 0.9778 | \n",
" 0.9710 | \n",
" 0.9659 | \n",
" 0.9659 | \n",
"
\n",
" \n",
"
\n"
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"RangeIndex: 64800 entries, 0 to 64799\n",
"Data columns (total 13 columns):\n",
" # Column Non-Null Count Dtype \n",
"--- ------ -------------- ----- \n",
" 0 label 64800 non-null float64\n",
" 1 hum 64800 non-null float64\n",
" 2 temp 64800 non-null float64\n",
" 3 door 64800 non-null float64\n",
" 4 motion 64800 non-null float64\n",
" 5 illum 64800 non-null float64\n",
" 6 dayofweek 64800 non-null int64 \n",
" 7 month 64800 non-null int64 \n",
" 8 day 64800 non-null int64 \n",
" 9 hour 64800 non-null int64 \n",
" 10 minute 64800 non-null int64 \n",
" 11 Label 64800 non-null float64\n",
" 12 Score 64800 non-null float32\n",
"dtypes: float32(1), float64(7), int64(5)\n",
"memory usage: 6.2 MB\n"
]
},
{
"data": {
"text/plain": [
"0.971"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"load_mdl = load_model('tuned_xgboost_239_0408')\n",
"prediction = predict_model(load_mdl, data=data.iloc[:])\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
}