{
"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
}