{"cells":[{"cell_type":"markdown","id":"ef3f373c-e39a-4b5f-9bb8-a920d161f1b6","metadata":{},"source":["
\n"," \"cognitiveclass.ai\n","
\n"]},{"cell_type":"markdown","id":"8dbdecec-cd11-4a57-9df4-82c8a80a78eb","metadata":{},"source":["# **Credit Card Fraud Detection using Scikit-Learn and Snap ML**\n"]},{"cell_type":"markdown","id":"ec071c2d-d1d4-4614-aa2a-189fc7c98f94","metadata":{},"source":["Estimated time needed: **30** minutes\n"]},{"cell_type":"markdown","id":"0b1690b3-6524-4109-bf72-1a4daf11b4c7","metadata":{},"source":["In this exercise session you will consolidate your machine learning (ML) modeling skills by using two popular classification models to recognize fraudulent credit card transactions. These models are: Decision Tree and Support Vector Machine. You will use a real dataset to train each of these models. The dataset includes information about \n","transactions made by credit cards in September 2013 by European cardholders. You will use the trained model to assess if a credit card transaction is legitimate or not.\n","\n","In the current exercise session, you will practice not only the Scikit-Learn Python interface, but also the Python API offered by the Snap Machine Learning (Snap ML) library. Snap ML is a high-performance IBM library for ML modeling. It provides highly-efficient CPU/GPU implementations of linear models and tree-based models. Snap ML not only accelerates ML algorithms through system awareness, but it also offers novel ML algorithms with best-in-class accuracy. For more information, please visit [snapml](https://ibm.biz/BdPfxy) information page.\n"]},{"cell_type":"markdown","id":"6f509f1e-49cf-4411-a4b8-b06a9e61ad6d","metadata":{},"source":["## Objectives\n"]},{"cell_type":"markdown","id":"676d912b-2c5d-47d8-9cf8-2d15db8d8503","metadata":{},"source":["After completing this lab you will be able to:\n"]},{"cell_type":"markdown","id":"c1b4e289-2670-476a-8746-9f4a1db8dadd","metadata":{},"source":["* Perform basic data preprocessing in Python\n","* Model a classification task using the Scikit-Learn and Snap ML Python APIs\n","* Train Suppport Vector Machine and Decision Tree models using Scikit-Learn and Snap ML\n","* Run inference and assess the quality of the trained models\n"]},{"cell_type":"markdown","id":"27a382a6-b52f-4adb-be30-5754e81775b1","metadata":{},"source":["## Table of Contents\n"]},{"cell_type":"markdown","id":"cf840df9-6d1a-490a-b8c8-e2d413329748","metadata":{},"source":["
\n","
    \n","
  1. Introduction
  2. \n","
  3. Import Libraries
  4. \n","
  5. Dataset Analysis
  6. \n","
  7. Dataset Preprocessing
  8. \n","
  9. Dataset Train/Test Split
  10. \n","
  11. Build a Decision Tree Classifier model with Scikit-Learn
  12. \n","
  13. Build a Decision Tree Classifier model with Snap ML
  14. \n","
  15. Evaluate the Scikit-Learn and Snap ML Decision Tree Classifiers
  16. \n","
  17. Build a Support Vector Machine model with Scikit-Learn
  18. \n","
  19. Build a Support Vector Machine model with Snap ML
  20. \n","
  21. Evaluate the Scikit-Learn and Snap ML Support Vector Machine Models
  22. \n","
\n","
\n","
\n","
\n"]},{"cell_type":"markdown","id":"d4427c75-08bc-41f9-97d3-7354e7ab6001","metadata":{},"source":["
\n","

Introduction

\n","
Imagine that you work for a financial institution and part of your job is to build a model that predicts if a credit card transaction is fraudulent or not. You can model the problem as a binary classification problem. A transaction belongs to the positive class (1) if it is a fraud, otherwise it belongs to the negative class (0).\n","
\n","
You have access to transactions that occured over a certain period of time. The majority of the transactions are normally legitimate and only a small fraction are non-legitimate. Thus, typically you have access to a dataset that is highly unbalanced. This is also the case of the current dataset: only 492 transactions out of 284,807 are fraudulent (the positive class - the frauds - accounts for 0.172% of all transactions).\n","
\n","
To train the model you can use part of the input dataset and the remaining data can be used to assess the quality of the trained model. First, let's download the dataset.\n","
\n","
\n"]},{"cell_type":"code","execution_count":52,"id":"b63e0611-cc91-414d-97db-c24950151d52","metadata":{},"outputs":[{"name":"stderr","output_type":"stream","text":["83240.57s - pydevd: Sending message related to process being replaced timed-out after 5 seconds\n"]},{"name":"stdout","output_type":"stream","text":["Looking in indexes: https://pypi.org/simple, https://packagecloud.io/github/git-lfs/pypi/simple\n","Requirement already satisfied: opendatasets in /home/bbearce/.pyenv/versions/3.10.4/envs/venv3.10.4/lib/python3.10/site-packages (0.1.22)\n","Requirement already satisfied: tqdm in /home/bbearce/.pyenv/versions/3.10.4/envs/venv3.10.4/lib/python3.10/site-packages (from opendatasets) (4.66.1)\n","Requirement already satisfied: click in /home/bbearce/.pyenv/versions/3.10.4/envs/venv3.10.4/lib/python3.10/site-packages (from opendatasets) (8.1.7)\n","Requirement already satisfied: kaggle in /home/bbearce/.pyenv/versions/3.10.4/envs/venv3.10.4/lib/python3.10/site-packages (from opendatasets) (1.5.16)\n","Requirement already satisfied: six>=1.10 in /home/bbearce/.pyenv/versions/3.10.4/envs/venv3.10.4/lib/python3.10/site-packages (from kaggle->opendatasets) (1.16.0)\n","Requirement already satisfied: certifi in /home/bbearce/.pyenv/versions/3.10.4/envs/venv3.10.4/lib/python3.10/site-packages (from kaggle->opendatasets) (2023.7.22)\n","Requirement already satisfied: python-dateutil in /home/bbearce/.pyenv/versions/3.10.4/envs/venv3.10.4/lib/python3.10/site-packages (from kaggle->opendatasets) (2.8.2)\n","Requirement already satisfied: requests in /home/bbearce/.pyenv/versions/3.10.4/envs/venv3.10.4/lib/python3.10/site-packages (from kaggle->opendatasets) (2.31.0)\n","Requirement already satisfied: python-slugify in /home/bbearce/.pyenv/versions/3.10.4/envs/venv3.10.4/lib/python3.10/site-packages (from kaggle->opendatasets) (8.0.1)\n","Requirement already satisfied: urllib3 in /home/bbearce/.pyenv/versions/3.10.4/envs/venv3.10.4/lib/python3.10/site-packages (from kaggle->opendatasets) (2.0.7)\n","Requirement already satisfied: bleach in /home/bbearce/.pyenv/versions/3.10.4/envs/venv3.10.4/lib/python3.10/site-packages (from kaggle->opendatasets) (6.1.0)\n","Requirement already satisfied: webencodings in /home/bbearce/.pyenv/versions/3.10.4/envs/venv3.10.4/lib/python3.10/site-packages (from bleach->kaggle->opendatasets) (0.5.1)\n","Requirement already satisfied: text-unidecode>=1.3 in /home/bbearce/.pyenv/versions/3.10.4/envs/venv3.10.4/lib/python3.10/site-packages (from python-slugify->kaggle->opendatasets) (1.3)\n","Requirement already satisfied: idna<4,>=2.5 in /home/bbearce/.pyenv/versions/3.10.4/envs/venv3.10.4/lib/python3.10/site-packages (from requests->kaggle->opendatasets) (3.4)\n","Requirement already satisfied: charset-normalizer<4,>=2 in /home/bbearce/.pyenv/versions/3.10.4/envs/venv3.10.4/lib/python3.10/site-packages (from requests->kaggle->opendatasets) (3.3.1)\n","\u001b[33mWARNING: You are using pip version 22.0.4; however, version 23.3 is available.\n","You should consider upgrading via the '/home/bbearce/.pyenv/versions/3.10.4/envs/venv3.10.4/bin/python3.10 -m pip install --upgrade pip' command.\u001b[0m\u001b[33m\n","\u001b[0mPlease provide your Kaggle credentials to download this dataset. Learn more: http://bit.ly/kaggle-creds\n","Your Kaggle username:Your Kaggle Key:Downloading creditcardfraud.zip to ./creditcardfraud\n"]},{"name":"stderr","output_type":"stream","text":["100%|██████████| 66.0M/66.0M [00:01<00:00, 53.3MB/s]\n"]},{"name":"stdout","output_type":"stream","text":["\n"]}],"source":["# install the opendatasets package\n","!pip install opendatasets\n","\n","import opendatasets as od\n","\n","# download the dataset (this is a Kaggle dataset)\n","# during download you will be required to input your Kaggle username and password\n","od.download(\"https://www.kaggle.com/mlg-ulb/creditcardfraud\")"]},{"cell_type":"code","execution_count":5,"metadata":{},"outputs":[{"data":{"text/plain":["'/home/bbearce/Documents/code-journal/docs/notes/machine_learning/Coursera/JupyterNotebooks'"]},"execution_count":5,"metadata":{},"output_type":"execute_result"}],"source":["import os; os.getcwd()"]},{"cell_type":"markdown","id":"92cf3cd1-1413-4e75-a88e-2b6413de6c58","metadata":{},"source":["__Did you know?__ When it comes to Machine Learning, you will most likely be working with large datasets. As a business, where can you host your data? IBM is offering a unique opportunity for businesses, with 10 Tb of IBM Cloud Object Storage: [Sign up now for free](https://ibm.biz/BdPfxf)\n"]},{"cell_type":"markdown","id":"c44bc0d4-2b4c-4a91-883a-35fe50a7c070","metadata":{},"source":["
\n","

Import Libraries

\n","
\n"]},{"cell_type":"code","execution_count":6,"id":"9e5df4a7-505b-4921-9f45-cad5c0fffd79","metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["Looking in indexes: https://pypi.org/simple, https://packagecloud.io/github/git-lfs/pypi/simple\n","Collecting snapml\n"," Downloading snapml-1.14.2-cp310-cp310-manylinux_2_28_x86_64.whl (7.3 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m7.3/7.3 MB\u001b[0m \u001b[31m19.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m00:01\u001b[0m\n","\u001b[?25hRequirement already satisfied: scikit-learn in /home/bbearce/.pyenv/versions/3.10.4/envs/venv3.10.4/lib/python3.10/site-packages (from snapml) (1.3.1)\n","Requirement already satisfied: numpy>=1.21.3 in /home/bbearce/.pyenv/versions/3.10.4/envs/venv3.10.4/lib/python3.10/site-packages (from snapml) (1.26.1)\n","Requirement already satisfied: scipy in /home/bbearce/.pyenv/versions/3.10.4/envs/venv3.10.4/lib/python3.10/site-packages (from snapml) (1.11.3)\n","Requirement already satisfied: joblib>=1.1.1 in /home/bbearce/.pyenv/versions/3.10.4/envs/venv3.10.4/lib/python3.10/site-packages (from scikit-learn->snapml) (1.3.2)\n","Requirement already satisfied: threadpoolctl>=2.0.0 in /home/bbearce/.pyenv/versions/3.10.4/envs/venv3.10.4/lib/python3.10/site-packages (from scikit-learn->snapml) (3.2.0)\n","Installing collected packages: snapml\n","Successfully installed snapml-1.14.2\n","\u001b[33mWARNING: You are using pip version 22.0.4; however, version 23.3 is available.\n","You should consider upgrading via the '/home/bbearce/.pyenv/versions/3.10.4/envs/venv3.10.4/bin/python3.10 -m pip install --upgrade pip' command.\u001b[0m\u001b[33m\n","\u001b[0m"]}],"source":["# Snap ML is available on PyPI. To install it simply run the pip command below.\n","!pip install snapml"]},{"cell_type":"code","execution_count":53,"id":"f0b103cc-6ffd-4bb2-8baf-55d246bfdd66","metadata":{},"outputs":[],"source":["# Import the libraries we need to use in this lab\n","from __future__ import print_function\n","import numpy as np\n","import pandas as pd\n","import matplotlib.pyplot as plt\n","%matplotlib inline\n","from sklearn.model_selection import train_test_split\n","from sklearn.preprocessing import normalize, StandardScaler\n","from sklearn.utils.class_weight import compute_sample_weight\n","from sklearn.metrics import roc_auc_score\n","import time\n","import warnings\n","warnings.filterwarnings('ignore')"]},{"cell_type":"markdown","id":"cfd4973c-1def-4a5b-aeb1-dffd117a515f","metadata":{},"source":["
\n","

Dataset Analysis

\n","
\n"]},{"cell_type":"markdown","id":"3cc91238-9566-4282-a711-a2dc01ef2752","metadata":{},"source":["In this section you will read the dataset in a Pandas dataframe and visualize its content. You will also look at some data statistics. \n","\n","Note: A Pandas dataframe is a two-dimensional, size-mutable, potentially heterogeneous tabular data structure. For more information: https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.html. \n"]},{"cell_type":"code","execution_count":54,"id":"d81a695f-54e6-469a-8af1-80a682c98003","metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["There are 284807 observations in the credit card fraud dataset.\n","There are 31 variables in the dataset.\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","
TimeV1V2V3V4V5V6V7V8V9...V21V22V23V24V25V26V27V28AmountClass
00.0-1.359807-0.0727812.5363471.378155-0.3383210.4623880.2395990.0986980.363787...-0.0183070.277838-0.1104740.0669280.128539-0.1891150.133558-0.021053149.620
10.01.1918570.2661510.1664800.4481540.060018-0.082361-0.0788030.085102-0.255425...-0.225775-0.6386720.101288-0.3398460.1671700.125895-0.0089830.0147242.690
21.0-1.358354-1.3401631.7732090.379780-0.5031981.8004990.7914610.247676-1.514654...0.2479980.7716790.909412-0.689281-0.327642-0.139097-0.055353-0.059752378.660
31.0-0.966272-0.1852261.792993-0.863291-0.0103091.2472030.2376090.377436-1.387024...-0.1083000.005274-0.190321-1.1755750.647376-0.2219290.0627230.061458123.500
42.0-1.1582330.8777371.5487180.403034-0.4071930.0959210.592941-0.2705330.817739...-0.0094310.798278-0.1374580.141267-0.2060100.5022920.2194220.21515369.990
\n","

5 rows × 31 columns

\n","
"],"text/plain":[" Time V1 V2 V3 V4 V5 V6 V7 \\\n","0 0.0 -1.359807 -0.072781 2.536347 1.378155 -0.338321 0.462388 0.239599 \n","1 0.0 1.191857 0.266151 0.166480 0.448154 0.060018 -0.082361 -0.078803 \n","2 1.0 -1.358354 -1.340163 1.773209 0.379780 -0.503198 1.800499 0.791461 \n","3 1.0 -0.966272 -0.185226 1.792993 -0.863291 -0.010309 1.247203 0.237609 \n","4 2.0 -1.158233 0.877737 1.548718 0.403034 -0.407193 0.095921 0.592941 \n","\n"," V8 V9 ... V21 V22 V23 V24 V25 \\\n","0 0.098698 0.363787 ... -0.018307 0.277838 -0.110474 0.066928 0.128539 \n","1 0.085102 -0.255425 ... -0.225775 -0.638672 0.101288 -0.339846 0.167170 \n","2 0.247676 -1.514654 ... 0.247998 0.771679 0.909412 -0.689281 -0.327642 \n","3 0.377436 -1.387024 ... -0.108300 0.005274 -0.190321 -1.175575 0.647376 \n","4 -0.270533 0.817739 ... -0.009431 0.798278 -0.137458 0.141267 -0.206010 \n","\n"," V26 V27 V28 Amount Class \n","0 -0.189115 0.133558 -0.021053 149.62 0 \n","1 0.125895 -0.008983 0.014724 2.69 0 \n","2 -0.139097 -0.055353 -0.059752 378.66 0 \n","3 -0.221929 0.062723 0.061458 123.50 0 \n","4 0.502292 0.219422 0.215153 69.99 0 \n","\n","[5 rows x 31 columns]"]},"execution_count":54,"metadata":{},"output_type":"execute_result"}],"source":["# read the input data\n","raw_data = pd.read_csv('creditcardfraud/creditcard.csv')\n","print(\"There are \" + str(len(raw_data)) + \" observations in the credit card fraud dataset.\")\n","print(\"There are \" + str(len(raw_data.columns)) + \" variables in the dataset.\")\n","\n","# display the first rows in the dataset\n","raw_data.head()"]},{"cell_type":"code","execution_count":null,"id":"269cfea0-24a8-49b7-8932-656bd4b95547","metadata":{},"outputs":[],"source":["#Uncomment the following lines if you are unable to download the dataset using the Kaggle website.\n","\n","#url= \"https://cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud/IBMDeveloperSkillsNetwork-ML0101EN-SkillsNetwork/labs/Module%203/data/creditcard.csv\"\n","#raw_data=pd.read_csv(url)\n","#print(\"There are \" + str(len(raw_data)) + \" observations in the credit card fraud dataset.\")\n","#print(\"There are \" + str(len(raw_data.columns)) + \" variables in the dataset.\")\n","#raw_data.head()"]},{"cell_type":"markdown","id":"0e7a1db2-d2a1-4948-b47a-ef55ac8c249c","metadata":{},"source":["In practice, a financial institution may have access to a much larger dataset of transactions. To simulate such a case, we will inflate the original one 10 times.\n"]},{"cell_type":"code","execution_count":55,"id":"b856cd22-57e4-4774-9bb9-ff9d2e1ae5ec","metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["There are 2848070 observations in the inflated credit card fraud dataset.\n","There are 31 variables in the dataset.\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","
TimeV1V2V3V4V5V6V7V8V9...V21V22V23V24V25V26V27V28AmountClass
00.0-1.359807-0.0727812.5363471.378155-0.3383210.4623880.2395990.0986980.363787...-0.0183070.277838-0.1104740.0669280.128539-0.1891150.133558-0.021053149.620.0
10.0-1.359807-0.0727812.5363471.378155-0.3383210.4623880.2395990.0986980.363787...-0.0183070.277838-0.1104740.0669280.128539-0.1891150.133558-0.021053149.620.0
20.0-1.359807-0.0727812.5363471.378155-0.3383210.4623880.2395990.0986980.363787...-0.0183070.277838-0.1104740.0669280.128539-0.1891150.133558-0.021053149.620.0
30.0-1.359807-0.0727812.5363471.378155-0.3383210.4623880.2395990.0986980.363787...-0.0183070.277838-0.1104740.0669280.128539-0.1891150.133558-0.021053149.620.0
40.0-1.359807-0.0727812.5363471.378155-0.3383210.4623880.2395990.0986980.363787...-0.0183070.277838-0.1104740.0669280.128539-0.1891150.133558-0.021053149.620.0
\n","

5 rows × 31 columns

\n","
"],"text/plain":[" Time V1 V2 V3 V4 V5 V6 V7 \\\n","0 0.0 -1.359807 -0.072781 2.536347 1.378155 -0.338321 0.462388 0.239599 \n","1 0.0 -1.359807 -0.072781 2.536347 1.378155 -0.338321 0.462388 0.239599 \n","2 0.0 -1.359807 -0.072781 2.536347 1.378155 -0.338321 0.462388 0.239599 \n","3 0.0 -1.359807 -0.072781 2.536347 1.378155 -0.338321 0.462388 0.239599 \n","4 0.0 -1.359807 -0.072781 2.536347 1.378155 -0.338321 0.462388 0.239599 \n","\n"," V8 V9 ... V21 V22 V23 V24 V25 \\\n","0 0.098698 0.363787 ... -0.018307 0.277838 -0.110474 0.066928 0.128539 \n","1 0.098698 0.363787 ... -0.018307 0.277838 -0.110474 0.066928 0.128539 \n","2 0.098698 0.363787 ... -0.018307 0.277838 -0.110474 0.066928 0.128539 \n","3 0.098698 0.363787 ... -0.018307 0.277838 -0.110474 0.066928 0.128539 \n","4 0.098698 0.363787 ... -0.018307 0.277838 -0.110474 0.066928 0.128539 \n","\n"," V26 V27 V28 Amount Class \n","0 -0.189115 0.133558 -0.021053 149.62 0.0 \n","1 -0.189115 0.133558 -0.021053 149.62 0.0 \n","2 -0.189115 0.133558 -0.021053 149.62 0.0 \n","3 -0.189115 0.133558 -0.021053 149.62 0.0 \n","4 -0.189115 0.133558 -0.021053 149.62 0.0 \n","\n","[5 rows x 31 columns]"]},"execution_count":55,"metadata":{},"output_type":"execute_result"}],"source":["n_replicas = 10\n","\n","# inflate the original dataset\n","big_raw_data = pd.DataFrame(np.repeat(raw_data.values, n_replicas, axis=0), columns=raw_data.columns)\n","\n","print(\"There are \" + str(len(big_raw_data)) + \" observations in the inflated credit card fraud dataset.\")\n","print(\"There are \" + str(len(big_raw_data.columns)) + \" variables in the dataset.\")\n","\n","# display first rows in the new dataset\n","big_raw_data.head()"]},{"cell_type":"markdown","id":"02909172-1b5b-4118-83d1-79df94fb32b3","metadata":{},"source":["Each row in the dataset represents a credit card transaction. As shown above, each row has 31 variables. One variable (the last variable in the table above) is called Class and represents the target variable. Your objective will be to train a model that uses the other variables to predict the value of the Class variable. Let's first retrieve basic statistics about the target variable.\n","\n","Note: For confidentiality reasons, the original names of most features are anonymized V1, V2 .. V28. The values of these features are the result of a PCA transformation and are numerical. The feature 'Class' is the target variable and it takes two values: 1 in case of fraud and 0 otherwise. For more information about the dataset please visit this webpage: https://www.kaggle.com/mlg-ulb/creditcardfraud.\n"]},{"cell_type":"code","execution_count":56,"id":"b6eea1c2-9a0f-488a-b06f-2f19d1c11c51","metadata":{},"outputs":[{"data":{"image/png":"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","text/plain":["
"]},"metadata":{},"output_type":"display_data"}],"source":["# get the set of distinct classes\n","labels = big_raw_data.Class.unique()\n","\n","# get the count of each class\n","sizes = big_raw_data.Class.value_counts().values\n","\n","# plot the class value counts\n","fig, ax = plt.subplots()\n","ax.pie(sizes, labels=labels, autopct='%1.3f%%')\n","ax.set_title('Target Variable Value Counts')\n","plt.show()"]},{"cell_type":"markdown","id":"0345ac2b-7b3e-4379-be48-5db5df114308","metadata":{},"source":["As shown above, the Class variable has two values: 0 (the credit card transaction is legitimate) and 1 (the credit card transaction is fraudulent). Thus, you need to model a binary classification problem. Moreover, the dataset is highly unbalanced, the target variable classes are not represented equally. This case requires special attention when training or when evaluating the quality of a model. One way of handing this case at train time is to bias the model to pay more attention to the samples in the minority class. The models under the current study will be configured to take into account the class weights of the samples at train/fit time.\n"]},{"cell_type":"markdown","id":"76a77289-16aa-4861-a36e-0d5df963bb35","metadata":{},"source":["### Practice\n"]},{"cell_type":"markdown","id":"7a580e4a-13b9-4033-944a-022f5871dc3c","metadata":{},"source":["The credit card transactions have different amounts. Could you plot a histogram that shows the distribution of these amounts? What is the range of these amounts (min/max)? Could you print the 90th percentile of the amount values?\n"]},{"cell_type":"code","execution_count":29,"id":"e8f64dfb-12a5-423b-be7f-4d1c018b12a5","metadata":{},"outputs":[{"data":{"text/plain":[""]},"execution_count":29,"metadata":{},"output_type":"execute_result"},{"data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAAiMAAAGsCAYAAAAPJKchAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAlgUlEQVR4nO3df3DU9Z3H8dcGkg2pLD9M8wsCBFF+E/khGK2IYyBwjDa1tRRsoVTxtElHLwq9tFWI3DVeBbHTotbxJKdTROkUnCqlpMGYIhEvKVHijxSUkp4mQcUkhOiyZj/3B5Ntt/lBNuSbT7J5PmYy437389397Du4PGc3S1zGGCMAAABLImxvAAAADGzECAAAsIoYAQAAVhEjAADAKmIEAABYRYwAAACriBEAAGAVMQIAAKwiRgAAgFXECAAAsKpfxUhJSYluuOEGJSUlyeVyaffu3SHfhjFGmzZt0mWXXSa3261Ro0bpP//zP3t+swAAoEsG295AKM6cOaPU1FR973vf00033dSt27jrrru0b98+bdq0SdOnT9epU6d06tSpHt4pAADoKld//UV5LpdLu3btUmZmZuCY1+vVj3/8Yz377LOqr6/XtGnT9F//9V9asGCBJOmdd97RjBkzVFlZqYkTJ9rZOAAACNKv3qY5n+zsbJWWlmrHjh168803dfPNN2vx4sU6evSoJOl3v/udxo8frxdffFEpKSkaN26cbrvtNl4ZAQDAorCJkerqam3btk07d+7UNddco0suuUT33nuvvvKVr2jbtm2SpPfff18nTpzQzp079fTTT6ugoEDl5eX6xje+YXn3AAAMXP3qZ0Y6c+TIEbW0tOiyyy4LOu71enXxxRdLkvx+v7xer55++unAuv/+7//W7NmzVVVVxVs3AABYEDYx0tTUpEGDBqm8vFyDBg0Kuu6iiy6SJCUmJmrw4MFBwTJ58mRJ515ZIUYAAOh9YRMjM2fOVEtLi06ePKlrrrmm3TVXX321vvjiC7333nu65JJLJEl/+ctfJEljx47ttb0CAIC/61efpmlqatKxY8cknYuPhx9+WNddd51GjhypMWPG6Nvf/rZeffVVbd68WTNnztRHH32koqIizZgxQ0uXLpXf79cVV1yhiy66SI888oj8fr+ysrLk8Xi0b98+y48OAICBqV/FSHFxsa677ro2x1etWqWCggL5fD79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7beb4cOHB/0kMoy55557THFxsTl+/Lh59dVXTXp6uomNjTUnT540xpz7ON+YMWPM/v37TVlZmUlLSzNpaWmB81s/brZo0SJTUVFh9u7da7785S+3+3GztWvXmnfeecds3bo1LD/ae/r0aXP48GFz+PBhI8k8/PDD5vDhw+bEiRPGmHMf7R0+fLh54YUXzJtvvmm++tWvtvvR3pkzZ5pDhw6ZAwcOmEsvvTToo6f19fUmPj7efOc73zGVlZVmx44dJiYmps1HTwcPHmw2bdpk3nnnHbN+/fp+/9FTYzqf7+nTp829995rSktLzfHjx80f//hHM2vWLHPppZeazz//PHAbzLd9d955pxk2bJgpLi4O+mhpc3NzYE1vPReE43P3+eZ77Ngx88ADD5iysjJz/Phx88ILL5jx48eb+fPnB26jv893wMaIMcb84he/MGPGjDFRUVFm7ty55rXXXrO9pT5n2bJlJjEx0URFRZlRo0aZZcuWmWPHjgWu/+yzz8z3v/99M2LECBMTE2O+9rWvmZqamqDb+Otf/2qWLFlihgwZYmJjY80999xjfD5f0JqXX37ZXH755SYqKsqMHz/ebNu2rTceXq96+eWXjaQ2X6tWrTLGnPt473333Wfi4+ON2+02119/vamqqgq6jU8++cQsX77cXHTRRcbj8ZjVq1eb06dPB6154403zFe+8hXjdrvNqFGjzIMPPthmL88//7y57LLLTFRUlJk6dap56aWXHHvcvaWz+TY3N5tFixaZL3/5yyYyMtKMHTvWrFmzps0TLPNtX3tzlRT0/2lvPheE23P3+eZbXV1t5s+fb0aOHGncbreZMGGCWbt2bdC/M2JM/56vyxhjnH3tBQAAoGMD8mdGAABA30GMAAAAq4gRAABgFTECAACsIkYAAIBVxAgAALCKGAEAAFYRIwAAwCpiBAAAWEWMAAAAq4gRAABgFTECAACs+n9RFaL/3OtGHwAAAABJRU5ErkJggg==","text/plain":["
"]},"metadata":{},"output_type":"display_data"}],"source":["# your code here\n","big_raw_data['Amount'].hist(bins=75)\n","\n"]},{"cell_type":"code","execution_count":37,"metadata":{},"outputs":[{"data":{"text/plain":["count 2.848070e+06\n","mean 8.834962e+01\n","std 2.501197e+02\n","min 0.000000e+00\n","25% 5.600000e+00\n","50% 2.200000e+01\n","75% 7.717000e+01\n","max 2.569116e+04\n","Name: Amount, dtype: float64"]},"execution_count":37,"metadata":{},"output_type":"execute_result"}],"source":["big_raw_data['Amount'].describe()"]},{"cell_type":"code","execution_count":43,"metadata":{},"outputs":[{"data":{"text/plain":["203.0"]},"execution_count":43,"metadata":{},"output_type":"execute_result"}],"source":["big_raw_data['Amount'].quantile(0.90)"]},{"cell_type":"code","execution_count":69,"id":"915a7737-d86d-4f47-99bb-6ed85aa316d1","metadata":{},"outputs":[{"data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAAiMAAAGsCAYAAAAPJKchAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAfrUlEQVR4nO3de3BU5f3H8c9CYAOFLALNDTYQRQUEQuQaUIExFSlDTW0dymCJKHS0wYJpa0UrDFoaO4qlFyqlFjJUEaUKVOqFNAgUCSCBKHhBKQxBzAYskiVRA2af3x+O628LgWxI+JLwfs2cGXP2ObvPPhPZ95w9m/U455wAAACMtLCeAAAAuLgRIwAAwBQxAgAATBEjAADAFDECAABMESMAAMAUMQIAAEwRIwAAwBQxAgAATBEjAADAVJOKkY0bN2rcuHFKTk6Wx+PRqlWror4P55wee+wxXXHFFfJ6verSpYvmzp3b8JMFAAB1EmM9gWhUVVUpLS1Nt99+u26++eZ63cf06dO1du1aPfbYY+rbt6+OHj2qo0ePNvBMAQBAXXma6hfleTwerVy5UllZWeF91dXVeuCBB/TMM8/o2LFj6tOnj37zm99o5MiRkqR3331X/fr10+7du3XllVfaTBwAAERoUm/TnM20adNUVFSk5cuX66233tItt9yiG2+8UR988IEk6cUXX9Sll16qNWvWKDU1Vd27d9eUKVM4MwIAgKFmEyOlpaVasmSJVqxYoWuvvVaXXXaZfvazn+maa67RkiVLJEn79u3TgQMHtGLFCi1dulT5+fkqLi7W97//fePZAwBw8WpS14ycya5du1RTU6MrrrgiYn91dbU6deokSQqFQqqurtbSpUvD4/76179qwIAB2rNnD2/dAABgoNnESGVlpVq2bKni4mK1bNky4rZ27dpJkpKSkhQTExMRLL169ZL05ZkVYgQAgPOv2cRIenq6ampqdPjwYV177bWnHTN8+HB98cUX+s9//qPLLrtMkvT+++9Lkrp163be5goAAL7WpD5NU1lZqb1790r6Mj4ef/xxjRo1Sh07dlRKSopuvfVWvf7665o3b57S09N15MgRFRYWql+/fho7dqxCoZAGDRqkdu3aaf78+QqFQsrJyVFcXJzWrl1r/OwAALg4NakYWb9+vUaNGnXK/uzsbOXn5+vkyZP61a9+paVLl+rQoUPq3Lmzhg4dqjlz5qhv376SpI8++kh333231q5dq2984xsaM2aM5s2bp44dO57vpwMAANTEYgQAADQ/zeajvQAAoGkiRgAAgKkm8WmaUCikjz76SO3bt5fH47GeDgAAqAPnnI4fP67k5GS1aFH7+Y8mESMfffSR/H6/9TQAAEA9HDx4UF27dq319iYRI+3bt5f05ZOJi4szng0AAKiLYDAov98ffh2vTZOIka/emomLiyNGAABoYs52iQUXsAIAAFPECAAAMEWMAAAAU8QIAAAwRYwAAABTxAgAADBFjAAAAFPECAAAMEWMAAAAU8QIAAAwRYwAAABTxAgAADBFjAAAAFPECAAAMBVjPQFrnjln/lpjfM3NdtZTAAA0Q5wZAQAApogRAABgihgBAACmiBEAAGCKGAEAAKaIEQAAYIoYAQAApogRAABgihgBAACmiBEAAGCKGAEAAKaIEQAAYIoYAQAApogRAABgihgBAACmiBEAAGCKGAEAAKaIEQAAYIoYAQAApogRAABgihgBAACmiBEAAGCKGAEAAKaIEQAAYIoYAQAApogRAABgihgBAACmiBEAAGCKGAEAAKaIEQAAYIoYAQAApogRAABgihgBAACmiBEAAGCKGAEAAKaIEQAAYIoYAQAApogRAABgKqoYycvL06BBg9S+fXvFx8crKytLe/bsOeMx+fn58ng8EVtsbOw5TRoAADQfUcXIhg0blJOToy1btqigoEAnT57UDTfcoKqqqjMeFxcXp7KysvB24MCBc5o0AABoPmKiGfzKK69E/Jyfn6/4+HgVFxfruuuuq/U4j8ejxMTE+s0QAAA0a+d0zUhFRYUkqWPHjmccV1lZqW7dusnv9+umm27S22+/fcbx1dXVCgaDERsAAGie6h0joVBIM2bM0PDhw9WnT59ax1155ZVavHixVq9eraeeekqhUEjDhg3Thx9+WOsxeXl58vl84c3v99d3mgAA4ALncc65+hx411136eWXX9amTZvUtWvXOh938uRJ9erVSxMmTNDDDz982jHV1dWqrq4O/xwMBuX3+1VRUaG4uLj6TLdWnjmeBr2/5szNrtevCgDgIhUMBuXz+c76+h3VNSNfmTZtmtasWaONGzdGFSKS1KpVK6Wnp2vv3r21jvF6vfJ6vfWZGgAAaGKiepvGOadp06Zp5cqVWrdunVJTU6N+wJqa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3z498cQTys3N1f3336833nhDP/nJT9S6dWtlZ2eH1/B0/1awvmd33333KRgMqmfPnmrZsqVqamo0d+5cTZw4UZJY3wZUl7UMBAKKj4+PuD0mJkYdO3Y0Xe+LNkbQeHJycrR7925t2rTJeirNwsGDBzV9+nQVFBQoNjbWejrNTigU0sCBA/XrX/9akpSenq7du3dr4cKFys7ONp5d0/fcc8/p6aef1rJly3TVVVeppKREM2bMUHJyMuuLsIv2bZrOnTurZcuWp3zioLy8XImJiUazavqmTZumNWvW6LXXXlPXrl3D+xMTE3XixAkdO3YsYjzrfXbFxcU6fPiwrr76asXExCgmJkYbNmzQ73//e8XExCghIYG1PQdJSUnq3bt3xL5evXqptLRUksJryL8V9fPzn/9c9913n37wgx+ob9+++uEPf6h77rkn/GWqrG/DqctaJiYm6vDhwxG3f/HFFzp69Kjpel+0MdK6dWsNGDBAhYWF4X2hUEiFhYXKyMgwnFnT5JzTtGnTtHLlSq1bt06pqakRtw8YMECtWrWKWO89e/aotLSU9T6L66+/Xrt27VJJSUl4GzhwoCZOnBj+b9a2/oYPH37Kx9Dff/99devWTZKUmpqqxMTEiPUNBoPaunUr61sHn376acSXp0pSy5YtFQqFJLG+Dakua5mRkaFjx46puLg4PGbdunUKhUIaMmTIeZ9zmNmlsxeA5cuXO6/X6/Lz890777zjfvSjH7kOHTq4QCBgPbUm56677nI+n8+tX7/elZWVhbdPP/00PObOO+90KSkpbt26dW779u0uIyPDZWRkGM666fr/n6ZxjrU9F9u2bXMxMTFu7ty57oMPPnBPP/20a9u2rXvqqafCYx555BHXoUMHt3r1avfWW2+5m266iY+e1lF2drbr0qVL+KO9L7zwguvcubO79957w2NY37o7fvy427lzp9u5c6eT5B5//HG3c+dOd+DAAedc3dbyxhtvdOnp6W7r1q1u06ZN7vLLL+ejvdb+8Ic/uJSUFNe6dWs3ePBgt2XLFuspNUmSTrstWbIkPOazzz5zP/7xj90ll1zi2rZt67773e+6srIyu0k3Yf8bI6ztuXnxxRddnz59nNfrdT179nSLFi2KuD0UCrkHH3zQJSQkOK/X666//nq3Z88eo9k2LcFg0E2fPt2lpKS42NhYd+mll7oHHnjAVVdXh8ewvnX32muvnfbf2uzsbOdc3dbyv//9r5swYYJr166di4uLc5MnT3bHjx83eDZf8zj3//4MHgAAwHl20V4zAgAALgzECAAAMEWMAAAAU8QIAAAwRYwAAABTxAgAADBFjAAAAFPECAAAMEWMAAAAU8QIAAAwRYwAAABTxAgAADD1f75V/IdEdMB0AAAAAElFTkSuQmCC","text/plain":["
"]},"metadata":{},"output_type":"display_data"},{"name":"stdout","output_type":"stream","text":["Minimum amount value is -0.3532293929665258\n","Maximum amount value is 102.36224270927762\n","90% of the transactions have an amount less or equal than 203.0\n"]}],"source":["# we provide our solution here\n","plt.hist(big_raw_data.Amount.values, 6, histtype='bar', facecolor='g')\n","plt.show()\n","\n","print(\"Minimum amount value is \", np.min(big_raw_data.Amount.values))\n","print(\"Maximum amount value is \", np.max(big_raw_data.Amount.values))\n","print(\"90% of the transactions have an amount less or equal than \", np.percentile(raw_data.Amount.values, 90))"]},{"cell_type":"markdown","id":"bc974abe-8deb-4921-a72d-dfdcf6317c7e","metadata":{},"source":["
\n","

Dataset Preprocessing

\n","
\n"]},{"cell_type":"markdown","id":"3ab66dad-f870-45bf-aecf-a45f2231d684","metadata":{},"source":["In this subsection you will prepare the data for training. \n"]},{"cell_type":"code","execution_count":61,"id":"fafe2ed1-84a3-4593-a278-9bf2d259fa4b","metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["X.shape= (2848070, 29) y.shape= (2848070,)\n"]}],"source":["# data preprocessing such as scaling/normalization is typically useful for \n","# linear models to accelerate the training convergence\n","\n","# standardize features by removing the mean and scaling to unit variance\n","# big_raw_data.iloc[:, 1:30] = StandardScaler().fit_transform(big_raw_data.iloc[:, 1:30])\n","# data_matrix = big_raw_data.values\n","\n","# X: feature matrix (for this analysis, we exclude the Time variable from the dataset)\n","X = data_matrix[:, 1:30]\n","\n","# # y: labels vector\n","y = data_matrix[:, 30]\n","\n","# # data normalization\n","X = normalize(X, norm=\"l1\")\n","\n","# # print the shape of the features matrix and the labels vector\n","print('X.shape=', X.shape, 'y.shape=', y.shape)"]},{"cell_type":"markdown","id":"578fedad-8101-4bd1-9427-12a075ee4256","metadata":{},"source":["
\n","

Dataset Train/Test Split

\n","
\n"]},{"cell_type":"markdown","id":"cf03ffcf-efc6-42ad-87e6-190c00c1d657","metadata":{},"source":["Now that the dataset is ready for building the classification models, you need to first divide the pre-processed dataset into a subset to be used for training the model (the train set) and a subset to be used for evaluating the quality of the model (the test set).\n"]},{"cell_type":"code","execution_count":64,"id":"ebf3c04a-5eee-4000-ab41-8628a18cbf4f","metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["X_train.shape= (1993649, 29) Y_train.shape= (1993649,)\n","X_test.shape= (854421, 29) Y_test.shape= (854421,)\n"]}],"source":["X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42, stratify=y) \n","print('X_train.shape=', X_train.shape, 'Y_train.shape=', y_train.shape)\n","print('X_test.shape=', X_test.shape, 'Y_test.shape=', y_test.shape)"]},{"cell_type":"markdown","id":"d21e2582-33b9-46c9-9b3a-7fbba2c98750","metadata":{},"source":["
\n","

Build a Decision Tree Classifier model with Scikit-Learn

\n","
\n"]},{"cell_type":"code","execution_count":65,"id":"f47fb031-dd33-40f8-93a4-198d9e12e095","metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["[Scikit-Learn] Training time (s): 33.24686\n"]}],"source":["# compute the sample weights to be used as input to the train routine so that \n","# it takes into account the class imbalance present in this dataset\n","w_train = compute_sample_weight('balanced', y_train)\n","\n","# import the Decision Tree Classifier Model from scikit-learn\n","from sklearn.tree import DecisionTreeClassifier\n","\n","# for reproducible output across multiple function calls, set random_state to a given integer value\n","sklearn_dt = DecisionTreeClassifier(max_depth=4, random_state=35)\n","\n","# train a Decision Tree Classifier using scikit-learn\n","t0 = time.time()\n","sklearn_dt.fit(X_train, y_train, sample_weight=w_train)\n","sklearn_time = time.time()-t0\n","print(\"[Scikit-Learn] Training time (s): {0:.5f}\".format(sklearn_time))"]},{"cell_type":"markdown","id":"bfaf66ee-a51c-43a2-8c33-5e38fa16e6c1","metadata":{},"source":["
\n","

Build a Decision Tree Classifier model with Snap ML

\n","
\n"]},{"cell_type":"code","execution_count":66,"id":"52f544f8-fdf0-4414-b5b1-551298a47235","metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["[Snap ML] Training time (s): 2.49522\n"]}],"source":["# if not already computed, \n","# compute the sample weights to be used as input to the train routine so that \n","# it takes into account the class imbalance present in this dataset\n","# w_train = compute_sample_weight('balanced', y_train)\n","\n","# import the Decision Tree Classifier Model from Snap ML\n","from snapml import DecisionTreeClassifier\n","\n","# Snap ML offers multi-threaded CPU/GPU training of decision trees, unlike scikit-learn\n","# to use the GPU, set the use_gpu parameter to True\n","# snapml_dt = DecisionTreeClassifier(max_depth=4, random_state=45, use_gpu=True)\n","\n","# to set the number of CPU threads used at training time, set the n_jobs parameter\n","# for reproducible output across multiple function calls, set random_state to a given integer value\n","snapml_dt = DecisionTreeClassifier(max_depth=4, random_state=45, n_jobs=4)\n","\n","# train a Decision Tree Classifier model using Snap ML\n","t0 = time.time()\n","snapml_dt.fit(X_train, y_train, sample_weight=w_train)\n","snapml_time = time.time()-t0\n","print(\"[Snap ML] Training time (s): {0:.5f}\".format(snapml_time))"]},{"cell_type":"markdown","id":"863dac88-0c61-4ed5-b145-0b886cdaf59d","metadata":{},"source":["
\n","

Evaluate the Scikit-Learn and Snap ML Decision Tree Classifier Models

\n","
\n"]},{"cell_type":"code","execution_count":67,"id":"854e529e-6fd6-4643-bf5d-638328aa9c66","metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["[Decision Tree Classifier] Snap ML vs. Scikit-Learn speedup : 13.32x \n","[Scikit-Learn] ROC-AUC score : 0.966\n","[Snap ML] ROC-AUC score : 0.966\n"]}],"source":["# Snap ML vs Scikit-Learn training speedup\n","training_speedup = sklearn_time/snapml_time\n","print('[Decision Tree Classifier] Snap ML vs. Scikit-Learn speedup : {0:.2f}x '.format(training_speedup))\n","\n","# run inference and compute the probabilities of the test samples \n","# to belong to the class of fraudulent transactions\n","sklearn_pred = sklearn_dt.predict_proba(X_test)[:,1]\n","\n","# evaluate the Compute Area Under the Receiver Operating Characteristic \n","# Curve (ROC-AUC) score from the predictions\n","sklearn_roc_auc = roc_auc_score(y_test, sklearn_pred)\n","print('[Scikit-Learn] ROC-AUC score : {0:.3f}'.format(sklearn_roc_auc))\n","\n","# run inference and compute the probabilities of the test samples\n","# to belong to the class of fraudulent transactions\n","snapml_pred = snapml_dt.predict_proba(X_test)[:,1]\n","\n","# evaluate the Compute Area Under the Receiver Operating Characteristic\n","# Curve (ROC-AUC) score from the prediction scores\n","snapml_roc_auc = roc_auc_score(y_test, snapml_pred) \n","print('[Snap ML] ROC-AUC score : {0:.3f}'.format(snapml_roc_auc))"]},{"cell_type":"markdown","id":"bdfd6017-e6b3-4ae5-8622-d6042a00c703","metadata":{},"source":["As shown above both decision tree models provide the same score on the test dataset. However Snap ML runs the training routine 12x faster than Scikit-Learn. This is one of the advantages of using Snap ML: acceleration of training of classical machine learning models, such as linear and tree-based models. For more Snap ML examples, please visit [snapml-examples](https://ibm.biz/BdPfxP).\n"]},{"cell_type":"markdown","id":"93ba40ba-1bb0-4fee-be5d-30393685744e","metadata":{},"source":["
\n","

Build a Support Vector Machine model with Scikit-Learn

\n","
\n"]},{"cell_type":"code","execution_count":null,"id":"0aaa921a-6e17-4aa9-b501-d8c4eac4d746","metadata":{},"outputs":[],"source":["# import the linear Support Vector Machine (SVM) model from Scikit-Learn\n","from sklearn.svm import LinearSVC\n","\n","# instatiate a scikit-learn SVM model\n","# to indicate the class imbalance at fit time, set class_weight='balanced'\n","# for reproducible output across multiple function calls, set random_state to a given integer value\n","sklearn_svm = LinearSVC(class_weight='balanced', random_state=31, loss=\"hinge\", fit_intercept=False)\n","\n","# train a linear Support Vector Machine model using Scikit-Learn\n","t0 = time.time()\n","sklearn_svm.fit(X_train, y_train)\n","sklearn_time = time.time() - t0\n","print(\"[Scikit-Learn] Training time (s): {0:.2f}\".format(sklearn_time))"]},{"cell_type":"markdown","id":"f2eb1ece-234e-4490-9d71-10c534b9eec0","metadata":{},"source":["
\n","

Build a Support Vector Machine model with Snap ML

\n","
\n"]},{"cell_type":"code","execution_count":null,"id":"2078a824-1839-4c36-9a0d-2c19c39a01d4","metadata":{},"outputs":[],"source":["# import the Support Vector Machine model (SVM) from Snap ML\n","from snapml import SupportVectorMachine\n","\n","# in contrast to scikit-learn's LinearSVC, Snap ML offers multi-threaded CPU/GPU training of SVMs\n","# to use the GPU, set the use_gpu parameter to True\n","# snapml_svm = SupportVectorMachine(class_weight='balanced', random_state=25, use_gpu=True, fit_intercept=False)\n","\n","# to set the number of threads used at training time, one needs to set the n_jobs parameter\n","snapml_svm = SupportVectorMachine(class_weight='balanced', random_state=25, n_jobs=4, fit_intercept=False)\n","# print(snapml_svm.get_params())\n","\n","# train an SVM model using Snap ML\n","t0 = time.time()\n","model = snapml_svm.fit(X_train, y_train)\n","snapml_time = time.time() - t0\n","print(\"[Snap ML] Training time (s): {0:.2f}\".format(snapml_time))"]},{"cell_type":"markdown","id":"fd2825c3-05d2-4177-956d-7c2723c13449","metadata":{},"source":["
\n","

Evaluate the Scikit-Learn and Snap ML Support Vector Machine Models

\n","
\n"]},{"cell_type":"code","execution_count":null,"id":"13d141f3-fc01-4fff-9225-7ee5b8cdb13d","metadata":{},"outputs":[],"source":["# compute the Snap ML vs Scikit-Learn training speedup\n","training_speedup = sklearn_time/snapml_time\n","print('[Support Vector Machine] Snap ML vs. Scikit-Learn training speedup : {0:.2f}x '.format(training_speedup))\n","\n","# run inference using the Scikit-Learn model\n","# get the confidence scores for the test samples\n","sklearn_pred = sklearn_svm.decision_function(X_test)\n","\n","# evaluate accuracy on test set\n","acc_sklearn = roc_auc_score(y_test, sklearn_pred)\n","print(\"[Scikit-Learn] ROC-AUC score: {0:.3f}\".format(acc_sklearn))\n","\n","# run inference using the Snap ML model\n","# get the confidence scores for the test samples\n","snapml_pred = snapml_svm.decision_function(X_test)\n","\n","# evaluate accuracy on test set\n","acc_snapml = roc_auc_score(y_test, snapml_pred)\n","print(\"[Snap ML] ROC-AUC score: {0:.3f}\".format(acc_snapml))"]},{"cell_type":"markdown","id":"d9c9c383-8488-4c4e-9ec9-2c87b60332a4","metadata":{},"source":["As shown above both SVM models provide the same score on the test dataset. However, as in the case of decision trees, Snap ML runs the training routine faster than Scikit-Learn. For more Snap ML examples, please visit [snapml-examples](https://ibm.biz/BdPfxP). Moreover, as shown above, not only is Snap ML seemlessly accelerating scikit-learn applications, but the library's Python API is also compatible with scikit-learn metrics and data preprocessors.\n"]},{"cell_type":"markdown","id":"bb0ef68e-9160-4472-8072-aace3e649ecf","metadata":{},"source":["### Practice\n"]},{"cell_type":"markdown","id":"6ec6d773-355a-45df-834a-497678a83797","metadata":{},"source":["In this section you will evaluate the quality of the SVM models trained above using the hinge loss metric (https://scikit-learn.org/stable/modules/generated/sklearn.metrics.hinge_loss.html). Run inference on the test set using both Scikit-Learn and Snap ML models. Compute the hinge loss metric for both sets of predictions. Print the hinge losses of Scikit-Learn and Snap ML.\n"]},{"cell_type":"code","execution_count":null,"id":"2b4cdadb-0dc7-46df-a96a-c03a70023704","metadata":{},"outputs":[],"source":["# your code goes here"]},{"cell_type":"code","execution_count":null,"id":"255c8bf9-979b-46dd-8ab1-80c6026e26c0","metadata":{},"outputs":[],"source":["# get the confidence scores for the test samples\n","sklearn_pred = sklearn_svm.decision_function(X_test)\n","snapml_pred = snapml_svm.decision_function(X_test)\n","\n","# import the hinge_loss metric from scikit-learn\n","from sklearn.metrics import hinge_loss\n","\n","# evaluate the hinge loss metric from the predictions\n","loss_sklearn = hinge_loss(y_test, sklearn_pred)\n","print(\"[Scikit-Learn] Hinge loss: {0:.3f}\".format(loss_sklearn))\n","\n","# evaluate the hinge loss from the predictions\n","loss_snapml = hinge_loss(y_test, snapml_pred)\n","print(\"[Snap ML] Hinge loss: {0:.3f}\".format(loss_snapml))\n","\n","\n","# the two models should give the same Hinge loss"]},{"cell_type":"code","execution_count":70,"metadata":{},"outputs":[{"name":"stderr","output_type":"stream","text":["156768.14s - pydevd: Sending message related to process being replaced timed-out after 5 seconds\n"]}],"source":["!rm -r /home/bbearce/Documents/code-journal/docs/notes/machine_learning/Coursera/JupyterNotebooks/creditcardfraud"]},{"cell_type":"markdown","id":"ac1c96f3-aa3e-4994-badd-135ba2f262ea","metadata":{},"source":["## Authors\n"]},{"cell_type":"markdown","id":"48d1f5f9-a1f1-4237-99b2-ec5365924ce8","metadata":{},"source":["Andreea Anghel\n"]},{"cell_type":"markdown","id":"ee595903-8c72-458b-83ac-4f97d7f0d474","metadata":{},"source":["### Other Contributors\n"]},{"cell_type":"markdown","id":"d04171cd-fad2-4bf4-a519-2e6821d5a5e3","metadata":{},"source":["Joseph Santarcangelo\n"]},{"cell_type":"markdown","id":"7f3815b6-3b71-4310-aac3-28cd8277a85f","metadata":{},"source":["## Change Log\n"]},{"cell_type":"markdown","id":"f64915d1-9b98-4de7-840e-b9018b59ee1d","metadata":{},"source":["| Date (YYYY-MM-DD) | Version | Changed By | Change Description |\n","|---|---|---|---|\n","| 2021-08-31 | 0.1 | AAN | Created Lab Content |\n"]},{"cell_type":"markdown","id":"54920996-2b56-4130-b1d4-14262bc459e0","metadata":{},"source":[" Copyright © 2021 IBM Corporation. This notebook and its source code are released under the terms of the [MIT License](https://cognitiveclass.ai/mit-license/).\n"]}],"metadata":{"kernelspec":{"display_name":"venv3.10.4","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.4"}},"nbformat":4,"nbformat_minor":4}