diff --git a/Tutorials/Binary Classification Tutorial Level Beginner - CLF101.ipynb b/Tutorials/Binary Classification Tutorial Level Beginner - CLF101.ipynb deleted file mode 100644 index 3189e5f57959ca1a0c82eb57953db408c2b1ca97..0000000000000000000000000000000000000000 --- a/Tutorials/Binary Classification Tutorial Level Beginner - CLF101.ipynb +++ /dev/null @@ -1,3300 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Binary Classification Tutorial (CLF101) - Level Beginner" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Date Updated: Feb 25, 2020**\n", - "\n", - "# 1.0 Objective of Tutorial\n", - "Welcome to Binary Classification Tutorial (#CLF101). This tutorial assumes that you are new to PyCaret and looking to get started with Binary Classification using `pycaret.classification` Module.\n", - "\n", - "In this tutorial we will learn:\n", - "\n", - "\n", - "* **Getting Data:** How to import data from PyCaret repository?\n", - "* **Setting up Environment:** How to setup experiment in PyCaret to get started with building classification models?\n", - "* **Create Model:** How to create a model, perform stratified cross validation and evaluate classification metrics?\n", - "* **Tune Model:** How to automatically tune the hyper-parameters of a classification model?\n", - "* **Plot Model:** How to analyze model performance using various plots?\n", - "* **Finalize Model:** How to finalize the best model at the end of experiment?\n", - "* **Predict Model:** How to make prediction on new / unseen dataset? \n", - "* **Save / Load Model:** How to save / load model for future use?\n", - "\n", - "Read Time : Approx. 30 Minutes\n", - "\n", - "\n", - "## 1.1 Installing PyCaret\n", - "First step to get started with PyCaret is to install pycaret. Installing pycaret is easy and take few minutes only. Follow the instructions below:\n", - "\n", - "#### Installing PyCaret in Local Jupyter Notebook\n", - "`pip install pycaret`
\n", - "\n", - "#### Installing PyCaret on Google Colab or Azure Notebooks\n", - "`!pip install pycaret`\n", - "\n", - "\n", - "## 1.2 Pre-Requisites\n", - "- Python 3.x\n", - "- Latest version of pycaret\n", - "- Internet connection to load data from pycaret's repository\n", - "- Basic Knowledge of Binary Classification\n", - "\n", - "\n", - "## 1.3 For Google colab users:\n", - "If you are running this notebook on Google colab, below code of cells must be run at top of the notebook to display interactive visuals.
\n", - "
\n", - "`from pycaret.utils import enable_colab`
\n", - "`enable_colab()`\n", - "\n", - "\n", - "## 1.4 See also:\n", - "- __[Binary Classification Tutorial (CLF102) - Intermediate Level](https://github.com/pycaret/pycaret/blob/master/Tutorials/Binary%20Classification%20Tutorial%20Level%20Intermediate%20-%20CLF102.ipynb)__\n", - "- __[Binary Classification Tutorial (CLF103) - Expert Level](https://github.com/pycaret/pycaret/blob/master/Tutorials/Binary%20Classification%20Tutorial%20Level%20Expert%20-%20CLF103.ipynb)__" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 2.0 What is Binary Classification?\n", - "Binary classification is a supervised machine learning technique where the goal is to predict the categorical class labels which is discrete and unoredered such as Pass/Fail, Positive/Negative, Default/Not-Default etc. Few real world use case for classification are enlisted below:\n", - "\n", - "- Medical testing to determine if a patient has certain disease or not – the classification property is the presence of the disease.\n", - "- A \"pass or fail\" test method or quality control in factories, i.e. deciding if a specification has or has not been met – a go/no-go classification.\n", - "- Information retrieval, namely deciding whether a page or an article should be in the result set of a search or not – the classification property is the relevance of the article, or the usefulness to the user.\n", - "\n", - "__[Learn More about Binary Classification](https://medium.com/@categitau/in-one-of-my-previous-posts-i-introduced-machine-learning-and-talked-about-the-two-most-common-c1ac6e18df16)__" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 3.0 Overview of Classification Module in PyCaret\n", - "PyCaret's classification module (`pycaret.classification`) is a supervised machine learning module which is used for classifying the elements into binary group based on various techniques and algorithms. Some common use case of classification problem includes Predicting customer default (Yes or No), Predicting Customer Churn (Customer will leave or stay), Disease Found (Positive or Negative).\n", - "\n", - "PyCaret classification module can be used for Binary or Multi-class classification problems. It has over 18 algorithms and 14 plots to analyze the performance of the model. Be it hyper-parameter tuning, ensembling or advanced techniques like stacking, PyCaret's classification module has it all." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 4.0 Dataset for the Tutorial" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "For this tutorial we will use a dataset from UCI called **Default of Credit Card Clients Dataset**. This dataset contains information on default payments, demographic factors, credit data, history of payment, and bill statements of credit card clients in Taiwan from April 2005 to September 2005. There are 24,000 samples and 25 features. Short descriptions for which are as follows:\n", - "\n", - "- **ID:** ID of each client\n", - "- **LIMIT_BAL:** Amount of given credit in NT dollars (includes individual and family/supplementary credit\n", - "- **SEX:** Gender (1=male, 2=female)\n", - "- **EDUCATION:** (1=graduate school, 2=university, 3=high school, 4=others, 5=unknown, 6=unknown)\n", - "- **MARRIAGE:** Marital status (1=married, 2=single, 3=others)\n", - "- **AGE:** Age in years\n", - "- **PAY_0 to PAY_6:** Repayment status n months ago (PAY_0 = last month ... PAY_6 = 6 months ago) Labels: -1=pay duly, 1=payment delay for one month, 2=payment delay for two months, ... 8=payment delay for eight months, 9=payment delay for nine months and above)\n", - "- **BILL_AMT1 to BILL_AMT6:** Amount of bill statement n months ago ( BILL_AMT1 = last_month .. BILL_AMT6 = 6 months ago)\n", - "- **PAY_AMT1 to PAY_AMT6:** Amount of payment n months ago ( BILL_AMT1 = last_month .. BILL_AMT6 = 6 months ago)\n", - "- **default:** Default payment (1=yes, 0=no) `Target Column`\n", - "\n", - "#### Dataset Acknowledgement:\n", - "Lichman, M. (2013). UCI Machine Learning Repository. Irvine, CA: University of California, School of Information and Computer Science.\n", - "\n", - "The original dataset and data dictionary can be __[found here.](https://archive.ics.uci.edu/ml/datasets/default+of+credit+card+clients)__ " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 5.0 Getting the Data" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "You can download the data from the original source __[found here](https://archive.ics.uci.edu/ml/datasets/default+of+credit+card+clients)__ and load it using pandas __[(Learn How)](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html)__ or you can use PyCaret's data respository to load the data using `get_data()` function (This will require internet connection)." - ] - }, - { - "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", - "
LIMIT_BALSEXEDUCATIONMARRIAGEAGEPAY_1PAY_2PAY_3PAY_4PAY_5...BILL_AMT4BILL_AMT5BILL_AMT6PAY_AMT1PAY_AMT2PAY_AMT3PAY_AMT4PAY_AMT5PAY_AMT6default
0200002212422-1-1-2...0.00.00.00.0689.00.00.00.00.01
1900002223400000...14331.014948.015549.01518.01500.01000.01000.01000.05000.00
2500002213700000...28314.028959.029547.02000.02019.01200.01100.01069.01000.00
35000012157-10-100...20940.019146.019131.02000.036681.010000.09000.0689.0679.00
4500001123700000...19394.019619.020024.02500.01815.0657.01000.01000.0800.00
\n", - "

5 rows × 24 columns

\n", - "
" - ], - "text/plain": [ - " LIMIT_BAL SEX EDUCATION MARRIAGE AGE PAY_1 PAY_2 PAY_3 PAY_4 \\\n", - "0 20000 2 2 1 24 2 2 -1 -1 \n", - "1 90000 2 2 2 34 0 0 0 0 \n", - "2 50000 2 2 1 37 0 0 0 0 \n", - "3 50000 1 2 1 57 -1 0 -1 0 \n", - "4 50000 1 1 2 37 0 0 0 0 \n", - "\n", - " PAY_5 ... BILL_AMT4 BILL_AMT5 BILL_AMT6 PAY_AMT1 PAY_AMT2 PAY_AMT3 \\\n", - "0 -2 ... 0.0 0.0 0.0 0.0 689.0 0.0 \n", - "1 0 ... 14331.0 14948.0 15549.0 1518.0 1500.0 1000.0 \n", - "2 0 ... 28314.0 28959.0 29547.0 2000.0 2019.0 1200.0 \n", - "3 0 ... 20940.0 19146.0 19131.0 2000.0 36681.0 10000.0 \n", - "4 0 ... 19394.0 19619.0 20024.0 2500.0 1815.0 657.0 \n", - "\n", - " PAY_AMT4 PAY_AMT5 PAY_AMT6 default \n", - "0 0.0 0.0 0.0 1 \n", - "1 1000.0 1000.0 5000.0 0 \n", - "2 1100.0 1069.0 1000.0 0 \n", - "3 9000.0 689.0 679.0 0 \n", - "4 1000.0 1000.0 800.0 0 \n", - "\n", - "[5 rows x 24 columns]" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from pycaret.datasets import get_data\n", - "dataset = get_data('credit')" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(24000, 24)" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#check the shape of data\n", - "dataset.shape" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In order to demonstrate the `predict_model()` function on unseen data, a sample of 1200 records are taken out from original dataset to be used for predictions. This should not be confused with train/test split. This particular split is performed to simulate real life scenario. Another way to think about this is that these 1200 records are not available at the time when machine learning experiment was performed." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Data for Modeling: (22800, 24)\n", - "Unseen Data For Predictions: (1200, 24)\n" - ] - } - ], - "source": [ - "data = dataset.sample(frac=0.95, random_state=786).reset_index(drop=True)\n", - "data_unseen = dataset.drop(data.index).reset_index(drop=True)\n", - "\n", - "print('Data for Modeling: ' + str(data.shape))\n", - "print('Unseen Data For Predictions: ' + str(data_unseen.shape))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 6.0 Setting up Environment in PyCaret" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "`setup()` function initializes the environment in pycaret and creates the transformation pipeline to prepare the data for modeling and deployment. `setup()` must be called before executing any other function in pycaret. It takes two mandatory parameters: pandas dataframe and name of the target column. All other parameters are optional and are used to customize pre-processing pipeline (we will see them in later tutorials).\n", - "\n", - "When `setup()` is executed PyCaret's inference algorithm will automatically infer the data types for all features based on certain properties. Although, most of the times the data type is inferred correctly but it's not always the case. Therefore, after `setup()` is executed, PyCaret displays a table containing features and their inferred data types. At which stage, you can inspect and press `enter` to continue if all data types are correctly infered or type `quit` to end the experiment. Identifying data types correctly is of fundamental importance in PyCaret as it automatically performs few pre-processing tasks which are imperative to perform any machine learning experiment. These pre-processing tasks are performed differently for each data type. As such, it is very important that data types are correctly configured.\n", - "\n", - "In later tutorials we will learn how to overwrite PyCaret's infered data type using `numeric_features` and `categorical_features` parameter in `setup()`." - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "from pycaret.classification import *" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " \n", - "Setup Succesfully Completed!\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Description Value
0session_id123
1Target TypeBinary
2Label EncodedNone
3Original Data(22800, 24)
4Missing Values False
5Numeric Features 14
6Categorical Features 9
7Ordinal Features False
8High Cardinality Features False
9High Cardinality Method None
10Sampled Data(22800, 24)
11Transformed Train Set(15959, 90)
12Transformed Test Set(6841, 90)
13Numeric Imputer mean
14Categorical Imputer constant
15Normalize False
16Normalize Method None
17Transformation False
18Transformation Method None
19PCA False
20PCA Method None
21PCA Components None
22Ignore Low Variance False
23Combine Rare Levels False
24Rare Level Threshold None
25Numeric Binning False
26Remove Outliers False
27Outliers Threshold None
28Remove Multicollinearity False
29Multicollinearity Threshold None
30Clustering False
31Clustering Iteration None
32Polynomial Features False
33Polynomial Degree None
34Trignometry Features False
35Polynomial Threshold None
36Group Features False
37Feature Selection False
38Features Selection Threshold None
39Feature Interaction False
40Feature Ratio False
41Interaction Threshold None
" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "exp_clf101 = setup(data = data, target = 'default', session_id=123) " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Once the setup is succesfully executed it prints the information grid that contains few important information. Much of the information is related to pre-processing pipeline which is constructed when `setup()` is executed. Much of these features are out of scope for the purpose of this tutorial. However, few important things to note at this stage are:\n", - "\n", - "- **session_id :** A pseduo-random number distributed as a seed in all functions for later reproducibility. If no `session_id` is passed, a random number is automatically generated that is distributed to all functions. In this experiment session_id is set as `123` for later reproducibility.
\n", - "
\n", - "- **Target Type :** Binary or Multiclass. Target type is automatically detected and shown. There is on difference in how the experiment is performed for Binary or Multiclass problems. All functionalities are identical.
\n", - "
\n", - "- **Label Encoded :** When the Target variable is of type string ('Yes' or 'No') instead of 1 or 0. It automatically encodes the label into 1 and 0 and displays the mapping (0 : No, 1 : Yes) for reference. In this experiment No Label encoding is required as target variable is of type numeric.
\n", - "
\n", - "- **Original Data :** Displays the original shape of dataset. In this experiment (22800, 24) means 22,800 samples and 24 features including target column.
\n", - "
\n", - "- **Missing Values :** When there are missing values in original data it will show as True. For this experiment there are no missing values in the dataset.
\n", - "
\n", - "- **Numeric Features :** Number of features inferred as numeric. In this dataset, 14 out of 24 features are inferred as numeric.
\n", - "
\n", - "- **Categorical Features :** Number of features inferred as categorical. In this dataset, 9 out of 24 features are inferred as categorical.
\n", - "
\n", - "- **Transformed Train Set :** Displays the shape of transformed training set. Notice that original shape of (22800, 24) is transformed into (15959, 90) for transformed train set. Number of samples are distributed between train and test/hold-out set (see below) and number of features have increased to 90 from 24 due to categorical encoding
\n", - "
\n", - "- **Transformed Test Set :** Displays the shape of transformed test/hold-out set. There are 6,841 samples in test/hold-out set. This split is based on default value of 70/30 that can be changed using `train_size` parameter in setup.
\n", - "\n", - "Notice that how few tasks that are imperative to perform modeling are automatically handled such as missing value imputation (in this case there are no missing values in training data, but we still need imputers for unseen data), categorical encoding etc. Most of the parameters in `setup()` are optional and used for customizing pre-processing pipeline. These parameters are out of scope for this tutorial but as you progress to intermediate and expert level, we will cover them in much detail)." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 7.0 Comparing All Models" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Comparing all models to evaluate performance is the recommended starting point for modeling once setup is completed (unless you exactly know what kind of model you need, which is often not the case). This function trains all models in the model library and scores them using stratified cross validation for metric evaluation. The output prints a score grid that shows average Accuracy, AUC, Recall, Precision, F1 and Kappa accross the folds (10 by default) of all the available models in the model library." - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "scrolled": false - }, - "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", - "
Model Accuracy AUC Recall Prec. F1 Kappa
0Ridge Classifier0.823600.36460.69320.47760.3836
1Linear Discriminant Analysis0.82360.77030.38130.68180.48880.3923
2Gradient Boosting Classifier0.82250.78870.36490.6870.47630.3813
3CatBoost Classifier0.8220.78670.38730.66910.49040.3917
4Extreme Gradient Boosting0.82180.78940.35950.68620.47150.3767
5Light Gradient Boosting Machine0.82140.78590.38780.66630.490.3908
6Ada Boost Classifier0.81850.77830.35070.67290.46070.3644
7Extra Trees Classifier0.80930.75330.38390.610.47110.362
8Random Forest Classifier0.80840.7380.33370.62540.43490.3323
9Quadratic Discriminant Analysis0.78930.73920.17340.62760.23780.1698
10Logistic Regression0.77860.65080.00060.0750.00110.0001
11K Neighbors Classifier0.75050.60990.18020.36930.24210.1134
12Decision Tree Classifier0.72940.61970.42210.39530.40810.233
13SVM - Linear Kernel0.65300.25470.10560.1120.0121
14Naive Bayes0.36510.64570.9020.24550.38590.0585
" - ], - "text/plain": [ - "" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "compare_models()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Two simple words of code ***(not even a line)*** have created over 15 models using 10 fold stratified cross validation and evaluated 6 most commonly use classification metrics (Accuracy, AUC, Recall, Precision, F1, Kappa). The score grid printed above highlights the highest performing metric for comparison purpose only. The grid by default is sorted using 'Accuracy' (highest to lowest) which can be changed by passing `sort` parameter. For example `compare_models(sort = 'AUC')` will sort the grid by AUC instead of accuracy. If you want to change the fold parameter from default value of `10` to a different value then you can use fold parameter. For example `compare_models(fold = 5)` to compare all models on 5 fold cross validation. Reducing the number of folds will improve the training time." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 8.0 Create a Model" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "While `compare_models()` is a great function and often a starting point in any experiment, it doesn't return you any trained model. PyCaret's recommended experiment workflow is to use `compare_models()` right after setup to evaluate top performing models and finalize few candidate models to continue the experiment. As such, the function that actually allows to you create a model is unimaginatively called `create_model()`. This function creates a model and scores it using stratified cross validation. Similar to `compare_models()`, the output prints a score grid that shows Accuracy, AUC, Recall, Precision, F1 and Kappa by fold. \n", - "\n", - "For the remaining part of this tutorial, we will work with the below models as our candidate models, our choice of selecting them as candidate model is for illustration purpose only and doesn't necessarily mean they are top performing or ideal model for this type of data.\n", - "\n", - "- Decision Tree Classifier ('dt')\n", - "- K Neighbors Classifier ('knn')\n", - "- Random Forest Classifier ('rf')\n", - "\n", - "There are 18 classifiers available in the model library of PyCaret. Please see docstring of `create_model()` for the list of all available models." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 8.1 Decision Tree Classifier" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "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", - "
AccuracyAUCRecallPrec.F1Kappa
00.73250.62130.42210.40050.41100.2381
10.72370.61990.43060.38780.40810.2285
20.74000.63610.45040.41840.43380.2654
30.71550.59840.38530.36460.37470.1907
40.73750.61750.40230.40570.40400.2356
50.73560.63760.46180.41270.43580.2639
60.72370.62100.43630.38890.41120.2315
70.73870.63650.45330.41670.43420.2647
80.72620.60620.39090.38330.38710.2108
90.72100.60300.38810.37430.38110.2011
Mean0.72940.61970.42210.39530.40810.2330
SD0.00810.01340.02740.01750.02110.0252
\n", - "
" - ], - "text/plain": [ - " Accuracy AUC Recall Prec. F1 Kappa\n", - "0 0.7325 0.6213 0.4221 0.4005 0.4110 0.2381\n", - "1 0.7237 0.6199 0.4306 0.3878 0.4081 0.2285\n", - "2 0.7400 0.6361 0.4504 0.4184 0.4338 0.2654\n", - "3 0.7155 0.5984 0.3853 0.3646 0.3747 0.1907\n", - "4 0.7375 0.6175 0.4023 0.4057 0.4040 0.2356\n", - "5 0.7356 0.6376 0.4618 0.4127 0.4358 0.2639\n", - "6 0.7237 0.6210 0.4363 0.3889 0.4112 0.2315\n", - "7 0.7387 0.6365 0.4533 0.4167 0.4342 0.2647\n", - "8 0.7262 0.6062 0.3909 0.3833 0.3871 0.2108\n", - "9 0.7210 0.6030 0.3881 0.3743 0.3811 0.2011\n", - "Mean 0.7294 0.6197 0.4221 0.3953 0.4081 0.2330\n", - "SD 0.0081 0.0134 0.0274 0.0175 0.0211 0.0252" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "dt = create_model('dt')" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "DecisionTreeClassifier(ccp_alpha=0.0, class_weight=None, criterion='gini',\n", - " max_depth=None, max_features=None, max_leaf_nodes=None,\n", - " min_impurity_decrease=0.0, min_impurity_split=None,\n", - " min_samples_leaf=1, min_samples_split=2,\n", - " min_weight_fraction_leaf=0.0, presort='deprecated',\n", - " random_state=123, splitter='best')\n" - ] - } - ], - "source": [ - "#trained model object is stored in the variable 'dt'. \n", - "print(dt)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 8.2 K Neighbors Classifier" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "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", - "
AccuracyAUCRecallPrec.F1Kappa
00.74060.58790.16710.32960.22180.0857
10.73500.57870.14730.29890.19730.0601
20.76320.66480.20960.42770.28140.1590
30.74620.59840.15300.33750.21050.0842
40.75500.60980.20400.39560.26920.1397
50.76130.62030.18700.41250.25730.1384
60.74120.58830.16710.33150.22220.0868
70.75940.61390.18980.40610.25870.1371
80.74870.61000.18980.36810.25050.1177
90.75420.62640.18700.38600.25190.1256
Mean0.75050.60990.18020.36930.24210.1134
SD0.00910.02340.01970.04070.02600.0305
\n", - "
" - ], - "text/plain": [ - " Accuracy AUC Recall Prec. F1 Kappa\n", - "0 0.7406 0.5879 0.1671 0.3296 0.2218 0.0857\n", - "1 0.7350 0.5787 0.1473 0.2989 0.1973 0.0601\n", - "2 0.7632 0.6648 0.2096 0.4277 0.2814 0.1590\n", - "3 0.7462 0.5984 0.1530 0.3375 0.2105 0.0842\n", - "4 0.7550 0.6098 0.2040 0.3956 0.2692 0.1397\n", - "5 0.7613 0.6203 0.1870 0.4125 0.2573 0.1384\n", - "6 0.7412 0.5883 0.1671 0.3315 0.2222 0.0868\n", - "7 0.7594 0.6139 0.1898 0.4061 0.2587 0.1371\n", - "8 0.7487 0.6100 0.1898 0.3681 0.2505 0.1177\n", - "9 0.7542 0.6264 0.1870 0.3860 0.2519 0.1256\n", - "Mean 0.7505 0.6099 0.1802 0.3693 0.2421 0.1134\n", - "SD 0.0091 0.0234 0.0197 0.0407 0.0260 0.0305" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "knn = create_model('knn')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 8.3 Random Forest Classifier" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "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", - "
AccuracyAUCRecallPrec.F1Kappa
00.80640.74350.32290.61960.42460.3218
10.80760.74880.33140.62230.43250.3295
20.81700.75760.36830.65330.47100.3707
30.81390.71750.35130.64580.45500.3544
40.80260.71990.28900.61450.39310.2930
50.81140.74460.35690.63000.45570.3520
60.80080.72860.32580.58970.41970.3113
70.80700.75020.31440.62710.41890.3181
80.81140.72620.33710.63980.44160.3410
90.80630.74280.33990.61220.43720.3315
Mean0.80840.73800.33370.62540.43490.3323
SD0.00480.01310.02160.01740.02130.0217
\n", - "
" - ], - "text/plain": [ - " Accuracy AUC Recall Prec. F1 Kappa\n", - "0 0.8064 0.7435 0.3229 0.6196 0.4246 0.3218\n", - "1 0.8076 0.7488 0.3314 0.6223 0.4325 0.3295\n", - "2 0.8170 0.7576 0.3683 0.6533 0.4710 0.3707\n", - "3 0.8139 0.7175 0.3513 0.6458 0.4550 0.3544\n", - "4 0.8026 0.7199 0.2890 0.6145 0.3931 0.2930\n", - "5 0.8114 0.7446 0.3569 0.6300 0.4557 0.3520\n", - "6 0.8008 0.7286 0.3258 0.5897 0.4197 0.3113\n", - "7 0.8070 0.7502 0.3144 0.6271 0.4189 0.3181\n", - "8 0.8114 0.7262 0.3371 0.6398 0.4416 0.3410\n", - "9 0.8063 0.7428 0.3399 0.6122 0.4372 0.3315\n", - "Mean 0.8084 0.7380 0.3337 0.6254 0.4349 0.3323\n", - "SD 0.0048 0.0131 0.0216 0.0174 0.0213 0.0217" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "rf = create_model('rf')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Notice that Mean score of all models matches with the score printed in `compare_models()`. This is because the metrics printed in `compare_models()` score grid are average score of CV folds. Similar to `compare_models()`, if you want to change the fold parameter from default value of 10 to a different value then you can use fold parameter, For Example: `create_model('dt', fold = 5)` to create Decision Tree Classifier using 5 fold stratified CV." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 9.0 Tune a Model" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "When a model is created using `create_model()` function, it uses the default hyperparameters of the model. In order to tune the hyperparameter of any model, `tune_model()` function is used. This function automatically tunes the hyperparameters of a model on a pre-defined search space and scores it using stratified cross validation. The output prints a score grid that shows Accuracy, AUC, Recall Precision, F1 and Kappa by fold.
\n", - "
\n", - "**Note:** `tune_model()` does not take a trained model object as an input instead it requires model name to be passed as an abbreviated string similar to how it is passed in `create_model()`. All other functions in `pycaret.classification` requires a trained model object as argument." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 9.1 Decision Tree Classifier" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "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", - "
AccuracyAUCRecallPrec.F1Kappa
00.82640.72190.32010.75330.44930.3656
10.82390.72590.30590.75000.43460.3515
20.81580.75480.29460.69800.41430.3258
30.82080.71710.31730.71340.43920.3508
40.81330.71780.31730.66270.42910.3337
50.82390.73590.30030.75710.43000.3481
60.81640.71970.29750.70000.41750.3290
70.82640.74080.30310.77540.43580.3557
80.82140.71580.30030.73610.42660.3423
90.81070.73220.30030.65840.41250.3179
Mean0.81990.72820.30570.72040.42890.3420
SD0.00530.01200.00870.03840.01110.0143
\n", - "
" - ], - "text/plain": [ - " Accuracy AUC Recall Prec. F1 Kappa\n", - "0 0.8264 0.7219 0.3201 0.7533 0.4493 0.3656\n", - "1 0.8239 0.7259 0.3059 0.7500 0.4346 0.3515\n", - "2 0.8158 0.7548 0.2946 0.6980 0.4143 0.3258\n", - "3 0.8208 0.7171 0.3173 0.7134 0.4392 0.3508\n", - "4 0.8133 0.7178 0.3173 0.6627 0.4291 0.3337\n", - "5 0.8239 0.7359 0.3003 0.7571 0.4300 0.3481\n", - "6 0.8164 0.7197 0.2975 0.7000 0.4175 0.3290\n", - "7 0.8264 0.7408 0.3031 0.7754 0.4358 0.3557\n", - "8 0.8214 0.7158 0.3003 0.7361 0.4266 0.3423\n", - "9 0.8107 0.7322 0.3003 0.6584 0.4125 0.3179\n", - "Mean 0.8199 0.7282 0.3057 0.7204 0.4289 0.3420\n", - "SD 0.0053 0.0120 0.0087 0.0384 0.0111 0.0143" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "tuned_dt = tune_model('dt')" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "DecisionTreeClassifier(ccp_alpha=0.0, class_weight=None, criterion='gini',\n", - " max_depth=3, max_features=78, max_leaf_nodes=None,\n", - " min_impurity_decrease=0.0, min_impurity_split=None,\n", - " min_samples_leaf=3, min_samples_split=2,\n", - " min_weight_fraction_leaf=0.0, presort='deprecated',\n", - " random_state=123, splitter='best')\n" - ] - } - ], - "source": [ - "#tuned model object is stored in the variable 'tuned_dt'. \n", - "print(tuned_dt)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 9.2 K Neighbors Classifier" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "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", - "
AccuracyAUCRecallPrec.F1Kappa
00.77380.64940.07080.43100.12170.0632
10.77690.66620.06520.46940.11440.0640
20.78380.70610.11610.55410.19200.1250
30.77690.64070.06230.46810.11000.0612
40.77690.65070.07080.47170.12320.0694
50.77880.68580.08780.50000.14940.0892
60.78070.65160.07650.52940.13370.0824
70.78450.65910.09350.57890.16100.1060
80.77690.65650.06520.46940.11440.0640
90.78120.68070.09350.53230.15900.0995
Mean0.77910.66470.08020.50040.13790.0824
SD0.00320.01920.01630.04420.02530.0209
\n", - "
" - ], - "text/plain": [ - " Accuracy AUC Recall Prec. F1 Kappa\n", - "0 0.7738 0.6494 0.0708 0.4310 0.1217 0.0632\n", - "1 0.7769 0.6662 0.0652 0.4694 0.1144 0.0640\n", - "2 0.7838 0.7061 0.1161 0.5541 0.1920 0.1250\n", - "3 0.7769 0.6407 0.0623 0.4681 0.1100 0.0612\n", - "4 0.7769 0.6507 0.0708 0.4717 0.1232 0.0694\n", - "5 0.7788 0.6858 0.0878 0.5000 0.1494 0.0892\n", - "6 0.7807 0.6516 0.0765 0.5294 0.1337 0.0824\n", - "7 0.7845 0.6591 0.0935 0.5789 0.1610 0.1060\n", - "8 0.7769 0.6565 0.0652 0.4694 0.1144 0.0640\n", - "9 0.7812 0.6807 0.0935 0.5323 0.1590 0.0995\n", - "Mean 0.7791 0.6647 0.0802 0.5004 0.1379 0.0824\n", - "SD 0.0032 0.0192 0.0163 0.0442 0.0253 0.0209" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "tuned_knn = tune_model('knn')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 9.3 Random Forest Classifier" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "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", - "
AccuracyAUCRecallPrec.F1Kappa
00.82890.78710.34840.74100.47400.3873
10.82270.79900.35130.69660.46700.3743
20.82210.82510.38240.67160.48740.3894
30.82270.77400.36260.68820.47500.3804
40.82270.77950.35130.69660.46700.3743
50.82390.79180.35980.69780.47480.3817
60.82020.75360.33430.69410.45120.3591
70.83020.79350.35690.74120.48180.3948
80.82140.76490.35410.68680.46730.3729
90.81380.78240.35980.64140.46100.3590
Mean0.82290.78510.35610.69550.47070.3773
SD0.00430.01860.01160.02790.00980.0113
\n", - "
" - ], - "text/plain": [ - " Accuracy AUC Recall Prec. F1 Kappa\n", - "0 0.8289 0.7871 0.3484 0.7410 0.4740 0.3873\n", - "1 0.8227 0.7990 0.3513 0.6966 0.4670 0.3743\n", - "2 0.8221 0.8251 0.3824 0.6716 0.4874 0.3894\n", - "3 0.8227 0.7740 0.3626 0.6882 0.4750 0.3804\n", - "4 0.8227 0.7795 0.3513 0.6966 0.4670 0.3743\n", - "5 0.8239 0.7918 0.3598 0.6978 0.4748 0.3817\n", - "6 0.8202 0.7536 0.3343 0.6941 0.4512 0.3591\n", - "7 0.8302 0.7935 0.3569 0.7412 0.4818 0.3948\n", - "8 0.8214 0.7649 0.3541 0.6868 0.4673 0.3729\n", - "9 0.8138 0.7824 0.3598 0.6414 0.4610 0.3590\n", - "Mean 0.8229 0.7851 0.3561 0.6955 0.4707 0.3773\n", - "SD 0.0043 0.0186 0.0116 0.0279 0.0098 0.0113" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "tuned_rf = tune_model('rf')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "`tune_model()` function is a random grid search of hyperparameters over a pre-defined search space. By default, it is set to optimize `Accuracy` but this can be changed using `optimize` parameter. For example: `tune_model('dt', optimize = 'AUC')` will search for hyperparameters of Decision Tree Classifier that results in highest `AUC`. For the purpose of this example, we have used the default metric `Accuracy` for the sake of simplicity only. Generally, when the dataset is imbalanced (such as the credit dataset we are working on) `Accuracy` is not a good metric to consider. How to choose the right metric to evaluate classifier is beyond the scope of this tutorial. However if you would like to learn more about it, you can __[click here](https://medium.com/@george.drakos62/how-to-select-the-right-evaluation-metric-for-machine-learning-models-part-3-classification-3eac420ec991)__ to read an article on how to choose the right evaluation metric.\n", - "\n", - "Notice how the results after tuning have been improved:\n", - "\n", - "- Decision Tree Classifier (Before: **`0.7294`** , After: **`0.8199`**)\n", - "- K Neighbors Classifier (Before: **`0.7505`** , After: **`0.7791`**)\n", - "- Random Forest Classifier (Before: **`0.8084`** , After: **`0.8229`**)\n", - "\n", - "Although metrics alone are not the only criteria you should consider when finalizing the best model for production. There are few other factors to consider such as training time, standard deviation of kfolds etc. As you progress through the tutorial, we have discussed those factors in detail in Intermediate and Expert levels. For now, let's move forward considering Random Forest Classifier as our best model. We will complete the remaining tutorial using Tuned Random Forest Classifier." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 10.0 Plot a Model" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Before finalizing the model, `plot_model()` function can be used to analyze the performance of model over different aspects such as AUC, confusion_matrix, decision boundary etc. This function takes a trained model object and returns a plot based on the test / hold-out set. \n", - "\n", - "There are 15 different plots available, please see docstring of `plot_model()` for list of available plots." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 10.1 AUC Plot" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plot_model(tuned_rf, plot = 'auc')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 10.2 Precision-Recall Curve" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAfYAAAFlCAYAAAAZGcpRAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nOzdd3gUVdvA4d/sbkIaLfROKKFIiQFCS+jwUgWlR0FUBBULIqKCKKIUwU+kiFiwBJQXBEUBBaUXASEU6b13CCSkbZk53x8b9iUmQESWTTbP7cVlduZk5pnJJs+eM6doSimFEEIIIbyCydMBCCGEEOLekcQuhBBCeBFJ7EIIIYQXkcQuhBBCeBFJ7EIIIYQXkcQuhBBCeBGLpwMQ2cPp06dp3bo1oaGhrm1KKfr27Uu3bt3uyTkmT55MuXLl6NKlyy3LdO7cmVmzZpEvX757cs4WLVrg4+ODn58fmqZhs9kwmUwMGzaMJk2a3JNz3KxKlSps3LiR1atXs2zZMj799NMMZaxWK5988gmrV69GKYVhGHTq1Imnn34aTdPueUy3s379ekaOHEmhQoWYPXs2fn5+//gYmzdv5umnnyYkJMS1LSkpiUqVKjFu3DgKFix4T2IdPXo0BQsW5IUXXrgnx6tSpQqhoaGYTP+r39SoUYMxY8bck+Pfyl9//cX8+fMZPXo0ALquExMTw6JFi9B1HbvdTvPmzXnppZfw9fXl9ddfp3Llyjz11FP3LIYVK1awceNG3nzzTfbt28cLL7xAvnz56NKlCydPnuTNN9+8Z+cS958kduHi5+fHTz/95Hp94cIFOnbsSI0aNahateq/Pv5LL710xzI3n/9e+eCDD6hZs6br9dKlSxk+fDjr16+/5+e6E6UUzz33HCEhIcydO5c8efJw9epVBg4cSHJyMoMHD76v8SxZsoTu3bvz3HPP/avjlC1bNt3PTtd1XnjhBb788kteeeWVfxum23zzzTcEBwff13MePnyYCxcuuF6PGjWK+Ph4vvnmG/LmzUtycjJDhw5lxIgRTJw40S0xtGzZkpYtWwLOJF+/fn23f6AR948kdnFLxYoVo1y5chw/fpy9e/cyf/58UlJSCAoKYtasWXz//ffMmTMHwzAoUKAAI0eOpGLFiiQlJfHee++xbds2zGYzrVq14uWXX+aNN95w1TymTJnC77//jo+PDwULFmTcuHEULVrUVeMNDg7m448/ZsmSJZjNZkJCQhg5ciRFihShT58+hIWFsW3bNs6dO0fDhg15991309W8bkUpxenTp8mfP79r2z+9juPHjzN69GiSkpK4dOkSVatW5aOPPiJPnjx3PP+WLVs4evQon332GWazGYCCBQsyYcIEzpw5A0CfPn149NFHadu2bYbXNWrUoGXLluzfv59u3boRGxvLjBkzADhy5Aj9+vVj9erVHD9+nDFjxnDt2jV0XadPnz4ZWl6++OILVqxYQZ48ebh+/TpDhgxh/PjxbNy4EbPZTK1atXjjjTcICgqiRYsW1KpViwMHDjBkyBBat2592+tMTEwkLi6O8PBwAHbs2MHEiROx2WxcunSJRo0aMXbsWE6fPk2/fv1o2rQpO3fuJCEhgVdffZXWrVuTmJjIiBEj2L9/P0WLFsVsNlOnTh0ADh06xOjRo7l27RqapvHkk0/SpUsXNm/ezIcffkiJEiU4duwY/v7+DBgwgFmzZnHs2DHatGnD8OHD7/hz2rp1KxMmTCAlJQUfHx8GDx5MkyZN+OGHH7L8e7B161bGjx+PYRgADBw4kFq1ajFlyhSuX7/OG2+8waBBg1i0aBHr168nKCgIgICAAN555x22bduWIa758+czd+5c7HY78fHxPP3000RHR3Pp0iVee+01rl69CkDTpk0ZPHjwLbf/8MMPLFu2jA4dOjBnzhx0XSc1NZXGjRu7WpquX7/OmDFjOHjwIHa7nYYNGzJs2DAsFku69+HfPziLbEAJoZQ6deqUCgsLS7dt27Ztql69eurs2bNqwYIFql69eur69etKKaU2b96soqOjVXJyslJKqXXr1qm2bdsqpZQaO3asevnll5XD4VBWq1U9+uijatOmTeq1115TX3zxhTp79qwKDw9XVqtVKaXUzJkz1e+//66UUio0NFRduXJFzZ8/X/Xs2VMlJSUppZSaMmWKevLJJ5VSSj322GPqxRdfVLquq+vXr6vIyEi1cePGTK+refPmqk2bNqpTp04qKipKRUVFqTfeeEOdPHnyrq9j/PjxauHChUoppWw2m+rYsaNaunRpuvgXLFigBgwYkCGemTNnqhdffPG2P4vHHntM/frrr5m+Dg0NVT/++KNSSqnr16+runXrqosXLyqllJowYYL68MMPld1uV+3bt1e7d+9WSimVkJCg2rVrp7Zv357hXDd+JkopNXnyZPX8888rm82mdF1Xr7/+uho5cqTrPk6bNi3TeDdt2qRq1qypHnroIdW+fXvVoEED1aVLF/Xpp58qm82mlFLq5ZdfVps2bVJKKZWYmKjq16+vdu3apU6dOqVCQ0PVypUrlVJKLV26VDVr1kwppdSYMWPUsGHDlGEY6sqVK6pJkyZqypQpym63q5YtW6ply5YppZQ6f/68ioqKUtu2bVObNm1S1apVU3v27FFKKfXUU0+pnj17KqvVqq5cuaIeeOABdf78ede97Nixo3rooYdc/y5fvqzi4uJUw4YN1Y4dO5RSSh08eFBFRESokydP/qPfg759+6rFixcrpZTat2+fGjVqlFJKpXtvLF26VHXt2vW274cbP6PExETVo0cPFRcXp5RSavv27a7f2WnTprl+VklJSWrw4MEqISHhlttvjmHKlCnqnXfeyRDb66+/rmJiYpRSSjkcDjV06FD12Wefue7djfehyH6kxi5cUlNT6dy5M+BsSi1YsCATJ06kRIkSgPOZ5I1axerVqzlx4gS9evVyfX9CQgLXrl3jjz/+4I033sBsNmM2m5k9ezYAP/74I+BsCahatSoPP/wwTZo0oUmTJjRs2DBdLGvXruWRRx4hICAAgL59+zJjxgxsNhsAzZs3x2QyERQURLly5YiPj7/ldd2oUZw6dYonnniCatWqUaZMmbu+jnr16rFhwwY+//xzjh8/zsWLF0lOTs7SPTaZTKh/OYtz3bp1AQgKCqJ169b8/PPP9OvXj0WLFvHtt99y/PhxTp48ma5mmpqayt69ewkLC7vlcdeuXcvLL7+Mj48P4GwpGDRoUIbzZubmpvgFCxYwadIk2rVr5zrW+PHjWbt2LTNmzODo0aNYrVaSk5MpUKAAPj4+NG3aFIDq1atz7do1ADZu3Mjw4cPRNI3g4GBXK8Hx48exWq20adMGcL6f2rRpw7p166hfvz6lS5emevXqrrjy5s2Lr68vwcHBBAYGEh8fT7FixYDMm+LXrFlD2bJlqV27NgCVK1cmPDycP//8E03Tsvx70K5dO0aPHs3KlStp1KgRQ4YMyXDfTCaTq0Z/J4GBgcyYMYM1a9Zw/Phx9u/f73rfRUVFMWDAAM6dO0ejRo145ZVXyJs37y23Z8Xq1avZtWsX8+fPB5zvoZvd7v0gPEsSu3D5+zP2v7uRZAEMw6Bz5868+uqrrtcXL14kf/78WCyWdJ3Azp07l65TlslkYvbs2ezatYuNGzcyduxYoqKiGDZsWLrj33wMwzBwOBzpYr1B0zSUUsyZM4f//ve/QOadoMqUKcOECRPo27cvtWvXplatWnd1He+88w66rtOuXTuaNWvGuXPnspysa9euzTfffIOu666meHB2qJo1a5brmerNx7Pb7emOcfPPoUePHq6m34oVK1KmTBkOHDhA3rx50/0sL1++fMc/6Jnd85vPffN5b6dr167s3LmTl156iXnz5mGxWHjssceoUqUKUVFRtGvXjp07d7qu0cfHx/UY5e+dB2++Dzful67rmZa78f7w9fVNt89i+Wd/5m53fB8fnyz/HvTq1YvmzZuzYcMG1q1bx7Rp01i6dGm649aqVYujR4+SmJjo+rAAzv4tI0eOZMqUKa5t58+fp2fPnvTo0YM6derQtm1bVq1a5TrOjQ5xmzZtonv37nz++ee33J4VhmEwefJkKlasCDg/sNx8X7L6fhD3nwx3E3clMjKSJUuWcPHiRQDmzJnD448/DkDDhg358ccfMQwDm83Giy++yJYtW1zfu3//fjp27EjFihUZOHAg/fr1Y9euXemOHxUVxYIFC1w1klmzZlGvXr0Mf7Rv1rt3b3766Sd++umnW3YECg8Pp0uXLowaNQrDMO7qOtavX8+gQYNo3749ADt37kTX9SzdtwcffJAKFSowbtw4rFYr4Ey67733HqVLlwYgODiY3bt3A86OVgcOHLjl8W7UwD/++GO6d+8OQEhISLoPaefOnaNjx46uY95KVFQUc+bMwW63YxgG3377LY0bN87Sdf3d0KFDOXfuHN9++y0JCQns2rWLoUOH0qZNG86fP8/JkyfvWFONiopi/vz5GIZBfHw8K1asAKBChQpYLBZ+++03wJkEly1bRqNGje4q1r8LCwvj6NGj/PXXX4Dzef6WLVuIiIjIUPZ2759evXqxb98+HnnkEd59910SEhK4dOkSZrPZ9SGkWLFidOrUieHDh5OYmAg4+yeMGjWKAgUKpPsAu3v3boKDg3nuueeIjIx0JXVd1/nggw+YPn06rVq1YsSIEVSqVIlDhw7dcntWREZG8vXXX6OUwmaz8eyzz7parUT2JjV2cVciIyN5+umnefLJJ9E0jaCgIKZN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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plot_model(tuned_rf, plot = 'pr')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 10.3 Feature Importance Plot" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plot_model(tuned_rf, plot='feature')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 10.4 Confusion Matrix" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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/Y89amSbPw99HzlyRD179lT9+vXl5uYmSerWrZv27t2r+fPn6/fff9eJEydUo0YN27x/HpL08PCQm5ubrly5oh07dujJJ59UgQIFJElt27ZVRESEJGnbtm1avHixLBaLXFxc1LFjRy1YsEA9e/aUJD311FOSpNKlS8vb21seHh6SJC8vL125csU2bkaHvhMTE7V//3598sknkqSCBQuqTZs22rZtm2rUqCEnJyfVrFlT0q093PPnz+vVV1+1zW+xWPTTTz+pSZMm6tmzp86ePauGDRtqwIABKliwoN34Dg63LhuxWq3/ahtPmDBB27Zt04cffqhff/1VSUlJSkxMVKVKleTo6Kh27dqpcePGeuqpp1S9enVdvXo1w/aYmJgsx9qyZYuioqLUtm1bW403btyw9f/f//1fhvM5ODj847norLavs7OzmjVrJkmqUqWKLl++/K+2zZ8y2+7ZMb6bm5uqV6+uLVu2qFmzZtq7d69Gjx5t6/f09FR4eLjWrFmjkydP6tChQ0pISMhwWbe/rm6XL18+TZs2Te3bt1dQUJCCgoLuaHvg/sPFZMh2VatW1dChQzVkyBBbIEyaNEkzZsxQkSJF1KFDBzVq1MjuzdzV1dX2t8VisfXdPs2fh1GlW6FhsVjsnqemptqeOzs7Z/j3v2G1WtMFze3Ld3FxkZPTrc+8aWlpKl++vFatWmV7LFmyRI0bN1b16tW1efNmdejQQadPn1a7du10+PBhu+UWLlxYZcuW1aFDh9LV8frrr+vYsWN2bZ07d9bWrVtVrlw5vfrqq3J3d5dhGCpUqJBWrVqlwYMHy9HRUf369dOiRYsybf+326FHjx629Vq2bJkWL15s68/s9EGNGjUUFRWltLQ0u/Yff/xRAwcOzHL7Ojs72z7A3P5vfLvbXyOSlJKSYvs7q+1+L8a/XUhIiFavXq2NGzfK39/f9tqQpCNHjqhDhw66fv26GjVqpB49emS6nNtfV3/322+/6ZFHHlF0dHS60yF48BDUyBEBAQGqXr263n33XUnS999/r27duikkJERubm7avn17ujfyv2vatKnWr1+vq1evymq1atWqVba+xo0bKzIyUoZhKDk5WUuXLlXDhg3vSe0FChRQjRo1bIF27do1rVy5MsPl16xZUydPntSePXsk3brg6amnnlJcXJwmT56s2bNn64knntDbb7+t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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plot_model(tuned_rf, plot = 'confusion_matrix')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Another way to analyze performance of models is to use evaluate_model() function which displays a user interface for all of the available plots for a given model. It internally uses the plot_model() function. " - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "19a7e9d1631c465f9fec92694230ab23", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "interactive(children=(ToggleButtons(description='Plot Type:', icons=('',), options=(('Hyperparameters', 'param…" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "evaluate_model(tuned_rf)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 11.0 Predict on test / hold-out Sample" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Before finalizing the model, it is advisable to perform one final check by predicting the test/hold-out set and evaluate metrics on hold-out set. If you see information grid in Section 6 above, you will see that 30% (6,841 samples) of the data has been separated out as test/hold-out sample. All the evaluation metrics we have seen above is cross validated results based on training set (70%) only. Now using our final trained model stored in `tuned_rf` variable we will predict the hold-out sample and evaluate the metrics to see if they are materially different than the CV results." - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "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", - "
ModelAccuracyAUCRecallPrec.F1Kappa
0Random Forest Classifier0.81260.75380.32120.65590.43120.3345
\n", - "
" - ], - "text/plain": [ - " Model Accuracy AUC Recall Prec. F1 Kappa\n", - "0 Random Forest Classifier 0.8126 0.7538 0.3212 0.6559 0.4312 0.3345" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "predict_model(tuned_rf);" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Accuracy on test/hold-out set is **`0.8126`** compared to **`0.8229`** achieved on `tuned_rf` CV results (in section 9.3 above). This is not a significant difference. If the difference between test/hold-out and CV results is large, this would normally indicate over-fitting, but could also be due to several other factors and would require investigation. In this case, we will move forward with finalizing this model and predict on unseen data (5% that we had separated in the beginning - that was never exposed to PyCaret).\n", - "\n", - "(TIP : It's always good to look at the standard deviation of CV results when using `create_model()`." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 12.0 Finalize Model for Deployment" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Finalize Model is the last step in the experiment. A normal machine learning workflow in PyCaret starts with `setup()`, followed by comparing all models using `compare_models()` and shortlisting few candidate models (based on the metric of interest) to perform several modeling techniques such as hyperparameter tuning, ensembling, stacking etc. This workflow will eventually lead you to the best model which you would like to use for making prediction on new and unseen data. `finalize_model()` function fits the model onto the complete dataset including test/hold-out sample (30% in this case). The purpose of this function is to train the model on complete dataset before it is deployed in production." - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": {}, - "outputs": [], - "source": [ - "final_rf = finalize_model(tuned_rf)" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "RandomForestClassifier(bootstrap=True, ccp_alpha=0.0, class_weight=None,\n", - " criterion='gini', max_depth=10, max_features='auto',\n", - " max_leaf_nodes=None, max_samples=None,\n", - " min_impurity_decrease=0.0, min_impurity_split=None,\n", - " min_samples_leaf=2, min_samples_split=10,\n", - " min_weight_fraction_leaf=0.0, n_estimators=70,\n", - " n_jobs=None, oob_score=False, random_state=123,\n", - " verbose=0, warm_start=False)\n" - ] - } - ], - "source": [ - "#Final Random Forest model parameters for deployment\n", - "print(final_rf)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Caution:** One final word of caution. Once the model is finalized using `finalize_model()`, entire dataset including test/hold-out set is used for training. As such, if the model is used for predictions on hold-out after `finalize_model()`, the information grid printed is misleading as you are trying to predict the same data that was used for modeling. In order to only demonstrate this point, we will use `final_rf` under `predict_model()` to compare the information grid with the one above in section 11. " - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "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", - "
ModelAccuracyAUCRecallPrec.F1Kappa
0Random Forest Classifier0.83610.81890.36810.77150.49840.4148
\n", - "
" - ], - "text/plain": [ - " Model Accuracy AUC Recall Prec. F1 Kappa\n", - "0 Random Forest Classifier 0.8361 0.8189 0.3681 0.7715 0.4984 0.4148" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "predict_model(final_rf);" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Notice that how AUC in the `final_rf` is increased to **`0.8189`** from **`0.7538`**, even though the model is same. This is because `final_rf` variable is trained on the complete dataset including test/hold-out set." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 13.0 Predict on unseen data" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "`predict_model()` function is also used to predict the unseen dataset. The only difference from section 11 above is this time we will pass `data_unseen` in data parameter of `predict_model()`. `data_unseen` is the variable created in the beginning and it contains 5% (1200 samples) of the original dataset that was never exposed to PyCaret. (see section 5 for explainantion)" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "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", - "
LIMIT_BALSEXEDUCATIONMARRIAGEAGEPAY_1PAY_2PAY_3PAY_4PAY_5...BILL_AMT6PAY_AMT1PAY_AMT2PAY_AMT3PAY_AMT4PAY_AMT5PAY_AMT6defaultLabelScore
0500002214800000...8011.02028.02453.02329.0431.0300.0500.0000.1498
12000002114022222...89112.04200.04100.03000.03400.03500.00.0110.7986
2500002314412324...15798.02100.01000.02300.00.00.00.0110.6261
3600002213122-100...30384.01132.060994.01436.01047.01056.01053.0110.5063
412000023232-10000...81354.02429.03120.03300.010000.03200.03200.0000.1479
\n", - "

5 rows × 26 columns

\n", - "
" - ], - "text/plain": [ - " LIMIT_BAL SEX EDUCATION MARRIAGE AGE PAY_1 PAY_2 PAY_3 PAY_4 \\\n", - "0 50000 2 2 1 48 0 0 0 0 \n", - "1 200000 2 1 1 40 2 2 2 2 \n", - "2 50000 2 3 1 44 1 2 3 2 \n", - "3 60000 2 2 1 31 2 2 -1 0 \n", - "4 120000 2 3 2 32 -1 0 0 0 \n", - "\n", - " PAY_5 ... BILL_AMT6 PAY_AMT1 PAY_AMT2 PAY_AMT3 PAY_AMT4 PAY_AMT5 \\\n", - "0 0 ... 8011.0 2028.0 2453.0 2329.0 431.0 300.0 \n", - "1 2 ... 89112.0 4200.0 4100.0 3000.0 3400.0 3500.0 \n", - "2 4 ... 15798.0 2100.0 1000.0 2300.0 0.0 0.0 \n", - "3 0 ... 30384.0 1132.0 60994.0 1436.0 1047.0 1056.0 \n", - "4 0 ... 81354.0 2429.0 3120.0 3300.0 10000.0 3200.0 \n", - "\n", - " PAY_AMT6 default Label Score \n", - "0 500.0 0 0 0.1498 \n", - "1 0.0 1 1 0.7986 \n", - "2 0.0 1 1 0.6261 \n", - "3 1053.0 1 1 0.5063 \n", - "4 3200.0 0 0 0.1479 \n", - "\n", - "[5 rows x 26 columns]" - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "unseen_predictions = predict_model(final_rf, data=data_unseen)\n", - "unseen_predictions.head()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "`Label` and `Score` columns are added into the `data_unseen`. Label is the prediction and score is the probability of prediction. Notice that predicted results are concated to the original dataset while all the transformations are automatically performed in the background." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 14.0 Saving the model" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We have now finished the experiment by finalizing the `tuned_rf` model which is now stored in `final_rf` variable. We have also used model stored in `final_rf` to predict `data_unseen`. This brings us to the end our experiment but one question is still to be asked. What happens when you have more new data to predict? Do you have to go through the entire experiment again? The answer is No, you don't need to rerun the entire experiment and reconstruct the pipeline to generate predictions on new data. PyCaret inbuilt function `save_model()` allows you to save the model along with entire transformation pipeline for later use." - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Transformation Pipeline and Model Succesfully Saved\n" - ] - } - ], - "source": [ - "save_model(final_rf,'Final RF Model 08Feb2020')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "(TIP : It's always good to use date in the filename when saving models, it's good for version control.)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 15.0 Loading the saved model" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "To load a saved model on a future date in the same or different environment, we would use the PyCaret's `load_model()` function and then easily apply the saved model on new unseen data for prediction" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Transformation Pipeline and Model Sucessfully Loaded\n" - ] - } - ], - "source": [ - "saved_final_rf = load_model('Final RF Model 08Feb2020')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Once the model is loaded in the environment, you can simply use it to predict on any new data using the same `predict_model()` function . Below we have applied the loaded model to predict the same `data_unseen` that we have used in section 13 above." - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": {}, - "outputs": [], - "source": [ - "new_prediction = predict_model(saved_final_rf, data=data_unseen)" - ] - }, - { - "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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
LIMIT_BALSEXEDUCATIONMARRIAGEAGEPAY_1PAY_2PAY_3PAY_4PAY_5...BILL_AMT6PAY_AMT1PAY_AMT2PAY_AMT3PAY_AMT4PAY_AMT5PAY_AMT6defaultLabelScore
0500002214800000...8011.02028.02453.02329.0431.0300.0500.0000.1498
12000002114022222...89112.04200.04100.03000.03400.03500.00.0110.7986
2500002314412324...15798.02100.01000.02300.00.00.00.0110.6261
3600002213122-100...30384.01132.060994.01436.01047.01056.01053.0110.5063
412000023232-10000...81354.02429.03120.03300.010000.03200.03200.0000.1479
\n", - "

5 rows × 26 columns

\n", - "
" - ], - "text/plain": [ - " LIMIT_BAL SEX EDUCATION MARRIAGE AGE PAY_1 PAY_2 PAY_3 PAY_4 \\\n", - "0 50000 2 2 1 48 0 0 0 0 \n", - "1 200000 2 1 1 40 2 2 2 2 \n", - "2 50000 2 3 1 44 1 2 3 2 \n", - "3 60000 2 2 1 31 2 2 -1 0 \n", - "4 120000 2 3 2 32 -1 0 0 0 \n", - "\n", - " PAY_5 ... BILL_AMT6 PAY_AMT1 PAY_AMT2 PAY_AMT3 PAY_AMT4 PAY_AMT5 \\\n", - "0 0 ... 8011.0 2028.0 2453.0 2329.0 431.0 300.0 \n", - "1 2 ... 89112.0 4200.0 4100.0 3000.0 3400.0 3500.0 \n", - "2 4 ... 15798.0 2100.0 1000.0 2300.0 0.0 0.0 \n", - "3 0 ... 30384.0 1132.0 60994.0 1436.0 1047.0 1056.0 \n", - "4 0 ... 81354.0 2429.0 3120.0 3300.0 10000.0 3200.0 \n", - "\n", - " PAY_AMT6 default Label Score \n", - "0 500.0 0 0 0.1498 \n", - "1 0.0 1 1 0.7986 \n", - "2 0.0 1 1 0.6261 \n", - "3 1053.0 1 1 0.5063 \n", - "4 3200.0 0 0 0.1479 \n", - "\n", - "[5 rows x 26 columns]" - ] - }, - "execution_count": 28, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "new_prediction.head()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Notice that results of `unseen_predictions` and `new_prediction` are identical." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 16.0 Wrap-up / Next Steps?" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "What we have covered in this tutorial is the entire machine learning pipeline from data ingestion, pre-processing, training the model, hyperparameter tuning, prediction and saving the model for later use. We have completed all this in less than 10 commands which are naturally constructed and very intuitive to remember such as `create_model()`, `tune_model()`, `compare_models()`. Re-creating the entire experiment without PyCaret would have taken well over 100 lines of code in most of the libraries.\n", - "\n", - "In this tutorial, we have only covered basics of `pycaret.classification`. In the following tutorials, we will go deeper into advance pre-processing techniques that allows you to fully customize your machine learning pipeline, ensembling and generalized stacking and other advance techniques that are must to know for any data scientist. \n", - "\n", - "See you at the next tutorial. Follow the link to __[Binary Classification Tutorial (CLF102) - Intermediate Level](BinaryClassificationTutorial(CLF102)_LevelIntermediate.ipynb)__" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "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.7.4" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -}