{ "cells": [ { "attachments": {}, "cell_type": "markdown", "id": "41bf2a51", "metadata": {}, "source": [ "# Model Building" ] }, { "cell_type": "code", "execution_count": null, "id": "dbdd8927", "metadata": {}, "outputs": [], "source": [ "!pip install imblearn\n", "!pip install matplotlib\n", "!pip install seaborn\n", "!pip install joblib\n", "!pip install feature_engine\n", "!pip install lightgbm\n", "!pip install catboost\n", "!pip install category_encoders\n", "!pip install numpy\n", "!pip install sdv\n", "!pip install optuna\n", "!pip install torch==1.13.1+cu117 torchvision==0.14.1+cu117 torchaudio==0.13.1 --extra-index-url https://download.pytorch.org/whl/cu117\n", "!pip install scikeras[tensorflow]\n" ] }, { "cell_type": "code", "execution_count": 1, "id": "5e65a366", "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "import warnings\n", "warnings.simplefilter(action='ignore', category=FutureWarning)" ] }, { "cell_type": "code", "execution_count": 2, "id": "e01675b8", "metadata": {}, "outputs": [], "source": [ "df = pd.read_csv('cleaned_dataset.csv')" ] }, { "cell_type": "code", "execution_count": 3, "id": "6619eae9", "metadata": {}, "outputs": [], "source": [ "popularity_threshold = df['popularity'].quantile(0.75)\n", "df['popularity_flag'] = (df['popularity'] > popularity_threshold).astype(int)" ] }, { "cell_type": "code", "execution_count": 4, "id": "3b3b3378", "metadata": {}, "outputs": [], "source": [ "df.drop(['popularity'],axis=1,inplace =True)\n", "df['explicit'] = df['explicit'].astype(int)" ] }, { "cell_type": "code", "execution_count": 5, "id": "1b2f098f", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
duration_msexplicitdanceabilityenergykeyloudnessmodespeechinessacousticnessinstrumentalnesslivenessvalencetempotime_signaturetrack_genrepopularity_flag
023066600.6760.46101-6.74600.14300.03220.0000010.35800.715087.9174acoustic1
114961000.4200.16601-17.23510.07630.92400.0000060.10100.267077.4894acoustic1
221082600.4380.35900-9.73410.05570.21000.0000000.11700.120076.3324acoustic1
320193300.2660.05960-18.51510.03630.90500.0000710.13200.1430181.7403acoustic1
419885300.6180.44302-9.68110.05260.46900.0000000.08290.1670119.9494acoustic1
521424000.6880.48106-8.80710.10500.28900.0000000.18900.666098.0174acoustic1
622940000.4070.14702-8.82210.03550.85700.0000030.09130.0765141.2843acoustic1
724294600.7030.444011-9.33110.04170.55900.0000000.09730.7120150.9604acoustic1
818961300.6250.41400-8.70010.03690.29400.0000000.15100.6690130.0884acoustic1
920559400.4420.63201-6.77010.02950.42600.0041900.07350.196078.8994acoustic1
\n", "
" ], "text/plain": [ " duration_ms explicit danceability energy key loudness mode \\\n", "0 230666 0 0.676 0.4610 1 -6.746 0 \n", "1 149610 0 0.420 0.1660 1 -17.235 1 \n", "2 210826 0 0.438 0.3590 0 -9.734 1 \n", "3 201933 0 0.266 0.0596 0 -18.515 1 \n", "4 198853 0 0.618 0.4430 2 -9.681 1 \n", "5 214240 0 0.688 0.4810 6 -8.807 1 \n", "6 229400 0 0.407 0.1470 2 -8.822 1 \n", "7 242946 0 0.703 0.4440 11 -9.331 1 \n", "8 189613 0 0.625 0.4140 0 -8.700 1 \n", "9 205594 0 0.442 0.6320 1 -6.770 1 \n", "\n", " speechiness acousticness instrumentalness liveness valence tempo \\\n", "0 0.1430 0.0322 0.000001 0.3580 0.7150 87.917 \n", "1 0.0763 0.9240 0.000006 0.1010 0.2670 77.489 \n", "2 0.0557 0.2100 0.000000 0.1170 0.1200 76.332 \n", "3 0.0363 0.9050 0.000071 0.1320 0.1430 181.740 \n", "4 0.0526 0.4690 0.000000 0.0829 0.1670 119.949 \n", "5 0.1050 0.2890 0.000000 0.1890 0.6660 98.017 \n", "6 0.0355 0.8570 0.000003 0.0913 0.0765 141.284 \n", "7 0.0417 0.5590 0.000000 0.0973 0.7120 150.960 \n", "8 0.0369 0.2940 0.000000 0.1510 0.6690 130.088 \n", "9 0.0295 0.4260 0.004190 0.0735 0.1960 78.899 \n", "\n", " time_signature track_genre popularity_flag \n", "0 4 acoustic 1 \n", "1 4 acoustic 1 \n", "2 4 acoustic 1 \n", "3 3 acoustic 1 \n", "4 4 acoustic 1 \n", "5 4 acoustic 1 \n", "6 3 acoustic 1 \n", "7 4 acoustic 1 \n", "8 4 acoustic 1 \n", "9 4 acoustic 1 " ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.head(10)\n" ] }, { "cell_type": "code", "execution_count": 6, "id": "aaa25e9a", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Ratio of minority to majority class: 0.319\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
duration_msexplicitdanceabilityenergykeyloudnessmodespeechinessacousticnessinstrumentalnesslivenessvalencetempotime_signaturetrack_genre
023066600.6760.46101-6.74600.14300.03220.0000010.35800.715087.9174acoustic
114961000.4200.16601-17.23510.07630.92400.0000060.10100.267077.4894acoustic
221082600.4380.35900-9.73410.05570.21000.0000000.11700.120076.3324acoustic
320193300.2660.05960-18.51510.03630.90500.0000710.13200.1430181.7403acoustic
419885300.6180.44302-9.68110.05260.46900.0000000.08290.1670119.9494acoustic
................................................
8041338499900.1720.23505-16.39310.04220.64000.9280000.08630.0339125.9955world-music
8041438500000.1740.11700-18.31800.04010.99400.9760000.10500.035085.2394world-music
8041527146600.6290.32900-10.89500.04200.86700.0000000.08390.7430132.3784world-music
8041628389300.5870.50607-10.88910.02970.38100.0000000.27000.4130135.9604world-music
8041724182600.5260.48701-10.20400.07250.68100.0000000.08930.708079.1984world-music
\n", "

80418 rows × 15 columns

\n", "
" ], "text/plain": [ " duration_ms explicit danceability energy key loudness mode \\\n", "0 230666 0 0.676 0.4610 1 -6.746 0 \n", "1 149610 0 0.420 0.1660 1 -17.235 1 \n", "2 210826 0 0.438 0.3590 0 -9.734 1 \n", "3 201933 0 0.266 0.0596 0 -18.515 1 \n", "4 198853 0 0.618 0.4430 2 -9.681 1 \n", "... ... ... ... ... .. ... ... \n", "80413 384999 0 0.172 0.2350 5 -16.393 1 \n", "80414 385000 0 0.174 0.1170 0 -18.318 0 \n", "80415 271466 0 0.629 0.3290 0 -10.895 0 \n", "80416 283893 0 0.587 0.5060 7 -10.889 1 \n", "80417 241826 0 0.526 0.4870 1 -10.204 0 \n", "\n", " speechiness acousticness instrumentalness liveness valence \\\n", "0 0.1430 0.0322 0.000001 0.3580 0.7150 \n", "1 0.0763 0.9240 0.000006 0.1010 0.2670 \n", "2 0.0557 0.2100 0.000000 0.1170 0.1200 \n", "3 0.0363 0.9050 0.000071 0.1320 0.1430 \n", "4 0.0526 0.4690 0.000000 0.0829 0.1670 \n", "... ... ... ... ... ... \n", "80413 0.0422 0.6400 0.928000 0.0863 0.0339 \n", "80414 0.0401 0.9940 0.976000 0.1050 0.0350 \n", "80415 0.0420 0.8670 0.000000 0.0839 0.7430 \n", "80416 0.0297 0.3810 0.000000 0.2700 0.4130 \n", "80417 0.0725 0.6810 0.000000 0.0893 0.7080 \n", "\n", " tempo time_signature track_genre \n", "0 87.917 4 acoustic \n", "1 77.489 4 acoustic \n", "2 76.332 4 acoustic \n", "3 181.740 3 acoustic \n", "4 119.949 4 acoustic \n", "... ... ... ... \n", "80413 125.995 5 world-music \n", "80414 85.239 4 world-music \n", "80415 132.378 4 world-music \n", "80416 135.960 4 world-music \n", "80417 79.198 4 world-music \n", "\n", "[80418 rows x 15 columns]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn.model_selection import train_test_split\n", "from collections import Counter\n", "\n", "\n", "categorical_columns = ['track_genre','key','time_signature']\n", "\n", "#specify the continuous columns to be scaled\n", "continuous_columns = ['loudness', 'duration_ms','tempo']\n", "\n", "\n", "X = df.drop(\"popularity_flag\", axis=1)\n", "y = df[\"popularity_flag\"]\n", "\n", "#convert categorical columns to type string for target encoder to work properly except for binary categorical features\n", "X[categorical_columns]=X[categorical_columns].astype(str)\n", "counter = Counter(y)\n", "# find out the ratio of minority class to majority class for smote-nc\n", "estimate = counter[1] / counter[0]\n", "print('Ratio of minority to majority class: %.3f' % estimate)\n", "\n", "\n", "# Split your data into training and testing sets\n", "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2,random_state=200,stratify=y)\n", "\n", "\n", "X\n" ] }, { "cell_type": "code", "execution_count": 7, "id": "353eeea9", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
num__loudnessnum__duration_msnum__tempocat__track_genrecat__keycat__time_signatureremainder__explicitremainder__danceabilityremainder__energyremainder__moderemainder__speechinessremainder__acousticnessremainder__instrumentalnessremainder__livenessremainder__valence
228320.8566550.0347840.7535610.1348010.2199270.24736400.2470.937000.09140.094800.7890000.72100.1350
790020.4526710.0132430.9321850.0493070.2370470.24736400.2820.066300.04480.989000.9300000.09850.1550
276060.7620960.0514230.5194410.3000000.2370470.24736400.4920.474010.03510.823000.0000220.08550.2700
800200.6770060.0530290.5785400.2441520.2357550.24736400.3270.269010.03390.825000.0002340.10800.0857
492030.7576740.0584430.4666930.7368420.2122960.24736400.8220.446000.03210.486000.0010200.14700.6540
................................................
112650.7130680.0841120.4824100.0079260.2533070.24736400.7440.810010.04730.024000.9070000.06060.7150
511040.8089330.0372630.3475070.1699720.2652640.24736400.8170.539000.06210.014100.0004960.09900.1580
657220.7157420.0261020.4647330.1418760.2494660.24736400.5450.335010.03000.917000.0007140.17700.3060
52180.7769110.0216030.5975310.0116880.2122960.20118400.5040.577000.03150.012800.2150000.10700.7210
412600.7389990.0322840.2389540.8073220.2533070.24736400.4610.500010.06140.002450.0300000.11600.5720
\n", "

64334 rows × 15 columns

\n", "
" ], "text/plain": [ " num__loudness num__duration_ms num__tempo cat__track_genre \\\n", "22832 0.856655 0.034784 0.753561 0.134801 \n", "79002 0.452671 0.013243 0.932185 0.049307 \n", "27606 0.762096 0.051423 0.519441 0.300000 \n", "80020 0.677006 0.053029 0.578540 0.244152 \n", "49203 0.757674 0.058443 0.466693 0.736842 \n", "... ... ... ... ... \n", "11265 0.713068 0.084112 0.482410 0.007926 \n", "51104 0.808933 0.037263 0.347507 0.169972 \n", "65722 0.715742 0.026102 0.464733 0.141876 \n", "5218 0.776911 0.021603 0.597531 0.011688 \n", "41260 0.738999 0.032284 0.238954 0.807322 \n", "\n", " cat__key cat__time_signature remainder__explicit \\\n", "22832 0.219927 0.247364 0 \n", "79002 0.237047 0.247364 0 \n", "27606 0.237047 0.247364 0 \n", "80020 0.235755 0.247364 0 \n", "49203 0.212296 0.247364 0 \n", "... ... ... ... \n", "11265 0.253307 0.247364 0 \n", "51104 0.265264 0.247364 0 \n", "65722 0.249466 0.247364 0 \n", "5218 0.212296 0.201184 0 \n", "41260 0.253307 0.247364 0 \n", "\n", " remainder__danceability remainder__energy remainder__mode \\\n", "22832 0.247 0.9370 0 \n", "79002 0.282 0.0663 0 \n", "27606 0.492 0.4740 1 \n", "80020 0.327 0.2690 1 \n", "49203 0.822 0.4460 0 \n", "... ... ... ... \n", "11265 0.744 0.8100 1 \n", "51104 0.817 0.5390 0 \n", "65722 0.545 0.3350 1 \n", "5218 0.504 0.5770 0 \n", "41260 0.461 0.5000 1 \n", "\n", " remainder__speechiness remainder__acousticness \\\n", "22832 0.0914 0.09480 \n", "79002 0.0448 0.98900 \n", "27606 0.0351 0.82300 \n", "80020 0.0339 0.82500 \n", "49203 0.0321 0.48600 \n", "... ... ... \n", "11265 0.0473 0.02400 \n", "51104 0.0621 0.01410 \n", "65722 0.0300 0.91700 \n", "5218 0.0315 0.01280 \n", "41260 0.0614 0.00245 \n", "\n", " remainder__instrumentalness remainder__liveness remainder__valence \n", "22832 0.789000 0.7210 0.1350 \n", "79002 0.930000 0.0985 0.1550 \n", "27606 0.000022 0.0855 0.2700 \n", "80020 0.000234 0.1080 0.0857 \n", "49203 0.001020 0.1470 0.6540 \n", "... ... ... ... \n", "11265 0.907000 0.0606 0.7150 \n", "51104 0.000496 0.0990 0.1580 \n", "65722 0.000714 0.1770 0.3060 \n", "5218 0.215000 0.1070 0.7210 \n", "41260 0.030000 0.1160 0.5720 \n", "\n", "[64334 rows x 15 columns]" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn.compose import ColumnTransformer\n", "from sklearn.pipeline import Pipeline\n", "from sklearn.preprocessing import MinMaxScaler\n", "from category_encoders import TargetEncoder\n", "\n", "categorical_columns = ['track_genre','key','time_signature']\n", "\n", "continuous_columns = ['loudness', 'duration_ms','tempo']\n", "\n", "continuous_transformer = Pipeline(\n", " steps=[(\"scaler\", MinMaxScaler())]\n", ")\n", "\n", "categorical_transformer = Pipeline(\n", " steps=[\n", " (\"encoder\", TargetEncoder()),\n", " ]\n", ")\n", "\n", "preprocessor = ColumnTransformer(\n", " transformers=[\n", " (\"num\", continuous_transformer, continuous_columns),\n", " (\"cat\", categorical_transformer, categorical_columns),\n", " ]\n", " ,remainder=\"passthrough\"\n", ")\n", "preprocessor.set_output(transform='pandas')\n", "preprocessor \n", "\n", "X_processed = preprocessor.fit_transform(X_train,y_train)\n", "X_processed" ] }, { "cell_type": "code", "execution_count": 8, "id": "cce90012", "metadata": {}, "outputs": [], "source": [ "from imblearn.over_sampling import SMOTENC\n", "\n", "smoteNC = SMOTENC(random_state=42, categorical_features=[1,4,6,13,14],n_jobs=4)\n", "smoteNC2 = SMOTENC(random_state=42, categorical_features=[3,4,5,6,9],n_jobs=4)" ] }, { "cell_type": "code", "execution_count": 9, "id": "d66743ec", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
duration_msexplicitdanceabilityenergykeymodespeechinessinstrumentalnesslivenessvalencetempotime_signaturetrack_genre
2283219742400.2470.9370900.09140.7890000.72100.1350175.1894drum-and-bass
790028494800.2820.0663000.04480.9300000.09850.1550209.5574turkish
2760628430700.4920.4740010.03510.0000220.08550.2700130.1434folk
8002029269300.3270.2690410.03390.0002340.10800.0857141.5144world-music
4920332096000.8220.4460700.03210.0010200.14700.6540119.9944k-pop
..........................................
1126545498800.7440.8100110.04730.9070000.06060.7150123.0184chicago-house
5110421036700.8170.5390600.06210.0004960.09900.158097.0624latin
6572215209300.5450.33501010.03000.0007140.17700.3060119.6174rockabilly
521812860000.5040.5770700.03150.2150000.10700.7210145.1683black-metal
4126018437000.4610.5000110.06140.0300000.11600.572076.1764hip-hop
\n", "

64334 rows × 13 columns

\n", "
" ], "text/plain": [ " duration_ms explicit danceability energy key mode speechiness \\\n", "22832 197424 0 0.247 0.9370 9 0 0.0914 \n", "79002 84948 0 0.282 0.0663 0 0 0.0448 \n", "27606 284307 0 0.492 0.4740 0 1 0.0351 \n", "80020 292693 0 0.327 0.2690 4 1 0.0339 \n", "49203 320960 0 0.822 0.4460 7 0 0.0321 \n", "... ... ... ... ... .. ... ... \n", "11265 454988 0 0.744 0.8100 1 1 0.0473 \n", "51104 210367 0 0.817 0.5390 6 0 0.0621 \n", "65722 152093 0 0.545 0.3350 10 1 0.0300 \n", "5218 128600 0 0.504 0.5770 7 0 0.0315 \n", "41260 184370 0 0.461 0.5000 1 1 0.0614 \n", "\n", " instrumentalness liveness valence tempo time_signature \\\n", "22832 0.789000 0.7210 0.1350 175.189 4 \n", "79002 0.930000 0.0985 0.1550 209.557 4 \n", "27606 0.000022 0.0855 0.2700 130.143 4 \n", "80020 0.000234 0.1080 0.0857 141.514 4 \n", "49203 0.001020 0.1470 0.6540 119.994 4 \n", "... ... ... ... ... ... \n", "11265 0.907000 0.0606 0.7150 123.018 4 \n", "51104 0.000496 0.0990 0.1580 97.062 4 \n", "65722 0.000714 0.1770 0.3060 119.617 4 \n", "5218 0.215000 0.1070 0.7210 145.168 3 \n", "41260 0.030000 0.1160 0.5720 76.176 4 \n", "\n", " track_genre \n", "22832 drum-and-bass \n", "79002 turkish \n", "27606 folk \n", "80020 world-music \n", "49203 k-pop \n", "... ... \n", "11265 chicago-house \n", "51104 latin \n", "65722 rockabilly \n", "5218 black-metal \n", "41260 hip-hop \n", "\n", "[64334 rows x 13 columns]" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from feature_engine.selection import DropCorrelatedFeatures\n", "\n", "fes = DropCorrelatedFeatures(threshold=0.6)\n", "te = fes.fit_transform(X_train,y_train)\n", "te" ] }, { "cell_type": "code", "execution_count": 10, "id": "4797c378", "metadata": {}, "outputs": [], "source": [ "\n", "from sklearn.model_selection import cross_validate\n", "from sklearn.model_selection import StratifiedKFold\n", "from sklearn.metrics import classification_report, confusion_matrix\n", "from sklearn.metrics import roc_auc_score\n", "from sklearn.metrics import average_precision_score,f1_score\n", "from imblearn.pipeline import Pipeline as imbpipeline\n" ] }, { "cell_type": "code", "execution_count": 11, "id": "6c8a6fd9", "metadata": {}, "outputs": [], "source": [ "def eval_base_models(n_folds, model, X, y):\n", " cv = StratifiedKFold(n_splits=n_folds, shuffle=True, random_state=200)\n", " scoring = ['balanced_accuracy', 'average_precision', 'f1']\n", "\n", " results = cross_validate(model, X, y, cv=cv, scoring=scoring, n_jobs=1)\n", " balanced_acc = results['test_balanced_accuracy']\n", " ap_score = results['test_average_precision']\n", " f1_score = results['test_f1']\n", "\n", " # create a DataFrame to store the mean and standard deviation of the scores\n", " data = {\n", " 'score': ['balanced_accuracy', 'average_precision', 'f1_score'],\n", " 'mean': [balanced_acc.mean(), ap_score.mean(), f1_score.mean()],\n", " 'std': [balanced_acc.std(), ap_score.std(), f1_score.std()]\n", " }\n", " df = pd.DataFrame(data)\n", "\n", " # print the results\n", " print(f'Average precision: {ap_score.mean():.3f} (+/- {ap_score.std():.3f})')\n", " print(f'F1 score: {f1_score.mean():.3f} (+/- {f1_score.std():.3f})')\n", " print(f'Balanced accuracy: {balanced_acc.mean():.3f} (+/- {balanced_acc.std():.3f})')\n", "\n", " return df" ] }, { "attachments": {}, "cell_type": "markdown", "id": "58e00c1e", "metadata": {}, "source": [ "### Compare oversampling and feature selection technique on the performance of baseline svc model" ] }, { "cell_type": "code", "execution_count": 12, "id": "077ca8bd", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Average precision: 0.630 (+/- 0.005)\n", "F1 score: 0.533 (+/- 0.008)\n", "Balanced accuracy: 0.687 (+/- 0.005)\n", "Average precision: 0.606 (+/- 0.005)\n", "F1 score: 0.596 (+/- 0.005)\n", "Balanced accuracy: 0.754 (+/- 0.004)\n", "Average precision: 0.630 (+/- 0.005)\n", "F1 score: 0.532 (+/- 0.007)\n", "Balanced accuracy: 0.687 (+/- 0.004)\n", "Average precision: 0.606 (+/- 0.005)\n", "F1 score: 0.596 (+/- 0.006)\n", "Balanced accuracy: 0.754 (+/- 0.004)\n", "Average precision: 0.627 (+/- 0.004)\n", "F1 score: 0.608 (+/- 0.006)\n", "Balanced accuracy: 0.753 (+/- 0.005)\n" ] } ], "source": [ "from sklearn.svm import LinearSVC\n", "\n", "\n", "\n", "svc = LinearSVC(dual=False)\n", "baseline_SVC = imbpipeline(\n", " [\n", " ('preprocessor', preprocessor),\n", " ('classifier', svc)\n", " ]\n", ")\n", "\n", "\n", "\n", "oversampling_SVC = imbpipeline(\n", " [\n", " ('over', smoteNC),\n", " ('preprocessor', preprocessor),\n", " ('classifier', svc)\n", " ]\n", ")\n", "\n", "feature_selction_SVC =imbpipeline(\n", " [\n", " ('preprocessor', preprocessor),\n", " ('feature_selection',fes),\n", " ('classifier', svc)\n", " ]\n", ")\n", "\n", "both_SVC = imbpipeline(\n", " [\n", " ('over', smoteNC),\n", " ('preprocessor', preprocessor),\n", " ('feature_selection',fes),\n", " ('classifier', svc)\n", " ]\n", ")\n", "\n", "oversampling2_SVC = imbpipeline(\n", " [\n", " ('preprocessor', preprocessor),\n", " ('over', smoteNC2),\n", " ('classifier', svc)\n", " ]\n", ")\n", "models = [\n", " ('baseline', baseline_SVC),\n", " ('oversampling', oversampling_SVC),\n", " ('feature_selection', feature_selction_SVC),\n", " ('both', both_SVC),\n", " ('oversampling2', oversampling2_SVC),\n", "\n", "]\n", "\n", "# initialize a list to store the results for each model\n", "results = []\n", "\n", "# iterate over the list of models\n", "for name, model in models:\n", " # evaluate the model using the eval_base_models function\n", " df = eval_base_models(5, model, X, y)\n", "\n", " # add the model name to the DataFrame\n", " df['model'] = name\n", "\n", " # add the DataFrame to the list of results\n", " results.append(df)\n", "\n", "df_combined = pd.concat(results, ignore_index=True)\n" ] }, { "cell_type": "code", "execution_count": 13, "id": "e4c87875", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
meanstd
scoreaverage_precisionbalanced_accuracyf1_scoreaverage_precisionbalanced_accuracyf1_score
model
baseline0.6303970.6870340.5327100.0052170.0047770.008199
both0.6056900.7540490.5963300.0050150.0043150.005606
feature_selection0.6301990.6867200.5321650.0051090.0041340.007051
oversampling0.6059690.7542180.5964700.0051730.0035810.004911
oversampling20.6272380.7532770.6082400.0042900.0048620.006231
\n", "
" ], "text/plain": [ " mean \\\n", "score average_precision balanced_accuracy f1_score \n", "model \n", "baseline 0.630397 0.687034 0.532710 \n", "both 0.605690 0.754049 0.596330 \n", "feature_selection 0.630199 0.686720 0.532165 \n", "oversampling 0.605969 0.754218 0.596470 \n", "oversampling2 0.627238 0.753277 0.608240 \n", "\n", " std \n", "score average_precision balanced_accuracy f1_score \n", "model \n", "baseline 0.005217 0.004777 0.008199 \n", "both 0.005015 0.004315 0.005606 \n", "feature_selection 0.005109 0.004134 0.007051 \n", "oversampling 0.005173 0.003581 0.004911 \n", "oversampling2 0.004290 0.004862 0.006231 " ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_pivot = df_combined.pivot(index='model', columns='score')\n", "\n", "# display the pivoted DataFrame\n", "df_pivot" ] }, { "cell_type": "code", "execution_count": 14, "id": "1317e9df", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
Pipeline(steps=[('preprocessor',\n",
       "                 ColumnTransformer(remainder='passthrough',\n",
       "                                   transformers=[('num',\n",
       "                                                  Pipeline(steps=[('scaler',\n",
       "                                                                   MinMaxScaler())]),\n",
       "                                                  ['loudness', 'duration_ms',\n",
       "                                                   'tempo']),\n",
       "                                                 ('cat',\n",
       "                                                  Pipeline(steps=[('encoder',\n",
       "                                                                   TargetEncoder())]),\n",
       "                                                  ['track_genre', 'key',\n",
       "                                                   'time_signature'])])),\n",
       "                ('over',\n",
       "                 SMOTENC(categorical_features=[3, 4, 5, 6, 9], n_jobs=4,\n",
       "                         random_state=42)),\n",
       "                ('classifier', LinearSVC(dual=False))])
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" ], "text/plain": [ "Pipeline(steps=[('preprocessor',\n", " ColumnTransformer(remainder='passthrough',\n", " transformers=[('num',\n", " Pipeline(steps=[('scaler',\n", " MinMaxScaler())]),\n", " ['loudness', 'duration_ms',\n", " 'tempo']),\n", " ('cat',\n", " Pipeline(steps=[('encoder',\n", " TargetEncoder())]),\n", " ['track_genre', 'key',\n", " 'time_signature'])])),\n", " ('over',\n", " SMOTENC(categorical_features=[3, 4, 5, 6, 9], n_jobs=4,\n", " random_state=42)),\n", " ('classifier', LinearSVC(dual=False))])" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "oversampling2_SVC" ] }, { "attachments": {}, "cell_type": "markdown", "id": "7dd05eb9", "metadata": {}, "source": [ "## Use optuna for hyperparameter tuning" ] }, { "attachments": {}, "cell_type": "markdown", "id": "2c76ac84", "metadata": {}, "source": [ "#### LinearSVC Model" ] }, { "cell_type": "code", "execution_count": 12, "id": "5bcee11c", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "c:\\Users\\zheng\\Documents\\MMU SHIT\\YEAR2\\SEM2\\DATA SCIENCE FUNDAMENTALS\\Music-Popularity-Prediction\\.venv\\lib\\site-packages\\tqdm\\auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n", " from .autonotebook import tqdm as notebook_tqdm\n" ] } ], "source": [ "import optuna\n", "from optuna.pruners import MedianPruner\n", "from optuna.samplers import TPESampler" ] }, { "cell_type": "code", "execution_count": 13, "id": "99edd49f", "metadata": {}, "outputs": [], "source": [ "def objective(trial,model,params,n_jobs=2):\n", " # Define the hyperparameters to optimize\n", " # Set the hyperparameters of the pipeline\n", " cv = StratifiedKFold(n_splits=5,shuffle=True,random_state=200)\n", "\n", " model.set_params(\n", " **params\n", " )\n", " scoring = ['average_precision','f1']\n", " # Evaluate the pipeline using cross-validation\n", " scores = cross_validate(model, X_train, y_train, cv=cv,scoring = scoring,n_jobs=n_jobs)\n", "\n", " return scores['test_average_precision'].mean(),scores['test_f1'].mean()" ] }, { "cell_type": "code", "execution_count": 14, "id": "7305f2d1", "metadata": {}, "outputs": [], "source": [ "def evaluate_study(model,best_params,linear=False):\n", "\n", " print(best_params)\n", " model.set_params(**best_params)\n", "\n", "\n", " model.fit(X_train, y_train)\n", "\n", " y_hat = model.predict(X_test) \n", " if linear:\n", " y_proba = model.decision_function(X_test)\n", " else:\n", " y_proba = model.predict_proba(X_test)[:,1]\n", " \n", " print(classification_report(y_test, y_hat))\n", " cm = confusion_matrix(y_test,y_hat)\n", "\n", " # cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis] # normalize the data\n", "\n", " # plot the heatmap\n", " sns.heatmap(cm, annot=True, fmt='d',cmap='Blues')\n", " # add labels\n", " plt.xlabel('Predicted label')\n", " plt.ylabel('True label')\n", " plt.show()\n", " print(f1_score(y_test,y_hat))\n", " print(average_precision_score(y_test,y_proba))" ] }, { "cell_type": "code", "execution_count": 17, "id": "eae129b1", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "\u001b[32m[I 2023-04-27 17:16:56,434]\u001b[0m A new study created in RDB with name: svc_study\u001b[0m\n", "\u001b[32m[I 2023-04-27 17:18:34,848]\u001b[0m Trial 0 finished with values: [0.6271378864955628, 0.60496196260026] and parameters: {'classifier__C': 0.21065760532526429, 'classifier__max_iter': 764, 'over__sampling_strategy': 0.8704123341552652, 'over__k_neighbors': 12}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 17:18:35,001]\u001b[0m Trial 2 finished with values: [0.6259430247417687, 0.6031775257543313] and parameters: {'classifier__C': 0.5157974012489253, 'classifier__max_iter': 431, 'over__sampling_strategy': 0.7783524651253351, 'over__k_neighbors': 10}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 17:18:45,612]\u001b[0m Trial 3 finished with values: [0.6253452764179211, 0.6040863263964994] and parameters: {'classifier__C': 0.8805440603466927, 'classifier__max_iter': 391, 'over__sampling_strategy': 0.7941995707563849, 'over__k_neighbors': 25}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 17:18:45,666]\u001b[0m Trial 1 finished with values: [0.6253452764179211, 0.6040863263964994] and parameters: {'classifier__C': 0.7929614191569014, 'classifier__max_iter': 465, 'over__sampling_strategy': 0.8873521413202637, 'over__k_neighbors': 23}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 17:20:13,020]\u001b[0m Trial 4 finished with values: [0.6282477173769774, 0.5934056220405848] and parameters: {'classifier__C': 0.9301320685511987, 'classifier__max_iter': 782, 'over__sampling_strategy': 0.8138286759385291, 'over__k_neighbors': 8}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 17:20:13,818]\u001b[0m Trial 5 finished with values: [0.6282204635529418, 0.5929281899674224] and parameters: {'classifier__C': 0.7358484787427078, 'classifier__max_iter': 311, 'over__sampling_strategy': 0.7595946974431383, 'over__k_neighbors': 10}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 17:20:22,416]\u001b[0m Trial 6 finished with values: [0.6301406492411022, 0.5963181056944885] and parameters: {'classifier__C': 0.37654959368271695, 'classifier__max_iter': 515, 'over__sampling_strategy': 0.9580509861222035, 'over__k_neighbors': 2}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 17:20:22,863]\u001b[0m Trial 7 finished with values: [0.6307630488668194, 0.5486846695802206] and parameters: {'classifier__C': 0.20073764010325076, 'classifier__max_iter': 114, 'over__sampling_strategy': 0.35447980891581615, 'over__k_neighbors': 17}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 17:21:54,548]\u001b[0m Trial 8 finished with values: [0.6262782700972777, 0.6039828139345402] and parameters: {'classifier__C': 0.5723261412671994, 'classifier__max_iter': 484, 'over__sampling_strategy': 0.8837153043865249, 'over__k_neighbors': 19}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 17:21:54,733]\u001b[0m Trial 9 finished with values: [0.627348416651848, 0.5991734811719478] and parameters: {'classifier__C': 0.5833274778004167, 'classifier__max_iter': 389, 'over__sampling_strategy': 0.6781258602899781, 'over__k_neighbors': 28}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 17:22:04,155]\u001b[0m Trial 10 finished with values: [0.6249369481674698, 0.6048012295582523] and parameters: {'classifier__C': 0.8913646386789609, 'classifier__max_iter': 794, 'over__sampling_strategy': 0.9963853433976897, 'over__k_neighbors': 26}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 17:22:04,908]\u001b[0m Trial 11 finished with values: [0.628783847591096, 0.5956836304551931] and parameters: {'classifier__C': 0.7996602985543773, 'classifier__max_iter': 460, 'over__sampling_strategy': 0.5623434195828432, 'over__k_neighbors': 17}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 17:23:42,557]\u001b[0m Trial 12 finished with values: [0.6277103148265692, 0.6046972576557923] and parameters: {'classifier__C': 0.3842787765811287, 'classifier__max_iter': 106, 'over__sampling_strategy': 0.7306208161011875, 'over__k_neighbors': 14}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 17:23:43,324]\u001b[0m Trial 13 finished with values: [0.6298378789188432, 0.6077943051709517] and parameters: {'classifier__C': 0.2274287204137743, 'classifier__max_iter': 958, 'over__sampling_strategy': 0.9828399128358947, 'over__k_neighbors': 2}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 17:23:52,989]\u001b[0m Trial 14 finished with values: [0.6298008505361146, 0.6078877260932798] and parameters: {'classifier__C': 0.20208391320743763, 'classifier__max_iter': 986, 'over__sampling_strategy': 0.9980598524526756, 'over__k_neighbors': 1}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 17:23:53,943]\u001b[0m Trial 15 finished with values: [0.6288835375745078, 0.6077027674725691] and parameters: {'classifier__C': 0.20159948785739282, 'classifier__max_iter': 964, 'over__sampling_strategy': 0.9873481559692521, 'over__k_neighbors': 3}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 17:25:22,158]\u001b[0m Trial 16 finished with values: [0.6301839989502371, 0.5963195854172794] and parameters: {'classifier__C': 0.3843755207007472, 'classifier__max_iter': 112, 'over__sampling_strategy': 0.5635989840032031, 'over__k_neighbors': 3}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 17:25:23,175]\u001b[0m Trial 17 finished with values: [0.6307695712010175, 0.5611137807657134] and parameters: {'classifier__C': 0.2369386083671055, 'classifier__max_iter': 949, 'over__sampling_strategy': 0.36475850665972787, 'over__k_neighbors': 2}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 17:25:33,098]\u001b[0m Trial 18 finished with values: [0.6307638553736291, 0.5608749882360707] and parameters: {'classifier__C': 0.6703968104752966, 'classifier__max_iter': 954, 'over__sampling_strategy': 0.3640576217745692, 'over__k_neighbors': 5}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 17:25:33,769]\u001b[0m Trial 19 finished with values: [0.6301211263208712, 0.5877026518438576] and parameters: {'classifier__C': 0.43459690823061076, 'classifier__max_iter': 653, 'over__sampling_strategy': 0.4827431237652612, 'over__k_neighbors': 7}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 17:27:03,014]\u001b[0m Trial 20 finished with values: [0.6307808034539106, 0.5614467531211542] and parameters: {'classifier__C': 0.6499140003222595, 'classifier__max_iter': 648, 'over__sampling_strategy': 0.35944797674461365, 'over__k_neighbors': 6}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 17:27:03,866]\u001b[0m Trial 21 finished with values: [0.6286231982247419, 0.6062646879506349] and parameters: {'classifier__C': 0.29743720890195174, 'classifier__max_iter': 877, 'over__sampling_strategy': 0.9245429158927033, 'over__k_neighbors': 6}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 17:27:13,023]\u001b[0m Trial 22 finished with values: [0.6286443746713253, 0.6063107370182246] and parameters: {'classifier__C': 0.30278636027382355, 'classifier__max_iter': 667, 'over__sampling_strategy': 0.9172899483579131, 'over__k_neighbors': 6}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 17:27:13,871]\u001b[0m Trial 23 finished with values: [0.630316294718609, 0.6038237933521561] and parameters: {'classifier__C': 0.2952391353745413, 'classifier__max_iter': 853, 'over__sampling_strategy': 0.7030145869221363, 'over__k_neighbors': 1}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 17:28:42,169]\u001b[0m Trial 24 finished with values: [0.6295765335657215, 0.6009404295527544] and parameters: {'classifier__C': 0.29846267977500085, 'classifier__max_iter': 630, 'over__sampling_strategy': 0.608453900184778, 'over__k_neighbors': 6}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 17:28:42,955]\u001b[0m Trial 25 finished with values: [0.630346870523415, 0.6018137168471782] and parameters: {'classifier__C': 0.29284985753795084, 'classifier__max_iter': 619, 'over__sampling_strategy': 0.6249284215654641, 'over__k_neighbors': 1}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 17:28:52,741]\u001b[0m Trial 26 finished with values: [0.6292130879983919, 0.6062163858570992] and parameters: {'classifier__C': 0.30545944181831314, 'classifier__max_iter': 626, 'over__sampling_strategy': 0.8298069941031712, 'over__k_neighbors': 4}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 17:28:52,760]\u001b[0m Trial 27 finished with values: [0.6301014622420722, 0.6065469871950416] and parameters: {'classifier__C': 0.9978724186832753, 'classifier__max_iter': 880, 'over__sampling_strategy': 0.8286291465137434, 'over__k_neighbors': 1}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 17:29:44,814]\u001b[0m Trial 28 finished with values: [0.6263172807194213, 0.6044964798439986] and parameters: {'classifier__C': 0.6502553839111899, 'classifier__max_iter': 867, 'over__sampling_strategy': 0.8246162989125656, 'over__k_neighbors': 21}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 17:29:45,269]\u001b[0m Trial 29 finished with values: [0.6277401859010434, 0.6048636542394473] and parameters: {'classifier__C': 0.4795770582032709, 'classifier__max_iter': 260, 'over__sampling_strategy': 0.8304895880696732, 'over__k_neighbors': 9}. \u001b[0m\n" ] } ], "source": [ "from sklearn.svm import LinearSVC\n", "\n", "\n", "\n", "svc = LinearSVC(dual=False)\n", "pipe_SVC = imbpipeline(\n", " [ \n", " ('preprocessor', preprocessor),\n", "\n", " ('over',smoteNC2),\n", "\n", " ('classifier',svc)\n", " ]\n", " )\n", "def create_svcspace(trial):\n", " return {\n", " 'classifier__C': trial.suggest_float(\"classifier__C\", 0.2, 1),\n", " 'classifier__max_iter': trial.suggest_int('classifier__max_iter', 100, 1000),\n", " 'over__sampling_strategy': trial.suggest_float(\"over__sampling_strategy\", 0.35, 1.00),\n", " 'over__k_neighbors': trial.suggest_int('over__k_neighbors', 1, 30),\n", " }\n", "svc_func = lambda trial: objective(trial,pipe_SVC,create_svcspace(trial))\n", "\n", "svc_study = optuna.create_study(directions=['maximize','maximize'],pruner=MedianPruner(),study_name='svc_study',storage='sqlite:///my_study.db',sampler = TPESampler(seed=100))\n", "svc_study.optimize(svc_func, n_trials=30,n_jobs=4)\n", "# # study = optuna.load_study(study_name=\"svc_study\", storage=\"sqlite:///my_study.db\")\n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": 42, "id": "bbe09c19", "metadata": {}, "outputs": [ { "data": { "application/vnd.plotly.v1+json": { "config": { "plotlyServerURL": "https://plot.ly" }, "data": [ { "hovertemplate": "%{text}Trial", "marker": { "color": [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 15, 16, 17, 18, 19, 21, 22, 24, 26, 28, 29 ], "colorbar": { "title": { "text": "Trial" } }, "colorscale": [ [ 0, "rgb(247,251,255)" ], [ 0.125, "rgb(222,235,247)" ], [ 0.25, "rgb(198,219,239)" ], [ 0.375, "rgb(158,202,225)" ], [ 0.5, "rgb(107,174,214)" ], [ 0.625, "rgb(66,146,198)" ], [ 0.75, "rgb(33,113,181)" ], [ 0.875, "rgb(8,81,156)" ], [ 1, "rgb(8,48,107)" ] ], "line": { "color": "Grey", "width": 0.5 } }, "mode": "markers", "showlegend": false, "text": [ "{
\"number\": 0,
\"values\": [
0.6271378864955628,
0.60496196260026
],
\"params\": {
\"classifier__C\": 0.21065760532526429,
\"classifier__max_iter\": 764,
\"over__k_neighbors\": 12,
\"over__sampling_strategy\": 0.8704123341552652
}
}", "{
\"number\": 1,
\"values\": [
0.6253452764179211,
0.6040863263964994
],
\"params\": {
\"classifier__C\": 0.7929614191569014,
\"classifier__max_iter\": 465,
\"over__k_neighbors\": 23,
\"over__sampling_strategy\": 0.8873521413202637
}
}", "{
\"number\": 2,
\"values\": [
0.6259430247417687,
0.6031775257543313
],
\"params\": {
\"classifier__C\": 0.5157974012489253,
\"classifier__max_iter\": 431,
\"over__k_neighbors\": 10,
\"over__sampling_strategy\": 0.7783524651253351
}
}", "{
\"number\": 3,
\"values\": [
0.6253452764179211,
0.6040863263964994
],
\"params\": {
\"classifier__C\": 0.8805440603466927,
\"classifier__max_iter\": 391,
\"over__k_neighbors\": 25,
\"over__sampling_strategy\": 0.7941995707563849
}
}", "{
\"number\": 4,
\"values\": [
0.6282477173769774,
0.5934056220405848
],
\"params\": {
\"classifier__C\": 0.9301320685511987,
\"classifier__max_iter\": 782,
\"over__k_neighbors\": 8,
\"over__sampling_strategy\": 0.8138286759385291
}
}", "{
\"number\": 5,
\"values\": [
0.6282204635529418,
0.5929281899674224
],
\"params\": {
\"classifier__C\": 0.7358484787427078,
\"classifier__max_iter\": 311,
\"over__k_neighbors\": 10,
\"over__sampling_strategy\": 0.7595946974431383
}
}", "{
\"number\": 6,
\"values\": [
0.6301406492411022,
0.5963181056944885
],
\"params\": {
\"classifier__C\": 0.37654959368271695,
\"classifier__max_iter\": 515,
\"over__k_neighbors\": 2,
\"over__sampling_strategy\": 0.9580509861222035
}
}", "{
\"number\": 7,
\"values\": [
0.6307630488668194,
0.5486846695802206
],
\"params\": {
\"classifier__C\": 0.20073764010325076,
\"classifier__max_iter\": 114,
\"over__k_neighbors\": 17,
\"over__sampling_strategy\": 0.35447980891581615
}
}", "{
\"number\": 8,
\"values\": [
0.6262782700972777,
0.6039828139345402
],
\"params\": {
\"classifier__C\": 0.5723261412671994,
\"classifier__max_iter\": 484,
\"over__k_neighbors\": 19,
\"over__sampling_strategy\": 0.8837153043865249
}
}", "{
\"number\": 9,
\"values\": [
0.627348416651848,
0.5991734811719478
],
\"params\": {
\"classifier__C\": 0.5833274778004167,
\"classifier__max_iter\": 389,
\"over__k_neighbors\": 28,
\"over__sampling_strategy\": 0.6781258602899781
}
}", "{
\"number\": 10,
\"values\": [
0.6249369481674698,
0.6048012295582523
],
\"params\": {
\"classifier__C\": 0.8913646386789609,
\"classifier__max_iter\": 794,
\"over__k_neighbors\": 26,
\"over__sampling_strategy\": 0.9963853433976897
}
}", "{
\"number\": 11,
\"values\": [
0.628783847591096,
0.5956836304551931
],
\"params\": {
\"classifier__C\": 0.7996602985543773,
\"classifier__max_iter\": 460,
\"over__k_neighbors\": 17,
\"over__sampling_strategy\": 0.5623434195828432
}
}", "{
\"number\": 12,
\"values\": [
0.6277103148265692,
0.6046972576557923
],
\"params\": {
\"classifier__C\": 0.3842787765811287,
\"classifier__max_iter\": 106,
\"over__k_neighbors\": 14,
\"over__sampling_strategy\": 0.7306208161011875
}
}", "{
\"number\": 15,
\"values\": [
0.6288835375745078,
0.6077027674725691
],
\"params\": {
\"classifier__C\": 0.20159948785739282,
\"classifier__max_iter\": 964,
\"over__k_neighbors\": 3,
\"over__sampling_strategy\": 0.9873481559692521
}
}", "{
\"number\": 16,
\"values\": [
0.6301839989502371,
0.5963195854172794
],
\"params\": {
\"classifier__C\": 0.3843755207007472,
\"classifier__max_iter\": 112,
\"over__k_neighbors\": 3,
\"over__sampling_strategy\": 0.5635989840032031
}
}", "{
\"number\": 17,
\"values\": [
0.6307695712010175,
0.5611137807657134
],
\"params\": {
\"classifier__C\": 0.2369386083671055,
\"classifier__max_iter\": 949,
\"over__k_neighbors\": 2,
\"over__sampling_strategy\": 0.36475850665972787
}
}", "{
\"number\": 18,
\"values\": [
0.6307638553736291,
0.5608749882360707
],
\"params\": {
\"classifier__C\": 0.6703968104752966,
\"classifier__max_iter\": 954,
\"over__k_neighbors\": 5,
\"over__sampling_strategy\": 0.3640576217745692
}
}", "{
\"number\": 19,
\"values\": [
0.6301211263208712,
0.5877026518438576
],
\"params\": {
\"classifier__C\": 0.43459690823061076,
\"classifier__max_iter\": 653,
\"over__k_neighbors\": 7,
\"over__sampling_strategy\": 0.4827431237652612
}
}", "{
\"number\": 21,
\"values\": [
0.6286231982247419,
0.6062646879506349
],
\"params\": {
\"classifier__C\": 0.29743720890195174,
\"classifier__max_iter\": 877,
\"over__k_neighbors\": 6,
\"over__sampling_strategy\": 0.9245429158927033
}
}", "{
\"number\": 22,
\"values\": [
0.6286443746713253,
0.6063107370182246
],
\"params\": {
\"classifier__C\": 0.30278636027382355,
\"classifier__max_iter\": 667,
\"over__k_neighbors\": 6,
\"over__sampling_strategy\": 0.9172899483579131
}
}", "{
\"number\": 24,
\"values\": [
0.6295765335657215,
0.6009404295527544
],
\"params\": {
\"classifier__C\": 0.29846267977500085,
\"classifier__max_iter\": 630,
\"over__k_neighbors\": 6,
\"over__sampling_strategy\": 0.608453900184778
}
}", "{
\"number\": 26,
\"values\": [
0.6292130879983919,
0.6062163858570992
],
\"params\": {
\"classifier__C\": 0.30545944181831314,
\"classifier__max_iter\": 626,
\"over__k_neighbors\": 4,
\"over__sampling_strategy\": 0.8298069941031712
}
}", "{
\"number\": 28,
\"values\": [
0.6263172807194213,
0.6044964798439986
],
\"params\": {
\"classifier__C\": 0.6502553839111899,
\"classifier__max_iter\": 867,
\"over__k_neighbors\": 21,
\"over__sampling_strategy\": 0.8246162989125656
}
}", "{
\"number\": 29,
\"values\": [
0.6277401859010434,
0.6048636542394473
],
\"params\": {
\"classifier__C\": 0.4795770582032709,
\"classifier__max_iter\": 260,
\"over__k_neighbors\": 9,
\"over__sampling_strategy\": 0.8304895880696732
}
}" ], "type": "scatter", "x": [ 0.6271378864955628, 0.6253452764179211, 0.6259430247417687, 0.6253452764179211, 0.6282477173769774, 0.6282204635529418, 0.6301406492411022, 0.6307630488668194, 0.6262782700972777, 0.627348416651848, 0.6249369481674698, 0.628783847591096, 0.6277103148265692, 0.6288835375745078, 0.6301839989502371, 0.6307695712010175, 0.6307638553736291, 0.6301211263208712, 0.6286231982247419, 0.6286443746713253, 0.6295765335657215, 0.6292130879983919, 0.6263172807194213, 0.6277401859010434 ], "y": [ 0.60496196260026, 0.6040863263964994, 0.6031775257543313, 0.6040863263964994, 0.5934056220405848, 0.5929281899674224, 0.5963181056944885, 0.5486846695802206, 0.6039828139345402, 0.5991734811719478, 0.6048012295582523, 0.5956836304551931, 0.6046972576557923, 0.6077027674725691, 0.5963195854172794, 0.5611137807657134, 0.5608749882360707, 0.5877026518438576, 0.6062646879506349, 0.6063107370182246, 0.6009404295527544, 0.6062163858570992, 0.6044964798439986, 0.6048636542394473 ] }, { "hovertemplate": "%{text}Best Trial", "marker": { "color": [ 13, 14, 20, 23, 25, 27 ], "colorbar": { "title": { "text": "Best Trial" }, "x": 1.1, "xpad": 40 }, "colorscale": [ [ 0, "rgb(255,245,240)" ], [ 0.125, "rgb(254,224,210)" ], [ 0.25, "rgb(252,187,161)" ], [ 0.375, "rgb(252,146,114)" ], [ 0.5, "rgb(251,106,74)" ], [ 0.625, "rgb(239,59,44)" ], [ 0.75, "rgb(203,24,29)" ], [ 0.875, "rgb(165,15,21)" ], [ 1, "rgb(103,0,13)" ] ], "line": { "color": "Grey", "width": 0.5 } }, "mode": "markers", "showlegend": false, "text": [ "{
\"number\": 13,
\"values\": [
0.6298378789188432,
0.6077943051709517
],
\"params\": {
\"classifier__C\": 0.2274287204137743,
\"classifier__max_iter\": 958,
\"over__k_neighbors\": 2,
\"over__sampling_strategy\": 0.9828399128358947
}
}", "{
\"number\": 14,
\"values\": [
0.6298008505361146,
0.6078877260932798
],
\"params\": {
\"classifier__C\": 0.20208391320743763,
\"classifier__max_iter\": 986,
\"over__k_neighbors\": 1,
\"over__sampling_strategy\": 0.9980598524526756
}
}", "{
\"number\": 20,
\"values\": [
0.6307808034539106,
0.5614467531211542
],
\"params\": {
\"classifier__C\": 0.6499140003222595,
\"classifier__max_iter\": 648,
\"over__k_neighbors\": 6,
\"over__sampling_strategy\": 0.35944797674461365
}
}", "{
\"number\": 23,
\"values\": [
0.630316294718609,
0.6038237933521561
],
\"params\": {
\"classifier__C\": 0.2952391353745413,
\"classifier__max_iter\": 853,
\"over__k_neighbors\": 1,
\"over__sampling_strategy\": 0.7030145869221363
}
}", "{
\"number\": 25,
\"values\": [
0.630346870523415,
0.6018137168471782
],
\"params\": {
\"classifier__C\": 0.29284985753795084,
\"classifier__max_iter\": 619,
\"over__k_neighbors\": 1,
\"over__sampling_strategy\": 0.6249284215654641
}
}", "{
\"number\": 27,
\"values\": [
0.6301014622420722,
0.6065469871950416
],
\"params\": {
\"classifier__C\": 0.9978724186832753,
\"classifier__max_iter\": 880,
\"over__k_neighbors\": 1,
\"over__sampling_strategy\": 0.8286291465137434
}
}" ], "type": "scatter", "x": [ 0.6298378789188432, 0.6298008505361146, 0.6307808034539106, 0.630316294718609, 0.630346870523415, 0.6301014622420722 ], "y": [ 0.6077943051709517, 0.6078877260932798, 0.5614467531211542, 0.6038237933521561, 0.6018137168471782, 0.6065469871950416 ] } ], "layout": { "template": { "data": { "bar": [ { "error_x": { "color": "#2a3f5f" }, "error_y": { "color": "#2a3f5f" }, "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "bar" } ], "barpolar": [ { "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "barpolar" } ], "carpet": [ { "aaxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "baxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "type": "carpet" } ], "choropleth": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "choropleth" } ], "contour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "contour" } ], "contourcarpet": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "contourcarpet" } ], "heatmap": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmap" } ], "heatmapgl": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmapgl" } ], "histogram": [ { "marker": { "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "histogram" } ], "histogram2d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2d" } ], "histogram2dcontour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2dcontour" } ], "mesh3d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "mesh3d" } ], "parcoords": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "parcoords" } ], "pie": [ { "automargin": true, "type": "pie" } ], "scatter": [ { "fillpattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 }, "type": "scatter" } ], "scatter3d": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatter3d" } ], "scattercarpet": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattercarpet" } ], "scattergeo": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergeo" } ], "scattergl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergl" } ], "scattermapbox": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattermapbox" } ], "scatterpolar": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolar" } ], "scatterpolargl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolargl" } ], "scatterternary": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterternary" } ], "surface": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "surface" } ], "table": [ { "cells": { "fill": { "color": "#EBF0F8" }, "line": { "color": "white" } }, "header": { "fill": { "color": "#C8D4E3" }, "line": { "color": "white" } }, "type": "table" } ] }, "layout": { "annotationdefaults": { "arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1 }, "autotypenumbers": "strict", "coloraxis": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "colorscale": { "diverging": [ [ 0, "#8e0152" ], [ 0.1, "#c51b7d" ], [ 0.2, "#de77ae" ], [ 0.3, "#f1b6da" ], [ 0.4, "#fde0ef" ], [ 0.5, "#f7f7f7" ], [ 0.6, "#e6f5d0" ], [ 0.7, "#b8e186" ], [ 0.8, "#7fbc41" ], [ 0.9, "#4d9221" ], [ 1, "#276419" ] ], "sequential": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "sequentialminus": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ] }, "colorway": [ "#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52" ], "font": { "color": "#2a3f5f" }, "geo": { "bgcolor": "white", "lakecolor": "white", "landcolor": "#E5ECF6", "showlakes": true, "showland": true, "subunitcolor": "white" }, "hoverlabel": { "align": "left" }, "hovermode": "closest", "mapbox": { "style": "light" }, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": { "angularaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "radialaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "scene": { "xaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "yaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "zaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" } }, "shapedefaults": { "line": { "color": "#2a3f5f" } }, "ternary": { "aaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "baxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "caxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "title": { "x": 0.05 }, "xaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 }, "yaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 } } }, "title": { "text": "Pareto-front Plot" }, "xaxis": { "title": { "text": "Mean PR AUC" } }, "yaxis": { "title": { "text": "Mean F1" } } } } }, "metadata": {}, "output_type": "display_data" } ], "source": [ "svc_study = optuna.load_study(study_name=\"svc_study\", storage=\"sqlite:///my_study.db\")\n", "optuna.visualization.plot_pareto_front(svc_study, target_names=[\"Mean PR AUC\", \"Mean F1\"])" ] }, { "cell_type": "code", "execution_count": 81, "id": "33e5c2b8", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'classifier__C': 0.20159948785739282, 'classifier__max_iter': 964, 'over__k_neighbors': 3, 'over__sampling_strategy': 0.9873481559692521}\n", " precision recall f1-score support\n", "\n", " 0 0.90 0.81 0.85 12191\n", " 1 0.54 0.70 0.61 3893\n", "\n", " accuracy 0.78 16084\n", " macro avg 0.72 0.76 0.73 16084\n", "weighted avg 0.81 0.78 0.79 16084\n", "\n" ] }, { "data": { "image/png": "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fUVFRVYfHx/r6tWrrVar1dqgQQPr5MmTbcdLSkqsDRs2tF3LarVau3TpYn3yySetVqvVmpmZaZVkTU1NveA4v/jiC6sk64kTJ2z7CgsLrTVq1LBu2rTJru3AgQOtDzzwgNVqtVoTExOt4eHhdsdHjx5drq8/kmRdunTpRY+/9NJL1oiICNvPzzzzjNXT09N68OBB276VK1daPTw8rEeOHLFarVbrNddcY120aJFdPxMmTLBaLBar1Wq1ZmVlWSVZv/vuu4teF8CViXtIgApYsWKFatasqZKSEpWVlenBBx/Us88+azveqlUru/tGtm3bpr1796pWrVp2/RQWFmrfvn06efKkjhw5oo4dO9qOVatWTR06dCg3bXNeRkaGPD091aVLlwqPe+/evfrtt990++232+0vLi5Wu3btJEm7du2yG4ckWSyWCl/jvMWLF2vGjBnat2+fTp06pbNnz8rPz8+uTePGjXXVVVfZXaesrEyZmZmqVauW9u3bp4EDB+qxxx6ztTl79qz8/f2dHg+AKwuBBKiArl27avbs2fLy8lJISIiqVbP/rePr62v386lTpxQREaGFCxeW66t+/fp/agw+Pj5On3Pq1ClJUkpKil0QkM7dF+MqaWlp6tevn5577jlFRUXJ399f7733nl555RWnx/rmm2+WC0ienp4uGyuAyolAAlSAr6+vwsLCKty+ffv2Wrx4sQIDA8tVCc5r0KCBNm/erFtuuUXSuUpAenq62rdvf8H2rVq1UllZmdavX6/IyMhyx89XaEpLS237wsPDZTablZ2dfdHKSosWLWw36J739ddfO/6Qv7Np0yY1adJE//nPf2z7fvrpp3LtsrOzdfjwYYWEhNiu4+HhoWbNmikoKEghISHav3+/+vXr59T1AVz5uKkVMEC/fv1Ur1499ezZU19++aWysrK0bt06PfHEEzp48KAk6cknn9QLL7ygZcuWaffu3Ro6dOglnyFy9dVXKyYmRgMGDNCyZctsfS5ZskSS1KRJE5lMJq1YsULHjh3TqVOnVKtWLY0YMULx8fFasGCB9u3bp2+//Vavvvqq7UbRwYMHa8+ePRo5cqQyMzO1aNEiJScnO/V5r732WmVnZ+u9997Tvn37NGPGjAveoOvt7a2YmBht27ZNX375pZ544gndd999Cg4OliQ999xzSkpK0owZM/Tjjz9q+/btmj9/vqZMmeLUeABceQgkgAFq1KihDRs2qHHjxurdu7datGihgQMHqrCw0FYxeeqpp/Twww8rJiZGFotFtWrV0r/+9a9L9jt79mzdc889Gjp0qJo3b67HHntMp0+fliRdddVVeu655/T0008rKChIw4YNkyRNmDBBY8eOVVJSklq0aKHu3bsrJSVFoaGhks7d1/Hhhx9q2bJlatOmjebMmaNJkyY59XnvvvtuxcfHa9iwYWrbtq02bdqksWPHlmsXFham3r1764477lC3bt3UunVru2W9gwYN0ty5czV//ny1atVKXbp0UXJysm2sAKouk/Vid9ABAABcJlRIAACA2xFIAACA2xFIAACA2xFIAACA2xFIAACA2xFIAACA2xFIAACA2xFIAACA2xFIAACA2xFIAACA2xFIAACA2/1/Htwizf+Sl64AAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "0.6118384245272463\n", "0.627416495069592\n" ] } ], "source": [ "svc_best_params = svc_study.trials[15].params\n", "\n", "evaluate_study(pipe_SVC,svc_best_params,linear=True)\n" ] }, { "attachments": {}, "cell_type": "markdown", "id": "461e0bbb", "metadata": {}, "source": [ "#### RandomForestClassifier Model" ] }, { "cell_type": "code", "execution_count": 21, "id": "4916b451", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "\u001b[32m[I 2023-04-27 17:32:00,581]\u001b[0m A new study created in RDB with name: rfc_study\u001b[0m\n", "\u001b[32m[I 2023-04-27 17:35:52,499]\u001b[0m Trial 0 finished with values: [0.6457784860397402, 0.6187270393406835] and parameters: {'classifier__n_estimators': 146, 'classifier__max_depth': 4, 'classifier__min_samples_split': 18, 'classifier__min_samples_leaf': 9, 'classifier__max_features': 'log2', 'classifier__criterion': 'gini', 'over__sampling_strategy': 0.5365781966134286, 'over__k_neighbors': 19}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 17:35:55,681]\u001b[0m Trial 1 finished with values: [0.6455393332818595, 0.6188688022101637] and parameters: {'classifier__n_estimators': 845, 'classifier__max_depth': 15, 'classifier__min_samples_split': 18, 'classifier__min_samples_leaf': 20, 'classifier__max_features': 'log2', 'classifier__criterion': 'gini', 'over__sampling_strategy': 0.589950434213136, 'over__k_neighbors': 27}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 17:37:28,900]\u001b[0m Trial 2 finished with values: [0.6158567030498819, 0.6152848033012353] and parameters: {'classifier__n_estimators': 141, 'classifier__max_depth': 9, 'classifier__min_samples_split': 13, 'classifier__min_samples_leaf': 3, 'classifier__max_features': 'sqrt', 'classifier__criterion': 'entropy', 'over__sampling_strategy': 0.5958417647731421, 'over__k_neighbors': 17}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 17:37:30,656]\u001b[0m Trial 3 finished with values: [0.5398945879747302, 0.6015517044276091] and parameters: {'classifier__n_estimators': 971, 'classifier__max_depth': 2, 'classifier__min_samples_split': 5, 'classifier__min_samples_leaf': 7, 'classifier__max_features': 'log2', 'classifier__criterion': 'entropy', 'over__sampling_strategy': 0.9218837346358962, 'over__k_neighbors': 14}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 17:39:33,674]\u001b[0m Trial 4 finished with values: [0.6581801490909269, 0.608470030275935] and parameters: {'classifier__n_estimators': 195, 'classifier__max_depth': 16, 'classifier__min_samples_split': 3, 'classifier__min_samples_leaf': 14, 'classifier__max_features': 'log2', 'classifier__criterion': 'gini', 'over__sampling_strategy': 0.42898528190525675, 'over__k_neighbors': 7}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 17:39:35,354]\u001b[0m Trial 5 finished with values: [0.6589574334035359, 0.6089957694795349] and parameters: {'classifier__n_estimators': 532, 'classifier__max_depth': 20, 'classifier__min_samples_split': 5, 'classifier__min_samples_leaf': 17, 'classifier__max_features': 'sqrt', 'classifier__criterion': 'gini', 'over__sampling_strategy': 0.43873208266745045, 'over__k_neighbors': 14}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 17:42:28,285]\u001b[0m Trial 6 finished with values: [0.6505599390501532, 0.624233752040281] and parameters: {'classifier__n_estimators': 220, 'classifier__max_depth': 20, 'classifier__min_samples_split': 13, 'classifier__min_samples_leaf': 3, 'classifier__max_features': 'log2', 'classifier__criterion': 'entropy', 'over__sampling_strategy': 0.6178764808588074, 'over__k_neighbors': 14}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 17:42:31,250]\u001b[0m Trial 7 finished with values: [0.6379579286393324, 0.6224983697745267] and parameters: {'classifier__n_estimators': 656, 'classifier__max_depth': 11, 'classifier__min_samples_split': 10, 'classifier__min_samples_leaf': 15, 'classifier__max_features': 'log2', 'classifier__criterion': 'entropy', 'over__sampling_strategy': 0.7139119140769485, 'over__k_neighbors': 12}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 17:44:19,052]\u001b[0m Trial 8 finished with values: [0.5624099817641309, 0.6062502673775031] and parameters: {'classifier__n_estimators': 619, 'classifier__max_depth': 2, 'classifier__min_samples_split': 17, 'classifier__min_samples_leaf': 18, 'classifier__max_features': 'sqrt', 'classifier__criterion': 'entropy', 'over__sampling_strategy': 0.8932461021013373, 'over__k_neighbors': 25}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 17:44:22,124]\u001b[0m Trial 9 finished with values: [0.647871554226571, 0.6272805974697734] and parameters: {'classifier__n_estimators': 294, 'classifier__max_depth': 17, 'classifier__min_samples_split': 6, 'classifier__min_samples_leaf': 7, 'classifier__max_features': 'sqrt', 'classifier__criterion': 'gini', 'over__sampling_strategy': 0.6817578152556343, 'over__k_neighbors': 11}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 17:45:51,804]\u001b[0m Trial 10 finished with values: [0.5259406528405167, 0.5620287996142432] and parameters: {'classifier__n_estimators': 606, 'classifier__max_depth': 1, 'classifier__min_samples_split': 14, 'classifier__min_samples_leaf': 17, 'classifier__max_features': 'log2', 'classifier__criterion': 'gini', 'over__sampling_strategy': 0.8424753505080824, 'over__k_neighbors': 6}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 17:45:54,043]\u001b[0m Trial 11 finished with values: [0.6525617070849642, 0.5606514491596611] and parameters: {'classifier__n_estimators': 411, 'classifier__max_depth': 10, 'classifier__min_samples_split': 13, 'classifier__min_samples_leaf': 1, 'classifier__max_features': 'log2', 'classifier__criterion': 'entropy', 'over__sampling_strategy': 0.3583905920374773, 'over__k_neighbors': 2}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 17:48:21,164]\u001b[0m Trial 12 finished with values: [0.6668654803559559, 0.5915465896102717] and parameters: {'classifier__n_estimators': 358, 'classifier__max_depth': 20, 'classifier__min_samples_split': 10, 'classifier__min_samples_leaf': 1, 'classifier__max_features': 'sqrt', 'classifier__criterion': 'entropy', 'over__sampling_strategy': 0.3547768896580491, 'over__k_neighbors': 21}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 17:48:24,410]\u001b[0m Trial 13 finished with values: [0.6583877591807694, 0.610637110065188] and parameters: {'classifier__n_estimators': 407, 'classifier__max_depth': 20, 'classifier__min_samples_split': 9, 'classifier__min_samples_leaf': 11, 'classifier__max_features': 'sqrt', 'classifier__criterion': 'entropy', 'over__sampling_strategy': 0.4733055211643861, 'over__k_neighbors': 21}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 17:51:02,537]\u001b[0m Trial 14 finished with values: [0.6435582016647413, 0.6255286751780276] and parameters: {'classifier__n_estimators': 314, 'classifier__max_depth': 20, 'classifier__min_samples_split': 9, 'classifier__min_samples_leaf': 5, 'classifier__max_features': 'sqrt', 'classifier__criterion': 'entropy', 'over__sampling_strategy': 0.7952207723683082, 'over__k_neighbors': 22}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 17:51:06,863]\u001b[0m Trial 15 finished with values: [0.6338362404935031, 0.6205946355129283] and parameters: {'classifier__n_estimators': 294, 'classifier__max_depth': 13, 'classifier__min_samples_split': 8, 'classifier__min_samples_leaf': 4, 'classifier__max_features': 'log2', 'classifier__criterion': 'entropy', 'over__sampling_strategy': 0.9990937099884252, 'over__k_neighbors': 23}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 17:53:05,108]\u001b[0m Trial 16 finished with values: [0.626635156917178, 0.6195240635679194] and parameters: {'classifier__n_estimators': 280, 'classifier__max_depth': 13, 'classifier__min_samples_split': 16, 'classifier__min_samples_leaf': 2, 'classifier__max_features': 'log2', 'classifier__criterion': 'entropy', 'over__sampling_strategy': 0.9815724136110824, 'over__k_neighbors': 30}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 17:53:08,490]\u001b[0m Trial 17 finished with values: [0.6135718897254712, 0.6110960409710786] and parameters: {'classifier__n_estimators': 459, 'classifier__max_depth': 6, 'classifier__min_samples_split': 16, 'classifier__min_samples_leaf': 1, 'classifier__max_features': 'log2', 'classifier__criterion': 'entropy', 'over__sampling_strategy': 0.6194991144490641, 'over__k_neighbors': 30}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 17:57:01,273]\u001b[0m Trial 18 finished with values: [0.6304722385136827, 0.6179047547972963] and parameters: {'classifier__n_estimators': 457, 'classifier__max_depth': 8, 'classifier__min_samples_split': 12, 'classifier__min_samples_leaf': 11, 'classifier__max_features': 'sqrt', 'classifier__criterion': 'entropy', 'over__sampling_strategy': 0.7227304249186857, 'over__k_neighbors': 18}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 17:57:07,364]\u001b[0m Trial 19 finished with values: [0.6486985656754299, 0.6288791063338287] and parameters: {'classifier__n_estimators': 746, 'classifier__max_depth': 18, 'classifier__min_samples_split': 12, 'classifier__min_samples_leaf': 10, 'classifier__max_features': 'sqrt', 'classifier__criterion': 'entropy', 'over__sampling_strategy': 0.7272211189665856, 'over__k_neighbors': 9}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 18:01:58,465]\u001b[0m Trial 20 finished with values: [0.6570914227372827, 0.6223681187066623] and parameters: {'classifier__n_estimators': 756, 'classifier__max_depth': 18, 'classifier__min_samples_split': 11, 'classifier__min_samples_leaf': 6, 'classifier__max_features': 'sqrt', 'classifier__criterion': 'entropy', 'over__sampling_strategy': 0.5216865704678908, 'over__k_neighbors': 8}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 18:02:07,594]\u001b[0m Trial 21 finished with values: [0.6492495856530484, 0.6285538705535771] and parameters: {'classifier__n_estimators': 758, 'classifier__max_depth': 18, 'classifier__min_samples_split': 11, 'classifier__min_samples_leaf': 9, 'classifier__max_features': 'sqrt', 'classifier__criterion': 'entropy', 'over__sampling_strategy': 0.7530444727082267, 'over__k_neighbors': 8}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 18:05:40,125]\u001b[0m Trial 22 finished with values: [0.6675140939925557, 0.5842531426932009] and parameters: {'classifier__n_estimators': 728, 'classifier__max_depth': 18, 'classifier__min_samples_split': 11, 'classifier__min_samples_leaf': 6, 'classifier__max_features': 'sqrt', 'classifier__criterion': 'entropy', 'over__sampling_strategy': 0.3543632598916632, 'over__k_neighbors': 9}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 18:05:53,444]\u001b[0m Trial 23 finished with values: [0.6681641126887758, 0.5842433909874318] and parameters: {'classifier__n_estimators': 757, 'classifier__max_depth': 18, 'classifier__min_samples_split': 7, 'classifier__min_samples_leaf': 6, 'classifier__max_features': 'sqrt', 'classifier__criterion': 'entropy', 'over__sampling_strategy': 0.35219232617527685, 'over__k_neighbors': 3}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 18:10:01,202]\u001b[0m Trial 24 finished with values: [0.6573525280866581, 0.6159498878314016] and parameters: {'classifier__n_estimators': 862, 'classifier__max_depth': 14, 'classifier__min_samples_split': 7, 'classifier__min_samples_leaf': 9, 'classifier__max_features': 'sqrt', 'classifier__criterion': 'entropy', 'over__sampling_strategy': 0.49538874444690467, 'over__k_neighbors': 4}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 18:10:17,626]\u001b[0m Trial 25 finished with values: [0.6597957569716394, 0.6188639788680736] and parameters: {'classifier__n_estimators': 881, 'classifier__max_depth': 15, 'classifier__min_samples_split': 7, 'classifier__min_samples_leaf': 9, 'classifier__max_features': 'sqrt', 'classifier__criterion': 'entropy', 'over__sampling_strategy': 0.49911191560552626, 'over__k_neighbors': 1}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 18:14:30,405]\u001b[0m Trial 26 finished with values: [0.658094277264654, 0.6214757135849159] and parameters: {'classifier__n_estimators': 820, 'classifier__max_depth': 17, 'classifier__min_samples_split': 2, 'classifier__min_samples_leaf': 13, 'classifier__max_features': 'sqrt', 'classifier__criterion': 'entropy', 'over__sampling_strategy': 0.5516450253093519, 'over__k_neighbors': 1}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 18:14:51,144]\u001b[0m Trial 27 finished with values: [0.6559723199421449, 0.6204850899021139] and parameters: {'classifier__n_estimators': 789, 'classifier__max_depth': 18, 'classifier__min_samples_split': 2, 'classifier__min_samples_leaf': 13, 'classifier__max_features': 'sqrt', 'classifier__criterion': 'entropy', 'over__sampling_strategy': 0.5357368739946705, 'over__k_neighbors': 4}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 18:19:15,815]\u001b[0m Trial 28 finished with values: [0.6485791873797704, 0.621370566743404] and parameters: {'classifier__n_estimators': 987, 'classifier__max_depth': 12, 'classifier__min_samples_split': 3, 'classifier__min_samples_leaf': 13, 'classifier__max_features': 'sqrt', 'classifier__criterion': 'entropy', 'over__sampling_strategy': 0.5563957091557683, 'over__k_neighbors': 4}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 18:19:39,098]\u001b[0m Trial 29 finished with values: [0.6452819707115311, 0.6233399945710498] and parameters: {'classifier__n_estimators': 985, 'classifier__max_depth': 12, 'classifier__min_samples_split': 4, 'classifier__min_samples_leaf': 12, 'classifier__max_features': 'sqrt', 'classifier__criterion': 'entropy', 'over__sampling_strategy': 0.6649391677270532, 'over__k_neighbors': 4}. \u001b[0m\n" ] } ], "source": [ "from sklearn.ensemble import RandomForestClassifier\n", "\n", "\n", "pipe_RFC = imbpipeline(\n", " [\n", "\n", "\n", " ('preprocessor',preprocessor),\n", " ('over',smoteNC2),\n", " ('classifier',RandomForestClassifier(n_jobs=4))\n", " ]\n", " )\n", "\n", "\n", "def rfc_space(trial):\n", " return {\n", " 'classifier__n_estimators': trial.suggest_int('classifier__n_estimators', 100, 1000),\n", " 'classifier__max_depth': trial.suggest_int('classifier__max_depth', 1, 20),\n", " 'classifier__min_samples_split': trial.suggest_int('classifier__min_samples_split', 2, 20),\n", " 'classifier__min_samples_leaf': trial.suggest_int('classifier__min_samples_leaf', 1, 20),\n", " 'classifier__max_features': trial.suggest_categorical('classifier__max_features', ['sqrt', 'log2']),\n", " 'classifier__criterion': trial.suggest_categorical('classifier__criterion', ['gini', 'entropy']),\n", " 'over__sampling_strategy': trial.suggest_float(\"over__sampling_strategy\", 0.35, 1.00),\n", " 'over__k_neighbors': trial.suggest_int('over__k_neighbors', 1, 30)\n", "}\n", "rfc_func = lambda trial: objective(trial,pipe_RFC,rfc_space(trial))\n", "\n", "rfc_study = optuna.create_study(directions=['maximize','maximize'],pruner=MedianPruner(),study_name='rfc_study',storage='sqlite:///my_study.db',sampler = TPESampler(seed=100))\n", "rfc_study.optimize(rfc_func, n_trials=30,n_jobs=2)\n", "\n" ] }, { "cell_type": "code", "execution_count": 82, "id": "d98f8134", "metadata": {}, "outputs": [ { "data": { "application/vnd.plotly.v1+json": { "config": { "plotlyServerURL": "https://plot.ly" }, "data": [ { "hovertemplate": "%{text}Trial", "marker": { "color": [ 0, 1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 24, 27, 28, 29 ], "colorbar": { "title": { "text": "Trial" } }, "colorscale": [ [ 0, "rgb(247,251,255)" ], [ 0.125, "rgb(222,235,247)" ], [ 0.25, "rgb(198,219,239)" ], [ 0.375, "rgb(158,202,225)" ], [ 0.5, "rgb(107,174,214)" ], [ 0.625, "rgb(66,146,198)" ], [ 0.75, "rgb(33,113,181)" ], [ 0.875, "rgb(8,81,156)" ], [ 1, "rgb(8,48,107)" ] ], "line": { "color": "Grey", "width": 0.5 } }, "mode": "markers", "showlegend": false, "text": [ "{
\"number\": 0,
\"values\": [
0.6457784860397402,
0.6187270393406835
],
\"params\": {
\"classifier__criterion\": \"gini\",
\"classifier__max_depth\": 4,
\"classifier__max_features\": \"log2\",
\"classifier__min_samples_leaf\": 9,
\"classifier__min_samples_split\": 18,
\"classifier__n_estimators\": 146,
\"over__k_neighbors\": 19,
\"over__sampling_strategy\": 0.5365781966134286
}
}", "{
\"number\": 1,
\"values\": [
0.6455393332818595,
0.6188688022101637
],
\"params\": {
\"classifier__criterion\": \"gini\",
\"classifier__max_depth\": 15,
\"classifier__max_features\": \"log2\",
\"classifier__min_samples_leaf\": 20,
\"classifier__min_samples_split\": 18,
\"classifier__n_estimators\": 845,
\"over__k_neighbors\": 27,
\"over__sampling_strategy\": 0.589950434213136
}
}", "{
\"number\": 2,
\"values\": [
0.6158567030498819,
0.6152848033012353
],
\"params\": {
\"classifier__criterion\": \"entropy\",
\"classifier__max_depth\": 9,
\"classifier__max_features\": \"sqrt\",
\"classifier__min_samples_leaf\": 3,
\"classifier__min_samples_split\": 13,
\"classifier__n_estimators\": 141,
\"over__k_neighbors\": 17,
\"over__sampling_strategy\": 0.5958417647731421
}
}", "{
\"number\": 3,
\"values\": [
0.5398945879747302,
0.6015517044276091
],
\"params\": {
\"classifier__criterion\": \"entropy\",
\"classifier__max_depth\": 2,
\"classifier__max_features\": \"log2\",
\"classifier__min_samples_leaf\": 7,
\"classifier__min_samples_split\": 5,
\"classifier__n_estimators\": 971,
\"over__k_neighbors\": 14,
\"over__sampling_strategy\": 0.9218837346358962
}
}", "{
\"number\": 4,
\"values\": [
0.6581801490909269,
0.608470030275935
],
\"params\": {
\"classifier__criterion\": \"gini\",
\"classifier__max_depth\": 16,
\"classifier__max_features\": \"log2\",
\"classifier__min_samples_leaf\": 14,
\"classifier__min_samples_split\": 3,
\"classifier__n_estimators\": 195,
\"over__k_neighbors\": 7,
\"over__sampling_strategy\": 0.42898528190525675
}
}", "{
\"number\": 5,
\"values\": [
0.6589574334035359,
0.6089957694795349
],
\"params\": {
\"classifier__criterion\": \"gini\",
\"classifier__max_depth\": 20,
\"classifier__max_features\": \"sqrt\",
\"classifier__min_samples_leaf\": 17,
\"classifier__min_samples_split\": 5,
\"classifier__n_estimators\": 532,
\"over__k_neighbors\": 14,
\"over__sampling_strategy\": 0.43873208266745045
}
}", "{
\"number\": 7,
\"values\": [
0.6379579286393324,
0.6224983697745267
],
\"params\": {
\"classifier__criterion\": \"entropy\",
\"classifier__max_depth\": 11,
\"classifier__max_features\": \"log2\",
\"classifier__min_samples_leaf\": 15,
\"classifier__min_samples_split\": 10,
\"classifier__n_estimators\": 656,
\"over__k_neighbors\": 12,
\"over__sampling_strategy\": 0.7139119140769485
}
}", "{
\"number\": 8,
\"values\": [
0.5624099817641309,
0.6062502673775031
],
\"params\": {
\"classifier__criterion\": \"entropy\",
\"classifier__max_depth\": 2,
\"classifier__max_features\": \"sqrt\",
\"classifier__min_samples_leaf\": 18,
\"classifier__min_samples_split\": 17,
\"classifier__n_estimators\": 619,
\"over__k_neighbors\": 25,
\"over__sampling_strategy\": 0.8932461021013373
}
}", "{
\"number\": 9,
\"values\": [
0.647871554226571,
0.6272805974697734
],
\"params\": {
\"classifier__criterion\": \"gini\",
\"classifier__max_depth\": 17,
\"classifier__max_features\": \"sqrt\",
\"classifier__min_samples_leaf\": 7,
\"classifier__min_samples_split\": 6,
\"classifier__n_estimators\": 294,
\"over__k_neighbors\": 11,
\"over__sampling_strategy\": 0.6817578152556343
}
}", "{
\"number\": 10,
\"values\": [
0.5259406528405167,
0.5620287996142432
],
\"params\": {
\"classifier__criterion\": \"gini\",
\"classifier__max_depth\": 1,
\"classifier__max_features\": \"log2\",
\"classifier__min_samples_leaf\": 17,
\"classifier__min_samples_split\": 14,
\"classifier__n_estimators\": 606,
\"over__k_neighbors\": 6,
\"over__sampling_strategy\": 0.8424753505080824
}
}", "{
\"number\": 11,
\"values\": [
0.6525617070849642,
0.5606514491596611
],
\"params\": {
\"classifier__criterion\": \"entropy\",
\"classifier__max_depth\": 10,
\"classifier__max_features\": \"log2\",
\"classifier__min_samples_leaf\": 1,
\"classifier__min_samples_split\": 13,
\"classifier__n_estimators\": 411,
\"over__k_neighbors\": 2,
\"over__sampling_strategy\": 0.3583905920374773
}
}", "{
\"number\": 13,
\"values\": [
0.6583877591807694,
0.610637110065188
],
\"params\": {
\"classifier__criterion\": \"entropy\",
\"classifier__max_depth\": 20,
\"classifier__max_features\": \"sqrt\",
\"classifier__min_samples_leaf\": 11,
\"classifier__min_samples_split\": 9,
\"classifier__n_estimators\": 407,
\"over__k_neighbors\": 21,
\"over__sampling_strategy\": 0.4733055211643861
}
}", "{
\"number\": 14,
\"values\": [
0.6435582016647413,
0.6255286751780276
],
\"params\": {
\"classifier__criterion\": \"entropy\",
\"classifier__max_depth\": 20,
\"classifier__max_features\": \"sqrt\",
\"classifier__min_samples_leaf\": 5,
\"classifier__min_samples_split\": 9,
\"classifier__n_estimators\": 314,
\"over__k_neighbors\": 22,
\"over__sampling_strategy\": 0.7952207723683082
}
}", "{
\"number\": 15,
\"values\": [
0.6338362404935031,
0.6205946355129283
],
\"params\": {
\"classifier__criterion\": \"entropy\",
\"classifier__max_depth\": 13,
\"classifier__max_features\": \"log2\",
\"classifier__min_samples_leaf\": 4,
\"classifier__min_samples_split\": 8,
\"classifier__n_estimators\": 294,
\"over__k_neighbors\": 23,
\"over__sampling_strategy\": 0.9990937099884252
}
}", "{
\"number\": 16,
\"values\": [
0.626635156917178,
0.6195240635679194
],
\"params\": {
\"classifier__criterion\": \"entropy\",
\"classifier__max_depth\": 13,
\"classifier__max_features\": \"log2\",
\"classifier__min_samples_leaf\": 2,
\"classifier__min_samples_split\": 16,
\"classifier__n_estimators\": 280,
\"over__k_neighbors\": 30,
\"over__sampling_strategy\": 0.9815724136110824
}
}", "{
\"number\": 17,
\"values\": [
0.6135718897254712,
0.6110960409710786
],
\"params\": {
\"classifier__criterion\": \"entropy\",
\"classifier__max_depth\": 6,
\"classifier__max_features\": \"log2\",
\"classifier__min_samples_leaf\": 1,
\"classifier__min_samples_split\": 16,
\"classifier__n_estimators\": 459,
\"over__k_neighbors\": 30,
\"over__sampling_strategy\": 0.6194991144490641
}
}", "{
\"number\": 18,
\"values\": [
0.6304722385136827,
0.6179047547972963
],
\"params\": {
\"classifier__criterion\": \"entropy\",
\"classifier__max_depth\": 8,
\"classifier__max_features\": \"sqrt\",
\"classifier__min_samples_leaf\": 11,
\"classifier__min_samples_split\": 12,
\"classifier__n_estimators\": 457,
\"over__k_neighbors\": 18,
\"over__sampling_strategy\": 0.7227304249186857
}
}", "{
\"number\": 24,
\"values\": [
0.6573525280866581,
0.6159498878314016
],
\"params\": {
\"classifier__criterion\": \"entropy\",
\"classifier__max_depth\": 14,
\"classifier__max_features\": \"sqrt\",
\"classifier__min_samples_leaf\": 9,
\"classifier__min_samples_split\": 7,
\"classifier__n_estimators\": 862,
\"over__k_neighbors\": 4,
\"over__sampling_strategy\": 0.49538874444690467
}
}", "{
\"number\": 27,
\"values\": [
0.6559723199421449,
0.6204850899021139
],
\"params\": {
\"classifier__criterion\": \"entropy\",
\"classifier__max_depth\": 18,
\"classifier__max_features\": \"sqrt\",
\"classifier__min_samples_leaf\": 13,
\"classifier__min_samples_split\": 2,
\"classifier__n_estimators\": 789,
\"over__k_neighbors\": 4,
\"over__sampling_strategy\": 0.5357368739946705
}
}", "{
\"number\": 28,
\"values\": [
0.6485791873797704,
0.621370566743404
],
\"params\": {
\"classifier__criterion\": \"entropy\",
\"classifier__max_depth\": 12,
\"classifier__max_features\": \"sqrt\",
\"classifier__min_samples_leaf\": 13,
\"classifier__min_samples_split\": 3,
\"classifier__n_estimators\": 987,
\"over__k_neighbors\": 4,
\"over__sampling_strategy\": 0.5563957091557683
}
}", "{
\"number\": 29,
\"values\": [
0.6452819707115311,
0.6233399945710498
],
\"params\": {
\"classifier__criterion\": \"entropy\",
\"classifier__max_depth\": 12,
\"classifier__max_features\": \"sqrt\",
\"classifier__min_samples_leaf\": 12,
\"classifier__min_samples_split\": 4,
\"classifier__n_estimators\": 985,
\"over__k_neighbors\": 4,
\"over__sampling_strategy\": 0.6649391677270532
}
}" ], "type": "scatter", "x": [ 0.6457784860397402, 0.6455393332818595, 0.6158567030498819, 0.5398945879747302, 0.6581801490909269, 0.6589574334035359, 0.6379579286393324, 0.5624099817641309, 0.647871554226571, 0.5259406528405167, 0.6525617070849642, 0.6583877591807694, 0.6435582016647413, 0.6338362404935031, 0.626635156917178, 0.6135718897254712, 0.6304722385136827, 0.6573525280866581, 0.6559723199421449, 0.6485791873797704, 0.6452819707115311 ], "y": [ 0.6187270393406835, 0.6188688022101637, 0.6152848033012353, 0.6015517044276091, 0.608470030275935, 0.6089957694795349, 0.6224983697745267, 0.6062502673775031, 0.6272805974697734, 0.5620287996142432, 0.5606514491596611, 0.610637110065188, 0.6255286751780276, 0.6205946355129283, 0.6195240635679194, 0.6110960409710786, 0.6179047547972963, 0.6159498878314016, 0.6204850899021139, 0.621370566743404, 0.6233399945710498 ] }, { "hovertemplate": "%{text}Best Trial", "marker": { "color": [ 6, 12, 19, 20, 21, 22, 23, 25, 26 ], "colorbar": { "title": { "text": "Best Trial" }, "x": 1.1, "xpad": 40 }, "colorscale": [ [ 0, "rgb(255,245,240)" ], [ 0.125, "rgb(254,224,210)" ], [ 0.25, "rgb(252,187,161)" ], [ 0.375, "rgb(252,146,114)" ], [ 0.5, "rgb(251,106,74)" ], [ 0.625, "rgb(239,59,44)" ], [ 0.75, "rgb(203,24,29)" ], [ 0.875, "rgb(165,15,21)" ], [ 1, "rgb(103,0,13)" ] ], "line": { "color": "Grey", "width": 0.5 } }, "mode": "markers", "showlegend": false, "text": [ "{
\"number\": 6,
\"values\": [
0.6505599390501532,
0.624233752040281
],
\"params\": {
\"classifier__criterion\": \"entropy\",
\"classifier__max_depth\": 20,
\"classifier__max_features\": \"log2\",
\"classifier__min_samples_leaf\": 3,
\"classifier__min_samples_split\": 13,
\"classifier__n_estimators\": 220,
\"over__k_neighbors\": 14,
\"over__sampling_strategy\": 0.6178764808588074
}
}", "{
\"number\": 12,
\"values\": [
0.6668654803559559,
0.5915465896102717
],
\"params\": {
\"classifier__criterion\": \"entropy\",
\"classifier__max_depth\": 20,
\"classifier__max_features\": \"sqrt\",
\"classifier__min_samples_leaf\": 1,
\"classifier__min_samples_split\": 10,
\"classifier__n_estimators\": 358,
\"over__k_neighbors\": 21,
\"over__sampling_strategy\": 0.3547768896580491
}
}", "{
\"number\": 19,
\"values\": [
0.6486985656754299,
0.6288791063338287
],
\"params\": {
\"classifier__criterion\": \"entropy\",
\"classifier__max_depth\": 18,
\"classifier__max_features\": \"sqrt\",
\"classifier__min_samples_leaf\": 10,
\"classifier__min_samples_split\": 12,
\"classifier__n_estimators\": 746,
\"over__k_neighbors\": 9,
\"over__sampling_strategy\": 0.7272211189665856
}
}", "{
\"number\": 20,
\"values\": [
0.6570914227372827,
0.6223681187066623
],
\"params\": {
\"classifier__criterion\": \"entropy\",
\"classifier__max_depth\": 18,
\"classifier__max_features\": \"sqrt\",
\"classifier__min_samples_leaf\": 6,
\"classifier__min_samples_split\": 11,
\"classifier__n_estimators\": 756,
\"over__k_neighbors\": 8,
\"over__sampling_strategy\": 0.5216865704678908
}
}", "{
\"number\": 21,
\"values\": [
0.6492495856530484,
0.6285538705535771
],
\"params\": {
\"classifier__criterion\": \"entropy\",
\"classifier__max_depth\": 18,
\"classifier__max_features\": \"sqrt\",
\"classifier__min_samples_leaf\": 9,
\"classifier__min_samples_split\": 11,
\"classifier__n_estimators\": 758,
\"over__k_neighbors\": 8,
\"over__sampling_strategy\": 0.7530444727082267
}
}", "{
\"number\": 22,
\"values\": [
0.6675140939925557,
0.5842531426932009
],
\"params\": {
\"classifier__criterion\": \"entropy\",
\"classifier__max_depth\": 18,
\"classifier__max_features\": \"sqrt\",
\"classifier__min_samples_leaf\": 6,
\"classifier__min_samples_split\": 11,
\"classifier__n_estimators\": 728,
\"over__k_neighbors\": 9,
\"over__sampling_strategy\": 0.3543632598916632
}
}", "{
\"number\": 23,
\"values\": [
0.6681641126887758,
0.5842433909874318
],
\"params\": {
\"classifier__criterion\": \"entropy\",
\"classifier__max_depth\": 18,
\"classifier__max_features\": \"sqrt\",
\"classifier__min_samples_leaf\": 6,
\"classifier__min_samples_split\": 7,
\"classifier__n_estimators\": 757,
\"over__k_neighbors\": 3,
\"over__sampling_strategy\": 0.35219232617527685
}
}", "{
\"number\": 25,
\"values\": [
0.6597957569716394,
0.6188639788680736
],
\"params\": {
\"classifier__criterion\": \"entropy\",
\"classifier__max_depth\": 15,
\"classifier__max_features\": \"sqrt\",
\"classifier__min_samples_leaf\": 9,
\"classifier__min_samples_split\": 7,
\"classifier__n_estimators\": 881,
\"over__k_neighbors\": 1,
\"over__sampling_strategy\": 0.49911191560552626
}
}", "{
\"number\": 26,
\"values\": [
0.658094277264654,
0.6214757135849159
],
\"params\": {
\"classifier__criterion\": \"entropy\",
\"classifier__max_depth\": 17,
\"classifier__max_features\": \"sqrt\",
\"classifier__min_samples_leaf\": 13,
\"classifier__min_samples_split\": 2,
\"classifier__n_estimators\": 820,
\"over__k_neighbors\": 1,
\"over__sampling_strategy\": 0.5516450253093519
}
}" ], "type": "scatter", "x": [ 0.6505599390501532, 0.6668654803559559, 0.6486985656754299, 0.6570914227372827, 0.6492495856530484, 0.6675140939925557, 0.6681641126887758, 0.6597957569716394, 0.658094277264654 ], "y": [ 0.624233752040281, 0.5915465896102717, 0.6288791063338287, 0.6223681187066623, 0.6285538705535771, 0.5842531426932009, 0.5842433909874318, 0.6188639788680736, 0.6214757135849159 ] } ], "layout": { "template": { "data": { "bar": [ { "error_x": { "color": "#2a3f5f" }, "error_y": { "color": "#2a3f5f" }, "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "bar" } ], "barpolar": [ { "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "barpolar" } ], "carpet": [ { "aaxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "baxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "type": "carpet" } ], "choropleth": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "choropleth" } ], "contour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "contour" } ], "contourcarpet": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "contourcarpet" } ], "heatmap": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmap" } ], "heatmapgl": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmapgl" } ], "histogram": [ { "marker": { "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "histogram" } ], "histogram2d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2d" } ], "histogram2dcontour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2dcontour" } ], "mesh3d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "mesh3d" } ], "parcoords": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "parcoords" } ], "pie": [ { "automargin": true, "type": "pie" } ], "scatter": [ { "fillpattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 }, "type": "scatter" } ], "scatter3d": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatter3d" } ], "scattercarpet": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattercarpet" } ], "scattergeo": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergeo" } ], "scattergl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergl" } ], "scattermapbox": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattermapbox" } ], "scatterpolar": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolar" } ], "scatterpolargl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolargl" } ], "scatterternary": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterternary" } ], "surface": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "surface" } ], "table": [ { "cells": { "fill": { "color": "#EBF0F8" }, "line": { "color": "white" } }, "header": { "fill": { "color": "#C8D4E3" }, "line": { "color": "white" } }, "type": "table" } ] }, "layout": { "annotationdefaults": { "arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1 }, "autotypenumbers": "strict", "coloraxis": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "colorscale": { "diverging": [ [ 0, "#8e0152" ], [ 0.1, "#c51b7d" ], [ 0.2, "#de77ae" ], [ 0.3, "#f1b6da" ], [ 0.4, "#fde0ef" ], [ 0.5, "#f7f7f7" ], [ 0.6, "#e6f5d0" ], [ 0.7, "#b8e186" ], [ 0.8, "#7fbc41" ], [ 0.9, "#4d9221" ], [ 1, "#276419" ] ], "sequential": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "sequentialminus": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ] }, "colorway": [ "#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52" ], "font": { "color": "#2a3f5f" }, "geo": { "bgcolor": "white", "lakecolor": "white", "landcolor": "#E5ECF6", "showlakes": true, "showland": true, "subunitcolor": "white" }, "hoverlabel": { "align": "left" }, "hovermode": "closest", "mapbox": { "style": "light" }, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": { "angularaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "radialaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "scene": { "xaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "yaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "zaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" } }, "shapedefaults": { "line": { "color": "#2a3f5f" } }, "ternary": { "aaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "baxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "caxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "title": { "x": 0.05 }, "xaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 }, "yaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 } } }, "title": { "text": "Pareto-front Plot" }, "xaxis": { "title": { "text": "Mean PR AUC" } }, "yaxis": { "title": { "text": "Mean F1" } } } } }, "metadata": {}, "output_type": "display_data" } ], "source": [ "rfc_study = optuna.load_study(study_name=\"rfc_study\", storage=\"sqlite:///my_study.db\")\n", "optuna.visualization.plot_pareto_front(rfc_study, target_names=[\"Mean PR AUC\", \"Mean F1\"])" ] }, { "cell_type": "code", "execution_count": 83, "id": "1172e6f6", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'classifier__criterion': 'entropy', 'classifier__max_depth': 15, 'classifier__max_features': 'sqrt', 'classifier__min_samples_leaf': 9, 'classifier__min_samples_split': 7, 'classifier__n_estimators': 881, 'over__k_neighbors': 1, 'over__sampling_strategy': 0.49911191560552626}\n", " precision recall f1-score support\n", "\n", " 0 0.88 0.88 0.88 12191\n", " 1 0.61 0.62 0.61 3893\n", "\n", " accuracy 0.81 16084\n", " macro avg 0.75 0.75 0.75 16084\n", "weighted avg 0.81 0.81 0.81 16084\n", "\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "0.6147740366150302\n", "0.6574943365651901\n" ] } ], "source": [ "\n", "rfc_best_params = rfc_study.trials[25].params\n", "evaluate_study(pipe_RFC,rfc_best_params)\n" ] }, { "attachments": {}, "cell_type": "markdown", "id": "663f0abc", "metadata": {}, "source": [ "#### LGBM Classifier Model" ] }, { "cell_type": "code", "execution_count": 27, "id": "87c95fc6", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "\u001b[32m[I 2023-04-27 18:42:08,518]\u001b[0m A new study created in RDB with name: lgbm_study\u001b[0m\n", "\u001b[32m[I 2023-04-27 18:43:15,882]\u001b[0m Trial 0 finished with values: [0.6481791433257595, 0.608212027804601] and parameters: {'classifier__n_estimators': 878, 'classifier__learning_rate': 0.0914658479860042, 'classifier__num_leaves': 52, 'classifier__min_child_samples': 39, 'classifier__subsample': 0.8551474722356436, 'classifier__colsample_bytree': 0.6923913504558172, 'classifier__reg_alpha': 0.295762093408928, 'classifier__reg_lambda': 0.45757904384482906, 'classifier__max_depth': 4, 'over__sampling_strategy': 0.6644200991667422, 'over__k_neighbors': 14}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 18:43:16,206]\u001b[0m Trial 1 finished with values: [0.6481791433257595, 0.608212027804601] and parameters: {'classifier__n_estimators': 734, 'classifier__learning_rate': 0.12262001940318636, 'classifier__num_leaves': 139, 'classifier__min_child_samples': 18, 'classifier__subsample': 0.9551502480484655, 'classifier__colsample_bytree': 0.8836872773395599, 'classifier__reg_alpha': 0.3571316810129358, 'classifier__reg_lambda': 0.7796445000270502, 'classifier__max_depth': 6, 'over__sampling_strategy': 0.6306694569878601, 'over__k_neighbors': 2}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 18:44:15,194]\u001b[0m Trial 2 finished with values: [0.6445797291737211, 0.608400783342778] and parameters: {'classifier__n_estimators': 635, 'classifier__learning_rate': 0.10522687923567785, 'classifier__num_leaves': 79, 'classifier__min_child_samples': 38, 'classifier__subsample': 0.8604173819294232, 'classifier__colsample_bytree': 0.6494467550658721, 'classifier__reg_alpha': 0.24399972442948165, 'classifier__reg_lambda': 0.9345718162446607, 'classifier__max_depth': 9, 'over__sampling_strategy': 0.7388052336432036, 'over__k_neighbors': 6}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 18:44:15,687]\u001b[0m Trial 3 finished with values: [0.6217637298126792, 0.5977452305257794] and parameters: {'classifier__n_estimators': 381, 'classifier__learning_rate': 0.017736285174618147, 'classifier__num_leaves': 86, 'classifier__min_child_samples': 19, 'classifier__subsample': 0.6148958076790818, 'classifier__colsample_bytree': 0.9911211585650836, 'classifier__reg_alpha': 0.46044526140838715, 'classifier__reg_lambda': 0.7526456800569701, 'classifier__max_depth': 1, 'over__sampling_strategy': 0.6052892104590009, 'over__k_neighbors': 22}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 18:45:18,564]\u001b[0m Trial 4 finished with values: [0.6437272777192509, 0.6164909886102607] and parameters: {'classifier__n_estimators': 440, 'classifier__learning_rate': 0.014988221940214163, 'classifier__num_leaves': 31, 'classifier__min_child_samples': 43, 'classifier__subsample': 0.9382702804809353, 'classifier__colsample_bytree': 0.8378839922571999, 'classifier__reg_alpha': 0.11873476365664196, 'classifier__reg_lambda': 0.7013976118630566, 'classifier__max_depth': 6, 'over__sampling_strategy': 0.955421001376642, 'over__k_neighbors': 13}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 18:45:18,834]\u001b[0m Trial 5 finished with values: [0.6429011933266364, 0.6098298238510574] and parameters: {'classifier__n_estimators': 430, 'classifier__learning_rate': 0.19333835190551785, 'classifier__num_leaves': 85, 'classifier__min_child_samples': 14, 'classifier__subsample': 0.851599014018061, 'classifier__colsample_bytree': 0.8078731777886868, 'classifier__reg_alpha': 0.1612332411124245, 'classifier__reg_lambda': 0.7733976323443501, 'classifier__max_depth': 9, 'over__sampling_strategy': 0.7676143281665351, 'over__k_neighbors': 6}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 18:46:14,506]\u001b[0m Trial 7 finished with values: [0.6724975193877245, 0.5996970508621173] and parameters: {'classifier__n_estimators': 249, 'classifier__learning_rate': 0.050274449073944835, 'classifier__num_leaves': 117, 'classifier__min_child_samples': 18, 'classifier__subsample': 0.9993057768077361, 'classifier__colsample_bytree': 0.9371874013132707, 'classifier__reg_alpha': 0.15008994068887171, 'classifier__reg_lambda': 0.537409132772931, 'classifier__max_depth': 10, 'over__sampling_strategy': 0.3637609878850091, 'over__k_neighbors': 11}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 18:46:14,624]\u001b[0m Trial 6 finished with values: [0.667893232414531, 0.6004670314712397] and parameters: {'classifier__n_estimators': 366, 'classifier__learning_rate': 0.1174670919654562, 'classifier__num_leaves': 47, 'classifier__min_child_samples': 11, 'classifier__subsample': 0.8188165352367329, 'classifier__colsample_bytree': 0.6800359925898924, 'classifier__reg_alpha': 0.9873332093569686, 'classifier__reg_lambda': 0.8237280408782749, 'classifier__max_depth': 10, 'over__sampling_strategy': 0.40630225255124763, 'over__k_neighbors': 16}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 18:47:14,212]\u001b[0m Trial 8 finished with values: [0.644061341384452, 0.618076921917051] and parameters: {'classifier__n_estimators': 933, 'classifier__learning_rate': 0.04169925542642716, 'classifier__num_leaves': 95, 'classifier__min_child_samples': 6, 'classifier__subsample': 0.6661833630861052, 'classifier__colsample_bytree': 0.9525851019799721, 'classifier__reg_alpha': 0.14540907341047074, 'classifier__reg_lambda': 0.809786012465244, 'classifier__max_depth': 4, 'over__sampling_strategy': 0.7831280950769215, 'over__k_neighbors': 24}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 18:47:15,174]\u001b[0m Trial 9 finished with values: [0.6409114319982183, 0.6162873449909416] and parameters: {'classifier__n_estimators': 233, 'classifier__learning_rate': 0.18292389184027003, 'classifier__num_leaves': 56, 'classifier__min_child_samples': 35, 'classifier__subsample': 0.7800106231791527, 'classifier__colsample_bytree': 0.6585106528539849, 'classifier__reg_alpha': 0.14979252525773687, 'classifier__reg_lambda': 0.3977119377315529, 'classifier__max_depth': 3, 'over__sampling_strategy': 0.7792700963951842, 'over__k_neighbors': 21}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 18:48:10,620]\u001b[0m Trial 10 finished with values: [0.6457356569264796, 0.609554444333644] and parameters: {'classifier__n_estimators': 332, 'classifier__learning_rate': 0.1851732861715213, 'classifier__num_leaves': 46, 'classifier__min_child_samples': 21, 'classifier__subsample': 0.9271762975718307, 'classifier__colsample_bytree': 0.7477726917849581, 'classifier__reg_alpha': 0.6147485447416097, 'classifier__reg_lambda': 0.5685811248770686, 'classifier__max_depth': 5, 'over__sampling_strategy': 0.9930844928958459, 'over__k_neighbors': 23}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 18:48:11,008]\u001b[0m Trial 11 finished with values: [0.6724119773010454, 0.5957260154807694] and parameters: {'classifier__n_estimators': 104, 'classifier__learning_rate': 0.06356590163794429, 'classifier__num_leaves': 134, 'classifier__min_child_samples': 26, 'classifier__subsample': 0.9839846972144687, 'classifier__colsample_bytree': 0.9043000596481929, 'classifier__reg_alpha': 0.6260534720132058, 'classifier__reg_lambda': 0.1776688462298313, 'classifier__max_depth': 8, 'over__sampling_strategy': 0.3546251107632013, 'over__k_neighbors': 30}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 18:49:15,508]\u001b[0m Trial 12 finished with values: [0.66643196901092, 0.596496244360692] and parameters: {'classifier__n_estimators': 110, 'classifier__learning_rate': 0.053123465249201224, 'classifier__num_leaves': 123, 'classifier__min_child_samples': 7, 'classifier__subsample': 0.9933849808737168, 'classifier__colsample_bytree': 0.9604962569090681, 'classifier__reg_alpha': 0.10442163172828339, 'classifier__reg_lambda': 0.20726205718286705, 'classifier__max_depth': 7, 'over__sampling_strategy': 0.3600573168356785, 'over__k_neighbors': 30}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 18:49:15,586]\u001b[0m Trial 13 finished with values: [0.6581628335685197, 0.6048570876600964] and parameters: {'classifier__n_estimators': 968, 'classifier__learning_rate': 0.05241527439059202, 'classifier__num_leaves': 113, 'classifier__min_child_samples': 5, 'classifier__subsample': 0.7305761300447936, 'classifier__colsample_bytree': 0.9835178272391156, 'classifier__reg_alpha': 0.11044106249513164, 'classifier__reg_lambda': 0.5902397730232802, 'classifier__max_depth': 7, 'over__sampling_strategy': 0.5250553639022084, 'over__k_neighbors': 29}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 18:50:10,811]\u001b[0m Trial 14 finished with values: [0.6426255801744561, 0.6013851508529975] and parameters: {'classifier__n_estimators': 897, 'classifier__learning_rate': 0.04541877167931373, 'classifier__num_leaves': 112, 'classifier__min_child_samples': 5, 'classifier__subsample': 0.7172003473116372, 'classifier__colsample_bytree': 0.9205857257380231, 'classifier__reg_alpha': 0.3933945938648763, 'classifier__reg_lambda': 0.9950663869009093, 'classifier__max_depth': 2, 'over__sampling_strategy': 0.46785824050446545, 'over__k_neighbors': 11}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 18:50:10,884]\u001b[0m Trial 15 finished with values: [0.6380577562893421, 0.6007970316134726] and parameters: {'classifier__n_estimators': 583, 'classifier__learning_rate': 0.03032144203952168, 'classifier__num_leaves': 106, 'classifier__min_child_samples': 28, 'classifier__subsample': 0.706231742926022, 'classifier__colsample_bytree': 0.9113759215711714, 'classifier__reg_alpha': 0.3710755981188715, 'classifier__reg_lambda': 0.9441599180564746, 'classifier__max_depth': 2, 'over__sampling_strategy': 0.4888752504242806, 'over__k_neighbors': 16}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 18:51:09,046]\u001b[0m Trial 16 finished with values: [0.655562077970423, 0.6163713640536606] and parameters: {'classifier__n_estimators': 584, 'classifier__learning_rate': 0.08002748485834182, 'classifier__num_leaves': 99, 'classifier__min_child_samples': 50, 'classifier__subsample': 0.6046161155624623, 'classifier__colsample_bytree': 0.865395155350399, 'classifier__reg_alpha': 0.25147331302730935, 'classifier__reg_lambda': 0.6342523024869502, 'classifier__max_depth': 4, 'over__sampling_strategy': 0.5464823221918449, 'over__k_neighbors': 8}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 18:51:10,104]\u001b[0m Trial 17 finished with values: [0.657472661906612, 0.6164055067213046] and parameters: {'classifier__n_estimators': 732, 'classifier__learning_rate': 0.07615194246840477, 'classifier__num_leaves': 150, 'classifier__min_child_samples': 49, 'classifier__subsample': 0.9225448981507509, 'classifier__colsample_bytree': 0.8573314341149787, 'classifier__reg_alpha': 0.2625542544688248, 'classifier__reg_lambda': 0.631270560308917, 'classifier__max_depth': 5, 'over__sampling_strategy': 0.5394095714061843, 'over__k_neighbors': 8}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 18:52:16,385]\u001b[0m Trial 18 finished with values: [0.6571268758411501, 0.6121574397593857] and parameters: {'classifier__n_estimators': 726, 'classifier__learning_rate': 0.07949003092464581, 'classifier__num_leaves': 150, 'classifier__min_child_samples': 49, 'classifier__subsample': 0.6386970640052748, 'classifier__colsample_bytree': 0.8466595120509447, 'classifier__reg_alpha': 0.24375255397715137, 'classifier__reg_lambda': 0.6562369952278189, 'classifier__max_depth': 5, 'over__sampling_strategy': 0.5639017001375626, 'over__k_neighbors': 8}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 18:52:16,434]\u001b[0m Trial 19 finished with values: [0.6612317271181414, 0.5964562759482784] and parameters: {'classifier__n_estimators': 744, 'classifier__learning_rate': 0.07951878286221085, 'classifier__num_leaves': 150, 'classifier__min_child_samples': 49, 'classifier__subsample': 0.9033772298994664, 'classifier__colsample_bytree': 0.8521712791207438, 'classifier__reg_alpha': 0.48073334356365494, 'classifier__reg_lambda': 0.4783589983907456, 'classifier__max_depth': 10, 'over__sampling_strategy': 0.43829324499921507, 'over__k_neighbors': 1}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 18:53:15,430]\u001b[0m Trial 20 finished with values: [0.6631264577959408, 0.5984944170836299] and parameters: {'classifier__n_estimators': 803, 'classifier__learning_rate': 0.06568783658245095, 'classifier__num_leaves': 126, 'classifier__min_child_samples': 29, 'classifier__subsample': 0.9990595873319331, 'classifier__colsample_bytree': 0.7742748827210983, 'classifier__reg_alpha': 0.24306612915613623, 'classifier__reg_lambda': 0.3515482415258482, 'classifier__max_depth': 7, 'over__sampling_strategy': 0.4220391193920819, 'over__k_neighbors': 19}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 18:53:16,189]\u001b[0m Trial 21 finished with values: [0.6679526578331464, 0.6095917667700379] and parameters: {'classifier__n_estimators': 248, 'classifier__learning_rate': 0.0670089893467733, 'classifier__num_leaves': 127, 'classifier__min_child_samples': 29, 'classifier__subsample': 0.8959672200807781, 'classifier__colsample_bytree': 0.7559761731724634, 'classifier__reg_alpha': 0.2542211800893746, 'classifier__reg_lambda': 0.3324837722080793, 'classifier__max_depth': 7, 'over__sampling_strategy': 0.42693612969965145, 'over__k_neighbors': 18}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 18:54:13,189]\u001b[0m Trial 22 finished with values: [0.6587923086641287, 0.6172246451932154] and parameters: {'classifier__n_estimators': 235, 'classifier__learning_rate': 0.03632498277445621, 'classifier__num_leaves': 75, 'classifier__min_child_samples': 14, 'classifier__subsample': 0.9575900967944961, 'classifier__colsample_bytree': 0.9444801642063763, 'classifier__reg_alpha': 0.1950395397952936, 'classifier__reg_lambda': 0.5410531610446644, 'classifier__max_depth': 8, 'over__sampling_strategy': 0.4954705242821451, 'over__k_neighbors': 11}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 18:54:13,374]\u001b[0m Trial 23 finished with values: [0.6375478298667103, 0.6162857021901866] and parameters: {'classifier__n_estimators': 248, 'classifier__learning_rate': 0.037910081673774854, 'classifier__num_leaves': 71, 'classifier__min_child_samples': 12, 'classifier__subsample': 0.6547551775468159, 'classifier__colsample_bytree': 0.9494567468841774, 'classifier__reg_alpha': 0.17307713876599226, 'classifier__reg_lambda': 0.5227941491590341, 'classifier__max_depth': 4, 'over__sampling_strategy': 0.8406792309767497, 'over__k_neighbors': 26}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 18:55:09,023]\u001b[0m Trial 24 finished with values: [0.663339714943868, 0.6158715021120922] and parameters: {'classifier__n_estimators': 242, 'classifier__learning_rate': 0.030884543885426448, 'classifier__num_leaves': 68, 'classifier__min_child_samples': 15, 'classifier__subsample': 0.9553754706605744, 'classifier__colsample_bytree': 0.9394940518123692, 'classifier__reg_alpha': 0.19454271347862542, 'classifier__reg_lambda': 0.5145682218654029, 'classifier__max_depth': 9, 'over__sampling_strategy': 0.48172053115635893, 'over__k_neighbors': 11}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 18:55:09,793]\u001b[0m Trial 25 finished with values: [0.658532746096862, 0.6089764409371342] and parameters: {'classifier__n_estimators': 214, 'classifier__learning_rate': 0.010405418186988036, 'classifier__num_leaves': 70, 'classifier__min_child_samples': 22, 'classifier__subsample': 0.8932906567444393, 'classifier__colsample_bytree': 0.9979890646724019, 'classifier__reg_alpha': 0.30902378637668526, 'classifier__reg_lambda': 0.32759647526569924, 'classifier__max_depth': 9, 'over__sampling_strategy': 0.4832302105180492, 'over__k_neighbors': 11}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 18:56:07,650]\u001b[0m Trial 26 finished with values: [0.6731138231715039, 0.5963481774429714] and parameters: {'classifier__n_estimators': 483, 'classifier__learning_rate': 0.02480024714179163, 'classifier__num_leaves': 66, 'classifier__min_child_samples': 23, 'classifier__subsample': 0.9636336625539972, 'classifier__colsample_bytree': 0.9973921112983907, 'classifier__reg_alpha': 0.3297322858463567, 'classifier__reg_lambda': 0.44279110256514215, 'classifier__max_depth': 9, 'over__sampling_strategy': 0.35146593969061785, 'over__k_neighbors': 11}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 18:56:09,486]\u001b[0m Trial 27 finished with values: [0.6748442249568417, 0.5951677194666252] and parameters: {'classifier__n_estimators': 496, 'classifier__learning_rate': 0.032082575420636736, 'classifier__num_leaves': 97, 'classifier__min_child_samples': 24, 'classifier__subsample': 0.999858146240725, 'classifier__colsample_bytree': 0.6029679609870878, 'classifier__reg_alpha': 0.17938860811200935, 'classifier__reg_lambda': 0.44451618736407306, 'classifier__max_depth': 10, 'over__sampling_strategy': 0.3532223856999658, 'over__k_neighbors': 5}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 18:57:06,298]\u001b[0m Trial 28 finished with values: [0.6707629021981326, 0.6064782569547265] and parameters: {'classifier__n_estimators': 485, 'classifier__learning_rate': 0.024890145248810423, 'classifier__num_leaves': 63, 'classifier__min_child_samples': 23, 'classifier__subsample': 0.9617530274541308, 'classifier__colsample_bytree': 0.9643081588142669, 'classifier__reg_alpha': 0.33467016117964643, 'classifier__reg_lambda': 0.28066668481890683, 'classifier__max_depth': 8, 'over__sampling_strategy': 0.3883638288395505, 'over__k_neighbors': 4}. \u001b[0m\n", "\u001b[32m[I 2023-04-27 18:57:07,807]\u001b[0m Trial 29 finished with values: [0.6725516595604328, 0.6063189073346005] and parameters: {'classifier__n_estimators': 517, 'classifier__learning_rate': 0.028056880977932984, 'classifier__num_leaves': 90, 'classifier__min_child_samples': 34, 'classifier__subsample': 0.969042533171844, 'classifier__colsample_bytree': 0.6053047106607662, 'classifier__reg_alpha': 0.20049320363081555, 'classifier__reg_lambda': 0.10380040489027925, 'classifier__max_depth': 8, 'over__sampling_strategy': 0.39352742674680213, 'over__k_neighbors': 3}. \u001b[0m\n" ] } ], "source": [ "from lightgbm import LGBMClassifier\n", "\n", "\n", "pipe_LGBM = imbpipeline(\n", " [\n", " ('preprocessor',preprocessor),\n", " ('over',smoteNC2),\n", " ('classifier',LGBMClassifier(n_jobs=4,objective='binary'))]\n", " )\n", "\n", "def lgbm_space(trial):\n", " return {\n", " 'classifier__n_estimators': trial.suggest_int('classifier__n_estimators', 100, 1000),\n", " 'classifier__learning_rate': trial.suggest_float('classifier__learning_rate', 0.01, 0.2),\n", " 'classifier__num_leaves': trial.suggest_int('classifier__num_leaves', 30, 150),\n", " 'classifier__min_child_samples': trial.suggest_int('classifier__min_child_samples', 5, 50),\n", " 'classifier__subsample': trial.suggest_float('classifier__subsample', 0.6, 1.0),\n", " 'classifier__colsample_bytree': trial.suggest_float('classifier__colsample_bytree', 0.6, 1.0),\n", " 'classifier__reg_alpha': trial.suggest_float('classifier__reg_alpha', 0.1, 1.0),\n", " 'classifier__reg_lambda': trial.suggest_float('classifier__reg_lambda', 0.1, 1.0),\n", " 'classifier__max_depth': trial.suggest_int('classifier__max_depth', 1, 10),\n", " 'over__sampling_strategy': trial.suggest_float(\"over__sampling_strategy\", 0.35, 1.00),\n", " 'over__k_neighbors': trial.suggest_int('over__k_neighbors', 1, 30)\n", " }\n", "\n", "lgbm_func = lambda trial: objective(trial,pipe_LGBM,lgbm_space(trial))\n", "\n", "lgbm_study = optuna.create_study(directions=['maximize','maximize'],pruner=MedianPruner(),study_name='lgbm_study',storage='sqlite:///my_study.db',sampler = TPESampler(seed=100))\n", "lgbm_study.optimize(lgbm_func, n_trials=30,n_jobs=2)\n", "\n" ] }, { "cell_type": "code", "execution_count": 84, "id": "c79d52a1", "metadata": {}, "outputs": [ { "data": { "application/vnd.plotly.v1+json": { "config": { "plotlyServerURL": "https://plot.ly" }, "data": [ { "hovertemplate": "%{text}Trial", "marker": { "color": [ 0, 1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23, 25 ], "colorbar": { "title": { "text": "Trial" } }, "colorscale": [ [ 0, "rgb(247,251,255)" ], [ 0.125, "rgb(222,235,247)" ], [ 0.25, "rgb(198,219,239)" ], [ 0.375, "rgb(158,202,225)" ], [ 0.5, "rgb(107,174,214)" ], [ 0.625, "rgb(66,146,198)" ], [ 0.75, "rgb(33,113,181)" ], [ 0.875, "rgb(8,81,156)" ], [ 1, "rgb(8,48,107)" ] ], "line": { "color": "Grey", "width": 0.5 } }, "mode": "markers", "showlegend": false, "text": [ "{
\"number\": 0,
\"values\": [
0.6481791433257595,
0.608212027804601
],
\"params\": {
\"classifier__colsample_bytree\": 0.6923913504558172,
\"classifier__learning_rate\": 0.0914658479860042,
\"classifier__max_depth\": 4,
\"classifier__min_child_samples\": 39,
\"classifier__n_estimators\": 878,
\"classifier__num_leaves\": 52,
\"classifier__reg_alpha\": 0.295762093408928,
\"classifier__reg_lambda\": 0.45757904384482906,
\"classifier__subsample\": 0.8551474722356436,
\"over__k_neighbors\": 14,
\"over__sampling_strategy\": 0.6644200991667422
}
}", "{
\"number\": 1,
\"values\": [
0.6481791433257595,
0.608212027804601
],
\"params\": {
\"classifier__colsample_bytree\": 0.8836872773395599,
\"classifier__learning_rate\": 0.12262001940318636,
\"classifier__max_depth\": 6,
\"classifier__min_child_samples\": 18,
\"classifier__n_estimators\": 734,
\"classifier__num_leaves\": 139,
\"classifier__reg_alpha\": 0.3571316810129358,
\"classifier__reg_lambda\": 0.7796445000270502,
\"classifier__subsample\": 0.9551502480484655,
\"over__k_neighbors\": 2,
\"over__sampling_strategy\": 0.6306694569878601
}
}", "{
\"number\": 2,
\"values\": [
0.6445797291737211,
0.608400783342778
],
\"params\": {
\"classifier__colsample_bytree\": 0.6494467550658721,
\"classifier__learning_rate\": 0.10522687923567785,
\"classifier__max_depth\": 9,
\"classifier__min_child_samples\": 38,
\"classifier__n_estimators\": 635,
\"classifier__num_leaves\": 79,
\"classifier__reg_alpha\": 0.24399972442948165,
\"classifier__reg_lambda\": 0.9345718162446607,
\"classifier__subsample\": 0.8604173819294232,
\"over__k_neighbors\": 6,
\"over__sampling_strategy\": 0.7388052336432036
}
}", "{
\"number\": 3,
\"values\": [
0.6217637298126792,
0.5977452305257794
],
\"params\": {
\"classifier__colsample_bytree\": 0.9911211585650836,
\"classifier__learning_rate\": 0.017736285174618147,
\"classifier__max_depth\": 1,
\"classifier__min_child_samples\": 19,
\"classifier__n_estimators\": 381,
\"classifier__num_leaves\": 86,
\"classifier__reg_alpha\": 0.46044526140838715,
\"classifier__reg_lambda\": 0.7526456800569701,
\"classifier__subsample\": 0.6148958076790818,
\"over__k_neighbors\": 22,
\"over__sampling_strategy\": 0.6052892104590009
}
}", "{
\"number\": 4,
\"values\": [
0.6437272777192509,
0.6164909886102607
],
\"params\": {
\"classifier__colsample_bytree\": 0.8378839922571999,
\"classifier__learning_rate\": 0.014988221940214163,
\"classifier__max_depth\": 6,
\"classifier__min_child_samples\": 43,
\"classifier__n_estimators\": 440,
\"classifier__num_leaves\": 31,
\"classifier__reg_alpha\": 0.11873476365664196,
\"classifier__reg_lambda\": 0.7013976118630566,
\"classifier__subsample\": 0.9382702804809353,
\"over__k_neighbors\": 13,
\"over__sampling_strategy\": 0.955421001376642
}
}", "{
\"number\": 5,
\"values\": [
0.6429011933266364,
0.6098298238510574
],
\"params\": {
\"classifier__colsample_bytree\": 0.8078731777886868,
\"classifier__learning_rate\": 0.19333835190551785,
\"classifier__max_depth\": 9,
\"classifier__min_child_samples\": 14,
\"classifier__n_estimators\": 430,
\"classifier__num_leaves\": 85,
\"classifier__reg_alpha\": 0.1612332411124245,
\"classifier__reg_lambda\": 0.7733976323443501,
\"classifier__subsample\": 0.851599014018061,
\"over__k_neighbors\": 6,
\"over__sampling_strategy\": 0.7676143281665351
}
}", "{
\"number\": 6,
\"values\": [
0.667893232414531,
0.6004670314712397
],
\"params\": {
\"classifier__colsample_bytree\": 0.6800359925898924,
\"classifier__learning_rate\": 0.1174670919654562,
\"classifier__max_depth\": 10,
\"classifier__min_child_samples\": 11,
\"classifier__n_estimators\": 366,
\"classifier__num_leaves\": 47,
\"classifier__reg_alpha\": 0.9873332093569686,
\"classifier__reg_lambda\": 0.8237280408782749,
\"classifier__subsample\": 0.8188165352367329,
\"over__k_neighbors\": 16,
\"over__sampling_strategy\": 0.40630225255124763
}
}", "{
\"number\": 7,
\"values\": [
0.6724975193877245,
0.5996970508621173
],
\"params\": {
\"classifier__colsample_bytree\": 0.9371874013132707,
\"classifier__learning_rate\": 0.050274449073944835,
\"classifier__max_depth\": 10,
\"classifier__min_child_samples\": 18,
\"classifier__n_estimators\": 249,
\"classifier__num_leaves\": 117,
\"classifier__reg_alpha\": 0.15008994068887171,
\"classifier__reg_lambda\": 0.537409132772931,
\"classifier__subsample\": 0.9993057768077361,
\"over__k_neighbors\": 11,
\"over__sampling_strategy\": 0.3637609878850091
}
}", "{
\"number\": 9,
\"values\": [
0.6409114319982183,
0.6162873449909416
],
\"params\": {
\"classifier__colsample_bytree\": 0.6585106528539849,
\"classifier__learning_rate\": 0.18292389184027003,
\"classifier__max_depth\": 3,
\"classifier__min_child_samples\": 35,
\"classifier__n_estimators\": 233,
\"classifier__num_leaves\": 56,
\"classifier__reg_alpha\": 0.14979252525773687,
\"classifier__reg_lambda\": 0.3977119377315529,
\"classifier__subsample\": 0.7800106231791527,
\"over__k_neighbors\": 21,
\"over__sampling_strategy\": 0.7792700963951842
}
}", "{
\"number\": 10,
\"values\": [
0.6457356569264796,
0.609554444333644
],
\"params\": {
\"classifier__colsample_bytree\": 0.7477726917849581,
\"classifier__learning_rate\": 0.1851732861715213,
\"classifier__max_depth\": 5,
\"classifier__min_child_samples\": 21,
\"classifier__n_estimators\": 332,
\"classifier__num_leaves\": 46,
\"classifier__reg_alpha\": 0.6147485447416097,
\"classifier__reg_lambda\": 0.5685811248770686,
\"classifier__subsample\": 0.9271762975718307,
\"over__k_neighbors\": 23,
\"over__sampling_strategy\": 0.9930844928958459
}
}", "{
\"number\": 11,
\"values\": [
0.6724119773010454,
0.5957260154807694
],
\"params\": {
\"classifier__colsample_bytree\": 0.9043000596481929,
\"classifier__learning_rate\": 0.06356590163794429,
\"classifier__max_depth\": 8,
\"classifier__min_child_samples\": 26,
\"classifier__n_estimators\": 104,
\"classifier__num_leaves\": 134,
\"classifier__reg_alpha\": 0.6260534720132058,
\"classifier__reg_lambda\": 0.1776688462298313,
\"classifier__subsample\": 0.9839846972144687,
\"over__k_neighbors\": 30,
\"over__sampling_strategy\": 0.3546251107632013
}
}", "{
\"number\": 12,
\"values\": [
0.66643196901092,
0.596496244360692
],
\"params\": {
\"classifier__colsample_bytree\": 0.9604962569090681,
\"classifier__learning_rate\": 0.053123465249201224,
\"classifier__max_depth\": 7,
\"classifier__min_child_samples\": 7,
\"classifier__n_estimators\": 110,
\"classifier__num_leaves\": 123,
\"classifier__reg_alpha\": 0.10442163172828339,
\"classifier__reg_lambda\": 0.20726205718286705,
\"classifier__subsample\": 0.9933849808737168,
\"over__k_neighbors\": 30,
\"over__sampling_strategy\": 0.3600573168356785
}
}", "{
\"number\": 13,
\"values\": [
0.6581628335685197,
0.6048570876600964
],
\"params\": {
\"classifier__colsample_bytree\": 0.9835178272391156,
\"classifier__learning_rate\": 0.05241527439059202,
\"classifier__max_depth\": 7,
\"classifier__min_child_samples\": 5,
\"classifier__n_estimators\": 968,
\"classifier__num_leaves\": 113,
\"classifier__reg_alpha\": 0.11044106249513164,
\"classifier__reg_lambda\": 0.5902397730232802,
\"classifier__subsample\": 0.7305761300447936,
\"over__k_neighbors\": 29,
\"over__sampling_strategy\": 0.5250553639022084
}
}", "{
\"number\": 14,
\"values\": [
0.6426255801744561,
0.6013851508529975
],
\"params\": {
\"classifier__colsample_bytree\": 0.9205857257380231,
\"classifier__learning_rate\": 0.04541877167931373,
\"classifier__max_depth\": 2,
\"classifier__min_child_samples\": 5,
\"classifier__n_estimators\": 897,
\"classifier__num_leaves\": 112,
\"classifier__reg_alpha\": 0.3933945938648763,
\"classifier__reg_lambda\": 0.9950663869009093,
\"classifier__subsample\": 0.7172003473116372,
\"over__k_neighbors\": 11,
\"over__sampling_strategy\": 0.46785824050446545
}
}", "{
\"number\": 15,
\"values\": [
0.6380577562893421,
0.6007970316134726
],
\"params\": {
\"classifier__colsample_bytree\": 0.9113759215711714,
\"classifier__learning_rate\": 0.03032144203952168,
\"classifier__max_depth\": 2,
\"classifier__min_child_samples\": 28,
\"classifier__n_estimators\": 583,
\"classifier__num_leaves\": 106,
\"classifier__reg_alpha\": 0.3710755981188715,
\"classifier__reg_lambda\": 0.9441599180564746,
\"classifier__subsample\": 0.706231742926022,
\"over__k_neighbors\": 16,
\"over__sampling_strategy\": 0.4888752504242806
}
}", "{
\"number\": 16,
\"values\": [
0.655562077970423,
0.6163713640536606
],
\"params\": {
\"classifier__colsample_bytree\": 0.865395155350399,
\"classifier__learning_rate\": 0.08002748485834182,
\"classifier__max_depth\": 4,
\"classifier__min_child_samples\": 50,
\"classifier__n_estimators\": 584,
\"classifier__num_leaves\": 99,
\"classifier__reg_alpha\": 0.25147331302730935,
\"classifier__reg_lambda\": 0.6342523024869502,
\"classifier__subsample\": 0.6046161155624623,
\"over__k_neighbors\": 8,
\"over__sampling_strategy\": 0.5464823221918449
}
}", "{
\"number\": 17,
\"values\": [
0.657472661906612,
0.6164055067213046
],
\"params\": {
\"classifier__colsample_bytree\": 0.8573314341149787,
\"classifier__learning_rate\": 0.07615194246840477,
\"classifier__max_depth\": 5,
\"classifier__min_child_samples\": 49,
\"classifier__n_estimators\": 732,
\"classifier__num_leaves\": 150,
\"classifier__reg_alpha\": 0.2625542544688248,
\"classifier__reg_lambda\": 0.631270560308917,
\"classifier__subsample\": 0.9225448981507509,
\"over__k_neighbors\": 8,
\"over__sampling_strategy\": 0.5394095714061843
}
}", "{
\"number\": 18,
\"values\": [
0.6571268758411501,
0.6121574397593857
],
\"params\": {
\"classifier__colsample_bytree\": 0.8466595120509447,
\"classifier__learning_rate\": 0.07949003092464581,
\"classifier__max_depth\": 5,
\"classifier__min_child_samples\": 49,
\"classifier__n_estimators\": 726,
\"classifier__num_leaves\": 150,
\"classifier__reg_alpha\": 0.24375255397715137,
\"classifier__reg_lambda\": 0.6562369952278189,
\"classifier__subsample\": 0.6386970640052748,
\"over__k_neighbors\": 8,
\"over__sampling_strategy\": 0.5639017001375626
}
}", "{
\"number\": 19,
\"values\": [
0.6612317271181414,
0.5964562759482784
],
\"params\": {
\"classifier__colsample_bytree\": 0.8521712791207438,
\"classifier__learning_rate\": 0.07951878286221085,
\"classifier__max_depth\": 10,
\"classifier__min_child_samples\": 49,
\"classifier__n_estimators\": 744,
\"classifier__num_leaves\": 150,
\"classifier__reg_alpha\": 0.48073334356365494,
\"classifier__reg_lambda\": 0.4783589983907456,
\"classifier__subsample\": 0.9033772298994664,
\"over__k_neighbors\": 1,
\"over__sampling_strategy\": 0.43829324499921507
}
}", "{
\"number\": 20,
\"values\": [
0.6631264577959408,
0.5984944170836299
],
\"params\": {
\"classifier__colsample_bytree\": 0.7742748827210983,
\"classifier__learning_rate\": 0.06568783658245095,
\"classifier__max_depth\": 7,
\"classifier__min_child_samples\": 29,
\"classifier__n_estimators\": 803,
\"classifier__num_leaves\": 126,
\"classifier__reg_alpha\": 0.24306612915613623,
\"classifier__reg_lambda\": 0.3515482415258482,
\"classifier__subsample\": 0.9990595873319331,
\"over__k_neighbors\": 19,
\"over__sampling_strategy\": 0.4220391193920819
}
}", "{
\"number\": 23,
\"values\": [
0.6375478298667103,
0.6162857021901866
],
\"params\": {
\"classifier__colsample_bytree\": 0.9494567468841774,
\"classifier__learning_rate\": 0.037910081673774854,
\"classifier__max_depth\": 4,
\"classifier__min_child_samples\": 12,
\"classifier__n_estimators\": 248,
\"classifier__num_leaves\": 71,
\"classifier__reg_alpha\": 0.17307713876599226,
\"classifier__reg_lambda\": 0.5227941491590341,
\"classifier__subsample\": 0.6547551775468159,
\"over__k_neighbors\": 26,
\"over__sampling_strategy\": 0.8406792309767497
}
}", "{
\"number\": 25,
\"values\": [
0.658532746096862,
0.6089764409371342
],
\"params\": {
\"classifier__colsample_bytree\": 0.9979890646724019,
\"classifier__learning_rate\": 0.010405418186988036,
\"classifier__max_depth\": 9,
\"classifier__min_child_samples\": 22,
\"classifier__n_estimators\": 214,
\"classifier__num_leaves\": 70,
\"classifier__reg_alpha\": 0.30902378637668526,
\"classifier__reg_lambda\": 0.32759647526569924,
\"classifier__subsample\": 0.8932906567444393,
\"over__k_neighbors\": 11,
\"over__sampling_strategy\": 0.4832302105180492
}
}" ], "type": "scatter", "x": [ 0.6481791433257595, 0.6481791433257595, 0.6445797291737211, 0.6217637298126792, 0.6437272777192509, 0.6429011933266364, 0.667893232414531, 0.6724975193877245, 0.6409114319982183, 0.6457356569264796, 0.6724119773010454, 0.66643196901092, 0.6581628335685197, 0.6426255801744561, 0.6380577562893421, 0.655562077970423, 0.657472661906612, 0.6571268758411501, 0.6612317271181414, 0.6631264577959408, 0.6375478298667103, 0.658532746096862 ], "y": [ 0.608212027804601, 0.608212027804601, 0.608400783342778, 0.5977452305257794, 0.6164909886102607, 0.6098298238510574, 0.6004670314712397, 0.5996970508621173, 0.6162873449909416, 0.609554444333644, 0.5957260154807694, 0.596496244360692, 0.6048570876600964, 0.6013851508529975, 0.6007970316134726, 0.6163713640536606, 0.6164055067213046, 0.6121574397593857, 0.5964562759482784, 0.5984944170836299, 0.6162857021901866, 0.6089764409371342 ] }, { "hovertemplate": "%{text}Best Trial", "marker": { "color": [ 8, 21, 22, 24, 26, 27, 28, 29 ], "colorbar": { "title": { "text": "Best Trial" }, "x": 1.1, "xpad": 40 }, "colorscale": [ [ 0, "rgb(255,245,240)" ], [ 0.125, "rgb(254,224,210)" ], [ 0.25, "rgb(252,187,161)" ], [ 0.375, "rgb(252,146,114)" ], [ 0.5, "rgb(251,106,74)" ], [ 0.625, "rgb(239,59,44)" ], [ 0.75, "rgb(203,24,29)" ], [ 0.875, "rgb(165,15,21)" ], [ 1, "rgb(103,0,13)" ] ], "line": { "color": "Grey", "width": 0.5 } }, "mode": "markers", "showlegend": false, "text": [ "{
\"number\": 8,
\"values\": [
0.644061341384452,
0.618076921917051
],
\"params\": {
\"classifier__colsample_bytree\": 0.9525851019799721,
\"classifier__learning_rate\": 0.04169925542642716,
\"classifier__max_depth\": 4,
\"classifier__min_child_samples\": 6,
\"classifier__n_estimators\": 933,
\"classifier__num_leaves\": 95,
\"classifier__reg_alpha\": 0.14540907341047074,
\"classifier__reg_lambda\": 0.809786012465244,
\"classifier__subsample\": 0.6661833630861052,
\"over__k_neighbors\": 24,
\"over__sampling_strategy\": 0.7831280950769215
}
}", "{
\"number\": 21,
\"values\": [
0.6679526578331464,
0.6095917667700379
],
\"params\": {
\"classifier__colsample_bytree\": 0.7559761731724634,
\"classifier__learning_rate\": 0.0670089893467733,
\"classifier__max_depth\": 7,
\"classifier__min_child_samples\": 29,
\"classifier__n_estimators\": 248,
\"classifier__num_leaves\": 127,
\"classifier__reg_alpha\": 0.2542211800893746,
\"classifier__reg_lambda\": 0.3324837722080793,
\"classifier__subsample\": 0.8959672200807781,
\"over__k_neighbors\": 18,
\"over__sampling_strategy\": 0.42693612969965145
}
}", "{
\"number\": 22,
\"values\": [
0.6587923086641287,
0.6172246451932154
],
\"params\": {
\"classifier__colsample_bytree\": 0.9444801642063763,
\"classifier__learning_rate\": 0.03632498277445621,
\"classifier__max_depth\": 8,
\"classifier__min_child_samples\": 14,
\"classifier__n_estimators\": 235,
\"classifier__num_leaves\": 75,
\"classifier__reg_alpha\": 0.1950395397952936,
\"classifier__reg_lambda\": 0.5410531610446644,
\"classifier__subsample\": 0.9575900967944961,
\"over__k_neighbors\": 11,
\"over__sampling_strategy\": 0.4954705242821451
}
}", "{
\"number\": 24,
\"values\": [
0.663339714943868,
0.6158715021120922
],
\"params\": {
\"classifier__colsample_bytree\": 0.9394940518123692,
\"classifier__learning_rate\": 0.030884543885426448,
\"classifier__max_depth\": 9,
\"classifier__min_child_samples\": 15,
\"classifier__n_estimators\": 242,
\"classifier__num_leaves\": 68,
\"classifier__reg_alpha\": 0.19454271347862542,
\"classifier__reg_lambda\": 0.5145682218654029,
\"classifier__subsample\": 0.9553754706605744,
\"over__k_neighbors\": 11,
\"over__sampling_strategy\": 0.48172053115635893
}
}", "{
\"number\": 26,
\"values\": [
0.6731138231715039,
0.5963481774429714
],
\"params\": {
\"classifier__colsample_bytree\": 0.9973921112983907,
\"classifier__learning_rate\": 0.02480024714179163,
\"classifier__max_depth\": 9,
\"classifier__min_child_samples\": 23,
\"classifier__n_estimators\": 483,
\"classifier__num_leaves\": 66,
\"classifier__reg_alpha\": 0.3297322858463567,
\"classifier__reg_lambda\": 0.44279110256514215,
\"classifier__subsample\": 0.9636336625539972,
\"over__k_neighbors\": 11,
\"over__sampling_strategy\": 0.35146593969061785
}
}", "{
\"number\": 27,
\"values\": [
0.6748442249568417,
0.5951677194666252
],
\"params\": {
\"classifier__colsample_bytree\": 0.6029679609870878,
\"classifier__learning_rate\": 0.032082575420636736,
\"classifier__max_depth\": 10,
\"classifier__min_child_samples\": 24,
\"classifier__n_estimators\": 496,
\"classifier__num_leaves\": 97,
\"classifier__reg_alpha\": 0.17938860811200935,
\"classifier__reg_lambda\": 0.44451618736407306,
\"classifier__subsample\": 0.999858146240725,
\"over__k_neighbors\": 5,
\"over__sampling_strategy\": 0.3532223856999658
}
}", "{
\"number\": 28,
\"values\": [
0.6707629021981326,
0.6064782569547265
],
\"params\": {
\"classifier__colsample_bytree\": 0.9643081588142669,
\"classifier__learning_rate\": 0.024890145248810423,
\"classifier__max_depth\": 8,
\"classifier__min_child_samples\": 23,
\"classifier__n_estimators\": 485,
\"classifier__num_leaves\": 63,
\"classifier__reg_alpha\": 0.33467016117964643,
\"classifier__reg_lambda\": 0.28066668481890683,
\"classifier__subsample\": 0.9617530274541308,
\"over__k_neighbors\": 4,
\"over__sampling_strategy\": 0.3883638288395505
}
}", "{
\"number\": 29,
\"values\": [
0.6725516595604328,
0.6063189073346005
],
\"params\": {
\"classifier__colsample_bytree\": 0.6053047106607662,
\"classifier__learning_rate\": 0.028056880977932984,
\"classifier__max_depth\": 8,
\"classifier__min_child_samples\": 34,
\"classifier__n_estimators\": 517,
\"classifier__num_leaves\": 90,
\"classifier__reg_alpha\": 0.20049320363081555,
\"classifier__reg_lambda\": 0.10380040489027925,
\"classifier__subsample\": 0.969042533171844,
\"over__k_neighbors\": 3,
\"over__sampling_strategy\": 0.39352742674680213
}
}" ], "type": "scatter", "x": [ 0.644061341384452, 0.6679526578331464, 0.6587923086641287, 0.663339714943868, 0.6731138231715039, 0.6748442249568417, 0.6707629021981326, 0.6725516595604328 ], "y": [ 0.618076921917051, 0.6095917667700379, 0.6172246451932154, 0.6158715021120922, 0.5963481774429714, 0.5951677194666252, 0.6064782569547265, 0.6063189073346005 ] } ], "layout": { "template": { "data": { "bar": [ { "error_x": { "color": "#2a3f5f" }, "error_y": { "color": "#2a3f5f" }, "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "bar" } ], "barpolar": [ { "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "barpolar" } ], "carpet": [ { "aaxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "baxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "type": "carpet" } ], "choropleth": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "choropleth" } ], "contour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "contour" } ], "contourcarpet": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "contourcarpet" } ], "heatmap": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmap" } ], "heatmapgl": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmapgl" } ], "histogram": [ { "marker": { "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "histogram" } ], "histogram2d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2d" } ], "histogram2dcontour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2dcontour" } ], "mesh3d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "mesh3d" } ], "parcoords": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "parcoords" } ], "pie": [ { "automargin": true, "type": "pie" } ], "scatter": [ { "fillpattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 }, "type": "scatter" } ], "scatter3d": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatter3d" } ], "scattercarpet": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattercarpet" } ], "scattergeo": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergeo" } ], "scattergl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergl" } ], "scattermapbox": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattermapbox" } ], "scatterpolar": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolar" } ], "scatterpolargl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolargl" } ], "scatterternary": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterternary" } ], "surface": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "surface" } ], "table": [ { "cells": { "fill": { "color": "#EBF0F8" }, "line": { "color": "white" } }, "header": { "fill": { "color": "#C8D4E3" }, "line": { "color": "white" } }, "type": "table" } ] }, "layout": { "annotationdefaults": { "arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1 }, "autotypenumbers": "strict", "coloraxis": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "colorscale": { "diverging": [ [ 0, "#8e0152" ], [ 0.1, "#c51b7d" ], [ 0.2, "#de77ae" ], [ 0.3, "#f1b6da" ], [ 0.4, "#fde0ef" ], [ 0.5, "#f7f7f7" ], [ 0.6, "#e6f5d0" ], [ 0.7, "#b8e186" ], [ 0.8, "#7fbc41" ], [ 0.9, "#4d9221" ], [ 1, "#276419" ] ], "sequential": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "sequentialminus": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ] }, "colorway": [ "#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52" ], "font": { "color": "#2a3f5f" }, "geo": { "bgcolor": "white", "lakecolor": "white", "landcolor": "#E5ECF6", "showlakes": true, "showland": true, "subunitcolor": "white" }, "hoverlabel": { "align": "left" }, "hovermode": "closest", "mapbox": { "style": "light" }, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": { "angularaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "radialaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "scene": { "xaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "yaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "zaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" } }, "shapedefaults": { "line": { "color": "#2a3f5f" } }, "ternary": { "aaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "baxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "caxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "title": { "x": 0.05 }, "xaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 }, "yaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 } } }, "title": { "text": "Pareto-front Plot" }, "xaxis": { "title": { "text": "Mean PR AUC" } }, "yaxis": { "title": { "text": "Mean F1" } } } } }, "metadata": {}, "output_type": "display_data" } ], "source": [ "lgbm_study = optuna.load_study(study_name=\"lgbm_study\", storage=\"sqlite:///my_study.db\")\n", "optuna.visualization.plot_pareto_front(lgbm_study, target_names=[\"Mean PR AUC\", \"Mean F1\"])" ] }, { "cell_type": "code", "execution_count": 85, "id": "fdb19cd0", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'classifier__colsample_bytree': 0.9444801642063763, 'classifier__learning_rate': 0.03632498277445621, 'classifier__max_depth': 8, 'classifier__min_child_samples': 14, 'classifier__n_estimators': 235, 'classifier__num_leaves': 75, 'classifier__reg_alpha': 0.1950395397952936, 'classifier__reg_lambda': 0.5410531610446644, 'classifier__subsample': 0.9575900967944961, 'over__k_neighbors': 11, 'over__sampling_strategy': 0.4954705242821451}\n", " precision recall f1-score support\n", "\n", " 0 0.87 0.88 0.88 12191\n", " 1 0.61 0.61 0.61 3893\n", "\n", " accuracy 0.81 16084\n", " macro avg 0.74 0.74 0.74 16084\n", "weighted avg 0.81 0.81 0.81 16084\n", "\n" ] }, { "data": { "image/png": "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77+v1157rcRjXbBgQaEAVa5cOaeNFcCNicACFEPFihXVoEGDYrdv0aKFVqxYIX9//0JVhitq1qypHTt2qF27dpIuVxKSkpLUokWLIts3adJEVqtVW7ZsUURERKHzVyo8BQUF9mOhoaHy9PTUiRMnrlqZadSokX0B8RVfffXVn9/kb2zfvl316tXTs88+az/2448/Fmp34sQJnT59WkFBQfbruLm5KSQkRAEBAQoKCtLRo0fVq1evEl0fQNnHolvABL169VL16tXVrVs3bdu2TceOHdPmzZs1fPhwnTx5UpI0YsQIvfzyy1q1apUOHTqkoUOH/uEzVOrXr6+oqCj169dPq1atsvf5wQcfSJLq1asni8WitWvX6ty5c8rKylLlypU1duxYjRo1SkuWLNEPP/ygr7/+Wm+99ZZ9IevgwYN1+PBhPfPMM0pOTtby5csVHx9fovu97bbbdOLECb3//vv64YcfFBcXV+QCYi8vL0VFRWnv3r3atm2bhg8frkcffVSBgYGSpClTpig2NlZxcXH6/vvvtW/fPi1evFivv/56icYDoOwhsAAmqFChgrZu3aq6devqkUceUaNGjdS/f39dunTJXnEZM2aMnnrqKUVFRSk8PFyVK1fWww8//If9zps3T3/72980dOhQNWzYUAMHDlR2drYkqVatWpoyZYomTJiggIAAxcTESJKmTp2qSZMmKTY2Vo0aNVLnzp21bt06BQcHS7q8ruRf//qXVq1apaZNm2r+/Pl66aWXSnS/Dz30kEaNGqWYmBg1a9ZM27dv16RJkwq1a9CggR555BF16dJFnTp10p133umwbXnAgAFauHChFi9erCZNmqh9+/aKj4+3jxXAzctiu9oKPwAAABdBhQUAALg8AgsAAHB5BBYAAODyCCwAAMDlEVgAAIDLI7AAAACXR2ABAAAuj8ACAABcHoEFAAC4PAILAABweQQWAADg8v4fdWrYDt7OHBAAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "0.6096615861534488\n", "0.6589919445727145\n" ] } ], "source": [ "\n", "lgbm_best_params = lgbm_study.trials[22].params\n", "\n", "evaluate_study(pipe_LGBM,lgbm_best_params)\n" ] }, { "attachments": {}, "cell_type": "markdown", "id": "37bcee22", "metadata": {}, "source": [ "#### CatBoost Classifier Model" ] }, { "cell_type": "code", "execution_count": null, "id": "2a7b5838", "metadata": {}, "outputs": [], "source": [ "from catboost import CatBoostClassifier\n", "\n", "\n", " \n", "pipe_CatBoost = imbpipeline(\n", " [\n", "\n", " ('preprocessor',preprocessor),\n", " ('over',smoteNC2),\n", "\n", " ('classifier',CatBoostClassifier(thread_count=-1,silent=True,task_type=\"GPU\"))]\n", " )\n", "\n", "\n", "def cat_space(trial):\n", " return {\n", " 'classifier__iterations': trial.suggest_int('classifier__iterations', 100, 1000),\n", " 'classifier__depth': trial.suggest_int('classifier__depth', 1, 10),\n", " 'classifier__learning_rate': trial.suggest_float('classifier__learning_rate', 0.01, 0.3),\n", " 'classifier__l2_leaf_reg': trial.suggest_float('classifier__l2_leaf_reg', 3.0, 17),\n", " 'classifier__loss_function': trial.suggest_categorical('classifier__loss_function', ['Logloss','CrossEntropy']),\n", " 'classifier__bagging_temperature': trial.suggest_float('classifier__bagging_temperature', 0, 1),\n", " 'classifier__bootstrap_type': trial.suggest_categorical('classifier__bootstrap_type', ['Bayesian']),\n", " 'over__sampling_strategy': trial.suggest_float(\"over__sampling_strategy\", 0.35, 1.00),\n", " 'over__k_neighbors': trial.suggest_int('over__k_neighbors', 1, 30)\n", " }\n", "\n", "cat_func = lambda trial: objective(trial,pipe_CatBoost,cat_space(trial),n_jobs=1)\n", "\n", "\n", "cat_study = optuna.create_study(directions=['maximize','maximize'],pruner=MedianPruner(),study_name='catboost_study',storage='sqlite:///my_study.db',sampler = TPESampler(seed=100))\n", "cat_study.optimize(cat_func, n_trials=30,n_jobs=1)\n" ] }, { "cell_type": "code", "execution_count": 19, "id": "a2e122ed", "metadata": {}, "outputs": [ { "data": { "application/vnd.plotly.v1+json": { "config": { "plotlyServerURL": "https://plot.ly" }, "data": [ { "hovertemplate": "%{text}Trial", "marker": { "color": [ 0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20, 24, 25, 27, 28, 29 ], "colorbar": { "title": { "text": "Trial" } }, "colorscale": [ [ 0, "rgb(247,251,255)" ], [ 0.125, "rgb(222,235,247)" ], [ 0.25, "rgb(198,219,239)" ], [ 0.375, "rgb(158,202,225)" ], [ 0.5, "rgb(107,174,214)" ], [ 0.625, "rgb(66,146,198)" ], [ 0.75, "rgb(33,113,181)" ], [ 0.875, "rgb(8,81,156)" ], [ 1, "rgb(8,48,107)" ] ], "line": { "color": "Grey", "width": 0.5 } }, "mode": "markers", "showlegend": false, "text": [ "{
\"number\": 0,
\"values\": [
0.6372193139352654,
0.620093055675489
],
\"params\": {
\"classifier__bagging_temperature\": 0.6707490847267786,
\"classifier__bootstrap_type\": \"Bayesian\",
\"classifier__depth\": 3,
\"classifier__iterations\": 589,
\"classifier__l2_leaf_reg\": 14.826865852478651,
\"classifier__learning_rate\": 0.1331101013172486,
\"classifier__loss_function\": \"CrossEntropy\",
\"over__k_neighbors\": 5,
\"over__sampling_strategy\": 0.8868042908182809
}
}", "{
\"number\": 3,
\"values\": [
0.6575427980381697,
0.5902805291782084
],
\"params\": {
\"classifier__bagging_temperature\": 0.38194344494311006,
\"classifier__bootstrap_type\": \"Bayesian\",
\"classifier__depth\": 8,
\"classifier__iterations\": 327,
\"classifier__l2_leaf_reg\": 11.383807276998901,
\"classifier__learning_rate\": 0.014423941661438313,
\"classifier__loss_function\": \"Logloss\",
\"over__k_neighbors\": 27,
\"over__sampling_strategy\": 0.37370943678516977
}
}", "{
\"number\": 4,
\"values\": [
0.6381240964177318,
0.5648889821268726
],
\"params\": {
\"classifier__bagging_temperature\": 0.5818421923987779,
\"classifier__bootstrap_type\": \"Bayesian\",
\"classifier__depth\": 1,
\"classifier__iterations\": 983,
\"classifier__l2_leaf_reg\": 11.07662099160046,
\"classifier__learning_rate\": 0.2682583239712662,
\"classifier__loss_function\": \"Logloss\",
\"over__k_neighbors\": 7,
\"over__sampling_strategy\": 0.36328543581750006
}
}", "{
\"number\": 5,
\"values\": [
0.6611581469842929,
0.6201903716043509
],
\"params\": {
\"classifier__bagging_temperature\": 0.8848532934911055,
\"classifier__bootstrap_type\": \"Bayesian\",
\"classifier__depth\": 8,
\"classifier__iterations\": 590,
\"classifier__l2_leaf_reg\": 7.002539665696106,
\"classifier__learning_rate\": 0.08270161645013481,
\"classifier__loss_function\": \"CrossEntropy\",
\"over__k_neighbors\": 18,
\"over__sampling_strategy\": 0.5836800985589865
}
}", "{
\"number\": 6,
\"values\": [
0.6428961846729273,
0.6194567064656205
],
\"params\": {
\"classifier__bagging_temperature\": 0.376252454297363,
\"classifier__bootstrap_type\": \"Bayesian\",
\"classifier__depth\": 4,
\"classifier__iterations\": 419,
\"classifier__l2_leaf_reg\": 6.327718920736706,
\"classifier__learning_rate\": 0.06164348695668341,
\"classifier__loss_function\": \"CrossEntropy\",
\"over__k_neighbors\": 19,
\"over__sampling_strategy\": 0.7353235106343263
}
}", "{
\"number\": 7,
\"values\": [
0.6447732222702529,
0.6004771535288781
],
\"params\": {
\"classifier__bagging_temperature\": 0.20434527686864423,
\"classifier__bootstrap_type\": \"Bayesian\",
\"classifier__depth\": 10,
\"classifier__iterations\": 228,
\"classifier__l2_leaf_reg\": 11.43215320823212,
\"classifier__learning_rate\": 0.28445016543463936,
\"classifier__loss_function\": \"Logloss\",
\"over__k_neighbors\": 8,
\"over__sampling_strategy\": 0.5298972899076179
}
}", "{
\"number\": 8,
\"values\": [
0.6388699470253478,
0.6002452833216091
],
\"params\": {
\"classifier__bagging_temperature\": 0.09205560337723862,
\"classifier__bootstrap_type\": \"Bayesian\",
\"classifier__depth\": 10,
\"classifier__iterations\": 256,
\"classifier__l2_leaf_reg\": 11.371631580604891,
\"classifier__learning_rate\": 0.28753365410231146,
\"classifier__loss_function\": \"Logloss\",
\"over__k_neighbors\": 16,
\"over__sampling_strategy\": 0.651273712309146
}
}", "{
\"number\": 9,
\"values\": [
0.6567761324881193,
0.618368666467077
],
\"params\": {
\"classifier__bagging_temperature\": 0.7543489945823536,
\"classifier__bootstrap_type\": \"Bayesian\",
\"classifier__depth\": 6,
\"classifier__iterations\": 179,
\"classifier__l2_leaf_reg\": 8.530503044615214,
\"classifier__learning_rate\": 0.2977258305880532,
\"classifier__loss_function\": \"CrossEntropy\",
\"over__k_neighbors\": 20,
\"over__sampling_strategy\": 0.5534931870325313
}
}", "{
\"number\": 10,
\"values\": [
0.6396117049502414,
0.6057137545740187
],
\"params\": {
\"classifier__bagging_temperature\": 0.9915240636830094,
\"classifier__bootstrap_type\": \"Bayesian\",
\"classifier__depth\": 7,
\"classifier__iterations\": 762,
\"classifier__l2_leaf_reg\": 3.975285286881059,
\"classifier__learning_rate\": 0.215582574630618,
\"classifier__loss_function\": \"CrossEntropy\",
\"over__k_neighbors\": 30,
\"over__sampling_strategy\": 0.7555589976885287
}
}", "{
\"number\": 11,
\"values\": [
0.6489385721085841,
0.6218906017623407
],
\"params\": {
\"classifier__bagging_temperature\": 0.9984437003073823,
\"classifier__bootstrap_type\": \"Bayesian\",
\"classifier__depth\": 8,
\"classifier__iterations\": 562,
\"classifier__l2_leaf_reg\": 3.1348205728505256,
\"classifier__learning_rate\": 0.07919214342005734,
\"classifier__loss_function\": \"CrossEntropy\",
\"over__k_neighbors\": 12,
\"over__sampling_strategy\": 0.9964286097717713
}
}", "{
\"number\": 12,
\"values\": [
0.6623677084875563,
0.6078036510543606
],
\"params\": {
\"classifier__bagging_temperature\": 0.8150636289316929,
\"classifier__bootstrap_type\": \"Bayesian\",
\"classifier__depth\": 9,
\"classifier__iterations\": 716,
\"classifier__l2_leaf_reg\": 7.4902011187560005,
\"classifier__learning_rate\": 0.0845515926496103,
\"classifier__loss_function\": \"CrossEntropy\",
\"over__k_neighbors\": 25,
\"over__sampling_strategy\": 0.4820378419913067
}
}", "{
\"number\": 13,
\"values\": [
0.6512443989230502,
0.6188393862092557
],
\"params\": {
\"classifier__bagging_temperature\": 0.8450040159186086,
\"classifier__bootstrap_type\": \"Bayesian\",
\"classifier__depth\": 6,
\"classifier__iterations\": 456,
\"classifier__l2_leaf_reg\": 5.405969890766709,
\"classifier__learning_rate\": 0.16186098171020508,
\"classifier__loss_function\": \"CrossEntropy\",
\"over__k_neighbors\": 13,
\"over__sampling_strategy\": 0.7102253365867022
}
}", "{
\"number\": 15,
\"values\": [
0.641296403583347,
0.6164033777698541
],
\"params\": {
\"classifier__bagging_temperature\": 0.5680134101638298,
\"classifier__bootstrap_type\": \"Bayesian\",
\"classifier__depth\": 5,
\"classifier__iterations\": 893,
\"classifier__l2_leaf_reg\": 9.231149082536739,
\"classifier__learning_rate\": 0.010004610961700494,
\"classifier__loss_function\": \"CrossEntropy\",
\"over__k_neighbors\": 21,
\"over__sampling_strategy\": 0.6440612778138175
}
}", "{
\"number\": 16,
\"values\": [
0.6658500186062489,
0.6099764883337795
],
\"params\": {
\"classifier__bagging_temperature\": 0.6976402133882517,
\"classifier__bootstrap_type\": \"Bayesian\",
\"classifier__depth\": 7,
\"classifier__iterations\": 697,
\"classifier__l2_leaf_reg\": 7.5956351205291135,
\"classifier__learning_rate\": 0.108764473821013,
\"classifier__loss_function\": \"CrossEntropy\",
\"over__k_neighbors\": 24,
\"over__sampling_strategy\": 0.4370311041912889
}
}", "{
\"number\": 17,
\"values\": [
0.6637500523722162,
0.6058115630594205
],
\"params\": {
\"classifier__bagging_temperature\": 0.7068512335897372,
\"classifier__bootstrap_type\": \"Bayesian\",
\"classifier__depth\": 7,
\"classifier__iterations\": 474,
\"classifier__l2_leaf_reg\": 4.4538318038745235,
\"classifier__learning_rate\": 0.17022593368552327,
\"classifier__loss_function\": \"CrossEntropy\",
\"over__k_neighbors\": 15,
\"over__sampling_strategy\": 0.44041493066506293
}
}", "{
\"number\": 18,
\"values\": [
0.6562446450396104,
0.6183833758601154
],
\"params\": {
\"classifier__bagging_temperature\": 0.8548604601577593,
\"classifier__bootstrap_type\": \"Bayesian\",
\"classifier__depth\": 5,
\"classifier__iterations\": 760,
\"classifier__l2_leaf_reg\": 6.900433756417542,
\"classifier__learning_rate\": 0.1193744096547058,
\"classifier__loss_function\": \"CrossEntropy\",
\"over__k_neighbors\": 24,
\"over__sampling_strategy\": 0.6162657608281761
}
}", "{
\"number\": 19,
\"values\": [
0.633931652472807,
0.595875651427753
],
\"params\": {
\"classifier__bagging_temperature\": 0.8765625269097432,
\"classifier__bootstrap_type\": \"Bayesian\",
\"classifier__depth\": 1,
\"classifier__iterations\": 362,
\"classifier__l2_leaf_reg\": 9.833002257344305,
\"classifier__learning_rate\": 0.10450782903195371,
\"classifier__loss_function\": \"CrossEntropy\",
\"over__k_neighbors\": 18,
\"over__sampling_strategy\": 0.4732332384704713
}
}", "{
\"number\": 20,
\"values\": [
0.6599319532829758,
0.6193920144183575
],
\"params\": {
\"classifier__bagging_temperature\": 0.6691018280119739,
\"classifier__bootstrap_type\": \"Bayesian\",
\"classifier__depth\": 7,
\"classifier__iterations\": 515,
\"classifier__l2_leaf_reg\": 7.221703083312235,
\"classifier__learning_rate\": 0.04362351574635248,
\"classifier__loss_function\": \"Logloss\",
\"over__k_neighbors\": 30,
\"over__sampling_strategy\": 0.5733366480944478
}
}", "{
\"number\": 24,
\"values\": [
0.6696504312893732,
0.6065122932528354
],
\"params\": {
\"classifier__bagging_temperature\": 0.51653553589431,
\"classifier__bootstrap_type\": \"Bayesian\",
\"classifier__depth\": 10,
\"classifier__iterations\": 852,
\"classifier__l2_leaf_reg\": 8.47069272498055,
\"classifier__learning_rate\": 0.03891585400575964,
\"classifier__loss_function\": \"CrossEntropy\",
\"over__k_neighbors\": 27,
\"over__sampling_strategy\": 0.40920949898805703
}
}", "{
\"number\": 25,
\"values\": [
0.664650145636385,
0.6177823241917246
],
\"params\": {
\"classifier__bagging_temperature\": 0.4300999921535704,
\"classifier__bootstrap_type\": \"Bayesian\",
\"classifier__depth\": 8,
\"classifier__iterations\": 663,
\"classifier__l2_leaf_reg\": 10.242541283787418,
\"classifier__learning_rate\": 0.02697750608441178,
\"classifier__loss_function\": \"CrossEntropy\",
\"over__k_neighbors\": 27,
\"over__sampling_strategy\": 0.49709493307236585
}
}", "{
\"number\": 27,
\"values\": [
0.6713093944539977,
0.5961718852689115
],
\"params\": {
\"classifier__bagging_temperature\": 0.31374205367346913,
\"classifier__bootstrap_type\": \"Bayesian\",
\"classifier__depth\": 9,
\"classifier__iterations\": 939,
\"classifier__l2_leaf_reg\": 5.747039912459049,
\"classifier__learning_rate\": 0.04935004974456386,
\"classifier__loss_function\": \"CrossEntropy\",
\"over__k_neighbors\": 15,
\"over__sampling_strategy\": 0.3547328567232082
}
}", "{
\"number\": 28,
\"values\": [
0.6632011863700182,
0.6015055189966374
],
\"params\": {
\"classifier__bagging_temperature\": 0.6161250868029889,
\"classifier__bootstrap_type\": \"Bayesian\",
\"classifier__depth\": 10,
\"classifier__iterations\": 757,
\"classifier__l2_leaf_reg\": 4.649397974644055,
\"classifier__learning_rate\": 0.06692720369296869,
\"classifier__loss_function\": \"Logloss\",
\"over__k_neighbors\": 21,
\"over__sampling_strategy\": 0.40719921393953895
}
}", "{
\"number\": 29,
\"values\": [
0.6630232613430695,
0.6180352555226188
],
\"params\": {
\"classifier__bagging_temperature\": 0.49214852884270216,
\"classifier__bootstrap_type\": \"Bayesian\",
\"classifier__depth\": 9,
\"classifier__iterations\": 806,
\"classifier__l2_leaf_reg\": 12.24970467704765,
\"classifier__learning_rate\": 0.020596973847678335,
\"classifier__loss_function\": \"CrossEntropy\",
\"over__k_neighbors\": 26,
\"over__sampling_strategy\": 0.5231204767894236
}
}" ], "type": "scatter", "x": [ 0.6372193139352654, 0.6575427980381697, 0.6381240964177318, 0.6611581469842929, 0.6428961846729273, 0.6447732222702529, 0.6388699470253478, 0.6567761324881193, 0.6396117049502414, 0.6489385721085841, 0.6623677084875563, 0.6512443989230502, 0.641296403583347, 0.6658500186062489, 0.6637500523722162, 0.6562446450396104, 0.633931652472807, 0.6599319532829758, 0.6696504312893732, 0.664650145636385, 0.6713093944539977, 0.6632011863700182, 0.6630232613430695 ], "y": [ 0.620093055675489, 0.5902805291782084, 0.5648889821268726, 0.6201903716043509, 0.6194567064656205, 0.6004771535288781, 0.6002452833216091, 0.618368666467077, 0.6057137545740187, 0.6218906017623407, 0.6078036510543606, 0.6188393862092557, 0.6164033777698541, 0.6099764883337795, 0.6058115630594205, 0.6183833758601154, 0.595875651427753, 0.6193920144183575, 0.6065122932528354, 0.6177823241917246, 0.5961718852689115, 0.6015055189966374, 0.6180352555226188 ] }, { "hovertemplate": "%{text}Best Trial", "marker": { "color": [ 1, 2, 14, 21, 22, 23, 26 ], "colorbar": { "title": { "text": "Best Trial" }, "x": 1.1, "xpad": 40 }, "colorscale": [ [ 0, "rgb(255,245,240)" ], [ 0.125, "rgb(254,224,210)" ], [ 0.25, "rgb(252,187,161)" ], [ 0.375, "rgb(252,146,114)" ], [ 0.5, "rgb(251,106,74)" ], [ 0.625, "rgb(239,59,44)" ], [ 0.75, "rgb(203,24,29)" ], [ 0.875, "rgb(165,15,21)" ], [ 1, "rgb(103,0,13)" ] ], "line": { "color": "Grey", "width": 0.5 } }, "mode": "markers", "showlegend": false, "text": [ "{
\"number\": 1,
\"values\": [
0.6499444078337409,
0.6226688815315535
],
\"params\": {
\"classifier__bagging_temperature\": 0.9786237847073697,
\"classifier__bootstrap_type\": \"Bayesian\",
\"classifier__depth\": 9,
\"classifier__iterations\": 618,
\"classifier__l2_leaf_reg\": 5.594595073701051,
\"classifier__learning_rate\": 0.07066861541398498,
\"classifier__loss_function\": \"CrossEntropy\",
\"over__k_neighbors\": 6,
\"over__sampling_strategy\": 0.8775940469080601
}
}", "{
\"number\": 2,
\"values\": [
0.6519056805949188,
0.6208813075599615
],
\"params\": {
\"classifier__bagging_temperature\": 0.17541045374233666,
\"classifier__bootstrap_type\": \"Bayesian\",
\"classifier__depth\": 3,
\"classifier__iterations\": 835,
\"classifier__l2_leaf_reg\": 16.160417474713245,
\"classifier__learning_rate\": 0.1351942132623053,
\"classifier__loss_function\": \"Logloss\",
\"over__k_neighbors\": 1,
\"over__sampling_strategy\": 0.5923408300884501
}
}", "{
\"number\": 14,
\"values\": [
0.649116091444005,
0.6232189954438947
],
\"params\": {
\"classifier__bagging_temperature\": 0.5476812504333937,
\"classifier__bootstrap_type\": \"Bayesian\",
\"classifier__depth\": 8,
\"classifier__iterations\": 660,
\"classifier__l2_leaf_reg\": 8.196322052582264,
\"classifier__learning_rate\": 0.020822392654677994,
\"classifier__loss_function\": \"CrossEntropy\",
\"over__k_neighbors\": 22,
\"over__sampling_strategy\": 0.799756620482692
}
}", "{
\"number\": 21,
\"values\": [
0.6697576900596074,
0.6157760713140774
],
\"params\": {
\"classifier__bagging_temperature\": 0.5493942540864682,
\"classifier__bootstrap_type\": \"Bayesian\",
\"classifier__depth\": 8,
\"classifier__iterations\": 675,
\"classifier__l2_leaf_reg\": 8.17458323414613,
\"classifier__learning_rate\": 0.03933887055125068,
\"classifier__loss_function\": \"CrossEntropy\",
\"over__k_neighbors\": 23,
\"over__sampling_strategy\": 0.4493776726423679
}
}", "{
\"number\": 22,
\"values\": [
0.6651752616339168,
0.6202762500813138
],
\"params\": {
\"classifier__bagging_temperature\": 0.44283997155438665,
\"classifier__bootstrap_type\": \"Bayesian\",
\"classifier__depth\": 9,
\"classifier__iterations\": 640,
\"classifier__l2_leaf_reg\": 8.75337551959668,
\"classifier__learning_rate\": 0.04025049905197784,
\"classifier__loss_function\": \"CrossEntropy\",
\"over__k_neighbors\": 22,
\"over__sampling_strategy\": 0.5129058805845305
}
}", "{
\"number\": 23,
\"values\": [
0.6650023331732944,
0.6203855398698063
],
\"params\": {
\"classifier__bagging_temperature\": 0.4519142804553712,
\"classifier__bootstrap_type\": \"Bayesian\",
\"classifier__depth\": 9,
\"classifier__iterations\": 660,
\"classifier__l2_leaf_reg\": 8.583158000065652,
\"classifier__learning_rate\": 0.03926895529208242,
\"classifier__loss_function\": \"CrossEntropy\",
\"over__k_neighbors\": 22,
\"over__sampling_strategy\": 0.5154215629511536
}
}", "{
\"number\": 26,
\"values\": [
0.6727803318761914,
0.5965936207481224
],
\"params\": {
\"classifier__bagging_temperature\": 0.5885852898255278,
\"classifier__bootstrap_type\": \"Bayesian\",
\"classifier__depth\": 9,
\"classifier__iterations\": 772,
\"classifier__l2_leaf_reg\": 5.729692575897893,
\"classifier__learning_rate\": 0.05227674034319018,
\"classifier__loss_function\": \"CrossEntropy\",
\"over__k_neighbors\": 22,
\"over__sampling_strategy\": 0.3502332783291935
}
}" ], "type": "scatter", "x": [ 0.6499444078337409, 0.6519056805949188, 0.649116091444005, 0.6697576900596074, 0.6651752616339168, 0.6650023331732944, 0.6727803318761914 ], "y": [ 0.6226688815315535, 0.6208813075599615, 0.6232189954438947, 0.6157760713140774, 0.6202762500813138, 0.6203855398698063, 0.5965936207481224 ] } ], "layout": { "template": { "data": { "bar": [ { "error_x": { "color": "#2a3f5f" }, "error_y": { "color": "#2a3f5f" }, "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "bar" } ], "barpolar": [ { "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "barpolar" } ], "carpet": [ { "aaxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "baxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "type": "carpet" } ], "choropleth": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "choropleth" } ], "contour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "contour" } ], "contourcarpet": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "contourcarpet" } ], "heatmap": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmap" } ], "heatmapgl": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmapgl" } ], "histogram": [ { "marker": { "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "histogram" } ], "histogram2d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2d" } ], "histogram2dcontour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2dcontour" } ], "mesh3d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "mesh3d" } ], "parcoords": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "parcoords" } ], "pie": [ { "automargin": true, "type": "pie" } ], "scatter": [ { "fillpattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 }, "type": "scatter" } ], "scatter3d": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatter3d" } ], "scattercarpet": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattercarpet" } ], "scattergeo": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergeo" } ], "scattergl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergl" } ], "scattermapbox": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattermapbox" } ], "scatterpolar": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolar" } ], "scatterpolargl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolargl" } ], "scatterternary": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterternary" } ], "surface": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "surface" } ], "table": [ { "cells": { "fill": { "color": "#EBF0F8" }, "line": { "color": "white" } }, "header": { "fill": { "color": "#C8D4E3" }, "line": { "color": "white" } }, "type": "table" } ] }, "layout": { "annotationdefaults": { "arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1 }, "autotypenumbers": "strict", "coloraxis": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "colorscale": { "diverging": [ [ 0, "#8e0152" ], [ 0.1, "#c51b7d" ], [ 0.2, "#de77ae" ], [ 0.3, "#f1b6da" ], [ 0.4, "#fde0ef" ], [ 0.5, "#f7f7f7" ], [ 0.6, "#e6f5d0" ], [ 0.7, "#b8e186" ], [ 0.8, "#7fbc41" ], [ 0.9, "#4d9221" ], [ 1, "#276419" ] ], "sequential": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "sequentialminus": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ] }, "colorway": [ "#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52" ], "font": { "color": "#2a3f5f" }, "geo": { "bgcolor": "white", "lakecolor": "white", "landcolor": "#E5ECF6", "showlakes": true, "showland": true, "subunitcolor": "white" }, "hoverlabel": { "align": "left" }, "hovermode": "closest", "mapbox": { "style": "light" }, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": { "angularaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "radialaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "scene": { "xaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "yaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "zaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" } }, "shapedefaults": { "line": { "color": "#2a3f5f" } }, "ternary": { "aaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "baxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "caxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "title": { "x": 0.05 }, "xaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 }, "yaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 } } }, "title": { "text": "Pareto-front Plot" }, "xaxis": { "title": { "text": "Mean PR AUC" } }, "yaxis": { "title": { "text": "Mean F1" } } } } }, "metadata": {}, "output_type": "display_data" } ], "source": [ "cat_study = optuna.load_study(study_name=\"catboost_study\", storage=\"sqlite:///my_study.db\")\n", "optuna.visualization.plot_pareto_front(cat_study, target_names=[\"Mean PR AUC\", \"Mean F1\"])" ] }, { "cell_type": "code", "execution_count": 20, "id": "addeaf5e", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'classifier__bagging_temperature': 0.44283997155438665, 'classifier__bootstrap_type': 'Bayesian', 'classifier__depth': 9, 'classifier__iterations': 640, 'classifier__l2_leaf_reg': 8.75337551959668, 'classifier__learning_rate': 0.04025049905197784, 'classifier__loss_function': 'CrossEntropy', 'over__k_neighbors': 22, 'over__sampling_strategy': 0.5129058805845305}\n", " precision recall f1-score support\n", "\n", " 0 0.88 0.88 0.88 12191\n", " 1 0.62 0.61 0.61 3893\n", "\n", " accuracy 0.82 16084\n", " macro avg 0.75 0.74 0.75 16084\n", "weighted avg 0.81 0.82 0.82 16084\n", "\n" ] }, { "data": { "image/png": "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fv36ysnJ0datWxUcHJzr/PUKT3Z2tu1YQECA3NzcFB8ff9PKTN26dW0LiK/77rvv/vwmb7Bz505Vr15dr7zyiu3Yr7/+mqtdfHy8zpw5I39/f9t1XFxcVLt2bfn6+srf31/Hjx9Xjx49CnR9AEUfi24BE/To0UMVKlTQY489pm+//VYnTpzQli1bNHjwYJ06dUqSNGTIEL355ptavXq1jhw5ogEDBtzyGSo1atRQaGioXnzxRa1evdrW56effipJql69uiwWi9atW6fz588rLS1NZcqU0ciRIzVs2DAtWbJEx44d0/fff6/33nvPtpD15Zdf1s8//6xRo0YpLi5Oy5cvV2RkZIHu97777lN8fLxWrFihY8eOKSIiIs8FxO7u7goNDdW+ffv07bffavDgwXrqqafk5+cnSZo0aZLCw8MVERGhn376Sfv379fixYs1Y8aMAo0HQNFDYAFMULJkSW3btk3VqlVT165dVbduXfXu3VtXrlyxVVxGjBih559/XqGhoQoKClKZMmX0+OOP37LfefPm6YknntCAAQNUp04d9e3bV+np6ZKkypUra9KkSRo7dqx8fX01cOBASdLkyZM1fvx4hYeHq27duurYsaPWr1+vmjVrSrq2ruTzzz/X6tWr1bBhQ82fP19Tp04t0P0++uijGjZsmAYOHKhGjRpp586dGj9+fK52tWrVUteuXdWpUyd16NBBDRo0sNu23KdPHy1atEiLFy9W/fr11bZtW0VGRtrGCuDuZbHebIUfAACAk6DCAgAAnB6BBQAAOD0CCwAAcHoEFgAA4PQILAAAwOkRWAAAgNMjsAAAAKdHYAEAAE6PwAIAAJwegQUAADg9AgsAAHB6/wd/GtlAWWyFNQAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "0.614382490880667\n", "0.665956929903449\n" ] } ], "source": [ "from catboost import CatBoostClassifier\n", "\n", "pipe_CatBoost = imbpipeline(\n", " [\n", "\n", " ('preprocessor',preprocessor),\n", " ('over',smoteNC2),\n", "\n", " ('classifier',CatBoostClassifier(thread_count=-1,silent=True,task_type=\"GPU\"))]\n", " )\n", "cat_best_params = cat_study.trials[22].params\n", "evaluate_study(pipe_CatBoost,cat_best_params)\n" ] }, { "attachments": {}, "cell_type": "markdown", "id": "86442ca8", "metadata": {}, "source": [ "### Cross validate the Tuned Models " ] }, { "cell_type": "code", "execution_count": 87, "id": "912ebbe5", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Average precision: 0.629 (+/- 0.004)\n", "F1 score: 0.591 (+/- 0.005)\n", "Balanced accuracy: 0.730 (+/- 0.004)\n", "Average precision: 0.658 (+/- 0.003)\n", "F1 score: 0.617 (+/- 0.003)\n", "Balanced accuracy: 0.748 (+/- 0.003)\n", "Average precision: 0.664 (+/- 0.003)\n", "F1 score: 0.617 (+/- 0.004)\n", "Balanced accuracy: 0.747 (+/- 0.003)\n", "Average precision: 0.670 (+/- 0.004)\n", "F1 score: 0.620 (+/- 0.003)\n", "Balanced accuracy: 0.748 (+/- 0.002)\n" ] } ], "source": [ "\n", "\n", "pipe_SVC = imbpipeline(\n", " [ \n", " ('preprocessor', preprocessor),\n", "\n", " ('over',smoteNC2),\n", "\n", " ('classifier',LinearSVC(dual=False))\n", " ]\n", " )\n", "pipe_SVC.set_params(**svc_best_params)\n", "\n", "\n", "pipe_RFC = imbpipeline(\n", " [('preprocessor',preprocessor),\n", " ('over',smoteNC2),\n", " ('classifier',RandomForestClassifier(n_jobs=4))\n", " ]\n", " )\n", "pipe_RFC.set_params(**rfc_best_params)\n", "\n", "pipe_LGBM = imbpipeline(\n", " [\n", " ('preprocessor',preprocessor),\n", " ('over',smoteNC2),\n", " ('classifier',LGBMClassifier(n_jobs=4,objective='binary'))]\n", " )\n", "pipe_LGBM.set_params(**lgbm_best_params)\n", "\n", "catboost_model = CatBoostClassifier(thread_count=-1,silent=True,task_type=\"GPU\")\n", "pipe_CatBoost = imbpipeline(\n", " [\n", "\n", " ('preprocessor',preprocessor),\n", " ('over',smoteNC2),\n", "\n", " ('classifier',catboost_model)]\n", " )\n", "pipe_CatBoost.set_params(**cat_best_params)\n", "\n", "\n", "models = [\n", " ('svc', pipe_SVC),\n", " ('rfc', pipe_RFC),\n", " ('lgbm', pipe_LGBM),\n", " ('catboost', pipe_CatBoost)\n", "]\n", "\n", "# initialize a list to store the results for each model\n", "results = []\n", "\n", "# iterate over the list of models\n", "for name, model in models:\n", " # evaluate the model using the eval_base_models function\n", " df = eval_base_models(5, model, X, y)\n", "\n", " # add the model name to the DataFrame\n", " df['model'] = name\n", "\n", " # add the DataFrame to the list of results\n", " results.append(df)\n", "\n", "df_final_combined = pd.concat(results, ignore_index=True)\n", "\n" ] }, { "cell_type": "code", "execution_count": 88, "id": "ea315ff5", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
meanstd
scoreaverage_precisionbalanced_accuracyf1_scoreaverage_precisionbalanced_accuracyf1_score
model
catboost0.6698960.7482310.6196650.0035000.0024220.003336
lgbm0.6639570.7471430.6170570.0029850.0032400.004117
rfc0.6579940.7477120.6170410.0029140.0026340.002895
svc0.6286260.7303330.5910880.0044570.0037620.005207
\n", "
" ], "text/plain": [ " mean std \\\n", "score average_precision balanced_accuracy f1_score average_precision \n", "model \n", "catboost 0.669896 0.748231 0.619665 0.003500 \n", "lgbm 0.663957 0.747143 0.617057 0.002985 \n", "rfc 0.657994 0.747712 0.617041 0.002914 \n", "svc 0.628626 0.730333 0.591088 0.004457 \n", "\n", " \n", "score balanced_accuracy f1_score \n", "model \n", "catboost 0.002422 0.003336 \n", "lgbm 0.003240 0.004117 \n", "rfc 0.002634 0.002895 \n", "svc 0.003762 0.005207 " ] }, "execution_count": 88, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_final_pivot = df_final_combined.pivot(index='model', columns='score')\n", "\n", "# display the pivoted DataFrame\n", "df_final_pivot" ] }, { "attachments": {}, "cell_type": "markdown", "id": "20f8c70f", "metadata": {}, "source": [ "### Chosen Model: CatBoost Classifier" ] }, { "attachments": {}, "cell_type": "markdown", "id": "cc98d9aa", "metadata": {}, "source": [ "#### Feature Importance" ] }, { "cell_type": "code", "execution_count": 89, "id": "6b5f9c05", "metadata": {}, "outputs": [], "source": [ "def plot_feature_importance(model,X,y):\n", "# Create a StratifiedKFold object\n", " cv = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)\n", "\n", " # Initialize an empty list to store the feature importances for each fold\n", " feature_importances = []\n", "\n", " # Loop over each fold\n", " for train_index, test_index in cv.split(X, y):\n", " # Split the data into training and validation sets\n", " X_train_cv, X_val_cv = X.iloc[train_index], X.iloc[test_index]\n", " y_train_cv, y_val_cv = y.iloc[train_index], y.iloc[test_index]\n", " \n", " # Fit the pipeline on the training data\n", " model.fit(X_train_cv, y_train_cv)\n", " \n", " # Access the fitted CatBoost model from the pipeline\n", " catboost_model = model.named_steps['classifier']\n", " \n", " # Calculate the feature importances\n", " fi = catboost_model.get_feature_importance()\n", " \n", " # Append the feature importances to the list\n", " feature_importances.append(fi)\n", "\n", " # Calculate the average feature importance for each feature\n", " feature_importances = pd.DataFrame(feature_importances, columns=X.columns)\n", " avg_feature_importances = feature_importances.mean(axis=0)\n", "\n", " # Create a DataFrame with average feature importances and feature names\n", " fi_df = pd.DataFrame({'feature_importance': avg_feature_importances,\n", " 'feature_names': X.columns})\n", "\n", " # Sort the DataFrame by average feature importance\n", " fi_df.sort_values(by=['feature_importance'], ascending=False, inplace=True)\n", "\n", " # Plot Seaborn bar chart\n", " plt.figure(figsize=(10, 8))\n", " sns.barplot(x=fi_df['feature_importance'], y=fi_df['feature_names'])\n", "\n", " # Add chart labels\n", " plt.title('AVERAGE CATBOOST FEATURE IMPORTANCE ACROSS 5 FOLDS')\n", " plt.xlabel('FEATURE IMPORTANCE')\n", " plt.ylabel('FEATURE NAMES')" ] }, { "cell_type": "code", "execution_count": 90, "id": "b0b91b8a", "metadata": {}, "outputs": [ { "data": { "image/png": "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V428efMacXFxGdax5XgB1nAKMYBHRnR0tPLly6fnnntO7du3V3R0tMXyrl27Ki0tzepptKtWrVJCQoK6dOmSY/WkjzDGxsZmWLZ06VL99ddf6tChg1588UUtWbIkwyjQN998o0OHDmnEiBGqV6+e1W00b95cLVu2zLGaR4wYIV9fX3311VdydHTMsDwkJCTDaZrbt29XXFycXnzxRb344ovaunWrfv/99xyrSZJ5BDtv3v9/4s+YMWOUL18+ffbZZxlGH5588kkNHTpUBw8e1KJFix54nYsXLyoxMTHT41+wYMEc2b+Had68eWrfvr1atWplPgshN2X1vXgYihYtqqeffjrDfkdHRysoKEhPPPGETf3kyZPHfIp0XFycJGns2LEymUyaNWuWxZkB0p2zCiZMmKD4+Hh9+umn9+3/7xyX7HwHPT099dprr2nFihXas2dPlv1++umn+uOPPzR58mSrpwAXKlRIb7/9drbrzYot+7Jjxw6tWrVKPXv21AsvvJChD2dnZ6unQt/L2jH//fff9eWXX+qZZ55R//79M6zTr18/NW7cWF988YW5rvT1rf2ecHBwUP78+c3TsbGxqly5stUzCrLz+8QwDCUmJsowDJvXsdUHH3yg5ORkffbZZ/Lz87NYVqBAAX366ae6fv26JkyYkGPbLFGihKKionTz5k2LfmNjY1WsWDGVKFEiwzr28PsXjyYCLIBHRnR0tNq1aycnJyeFhYWZT51M9/TTT6tYsWJW/wM/b948ubm5qU2bNhmWXbx4McMrMTHxvvWk/yc3X758Vmtt3LixChcurBdffFHXrl3TihUrLNqkT3ft2vW+27rXtWvXrNad1X92Tpw4oaNHj6pNmzby9PS0eVvR0dEqXbq0atWqpdDQULm5uWn+/PnZrjldamqqud74+Hh99913GjVqlMqUKWP+D+KJEyd07NgxtW7dWl5eXlb76datm6Q7p0s+6DoFCxaUq6urVqxYocuXLz/wPmXHve9ZQkJChjbJyclW39/bt29btNuxY4dOnjypsLAwOTk5qV27dhn+sPNPy+p7IUmXL1/OsF9ZXQdpi86dO2vFihVKSkqSJN2+fVvffPNNhlPh7yc9qOTPn1/JycnatGmTGjRooJIlS1pt36lTJzk7O5s/T1m533HJSna/g4MGDVK+fPmyvCZbkpYvXy5XV1e1b9/e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VXbuTm3LMbflfbUW8pydnTV8+HANHz5c8fHx2rJli6ZNm6avv/5ajo6Omjt3rrltrVq1tGTJEt28eVP79+/X0qVLNWXKFLVv31779u2z+EOULTp37qw33nhDGzdutCnAFihQINP3KDuf67vb55T00/zv7rdcuXKaM2eOUlNTdfjwYa1cuVITJkxQnz59VLJkyQf+vOHxRYAFkOu+++47xcfHa8GCBVZv0BQdHW0OsNKd0PfWW2/p559/VrFixbR582a98sorFjcIehB3h8Y2bdooOTlZvXv3Vv369RUQECBJFtflli1b1mqt6QG2QoUK2rdvn/744w+L04jLlSuncuXKSVKOBaf07Ul3nlFoi8TERK1YsUI3btywui/z5s3TuHHjrIaa7KpRo4a8vb21detWSTKPeh44cCDTdX777TclJiaa/zP4IOvcy8vLS82aNVOzZs3k6OioWbNmaceOHWrYsOED7dfDlH7apbXT3SVpy5Yt5jMWbJH+Wfvrr7+sLk9OTrb6ebw7bLdq1UoODg5666231LhxY9WsWdPm7f9dzz//vJydndW9e3elpKRkelzS3e+PCWXKlFHevHmz/DylpKTo2LFjVvfz7qAeGhqqoKAgdenSRbt377b5Dwt/9zs4aNAgTZkyRWPGjNHUqVMzLE//HXTz5s1snUb8ILKzL3f/rsrsOk1rbDnmd/+eyOwshfT3PLPfE/7+/nrxxRf1wgsvqHLlyvr6668VFRWV4d8YJycn1apVS7Vq1VK5cuX08ssv65tvvnmg55sGBATkyHX63t7e8vf3z/JzLd05BkWLFs30fgIP6tChQypYsKDVfh0cHBQUFKSgoCDVqVNHjRs3VnR0NAEW2cY1sAByXXR0tAoWLKhvvvkmwyssLMx8x990YWFhMplMmjdvnhYuXKjU1NQcvftwuvHjx+vGjRsaN26cRa2Ojo5asGBBhloHDRqkbdu2ma+bSh9l/aduulOuXDmVL19e3377rfmv4FlJv3PyjBkzMuzLu+++q99++03bt2/PsfpSU1PNdaWH+GXLlmU6UjB79mxJ//84Psg6WUkPJfHx8dnbkX/A9evX9e2336pTp05Wvxf+/v7Z/lyln2577NixDMuSk5N15syZLE/JTTd8+HB5enrm+N1r78fV1VVt2rRRTEyMmjVr9rdHed3d3dW4cWNt3bpVv/32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kZGR6tKliwYPHixJKlu2rKZPn66GDRtqxowZOn36tNzd3dWqVSt5enqqRIkS5j9axMfH6/bt22rXrp1KlCgh6c6dqTMTGRmpMWPG2HRsAAAAAMAamwNsw4YNH2Yd/7gTJ05o5MiR2rFjhy5evGgeXT19+rT27dun4OBgc3i915EjR9SnTx+LefXq1dO0adNs3v5//vMfvfDCC9qzZ4+aN2+uNm3aqG7dujavf+TIEaWkpKhJkyZZtqtSpYr5Z39/f0l3nulboUIF7d+/XwcOHFB0dLS5jWEYSktL06lTp9SsWTOVKFFCpUqVUosWLdSiRQu1bdvWfDpykyZNFBQUpJCQEDVv3lzt27dXvnz5rNYxbNgwvf766+bpxMREBQQE2Ly/AAAAAGDzNbD/NqGhobp8+bI+//xz7dixw3x9682bN+Xq6vq3+s6T585hvft02nsfOdSyZUv99ttveu211/Tnn3+qSZMmioiIsHkbttbo6Oho/jn9FO/0sJ6UlKRXXnlF+/btM7/279+vEydOqHTp0vL09NSePXs0f/58+fv7a+TIkapataquXr0qBwcHbdiwQWvWrFGlSpX04Ycfqnz58jp16pTVOpydneXl5WXxAgAAAIDssDnAOjg42PSyB5cuXdKxY8f09ttvq0mTJqpYsaKuXLliXl6lShXt27dPly9ftrp+xYoVtX37dot527dvV6VKlST9/1OA4+PjzcvvvqFTOj8/P3Xv3l1z587V1KlT9dlnn0mS+ZrX1NTUTPehbNmycnV11aZNm2zYY+uqV6+uw4cPq0yZMhle6TXkzZtXTZs21YQJE3TgwAHFxcXpu+++k3QnENerV09jxozR3r175eTkpKVLlz5wPQAAAACQlWzdxKlEiRLq3r27xc2b7FG+fPmUP39+ffbZZ/L399fp06f11ltvmZeHhYXpvffeU5s2bRQZGSl/f3/t3btXRYoUUZ06dTRkyBB17NhRwcHBatq0qVasWKElS5Zo48aNku6MjtauXVvjx49XyZIldf78eb399tsWNYwcOVI1atRQ5cqVlZKSopUrV6pixYqSpIIFC8rV1VVr165VsWLF5OLikuEROi4uLho6dKjefPNNOTk5qV69erpw4YJ++eUX9ezZ06bjMHToUNWuXVv9+/dXr1695O7ursOHD2vDhg366KOPtHLlSv366696+umn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19dXR44c0bPPPqvOnTsrIiLCztVXT4mJierRo4caNmyoX375RW+//bZSUlL0ySefMMfuUeWN2V2bY3f0ncZABf3lL38xGjZsaNSoUcOIiooyvvrqK3uXhDIMHjzYCAwMNGrUqGHUr1/fGDx4sHHixAl7l4Ub7N6925BUYomPjzcM49dfpfP8888b/v7+houLi9GlSxcjIyPDvkVXc+WN2aVLl4yuXbsafn5+hrOzsxEcHGyMGTPGOHPmjL3LrtZKGy9Jxpo1a6xtLl++bIwdO9bw9vY2ateubfTt29fIzs62X9HV3K3GLCsry+jcubPh4+NjuLi4GKGhoca0adOM3Nxc+xZejY0cOdIIDg42atSoYfj5+RldunQxduzYYd3PHLv3lDdmd2uOWQzDMH57/AUAAAAAoGrwHVgAAAAAgCkQYAEAAAAApkCABQAAAACYAgEWAAAAAGAKBFgAAAAAgCkQYAEAAAAApkCABQAAAACYAgEWAAAAAGAKBFgAAAAAgCkQYAEAuIOGDx8ui8VSYjlx4kS5+7t3716irwULFsjR0VEvv/yydVujRo1KPb54GT58uE6fPi2LxaL09PQSfcbGxmry5Mml9le7dm21atVKK1eutDkmJSWlzPOdOXOm1M/h5hqK1x0dHfXTTz/ZtM3OzpaTk5MsFotOnz5t07548fX1VdeuXfWPf/zD5tivv/5agwYNkp+fn1xcXBQWFqZZs2bp0qVLNu3Ku86yxqR4adSoUbljUmzt2rWljuWFCxdksViUkpJis3337t3q2bOnfH19Vbt2bbVo0UJTpkyxfj6/5XMHgN87AiwAAHdY9+7dlZ2dbbM0bty43P3r168v0c/q1as1ffp0rV692rrtwIED1mM2btwoScrIyLBue+WVVypd75w5c5Sdna1jx45p6NChGjNmjLZv316i3Y3nKV7q1q1bqXPVr19f69ats9n2xhtvqH79+qW2//TTT5Wdna1PPvlE+fn56tGjhy5cuCBJ+uqrrxQdHa2CggL97W9/03fffacXXnhBa9eu1aOPPqqCgoIKXecrr7xic02StGbNGuv6gQMHrH2UNiY3cnJy0qeffqrdu3eX+zksX75ccXFxCggI0MaNG/XNN99o2bJlys3N1aJFi2za3onPHQB+LwiwAADcYS4uLgoICLBZHB0dy93v7e1t08eePXt0+fJl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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_feature_importance(pipe_CatBoost,X,y)" ] }, { "attachments": {}, "cell_type": "markdown", "id": "e2780c6e", "metadata": {}, "source": [ "### Saving the best model" ] }, { "cell_type": "code", "execution_count": 21, "id": "b88f2d45", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['final_model.pkl']" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import joblib\n", "pipe_final_CatBoost = imbpipeline(\n", " [\n", "\n", " ('preprocessor',preprocessor),\n", " ('over',smoteNC2),\n", "\n", " ('classifier',CatBoostClassifier(thread_count=-1,silent=True,task_type=\"GPU\"))]\n", " )\n", "pipe_final_CatBoost.set_params(**cat_best_params)\n", "\n", "pipe_final_CatBoost.fit(X,y)\n", "\n", "joblib.dump(pipe_final_CatBoost,'final_model.pkl')\n" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.10.6" } }, "nbformat": 4, "nbformat_minor": 5 }