{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Classification and Regression Metrics" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Lecture Learning Objectives \n", "\n", "- Explain why accuracy is not always the best metric in ML.\n", "- Explain components of a confusion matrix.\n", "- Define precision, recall, and f1-score and use them to evaluate different classifiers.\n", "- Identify whether there is class imbalance and whether you need to deal with it.\n", "- Explain `class_weight` and use it to deal with data imbalance.\n", "- Appropriately select a scoring metric given a regression problem.\n", "- Interpret and communicate the meanings of different scoring metrics on regression problems. MSE, RMSE, $R^2$, MAPE.\n", "- Apply different scoring functions with `cross_validate`, `GridSearchCV` and `RandomizedSearchCV`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Five Minute Recap/ Lightning Questions \n", "\n", "- What is the difference between a business and a statistical question?\n", "- Should we ever question our clients' requests? \n", "- What is an important feature?\n", "- What are some types of feature selection methods?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Some lingering questions\n", "\n", "- How can we measure our model's success besides using accuracy or $R2$?\n", "- How should we interpret our model score if we have data where there is a lot of one class and very few of another?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Introducing Evaluation Metrics \n", "\n", "Up until this point, we have been scoring our models the same way every time.\n", "We've been using the percentage of correctly predicted examples for classification problems and the $R^2$ metric for regression problems.\n", "Let's discuss how we need to expand our horizons and why it's important to evaluate our models in other ways.\n", "\n", "To help explain why accuracy isn't always the most beneficial option, we are going back to the creditcard data set from the first class." ] }, { "cell_type": "code", "execution_count": 1, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
TimeV1V2V3V4V5V6V7V8V9...V21V22V23V24V25V26V27V28AmountClass
2210139995.00.0008220.176378-0.081084-2.2406570.266328-1.4585960.658240-0.340358-1.124072...0.5741941.741723-0.1103790.053146-0.692897-0.2077810.4600530.30717315.000
98478139199.01.898426-0.5446270.0210550.233999-0.6902120.343812-0.9763580.2412780.957517...0.1186480.4398550.3232900.749224-0.5801080.317277-0.005703-0.03489623.360
75264147031.01.852468-0.216744-1.9561240.3607450.415657-0.5774880.229426-0.2153980.913203...-0.198389-0.5260800.0933250.322035-0.030224-0.113123-0.0229520.000988109.540
6613050102.0-0.9994810.849393-0.5560910.2594642.2981133.728162-0.2583221.353233-0.503258...-0.082967-0.1360160.0921601.0092010.216844-0.2364710.2015750.10162120.240
8233141819.0-0.4177921.0278101.560763-0.029187-0.076807-0.9046890.688554-0.056332-0.369867...-0.229592-0.609212-0.0194240.356282-0.1986970.0720550.2640110.1207432.690
..................................................................
10574786420.01.539769-0.710190-0.7791330.9727780.5216771.992379-0.5381520.5924310.530753...-0.020365-0.2031990.323143-0.793579-0.611899-0.9267260.073134-0.018315147.800
102486113038.0-0.5093001.128383-0.876960-0.5682080.819440-0.7491780.9032560.0687640.068195...-0.391476-0.8605420.0617690.387231-0.3340760.1015850.085727-0.19421944.990
4820142604.01.906919-0.3989410.2758371.736308-0.7108440.682936-1.1806140.4437510.047498...-0.022269-0.1636100.4991260.731827-1.0883282.005337-0.153967-0.0617033.750
10196139585.02.106285-0.102411-1.8155380.2568470.340938-1.0024900.373141-0.3142470.541619...-0.060222-0.0479040.1241920.7719080.1448640.645126-0.117185-0.0740935.410
77652148922.02.157147-1.138329-0.775495-0.887122-1.019818-0.489387-1.024161-0.0690890.329227...0.2829630.8022730.037861-0.642100-0.101534-0.046669-0.001974-0.05212039.990
\n", "

85504 rows × 31 columns

\n", "
" ], "text/plain": [ " Time V1 V2 V3 V4 V5 V6 \\\n", "2210 139995.0 0.000822 0.176378 -0.081084 -2.240657 0.266328 -1.458596 \n", "98478 139199.0 1.898426 -0.544627 0.021055 0.233999 -0.690212 0.343812 \n", "75264 147031.0 1.852468 -0.216744 -1.956124 0.360745 0.415657 -0.577488 \n", "66130 50102.0 -0.999481 0.849393 -0.556091 0.259464 2.298113 3.728162 \n", "82331 41819.0 -0.417792 1.027810 1.560763 -0.029187 -0.076807 -0.904689 \n", "... ... ... ... ... ... ... ... \n", "105747 86420.0 1.539769 -0.710190 -0.779133 0.972778 0.521677 1.992379 \n", "102486 113038.0 -0.509300 1.128383 -0.876960 -0.568208 0.819440 -0.749178 \n", "4820 142604.0 1.906919 -0.398941 0.275837 1.736308 -0.710844 0.682936 \n", "10196 139585.0 2.106285 -0.102411 -1.815538 0.256847 0.340938 -1.002490 \n", "77652 148922.0 2.157147 -1.138329 -0.775495 -0.887122 -1.019818 -0.489387 \n", "\n", " V7 V8 V9 ... V21 V22 V23 \\\n", "2210 0.658240 -0.340358 -1.124072 ... 0.574194 1.741723 -0.110379 \n", "98478 -0.976358 0.241278 0.957517 ... 0.118648 0.439855 0.323290 \n", "75264 0.229426 -0.215398 0.913203 ... -0.198389 -0.526080 0.093325 \n", "66130 -0.258322 1.353233 -0.503258 ... -0.082967 -0.136016 0.092160 \n", "82331 0.688554 -0.056332 -0.369867 ... -0.229592 -0.609212 -0.019424 \n", "... ... ... ... ... ... ... ... \n", "105747 -0.538152 0.592431 0.530753 ... -0.020365 -0.203199 0.323143 \n", "102486 0.903256 0.068764 0.068195 ... -0.391476 -0.860542 0.061769 \n", "4820 -1.180614 0.443751 0.047498 ... -0.022269 -0.163610 0.499126 \n", "10196 0.373141 -0.314247 0.541619 ... -0.060222 -0.047904 0.124192 \n", "77652 -1.024161 -0.069089 0.329227 ... 0.282963 0.802273 0.037861 \n", "\n", " V24 V25 V26 V27 V28 Amount Class \n", "2210 0.053146 -0.692897 -0.207781 0.460053 0.307173 15.00 0 \n", "98478 0.749224 -0.580108 0.317277 -0.005703 -0.034896 23.36 0 \n", "75264 0.322035 -0.030224 -0.113123 -0.022952 0.000988 109.54 0 \n", "66130 1.009201 0.216844 -0.236471 0.201575 0.101621 20.24 0 \n", "82331 0.356282 -0.198697 0.072055 0.264011 0.120743 2.69 0 \n", "... ... ... ... ... ... ... ... \n", "105747 -0.793579 -0.611899 -0.926726 0.073134 -0.018315 147.80 0 \n", "102486 0.387231 -0.334076 0.101585 0.085727 -0.194219 44.99 0 \n", "4820 0.731827 -1.088328 2.005337 -0.153967 -0.061703 3.75 0 \n", "10196 0.771908 0.144864 0.645126 -0.117185 -0.074093 5.41 0 \n", "77652 -0.642100 -0.101534 -0.046669 -0.001974 -0.052120 39.99 0 \n", "\n", "[85504 rows x 31 columns]" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import pandas as pd\n", "from sklearn.model_selection import train_test_split\n", "\n", "\n", "cc_df = pd.read_csv('data/creditcard_sample.csv', encoding='latin-1')\n", "train_df, test_df = train_test_split(cc_df, test_size=0.3, random_state=111)\n", "train_df" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(85504, 31)" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "train_df.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can see this is a quite large dataset!" ] }, { "cell_type": "code", "execution_count": 3, "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", "
TimeV1V2V3V4V5V6V7V8V9...V21V22V23V24V25V26V27V28AmountClass
count85504.00000085504.00000085504.00000085504.00000085504.00000085504.00000085504.00000085504.00000085504.00000085504.000000...85504.00000085504.00000085504.00000085504.00000085504.00000085504.00000085504.00000085504.00000085504.00000085504.000000
mean111177.9652180.069621-0.035379-0.296593-0.0280280.086975-0.0303990.025395-0.0170360.042680...0.0173530.0523810.012560-0.009845-0.048255-0.014074-0.003047-0.00220992.7249420.004128
std48027.5310322.1084401.7803711.6318921.4664571.4528471.3540521.3617861.2581071.131435...0.7769540.7553150.6703360.6076380.5480000.4811180.4142340.369266271.2972760.064121
min406.000000-56.407510-72.715728-33.680984-5.683171-40.427726-26.160506-43.557242-73.216718-13.434066...-34.830382-10.933144-36.666000-2.824849-8.696627-2.534330-9.895244-8.6565700.0000000.000000
25%50814.000000-0.886089-0.634044-1.228706-0.871992-0.622997-0.801849-0.550769-0.234941-0.616671...-0.225345-0.524692-0.160006-0.365718-0.375934-0.331664-0.074373-0.0589735.9900000.000000
50%133031.5000000.0644510.027790-0.206322-0.0992920.060853-0.3007300.0767270.0015960.003678...-0.0086020.0745640.0029900.027268-0.062231-0.061101-0.003718-0.00341122.6600000.000000
75%148203.0000001.8322610.7963110.7674060.6355430.7350010.3748970.6327470.3105010.658517...0.2150800.6220890.1778750.4587840.3178490.2308360.0881660.07686880.0000000.000000
max172788.0000002.45188822.0577294.18781116.71553734.80166623.91783744.05446119.5877739.234623...27.20283910.50309020.8033443.9796377.5195893.15532710.50788433.84780819656.5300001.000000
\n", "

8 rows × 31 columns

\n", "
" ], "text/plain": [ " Time V1 V2 V3 V4 \\\n", "count 85504.000000 85504.000000 85504.000000 85504.000000 85504.000000 \n", "mean 111177.965218 0.069621 -0.035379 -0.296593 -0.028028 \n", "std 48027.531032 2.108440 1.780371 1.631892 1.466457 \n", "min 406.000000 -56.407510 -72.715728 -33.680984 -5.683171 \n", "25% 50814.000000 -0.886089 -0.634044 -1.228706 -0.871992 \n", "50% 133031.500000 0.064451 0.027790 -0.206322 -0.099292 \n", "75% 148203.000000 1.832261 0.796311 0.767406 0.635543 \n", "max 172788.000000 2.451888 22.057729 4.187811 16.715537 \n", "\n", " V5 V6 V7 V8 V9 \\\n", "count 85504.000000 85504.000000 85504.000000 85504.000000 85504.000000 \n", "mean 0.086975 -0.030399 0.025395 -0.017036 0.042680 \n", "std 1.452847 1.354052 1.361786 1.258107 1.131435 \n", "min -40.427726 -26.160506 -43.557242 -73.216718 -13.434066 \n", "25% -0.622997 -0.801849 -0.550769 -0.234941 -0.616671 \n", "50% 0.060853 -0.300730 0.076727 0.001596 0.003678 \n", "75% 0.735001 0.374897 0.632747 0.310501 0.658517 \n", "max 34.801666 23.917837 44.054461 19.587773 9.234623 \n", "\n", " ... V21 V22 V23 V24 \\\n", "count ... 85504.000000 85504.000000 85504.000000 85504.000000 \n", "mean ... 0.017353 0.052381 0.012560 -0.009845 \n", "std ... 0.776954 0.755315 0.670336 0.607638 \n", "min ... -34.830382 -10.933144 -36.666000 -2.824849 \n", "25% ... -0.225345 -0.524692 -0.160006 -0.365718 \n", "50% ... -0.008602 0.074564 0.002990 0.027268 \n", "75% ... 0.215080 0.622089 0.177875 0.458784 \n", "max ... 27.202839 10.503090 20.803344 3.979637 \n", "\n", " V25 V26 V27 V28 Amount \\\n", "count 85504.000000 85504.000000 85504.000000 85504.000000 85504.000000 \n", "mean -0.048255 -0.014074 -0.003047 -0.002209 92.724942 \n", "std 0.548000 0.481118 0.414234 0.369266 271.297276 \n", "min -8.696627 -2.534330 -9.895244 -8.656570 0.000000 \n", "25% -0.375934 -0.331664 -0.074373 -0.058973 5.990000 \n", "50% -0.062231 -0.061101 -0.003718 -0.003411 22.660000 \n", "75% 0.317849 0.230836 0.088166 0.076868 80.000000 \n", "max 7.519589 3.155327 10.507884 33.847808 19656.530000 \n", "\n", " Class \n", "count 85504.000000 \n", "mean 0.004128 \n", "std 0.064121 \n", "min 0.000000 \n", "25% 0.000000 \n", "50% 0.000000 \n", "75% 0.000000 \n", "max 1.000000 \n", "\n", "[8 rows x 31 columns]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "train_df.describe(include='all')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We see that the columns are all scaled and numerical.\n", "\n", "You don't need to worry about this now. The original columns have been transformed already for confidentiality and our benefit so now there are no categorical features." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's separate `X` and `y` for train and test splits." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "X_train_big, y_train_big = train_df.drop(columns=[\"Class\"]), train_df[\"Class\"]\n", "X_test, y_test = test_df.drop(columns=[\"Class\"]), test_df[\"Class\"]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "We are going to be talking about evaluation metrics and it's easier to do so if we use an explicit validation set instead of using cross-validation.\n", "\n", "Our data is large enough so it shouldn't be a problem." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "X_train, X_valid, y_train, y_valid = train_test_split(\n", " X_train_big, y_train_big, test_size=0.3, random_state=123)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Baseline\n", "\n", "Just like and predictive question, we start our analysis by building a simple `DummyClassifier` model as our baseline." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.9958564458998864" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn.dummy import DummyClassifier\n", "\n", "dummy = DummyClassifier(strategy=\"most_frequent\")\n", "dummy.fit(X_train, y_train)\n", "dummy.score(X_train, y_train)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.9959067519101824" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dummy.score(X_valid, y_valid)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Almost 100% accuracy? This is supposed to be a baseline model! How is it getting such high accuracy? \n", "Should we just deploy this `DummyClassifier` model for fraud detection?\n", "\n", "Not so fast...\n", "If we look at the distribution of fraudulent labels to non-fraudulent labels, we can see there is an imbalance in the classes. " ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Class\n", "0 0.995872\n", "1 0.004128\n", "Name: proportion, dtype: float64" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "train_df[\"Class\"].value_counts(normalize=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here the `0` class is a Non fraud transaction, and the `1` class is a Fraud transaction. \n", "We can see here that there are MANY Non fraud transactions and only a tiny handful of Fraud transactions.\n", "So, what would be a good accuracy here? 99.9%? 99.99%?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's see if a logistic regression model would get a higher score than the Dummary model." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "fit_time 0.172872\n", "score_time 0.002629\n", "test_score 0.998830\n", "train_score 0.998993\n", "dtype: float64" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn.pipeline import make_pipeline\n", "from sklearn.preprocessing import StandardScaler\n", "from sklearn.linear_model import LogisticRegression\n", "from sklearn.model_selection import cross_validate\n", "\n", "pipe = make_pipeline(\n", " (StandardScaler()),\n", " (LogisticRegression(random_state=123))\n", ")\n", "\n", "pd.DataFrame(cross_validate(pipe, X_train, y_train, return_train_score=True)).mean()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This seems slightly better than `DummyClassifier`, but the question is can it really identify fraudulent transactions?\n", "The \"Fraud\" class is the class that we want to spot. The class we are interested in. \n", "Let's looks at some new metrics that can help us assess how well our model is doing overall and not just for the majority class label." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Classification Metrics and tools" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### What is \"positive\" and \"negative\"?\n", "\n", "There are two kinds of binary classification problems:\n", "\n", "- Distinguishing between two classes\n", "- Spotting a specific class (fraud transaction, spam, disease)\n", "\n", "In the case of spotting problems, the thing that we are interested in spotting is considered \"positive\"\n", "(not related to how a logistic regression model internall defines a \"positive\" and \"negative\" class). \n", "In our example, we want to spot **fraudulent** transactions and so fraudulent is the \"positive\" class. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Confusion Matrix\n", "\n", "A **confusion matrix** is a table that visualizes the performance of an algorithm. It shows the possible labels and how many of each label the model predicts correctly and incorrectly. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here we first fit and predict the model,\n", "and then show it's confusion matrix." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[25541, 6],\n", " [ 25, 80]])" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn.metrics import confusion_matrix\n", "\n", "\n", "pipe.fit(X_train, y_train)\n", "predictions = pipe.predict(X_valid)\n", "cm = confusion_matrix(y_valid, predictions)\n", "cm" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Confusion Matrix components" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "| X | predict negative | predict positive |\n", "|------|----------|-------|\n", "| negative example | True negative (TN) | False positive (FP)|\n", "| positive example | False negative (FN) | True positive (TP) |\n", "\n", "\n", "Remember the Fraud is considered \"positive\" in this case and Non fraud is considered \"negative\". \n", "\n", "\n", "The 4 quadrants of the confusion matrix can be explained as follows. These positions will change depending on what values we deem as the positive label. \n", "\n", "- **True negative (TN)**: Examples that are negatively labelled that the model correctly predicts. This is in the top left quadrant. \n", "- **False positive (FP)**: Examples that are negatively labelled that the model incorrectly predicts as positive. This is in the top right quadrant. \n", "- **False negative (FN)**: Examples that are positively labelled that the model incorrectly predicts as negative. This is in the bottom left quadrant. \n", "- **True positive (TP)**: Examples that are positively labelled that the model correctly predicted as positive. This is in the bottom right quadrant. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Instead of looking just at the numbers and remembering what each category represents,\n", "we can use the `ConfusionMatrixDisplay` class\n", "(the `plot_confusion_matrix` function in earlier version of sklearn)\n", "to visualize how well our model is doing classifying each target class." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can use `classes` to see which position each label takes so we can designate them more comprehensive labels in our plot. " ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0, 1])" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pipe.classes_" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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FhYGW1tbbN26FevXr4darUZoaCjCwsJ0+imVSsTFxWHRokV46623UFhYiN69e+PYsWMNtgs+AAii2AC7pdETJy8vD/b29vDDeCgE88aeDhERGaFMLEU8jiA3N1fnrkJTqvieGOobDoVCVa+xysqKcTZhVYPO92nHDBgRERFJBG35Ud8xqGYMwIiIiKhSI5QgmyPeBUlEREQkM2bAiIiIqFKVjVTrNQbViAEYERERSUz5KCKqHkuQRERERDJjBoyIiIgqcRG+LBiAERERUSURQH23kWD8VSsGYERERCThGjB5cA0YERERkcyYASMiIqJKIkywBswkM2nSGIARERFRJS7ClwVLkEREREQyYwaMiIiIKmkBCCYYg2rEAIyIiIgkvAtSHixBEhEREcmMGTAiIiKqxEX4smAARkRERJUYgMmCJUgiIiIimTEDRkRERJWYAZMFAzAiIiKqxG0oZMEAjIiIiCTchkIeXANGREREJDNmwIiIiKgS14DJggEYERERVdKKgFDPAErLAKw2LEESERERyYwZMCIiIqrEEqQsGIARERFRFSYIwMAArDYsQRIRERHJjBkwIiIiqsQSpCwYgBEREVElrYh6lxB5F2StWIIkIiIikhkzYERERFRJ1JYf9R2DasQAjIiIiCpxDZgsGIARERFRJa4BkwXXgBERERHJjBkwIiIiqsQSpCwYgBEREVElESYIwEwykyaNJUgiIiIimTEDRkRERJVYgpQFAzAiIiKqpNUCqOc+XlruA1YbliCJiIiIZMYMGBEREVViCVIWDMCIiIioEgMwWbAESURERCQzZsCIiIioEh9FJAsGYERERCQRRS1EsX53Mdb3+uaAARgRERFVEsX6Z7C4BqxWXANGREREJDNmwIiIiKiSaII1YMyA1YoBGBEREVXSagGhnmu4uAasVixBEhEREcmMGTAiIiKqxBKkLBiAERERkUTUaiHWswTJbShqxxIkERERkcyYASMiIqJKLEHKggEYERERVdKKgMAArKGxBElEREQkM2bAiIiIqJIoAqjvPmDMgNWGARgRERFJRK0IsZ4lSJEBWK0YgBEREVElUYv6Z8C4DUVtuAaMiIiISGbMgBEREZGEJUh5MAAjIiKiSixByoIBWDNR8a+RMpTWe389IiKSVxlKAciTWTLF90TFfKl6DMCaifz8fADAf/FlI8+EiIge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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from sklearn.metrics import ConfusionMatrixDisplay\n", "import matplotlib.pyplot as plt\n", "\n", "\n", "plt.rc('font', size=12) # bigger font sizes\n", "ConfusionMatrixDisplay(cm, display_labels=[\"Non fraud\", \"Fraud\"]).plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In fact,\n", "we don't even need to manually create the confusion matrix before plotting it,\n", "but can instead build it straight from the fitted estimator.\n", "In this case, we only need to fit the model before visualizing it\n", "(the predictions are done automatically on the validation/test data set that we pass in)\n", "This results in a 2 by 2 matrix with the labels `Non fraud` and `Fraud` on each axis. " ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "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FhYGW1tbbN26FevXr4darUZoaCjCwsJ0+imVSsTFxWHRokV46623UFhYiN69e+PYsWMNtgs+AAii2AC7pdETJy8vD/b29vDDeCgE88aeDhERGaFMLEU8jiA3N1fnrkJTqvieGOobDoVCVa+xysqKcTZhVYPO92nHDBgRERFJBG35Ud8xqGYMwIiIiKhSI5QgmyPeBUlEREQkM2bAiIiIqFKVjVTrNQbViAEYERERSUz5KCKqHkuQRERERDJjBoyIiIgqcRG+LBiAERERUSURQH23kWD8VSsGYERERCThGjB5cA0YERERkcyYASMiIqJKIkywBswkM2nSGIARERFRJS7ClwVLkEREREQyYwaMiIiIKmkBCCYYg2rEAIyIiIgkvAtSHixBEhEREcmMGTAiIiKqxEX4smAARkRERJUYgMmCJUgiIiIimTEDRkRERJWYAZMFAzAiIiKqxG0oZMEAjIiIiCTchkIeXANGREREJDNmwIiIiKgS14DJggEYERERVdKKgFDPAErLAKw2LEESERERyYwZMCIiIqrEEqQsGIARERFRFSYIwMAArDYsQRIRERHJjBkwIiIiqsQSpCwYgBEREVElrYh6lxB5F2StWIIkIiIikhkzYERERFRJ1JYf9R2DasQAjIiIiCpxDZgsGIARERFRJa4BkwXXgBERERHJjBkwIiIiqsQSpCwYgBEREVElESYIwEwykyaNJUgiIiIimTEDRkRERJVYgpQFAzAiIiKqpNUCqOc+XlruA1YbliCJiIiIZMYMGBEREVViCVIWDMCIiIioEgMwWbAESURERCQzZsCIiIioEh9FJAsGYERERCQRRS1EsX53Mdb3+uaAARgRERFVEsX6Z7C4BqxWXANGREREJDNmwIiIiKiSaII1YMyA1YoBGBEREVXSagGhnmu4uAasVixBEhEREcmMGTAiIiKqxBKkLBiAERERkUTUaiHWswTJbShqxxIkERERkcyYASMiIqJKLEHKggEYERERVdKKgMAArKGxBElEREQkM2bAiIiIqJIoAqjvPmDMgNWGARgRERFJRK0IsZ4lSJEBWK0YgBEREVElUYv6Z8C4DUVtuAaMiIiISGbMgBEREZGEJUh5MAAjIiKiSixByoIBWDNR8a+RMpTWe389IiKSVxlKAciTWTLF90TFfKl6DMCaifz8fADAf/FlI8+EiIge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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "pipe.fit(X_train, y_train) # We already did this above, but adding it here for clarity\n", "\n", "ConfusionMatrixDisplay.from_estimator(\n", " pipe,\n", " X_valid,\n", " y_valid,\n", " display_labels=[\"Non fraud\", \"Fraud\"],\n", ");" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Looking at the plotting arguments:**\n", "\n", "- Similar to other `sklearn` functions, we pass the model/pipeline followed by the feature table and then the target values. \n", "- `display_labels` will show more descriptive labels. without this argument, it would simply show the classes we have in the data (`0`, `1`). \n", "- `values_format` will determine how the numbers are displayed. Specifying `d` avoids scientific notation for large numbers (not needed in this example). \n", "- `cmap` is the colour argument! The default is `viridis` but other values such as `Blues`, `Purples`, `RdPu` or other colour schemes from [here](https://matplotlib.org/stable/tutorials/colors/colormaps.html) are also possible. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Accuracy is only part of the story...\n", "\n", "We have been using `.score` to assess our models, which returns accuracy by default\n", "for classification models.\n", "We just saw that accuracy can be misleading when we have a class imbalance,\n", "so maybe there are other metrics that are more suitable in these cases?\n", "\n", "*Note that the metrics we are going to discuss will only help us assess our model assessment.\n", "Further into this lecture we'll talk about a few ways to address the class imbalance problem as well.*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To understand the metrics we are going to talk about next,\n", "we will need our values for the four different quadrants in the confusion matrix.\n", "We are going to split up the values in the matrix into four separate variables\n", "\n", "- `TN` for the True Negatives\n", "- `FP` for the False Positives\n", "- `FN` for the False Negatives\n", "- `TP` for the True Positives " ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "TN, FP, FN, TP = cm.flatten()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now let's look at the first metric, \"Recall\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Recall \n", "\n", "*\"Among all positive examples, how many did the model identify?\"*\n", "\n", "Recall is the ability of the classifier to find all the positive samples.\n", "You can think of this as \"What was the model's recall/hit rate out of **all the truly positive observations**\".\n", "The denominator in the equation below is all the truly positive values.\n", "\n", "$$ \\text{recall} = \\frac{\\text{Number of correctly identified positives}}{\\text{Total number of true positives}} = \\frac{TP}{TP + FN} $$\n", "\n", "In binary classification,\n", "recall is sometimes used more generally for either the positive or negative class:\n", "recall of the positive class is also known as \"sensitivity\"\n", "and recall of the negative class is \"specificity\",\n", "which are terms you might recognize from your statistics classes.\n", "In machine learning we almost always refer to \"sensitivity\" when we just say \"recall\".\n", "\n", "Since Fraud is our positive label, we see the correctly identified labels in the bottom right quadrant and the ones that we missed in the bottom left quadrant. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "![image.png](imgs/cm-recall.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "So here we take our true positives and we divide by all the positive labels in our validation set (the predictions the model incorrectly labelled as negative (the false negatives) as well as those correctly labelled as positive). " ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "True Positives: 80\n", "False Negatives: 25\n" ] } ], "source": [ "print('True Positives:', TP)\n", "print('False Negatives:', FN)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.762" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "recall = TP / (TP + FN)\n", "recall.round(3)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Precision\n", "\n", "*\"Among the positive examples you identified, how many were actually positive?\"*\n", "\n", "Precision is the ability of the classifier to avoid putting a positive label on a negative observation.\n", "You can think of this as \"How precise are the model's **predictions**?\".\n", "The denominator in the equation below is all the predicted positive values.\n", "\n", "$$ \\text{precision} = \\frac{\\text{Number of correctly identified positives}}{\\text{Total number of predicted positives}} = \\frac{TP}{TP + FP} $$\n", "\n", "\n", "With Fraud as our positive label, we see the correctly identified Fraudulent cases in the bottom right quadrant and the labels we incorrectly labelled as Frauds in the top right. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "![image.png](imgs/cm-precision.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "So here we take our true positives and we divide by all the positive labels that our model predicted. " ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "True Positives: 80\n", "False Positives: 6\n" ] } ], "source": [ "print('True Positives:', TP)\n", "print('False Positives:', FP)" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.93" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "precision = TP / (TP + FP)\n", "precision.round(3)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Of course, we'd like to have both high precision and recall but the balance depends on our domain,\n", "and which type of error we think is more important to avoid.\n", "For credit card fraud detection,\n", "recall is really important (catching frauds),\n", "precision is less important (reducing false positives)\n", "since there likely will be a manual review process in place to look closer at the predicted frauds\n", "and prevent false accusations\n", "(whereas there likely are too many observations to have a manual review process for all the potentially missed frauds)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Visualization of precision and recall\n", "\n", "In case you find the concepts above hard to follow or remember,\n", "I am including this schematic as a visual aid\n", "\n", "![image.png](imgs/recall-precision-schematic.png)\n", "\n", "Source: https://en.wikipedia.org/wiki/Precision_and_recall" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### f1 score\n", "\n", "Sometimes we need a single score to maximize, e.g., when doing hyperparameter tuning via RandomizedSearchCV.\n", "Accuracy is often a not the ideal choice,\n", "and we might care about both the precision and recall.\n", "One way of combining these two into a single score is to average them.\n", "However,\n", "in machine learning,\n", "we usually use a different way of averaging these metrics together,\n", "which is called the \"harmonic mean\".\n", "The advantage of this is that it penalizes the model more for performing poorly in either of the precision or recall,\n", "whether if we just took the common arithmetic mean,\n", "the model could compensate e.g. for a low recall with a high precision and still get a high overall score.\n", "\n", "The harmonic mean of the precision and recall is called the `f1` score:\n", "\n", "$$ \\text{f1} = 2 * \\frac{\\text{precision} * \\text{recall}}{\\text{precision} + \\text{recall}} $$" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Precision: 0.9302\n", "Recall: 0.7619\n" ] } ], "source": [ "print('Precision:', precision.round(4))\n", "print('Recall:', recall.round(4))" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.838" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "f1_score = (2 * precision * recall) / (precision + recall)\n", "f1_score.round(3)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We could calculate all these evaluation metrics by hand\n", "using the formulas we have covered so far: " ] }, { "cell_type": "code", "execution_count": 21, "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", "
accuracyprecisionrecallf1 score
00.9987920.9302330.7619050.837696
\n", "
" ], "text/plain": [ " accuracy precision recall f1 score\n", "0 0.998792 0.930233 0.761905 0.837696" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data = {}\n", "data[\"accuracy\"] = [(TP + TN) / (TN + FP + FN + TP)]\n", "data[\"precision\"] = [ TP / (TP + FP)] \n", "data[\"recall\"] = [TP / (TP + FN)] \n", "data[\"f1 score\"] = [(2 * precision * recall) / (precision + recall)] \n", "\n", "measures_df = pd.DataFrame(data)\n", "measures_df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "... or we can use `scikit-learn` which has functions for these metrics.\n", "\n", "Here we are importing `accuracy_score`, `precision_score`, `recall_score`, `f1_score` from `sklearn.metrics`" ] }, { "cell_type": "code", "execution_count": 22, "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", "
accuracyprecisionrecallf1 score
by-hand0.9987920.9302330.7619050.837696
sklearn0.9987920.9302330.7619050.837696
\n", "
" ], "text/plain": [ " accuracy precision recall f1 score\n", "by-hand 0.998792 0.930233 0.761905 0.837696\n", "sklearn 0.998792 0.930233 0.761905 0.837696" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score\n", "\n", "\n", "pred_cv = pipe.predict(X_valid) \n", "\n", "data[\"accuracy\"].append(accuracy_score(y_valid, pred_cv))\n", "data[\"precision\"].append(precision_score(y_valid, pred_cv))\n", "data[\"recall\"].append(recall_score(y_valid, pred_cv))\n", "data[\"f1 score\"].append(f1_score(y_valid, pred_cv))\n", "\n", "pd.DataFrame(data, index=['by-hand', 'sklearn'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And you can see the scores match. \n", "\n", "We can even go one step further and \"observe\" the scores using a *Classification report* " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Classification report \n", "\n", "Similar to how a confusion matrix shows the False and True negative and positive labels, a classification report shows us an assortment of metrics, however, we can't flatten or obtain the results from it and only see what is printed as the output. \n", "\n", "We can import `classification_report` from `sklearn.metrics`" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "from sklearn.metrics import classification_report" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In our function, we specify the true labels, followed by the predictions our model made. \n", "\n", "The argument `target_names`, gives more descriptive labels similar to what `display_labels` did when plotting the confusion matrix. " ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " precision recall f1-score support\n", "\n", " non fraud 1.00 1.00 1.00 25547\n", " Fraud 0.93 0.76 0.84 105\n", "\n", " accuracy 1.00 25652\n", " macro avg 0.96 0.88 0.92 25652\n", "weighted avg 1.00 1.00 1.00 25652\n", "\n" ] } ], "source": [ "print(\n", " classification_report(\n", " y_valid,\n", " pipe.predict(X_valid),\n", " target_names=[\"non fraud\", \"Fraud\"]\n", " )\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that what you consider \"positive\" (Fraud in our case) is important when calculating precision, recall, and f1-score. \n", "If you flip what is considered positive or negative, we'll end up with different True Positive, False Positive, True Negatives and False Negatives, and hence different precision, recall, and f1-scores. \n", "The `support` column just shows the number of examples in each class. \n", "\n", "You might be wondering about the two lines at the end of this report,\n", "so let's cover that next." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Macro average vs weighted average\n", "\n", "These are the average for the positive and negative class in each of the metrics.\n", "\n", "- **Macro average** gives equal importance to all classes irrespective of the number of observations (support) in each class.\n", "- **Weighted average** weighs the average by the number of observations (support) in each class.\n", "\n", "Which one is relevant, depends upon whether you think each class should have the same weight or each sample should have the same weight. \n", "These metrics are often useful when predicting multiple classes which we will briefly discuss later on. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In addition to this lecture, my wonderful colleague [Varada Kolhatkar](https://kvarada.github.io/) has made a cheat sheet for these metrics available in a larger size [here](https://raw.githubusercontent.com/UBC-MDS/introduction-machine-learning/master/static/module7/evaluation-metrics.png)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\"404" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Imbalanced datasets\n", "\n", "A class imbalance typically refers to having many more examples of one class than another in one's training set.\n", "We've seen this in our fraud dataset where our `class` target column had many more non-fraud than fraud examples. \n", "Real-world data is often imbalanced and can be seen in scenarios such as:\n", "\n", "- Ad clicking data (Only around ~0.01% of ads are clicked.)\n", "- Spam classification datasets.\n" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Class\n", "0 0.995856\n", "1 0.004144\n", "Name: proportion, dtype: float64" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y_train.value_counts('Class')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Addressing class imbalance\n", "\n", "A very important question to ask yourself: ***\"Why do I have a class imbalance?\"***\n", "\n", "- Is it because of my data collection methods?\n", " - If it's the data collection, then that means the you need to rethink how you have collected the data and if you can recollect it to balance the classes (note: it might be dangerous to go out and just collect new observations of the least common class since these would be collected after the original data and if the data changed over time, these newly collected observations will be different than the old one not because of their class, but because of the date they were collected.\n", "- Is it because one class is much rarer than the other?\n", " - If it's because one is rarer than the other in the true data distribution, you need to think about which type of error is more important to the stakeholders and prioritize how you train the model and how you assess its performance." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Handling imbalance\n", "\n", "Can we change the model itself so that it considers the errors that are important to us?\n", "\n", "There are two common approaches to this: \n", "\n", "1. **Changing the training procedure** \n", "\n", "2. **Changing the data (not in this course)**\n", " - Undersampling\n", " - Oversampling \n", " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Changing the training procedure: `class_weight`\n", "\n", "If you look for example, in the [documentation for the SVM classifier](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html), or [Logistic Regression](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html?highlight=logistic%20regression#sklearn.linear_model.LogisticRegression) we see `class_weight` as a parameter.\n", "\n", "\"404\n", "\n", "How can this help use work with class imbalances?\n", "\n", "The default `class_weight` is 1 for all classes;\n", "which means that all classes are equally important.\n", "By setting the class weight to another value,\n", "we can say that errors on one class are more important than errors on another class,\n", "and when we perform the final computation of the error score,\n", "this class's errors will have more weight and contribute more to the final error score.\n", "\n", "Let's see an example." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First, let's build a model where we keep the class_weights as the default. " ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [], "source": [ "lr_default= LogisticRegression(random_state=12, max_iter=1000)\n", "lr_default.fit(X_train,y_train);" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "ConfusionMatrixDisplay.from_estimator(\n", " lr_default, X_valid, y_valid,\n", " display_labels=[\"Non fraud\", \"Fraud\"],\n", ");" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now let's rebuild our pipeline but using the `class_weight` argument and setting it as `class_weight={1:100}`. \n", "This is equivalent to saying \"repeat every positive example 100x in the training set\",\n", "but repeating data would slow down the code, whereas this doesn't\n", "since it just weights the error on the second class 100x more than the first class.\n", "In the context of our data, we are saying that a false negative is 100x more problematic than a false positive. " ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [], "source": [ "lr_100 = LogisticRegression(random_state=12, max_iter=1000, class_weight={1:100})\n", "lr_100.fit(X_train,y_train);" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "image/png": "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2bNSmaOjI0pKSlBUVKRX/86dOzpZLEdHxxqzV3fu3AFQlfFydHQEgFrr1pQZq4vBAVhRURECAwMxatQorFmzBnFxccjJyQEArF27FqtXrza0SSIiInpUiCY65OyyKMLMrCqkqZz7denSJZ16mZmZyMnJkYYwK+v+sV71ayvrVv5ZW93qbTaEwQFYREQEvvvuO+zfvx95eXkQq+UpR4wYgePHjxvaJBERET0ijN2E1RSrKA2xb98+FBUV6WxNERQUBJVKhfj4eJ268fHxEARBZ6+xkJAQXLlyRWe7ifLycuzevRv9+/eHm5sbAMDd3R39+vXD7t27odFopLpnz55Famoqxo8fb1C/DZ4D9sUXX2DZsmUICQnR6QAAtGvXThqOJCIiImqoI0eO4P79+ygoKAAA/PTTT9i3bx8A4LnnnkN2djYmTZqEl156CR06dIAgCDh9+jQ+/PBDdO3aFdOmTZPacnBwQGRkJJYsWQIHBweMGDECycnJiI6OxrRp06QtKICKrbY2bdqEiRMn4r333oOzszM2b96M1NRUvaTS6tWrERgYiIkTJ2LmzJnIyspCeHg4fH199ba8qI/BAVh2dja6du1a4zkzMzMUFxcb2iQRERE9SprgWY4zZsxAenq69PqLL77AF198AQC4du0a7O3t4eLigvXr1+P27dvQaDTw8PDA22+/jcWLF+uteIyIiICtrS02bdqEtWvXQq1WIzw8HBERETr1lEolEhMTERYWhtmzZ6OoqAg9e/bEkSNHMHjwYJ26AQEB+OqrrxAVFYUxY8bAysoKwcHBeP/99w2e32ZwAObu7o5Lly5hyJAheucuXrwILy8vQ5skIiKiR0RTbMQKNGzLqwMHDhjU5ttvv42333673nouLi74+9//3qA2AwMDERgYaFA/amLwHLDx48djxYoV+M9//iOVCYKA9PR0fPDBB5g4caLRnSIiIqIm8hhOwn8cGRyALV26FG5ubujXrx/69OkDQRAQGhoKX19fODs7Izw8vDH6SURERNRsGByA2dra4syZM1i2bBlsbGzQvn17WFlZYdGiRfjXv/4FS0vLxugnERERyUIw0UF1eaid8C0tLREeHs5sFxERUXNjiiFEDkHW66EfRVRSUoIffvgBubm5cHR0hJ+fH1QqlSn7RkRERNQsPdSjiNavXw9XV1cMGjQIY8eOxaBBg6BW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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "ConfusionMatrixDisplay.from_estimator(\n", " lr_100,\n", " X_valid,\n", " y_valid,\n", " display_labels=[\"Non fraud\", \"Fraud\"],\n", ");" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Notice that we now have reduced false negatives and predicted more true positives this time.\n", "But, as a consequence, we pay a price since now we are also increasing false positives. \n", "\n", "We can also set `class_weight=\"balanced\"`.\n", "This sets the weights automatically so that the classes are \"equal\",\n", "by automatically adjust weights inversely proportional to class frequencies in the input data.\n", "So if there is 10x less of class 2 in the data,\n", "its errors will be weighted 10x in the computation of the final score." ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [], "source": [ "lr_balanced = LogisticRegression(random_state=12, max_iter=1000, class_weight=\"balanced\")\n", "lr_balanced.fit(X_train,y_train);" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "data": { "image/png": "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LxToc+yIry6nVNITdze17v10r8aScrekeLBJCyV86+vKywd0Z5M0HT/qW2Ct13cH/CVJ4Q3zn+71D8jSgr98rbDaGZo2vKkSjlQu9X2O/He8WvV4kORGZ/73KUhXDpMArEQ3VAlSyg2kFi1apN69e+vNN98scD44OFhZWVk6e/asUxBmmqZOnz6t9u3b2zbPX1q7dq2ioqL0pz/9yak9NdW5fOTjk/sX47UlQim3XHqtvODx9OmCi68La7uWw+FwWguHgt75Y27wNXTsaT064UyB871/c14tuxTcD2zirxuoS7+LemDEOUVEFvww2bwuSN4+OeoxuGBQJeUGX689nxt8PffSCfV9uPCMwEOjz6j3Q87nLiR6auGoCN3/u3Pq9quLqlmv5KfPgOIkJXopolGafPyylZ6WH4Q1uSv3d//c6dz/j1jBV510TRvWTN9/41+m+7TqlJtJO3WMPxpudHlZLFfHQPFuuABMknr16qXevXtrzpw5BUpnPXv21EsvvaS1a9dq3LhxVvuHH36oy5cvq2fPnnZP12IYRoGg58CBA9q9e7fT64iIiLDO9e3b12r/29/+5nRtZGSkatSooXXr1mn8+PFW0Hfs2DHt2rWr2DVgKN765dW0+uUaatc9RR16pujbfzk/xdWkbZrC6lxVWJ3Cd6YPDstUq0KCs6TTnvp8e4C6/eqCqlQtvD64bHotbV4XrL4PJ6le43Sne3t5m2rQIjeoq9swQ3UbOgdYp094S5JqhGcUen+grDbE1tTMPx3WgtivFbeqplIueKlx61Q99NRPOvYfX33+j6rydmRr3spvVL/pZf15fj1V8jTVuHX+H5bJ572sPcT6P3xazdul6It/VtXZnx3y8ctW83YpGvjYaX39ryravTWool4qcEO5IQMwSVq0aJHatm2rxMRENWuWv3Ny79691bdvX02aNEkpKSm6++67racg77rrLj322GMVNucBAwZo7ty5mjVrlrp166YjR45ozpw5qlevntM+YWFhYerVq5cWLlyoO+64Q+Hh4YqPj9dHH33kNJ6Hh4fmzp2rESNGKDo6WiNHjtTFixcVExNTYgkSxdv7aW7p8PPtAfp8e0CB81tOfXld437yQZBysg31G1r0Ope8e295L1hb3nMukVevfVWr931zXfcGrsfebUGa8rtmeuipk/rD9B/lVyVb53721qb3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8847zXbt2pk5OTmmaZpmt27dzGbNmln9N2/ebEoyX3rpJadx3n//fVOS+eabb1pt4eHhpo+Pj3ns2DGr7cqVK2ZQUJD51FNPlTi38PBw8/7773dq2759uynJvPfee0u8Pisry8zMzDR79uxpRkdHFxhj+/btTv1//PFHU5K5atUq0zRNMzs726xZs6bZpk0b6/0wTdNMSEgwvby8zPDw8BLngFtH3n8rhR2ffvopv5dABeDPDdwSvL29NW/ePH3++ef64IMPCu2zbds2SblPW11ryJAhqly5suLj453aW7durbp161o/+/j4qFGjRoU+cVkWDz74YKHty5cvV5s2beTj4yNPT095eXkpPj5e3377bZnvceTIEZ06dUpDhw6VYRhWe3h4uLp06XLdc8fNbfXq1dq/f7/TkbfOi99LwF4EYLhlPPzww2rTpo2mTZumzMzMAueTkpLk6empatWqObUbhqGwsDAlJSU5tQcHBxcYw+Fw6MqVKy7Ns7AnIl999VU9/fTT6tixoz788EPt2bNH+/fvV79+/a7rfnmvJSwsrMC5wtpwe2jSpInatWvndOTh9xKwF2vAcMswDEOLFi1S79699eabbxY4HxwcrKysLJ09e9YpCDNNU6dPn1b79u1tm+cvrV27VlFRUfrTn/7k1J6amur0s4+Pj6TcrTeude7cOaef84LH06dPF7hXYW0Av5eAvciA4ZbSq1cv9e7dW3PmzNGlS5eczvXs2VNS7ofKtT788ENdvnzZOl8RDMNwegBAkg4cOKDdu3c7teVtVHngwAGn9r/97W9OP0dGRqpGjRpat26dTNO02o8dO6Zdu3a5cea4lfF7CZQfMmC45SxatEht27ZVYmKimjVrZrX37t1bffv21aRJk5SSkqK7777begryrrvu0mOPPVZhcx4wYIDmzp2rWbNmqVu3bjpy5IjmzJmjevXqOT21FhYWpl69emnhwoW64447FB4ervj4eH300UdO43l4eGju3LkaMWKEoqOjNXLkSF28eFExMTGUelBq/F4C5YcMGG45d911lx555JEC7YZhaMOGDRo/frxWrVql++67T4sXL9Zjjz2mbdu2FfhL307Tpk3ThAkTtGLFCt1///16++23tXz5ct1zzz0F+q5Zs0Y9e/bUpEmTNGTIEJ08eVLr1q0r0O/JJ5/U22+/rW+++UaDBw/WnDlzNHXq1CK36QB+id9LoPwY5rV5YAAAAJQ7MmAAAAA2IwADAACwGQEYAACAzQjAAAAAbEYABgAAYDMCMAAAAJsRgAEAANiMAAwAAMBmBGDALSg2NlaGYViHp6enateureHDh+vkyZO2zCEiIkLDhg2zft6xY4cMw9COHTvKNM6uXbsUExOjixcvunV+kjRs2DDrewyLExUVpaioqOu6R0REhAYMGHBd1xY35rXvLYCbDwEYcAtbtWqVdu/erU8//VQjR47UunXr1LVrV12+fNn2ubRp00a7d+9WmzZtynTdrl27NHv27HIJwACgovBl3MAtrHnz5mrXrp0kqXv37srOztbcuXO1YcMG/fa3vy30mrS0NPn5+bl9LgEBAerUqZPbxwWAmxEZMOA2khcAHTt2TFJuCc7f318HDx5Unz59VKVKFfXs2VOSdPXqVc2bN0+NGzeWw+FQtWrVNHz4cJ09e9ZpzMzMTE2cOFFhYWHy8/PTPffco3379hW4d1ElyL1792rgwIEKDg6Wj4+P6tevr7Fjx0qSYmJi9MILL0iS6tWrZ5VUrx3j/fffV+fOnVW5cmX5+/urb9+++ve//13g/rGxsYqMjJTD4VCTJk20evXq63oP88yePVsdO3ZUUFCQAgIC1KZNG61YsUJFfb1uXFycWrZsKR8fH9155516/fXXC/RJSUnR888/r3r16snb21u1atXS2LFjKyRjCaB8kQEDbiNHjx6VJFWrVs1qu3r1qn71q1/pqaee0uTJk5WVlaWcnBwNGjRIn332mSZOnKguXbro2LFjmjVrlqKiovT555/L19dXkjRy5EitXr1azz//vHr37q1Dhw5p8ODBSk1NLXE+W7Zs0cCBA9WkSRO9+uqrqlu3rhISEvTJJ59IkkaMGKHz58/rjTfe0EcffaQaNWpIkpo2bSpJWrBggaZPn67hw4dr+vTpunr1ql5++WV17dpV+/bts/rFxsZq+PDhGjRokF555RUlJycrJiZGGRkZ8vC4vr9DExIS9NRTT6lu3bqSpD179ujZZ5/VyZMnNXPmTKe+X375pcaOHauYmBiFhYXpnXfe0ZgxY3T16lU9//zzknIzj926ddNPP/2kqVOnqmXLlvr66681c+ZMHTx4UFu3bpVhGNc1VwA3IBPALWfVqlWmJHPPnj1mZmammZqaam7cuNGsVq2aWaVKFfP06dOmaZrm448/bkoyV65c6XT9unXrTEnmhx9+6NS+f/9+U5K5bNky0zRN89tvvzUlmePGjXPq984775iSzMcff9xq2759uynJ3L59u9VWv359s379+uaVK1eKfC0vv/yyKcn88ccfndqPHz9uenp6ms8++6xTe2pqqhkWFmY+9NBDpmmaZnZ2tlmzZk2zTZs2Zk5OjtUvISHB9PLyMsPDw4u8d55u3bqZ3bp1K/J8dna2mZmZac6ZM8cMDg52uk94eLhpGIb55ZdfOl3Tu3dvMyAgwLx8+bJpmqa5cOFC08PDw9y/f79Tv/Xr15uSzL///e9OY1773gK4+VCCBG5hnTp1kpeXl6pUqaIBAwYoLCxMmzZtUvXq1Z36Pfjgg04/b9y4UVWrVtXAgQOVlZVlHa1bt1ZYWJhVAty+fbskFVhP9tBDD8nTs/gE+3fffafvv/9eTz75pHx8fMr82rZs2aKsrCz97ne/c5qjj4+PunXrZs3xyJEjOnXqlIYOHeqUQQoPD1eXLl3KfN8827ZtU69evRQYGKhKlSrJy8tLM2fOVFJSkhITE536NmvWTK1atXJqGzp0qFJSUvTFF19Iyn3PmzdvrtatWzu9nr59+17X06MAbmyUIIFb2OrVq9WkSRN5enqqevXqVgnvWn5+fgoICHBqO3PmjC5evChvb+9Cxz137pwkKSkpSZIUFhbmdN7T01PBwcHFzi1vLVnt2rVL92J+4cyZM5Kk9u3bF3o+r7RY1Bzz2hISEsp873379qlPnz6KiorSW2+9pdq1a8vb21sbNmzQ/PnzdeXKlQL3Keze187vzJkzOnr0qLy8vAq9Z957DuDWQAAG3MKaNGliPQVZlMLWFYWEhCg4OFibN28u9JoqVapIkhVknT59WrVq1bLOZ2VlWYFFUfLWof3000/F9itKSEiIJGn9+vUKDw8vst+1c/ylwtpK47333pOXl5c2btzolL3bsGFDof2Lu3fe/EJCQuTr66uVK1cWOkbe6wVwayAAA1DAgAED9N577yk7O1sdO3Yssl/e5qTvvPOO2rZta7V/8MEHysrKKvYejRo1Uv369bVy5UqNHz9eDoej0H557b/MKvXt21eenp76/vvvC5RQrxUZGakaNWpo3bp1Gj9+vBVwHjt2TLt27VLNmjWLnWdh8ja3rVSpktV25coVrVmzptD+X3/9tb766iunMuS7776rKlWqWPuiDRgwQAsWLFBwcLDq1atX5jkBuLkQgAEo4OGHH9Y777yj++67T2PGjFGHDh3k5eWln376Sdu3b9egQYMUHR2tJk2a6NFHH9Vrr70mLy8v9erVS4cOHdLixYsLlDULs3TpUg0cOFCdOnXSuHHjVLduXR0/flxbtmzRO++8I0lq0aKFJGnJkiV6/PHH5eXlpcjISEVERGjOnDmaNm2afvjhB/Xr10933HGHzpw5o3379qly5cqaPXu2PDw8NHfuXI0YMULR0dEaOXKkLl68aD2ReD3uv/9+vfrqqxo6dKh+//vfKykpSYsXLy4yiKxZs6Z+9atfKSYmRjVq1NDatWv16aefatGiRdaea2PHjtWHH36oe++9V+PGjVPLli2Vk5Oj48eP65NPPtGECROKDYYB3GQq+ikAAO6X9xTkL5+o+6XHH3/crFy5cqHnMjMzzcWLF5utWrUyfXx8TH9/f7Nx48bmU089Zf7nP/+x+mVkZJgTJkwwQ0NDTR8fH7NTp07m7t27CzypV9hTkKZpmrt37zb79+9vBgYGmg6Hw6xfv36BpyqnTJli1qxZ0/Tw8CgwxoYNG8zu3bubAQEBpsPhMMPDw81f//rX5tatW53GePvtt82GDRua3t7eZqNGjcyVK1eajz/++HU/Bbly5UozMjLSdDgc5p133mkuXLjQXLFiRYEnNsPDw83777/fXL9+vdmsWTPT29vbjIiIMF999dUC97l06ZI5ffp0MzIy0vT29jYDAwPNFi1amOPGjbOeXM0bk6cggZubYZpF7BoIAACAcsE2FAAAADYjAAMAALAZARgAAIDNCMAAAABsRgAGAABgMwIwAAAAmxGAAQAA2IwADAAAwGYEYAAAADYjAAMAALAZARgAAIDN/j/iJUYIcD99BgAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "ConfusionMatrixDisplay.from_estimator(\n", " lr_balanced,\n", " X_valid,\n", " y_valid,\n", " display_labels=[\"Non fraud\", \"Fraud\"],\n", ");" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Again, we have reduced the number of false negatives and increased the number of true positives but we have many more false positives now!\n", "Overall, we can say that our weight adjustments are making the model more likely to make the prediction \"fraud\" on a sample." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Are we doing better with `class_weight=\"balanced\"`?\n", "\n", "Let's compare some metrics and find out. " ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.9988305005457664" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lr_default.score(X_valid, y_valid)" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.9676048651177296" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lr_balanced.score(X_valid, y_valid)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Changing the class weight will **generally reduce accuracy**.\n", "The original model was trying to maximize accuracy. Now you're telling it to do something different.\n", "But we know now that accuracy isn't the only metric that matters.\n", "Let's explain why this happens. \n", "\n", "Since there are so many more negative examples than positive ones, false-positives affect accuracy much more than false negatives.\n", "Thus, precision matters a lot more than recall in this accuracy calculation.\n", "So, the default method trades off a lot of recall for a bit of precision.\n", "We are paying a \"fee\" in precision for a greater recall value. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Let's Practice\n", "\n", "\"404\n", "\n", "Use the diagram above to answer the questions.\n", "\n", "1\\. How many examples did the model of this matrix correctly label as \"Guard\"? \n", "2\\. If **Forward** is the positive label, how many ***false-positive*** values are there? \n", "3\\. How many examples does the model incorrectly predict? \n", "4\\. What is the recall of the confusion matrix assuming that **Forward** is the positive label? \n", "5\\. What is the precision of the confusion matrix assuming that **Forward** is the positive label? \n", "6\\. What is the f1 score assuming that **Forward** is the positive label? \n", "\n", "\n", "**True or False:** \n", "\n", "7\\. In spam classification, false positives are often more damaging than false negatives (assume \"positive\" means the email is spam, \"negative\" means it's not). \n", "8\\. In medical diagnosis, high recall is often more important than high precision. \n", "9\\. The weighted average in the classification report gives equal importance to all classes. \n", "10\\. Setting `class_weight={1:100}` will make each example of the second class label be counted 100 times." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "```{admonition} Solutions!\n", ":class: dropdown\n", "\n", "1. 26\n", "2. 4\n", "3. 7\n", "4. $0.86 = 19/22$\n", "5. $0.83 = 19/23$\n", "6. $ 2 * \\frac{0.86 * 0.83}{0.86 + 0.83} = 0.84$\n", "7. True\n", "8. True\n", "9. False\n", "10. True\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Regression Metrics \n", "\n", "For this part, since we need to use data that corresponds to a regression problem, we are bringing back our [California housing dataset](https://www.kaggle.com/harrywang/housing). \n", "\n", "We want to predict the median house value for different locations." ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [], "source": [ "housing_df = pd.read_csv(\"data/housing.csv\")\n", "train_df, test_df = train_test_split(housing_df, test_size=0.1, random_state=123)\n", "\n", "\n", "train_df = train_df.assign(rooms_per_household = train_df[\"total_rooms\"]/train_df[\"households\"],\n", " bedrooms_per_household = train_df[\"total_bedrooms\"]/train_df[\"households\"],\n", " population_per_household = train_df[\"population\"]/train_df[\"households\"])\n", " \n", "test_df = test_df.assign(rooms_per_household = test_df[\"total_rooms\"]/test_df[\"households\"],\n", " bedrooms_per_household = test_df[\"total_bedrooms\"]/test_df[\"households\"],\n", " population_per_household = test_df[\"population\"]/test_df[\"households\"])\n", " \n", "train_df = train_df.drop(columns=['total_rooms', 'total_bedrooms', 'population']) \n", "test_df = test_df.drop(columns=['total_rooms', 'total_bedrooms', 'population']) " ] }, { "cell_type": "code", "execution_count": 28, "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", "
longitudelatitudehousing_median_agehouseholdsmedian_incomeocean_proximityrooms_per_householdbedrooms_per_householdpopulation_per_household
6051-117.7534.0422.0602.03.1250INLAND4.8970101.0564784.318937
20113-119.5737.9417.020.03.4861INLAND17.3000006.5000002.550000
14289-117.1332.7446.0708.02.6604NEAR OCEAN4.7387011.0847462.057910
13665-117.3134.0218.0285.05.2139INLAND5.7333330.9614043.154386
14471-117.2332.8818.01458.01.8580NEAR OCEAN3.8175581.0048014.323045
\n", "
" ], "text/plain": [ " longitude latitude housing_median_age households median_income \\\n", "6051 -117.75 34.04 22.0 602.0 3.1250 \n", "20113 -119.57 37.94 17.0 20.0 3.4861 \n", "14289 -117.13 32.74 46.0 708.0 2.6604 \n", "13665 -117.31 34.02 18.0 285.0 5.2139 \n", "14471 -117.23 32.88 18.0 1458.0 1.8580 \n", "\n", " ocean_proximity rooms_per_household bedrooms_per_household \\\n", "6051 INLAND 4.897010 1.056478 \n", "20113 INLAND 17.300000 6.500000 \n", "14289 NEAR OCEAN 4.738701 1.084746 \n", "13665 INLAND 5.733333 0.961404 \n", "14471 NEAR OCEAN 3.817558 1.004801 \n", "\n", " population_per_household \n", "6051 4.318937 \n", "20113 2.550000 \n", "14289 2.057910 \n", "13665 3.154386 \n", "14471 4.323045 " ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X_train = train_df.drop(columns=[\"median_house_value\"])\n", "y_train = train_df[\"median_house_value\"]\n", "X_test = test_df.drop(columns=[\"median_house_value\"])\n", "y_test = test_df[\"median_house_value\"]\n", "\n", "numeric_features = [ \"longitude\", \"latitude\",\n", " \"housing_median_age\",\n", " \"households\", \"median_income\",\n", " \"rooms_per_household\",\n", " \"bedrooms_per_household\",\n", " \"population_per_household\"]\n", " \n", "categorical_features = [\"ocean_proximity\"]\n", "\n", "X_train.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We are going to bring in our previous pipelines and fit our model. " ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [], "source": [ "from sklearn.pipeline import Pipeline\n", "from sklearn.impute import SimpleImputer\n", "from sklearn.preprocessing import OneHotEncoder\n", "from sklearn.compose import make_column_transformer\n", "from sklearn.neighbors import KNeighborsRegressor\n", "\n", "numeric_transformer = Pipeline(\n", " steps=[(\"imputer\", SimpleImputer(strategy=\"median\")), \n", " (\"scaler\", StandardScaler())]\n", ")\n", "\n", "categorical_transformer = Pipeline(\n", " steps=[(\"imputer\", SimpleImputer(strategy=\"constant\", fill_value=\"missing\")),\n", " (\"onehot\", OneHotEncoder(handle_unknown=\"ignore\"))]\n", ")\n", "\n", "preprocessor = make_column_transformer(\n", "(numeric_transformer, numeric_features),\n", " (categorical_transformer, categorical_features), \n", " remainder='passthrough')\n", "\n", "pipe = make_pipeline(preprocessor, KNeighborsRegressor())\n", "pipe.fit(X_train, y_train);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As you know, since we aren't doing classification anymore, so we can't just check for equality." ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [], "source": [ "predicted_y = pipe.predict(X_train) " ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([111740., 117380., 187700., ..., 271420., 265180., 60860.])" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "predicted_y" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([113600., 137500., 170100., ..., 286200., 412500., 59300.])" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y_train.values" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.01232773471145564" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(predicted_y == y_train).mean() # \"Accuracy\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The predicted values will rarely be exactly the same as the real ones.\n", "Instead, we need a score that reflects how right/wrong each prediction is or how close we are to the actual numeric value.\n", "\n", "We are going to discuss 4 different ones lightly but, if you want to see more regression metrics in detail, you can refer to the [sklearn documentation](https://scikit-learn.org/stable/modules/model_evaluation.html#regression-metrics). " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Mean squared error (MSE)\n", "\n", "Mean Squared Error is a common measure for error and it is the same as taking the residual sum of squares (RSS, which we saw in linear regression) and dividing it on the number of samples to get an average error per sample.\n", "\n", "$$MSE = \\frac{1}{\\text{total samples}} \\displaystyle\\sum_{i=1}^{\\text{total samples}} (\\text{true}_i - {\\text{predicted}_i})^2$$\n", "\n", "$$MSE = \\frac{1}{n} \\displaystyle\\sum_{i=1}^{n} (y_i - {f(x_i)})^2$$\n", "\n", "We calculate this by calculating the difference between the predicted and actual value, square it and sum all these values for every example in the data. \n", "The higher the MSE, the worse the model performs." ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2570054492.048064" ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ "((y_train - predicted_y)**2).mean()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Perfect predictions would have MSE = 0 (no error in any predictions)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can use `mean_squared_error` from `sklearn.metrics` again instead of calculating this ourselves. " ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [], "source": [ "from sklearn.metrics import mean_squared_error " ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2570054492.048064" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mean_squared_error(y_train, predicted_y)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### The disadvantages\n", "\n", "If we look at MSE value, it's huge.\n", "Having a mean error of 2.5 billion certainly sounds like a lot,\n", "but is it bad?\n", "How do we know how big a \"good\" error is?\n", "\n", "Unlike classification, in regression, our target has units. \n", "In this case, our target column is the median housing value which is in dollars. \n", "That means that the mean squared error is in dollars$^2$. \n", "This is a benefit in the sense that our error has units,\n", "however the units itself are not that helpful (what is a squared dollar?).\n", "Having problem-specific units can also make it hard to compare between models\n", "and develop an intuition for what is a good value\n", "since the score depends on the scale of the targets. \n", "If we were working in cents instead of dollars, our MSE would be 10,000 X (1002) higher!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Root mean squared error (RMSE)\n", "\n", "The MSE we had before was in $dollars^2$,\n", "so an intuitive way to make this more interpretable\n", "would be to take the square root of the value to get the units in dollars.\n", "This is a more relatable metric and it is called the root mean squared error, or RMSE. \n", "\n", "This is the square root of $MSE$.\n", "\n", "$$RMSE = \\sqrt{MSE}$$\n", "\n", "$$RMSE = \\sqrt{\\frac{1}{\\text{total samples}} \\displaystyle\\sum_{i=1}^{\\text{total samples}} (\\text{true}_i - {\\text{predicted}_i})^2}$$\n", "\n", "$$RMSE = \\sqrt{\\frac{1}{n} \\displaystyle\\sum_{i=1}^{n} (y_i - {f(x_i)})^2}$$\n" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2570054492.048064" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mean_squared_error(y_train, predicted_y)" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "50695.704867849156" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import numpy as np\n", "\n", "np.sqrt(mean_squared_error(y_train, predicted_y))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This now has the units in dollars. Instead of 2 billion dollars squared, our error measurement is around $50,000.\n", "This is interpretable for a single prediction,\n", "but how would it work to report an RMSE for an entire dataset?\n", "\n", "Let's plot the predicted vs the true housing prices here." ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "df = pd.DataFrame(y_train).assign(predicted = predicted_y).rename(columns = {'median_house_value': 'true'})\n", "df = pd.DataFrame(y_train).assign(predicted = predicted_y).rename(columns = {'median_house_value': 'true'})\n", "plt.scatter(y_train, predicted_y, alpha=0.3, s = 5)\n", "grid = np.linspace(y_train.min(), y_train.max(), 1000)\n", "plt.plot(grid, grid, '--k');\n", "plt.xticks(fontsize= 12);\n", "plt.yticks(fontsize= 12);\n", "plt.xlabel(\"true price\", fontsize=14);\n", "plt.ylabel(\"predicted price\", fontsize=14);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "When we plot our predictions versus the examples' actual value, we can see cases where our prediction is way off.\n", "Points under the line $y=x$ means we're under-predicting price, points over the line means we're over-predicting price.\n", "\n", "*Question: Is an RMSE of \\$30,000 acceptable?* \n", "\n", "- For a house worth \\$600k, it seems reasonable! That's a 5% error.\n", "- For a house worth \\$60k, that is terrible. It's a 50% error.\n", "\n", "RMSE is in absolute units and does not account for the original value of the prediction.\n", "So how can we adjust to this? \n", "\n", "...Enter **MAPE**!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### MAPE - Mean Absolute Percent Error (MAPE)\n", "\n", "Instead of computing the absolute error,\n", "we can calculate a percentage error for each example.\n", "Now the errors are both positive (predict too high) and negative (predict too low)." ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "6051 -1.637324\n", "20113 -14.632727\n", "14289 10.346855\n", "13665 6.713070\n", "14471 -10.965854\n", "Name: median_house_value, dtype: float64" ] }, "execution_count": 47, "metadata": {}, "output_type": "execute_result" } ], "source": [ "percent_errors = (predicted_y - y_train)/y_train * 100.\n", "percent_errors.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can look at the absolute percent error which now shows us how far off we were independent of direction. " ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "6051 1.637324\n", "20113 14.632727\n", "14289 10.346855\n", "13665 6.713070\n", "14471 10.965854\n", "Name: median_house_value, dtype: float64" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.abs(percent_errors).head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And like MSE, we can take the average over all the examples. " ] }, { "cell_type": "code", "execution_count": 49, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "18.192997502985218" ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.abs(percent_errors).mean()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is called **Mean Absolute Percent Error (MAPE)**.\n", "The value is quite interpretable. We can see that on average, we have around 18% error in our predicted median housing valuation.\n", "\n", "However,\n", "it is worth pointing out that MAPE also has drawbacks,\n", "most notably that it don't work well with non-positive values \n", "and that it is biased towards low forecasts,\n", "which makes it unsuitable for predictive models where large errors are expected\n", "(for more details, see https://www.ncbi.nlm.nih.gov/pmc/articles/PMC8279135/).\n", "MAPE is still commonly used because of its ease of interpretation\n", "and there there are variations of MAPE to asses these shortcoming,\n", "most notably symmetric MAPE (SMAPE)).\n", "\n", "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### $R^2$ (R squared)\n", "\n", "We've seen this before!\n", "This is the score that `sklearn` uses by default when you call `.score()` so we've already seen $R^2$ in our regression problems. \n", "You can read about it here but we are going to just give you the quick notes. \n", "\n", "Intuition: $R^2$ is the residual sum of squares normalized to the total sum of squares. In other words, it is the proportion of the variation in the target feature that the model is able to explain using the variation in the input features.\n", "\n", "- 1 = Perfect score, all the variation in the target variable can be explained by the model applied to the input features.\n", "- 0 = None of the variation in the target variable can be explained by the model applied to the input features. There is no predictive value in the model as we would achieve the same result by constantly predicting constantly predicting the mean of the data.\n", "- < 0 = The model is performing worse than constantly predicting the mean of the data.\n", "\n", "We can use the default scoring from `.score()` or we can calculate $R^2$ using `r2_score` from `sklearn.metrics`" ] }, { "cell_type": "code", "execution_count": 50, "metadata": {}, "outputs": [], "source": [ "from sklearn.metrics import r2_score" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$R^2$ is a great default to use for reporting the performance of regression models,\n", "and if you need something that is easier to interpret (such as a percentage)\n", "or an error with units,\n", "you can opt for one of the other metrics above\n", "(there are more notes on R2 versus MAPE in pubmed article I linked to in the MAPE section).\n", "\n", "Note that we can reverse the variables in the calculation of MSE but not R2." ] }, { "cell_type": "code", "execution_count": 51, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2570054492.048064\n", "2570054492.048064\n" ] } ], "source": [ "print(mean_squared_error(y_train, predicted_y))\n", "print(mean_squared_error(predicted_y, y_train))" ] }, { "cell_type": "code", "execution_count": 52, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.8059396097446094\n", "0.742915970464153\n" ] } ], "source": [ "print(r2_score(y_train, predicted_y))\n", "print(r2_score(predicted_y, y_train))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Let's Practice \n", "\n", "1\\. Which measurement will have units which are the square values of the target column units? \n", "2\\. For which of the following is it possible to have negative values? \n", "3\\. Which measurement is expressed as a percentage? \n", "4\\. Calculate the MSE from the values given below. \n", "\n", "\n", "|Observation | True Value | Predicted Value |\n", "|------------|------------|-----------------|\n", "|0 | 4 | 5 |\n", "|1 | 12 | 10 |\n", "|2 | 6 | 9 |\n", "|3 | 9 | 8 |\n", "|4 | 3 | 3 |\n", "\n", "\n", "**True or False:** \n", "\n", "5\\. We can still use recall and precision for regression problems but now we have other measurements we can use as well. \n", "6\\. A lower RMSE value indicates a better model. \n", "7\\. In regression problems, calculating $R^2$ using `r2_score()` and `.score()` (with default values) will produce the same results. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "```{admonition} Solutions!\n", ":class: dropdown\n", "\n", "1. $MSE$\n", "2. $R^2$\n", "3. $MAPE$\n", "4. 3\n", "5. False\n", "6. True\n", "7. True\n", "\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Passing Different Scoring Methods\n", "\n", "We now know about all these metrics; how do we implement them? \n", "We are lucky because it's relatively easy and can be applied to both classification and regression problems. \n", "\n", "Let's start with regression and our regression measurements. \n", "This means bringing back our California housing dataset." ] }, { "cell_type": "code", "execution_count": 53, "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", "
longitudelatitudehousing_median_agehouseholdsmedian_incomeocean_proximityrooms_per_householdbedrooms_per_householdpopulation_per_household
6051-117.7534.0422.0602.03.1250INLAND4.8970101.0564784.318937
20113-119.5737.9417.020.03.4861INLAND17.3000006.5000002.550000
14289-117.1332.7446.0708.02.6604NEAR OCEAN4.7387011.0847462.057910
13665-117.3134.0218.0285.05.2139INLAND5.7333330.9614043.154386
14471-117.2332.8818.01458.01.8580NEAR OCEAN3.8175581.0048014.323045
\n", "
" ], "text/plain": [ " longitude latitude housing_median_age households median_income \\\n", "6051 -117.75 34.04 22.0 602.0 3.1250 \n", "20113 -119.57 37.94 17.0 20.0 3.4861 \n", "14289 -117.13 32.74 46.0 708.0 2.6604 \n", "13665 -117.31 34.02 18.0 285.0 5.2139 \n", "14471 -117.23 32.88 18.0 1458.0 1.8580 \n", "\n", " ocean_proximity rooms_per_household bedrooms_per_household \\\n", "6051 INLAND 4.897010 1.056478 \n", "20113 INLAND 17.300000 6.500000 \n", "14289 NEAR OCEAN 4.738701 1.084746 \n", "13665 INLAND 5.733333 0.961404 \n", "14471 NEAR OCEAN 3.817558 1.004801 \n", "\n", " population_per_household \n", "6051 4.318937 \n", "20113 2.550000 \n", "14289 2.057910 \n", "13665 3.154386 \n", "14471 4.323045 " ] }, "execution_count": 53, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X_train.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And our pipelines. \n", "\n", "This time we are using $k$-nn." ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [], "source": [ "numeric_transformer = Pipeline(\n", " steps=[(\"imputer\", SimpleImputer(strategy=\"median\")), \n", " (\"scaler\", StandardScaler())]\n", ")\n", "\n", "categorical_transformer = Pipeline(\n", " steps=[(\"imputer\", SimpleImputer(strategy=\"constant\", fill_value=\"missing\")),\n", " (\"onehot\", OneHotEncoder(handle_unknown=\"ignore\"))]\n", ")\n", "\n", "preprocessor = make_column_transformer(\n", "(numeric_transformer, numeric_features),\n", " (categorical_transformer, categorical_features), \n", " remainder='passthrough')\n", "\n", "pipe_regression = make_pipeline(preprocessor, KNeighborsRegressor())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Cross-validation\n", "\n", "Normally after building our pipelines, we would now either do cross-validation or hyperparameter tuning but let's start with the `cross_validate()` function. \n", "\n", "All the possible scoring metrics that this argument accepts are available [here in the sklearn documentation](https://scikit-learn.org/stable/modules/model_evaluation.html#scoring-parameter). \n", "Directly from the docs:\n", "\n", "> All scorer objects follow the convention that higher return values are better than lower return values. Thus metrics which measure the distance between the model and the data, like metrics.mean_squared_error, are available as neg_mean_squared_error which return the negated value of the metric.\n", "\n", "So if we wanted the RMSE measure, we would specify `neg_mean_squared_error` and the negated value of the metric will be returned in our dataframe. " ] }, { "cell_type": "code", "execution_count": 38, "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", "
fit_timescore_timetest_score
00.0378760.2236620.695818
10.0282380.2034750.707483
20.0291480.2110910.713788
30.0283590.2186180.686938
40.0289850.1771360.724608
\n", "
" ], "text/plain": [ " fit_time score_time test_score\n", "0 0.037876 0.223662 0.695818\n", "1 0.028238 0.203475 0.707483\n", "2 0.029148 0.211091 0.713788\n", "3 0.028359 0.218618 0.686938\n", "4 0.028985 0.177136 0.724608" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd.DataFrame(\n", " cross_validate(\n", " pipe_regression,\n", " X_train,\n", " y_train, \n", " )\n", ")" ] }, { "cell_type": "code", "execution_count": 39, "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", "
fit_timescore_timetest_score
00.0375140.225316-62462.584290
10.0281590.202306-63437.715015
20.0277390.209377-62613.202523
30.0283250.214590-64204.295214
40.0278730.177630-59217.838633
\n", "
" ], "text/plain": [ " fit_time score_time test_score\n", "0 0.037514 0.225316 -62462.584290\n", "1 0.028159 0.202306 -63437.715015\n", "2 0.027739 0.209377 -62613.202523\n", "3 0.028325 0.214590 -64204.295214\n", "4 0.027873 0.177630 -59217.838633" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd.DataFrame(\n", " cross_validate(\n", " pipe_regression,\n", " X_train,\n", " y_train, \n", " scoring = 'neg_root_mean_squared_error'\n", " )\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now our cross-validation returns percentages! \n", "\n", "We can also return multiple scoring measures together by making a dictionary and then specifying the dictionary in the `scoring` argument. " ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [], "source": [ "scoring={\n", " \"neg_mse\": \"neg_mean_squared_error\", \n", " \"neg_rmse\": \"neg_root_mean_squared_error\", \n", " \"mape_score\": 'neg_mean_absolute_percentage_error',\n", " \"r2\": \"r2\",\n", "}" ] }, { "cell_type": "code", "execution_count": 41, "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", "
fit_timescore_timetest_neg_msetest_neg_rmsetest_mape_scoretest_r2
00.0366420.220047-3.901574e+09-62462.584290-0.2270970.695818
10.0277090.204257-4.024344e+09-63437.715015-0.2275460.707483
20.0284230.214962-3.920413e+09-62613.202523-0.2223690.713788
30.0274700.213464-4.122192e+09-64204.295214-0.2301670.686938
40.0279810.179939-3.506752e+09-59217.838633-0.2103350.724608
\n", "
" ], "text/plain": [ " fit_time score_time test_neg_mse test_neg_rmse test_mape_score \\\n", "0 0.036642 0.220047 -3.901574e+09 -62462.584290 -0.227097 \n", "1 0.027709 0.204257 -4.024344e+09 -63437.715015 -0.227546 \n", "2 0.028423 0.214962 -3.920413e+09 -62613.202523 -0.222369 \n", "3 0.027470 0.213464 -4.122192e+09 -64204.295214 -0.230167 \n", "4 0.027981 0.179939 -3.506752e+09 -59217.838633 -0.210335 \n", "\n", " test_r2 \n", "0 0.695818 \n", "1 0.707483 \n", "2 0.713788 \n", "3 0.686938 \n", "4 0.724608 " ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd.DataFrame(\n", " cross_validate(\n", " pipe_regression,\n", " X_train,\n", " y_train,\n", " scoring=scoring\n", " )\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If we set `return_train_score=True` we would return a validation and training score for each measurement! " ] }, { "cell_type": "code", "execution_count": 59, "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", "
fit_timescore_timetest_neg_msetrain_neg_msetest_neg_rmsetrain_neg_rmsetest_mape_scoretrain_mape_scoretest_r2train_r2
00.0305960.213980-3.901574e+09-2.646129e+09-62462.584290-51440.540539-0.227097-0.1842100.6958180.801659
10.0281040.199698-4.024344e+09-2.627996e+09-63437.715015-51263.979666-0.227546-0.1846910.7074830.799575
20.0272260.204043-3.920413e+09-2.678975e+09-62613.202523-51758.817852-0.222369-0.1867500.7137880.795944
30.0271800.206620-4.122192e+09-2.636180e+09-64204.295214-51343.743586-0.230167-0.1851080.6869380.801232
40.0271440.173949-3.506752e+09-2.239671e+09-59217.838633-47325.157312-0.210335-0.1695100.7246080.832498
\n", "
" ], "text/plain": [ " fit_time score_time test_neg_mse train_neg_mse test_neg_rmse \\\n", "0 0.030596 0.213980 -3.901574e+09 -2.646129e+09 -62462.584290 \n", "1 0.028104 0.199698 -4.024344e+09 -2.627996e+09 -63437.715015 \n", "2 0.027226 0.204043 -3.920413e+09 -2.678975e+09 -62613.202523 \n", "3 0.027180 0.206620 -4.122192e+09 -2.636180e+09 -64204.295214 \n", "4 0.027144 0.173949 -3.506752e+09 -2.239671e+09 -59217.838633 \n", "\n", " train_neg_rmse test_mape_score train_mape_score test_r2 train_r2 \n", "0 -51440.540539 -0.227097 -0.184210 0.695818 0.801659 \n", "1 -51263.979666 -0.227546 -0.184691 0.707483 0.799575 \n", "2 -51758.817852 -0.222369 -0.186750 0.713788 0.795944 \n", "3 -51343.743586 -0.230167 -0.185108 0.686938 0.801232 \n", "4 -47325.157312 -0.210335 -0.169510 0.724608 0.832498 " ] }, "execution_count": 59, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd.DataFrame(\n", " cross_validate(\n", " pipe_regression,\n", " X_train,\n", " y_train,\n", " scoring=scoring,\n", " return_train_score=True\n", " )\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### What about hyperparameter tuning?\n", "\n", "We can do exactly the same thing we saw above with `cross_validate()` but instead with `GridSearchCV` and `RandomizedSearchCV`. " ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [], "source": [ "from sklearn.model_selection import GridSearchCV\n", "\n", "\n", "param_grid = {\"kneighborsregressor__n_neighbors\": [2, 5, 50, 100]}\n", "\n", "grid_search = GridSearchCV(\n", " pipe_regression,\n", " param_grid,\n", " cv=5, \n", " return_train_score=True,\n", " n_jobs=-1, \n", " scoring='neg_mean_squared_error'\n", ");\n", "grid_search.fit(X_train, y_train);" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'kneighborsregressor__n_neighbors': 5}" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "grid_search.best_params_" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "-0.2235027119616972" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ "grid_search.best_score_" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If we used another scoring metric,\n", "we might end up with another results for the best hyperparameter." ] }, { "cell_type": "code", "execution_count": 63, "metadata": {}, "outputs": [], "source": [ "# 'max_error' is a metric we haven't talked about and it is not that useful,\n", "# I just use it here to show that the choice of metric can influence the returned best hyperparameters.\n", "\n", "grid_search = GridSearchCV(\n", " pipe_regression,\n", " param_grid,\n", " cv=5, \n", " return_train_score=True,\n", " n_jobs=-1, \n", " scoring='max_error'\n", ");\n", "grid_search.fit(X_train, y_train);" ] }, { "cell_type": "code", "execution_count": 64, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'kneighborsregressor__n_neighbors': 100}" ] }, "execution_count": 64, "metadata": {}, "output_type": "execute_result" } ], "source": [ "grid_search.best_params_" ] }, { "cell_type": "code", "execution_count": 65, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "-373468.55" ] }, "execution_count": 65, "metadata": {}, "output_type": "execute_result" } ], "source": [ "grid_search.best_score_" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### ... and with Classification? \n", "\n", "Let's bring back our credit card data set and build our pipeline." ] }, { "cell_type": "code", "execution_count": 66, "metadata": {}, "outputs": [], "source": [ "train_df, test_df = train_test_split(cc_df, test_size=0.3, random_state=111)\n", "\n", "X_train, y_train = train_df.drop(columns=[\"Class\"]), train_df[\"Class\"]\n", "X_test, y_test = test_df.drop(columns=[\"Class\"]), test_df[\"Class\"]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can use `class_weight='balanced'` in our classifier..." ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [], "source": [ "from sklearn.tree import DecisionTreeClassifier\n", "\n", "\n", "dt_model = DecisionTreeClassifier(random_state=123, class_weight='balanced')" ] }, { "cell_type": "code", "execution_count": 49, "metadata": {}, "outputs": [], "source": [ "import scipy\n", "\n", "param_grid = {\"max_depth\": scipy.stats.randint(low=1, high=100)}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "... and tune our model for the thing we care about. \n", "\n", "In this case, we are specifying the `f1` score." ] }, { "cell_type": "code", "execution_count": 50, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Fitting 3 folds for each of 6 candidates, totalling 18 fits\n", "[CV] END .......................................max_depth=69; total time= 0.0s\n", "[CV] END .......................................max_depth=69; total time= 0.0s\n", "[CV] END .......................................max_depth=69; total time= 0.0s\n", "[CV] END .......................................max_depth=12; total time= 0.0s\n", "[CV] END .......................................max_depth=12; total time= 0.0s\n", "[CV] END .......................................max_depth=12; total time= 0.0s\n", "[CV] END .......................................max_depth=65; total time= 0.0s\n", "[CV] END .......................................max_depth=65; total time= 0.0s\n", "[CV] END .......................................max_depth=43; total time= 0.0s\n", "[CV] END .......................................max_depth=43; total time= 0.0s\n", "[CV] END .......................................max_depth=43; total time= 0.0s\n", "[CV] END .......................................max_depth=65; total time= 0.0s\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/quannguyen/opt/miniconda3/envs/571/lib/python3.10/site-packages/sklearn/model_selection/_split.py:737: UserWarning: The least populated class in y has only 1 members, which is less than n_splits=3.\n", " warnings.warn(\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[CV] END ........................................max_depth=4; total time= 0.0s\n", "[CV] END ........................................max_depth=4; total time= 0.0s\n", "[CV] END ........................................max_depth=4; total time= 0.0s\n", "[CV] END .......................................max_depth=62; total time= 0.0s\n", "[CV] END .......................................max_depth=62; total time= 0.0s\n", "[CV] END .......................................max_depth=62; total time= 0.0s\n" ] }, { "ename": "ValueError", "evalue": "\nAll the 18 fits failed.\nIt is very likely that your model is misconfigured.\nYou can try to debug the error by setting error_score='raise'.\n\nBelow are more details about the failures:\n--------------------------------------------------------------------------------\n18 fits failed with the following error:\nTraceback (most recent call last):\n File \"/Users/quannguyen/opt/miniconda3/envs/571/lib/python3.10/site-packages/sklearn/model_selection/_validation.py\", line 729, in _fit_and_score\n estimator.fit(X_train, y_train, **fit_params)\n File \"/Users/quannguyen/opt/miniconda3/envs/571/lib/python3.10/site-packages/sklearn/base.py\", line 1152, in wrapper\n return fit_method(estimator, *args, **kwargs)\n File \"/Users/quannguyen/opt/miniconda3/envs/571/lib/python3.10/site-packages/sklearn/tree/_classes.py\", line 959, in fit\n super()._fit(\n File \"/Users/quannguyen/opt/miniconda3/envs/571/lib/python3.10/site-packages/sklearn/tree/_classes.py\", line 242, in _fit\n X, y = self._validate_data(\n File \"/Users/quannguyen/opt/miniconda3/envs/571/lib/python3.10/site-packages/sklearn/base.py\", line 617, in _validate_data\n X = check_array(X, input_name=\"X\", **check_X_params)\n File \"/Users/quannguyen/opt/miniconda3/envs/571/lib/python3.10/site-packages/sklearn/utils/validation.py\", line 915, in check_array\n array = _asarray_with_order(array, order=order, dtype=dtype, xp=xp)\n File \"/Users/quannguyen/opt/miniconda3/envs/571/lib/python3.10/site-packages/sklearn/utils/_array_api.py\", line 380, in _asarray_with_order\n array = numpy.asarray(array, order=order, dtype=dtype)\n File \"/Users/quannguyen/opt/miniconda3/envs/571/lib/python3.10/site-packages/pandas/core/generic.py\", line 2084, in __array__\n arr = np.asarray(values, dtype=dtype)\nValueError: could not convert string to float: 'INLAND'\n", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", "Cell \u001b[0;32mIn[50], line 13\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01msklearn\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mmodel_selection\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m RandomizedSearchCV\n\u001b[1;32m 2\u001b[0m grid_search \u001b[38;5;241m=\u001b[39m RandomizedSearchCV(\n\u001b[1;32m 3\u001b[0m dt_model,\n\u001b[1;32m 4\u001b[0m param_grid,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 11\u001b[0m random_state\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m2080\u001b[39m\n\u001b[1;32m 12\u001b[0m )\n\u001b[0;32m---> 13\u001b[0m \u001b[43mgrid_search\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfit\u001b[49m\u001b[43m(\u001b[49m\u001b[43mX_train\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43my_train\u001b[49m\u001b[43m)\u001b[49m;\n", "File \u001b[0;32m~/opt/miniconda3/envs/571/lib/python3.10/site-packages/sklearn/base.py:1152\u001b[0m, in \u001b[0;36m_fit_context..decorator..wrapper\u001b[0;34m(estimator, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1145\u001b[0m estimator\u001b[38;5;241m.\u001b[39m_validate_params()\n\u001b[1;32m 1147\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m config_context(\n\u001b[1;32m 1148\u001b[0m skip_parameter_validation\u001b[38;5;241m=\u001b[39m(\n\u001b[1;32m 1149\u001b[0m prefer_skip_nested_validation \u001b[38;5;129;01mor\u001b[39;00m global_skip_validation\n\u001b[1;32m 1150\u001b[0m )\n\u001b[1;32m 1151\u001b[0m ):\n\u001b[0;32m-> 1152\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfit_method\u001b[49m\u001b[43m(\u001b[49m\u001b[43mestimator\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[0;32m~/opt/miniconda3/envs/571/lib/python3.10/site-packages/sklearn/model_selection/_search.py:898\u001b[0m, in \u001b[0;36mBaseSearchCV.fit\u001b[0;34m(self, X, y, groups, **fit_params)\u001b[0m\n\u001b[1;32m 892\u001b[0m results \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_format_results(\n\u001b[1;32m 893\u001b[0m all_candidate_params, n_splits, all_out, all_more_results\n\u001b[1;32m 894\u001b[0m )\n\u001b[1;32m 896\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m results\n\u001b[0;32m--> 898\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_run_search\u001b[49m\u001b[43m(\u001b[49m\u001b[43mevaluate_candidates\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 900\u001b[0m \u001b[38;5;66;03m# multimetric is determined here because in the case of a callable\u001b[39;00m\n\u001b[1;32m 901\u001b[0m \u001b[38;5;66;03m# self.scoring the return type is only known after calling\u001b[39;00m\n\u001b[1;32m 902\u001b[0m first_test_score \u001b[38;5;241m=\u001b[39m all_out[\u001b[38;5;241m0\u001b[39m][\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtest_scores\u001b[39m\u001b[38;5;124m\"\u001b[39m]\n", "File \u001b[0;32m~/opt/miniconda3/envs/571/lib/python3.10/site-packages/sklearn/model_selection/_search.py:1809\u001b[0m, in \u001b[0;36mRandomizedSearchCV._run_search\u001b[0;34m(self, evaluate_candidates)\u001b[0m\n\u001b[1;32m 1807\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_run_search\u001b[39m(\u001b[38;5;28mself\u001b[39m, evaluate_candidates):\n\u001b[1;32m 1808\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Search n_iter candidates from param_distributions\"\"\"\u001b[39;00m\n\u001b[0;32m-> 1809\u001b[0m \u001b[43mevaluate_candidates\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 1810\u001b[0m \u001b[43m \u001b[49m\u001b[43mParameterSampler\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 1811\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mparam_distributions\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mn_iter\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrandom_state\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrandom_state\u001b[49m\n\u001b[1;32m 1812\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1813\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[0;32m~/opt/miniconda3/envs/571/lib/python3.10/site-packages/sklearn/model_selection/_search.py:875\u001b[0m, in \u001b[0;36mBaseSearchCV.fit..evaluate_candidates\u001b[0;34m(candidate_params, cv, more_results)\u001b[0m\n\u001b[1;32m 868\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(out) \u001b[38;5;241m!=\u001b[39m n_candidates \u001b[38;5;241m*\u001b[39m n_splits:\n\u001b[1;32m 869\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[1;32m 870\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcv.split and cv.get_n_splits returned \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 871\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124minconsistent results. Expected \u001b[39m\u001b[38;5;132;01m{}\u001b[39;00m\u001b[38;5;124m \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 872\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124msplits, got \u001b[39m\u001b[38;5;132;01m{}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;241m.\u001b[39mformat(n_splits, \u001b[38;5;28mlen\u001b[39m(out) \u001b[38;5;241m/\u001b[39m\u001b[38;5;241m/\u001b[39m n_candidates)\n\u001b[1;32m 873\u001b[0m )\n\u001b[0;32m--> 875\u001b[0m \u001b[43m_warn_or_raise_about_fit_failures\u001b[49m\u001b[43m(\u001b[49m\u001b[43mout\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43merror_score\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 877\u001b[0m \u001b[38;5;66;03m# For callable self.scoring, the return type is only know after\u001b[39;00m\n\u001b[1;32m 878\u001b[0m \u001b[38;5;66;03m# calling. If the return type is a dictionary, the error scores\u001b[39;00m\n\u001b[1;32m 879\u001b[0m \u001b[38;5;66;03m# can now be inserted with the correct key. The type checking\u001b[39;00m\n\u001b[1;32m 880\u001b[0m \u001b[38;5;66;03m# of out will be done in `_insert_error_scores`.\u001b[39;00m\n\u001b[1;32m 881\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mcallable\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mscoring):\n", "File \u001b[0;32m~/opt/miniconda3/envs/571/lib/python3.10/site-packages/sklearn/model_selection/_validation.py:414\u001b[0m, in \u001b[0;36m_warn_or_raise_about_fit_failures\u001b[0;34m(results, error_score)\u001b[0m\n\u001b[1;32m 407\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m num_failed_fits \u001b[38;5;241m==\u001b[39m num_fits:\n\u001b[1;32m 408\u001b[0m all_fits_failed_message \u001b[38;5;241m=\u001b[39m (\n\u001b[1;32m 409\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124mAll the \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mnum_fits\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m fits failed.\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 410\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mIt is very likely that your model is misconfigured.\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 411\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mYou can try to debug the error by setting error_score=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mraise\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m.\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 412\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mBelow are more details about the failures:\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;132;01m{\u001b[39;00mfit_errors_summary\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 413\u001b[0m )\n\u001b[0;32m--> 414\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(all_fits_failed_message)\n\u001b[1;32m 416\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 417\u001b[0m some_fits_failed_message \u001b[38;5;241m=\u001b[39m (\n\u001b[1;32m 418\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;132;01m{\u001b[39;00mnum_failed_fits\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m fits failed out of a total of \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mnum_fits\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m.\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 419\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mThe score on these train-test partitions for these parameters\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 423\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mBelow are more details about the failures:\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;132;01m{\u001b[39;00mfit_errors_summary\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 424\u001b[0m )\n", "\u001b[0;31mValueError\u001b[0m: \nAll the 18 fits failed.\nIt is very likely that your model is misconfigured.\nYou can try to debug the error by setting error_score='raise'.\n\nBelow are more details about the failures:\n--------------------------------------------------------------------------------\n18 fits failed with the following error:\nTraceback (most recent call last):\n File \"/Users/quannguyen/opt/miniconda3/envs/571/lib/python3.10/site-packages/sklearn/model_selection/_validation.py\", line 729, in _fit_and_score\n estimator.fit(X_train, y_train, **fit_params)\n File \"/Users/quannguyen/opt/miniconda3/envs/571/lib/python3.10/site-packages/sklearn/base.py\", line 1152, in wrapper\n return fit_method(estimator, *args, **kwargs)\n File \"/Users/quannguyen/opt/miniconda3/envs/571/lib/python3.10/site-packages/sklearn/tree/_classes.py\", line 959, in fit\n super()._fit(\n File \"/Users/quannguyen/opt/miniconda3/envs/571/lib/python3.10/site-packages/sklearn/tree/_classes.py\", line 242, in _fit\n X, y = self._validate_data(\n File \"/Users/quannguyen/opt/miniconda3/envs/571/lib/python3.10/site-packages/sklearn/base.py\", line 617, in _validate_data\n X = check_array(X, input_name=\"X\", **check_X_params)\n File \"/Users/quannguyen/opt/miniconda3/envs/571/lib/python3.10/site-packages/sklearn/utils/validation.py\", line 915, in check_array\n array = _asarray_with_order(array, order=order, dtype=dtype, xp=xp)\n File \"/Users/quannguyen/opt/miniconda3/envs/571/lib/python3.10/site-packages/sklearn/utils/_array_api.py\", line 380, in _asarray_with_order\n array = numpy.asarray(array, order=order, dtype=dtype)\n File \"/Users/quannguyen/opt/miniconda3/envs/571/lib/python3.10/site-packages/pandas/core/generic.py\", line 2084, in __array__\n arr = np.asarray(values, dtype=dtype)\nValueError: could not convert string to float: 'INLAND'\n" ] } ], "source": [ "from sklearn.model_selection import RandomizedSearchCV\n", "grid_search = RandomizedSearchCV(\n", " dt_model,\n", " param_grid,\n", " cv=3,\n", " return_train_score=True,\n", " verbose=2,\n", " n_jobs=-1,\n", " n_iter = 6,\n", " scoring='f1',\n", " random_state=2080\n", ")\n", "grid_search.fit(X_train, y_train);" ] }, { "cell_type": "code", "execution_count": 70, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'max_depth': 69}" ] }, "execution_count": 70, "metadata": {}, "output_type": "execute_result" } ], "source": [ "grid_search.best_params_" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This returns the `max_depth` value that results in the highest `f1` score, not the `max_depth` with the highest accuracy." ] }, { "cell_type": "code", "execution_count": 71, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.7877624963028689" ] }, "execution_count": 71, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Validation performance\n", "grid_search.best_score_" ] }, { "cell_type": "code", "execution_count": 72, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.7698113207547169" ] }, "execution_count": 72, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Test performance\n", "grid_search.score(X_test, y_test)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's look at our recall score to compare to the next section." ] }, { "cell_type": "code", "execution_count": 73, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.7338129496402878" ] }, "execution_count": 73, "metadata": {}, "output_type": "execute_result" } ], "source": [ "recall_score(y_test, grid_search.predict(X_test))" ] }, { "cell_type": "code", "execution_count": 74, "metadata": {}, "outputs": [ { "data": { "image/png": "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vx9TpkzRJRcA4OXlheHDhyMtLU137tChQ6ioqEBERIReGxERERBFEXv37tWdS0tLQ+/evXXJBQDIZDJMnz4dp0+fRm5ubou8HyYYRERkXrQSHQCKi4v1jsrKykZfev78+ZDJZFAoFBgzZgy++eYb3bWLFy+ivLwcfn5+de7z8/PDhQsXUFFRAQDIyckBAPj6+urFubu7Q6VS6a7XxjbUJgCcPXu20T4/LCYYRERkVmpXkRh7AICnpyccHR11x4YNG+p9TUdHRyxatAjvvPMOjh49iq1bt+L69esICgrC4cOHAdQMewCAUqmsc79SqYQoirh7964uVi6Xw87Ort7Y2rZqYxtq88HXlRrnYBARET2k69ev6w1nyOXyeuOeeOIJPPHEE7rvhw4dipCQEPj6+iIyMhJjxozRXRMEocHXe/Bac+MMjZUKKxhERGReaid5GnsAUCgUekdDCUZ9OnbsiAkTJuDHH39EeXk5nJycANRfUSgsLIQgCOjYsSMAwMnJCRUVFSgrK6s39sGKhZOTU4NtAvVXTKTABIOIiMyLhAmG8V2paUcQBPTo0QM2NjbIzs6uE5ednY2ePXvC2toawO9zL/4Ye+vWLeTn5+stffX19W2wTUB/mayUmGAQERG1grt372L//v3o378/rK2tIZPJMHHiRHzxxRcoKSnRxV27dg1Hjx5FaGio7lxwcDCsra2RkpKi12ZKSgoEQcDkyZN150JCQnDu3Dm95ahqtRqpqakYNGgQPDw8WuT9cQ4GERGZl1bYB2PatGno0qULnnrqKahUKvzyyy944403cPv2bb0kIT4+HgMHDsSECRMQFRWl22hLpVLhtdde08UplUrExMRg1apVUCqVuo224uLiMHv2bN0eGAAwa9YsJCYmIiwsDBs3boSLiwuSkpJw/vx5pKenG/dzaAQTDCIiMi9aAMbOazTwYWl+fn747LPP8I9//AOlpaVQKpX405/+hI8++ggDBw7UxXl7e+PYsWNYvnw5pk6dCplMhhEjRiAhIUFvF08AiI6OhoODAxITE5GQkAA3NzdERUUhOjpaL04ulyMjIwORkZFYuHAhysrK0L9/fxw8eLDFdvEEAEEUJRpIamXFxcVwdHREECZBJli2dneIiMhAarEax7APRUVFeiszpFL7OfFMr1ch69D8yZj1UWsqkf7zlhbra3vAORhEREQk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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "ConfusionMatrixDisplay.from_estimator(grid_search, X_test, y_test);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If we now tune hyperparameters based on their recall score instead of precision,\n", "you will se that we select a different value for `max_depth`\n", "and that our recall score is higher with this value." ] }, { "cell_type": "code", "execution_count": 75, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Fitting 3 folds for each of 6 candidates, totalling 18 fits\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[CV] END .......................................max_depth=69; total time= 2.3s\n", "[CV] END .......................................max_depth=12; total time= 2.4s\n", "[CV] END .......................................max_depth=65; total time= 2.5s\n", "[CV] END .......................................max_depth=12; total time= 2.5s\n", "[CV] END .......................................max_depth=69; total time= 2.7s\n", "[CV] END .......................................max_depth=69; total time= 2.7s\n", "[CV] END .......................................max_depth=12; total time= 2.7s\n", "[CV] END .......................................max_depth=65; total time= 2.7s\n", "[CV] END ........................................max_depth=4; total time= 1.6s\n", "[CV] END ........................................max_depth=4; total time= 1.6s\n", "[CV] END ........................................max_depth=4; total time= 1.8s\n", "[CV] END .......................................max_depth=65; total time= 2.5s\n", "[CV] END .......................................max_depth=43; total time= 2.5s\n", "[CV] END .......................................max_depth=62; total time= 2.1s\n", "[CV] END .......................................max_depth=43; total time= 2.5s\n", "[CV] END .......................................max_depth=43; total time= 2.5s\n", "[CV] END .......................................max_depth=62; total time= 2.0s\n", "[CV] END .......................................max_depth=62; total time= 1.8s\n" ] } ], "source": [ "grid_search = RandomizedSearchCV(\n", " dt_model,\n", " param_grid,\n", " cv=3,\n", " return_train_score=True,\n", " verbose=2,\n", " n_jobs=-1,\n", " n_iter = 6,\n", " scoring='recall',\n", " random_state=2080\n", ")\n", "grid_search.fit(X_train, y_train);" ] }, { "cell_type": "code", "execution_count": 76, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'max_depth': 4}" ] }, "execution_count": 76, "metadata": {}, "output_type": "execute_result" } ], "source": [ "grid_search.best_params_" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This returns the `max_depth` value that results in the highest `f1` score, not the `max_depth` with the highest accuracy." ] }, { "cell_type": "code", "execution_count": 77, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.8839152059491043" ] }, "execution_count": 77, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Validation performance\n", "grid_search.best_score_" ] }, { "cell_type": "code", "execution_count": 78, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.841726618705036" ] }, "execution_count": 78, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Test performance\n", "grid_search.score(X_test, y_test)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As you can see above,\n", "our recall score is now higher\n", "(remember that the default scoring method changes to the metric used during hyperparameter optimization)\n", "If we look at our f1 score we can see that it is worse than before,\n", "as expected.\n", "When we are optimizing on recall alone,\n", "we are only trying to catch as many of the true positives as possible\n", "and don't care about that we are incorrectly classifying many negatives as positives\n", "which will lead to a lower precision and f1 score." ] }, { "cell_type": "code", "execution_count": 79, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.1984732824427481" ] }, "execution_count": 79, "metadata": {}, "output_type": "execute_result" } ], "source": [ "f1_score(y_test, grid_search.predict(X_test))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the confusion matrix,\n", "we have many more values in the top right quadrant\n", "because there is no penalty for incorrectly classifying observations here when just using recall." ] }, { "cell_type": "code", "execution_count": 80, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "ConfusionMatrixDisplay.from_estimator( grid_search, X_test, y_test);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Let's Practice\n", "\n", "**True or False:** \n", "1. We are limited to the scoring measures offered from sklearn. \n", "2. If we specify the scoring method in `GridSearchCV` and `RandomizedSearchCV`, `best_param_` will return the parameters with the best specified measure.* " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "```{admonition} Solutions!\n", ":class: dropdown\n", "\n", "2. False, we could also specify our own scorer function https://scikit-learn.org/stable/modules/model_evaluation.html#scoring\n", "3. True\n", "\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Let's Practice - Coding\n", "\n", "Let’s bring back the Pokémon dataset that we saw previously. \n", "\n", "This time let's try to predict whether a Pokémon has a legendary status or not based on their other attributes." ] }, { "cell_type": "code", "execution_count": 51, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "legendary\n", "0 359\n", "1 33\n", "Name: count, dtype: int64\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", "
namedeck_noattackdefensesp_attacksp_defensespeedcapture_rttotal_bstypegen
124Electabuzz1258357958510545490electric1
11Butterfree12455090807045395bug1
77Rapidash7810070808010560500fire1
405Budew4063035507055255280grass4
799Necrozma80010710112789793600psychic7
....................................
33Nidoking341027785758545505poison1
458Snover4596250626040120334grass4
234Smeargle235203520457545250normal2
287Vigoroth2888080555590120440normal3
561Yamask5623085556530190303ghost5
\n", "

392 rows × 11 columns

\n", "
" ], "text/plain": [ " name deck_no attack defense sp_attack sp_defense speed \\\n", "124 Electabuzz 125 83 57 95 85 105 \n", "11 Butterfree 12 45 50 90 80 70 \n", "77 Rapidash 78 100 70 80 80 105 \n", "405 Budew 406 30 35 50 70 55 \n", "799 Necrozma 800 107 101 127 89 79 \n", ".. ... ... ... ... ... ... ... \n", "33 Nidoking 34 102 77 85 75 85 \n", "458 Snover 459 62 50 62 60 40 \n", "234 Smeargle 235 20 35 20 45 75 \n", "287 Vigoroth 288 80 80 55 55 90 \n", "561 Yamask 562 30 85 55 65 30 \n", "\n", " capture_rt total_bs type gen \n", "124 45 490 electric 1 \n", "11 45 395 bug 1 \n", "77 60 500 fire 1 \n", "405 255 280 grass 4 \n", "799 3 600 psychic 7 \n", ".. ... ... ... ... \n", "33 45 505 poison 1 \n", "458 120 334 grass 4 \n", "234 45 250 normal 2 \n", "287 120 440 normal 3 \n", "561 190 303 ghost 5 \n", "\n", "[392 rows x 11 columns]" ] }, "execution_count": 51, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pk_df = pd.read_csv('data/pokemon.csv')\n", "\n", "train_df, test_df = train_test_split(pk_df, test_size=0.3, random_state=1)\n", "\n", "X_train_big = train_df.drop(columns=['legendary'])\n", "y_train_big = train_df['legendary']\n", "X_test = test_df.drop(columns=['legendary'])\n", "y_test = test_df['legendary']\n", "\n", "X_train, X_valid, y_train, y_valid = train_test_split(\n", " X_train_big, \n", " y_train_big, \n", " test_size=0.3, \n", " random_state=123\n", ")\n", "\n", "print(y_train.value_counts())\n", "X_train" ] }, { "cell_type": "code", "execution_count": 56, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
Pipeline(steps=[('columntransformer',\n",
       "                 ColumnTransformer(remainder='passthrough',\n",
       "                                   transformers=[('pipeline-1',\n",
       "                                                  Pipeline(steps=[('imputer',\n",
       "                                                                   SimpleImputer(strategy='median')),\n",
       "                                                                  ('scaler',\n",
       "                                                                   StandardScaler())]),\n",
       "                                                  ['longitude', 'latitude',\n",
       "                                                   'housing_median_age',\n",
       "                                                   'households',\n",
       "                                                   'median_income',\n",
       "                                                   'rooms_per_household',\n",
       "                                                   'bedrooms_per_household',\n",
       "                                                   'population_per_household']),\n",
       "                                                 ('pipeline-2',\n",
       "                                                  Pipeline(steps=[('imputer',\n",
       "                                                                   SimpleImputer(fill_value='missing',\n",
       "                                                                                 strategy='constant')),\n",
       "                                                                  ('onehot',\n",
       "                                                                   OneHotEncoder(handle_unknown='ignore'))]),\n",
       "                                                  ['ocean_proximity'])])),\n",
       "                ('svc', SVC())])
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=[('columntransformer',\n", " ColumnTransformer(remainder='passthrough',\n", " transformers=[('pipeline-1',\n", " Pipeline(steps=[('imputer',\n", " SimpleImputer(strategy='median')),\n", " ('scaler',\n", " StandardScaler())]),\n", " ['longitude', 'latitude',\n", " 'housing_median_age',\n", " 'households',\n", " 'median_income',\n", " 'rooms_per_household',\n", " 'bedrooms_per_household',\n", " 'population_per_household']),\n", " ('pipeline-2',\n", " Pipeline(steps=[('imputer',\n", " SimpleImputer(fill_value='missing',\n", " strategy='constant')),\n", " ('onehot',\n", " OneHotEncoder(handle_unknown='ignore'))]),\n", " ['ocean_proximity'])])),\n", " ('svc', SVC())])" ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# create a numeric transformer\n", "num_pipe = make_pipeline(\n", " SimpleImputer(strategy='median'),\n", " StandardScaler()\n", ")\n", "\n", "num_cols = ['attack','defense','speed']\n", "\n", "# create a categorical transformer\n", "cat_pipe = make_pipeline(\n", " SimpleImputer(strategy='constant'),\n", " OneHotEncoder(handle_unknown='ignore')\n", ")\n", "\n", "cat_cols = ['type']\n", "\n", "# make column transformer\n", "preprossor = make_column_transformer(\n", " (num_pipe, num_cols),\n", " (cat_pipe, cat_cols),\n", " remainder='drop'\n", ")\n", "\n", "# the final pipeline\n", "from sklearn.svm import SVC\n", "main_pipe = make_pipeline(\n", " preprocessor,\n", " SVC()\n", ")\n", "\n", "main_pipe" ] }, { "cell_type": "code", "execution_count": 57, "metadata": {}, "outputs": [ { "ename": "ValueError", "evalue": "\nAll the 5 fits failed.\nIt is very likely that your model is misconfigured.\nYou can try to debug the error by setting error_score='raise'.\n\nBelow are more details about the failures:\n--------------------------------------------------------------------------------\n5 fits failed with the following error:\nTraceback (most recent call last):\n File \"/Users/quannguyen/opt/miniconda3/envs/571/lib/python3.10/site-packages/pandas/core/indexes/base.py\", line 3791, in get_loc\n return self._engine.get_loc(casted_key)\n File \"index.pyx\", line 152, in pandas._libs.index.IndexEngine.get_loc\n File \"index.pyx\", line 181, in pandas._libs.index.IndexEngine.get_loc\n File \"pandas/_libs/hashtable_class_helper.pxi\", line 7080, in pandas._libs.hashtable.PyObjectHashTable.get_item\n File \"pandas/_libs/hashtable_class_helper.pxi\", line 7088, in pandas._libs.hashtable.PyObjectHashTable.get_item\nKeyError: 'longitude'\n\nThe above exception was the direct cause of the following exception:\n\nTraceback (most recent call last):\n File \"/Users/quannguyen/opt/miniconda3/envs/571/lib/python3.10/site-packages/sklearn/utils/__init__.py\", line 447, in _get_column_indices\n col_idx = all_columns.get_loc(col)\n File \"/Users/quannguyen/opt/miniconda3/envs/571/lib/python3.10/site-packages/pandas/core/indexes/base.py\", line 3798, in get_loc\n raise KeyError(key) from err\nKeyError: 'longitude'\n\nThe above exception was the direct cause of the following exception:\n\nTraceback (most recent call last):\n File \"/Users/quannguyen/opt/miniconda3/envs/571/lib/python3.10/site-packages/sklearn/model_selection/_validation.py\", line 729, in _fit_and_score\n estimator.fit(X_train, y_train, **fit_params)\n File \"/Users/quannguyen/opt/miniconda3/envs/571/lib/python3.10/site-packages/sklearn/base.py\", line 1152, in wrapper\n return fit_method(estimator, *args, **kwargs)\n File \"/Users/quannguyen/opt/miniconda3/envs/571/lib/python3.10/site-packages/sklearn/pipeline.py\", line 423, in fit\n Xt = self._fit(X, y, **fit_params_steps)\n File \"/Users/quannguyen/opt/miniconda3/envs/571/lib/python3.10/site-packages/sklearn/pipeline.py\", line 377, in _fit\n X, fitted_transformer = fit_transform_one_cached(\n File \"/Users/quannguyen/opt/miniconda3/envs/571/lib/python3.10/site-packages/joblib/memory.py\", line 353, in __call__\n return self.func(*args, **kwargs)\n File \"/Users/quannguyen/opt/miniconda3/envs/571/lib/python3.10/site-packages/sklearn/pipeline.py\", line 957, in _fit_transform_one\n res = transformer.fit_transform(X, y, **fit_params)\n File \"/Users/quannguyen/opt/miniconda3/envs/571/lib/python3.10/site-packages/sklearn/utils/_set_output.py\", line 157, in wrapped\n data_to_wrap = f(self, X, *args, **kwargs)\n File \"/Users/quannguyen/opt/miniconda3/envs/571/lib/python3.10/site-packages/sklearn/base.py\", line 1152, in wrapper\n return fit_method(estimator, *args, **kwargs)\n File \"/Users/quannguyen/opt/miniconda3/envs/571/lib/python3.10/site-packages/sklearn/compose/_column_transformer.py\", line 751, in fit_transform\n self._validate_column_callables(X)\n File \"/Users/quannguyen/opt/miniconda3/envs/571/lib/python3.10/site-packages/sklearn/compose/_column_transformer.py\", line 459, in _validate_column_callables\n transformer_to_input_indices[name] = _get_column_indices(X, columns)\n File \"/Users/quannguyen/opt/miniconda3/envs/571/lib/python3.10/site-packages/sklearn/utils/__init__.py\", line 455, in _get_column_indices\n raise ValueError(\"A given column is not a column of the dataframe\") from e\nValueError: A given column is not a column of the dataframe\n", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", "Cell \u001b[0;32mIn[57], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mcross_validate\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmain_pipe\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mX_train\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43my_train\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcv\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m5\u001b[39;49m\u001b[43m)\u001b[49m\n", "File \u001b[0;32m~/opt/miniconda3/envs/571/lib/python3.10/site-packages/sklearn/utils/_param_validation.py:214\u001b[0m, in \u001b[0;36mvalidate_params..decorator..wrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 208\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 209\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m config_context(\n\u001b[1;32m 210\u001b[0m skip_parameter_validation\u001b[38;5;241m=\u001b[39m(\n\u001b[1;32m 211\u001b[0m prefer_skip_nested_validation \u001b[38;5;129;01mor\u001b[39;00m global_skip_validation\n\u001b[1;32m 212\u001b[0m )\n\u001b[1;32m 213\u001b[0m ):\n\u001b[0;32m--> 214\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 215\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m InvalidParameterError \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 216\u001b[0m \u001b[38;5;66;03m# When the function is just a wrapper around an estimator, we allow\u001b[39;00m\n\u001b[1;32m 217\u001b[0m \u001b[38;5;66;03m# the function to delegate validation to the estimator, but we replace\u001b[39;00m\n\u001b[1;32m 218\u001b[0m \u001b[38;5;66;03m# the name of the estimator by the name of the function in the error\u001b[39;00m\n\u001b[1;32m 219\u001b[0m \u001b[38;5;66;03m# message to avoid confusion.\u001b[39;00m\n\u001b[1;32m 220\u001b[0m msg \u001b[38;5;241m=\u001b[39m re\u001b[38;5;241m.\u001b[39msub(\n\u001b[1;32m 221\u001b[0m \u001b[38;5;124mr\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mparameter of \u001b[39m\u001b[38;5;124m\\\u001b[39m\u001b[38;5;124mw+ must be\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 222\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mparameter of \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mfunc\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__qualname__\u001b[39m\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m must be\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 223\u001b[0m \u001b[38;5;28mstr\u001b[39m(e),\n\u001b[1;32m 224\u001b[0m )\n", "File \u001b[0;32m~/opt/miniconda3/envs/571/lib/python3.10/site-packages/sklearn/model_selection/_validation.py:328\u001b[0m, in \u001b[0;36mcross_validate\u001b[0;34m(estimator, X, y, groups, scoring, cv, n_jobs, verbose, fit_params, pre_dispatch, return_train_score, return_estimator, return_indices, error_score)\u001b[0m\n\u001b[1;32m 308\u001b[0m parallel \u001b[38;5;241m=\u001b[39m Parallel(n_jobs\u001b[38;5;241m=\u001b[39mn_jobs, verbose\u001b[38;5;241m=\u001b[39mverbose, pre_dispatch\u001b[38;5;241m=\u001b[39mpre_dispatch)\n\u001b[1;32m 309\u001b[0m results \u001b[38;5;241m=\u001b[39m parallel(\n\u001b[1;32m 310\u001b[0m delayed(_fit_and_score)(\n\u001b[1;32m 311\u001b[0m clone(estimator),\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 325\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m train, test \u001b[38;5;129;01min\u001b[39;00m indices\n\u001b[1;32m 326\u001b[0m )\n\u001b[0;32m--> 328\u001b[0m \u001b[43m_warn_or_raise_about_fit_failures\u001b[49m\u001b[43m(\u001b[49m\u001b[43mresults\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43merror_score\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 330\u001b[0m \u001b[38;5;66;03m# For callable scoring, the return type is only know after calling. If the\u001b[39;00m\n\u001b[1;32m 331\u001b[0m \u001b[38;5;66;03m# return type is a dictionary, the error scores can now be inserted with\u001b[39;00m\n\u001b[1;32m 332\u001b[0m \u001b[38;5;66;03m# the correct key.\u001b[39;00m\n\u001b[1;32m 333\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mcallable\u001b[39m(scoring):\n", "File \u001b[0;32m~/opt/miniconda3/envs/571/lib/python3.10/site-packages/sklearn/model_selection/_validation.py:414\u001b[0m, in \u001b[0;36m_warn_or_raise_about_fit_failures\u001b[0;34m(results, error_score)\u001b[0m\n\u001b[1;32m 407\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m num_failed_fits \u001b[38;5;241m==\u001b[39m num_fits:\n\u001b[1;32m 408\u001b[0m all_fits_failed_message \u001b[38;5;241m=\u001b[39m (\n\u001b[1;32m 409\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124mAll the \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mnum_fits\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m fits failed.\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 410\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mIt is very likely that your model is misconfigured.\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 411\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mYou can try to debug the error by setting error_score=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mraise\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m.\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 412\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mBelow are more details about the failures:\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;132;01m{\u001b[39;00mfit_errors_summary\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 413\u001b[0m )\n\u001b[0;32m--> 414\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(all_fits_failed_message)\n\u001b[1;32m 416\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 417\u001b[0m some_fits_failed_message \u001b[38;5;241m=\u001b[39m (\n\u001b[1;32m 418\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;132;01m{\u001b[39;00mnum_failed_fits\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m fits failed out of a total of \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mnum_fits\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m.\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 419\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mThe score on these train-test partitions for these parameters\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 423\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mBelow are more details about the failures:\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;132;01m{\u001b[39;00mfit_errors_summary\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 424\u001b[0m )\n", "\u001b[0;31mValueError\u001b[0m: \nAll the 5 fits failed.\nIt is very likely that your model is misconfigured.\nYou can try to debug the error by setting error_score='raise'.\n\nBelow are more details about the failures:\n--------------------------------------------------------------------------------\n5 fits failed with the following error:\nTraceback (most recent call last):\n File \"/Users/quannguyen/opt/miniconda3/envs/571/lib/python3.10/site-packages/pandas/core/indexes/base.py\", line 3791, in get_loc\n return self._engine.get_loc(casted_key)\n File \"index.pyx\", line 152, in pandas._libs.index.IndexEngine.get_loc\n File \"index.pyx\", line 181, in pandas._libs.index.IndexEngine.get_loc\n File \"pandas/_libs/hashtable_class_helper.pxi\", line 7080, in pandas._libs.hashtable.PyObjectHashTable.get_item\n File \"pandas/_libs/hashtable_class_helper.pxi\", line 7088, in pandas._libs.hashtable.PyObjectHashTable.get_item\nKeyError: 'longitude'\n\nThe above exception was the direct cause of the following exception:\n\nTraceback (most recent call last):\n File \"/Users/quannguyen/opt/miniconda3/envs/571/lib/python3.10/site-packages/sklearn/utils/__init__.py\", line 447, in _get_column_indices\n col_idx = all_columns.get_loc(col)\n File \"/Users/quannguyen/opt/miniconda3/envs/571/lib/python3.10/site-packages/pandas/core/indexes/base.py\", line 3798, in get_loc\n raise KeyError(key) from err\nKeyError: 'longitude'\n\nThe above exception was the direct cause of the following exception:\n\nTraceback (most recent call last):\n File \"/Users/quannguyen/opt/miniconda3/envs/571/lib/python3.10/site-packages/sklearn/model_selection/_validation.py\", line 729, in _fit_and_score\n estimator.fit(X_train, y_train, **fit_params)\n File \"/Users/quannguyen/opt/miniconda3/envs/571/lib/python3.10/site-packages/sklearn/base.py\", line 1152, in wrapper\n return fit_method(estimator, *args, **kwargs)\n File \"/Users/quannguyen/opt/miniconda3/envs/571/lib/python3.10/site-packages/sklearn/pipeline.py\", line 423, in fit\n Xt = self._fit(X, y, **fit_params_steps)\n File \"/Users/quannguyen/opt/miniconda3/envs/571/lib/python3.10/site-packages/sklearn/pipeline.py\", line 377, in _fit\n X, fitted_transformer = fit_transform_one_cached(\n File \"/Users/quannguyen/opt/miniconda3/envs/571/lib/python3.10/site-packages/joblib/memory.py\", line 353, in __call__\n return self.func(*args, **kwargs)\n File \"/Users/quannguyen/opt/miniconda3/envs/571/lib/python3.10/site-packages/sklearn/pipeline.py\", line 957, in _fit_transform_one\n res = transformer.fit_transform(X, y, **fit_params)\n File \"/Users/quannguyen/opt/miniconda3/envs/571/lib/python3.10/site-packages/sklearn/utils/_set_output.py\", line 157, in wrapped\n data_to_wrap = f(self, X, *args, **kwargs)\n File \"/Users/quannguyen/opt/miniconda3/envs/571/lib/python3.10/site-packages/sklearn/base.py\", line 1152, in wrapper\n return fit_method(estimator, *args, **kwargs)\n File \"/Users/quannguyen/opt/miniconda3/envs/571/lib/python3.10/site-packages/sklearn/compose/_column_transformer.py\", line 751, in fit_transform\n self._validate_column_callables(X)\n File \"/Users/quannguyen/opt/miniconda3/envs/571/lib/python3.10/site-packages/sklearn/compose/_column_transformer.py\", line 459, in _validate_column_callables\n transformer_to_input_indices[name] = _get_column_indices(X, columns)\n File \"/Users/quannguyen/opt/miniconda3/envs/571/lib/python3.10/site-packages/sklearn/utils/__init__.py\", line 455, in _get_column_indices\n raise ValueError(\"A given column is not a column of the dataframe\") from e\nValueError: A given column is not a column of the dataframe\n" ] } ], "source": [ "cross_validate(main_pipe, X_train, y_train, cv=5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's do cross-validation and look at the scores from cross-validation of not just accuracy, but precision and recall and the f1 score as well.\n", "\n", "\n", "1. Build a pipeline containing the column transformer and an SVC model and set `class_weight=\"balanced\"` in the SVM classifier. \n", "2. Perform cross-validation using cross-validate on the training split using the scoring measures accuracy, precision, recall and f1. Save the results in a dataframe." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Solutions**\n", "\n", "1\\." ] }, { "cell_type": "code", "execution_count": 58, "metadata": { "tags": [ "hide-cell" ] }, "outputs": [], "source": [ "from sklearn.svm import SVC\n", "\n", "\n", "num_pipe = make_pipeline(\n", " SimpleImputer(),\n", " StandardScaler()\n", ")\n", "\n", "cat_pipe = make_pipeline(\n", " SimpleImputer(strategy='constant'),\n", " OneHotEncoder(handle_unknown='ignore')\n", ")\n", "\n", "num_cols = X_train.select_dtypes('number').columns\n", "\n", "num_cols = [\n", " 'capture_rt',\n", " 'total_bs',\n", " 'gen']\n", "cat_cols = ['type']\n", "\n", "preprocessing = make_column_transformer(\n", " (num_pipe, num_cols),\n", " (cat_pipe, cat_cols)\n", ")\n", "\n", "main_pipe = make_pipeline(\n", " preprocessing,\n", " SVC(class_weight='balanced')\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "2\\." ] }, { "cell_type": "code", "execution_count": 61, "metadata": { "tags": [ "hide-cell" ] }, "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", "
fit_timescore_timetest_accuracytest_precisiontest_recalltest_f1
00.0082830.0066740.9411760.6666670.6666670.666667
10.0068970.0060860.9411760.6666670.6666670.666667
20.0063350.0058810.9117650.5000000.6666670.571429
30.0064940.0061220.9393940.5000000.5000000.500000
40.0066140.0058940.9090910.5000000.3333330.400000
\n", "
" ], "text/plain": [ " fit_time score_time test_accuracy test_precision test_recall test_f1\n", "0 0.008283 0.006674 0.941176 0.666667 0.666667 0.666667\n", "1 0.006897 0.006086 0.941176 0.666667 0.666667 0.666667\n", "2 0.006335 0.005881 0.911765 0.500000 0.666667 0.571429\n", "3 0.006494 0.006122 0.939394 0.500000 0.500000 0.500000\n", "4 0.006614 0.005894 0.909091 0.500000 0.333333 0.400000" ] }, "execution_count": 61, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd.DataFrame(\n", " cross_validate(\n", " main_pipe,\n", " X_valid,\n", " y_valid,\n", " scoring=['accuracy', 'precision', 'recall', 'f1']\n", " )\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## What We've Learned Today\n", "\n", "- The components of a confusion matrix.\n", "- How to calculate precision, recall, and f1-score.\n", "- How to implement the `class_weight` argument.\n", "- Some of the different scoring metrics used in assessing regression problems; MSE, RMSE, $R^2$, MAPE.\n", "- How to apply different scoring functions with `cross_validate`, `GridSearchCV` and `RandomizedSearchCV`." ] } ], "metadata": { "kernelspec": { "display_name": "571", "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.0" }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": { "height": "calc(100% - 180px)", "left": "10px", "top": "150px", "width": "274.188px" }, "toc_section_display": true, "toc_window_display": true } }, "nbformat": 4, "nbformat_minor": 4 }