diff --git a/end_to_end/fraud_detection/0-AutoClaimFraudDetection.ipynb b/end_to_end/fraud_detection/0-AutoClaimFraudDetection.ipynb index 10f0eab24f..a0bf5248a8 100644 --- a/end_to_end/fraud_detection/0-AutoClaimFraudDetection.ipynb +++ b/end_to_end/fraud_detection/0-AutoClaimFraudDetection.ipynb @@ -4,153 +4,31 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# SageMaker End to End Solutions: Fraud Detection for Automobile Claims" + "# Fraud Detection for Automobile Claims: Data Exploration" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "## Background\n", "\n", - "## [Overview](./0-AutoClaimFraudDetection.ipynb)\n", - "* **[Notebook 0 : Overview, Architecture, and Data Exploration](./0-AutoClaimFraudDetection.ipynb)**\n", - " * **[Business Problem](#business-problem)**\n", - " * **[Technical Solution](#nb0-solution)**\n", - " * **[Solution Components](#nb0-components)**\n", - " * **[Solution Architecture](#nb0-architecture)**\n", - " * **[DataSets and Exploratory Data Analysis](#nb0-data-explore)**\n", - " * **[Exploratory Data Science and Operational ML workflows](#nb0-workflows)**\n", - " * **[The ML Life Cycle: Detailed View](#nb0-ml-lifecycle)**\n", - "* [Notebook 1: Data Prep, Process, Store Features](./1-data-prep-e2e.ipynb)\n", - " * Architecture\n", - " * Getting started\n", - " * DataSets\n", - " * SageMaker Feature Store\n", - " * Create train and test datasets\n", - "* [Notebook 2: Train, Check Bias, Tune, Record Lineage, and Register a Model](./2-lineage-train-assess-bias-tune-registry-e2e.ipynb)\n", - " * Architecture\n", - " * Train a model using XGBoost\n", - " * Model lineage with artifacts and associations\n", - " * Evaluate the model for bias with Clarify\n", - " * Deposit Model and Lineage in SageMaker Model Registry\n", - "* [Notebook 3: Mitigate Bias, Train New Model, Store in Registry](./3-mitigate-bias-train-model2-registry-e2e.ipynb)\n", - " * Architecture\n", - " * Develop a second model\n", - " * Analyze the Second Model for Bias\n", - " * View Results of Clarify Bias Detection Job\n", - " * Configure and Run Clarify Explainability Job\n", - " * Create Model Package for second trained model\n", - "* [Notebook 4: Deploy Model, Run Predictions](./4-deploy-run-inference-e2e.ipynb)\n", - " * Architecture\n", - " * Deploy an approved model and Run Inference via Feature Store\n", - " * Create a Predictor\n", - " * Run Predictions from Online FeatureStore\n", - "* [Notebook 5 : Create and Run an End-to-End Pipeline to Deploy the Model](./5-pipeline-e2e.ipynb)\n", - " * Architecture\n", - " * Create an Automated Pipeline\n", - " * Clean up" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Overview, Architecture, and Data Exploration\n", - "\n", - "In this overview notebook, we will address business problems regarding auto insurance fraud, technical solutions, explore dataset, solution architecture, and scope the machine learning (ML) life cycle." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - " \n", - "\n", - "## Business Problem\n", - "\n", - "[overview](#overview-0)\n", - "\n", - " \"Auto insurance fraud ranges from misrepresenting facts on insurance applications and inflating insurance claims to staging accidents and submitting claim forms for injuries or damage that never occurred, to false reports of stolen vehicles.\n", - "Fraud accounted for between 15 percent and 17 percent of total claims payments for auto insurance bodily injury in 2012, according to an Insurance Research Council (IRC) study. The study estimated that between $\\$5.6$ billion and $\\$7.7$ billion was fraudulently added to paid claims for auto insurance bodily injury payments in 2012, compared with a range of $\\$4.3$ billion to $\\$5.8$ billion in 2002. \" [source: Insurance Information Institute](https://www.iii.org/article/background-on-insurance-fraud)\n", - "\n", - "In this example, we will use an *auto insurance domain* to detect claims that are possibly fraudulent. \n", - "more precisley we address the use-case: \"what is the likelihood that a given autoclaim is fraudulent?\" , and explore the technical solution. \n", - "\n", - "As you review the [notebooks](#nb0-notebooks) and the [architectures](#nb0-architecture) presented at each stage of the ML life cycle, you will see how you can leverage SageMaker services and features to enhance your effectiveness as a data scientist, as a machine learning engineer, and as an ML Ops Engineer.\n", - "\n", - "We will then do [data exploration](#nb0-data-explore) on the synthetically generated datasets for Customers and Claims.\n", - "\n", - "Then, we will provide an overview of the technical solution by examining the [Solution Components](#nb0-components) and the [Solution Architecture](#nb0-architecture).\n", - "We will be motivated by the need to accomplish new tasks in ML by examining a [detailed view of the Machine Learning Life-cycle](#nb0-ml-lifecycle), recognizing the [separation of exploratory data science and operationalizing an ML worklfow](#nb0-workflows).\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Car Insurance Claims: Data Sets and Problem Domain\n", - "\n", - "The inputs for building our model and workflow are two tables of insurance data: a claims table and a customers table. This data was synthetically generated is provided to you in its raw state for pre-processing with SageMaker Data Wrangler. However, completing the Data Wragnler step is not required to continue with the rest of this notebook. If you wish, you may use the `claims_preprocessed.csv` and `customers_preprocessed.csv` in the `data` directory as they are exact copies of what Data Wragnler would output." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - " \n", - "\n", - "## Technical Solution\n", - "[overview](#overview-0)\n", + "This notebook is the first part of a series of notebooks that will demonstrate how to prepare, train, and deploy a model that detects fradulent autoclaims. In this notebook, we will focusing on data exploration. You can choose to run this notebook by itself or in sequence with the other notebooks listed below. Please see the [README.md](README.md) for more information about this use case implemented by this series of notebooks. \n", "\n", - "In this introduction, you will look at the technical architecture and solution components to build a solution for predicting fraudulent insurance claims and deploy it using SageMaker for real-time predictions. While a deployed model is the end-product of this notebook series, the purpose of this guide is to walk you through all the detailed stages of the [machine learning (ML) lifecycle](#ml-lifecycle) and show you what SageMaker servcies and features are there to support your activities in each stage.\n", "\n", - "**Topics**\n", - "- [Solution Components](#nb0-components)\n", - "- [Solution Architecture](#nb0-architecture)\n", - "- [Code Resources](#nb0-code)\n", - "- [ML lifecycle details](#nb0-ml-lifecycle)\n", - "- [Manual/exploratory and automated workflows](#nb0-workflows) " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - " \n", - "\n", - "## Solution Components\n", - "[overview](#overview-0)\n", - " \n", - "The following [SageMaker](https://sagemaker.readthedocs.io/en/stable/v2.html) Services are used in this solution:\n", - "\n", - " 1. [SageMaker DataWrangler](https://aws.amazon.com/sagemaker/data-wrangler/) - [docs](https://docs.aws.amazon.com/sagemaker/latest/dg/data-wrangler.html)\n", - " 1. [SageMaker Processing](https://aws.amazon.com/blogs/aws/amazon-sagemaker-processing-fully-managed-data-processing-and-model-evaluation/) - [docs](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_processing.html)\n", - " 1. [SageMaker Feature Store](https://aws.amazon.com/sagemaker/feature-store/)- [docs](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_featurestore.html)\n", - " 1. [SageMaker Clarify](https://aws.amazon.com/sagemaker/clarify/)- [docs](https://docs.aws.amazon.com/sagemaker/latest/dg/clarify-processing-job-run.html)\n", - " 1. [SageMaker Training with XGBoost Algorithm and Hyperparameter Optimization](https://sagemaker.readthedocs.io/en/stable/frameworks/xgboost/using_xgboost.html)- [docs](https://sagemaker.readthedocs.io/en/stable/frameworks/xgboost/index.html)\n", - " 1. [SageMaker Model Registry](https://docs.aws.amazon.com/sagemaker/latest/dg/model-registry.html)- [docs](https://docs.aws.amazon.com/sagemaker/latest/dg/model-registry-deploy.html#model-registry-deploy-api)\n", - " 1. [SageMaker Hosted Endpoints]()- [predictors - docs](https://sagemaker.readthedocs.io/en/stable/api/inference/predictors.html)\n", - " 1. [SageMaker Pipelines]()- [docs](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/index.html)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "![Solution Components](images/solution-components-e2e.png)" + "1. **[Fraud Detection for Automobile Claims: Data Exploration](./0-AutoClaimFraudDetection.ipynb)**\n", + "1. [Fraud Detection for Automobile Claims: Data Preparation, Process, and Store Features](./1-data-prep-e2e.ipynb)\n", + "1. [Fraud Detection for Automobile Claims: Train, Check Bias, Tune, Record Lineage, and Register a Model](./2-lineage-train-assess-bias-tune-registry-e2e.ipynb)\n", + "1. [Fraud Detection for Automobile Claims: Mitigate Bias, Train, Register, and Deploy Unbiased Model](./3-mitigate-bias-train-model2-registry-e2e.ipynb)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - " \n", - "\n", - "## DataSets and Exploratory Visualizations\n", - "[overview](#overview-0)\n", + "## Datasets and Exploratory Visualizations\n", "\n", - "The dataset is synthetically generated and consists of customers and claims datasets.\n", + "The dataset is synthetically generated and consists of customers and claims datasets.\n", "Here we will load them and do some exploratory visualizations." ] }, @@ -201,20 +79,9 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXgAAAEaCAYAAAAboUz3AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAWW0lEQVR4nO3dfXBUd73H8c/uCQGE0CQ7u+lGKxEqsEpwxirOSEF56F3UzSQFa5z0wQ4ax4cZtFO1kbnNgzqFtbSOxaKS3rbG6MiklKZsY3GoYw3MkE5tR6ILsWIQYpckbpohqZfCPdn7R8fYbSC7Ibs5yY/3669N9pvMB/bw4eSbs7uuRCKREADAOG6nAwAAsoOCBwBDUfAAYCgKHgAMRcEDgKEoeAAwFAUPAIbKcTrAW7322usaGeGy/EzweOYrHh92OgYwBsdm5rjdLhUUzLvs/dOq4EdGEhR8BvF3iemKY3NqsKIBAENR8ABgKAoeAAyV1g6+u7tbNTU1GhwcVH5+vsLhsEpKSpJmvvWtb6mrq2v0466uLj388MNav359RgMDANLjSufVJO+44w5t3rxZ5eXlam1t1b59+9TU1HTZ+RMnTuhzn/uc2tvblZubm3aYeHyYX75kiNebp/7+IadjAGNwbGaO2+2SxzP/8ven+gbxeFzRaFShUEiSFAqFFI1GNTAwcNmveeKJJ1RWVjahcgcAZFbKgo/FYioqKpJlWZIky7Lk8/kUi8UuOX/hwgUdOHBAmzdvzmxSAMCEZPw6+EOHDqm4uFiBQGDCXzvejxrTxYWLtnJnWU7HSIvXm+d0hJRm0t8nMmcmHJsmSFnwfr9fvb29sm1blmXJtm319fXJ7/dfcn7fvn1XfPY+E3bwXm+eyu5udTqGMQ48UM4+9irDDj5zJr2D93g8CgQCikQikqRIJKJAIKDCwsIxs2fPntUf/vCH0X09AMA5aV0HX19fr+bmZgWDQTU3N6uhoUGSVF1drc7OztG5/fv3a+3atcrPz89OWgBA2tK6THKqsKK5+rCiufqwosmcSa9oAAAzEwUPAIai4AHAUBQ8ABiKggcAQ1HwAGAoCh4ADEXBA4ChKHgAMBQFDwCGouABwFAUPAAYioIHAENR8ABgKAoeAAxFwQOAoSh4ADAUBQ8AhqLgAcBQFDwAGCqtgu/u7lZlZaWCwaAqKyt16tSpS861tbWprKxMoVBIZWVl+uc//5nJrACACchJZ6iurk5VVVUqLy9Xa2uramtr1dTUlDTT2dmpH/3oR/rZz34mr9eroaEh5ebmZiU0ACC1lGfw8Xhc0WhUoVBIkhQKhRSNRjUwMJA09/jjj2vLli3yer2SpLy8PM2ePTsLkQEA6UhZ8LFYTEVFRbIsS5JkWZZ8Pp9isVjS3MmTJ3XmzBndeuutuvnmm7V7924lEonspAYApJTWiiYdtm2rq6tLjz32mC5cuKAvfOELKi4uVkVFRdrfw+OZn6k4mEG83jynI2CK8ZhPjZQF7/f71dvbK9u2ZVmWbNtWX1+f/H5/0lxxcbE2btyo3Nxc5ebmav369Tp27NiECj4eH9bIyPQ+6+fAzLz+/iGnI2AKeb15POYZ4na7xj0xTrmi8Xg8CgQCikQikqRIJKJAIKDCwsKkuVAopMOHDyuRSOjixYs6evSoli1bNsn4AIArldZlkvX19WpublYwGFRzc7MaGhokSdXV1ers7JQkfepTn5LH49EnP/lJVVRU6Prrr9enP/3p7CUHAIzLlZhGvwmdKSuasrtbnY5hjAMPlPPj+lWGFU3mTHpFAwCYmSh4ADAUBQ8AhqLgAcBQFDwAGIqCBwBDUfAAYCgKHgAMRcEDgKEoeAAwFAUPAIai4AHAUBQ8ABiKggcAQ1HwAGAoCh4ADEXBA4ChKHgAMBQFDwCGouABwFAUPAAYKiedoe7ubtXU1GhwcFD5+fkKh8MqKSlJmtm1a5d++ctfyufzSZI++MEPqq6uLuOBAQDpSavg6+rqVFVVpfLycrW2tqq2tlZNTU1j5ioqKnTPPfdkPCQAYOJSrmji8bii0ahCoZAkKRQKKRqNamBgIOvhAABXLmXBx2IxFRUVybIsSZJlWfL5fIrFYmNmn3nmGZWVlWnLli16+eWXM58WAJC2tFY06fjsZz+rL33pS5o1a5aOHDmir3zlK2pra1NBQUHa38PjmZ+pOJhBvN48pyNgivGYT42UBe/3+9Xb2yvbtmVZlmzbVl9fn/x+f9Kc1+sdvb1q1Sr5/X698sorWrlyZdph4vFhjYwkJhB/6nFgZl5//5DTETCFvN48HvMMcbtd454Yp1zReDweBQIBRSIRSVIkElEgEFBhYWHSXG9v7+jt48eP6x//+Ife8573XGluAMAkpbWiqa+vV01NjXbv3q0FCxYoHA5Lkqqrq7V161aVlpbqwQcf1J///Ge53W7NmjVL3//+95PO6gEAU8uVSCSmzU5kpqxoyu5udTqGMQ48UM6P61cZVjSZM+kVDQBgZqLgAcBQFDwAGIqCBwBDUfAAYCgKHgAMRcEDgKEoeAAwFAUPAIai4AHAUBQ8ABiKggcAQ1HwAGAoCh4ADEXBA4ChKHgAMBQFDwCGouABwFAUPAAYioIHAENR8ABgqLQKvru7W5WVlQoGg6qsrNSpU6cuO/u3v/1NH/jABxQOhzOVEQBwBdIq+Lq6OlVVVengwYOqqqpSbW3tJeds21ZdXZ02bNiQ0ZAAgIlLWfDxeFzRaFShUEiSFAqFFI1GNTAwMGZ2z549+vjHP66SkpKMBwUATEzKgo/FYioqKpJlWZIky7Lk8/kUi8WS5k6cOKHDhw/rzjvvzEpQAMDE5GTim1y8eFH33nuvtm/fPvofwZXweOZnIg5mGK83z+kImGI85lMjZcH7/X719vbKtm1ZliXbttXX1ye/3z8609/fr9OnT+uLX/yiJOncuXNKJBIaHh7Wd7/73bTDxOPDGhlJXMEfY+pwYGZef/+Q0xEwhbzePB7zDHG7XeOeGKcseI/Ho0AgoEgkovLyckUiEQUCARUWFo7OFBcXq6OjY/TjXbt26V//+pfuueeeScYHAFyptK6iqa+vV3Nzs4LBoJqbm9XQ0CBJqq6uVmdnZ1YDAgCujCuRSEybnchMWdGU3d3qdAxjHHignB/XrzKsaDIn1YqGZ7ICgKEoeAAwFAUPAIai4AHAUBQ8ABiKggcAQ1HwAGAoCh4ADEXBA4ChKHgAMBQFDwCGouABwFAUPAAYioIHAENR8ABgKAoeAAxFwQOAoSh4ADAUBQ8AhqLgAcBQOekMdXd3q6amRoODg8rPz1c4HFZJSUnSzL59+/T444/L7XZrZGREt9xyi+64445sZAYApCGtgq+rq1NVVZXKy8vV2tqq2tpaNTU1Jc0Eg0Ft2rRJLpdLw8PDKisr08qVK7Vs2bKsBAcAjC/liiYejysajSoUCkmSQqGQotGoBgYGkubmz58vl8slSTp//rwuXrw4+jEAYOqlPIOPxWIqKiqSZVmSJMuy5PP5FIvFVFhYmDT73HPP6cEHH9Tp06d19913a+nSpdlJDWCMvAVzNWd2Wj+UO87rzXM6Qkrn3/g/DZ37X6djTEpGj4b169dr/fr1evXVV/XVr35Va9as0aJFi9L+eo9nfibjYIaYCf/YZ4qyu1udjmCMAw+Ua84MPzZTFrzf71dvb69s25ZlWbJtW319ffL7/Zf9muLiYpWWlup3v/vdhAo+Hh/WyEgi7XknUEaZ198/5HQEI3BsZt50Pzbdbte4J8Ypd/Aej0eBQECRSESSFIlEFAgExqxnTp48OXp7YGBAHR0dWrJkyZXmBgBMUlormvr6etXU1Gj37t1asGCBwuGwJKm6ulpbt25VaWmp9u7dqyNHjignJ0eJREK33XabbrzxxqyGBwBcXloFv3jxYrW0tIz5fGNj4+jtbdu2ZS4VAGDSeCYrABiKggcAQ1HwAGAoCh4ADEXBA4ChKHgAMBQFDwCGouABwFAUPAAYioIHAENR8ABgKAoeAAxFwQOAoSh4ADAUBQ8AhqLgAcBQFDwAGIqCBwBDUfAAYCgKHgAMRcEDgKFy0hnq7u5WTU2NBgcHlZ+fr3A4rJKSkqSZhx9+WG1tbbIsSzk5Obrrrru0evXqbGQGAKQhrYKvq6tTVVWVysvL1draqtraWjU1NSXNrFixQlu2bNHcuXN14sQJ3XbbbTp8+LDmzJmTleAAgPGlXNHE43FFo1GFQiFJUigUUjQa1cDAQNLc6tWrNXfuXEnS0qVLlUgkNDg4mIXIAIB0pCz4WCymoqIiWZYlSbIsSz6fT7FY7LJf89RTT+nd7363rr322swlBQBMSFormol44YUX9MMf/lCPPvrohL/W45mf6TiYAbzePKcjAJc004/NlAXv9/vV29sr27ZlWZZs21ZfX5/8fv+Y2Zdfflnf/OY3tXv3bi1atGjCYeLxYY2MJCb8dVNppj/g01F//5DTEYzAsZl50/3YdLtd454Yp1zReDweBQIBRSIRSVIkElEgEFBhYWHS3LFjx3TXXXfpoYce0vvf//5JxgYATFZa18HX19erublZwWBQzc3NamhokCRVV1ers7NTktTQ0KDz58+rtrZW5eXlKi8vV1dXV/aSAwDGldYOfvHixWppaRnz+cbGxtHb+/bty1wqAMCk8UxWADAUBQ8AhqLgAcBQFDwAGIqCBwBDUfAAYCgKHgAMRcEDgKEoeAAwFAUPAIai4AHAUBQ8ABiKggcAQ1HwAGAoCh4ADEXBA4ChKHgAMBQFDwCGouABwFAUPAAYioIHAEOlVfDd3d2qrKxUMBhUZWWlTp06NWbm8OHD2rRpk5YvX65wOJzpnACACUqr4Ovq6lRVVaWDBw+qqqpKtbW1Y2auu+46fe9739PnP//5jIcEAExcyoKPx+OKRqMKhUKSpFAopGg0qoGBgaS5hQsX6n3ve59ycnKykxQAMCEpCz4Wi6moqEiWZUmSLMuSz+dTLBbLejgAwJWbVqfbHs98pyPAAV5vntMRgEua6cdmyoL3+/3q7e2VbduyLEu2bauvr09+vz/jYeLxYY2MJDL+fTNppj/g01F//5DTEYzAsZl50/3YdLtd454Yp1zReDweBQIBRSIRSVIkElEgEFBhYWHmUgIAMi6tq2jq6+vV3NysYDCo5uZmNTQ0SJKqq6vV2dkpSXrxxRe1Zs0aPfbYY/rVr36lNWvWqL29PXvJAQDjSmsHv3jxYrW0tIz5fGNj4+jtD33oQ/r973+fuWQAgEnhmawAYCgKHgAMRcEDgKEoeAAwFAUPAIai4AHAUBQ8ABiKggcAQ1HwAGAoCh4ADEXBA4ChKHgAMBQFDwCGouABwFAUPAAYioIHAENR8ABgKAoeAAxFwQOAoSh4ADAUBQ8Ahkqr4Lu7u1VZWalgMKjKykqdOnVqzIxt22poaNCGDRt00003qaWlJdNZAQATkFbB19XVqaqqSgcPHlRVVZVqa2vHzBw4cECnT5/Wb37zG+3du1e7du1ST09PxgMDANKTsuDj8bii0ahCoZAkKRQKKRqNamBgIGmura1Nt9xyi9xutwoLC7VhwwY9++yz2UkNAEgpJ9VALBZTUVGRLMuSJFmWJZ/Pp1gspsLCwqS54uLi0Y/9fr/Onj07oTBut2tC807xFcx1OoJRZsrjPhNwbGbWdD82U+VLWfBTqaBgntMR0vI///1fTkcwiscz3+kIxuDYzKyZfmymXNH4/X719vbKtm1Jb/4yta+vT36/f8zcq6++OvpxLBbTtddem+G4AIB0pSx4j8ejQCCgSCQiSYpEIgoEAknrGUnauHGjWlpaNDIyooGBAR06dEjBYDA7qQEAKbkSiUQi1dDJkydVU1Ojc+fOacGCBQqHw1q0aJGqq6u1detWlZaWyrZtfec739GRI0ckSdXV1aqsrMz6HwAAcGlpFTwAYObhmawAYCgKHgAMRcEDgKEoeAAwFAUPAIai4AHAUBQ8ABiKgjdIIpFQS0uL7r//fklST0+PXnrpJYdTAf/x9lehRXZR8AbZvn27jh49queee06SNG/ePN13330OpwKkP/7xj1q7dq1uvvlmSVJnZ6fuvfdeh1OZj4I3SEdHh3bu3Kk5c+ZIkgoKCvTGG284nAp48+SjsbFRBQUFkqTS0lJ+upwCFLxBZs+eLZfrP68PPTIy4mAa4D8uXryo66+/Pulzs2bNcijN1WNavR48JmfJkiV6+umnlUgk1NPToz179uiGG25wOhag3Nxcvf7666MnIH/96181e/Zsh1OZjxcbM8jw8LB27Nih3/72t5KkdevW6dvf/rbmzZsZb6QCcz3//PP68Y9/rDNnzmj16tVqb2/X/fffr49+9KNORzMaBQ9gSpw5c0bt7e1KJBK68cYbtXDhQqcjGY+CN8Dzzz8/7v0f+9jHpigJgOmEHbwBHnnkkcve53K5KHg4ZvPmzUm/+H+7J554YgrTXH04gweQNS+88MK4969cuXKKklydKHjDDA0Nqbu7O+n69w9/+MMOJgLgFFY0Bmlra1M4HNa5c+fk8/l0+vRpLVu2TPv373c6Gq5yQ0NDamxs1PHjx5NOPpqamhxMZT6e6GSQn/zkJ3ryySe1cOFCHTx4UI888ohWrFjhdCxA27Ztk9vt1qlTp/SZz3xGlmVxbE4BCt4gOTk58ng8sm1bkrRq1Sp1dXU5nAqQ/v73v+vrX/+65syZo1AopJ/+9Kf605/+5HQs47GiMUhubq4SiYQWLlyon//853rnO9+p1157zelYgHJzcyW9+fIEg4ODuuaaa3T27FmHU5mPgjfI1772NQ0PD+sb3/iG6uvrNTQ0pPr6eqdjASopKdHg4KDKyspUWVmpvLw8BQIBp2MZj6toDPCLX/xi3PtvvfXWKUoCpPbiiy9qaGhIa9askWVZTscxGgVvgGXLlmn58uV673vfe8n7t2/fPsWJgEu7cOHC6O+IJGnu3LkOpjEfBW+Affv26amnntL58+dVUVGhUCika665xulYwKhnn31W27dvV19fn6Q3333M5XLp+PHjDiczGwVvkJ6eHu3fv1+//vWvtWTJEn35y1/W0qVLnY4FaP369frBD36g5cuXy+3m4r2pwt+0Qd71rnfpzjvv1O23366Ojg4dO3bM6UiAJMnr9WrFihWU+xTjDN4AiURC7e3tevLJJ/WXv/xFn/jEJ1RRUaHrrrvO6WiAJOmZZ57RK6+8optuuinpjT7e/i5PyCwK3gCrV6+W1+vVpk2b9JGPfGTMq/fxjwhOe/TRR/XQQw8pPz9/9Cze5XKNvkE8soOCN8C6detGb7tcLr31IeUfEaaDtWvXau/evfL5fE5HuarwRCcD/Pst+oDpqri4mHJ3AGfwALIuHA6rt7dXGzduTNrB82Y02UXBA8i622+/fcznXC4XLxecZRQ8ABiKi1IBZF0ikVBLS4t27twp6c0n5b300ksOpzIfBQ8g67Zv366jR4/q0KFDkqR58+bpvvvucziV+Sh4AFnX0dGhnTt3as6cOZKkgoKCpLfuQ3ZQ8ACybvbs2UlPwBsZGXEwzdWD6+ABZN2SJUv09NNPK5FIqKenR3v27NENN9zgdCzjcRUNgKwbHh7Wjh07Rp+Ut27dOm3btk3veMc7HE5mNgoeQNbs2LFDNTU1kqQjR45o1apVDie6urCDB5A1HR0do7f/fYkkpg4FDyBr3rogYFkw9fglK4CsuXDhgk6ePKlEIpF0+994KevsYgcPIGve+lLWb8dLWWcfBQ8AhmIHDwCGouABwFAUPAAYioIHAENR8ABgqP8HjhpeEnC9pxEAAAAASUVORK5CYII=\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# plot the bar graph customer gender\n", "df_customers.customer_gender_female.value_counts(normalize=True).plot.bar()\n", @@ -230,20 +97,9 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXgAAAEnCAYAAACjRViEAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAVBklEQVR4nO3de2zV9f3H8dc5hzut0nPWltMxUkHnTuaFOf+Y2VCnyCHzdMVF2q2MBI2HxTnNiGPr3NZSILrqjHHVjGl+MEiZM0S06QlriS7LxGyYXa0rNg7LGuC0xVMqbbm1p+f3Bz/PjwbhnMJpvz3vPh+JyTmnH46vcr68+PT9/XKOK5FIJAQAMMftdAAAwNig4AHAKAoeAIyi4AHAKAoeAIyi4AHAqClOBzjXsWMDGh7mqs1M8PlyFIv1Ox0DOA/HZua43S7l5c2+4NdTFnxtba2am5t1+PBhNTY26rOf/ex5a+LxuDZt2qQ333xTLpdLa9as0YoVK0Yddng4QcFnEL+XmKg4NsdHyhHNnXfeqR07dujTn/70Bdc0Njaqo6NDe/bs0csvv6y6ujodOnQoo0EBAKOTsuBvvvlm+f3+i67ZvXu3VqxYIbfbLa/XqyVLlqipqSljIQEAo5eRGXw0GlVRUVHyvt/vV2dn56ifx+fLyUQc/J/8/FynIwCfiGNzfEyok6yxWD+zuQzJz8/V0aN9TscAzsOxmTlut+uiG+OMXCbp9/t15MiR5P1oNKq5c+dm4qkBAJcoIwW/bNky7dy5U8PDw+rp6dHrr7+uYDCYiacGAFyilAW/adMm3Xrrrers7NR9992nu+++W5IUDofV0tIiSSotLdW8efO0dOlSlZWV6aGHHtJnPvOZsU0OALgo10R6P3hm8JnDnBMTFcdm5qSawU+ok6zZIPeKmZoxPTt+27LhSoVTp4fUd/yk0zEAk7KjqSaQGdOnqOTRBqdjmNH4dKnYywFjgzcbAwCjKHgAMIqCBwCjKHgAMIqCBwCjKHgAMIqCBwCjKHgAMIqCBwCjKHgAMIqCBwCjKHgAMIqCBwCjKHgAMIqCBwCjKHgAMIqCBwCjKHgAMIqCBwCjKHgAMIqCBwCjKHgAMIqCBwCjKHgAMIqCBwCjKHgAMIqCBwCjKHgAMIqCBwCjKHgAMIqCBwCjpqSzqL29XZWVlert7dWcOXNUW1ur4uLiEWtisZh+/OMfKxqNanBwUF/60pf005/+VFOmpPW/AABkWFo7+OrqalVUVKi5uVkVFRWqqqo6b83mzZu1cOFCNTY2qrGxUf/+97+1Z8+ejAcGAKQnZcHHYjG1trYqFApJkkKhkFpbW9XT0zNincvl0sDAgIaHh3XmzBkNDg6qsLBwbFIDAFJKOT+JRqMqLCyUx+ORJHk8HhUUFCgajcrr9SbXffe739XDDz+sr3zlKzp58qRWrlypL37xi6MK4/PljDI+LMjPz3U6AsYZr/n4yNiAvKmpSddee622bdumgYEBhcNhNTU1admyZWk/RyzWr+HhRKYijQkOzMw7erTP6QgYR/n5ubzmGeJ2uy66MU45ovH7/erq6lI8HpckxeNxdXd3y+/3j1hXX1+vr3/963K73crNzdUdd9yhffv2XWZ8AMClSlnwPp9PgUBAkUhEkhSJRBQIBEaMZyRp3rx5+tOf/iRJOnPmjP785z/rmmuuGYPIAIB0pHUVzfr161VfX69gMKj6+nrV1NRIksLhsFpaWiRJjz32mP72t7+ppKREy5cvV3FxscrKysYuOQDgolyJRGLCDL2zZQZf8miD0zHMaHy6lHnsJMMMPnMuewYPAMhOFDwAGEXBA4BRFDwAGEXBA4BRFDwAGEXBA4BRFDwAGEXBA4BRFDwAGEXBA4BRFDwAGEXBA4BRFDwAGEXBA4BRFDwAGEXBA4BRFDwAGEXBA4BRFDwAGEXBA4BRFDwAGEXBA4BRFDwAGEXBA4BRFDwAGEXBA4BRFDwAGEXBA4BRFDwAGEXBA4BRFDwAGEXBA4BRFDwAGJVWwbe3t6u8vFzBYFDl5eU6ePDgJ67bvXu3SkpKFAqFVFJSog8//DCTWQEAozAlnUXV1dWqqKhQaWmpGhoaVFVVpe3bt49Y09LSoueee07btm1Tfn6++vr6NG3atDEJDQBILeUOPhaLqbW1VaFQSJIUCoXU2tqqnp6eEet+85vf6P7771d+fr4kKTc3V9OnTx+DyACAdKTcwUejURUWFsrj8UiSPB6PCgoKFI1G5fV6k+sOHDigefPmaeXKlTpx4oTuuusuPfjgg3K5XGmH8flyLuFbQLbLz891OgLGGa/5+EhrRJOOeDyutrY2bd26VWfOnNEDDzygoqIiLV++PO3niMX6NTycyFSkMcGBmXlHj/Y5HQHjKD8/l9c8Q9xu10U3xilHNH6/X11dXYrH45LOFnl3d7f8fv+IdUVFRVq2bJmmTZumnJwc3XnnnXrnnXcuMz4A4FKlLHifz6dAIKBIJCJJikQiCgQCI8Yz0tnZ/N69e5VIJDQ4OKi//OUv+tznPjc2qQEAKaV1meT69etVX1+vYDCo+vp61dTUSJLC4bBaWlokSXfffbd8Pp++9rWvafny5br66qt17733jl1yAMBFuRKJxIQZemfLDL7k0QanY5jR+HQp89hJhhl85lz2DB4AkJ0oeAAwioIHAKMoeAAwioIHAKMoeAAwioIHAKMoeAAwioIHAKMoeAAwioIHAKMoeAAwioIHAKMoeAAwioIHAKMoeAAwioIHAKMoeAAwioIHAKMoeAAwioIHAKMoeAAwioIHAKMoeAAwioIHAKMoeAAwioIHAKMoeAAwioIHAKMoeAAwioIHAKMoeAAwioIHAKPSKvj29naVl5crGAyqvLxcBw8evODaDz74QDfeeKNqa2szlREAcAnSKvjq6mpVVFSoublZFRUVqqqq+sR18Xhc1dXVWrJkSUZDAgBGL2XBx2Ixtba2KhQKSZJCoZBaW1vV09Nz3toXXnhBt99+u4qLizMeFAAwOikLPhqNqrCwUB6PR5Lk8XhUUFCgaDQ6Yt17772nvXv3avXq1WMSFAAwOlMy8SSDg4P62c9+pieeeCL5F8Gl8PlyMhEHWSY/P9fpCBhnvObjI2XB+/1+dXV1KR6Py+PxKB6Pq7u7W36/P7nm6NGj6ujo0Jo1ayRJx48fVyKRUH9/vzZu3Jh2mFisX8PDiUv4NsYPB2bmHT3a53QEjKP8/Fxe8wxxu10X3RinLHifz6dAIKBIJKLS0lJFIhEFAgF5vd7kmqKiIu3bty95v66uTidOnNCPfvSjy4wPALhUaV1Fs379etXX1ysYDKq+vl41NTWSpHA4rJaWljENCAC4NK5EIjFhZiLZMqIpebTB6RhmND5dyo/rkwwjmsxJNaLhX7ICgFEUPAAYRcEDgFEUPAAYRcEDgFEUPAAYRcEDgFEUPAAYRcEDgFEUPAAYRcEDgFEUPAAYRcEDgFEUPAAYRcEDgFEUPAAYRcEDgFEUPAAYRcEDgFEUPAAYRcEDgFEUPAAYRcEDgFEUPAAYRcEDgFEUPAAYRcEDgFEUPAAYRcEDgFEUPAAYRcEDgFEUPAAYRcEDgFEUPAAYNSWdRe3t7aqsrFRvb6/mzJmj2tpaFRcXj1jz/PPPa/fu3fJ4PJoyZYrWrl2rxYsXj0VmAEAa0ir46upqVVRUqLS0VA0NDaqqqtL27dtHrLnhhht0//33a+bMmXrvvff07W9/W3v37tWMGTPGJDgA4OJSjmhisZhaW1sVCoUkSaFQSK2trerp6RmxbvHixZo5c6Yk6dprr1UikVBvb+8YRAYApCPlDj4ajaqwsFAej0eS5PF4VFBQoGg0Kq/X+4m/5rXXXtP8+fM1d+7cUYXx+XJGtR425OfnOh0B44zXfHykNaIZjbffflvPPvustmzZMupfG4v1a3g4kelIGcWBmXlHj/Y5HQHjKD8/l9c8Q9xu10U3xilHNH6/X11dXYrH45KkeDyu7u5u+f3+89b+4x//0Lp16/T8889rwYIFlxEbAHC5Uha8z+dTIBBQJBKRJEUiEQUCgfPGM++8847Wrl2rX/7yl/r85z8/NmkBAGlL6zr49evXq76+XsFgUPX19aqpqZEkhcNhtbS0SJJqamp06tQpVVVVqbS0VKWlpWpraxu75ACAi3IlEokJM/TOlhl8yaMNTscwo/HpUuaxkwwz+My57Bk8ACA7UfAAYBQFDwBGUfAAYBQFDwBGUfAAYBQFDwBGUfAAYBQFDwBGUfAAYBQFDwBGUfAAYBQFDwBGUfAAYBQFDwBGUfAAYBQFDwBGUfAAYBQFDwBGUfAAYBQFDwBGUfAAYBQFDwBGUfAAYBQFDwBGUfAAYBQFDwBGUfAAYBQFDwBGUfAAYBQFDwBGTXE6AIDMyL1ipmZMz44/0vn5uU5HSOnU6SH1HT/pdIzLkh1HA4CUZkyfopJHG5yOYUbj06XqczrEZWJEAwBGpVXw7e3tKi8vVzAYVHl5uQ4ePHjemng8rpqaGi1ZskR33XWXdu7cmemsAIBRSKvgq6urVVFRoebmZlVUVKiqquq8NY2Njero6NCePXv08ssvq66uTocOHcp4YABAelLO4GOxmFpbW7V161ZJUigU0saNG9XT0yOv15tct3v3bq1YsUJut1ter1dLlixRU1OTHnjggbTDuN2uS/gWxl9B3kynI5iSLa97NuDYzKyJfmymypey4KPRqAoLC+XxeCRJHo9HBQUFikajIwo+Go2qqKgoed/v96uzs3NUYfPyZo9qvVP+56dLnY5gis+X43QEMzg2Myvbj01OsgKAUSkL3u/3q6urS/F4XNLZk6nd3d3y+/3nrTty5EjyfjQa1dy5czMcFwCQrpQF7/P5FAgEFIlEJEmRSESBQGDEeEaSli1bpp07d2p4eFg9PT16/fXXFQwGxyY1ACAlVyKRSKRadODAAVVWVur48eO64oorVFtbqwULFigcDuuRRx7R9ddfr3g8rg0bNuitt96SJIXDYZWXl4/5NwAA+GRpFTwAIPtwkhUAjKLgAcAoCh4AjKLgAcAoCh4AjKLgAcAoPvAjyz355JMX/foPf/jDcUoCYKJhB5/lZs2apVmzZunDDz/U73//ew0NDWloaEhNTU3q7+93Oh4AB/EPnYwIh8N68sknlZeXJ0k6duyYKisr9etf/9rhZJjMHnnkEblcF35L22effXYc00w+7OCNiEajyXKXpLy8PB0+fNjBRID01a9+Vbfffru8Xq8OHTqkm266STfddJOOHDmiefPmOR3PPGbwRixYsEA/+clPdO+990qSdu3apQULFjicCpPdPffcI0lqaGjQjh07NGPGDElSeXm5HnzwQSejTQrs4I14/PHHlZubq40bN2rDhg3KycnR448/7nQsQJLU2dmpadOmJe9PnTpV0WjUwUSTAzN4AGOuqqpKhw8fHrGj9/v92rBhg8PJbKPgjbjQ5ZJcJomJYHBwUL/73e/09ttvK5FI6JZbblFZWZmmTp3qdDTTmMEbMWvWrOTt06dP649//KOuu+46BxMB/2/q1KlatWqVVq1a5XSUSYUdvFH9/f1at26dfvWrXzkdBbjg5ZJcJjm22MEbNXv2bHV0dDgdA5B09nLJj50+fVrNzc1auHChg4kmBwreiHNn8IlEQu+++66uuuoqBxMB/+/jk6sf+8Y3vsFlkuOAgjfi3Bm8x+PRN7/5TS1dutTBRMCFuVwuHTp0yOkY5lHwRnzve99zOgJwQefO4BOJhNra2nTLLbc4nMo+TrIaMTQ0pFdeeUX79+/X6dOnk48/8cQTDqYCznr11VeTtz0ej+bPn69FixY5mGhyYAdvRFVVleLxuPbt26dvfetbikQiuvnmm52OBUg6fwaP8UHBG9HS0qLGxkaVlJToO9/5jioqKvT973/f6ViAJKmvr08vvvjieT9hbt++3cFU9vFeNEZMnz5d0tkff0+ePKnc3Fx1d3c7nAo467HHHpPb7dbBgwdVVlYmj8ejG264welY5rGDN+LKK6/URx99pMWLFyscDisvL0+f+tSnnI4FSJL++9//qq6uTm+88YZCoZCWLl2qNWvWOB3LPAreiBdeeEEej0dr165VY2Oj+vr6tHz5cqdjAZKUfCfJqVOnqre3V1deeaU6OzsdTmUfBW9APB7XQw89pM2bN8vtdqu0tNTpSMAIxcXF6u3tVUlJicrLy5Wbm6tAIOB0LPO4TNKI1atXa8uWLXK7Oa2Cie2vf/2r+vr6dOutt8rj8TgdxzQK3ohnnnlG77//vkKhkGbPnp18/LbbbnMwFXD2J8yysjK98sorTkeZdBjRGPH3v/9dkvTSSy8lH3O5XBQ8HOfxeJSXl6fTp08nr/bC+GAHD2DMbdq0Sf/85z8VDAZHvG/SypUrHUxlHwPbLLdly5bk7ffff9/BJMCFDQwM6JprrtEHH3ygd999N/kfxhY7+Cx3zz33JN/n49zbwETw85//XJWVlZKkt956S1/+8pcdTjS5sIPPcuf+/czf1Zho9u3bl7z9i1/8wsEkkxMnWbNcIpHQqVOnlEgkRtz+2MyZMx1Mh8mODYizKPgs19bWpi984QvJPzyLFi2Sy+VSIpGQy+XS/v37HU6IyezMmTM6cOCAEonEiNsfu/rqqx1MZx8zeABj5o477rjg11wul954441xTDP5UPAAYBQnWQHAKAoeAIyi4I3o7+9P6zEAkwcFb8SqVavSegzA5MFlklluaGhIg4ODGh4eHnENfF9fn06ePOlwOgBOouCz3ObNm/Xcc8/J5XJp0aJFycdzcnJ03333OZgMgNO4TNKIDRs2qKqqyukYACYQCt6QY8eO6V//+pdcLpduvPFGzZkzx+lIABzEiMaIN998U+vWrUt+zmVbW5ueeuop3r0PmMQoeCOeeeYZ7dixQwsXLpQkHThwQOvWraPggUmMyySNGBoaSpa7JC1cuFBDQ0MOJgLgNAreCK/Xq127diXvv/rqq/J6vQ4mAuA0TrIa0dHRoR/84Afav3+/XC6XAoGAnnrqKc2fP9/paAAcQsEbMzAwoEQioZycHKejAHAYJ1mz3H/+85+Lfp0PVAAmL3bwWe6TPlDB5XJpYGBAH330EZ/oBExi7OCz3B/+8IcR90+cOKGtW7fqt7/9rVavXu1MKAATAgVvxNDQkF566SW9+OKLuu2227Rr1y4VFhY6HQuAgyh4A1577TXV1dXp+uuv17Zt23TVVVc5HQnABMAMPsuVlJToxIkTevjhh3Xddded93VOsgKTFwWf5c49yepyuXTuy8mn1gOTGwUPAEbxVgUAYBQFDwBGUfAAYBQFDwBGUfAAYNT/Ai+/6Cos/gCjAAAAAElFTkSuQmCC\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# plot the bar graph of fraudulent claims\n", "df_claims.fraud.value_counts(normalize=True).plot.bar()\n", @@ -259,20 +115,9 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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v/baa0pISFBsbKySkpK0Z88ebd++Xa+++qr++te/KjY2VqNHj5YklZWV6dFHH9WgQYM0YsQIrVy50nU/BQUFyszM1FNPPaXY2FilpKSotLRUr776qu666y7dfffdTc79UVNTo9mzZys+Pl4JCQlasGCB6/xA77zzjh544AH96le/0qBBg1RQUNDqx2bXrl1KTk7Wj3/8Y+Xl5em7f//3/f87+eqrr9SvXz/V19dLkqqrq/XMM88oPj5eAwcO1PTp0yVJp06d0rRp03TnnXdq4MCBmjZtmo4fPy7pwikQDhw4oLy8PMXGxiovL0+S1K9fPx0+fNi15qefflp33nmn7r33Xi1ZskQNDQ2uNT/44IPKz8/XwIEDlZiYqG3btrV63ZK0ZcsWpaamKi4uTg888IAOHjwo6cJznZmZ2WTbefPmad68ea75LvWcoH0g8B1IcXGxzp07pxEjRlzR/ocOHdLy5cv19ttvq7i4WK+//rp69OihoUOHatq0aRo5cqSKi4v17rvvSpJmzpypmJgY7dixQ4sWLdL8+fO1Z88e1/19G5b9+/fLZrNp8uTJamho0Pbt2/X44483ubDKrFmzFBAQoI0bN2r16tXatWtXk8MbH330kXr16qXdu3frsccea9W6qqqq9OSTT+rnP/+59u7dqxtuuEH/+Mc/3N7/6aef1pkzZ/Tee+9p9+7dmjhxoqQLpxgeO3astmzZoi1btigoKMgV8hkzZiguLk7Z2dkqLi6+6EVk5s6dq5qaGm3atEl/+tOftGbNGq1atarJmn/wgx9o7969mjJlip599lm19g/TP/30U82ePVt5eXnat2+f0tLSNH36dJ0/f14/+clPtG3bNtXW1kq6cKK99evXu66N0NJzAt8j8B1IdXW1wsPDL3r4wh0Wi0Xnz5/XF198obq6OvXs2VM33HDDRbd1OBz6+9//rqeeekpBQUGy2WwaN26c1qxZ49omLi5OCQkJCggIUHJysk6ePKmpU6cqMDBQo0aN0tGjR3X69GmdOHFC27dv1+zZs9WpUydFRkZq4sSJTc6JEx0drQkTJiggIMB13pjvW79+veLi4lxvEyZMkCRt375dN910k5KTkxUYGKiHH35Y119/vVuPSXl5ubZv367c3FyFhYUpMDBQgwYNkiSFh4crKSlJISEh6ty5sx577DHt37/frft1Op1at26dZs6cqc6dO6tnz5565JFHXN88Jal79+762c9+JovFovvvv18VFRU6ceKEW/f/rZUrVyotLU233367634CAwP14YcfqkePHrr11lu1adMmSdLevXsVHBysO+64w63nBL7HMfgOpGvXrjp58uQlj1G35MYbb9Ts2bNVUFCg//znP4qPj1dWVpa6devWbNvy8nKFhYWpc+fOro91795dn3zyiet2ZGSk6/3g4GCFh4e7LqzybaS/+eYblZeXq76+vsnZ/BoaGpqcsjkmJqbF+ZOTky96DL68vLzJ/n5+fm6fDvr48eMKCwtTWFhYs/925swZvfDCC9qxY4dOnTol6cJZGp1Op2udl3Ly5EnV1dU1uVxc9+7dVVZW5rr93W9CISEhki48Xq1x7NgxrV69WsuWLXN9rK6uTuXl5ZIuXMGsqKhIY8aMUVFRkevV+7Fjx1p8TuB7BL4DiY2NVVBQkDZt2qTk5OSLbhMSEqKzZ8+6bn//FWFKSopSUlJUW1ur7OxsvfTSS/rNb37T7LJm0dHROnXqlGpra12R//bqWK0VExOj6667Tnv37r3kN6aruaxaVFSU69i4JDU2NjY5Ve7lHpOYmBidOnXKdabR73rjjTdUWlqqlStXKioqSp999pnGjBnj1mGU8PBwBQYG6tixY7rpppskXfnjdzlWq1WPPvroJQ9rjRw5Uvn5+Tp+/Lj+9re/acWKFZLce07gexyi6UBCQ0OVmZmpvLw8bdq0SWfOnFFdXZ22bdvmulqPzWbTtm3bVF1drYqKCv3xj3907X/o0CHt2bNH58+f13XXXaegoCDXK9HIyEgdPXrU9UNAq9Wq2NhYzZ8/X+fOndPBgwf19ttvKyUlpdVzR0dHa8iQIfr1r3+t2tpaNTQ06MiRI/rggw888KhId999tz7//HNt3LhR9fX1euutt5pE3Gazaf/+/Tp27Jhqamr06quvNplt6NChys3N1alTp1RXV+c6DPP1118rKChIXbp0UXV1tV555ZUmn/f666+/5O+8WywWJScna8GCBaqtrdXRo0f15ptvun6AfSXq6up07tw511t9fb3GjRunv/zlL/rnP/+pxsZGffPNN9q6davruHtERIQGDRqkZ555Rj179lTfvn1d6/bmcwLPIPAdzCOPPKKsrCwtWbJEd911l+655x4tX75cw4cPlySlpqbqlltuUWJioiZNmqRRo0a59j1//rxefvllDR48WPHx8aqqqtKMGTMkyfV/BIMHD9b9998vSZo/f76OHj2qhIQEPfHEE3ryySc1ZMiQK5r7xRdfVF1dnUaNGqWBAwcqMzNTFRUVrbqPb3/L57tvlZWVioiI0MKFC11rO3z4sH70ox+59hsyZIhGjRql0aNHa+zYsbr33nubzRYQEKCRI0fqf//3f13fFB9++GGdO3dOd955p9LS0pSQkNBkv4ceekgbNmzQwIEDXb+Z8l3PPfecQkJCNHz4cKWnp8tut+unP/1pq9b8XVOnTtVtt93meisoKNCAAQM0d+5c5eXlaeDAgbrvvvv0zjvvNNnPbrdr9+7drsMz31331T4n8C7OBw8AhuIVPAAYisADgKEIPAAYisADgKEIPAAYisADgKEIPAAYisADgKEIPAAY6v8B9Hm4MnaNoNEAAAAASUVORK5CYII=\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# plot the education categories\n", "educ = df_customers.customer_education.value_counts(normalize=True, sort=False)\n", @@ -282,20 +127,9 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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4erVq3XgwAFVV1crJiZGkvTf//5XXV2nvvSmp6dH9fX1ysjIkCRNmzZN+/fv975bZdOmTZo1a1ZQNX99+eWXOnHi1BeMWpal1157TRkZGZoyZYq6urq0e/fucx57KGqBeuWVV3T99dcrISHB536ES7++5uRw1wLR11yWwnM+D/ccGKz5cfZcDsW++DLi7w0VqhsWHjp0SC6XS5MmTVJcXJwk6cILL1RpaanKy8tls9nU09OjzMxMLVq0SOedd54k6Y033lBVVZU8Ho8yMjL05JNPasyYMUHV/HHkyBHdd9996u3tlcfj0eTJk1VWVqbk5GTt2bNHFRUV6u7uVlpamqqqqjR+/HhJGpJaIPLz8/XYY49p+vTpxv0Y7n6XL1+u7du3q7W1VQkJCXI4HHr11Vd9zsnhrvnT85o1a/qcy9XV1WpoaAjpfO6r3/Xr1w/7HPB3fvQ3J/qay1J4zecRHxYAgOCN6NNQAIDBQVgAAIwICwCAEWEBADAiLAAARoQFRozu7m6lp6friy++GND4jRs36pe//KVf6z799NMR86lgYDAQFhhSmZmZ3p/LLrtMV155pff3rVu3+hz7t7/9TTfeeOOg9vP222/rZz/7mTIzM3X11Vfr5z//ud55552AH+f+++9XeXn5oPa2ceNGpaen68033xzUxx0swYYxItuIvpEgQq+hocH759zcXC1fvlzXXHNNSHrZunWrlixZorKyMt14440aPXq0du7cqb/+9a+6/vrrQ9LTt9XU1MjhcKimpkZ5eXmhbgc4A0cWCKmuri4tWbJE1113naZPn67Kykp98803am9v17333qsjR454j0Ta29v1wQcf6NZbb1VWVpauu+46PfHEE+rp6TFup6enR5WVlXrggQf0ox/9SGPHjpXdbtfVV1/d7+mkiooKTZ8+XVOnTtVPfvIT7d2711tbtWqVHnvsMUmnPiF9+eWXa/PmzZo2bZpycnL04osvqqGhQS6XS9nZ2VqxYoXP/pqamrRv3z4tWbJEb731ljo6Ory100dY69atU05OjqZNm6Z33nlHb7zxhmbMmKGcnBw999xzxudUOvdU29lHCw8++KB+97vfad68ecrMzNTs2bP1+eefS5Juu+02SdLMmTOVmZmpN954w/i8Y+QgLBBSTz/9tA4ePKitW7fq5Zdf1s6dO/WHP/xBCQkJWrt2rSZOnKiGhgY1NDQoISFBo0aN0uOPP66dO3fqz3/+s9566y1t3rzZuJ1Dhw6ptbVV+fn5fveWmZmp2tpavf/++8rLy9P8+fO9/+merbe3VwcPHtSbb76pJ554QsuXL9dzzz2nF154wbtv+/bt63dbNTU1ysrK0syZM5WWlua9BcRpzc3Nio6O1rvvvqu77rpLixYtUn19vbZu3arnn39eq1ev1tGjR30+p/6qq6vTQw89pJ07dyo5OVnPPPOMpFN3P5Wkbdu2qaGhQTNmzPD7MRH5CAuEVG1tre677z45nU6NHz9ev/rVr7Rly5Z+17/yyit15ZVXym6366KLLtKtt96qXbt2GbfT0dEhm80W0P2nbrnlFp1//vkaNWqU7r77bnV0dOjIkSP9rn/PPfcoJibGewqpqKhICQkJSk1NVWZmphobG/sc5/F4tGXLFrlcLknSzTffrJqamjPWiYuLU2lpqaKjo3XzzTertbVV8+bN05gxY3T55Zfroosu8n6daaDP6dlmzZqlK664QqNGjZLL5dKHH37o91iMXFyzQMhYlqXW1lalpaV5l6WlpXlfIffl448/1pNPPqnGxkZ1dXWpt7dXU6dONW7L4XB4t3f6Jmwmzz77rF5++WW1trbKZrOpu7tb7e3tfa5rt9vPuFtobGzsGcEUFxenL7/8ss+x77//vlpbWzVz5kxJUkFBgaqrq/XJJ59o8uTJkk59Qc3p24LHxsZKOnUH229v78svvxzQc3o2f/vGdwtHFgiZ06/0T58Tl06dbpkwYYK3fraysjJdccUVev3117Vnzx7dc8898udemJdcconGjx+v7du3+9Xbu+++qxdeeEHV1dXavXu3du7cqbi4OL+2FahXXnlFHo9HLpdL1157rebMmSObzRbQ0cBppud09OjR3luKS9Lx48cDemx8dxEWCCmXy6Xq6mq1t7fL7XZr/fr1KiwslHTqFa7b7dbJkye96588eVJjx47Veeedp0OHDukvf/mLX9uJjo7Wo48+qjVr1qimpkadnZ3yeDzauXOnFi9efM76J0+e1KhRo+R0OvXNN9/oqaeeUnd396Ds89nbef3117VixQrV1NR4fxYsWKAtW7bI4/EE/Ji+ntOMjAw1Njbq0KFD+uqrrwL6VruYmBiNGzfO56k4jFyEBULq/vvv1+TJk+VyuVRUVKSpU6eqtLRUknTZZZcpNzdXubm5ys7OVkdHhxYtWqQXX3xRmZmZWrp0qW666Sa/t1VUVKSqqipt2rRJ06ZN07XXXqu1a9f2+TbVG264QdnZ2ZoxY4by8vKUkJAwJF+aVV9fr/PPP18ul0tJSUnen5/+9Kfq7OzUe++9F/Bj+npO09PTVVpaqttuu02zZs1STk5OwI89f/58ZWdnh+3nQTA0+D4LAIARRxYAACPCAgBgRFgAAIwICwCAEWEBADAiLAAARoQFAMCIsAAAGBEWAACj/wfDB6BPhDNclgAAAABJRU5ErkJggg==\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# plot the total claim amounts\n", "plt.hist(df_claims.total_claim_amount, bins=30)\n", @@ -311,30 +145,9 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Text(0.5, 0, 'Number of claims per year')" - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# plot the number of claims filed in the past year\n", "df_customers.num_claims_past_year.hist(density=True)\n", @@ -351,20 +164,9 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "sns.pairplot(\n", " data=df_customers, vars=[\"num_insurers_past_5_years\", \"months_as_customer\", \"customer_age\"]\n", @@ -382,20 +184,9 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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Gwc89vv62OpObf1xfB3qb8Qevf2eyRBWh2nTplFUVHTIbVatWsUll1yC1WolJyeHs88+m9dee63f6+oPWVlZnHzyyYnvJ0+eTHV19X7b/eMf/2Dx4sUAjB49mgkTJvDee+/1e139IT09PfG13+/HYtm/UV1/HGNdqauvRaNRli5dypIlSw5aT18fW92pLVX19nsmQ1jdUFNTQ3FxceL7oqIiamtr+7Gif1u5ciXvv/8+eXl53HTTTUyZMqXP9m2aJn/729+YPXv2fj+rrq5m+PDhie/78j07VF0ATz31FM8++ywjR47k+9//PuPGjUt6TT/5yU/44IMPUErxhz/8Yb+f99cxdri6oG+PsV/96ldccMEFjBw58qDb9Nex1ZXaoH+OrzvuuAOlFCeeeCK33347GRkZnX7e2++ZnIEMAosXL+af//wnr776KldddRU33HADzc3Nfbb/++67D4/Hw2WXXdZn++yKQ9V122238eabb/Lqq69yzjnncPXVV2MYRtJreuCBB3j33Xe57bbbeOSRR5K+v646XF19eYytWbOGDRs2cOmllybl+Y9EV2vrj+PrL3/5C6+88grPP/88SimWLl2a1P2BBEi3FBUVdRoOqampobCwsB8risvLy8NutwNw2mmnUVRUxNatW/tk3w8//DDl5eX88pe/xGrd/3AqLi6mqqoq8X1fvWeHq6ugoCDx7wsXLiQYDPbp2eTChQv55JNP9vsj3N/H2MHq6stj7LPPPmPHjh2cddZZzJ49m9raWq666iref//9Ttv1x7HV1dr64/jaM9TtcDi49NJL+eKLL/bbprffMwmQbpg3bx7PPfccpmnS1NTEW2+9xdy5c/u7LOrq6hJfb9myhaqqKsaMGZP0/T722GNs3LiRxx9/HIfDccBt5s2bx7PPPgvArl272LBhw34zQ/qjrr3fs9WrV2O1WikoKEhaTYFAgJqamsT3b7/9NpmZmWRlZXXarq+Psa7W1ZfH2LXXXsv777/P22+/zdtvv01hYSFPPvkkM2fO7LRdfxxbXa2tr4+vYDBIe3s7AEopVq1atd9MOuj990yugXS4//77eeONN2hsbOSKK64gKyuLlStXcs0113DzzTczceJEysrKWLduHeeccw4AN95442HHQfuirkcffZRNmzZhtVqx2+088sgj5OXlJbWurVu38rvf/Y7Ro0cnLsqNGDGCxx9/nLKyMp544gkKCgq46qqruOuuu5gzZw5Wq5WlS5eSlpbW73Xdeeed+Hw+LBYLaWlp/Pa3v8VmS95/h1AoxC233EIoFMJqtZKZmcnvfvc7LBZLvx5jXa2rP46xA+nPY6s7tfX18eXz+bjpppswDAPTNBk3blximnUy3zNZkVAIIUSPyBCWEEKIHpEAEUII0SMSIEIIIXpEAkQIIUSPSIAIIYToEQkQMWCdf/75fPLJJ/1dhhBDlkzjFWKIuOuuuygoKOC222477LaXX345a9euTdy7kJ+fz+uvv57sEsUAIzcSCtFFuq53+2awnjwmVdx9991JX4ukJwbyezrYyBCW6LHZs2fz5JNPsmDBAk488URuvfVWIpEIL7zwAv/xH//RadtjjjmG8vJyIP5J+J577uHqq69mypQpLF68mIaGBh544AFOOukk5s2bx+bNm7u0/w8//BCIL3h0yy238MMf/pApU6Zw/vnns2HDhsS2TzzxBLNmzWLKlCnMnTuXjz76KFHLY489ltjuk08+4fTTT++0jyeeeIIFCxYwefJkdF2nrq6Om266iVNOOYXZs2fz9NNPJ7ZftmwZN998M3fccQdTp07lxRdfZP369Vx00UVMnTqVU089lf/+7/8+5OuqrKzkmGOO4dlnn2XmzJnMnDmTP/7xj4mfr1+/nkWLFjFt2jRmzpzJ0qVLiUajQLyNxYMPPsiMGTM48cQTWbBgAV9//TXPPvssr776Kk8++SRTpkzhuuuuO+z72x3RaJTp06fz1VdfJf7N5/MxadIkmpqaAHjnnXcoKytj2rRpLF68mC+//DKx7RNPPMHZZ5/NlClTOO+883jzzTcTP3vhhRdYvHgxDz74INOnT2fZsmWUl5dz2WWXceKJJ3LyySdz66239urrEV3U45VExJB35plnqm9+85uqtrZWNTc3q3nz5qm//vWv6vnnn1eLFy/utO348ePVrl27lFLxxXamT5+uNmzYoMLhsLr88svVmWeeqV588UWl67p69NFH1WWXXdal/X/wwQdKqfiCRxMmTFDvvvuu0nVd/fznP1eXXHKJUkqp7du3q9NPP13V1tYqpZSqqKhQ5eXliVoeffTRxHN+/PHHatasWZ32ccEFF6jq6moVCoWUYRjqwgsvVMuWLVORSETt3r1bzZ49W7333nuJOo477jj15ptvKsMwVCgUUt/61rfUiy++qJRSyu/3qzVr1hzydVVUVKjx48er2267TQUCAfXll1+qk08+OfFaN2zYoNasWaNisZiqqKhQ8+bNU0899ZRSSqn33ntPXXjhhaq1tVWZpqm2bdum6urqDvhaD+Wyyy5TJ598spo+fbpatGhRp0W6DmbJkiXqkUceSXz/pz/9SX33u99VSsUXYDrllFPU2rVrla7r6oUXXlBnnnmmikQiSimlVq1apWpra5VhGGrlypXqhBNOSNT9/PPPq9LSUvX000+rWCymQqGQuu2229Ty5cuVYRgqHA6rzz77rEuvS/QuOQMRR+Tyyy+noKCArKwszjzzTLZs2dKlx82ZM4cJEybgdDqZM2cOTqeThQsXomka5513XpefZ28nnngiZ5xxBpqmUVZWlviEq2ka0WiU7du3E4vFGDFiBKNGjerWaywqKsLlcrFhwwaampr43ve+h8PhYOTIkXzrW99i1apVie0nT57M2WefjdVqxeVyYbPZ2L17N01NTXi9XiZPntyl/d544414PB6OOeYYLrroIlasWAHAhAkTmDx5MjabjREjRrBo0SI+++wzAGw2G4FAgB07dqCUYty4cYllaLvjjjvu4K233mL16tUsWrSI6667jt27dx/yMRdeeCErVqzANE0AXn75ZS644AIA/vd//5dFixZxwgknoGkaF154IXa7nbVr1wJw7rnnJjrYnnfeeZSUlLB+/frEc+fn53P55Zdjs9kS72l1dTX19fU4nU6mTZvW7dcojpwMJIojsndDPbfbTX19fZcel5ubm/ja5XIxbNiwTt8Hg8Fu17Lvc0QiEXRdp6SkhB//+McsW7aMbdu2MXPmzMQF5a7Ye0XIqqoq6uvrO/3BMgyj0/f7tsd+4IEH+PWvf825557LiBEj+N73vteldaj33u/w4cP5+uuvAdi5cycPPfQQGzduJBQKYRgGxx9/PAAzZszg29/+NkuXLqW6upo5c+Zw5513drth3gknnJD4ek8w/Otf/+Lyyy8/5GPcbjeffvopeXl57N69m7POOguIL2T00ksv8cwzzyS2j8ViiePlpZde4qmnnkq0Gg8Gg51ayu/7nv7gBz/gV7/6FRdffDGZmZlcccUVXHzxxd16jeLISYCIXud2uwmHw4nvGxoa+rGauAULFrBgwQL8fj933303P//5z/nZz362X62NjY37PXbvZUuLiooYMWIEb7zxxkH3te8yp6NHj+bRRx/FNE3eeOMNbr75Zj755BM8Hs8ha66pqUmsYlddXZ04k7jnnns47rjj+MUvfkFaWhp/+tOfOs2Q+s53vsN3vvMdfD4ft956K3/4wx+49dZbj2j5VYvFgurChM0LL7yQV155hby8PObOnYvT6QTi79t1113H9ddfv99jqqqq+H//7//xpz/9iSlTpiTOIPfd/97y8vK4//77Afj888+54oorOOmkkygpKenpSxQ9IENYotcde+yxbN26lS1bthCJRFi2bFm/1rNjxw4++ugjotEoDocDp9OJpmkAlJaW8q9//YuWlhYaGhr485//fMjnmjRpEmlpaTzxxBOEw2EMw+Drr7/uNNyyr5dffpmmpiasVmtiidE9+z+U5cuXEwqF2Lp1Ky+88ALnnXceEF/Dw+v14vV62b59O3/7298Sj1m/fj3r1q0jFovhdrtxOByJfeXm5lJZWXnY/ba1tbF69erEGdwrr7zC559/vt+aFwdSVlbGW2+9xSuvvMLChQsT/37JJZfw97//nXXr1qGUIhgM8u677+L3+wmFQlgsFnJycgB4/vnnD7tY1T/+8Y/EAk2ZmZlYLJYDLhwmkkvOQESvGzNmDDfeeCP/9V//hcvl4vbbb08sYtMfotEov/jFL9i+fTt2u50pU6YklvssKyvjww8/ZPbs2QwfPpxvfvObnWY87UvTNH7729/y8MMPc9ZZZxGNRhkzZswhZwGtXr2ahx56iHA4THFxMY899ljik/mhTJ8+nTlz5qCU4sorr0z8Ab/zzjv56U9/ypNPPklpaSnnnXceH3/8MRAPlwcffJDKykocDgczZ87kyiuvBODiiy/mlltuYdq0aUyfPp3ly5cfcL+6rvPLX/6SHTt2oGkaY8eO5fHHH2fs2LGHrbmwsJDjjjuO3bt3dxrWmzhxIvfddx9Lly6lvLwcl8vF1KlTmTZtGkcddRRXXnklixcvxmKxsHDhQqZOnXrI/WzYsIEHH3wQv99Pbm4uP/nJT5K+No/Yn9xIKESKqays5KyzzmLTpk0D8n6HH/3oR+Tn53fphkUxsA28o1MIkbIqKyt58803efHFF/u7FNEHJEBEyqqurub8888/4M9WrlxJcXFxH1fUe1555ZXEkqN7Ky4u5ve//33S99/T9/buu+/m1Vdf3e/fFyxYQE5ODn/+85+59tprZThpiJAhLCGEED0i0xaEEEL0iASIEEKIHpEAEUII0SMSIEIIIXpEAkQIIUSPSIAIIYTokf8fWKhxG/w82RwAAAAASUVORK5CYII=\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "df_combined = df_customers.join(df_claims)\n", "sns.lineplot(x=\"num_insurers_past_5_years\", y=\"fraud\", data=df_combined);" @@ -410,40 +201,18 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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AGARH6QBgEWELgBYROgCgEWELgBYROgCgEWELgBYROjilixfvlxz586t6mkA1Q6hizLt379f/fv3r+ppVKnvv/9eXbt2lcvlquqpoJojdIFqhuCv3gjdai4mJkZr165VbGysevTooeeff14XL17UlClTFB4erokTJyorK0uS9Mknn2jo0KGKjIxUXFycTp48WaSfdevWKTY2VhEREXrmmWeUm5ur7OxsTZ06VefPn1d4eLjCw8N17tw5SVJ+fr6effZZhYeHa+jQoTp27JivvzVr1qhfv34KDw/XoEGDlJCQ4LeOo0ePasyYMYqMjFRUVJQWLlyovLw8SQX/J37x4sXq3bu3IiIiFBsbW+TpHSXJycnRkiVLFB0drYiICD3++OPKyckp8aw9JiZGn376qW8eDz30kHr27Kk+ffrotddekyTf3dV69eql8PBwJSYmyuPx6O2331Z0dLR69+6tZ5991vf/+L1nxps2bdKAAQPUq1cvbdy4UUePHlVsbKwiIyOL3c3q/fff15AhQ9SrVy9NnjxZZ86c8W3r2rWr1q9frwcffFAPPvig39pxh7uVm/7izhEdHW0eeeQRc+HCBZOWlmZ+9atfmZEjR5ovvvjC5Obmmri4OLN8+XJz6tQpc99995k9e/aYvLw8s2bNGjNw4ECTm5vr62f06NEmLS3NZGRkmMGDB5sNGzYYY4zZt2+f6devX5Fx33rrLdO9e3ezY8cO43K5zOuvv24eeeQRY4wxJ0+eNP379zdpaWnGGGNSUlJMUlKS3zqOHTtmEhMTTX5+vklJSTGDBw82f/3rX40xxuzatcuMGjXKZGVlGY/HY7799ltz7tw5v/0tWLDAjBs3zqSlpRmXy2U+++wzk5ubW2It0dHRZu/evcYYYx599FGzefNmY4wxV69eNYmJib4aunTpYvLz8337vffee2bgwIEmOTnZXL161cyaNcvMnTu3SPv58+ebnJwcs3v3btO9e3czc+ZMc/HiRd+x2r9/vzGm4OkUAwcONN9++63Jz883K1euNGPGjPGN1aVLFzNx4kSTkZFhrl+/7rd23Nk4060Bxo0bp6ZNm6pFixaKjIzUL37xC/3sZz9TcHCwHnjgAX355ZfaunWrBgwYoL59+yooKEiTJ09WTk6OEhMTff3ExcWpRYsWCg0NVXR0tO+5YKWJiIjQgAEDFBgYqBEjRujrr7+WVHAD77y8PJ08eVL5+flq27at2rdv77ev7t27q0ePHnI6nWrbtq3GjBmjAwcOSJKcTqeuXbumU6dOyRijzp07q3nz5qX25fF4tGnTJr3wwgu+G4v37NnTd5c0f5xOp5KTk5Wenq769eurR48epbb96KOPNHHiRLVr107169fXnDlztHXr1iI//s+aNUshISGKiopSvXr1NGzYMIWFhfmO1Zdffimp4E5V06ZNU+fOneV0OjVjxgx99dVXRc52p02bptDQUN/Nh1A9Ebo1QOG7G4WEhBT5uk6dOsrOztb58+eL3O3ee19c76UCSWrWrJnvdd26dZWdnX3T49apU0e5ublyuVzq0KGDnn/+eS1fvlx9+vTR7Nmzi4xTku+++07Tp09X37591bNnTy1btkwZGRmSpN69e+u3v/2tFi5cqD59+mj+/Pm6evVqqX1lZGQoNze3yBMQbtarr76q06dPa8iQIRo9erS2b99eatvz58+rTZs2vq/btGkjl8tV5CGFYWFhvtchISHFvvaucWpqqhYvXqzIyEhFRkbql7/8pYwxRdatutybF/4RurVE8+bNi9x42Rjje/xMWRwOR7nHi42N1caNG7V9+3Y5HA69/vrrftsvWLBAnTp10r///W8dOnRIs2fPlil0A7zx48fr73//u7Zs2aLTp09r7dq1pfbVuHFjhYSEKCUlpdi2unXrKicnx/e12+32PeFYkjp27Kg//vGPSkhI0NSpU/X0008rOzu7xDVo3rx5kTPR1NRUOZ3OIsF6s1q1aqWXX35ZBw8e9P05evSoevbs6WtzK8cBdx5Ct5YYMmSIdu7cqYSEBOXn5+svf/mLgoODFR4eXua+YWFhyszM9H1IVJZTp04pISFBeXl5Cg4OVkhIiO/ZYaW5du2a6tevr/r16+vkyZPauHGjb9vRo0d15MgR5efnq27dugoODvbbX0BAgEaPHq3XXnvN9zSHxMRE5eXl6Sc/+Ylyc3O1Y8cO5efna9WqVb4P7CTpH//4h9LT0xUQEKCGDRtKKrhc0qRJEwUEBBQJ8mHDhumdd95RSkqKrl27pmXLlmnIkCFyOsv/6MHHHntMa9as0TfffCNJunLliv75z3+Wux/c+Sr0wZS4c3Xq1ElLly7VokWLdO7cOXXr1k2rV6++qeucnTt31tChQzVw4EC53W5t2bLFb/u8vDy98cYbOnnypIKCghQeHl7mc6eee+45zZ8/X+vWrVO3bt30m9/8Rvv27ZNUEMiLFy/W999/r+DgYEVFRWnSpEll9vfGG2/o4YcfVnZ2tn76059q3bp1atCggV566SW9+OKLcrvdmjJlilq2bOnbb/fu3VqyZIlycnLUunVrLVu2TCEhIZKkGTNm6PHHH5fL5dLatWs1evRonTt3TuPGjVNubq6ioqI0f/78MtezJA888ICuXbumOXPm6MyZM2rQoIH69OlT7Z7EgLJxE3MAsIjLCwBgEZcXYM2UKVP02WefFXt/+vTpmjFjRrn7Gzp0aJEPB71efvllDR8+/JbmCFQ2Li8AgEVcXgAAiwhdALCI0AUAiwhdALCI0AUAi/4/xQ7XLQA3lsoAAAAASUVORK5CYII=\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "sns.boxplot(x=df_customers[\"months_as_customer\"]);" ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "sns.boxplot(x=df_customers[\"customer_age\"]);" ] @@ -457,20 +226,9 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "df_combined.groupby(\"customer_gender_female\").mean()[\"fraud\"].plot.bar()\n", "plt.xticks([0, 1], [\"Male\", \"Female\"])\n", @@ -486,20 +244,9 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# Creating a correlation matrix of fraud, gender, months as customer, and number of different insurers\n", "cols = [\n", @@ -533,7 +280,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -544,230 +291,9 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "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", - "
policy_idincident_type_theftpolicy_state_capolicy_deductablenum_witnessespolicy_state_orincident_monthcustomer_gender_femalenum_insurers_past_5_yearscustomer_gender_male...policy_state_idincident_hourvehicle_claimfraudincident_type_collisionpolicy_annual_premiumpolicy_state_azpolicy_state_wacollision_type_rearcollision_type_front
0167500750002010...02012000.00030001000
1900750009011...01518500.00130000000
2168701750007110...01617500.00130000000
3168701750007011...01617500.00130000000
4169200750206110...0821500.00128001001
\n", - "

5 rows × 47 columns

\n", - "
" - ], - "text/plain": [ - " policy_id incident_type_theft policy_state_ca policy_deductable \\\n", - "0 1675 0 0 750 \n", - "1 9 0 0 750 \n", - "2 1687 0 1 750 \n", - "3 1687 0 1 750 \n", - "4 1692 0 0 750 \n", - "\n", - " num_witnesses policy_state_or incident_month customer_gender_female \\\n", - "0 0 0 2 0 \n", - "1 0 0 9 0 \n", - "2 0 0 7 1 \n", - "3 0 0 7 0 \n", - "4 2 0 6 1 \n", - "\n", - " num_insurers_past_5_years customer_gender_male ... policy_state_id \\\n", - "0 1 0 ... 0 \n", - "1 1 1 ... 0 \n", - "2 1 0 ... 0 \n", - "3 1 1 ... 0 \n", - "4 1 0 ... 0 \n", - "\n", - " incident_hour vehicle_claim fraud incident_type_collision \\\n", - "0 20 12000.0 0 0 \n", - "1 15 18500.0 0 1 \n", - "2 16 17500.0 0 1 \n", - "3 16 17500.0 0 1 \n", - "4 8 21500.0 0 1 \n", - "\n", - " policy_annual_premium policy_state_az policy_state_wa \\\n", - "0 3000 1 0 \n", - "1 3000 0 0 \n", - "2 3000 0 0 \n", - "3 3000 0 0 \n", - "4 2800 1 0 \n", - "\n", - " collision_type_rear collision_type_front \n", - "0 0 0 \n", - "1 0 0 \n", - "2 0 0 \n", - "3 0 0 \n", - "4 0 1 \n", - "\n", - "[5 rows x 47 columns]" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "df_combined = df_combined.loc[:, ~df_combined.columns.str.contains(\"^Unnamed: 0\")]\n", "# get rid of an unwanted column\n", @@ -776,320 +302,9 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
policy_idincident_type_theftpolicy_state_capolicy_deductablenum_witnessespolicy_state_orincident_monthcustomer_gender_femalenum_insurers_past_5_yearscustomer_gender_male...policy_state_idincident_hourvehicle_claimfraudincident_type_collisionpolicy_annual_premiumpolicy_state_azpolicy_state_wacollision_type_rearcollision_type_front
count20000.0000020000.00000020000.000020000.0000020000.00000020000.00000020000.00000020000.00000020000.00000020000.000000...20000.0000020000.00000020000.00000020000.00000020000.00000020000.00000020000.00000020000.00000020000.00000020000.000000
mean2500.500000.0482000.6204751.130000.8661000.0700006.7132000.3724001.4122000.576500...0.0273011.78680017426.0837000.0300000.8572002925.4000000.1136000.1210000.2209000.425400
std1443.411730.2141940.485313.573221.0979210.2551533.6543960.4834560.8972910.494125...0.162965.33791810043.7735990.1705910.349878143.5160960.3173330.3261350.4148640.494416
min1.000000.0000000.0000750.000000.0000000.0000001.0000000.0000001.0000000.000000...0.000000.0000001000.0000000.0000000.0000002150.0000000.0000000.0000000.0000000.000000
25%1250.750000.0000000.0000750.000000.0000000.0000003.0000000.0000001.0000000.000000...0.000008.00000010474.2500000.0000001.0000002900.0000000.0000000.0000000.0000000.000000
50%2500.500000.0000001.0000750.000000.0000000.0000007.0000000.0000001.0000001.000000...0.0000012.00000015000.0000000.0000001.0000003000.0000000.0000000.0000000.0000000.000000
75%3750.250000.0000001.0000750.000002.0000000.00000010.0000001.0000001.0000001.000000...0.0000016.00000022005.5000000.0000001.0000003000.0000000.0000000.0000000.0000001.000000
max5000.000001.0000001.00001100.000005.0000001.00000012.0000001.0000005.0000001.000000...1.0000023.00000051051.0000001.0000001.0000003000.0000001.0000001.0000001.0000001.000000
\n", - "

8 rows × 47 columns

\n", - "
" - ], - "text/plain": [ - " policy_id incident_type_theft policy_state_ca policy_deductable \\\n", - "count 20000.00000 20000.000000 20000.0000 20000.00000 \n", - "mean 2500.50000 0.048200 0.6204 751.13000 \n", - "std 1443.41173 0.214194 0.4853 13.57322 \n", - "min 1.00000 0.000000 0.0000 750.00000 \n", - "25% 1250.75000 0.000000 0.0000 750.00000 \n", - "50% 2500.50000 0.000000 1.0000 750.00000 \n", - "75% 3750.25000 0.000000 1.0000 750.00000 \n", - "max 5000.00000 1.000000 1.0000 1100.00000 \n", - "\n", - " num_witnesses policy_state_or incident_month customer_gender_female \\\n", - "count 20000.000000 20000.000000 20000.000000 20000.000000 \n", - "mean 0.866100 0.070000 6.713200 0.372400 \n", - "std 1.097921 0.255153 3.654396 0.483456 \n", - "min 0.000000 0.000000 1.000000 0.000000 \n", - "25% 0.000000 0.000000 3.000000 0.000000 \n", - "50% 0.000000 0.000000 7.000000 0.000000 \n", - "75% 2.000000 0.000000 10.000000 1.000000 \n", - "max 5.000000 1.000000 12.000000 1.000000 \n", - "\n", - " num_insurers_past_5_years customer_gender_male ... policy_state_id \\\n", - "count 20000.000000 20000.000000 ... 20000.00000 \n", - "mean 1.412200 0.576500 ... 0.02730 \n", - "std 0.897291 0.494125 ... 0.16296 \n", - "min 1.000000 0.000000 ... 0.00000 \n", - "25% 1.000000 0.000000 ... 0.00000 \n", - "50% 1.000000 1.000000 ... 0.00000 \n", - "75% 1.000000 1.000000 ... 0.00000 \n", - "max 5.000000 1.000000 ... 1.00000 \n", - "\n", - " incident_hour vehicle_claim fraud incident_type_collision \\\n", - "count 20000.000000 20000.000000 20000.000000 20000.000000 \n", - "mean 11.786800 17426.083700 0.030000 0.857200 \n", - "std 5.337918 10043.773599 0.170591 0.349878 \n", - "min 0.000000 1000.000000 0.000000 0.000000 \n", - "25% 8.000000 10474.250000 0.000000 1.000000 \n", - "50% 12.000000 15000.000000 0.000000 1.000000 \n", - "75% 16.000000 22005.500000 0.000000 1.000000 \n", - "max 23.000000 51051.000000 1.000000 1.000000 \n", - "\n", - " policy_annual_premium policy_state_az policy_state_wa \\\n", - "count 20000.000000 20000.000000 20000.000000 \n", - "mean 2925.400000 0.113600 0.121000 \n", - "std 143.516096 0.317333 0.326135 \n", - "min 2150.000000 0.000000 0.000000 \n", - "25% 2900.000000 0.000000 0.000000 \n", - "50% 3000.000000 0.000000 0.000000 \n", - "75% 3000.000000 0.000000 0.000000 \n", - "max 3000.000000 1.000000 1.000000 \n", - "\n", - " collision_type_rear collision_type_front \n", - "count 20000.000000 20000.000000 \n", - "mean 0.220900 0.425400 \n", - "std 0.414864 0.494416 \n", - "min 0.000000 0.000000 \n", - "25% 0.000000 0.000000 \n", - "50% 0.000000 0.000000 \n", - "75% 0.000000 1.000000 \n", - "max 1.000000 1.000000 \n", - "\n", - "[8 rows x 47 columns]" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "df_combined.describe()" ] @@ -1103,523 +318,9 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
featureunique_valuespercent_missingpercent_largest_categorydatatype
3policy_deductable80.098.94int64
28authorities_contacted_ambulance20.097.45int64
37policy_state_id20.097.27int64
35authorities_contacted_fire20.097.20int64
40fraud20.097.00int64
36driver_relationship_other20.096.06int64
16driver_relationship_child20.095.49int64
27policy_state_nv20.095.23int64
1incident_type_theft20.095.18int64
23num_claims_past_year80.093.28int64
5policy_state_or20.093.00int64
17driver_relationship_spouse20.091.09int64
33incident_type_breakin20.090.54int64
43policy_state_az20.088.64int64
44policy_state_wa20.087.90int64
20collision_type_na20.085.72int64
32driver_relationship_na20.085.72int64
41incident_type_collision20.085.72int64
13collision_type_side20.078.91int64
45collision_type_rear20.077.91int64
8num_insurers_past_5_years50.077.68int64
34authorities_contacted_none20.075.86int64
42policy_annual_premium180.071.68int64
11authorities_contacted_police20.070.51int64
22driver_relationship_self20.068.36int64
29num_injuries50.067.46int64
7customer_gender_female20.062.76int64
2policy_state_ca20.062.04int64
9customer_gender_male20.057.65int64
46collision_type_front20.057.46int64
31police_report_available20.057.22int64
4num_witnesses60.051.58int64
26num_vehicles_involved70.046.32int64
15customer_education50.044.29int64
21incident_severity30.041.71int64
30policy_liability40.033.95int64
18injury_claim8900.033.75float64
19incident_dow70.016.87int64
25auto_year200.013.86int64
6incident_month120.010.67int64
38incident_hour240.06.87int64
12incident_day310.03.79int64
14customer_age580.03.09int64
39vehicle_claim46210.01.44float64
10total_claim_amount49780.01.29float64
24months_as_customer3870.00.77int64
0policy_id50000.00.02int64
\n", - "
" - ], - "text/plain": [ - " feature unique_values percent_missing \\\n", - "3 policy_deductable 8 0.0 \n", - "28 authorities_contacted_ambulance 2 0.0 \n", - "37 policy_state_id 2 0.0 \n", - "35 authorities_contacted_fire 2 0.0 \n", - "40 fraud 2 0.0 \n", - "36 driver_relationship_other 2 0.0 \n", - "16 driver_relationship_child 2 0.0 \n", - "27 policy_state_nv 2 0.0 \n", - "1 incident_type_theft 2 0.0 \n", - "23 num_claims_past_year 8 0.0 \n", - "5 policy_state_or 2 0.0 \n", - "17 driver_relationship_spouse 2 0.0 \n", - "33 incident_type_breakin 2 0.0 \n", - "43 policy_state_az 2 0.0 \n", - "44 policy_state_wa 2 0.0 \n", - "20 collision_type_na 2 0.0 \n", - "32 driver_relationship_na 2 0.0 \n", - "41 incident_type_collision 2 0.0 \n", - "13 collision_type_side 2 0.0 \n", - "45 collision_type_rear 2 0.0 \n", - "8 num_insurers_past_5_years 5 0.0 \n", - "34 authorities_contacted_none 2 0.0 \n", - "42 policy_annual_premium 18 0.0 \n", - "11 authorities_contacted_police 2 0.0 \n", - "22 driver_relationship_self 2 0.0 \n", - "29 num_injuries 5 0.0 \n", - "7 customer_gender_female 2 0.0 \n", - "2 policy_state_ca 2 0.0 \n", - "9 customer_gender_male 2 0.0 \n", - "46 collision_type_front 2 0.0 \n", - "31 police_report_available 2 0.0 \n", - "4 num_witnesses 6 0.0 \n", - "26 num_vehicles_involved 7 0.0 \n", - "15 customer_education 5 0.0 \n", - "21 incident_severity 3 0.0 \n", - "30 policy_liability 4 0.0 \n", - "18 injury_claim 890 0.0 \n", - "19 incident_dow 7 0.0 \n", - "25 auto_year 20 0.0 \n", - "6 incident_month 12 0.0 \n", - "38 incident_hour 24 0.0 \n", - "12 incident_day 31 0.0 \n", - "14 customer_age 58 0.0 \n", - "39 vehicle_claim 4621 0.0 \n", - "10 total_claim_amount 4978 0.0 \n", - "24 months_as_customer 387 0.0 \n", - "0 policy_id 5000 0.0 \n", - "\n", - " percent_largest_category datatype \n", - "3 98.94 int64 \n", - "28 97.45 int64 \n", - "37 97.27 int64 \n", - "35 97.20 int64 \n", - "40 97.00 int64 \n", - "36 96.06 int64 \n", - "16 95.49 int64 \n", - "27 95.23 int64 \n", - "1 95.18 int64 \n", - "23 93.28 int64 \n", - "5 93.00 int64 \n", - "17 91.09 int64 \n", - "33 90.54 int64 \n", - "43 88.64 int64 \n", - "44 87.90 int64 \n", - "20 85.72 int64 \n", - "32 85.72 int64 \n", - "41 85.72 int64 \n", - "13 78.91 int64 \n", - "45 77.91 int64 \n", - "8 77.68 int64 \n", - "34 75.86 int64 \n", - "42 71.68 int64 \n", - "11 70.51 int64 \n", - "22 68.36 int64 \n", - "29 67.46 int64 \n", - "7 62.76 int64 \n", - "2 62.04 int64 \n", - "9 57.65 int64 \n", - "46 57.46 int64 \n", - "31 57.22 int64 \n", - "4 51.58 int64 \n", - "26 46.32 int64 \n", - "15 44.29 int64 \n", - "21 41.71 int64 \n", - "30 33.95 int64 \n", - "18 33.75 float64 \n", - "19 16.87 int64 \n", - "25 13.86 int64 \n", - "6 10.67 int64 \n", - "38 6.87 int64 \n", - "12 3.79 int64 \n", - "14 3.09 int64 \n", - "39 1.44 float64 \n", - "10 1.29 float64 \n", - "24 0.77 int64 \n", - "0 0.02 int64 " - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "combined_stats = []\n", "\n", @@ -1644,20 +345,9 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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Gq9VV1dn1apVDe+vWLEiSbL77rtn0qRJ+cMf/pAzzjgjxx9/fA4++OD1Hu8drVq1avi5qqqq4XmpVEpdXV3De1dddVW233771T772GOPpU2bNus8l6lTp6ampia33nprWrZsmf79+2fZsmVrHV9fX5/27ds3VEcBAAA+bE3lWsqy7LHHHpk2bVpef/31JMkbb7yRrbbaKo8//niS5N57720IjPPnz0/nzp0zatSoHHrooQ1jWrRosVqovOeee7J06dIsWbIk99xzT/r161f2fPbee+9MmjSpIXjOmjWr7M8uWrQonTt3TsuWLfPQQw81VC132223/O53v8uyZctSW1ub3//+90mSdu3aZeutt85dd92V5O0AOXv27LK/DwAA4L1qVhXGHj165Itf/GJGjx6dqqqq7LTTTvna176Wk08+OSNHjswee+zR0F768MMP5yc/+UlatGiRtm3b5oorrkiSjBo1KsOGDctOO+2UK6+8MoccckgOO+ywJG9verPTTjtl3rx5Zc3n5JNPzje/+c0MGzYs9fX12WqrrcrehXXo0KEZO3ZsDjnkkOy4444NVco+ffqkf//+GTZsWLbaaqt84hOfyCabbJIk+c53vpMLL7ww11xzTVauXJkDDzwwvXv3fk9rCAAANLPKWSMq1a+rL5NGUVtbm4033jhLly7NUUcdlUsuuaRh4xsAAOD9+2mp6V/FeGwTiGrNqsJYKc4///w89dRTWbZsWUaMGCEsAgAAjUKF8UP2xBNP5IwzzljttVatWuXmm29upBkBAAAqjOURGAEAgIozsRkExjFNIKq51hMAAIBCAiMAAACFbHoDAABUnKbfkNo0qDACAABQSGAEAACgkJZUAACg4qiclcc6AQAAUEhgBAAAoJCWVAAAoOKonJXHOgEAAFBIYAQAAKCQllQAAKDilBp7As2ECiMAAACFBEYAAAAKCYwAAAAUcg0jAABQcVTOymOdAAAAKCQwAgAAUEhLKgAAUHHcVqM8KowAAAAUEhgBAAAopCUVAACoOCpn5bFOAAAAFBIYAQAAKKQlFQAAqDgqZ+WxTgAAABQSGAEAACikJRUAAKg4pcaeQDOhwggAAEAhgREAAIBCWlIBAICKo3JWHusEAABAIYERAACAQgIjAAAAhVzDCAAAVByVs/JYJwAAAAoJjAAAABTSkgoAAFScUmNPoJlQ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3z1TpkxJ8nZ7aceOHdd6nWCSbLzxxqmtrV3vcWtra7No0aJ85jOfyTnnnJPZs2evdeyiRYuy+eabJ0luu+22htfnzp2bXr165aSTTsonPvGJPPvss4Wf32uvvfLrX/86S5e+XeF6pyV1q622yl/+8pckybRpf79u7oUXXsg222yTo48+Ov37988TTzyxxnntvvvuueuuu1JXV5eampo88sgj6dOnz3rP+x177713Jk2a1PD8//7v/8r+bJO3fFnqZj6UVoOOTFq1TtV2vdNi509n5YzfrTG0eudPJ23ergxXbdMjLfYekrrH367CljbfJlVbfvztf6NabZRWQ49N/Zs1qX953kd6OgAAsCH6QG6rccopp+Tss8/O0KFD06ZNm3zrW99a5/iOHTtmt912y5AhQ7LPPvustdW0trY2J598cpYtW5YkOfvss9c5h9NOOy2bb755PvnJT2bevLcDw8SJEzN9+vRUVVWle/fu2XfffQs/v++++2b27Nk59NBD07Jly3zmM5/JV7/61Rx33HH5t3/7t0yZMiX/7//9v4bxd955Z6ZMmZIWLVqkS5cu+dKXvpQOHTqsdl5nnHFGHn300QwfPjylUilf//rXs9lmm+WZZ55Z5/q849xzz83FF1+coUOHpq6uLv369cvFF19c1mebg2W3XpvWh5+athfekPraRVl267Wpf/mFVH18p2x0wvlZcu7nkyQtPrVPWo86NWnRMvVvvpYVv7s1Kx95O1iWNumQ1oeMTalD52T5W6l7bnbeuu6SZFVdY54aAABsEEr16+qbZINR+7XhjT2FirfxuMmNPQUAAP7m0R5bNPYU1mvXOY1/n/Em0hkLAABAU/OBtKR+lK655prVriVMksGDB2fs2LFlff6JJ57IGWecsdprrVq1ys033/yBzREAAGBDoCW1QmhJbXxaUgEAmo4/9+q2/kGN7FNPLGjsKWhJBQAAoJjACAAAQCGBEQAAgELNbtMbAACA96uqVGrsKTQLKowAAAAUEhgBAAAopCUVAACoOKUqLanlUGEEAACgkMAIAABAIS2pAABAxSnZJbUsKowAAAAUEhgBAAAopCUVAACoOHZJLY8KIwAAAIUERgAAAAppSQUAACqOXVLLo8IIAABAIYERAACAQgIjAAAAhVzDCAAAVBy31SiPCiMAAACFBEYAAAAKaUkFAAAqjttqlEeFEQAAgEICIwAAAIW0pAIAABWnVKV2Vg6rBAAAQCGBEQAAgEJaUgEAgIpTqrJLajlUGAEAACgkMAIAAFBISyoAAFB5SlpSy6HCCAAAQCGBEQAAgEICIwAAAIVcwwgAAFQct9UojwojAAAAhQRGAAAACmlJBQAAKk6pSu2sHFYJAACAQgIjAAAAhbSkAgAAFadUsktqOVQYAQAAKCQwAgAAUEhLKgAAUHmqtKSWQ4URAACAQgIjAAAAhbSkAgAAFadUpXZWDqsEAABAIYERAACAQlpSK0Tbb4xr7ClUtFKpKnnz6caeRuXadIfGngEA0MSUSnZJLYcKIwAAAIUERgAAAAoJjAAAABRyDSMAAFBxSlWuYSyHCiMAAACFBEYAAAAKaUkFAAAqj5bUsqgwAgAAUEhgBAAAoJCWVAAAoOKUSmpn5bBKAAAAFBIYAQAAKKQlFQAAqDglu6SWRYURAACAQgIjAAAAhbSkAgAAFUdLanlUGAEAACgkMAIAAFBIYAQAAKCQaxgBAIDKU1I7K4dVAgAAoJDACAAAQCEtqQAAQMVxW43yqDACAABQSGAEAACgkJZUAACg4mhJLY8KIwAAAIUERgAAAAppSQUAACpOqaQltRwqjAAAABQSGAEAACikJRUAAKg8VWpn5bBKAAAAFBIYAQAAKKQlFQAAqDilKruklkOFEQAAgEICIwAAAIUERgAAAAq5hhEAAKg4pZJrGMuhwggAAEAhgREAAIBCWlIBAICKU6pSOyuHVQIAAKCQwAgAAEAhLakAAEDFKVXZJbUcKowAAAAUEhgBAAAopCUVAACoPCUtqeVQYQQAAKCQwAgAAEAhLakAAEDFsUtqeVQYAQAAKCQwAgAAUEhgpFm4/qbbsvfnvpB+/UflnEu+l+XLVzT2lDYI1//8N9lr8FHp+9mROfuSf1/nuj748J8z+LCT8sl9RmT02LMyf8HLDe/d+Z9/zOePP/3t97545kcxdQAAPgLvKzAuXLgwP/vZz9Y5Zt68eZk6dep6jzVv3rwMGTLkPc9h9OjRmTlz5jrHnHvuuXnqqafe87Gbquuvvz5Lly5t7Gl8ZO5/aEZ+PPGW/HTCZbn3tuvywosvZfyP1/3PHet3/4Mz8qMbbs71E76Z+yb/NPPmv5SrfjSpcGzNG2/mlDMvzWn/OjoP3/PLfGLHHvnKud9qeL/Dppvk6M8Pz4ljDvuopg8A8L6Uqqqa/KMpeN+B8aabblrnmPnz5+f2229/P1/zvl122WXp3r17o87hg3TDDTdUVGC87Y77cuiw/dNj+49l0/btcvJxn89vbr+nsafV7N12xz0ZOeyA9NjhY9m0/SY5+bgj1rqu//m7P6XH9h/L5wbuk9atW+XUE4/K7DnP5unnXkiS7PnpXXPg/vtm8y6dPspTAADgQ/a+dkm98sorM3fu3AwfPjx77rlnkuT+++9PqVTK2LFjc+CBB+bKK6/M008/neHDh2fEiBEZOHBgzjjjjIbAc95552W33XZb73fV1dVl3LhxeeCBB5Iko0aNyujRo1cbc8EFF2TmzJlZtmxZBg0alC9/+ctJ3q5CnnHGGdlll12y66675sgjj8yDDz6Y9u3b56tf/Wq+853v5MUXX8w555yTAQMGFH7/vHnzCuc9ffr0jB8/Pp07d87s2bOz//77p2fPnrnhhhuybNmyTJgwIdtuu23mz5+fc845JzU1NenUqVMuv/zybLnlljnrrLOy3377ZfDgwUmSXXfdNY8++mimT5+eq6++Oh07dsyTTz6ZnXfeOePGjcuNN96YV155JWPGjEmHDh1y4403/hN/cs3LU888nwH7/r+G5717fDyv1ryR199cmI6btm/EmTVvc56ZmwGf+ZeG5716fjyv1rye199YmI4d2v/D2OfTq8fHG563bbNRtt2qW5565vnssN02H9mcAQD4aL2vwHj66adnzpw5mTx5cu6+++784he/yOTJk/P6669n5MiR6devX04//fRcd911+eEPf5gkWbp0aX7605+mdevWee655/LVr341t95663q/65e//GXmzZuX3/zmN2nRokXeeOONNcZ85StfSYcOHVJXV5djjjkms2fPTu/evVcbs2TJknz605/O17/+9XzpS1/K9773vVx33XV5+umnc+aZZ641MHbu3Hmt8549e3buvPPOdOjQIQMGDMhhhx2WW265JRMnTsyNN96Yc889N5dcckkOPvjgjBgxIrfccksuvfTS/OAHP1jnOc+aNSt33HFHunbtmiOOOCIzZszI0Ucfneuvvz4TJ05Mp06VUc1ZsvStbNJu44bn7f72c23tUoHxfViydGnDWiZpWOPaJUvXCIxLlryVTh03Xe21du3apnZJ5VS6AYANS6nkthrl+MDuwzhjxowcdNBBqa6uTpcuXbL77rtn5syZadeu3WrjVq5cmYsvvjizZ89OVVVVnnvuubKO/+CDD+bzn/98WrR4e8odOnRYY8xdd92VX/3qV1m5cmX++te/5umnn14jMLZs2TL77rtvkqRnz55p1apVWrZsmZ49e2b+/Plr/f51zXuXXXZJ165dkyTbbrtt9tprr4bjT58+PUny6KOPZvz48UmS4cOH5zvf+c56z7lPnz7ZYostkiS9e/fO/Pnz069fv/V+rrmbOu13ueBbE5IkfT+1c9q22SiLa5c0vP/Ozxtv3KZR5tdcTZn2u1xw+dv/DL69rtybLWMAACAASURBVG2yePG71vVvP2/cds11bdt29T+DJKmtXVI4FgCADccHFhjr6+vLGnf99denS5cumTx5clatWpU+ffqUffx1/RbghRdeyHXXXZdbbrklm266ac4666wsW7ZsjXEtW7ZsOE5VVVVatWrV8HNdXd0/Ne93jvFejvnOHKqrq7Nq1aqGc1yx4u+7VL77uNXV1euc34Zk6ODPZujgzzY8P/2872T2nGfzuYH7JEmemPNsunTqoLr4Hg0b/NkMe/e6fuOKPDHn2Ry4/9u/QJk955l06dRxjepikvTY/mP5zR1/v75xydK3MnfeS+m+/cc+/IkDANBo3temNxtvvHFqa2uTJLvvvnvuuuuu1NXVpaamJo888kj69Omz2pgkWbRoUTbbbLNUVVVl8uTJZYegvfbaK7/4xS+ycuXKJFmjJbW2tjZt2rTJJptskldffTV//OMf38+preGfnfc7dt1119xxxx1JkqlTp6Zv375Jkq222iqPP/54kuTee+9dLTCuzT+u6Ybu4AP759dTfpunnpmbNxcuzjXX/TIjhgxs7Gk1e8MPGpBbGtZ1Ua657hdrXdf999szc55+Pnff90CWLVueCf/x8/TqsV3D9Yt1dXVZtmx5VtbVZdWqVVm2bHlW/O3fVQCAJqmq1PQfTcD7CowdO3bMbrvtliFDhuTRRx9Nz549M3z48IwZMyZf//rXs9lmm6VXr16prq7OsGHDcv311+fII4/Mb37zm4waNSrPPfdc2rZtW9Z3HXbYYenWrVuGDRuWYcOGrbHzau/evbPTTjvloIMOyjnnnFPWRjrvxT8773d84xvfyK233pqhQ4dm8uTJOffcc5O8vXnPf//3f2fkyJF57LHHyjruqFGjcuKJJ66x6c+Gap89+ub40YdmzMnnpP/wY7PlFl1z6olHNfa0mr199+iXE0YfmqNPPiufHX5MturWNV8+6QsN7x90+BczZdrvkiSdOm6a8Vecm3+/5obsPnBU/vfxJ/LdS89qGDv5rvvSZ5+Dc+EVE/LInx9Pn30OznmXXfWRnxMAAB+sUn25vaQ0a/VvzGnsKVS0Uqlp3EenYm26Q2PPAABoYl47pul3rHW+vvFvJfeBXcMIAADQXJSq/EK/HE0uMN5///0ZN27caq9tvfXWmTBhQkV8PwAAQFOhJbVCaEltXFpSG5mWVADgH9Qcd0BjT2G9Ol3328aeQtOrMAIAAHzY1nXLPv5O2QMAAIBCAiMAAEAz9+yzz+bwww/PoEGDcvjhh+e5554rHHfnnXdm6NChGTJkSIYOHZpXX311ncfVkgoAAFScUtWG1ZJ6wQUX5Mgjj8zw4cMzefLknH/++bnhhhtWGzNz5sxcffXVmThxYjbbbLMsWrQorVq1WudxVRgBAACaoIULF2bevHlrPBYuXLjauNdeey2zZs3KkCFDkiRDhgzJrFmzUlNTs9q466+/Pscdd1w222yzJMkmm2yS1q1br3MOKowAAABN0MSJE3P11Vev8fopp5ySU089teH5ggULsvnmm6e6ujpJUl1dna5du2bBggXp1KlTw7inn346W2+9dY466qgsWbIk+++/f8aOHbvODYAERgAAgCZozJgxGTFixBqvt2/f/p86Xl1dXZ544on89Kc/zfLly3PCCSdkyy23zMEHH7zWzwiMAABA5WkGt9Vo3759WeGwW7duefnll1NXV5fq6urU1dXllVdeSbdu3VYbt+WWW2bw4MFp1apVWrVqlQEDBuR///d/1xkYXcMIAADQjHXu3Dk77rhjbr/99iTJ7bffnh133HG1dtTk7WsbH3jggdTX12fFihV56KGH0rt373UeW2AEAABo5i688MJMmjQpgwYNyqRJk3LRRRclSU488cTMnDkzSXLQQQelc+fOOfDAA3PwwQene/fuGTly5DqPW6qvr6//0GdPo6t/Y05jT6GilUp+N9OoNt2hsWcAADQxb37xwMaewnpteu2djT0FFUYAAACKCYwAAAAUsksqAABQeZr+JqlNggojAAAAhQRGAAAACmlJBQAAKk9JT2o5VBgBAAAoJDACAABQSEsqAABQ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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", @@ -1689,172 +379,6 @@ "\n", "plt.show()" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - " \n", - "\n", - "## Solution Architecture\n", - "[overview](#overview-0)\n", - "\n", - "We will go through 5 stages of ML and explore the solution architecture of SageMaker. Each of the sequancial notebooks will dive deep into corresponding ML stage." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - " \n", - "\n", - "### [Notebook 1](./1-data-prep-e2e.ipynb): Data Preparation, Ingest, Transform, Preprocess, and Store in SageMaker Feature Store\n", - "[overview](#nb0-solution)\n", - "\n", - "![Solution Architecture](images/e2e-1-pipeline-v3b.png)\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - " \n", - "\n", - "### [Notebook 2](./2-lineage-train-assess-bias-tune-registry-e2e.ipynb) and [Notebook 3](./3-mitigate-bias-train-model2-registry-e2e.ipynb) : Train, Tune, Check Pre- and Post- Training Bias, Mitigate Bias, Re-train, and Deposit the Best Model to SageMaker Model Registry\n", - "[overview](#nb0-solution)\n", - "\n", - "![Solution Architecture](images/e2e-2-pipeline-v3b.png)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - " \n", - "\n", - "### [Notebooks 4](./4-deploy-run-inference-e2e.ipynb) : Load the Best Model from Registry, Deploy it to SageMaker Hosted Endpoint, and Make Predictions\n", - "[overview](#nb0-solution)\n", - "\n", - "![Solution Architecture](images/e2e-3-pipeline-v3b.png)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - " \n", - "\n", - "### [Notebooks 5](./5-pipeline-e2e.ipynb): End-to-End Pipeline - MLOps Pipeline to run an end-to-end automated workflow with all the design decisions made during manual/exploratory steps in previous notebooks.\n", - "[overview](#nb0-solution) \n", - "\n", - "![Notebook5 Pipelines](images/e2e-5-pipeline-v3b.png)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - " \n", - "\n", - "## Code Resources\n", - "\n", - "[overview](#nb0-solution)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Stages\n", - "\n", - "Our solution is split into the following stages of the [ML Lifecycle](#nb0-ml-lifecycle), and each stage has it's own notebook:\n", - "\n", - "* [Use-case and Architecture](./0-AutoClaimFraudDetection.ipynb): We take a high-level look at the use-case, solution components and architecture.\n", - "* [Data Prep and Store](./1-data-prep-e2e.ipynb): We prepare a dataset for machine learning using SageMaker DataWrangler, create and deposit the datasets in a SageMaker FeatureStore. [--> Architecture](#nb0-data-prep)\n", - "* [Train, Assess Bias, Establish Lineage, Register Model](./2-lineage-train-assess-bias-tune-registry-e2e.ipynb): We detect possible pre-training and post-training bias, train and tune a XGBoost model using Amazon SageMaker, record Lineage in the Model Registry so we can later deploy it. [--> Architecture](#nb0-train-store)\n", - "* [Mitigate Bias, Re-train, Register New Model](./3-mitigate-bias-train-model2-registry-e2e.ipynb): We mitigate bias, retrain a less biased model, store it in a Model Registry. [--> Architecture](#nb0-train-store)\n", - "* [Deploy and Serve](./4-deploy-run-inference-e2e.ipynb): We deploy the model to a Amazon SageMaker Hosted Endpoint and run realtime inference via the SageMaker Online Feature Store . [--> Architecture](#nb0-deploy-predict)\n", - "* [Create and Run an MLOps Pipeline](./5-pipeline-e2e.ipynb): We then create a SageMaker Pipeline that ties together everything we have done so far, from outputs from Data Wrangler, Feature Store, Clarify , Model Registry and finally deployment to a SageMaker Hosted Endpoint. [--> Architecture](#nb0-pipeline)\n", - "* [Conclusion](./6-conclusion-e2e.ipynb): We wrap things up and discuss how to clean up the solution." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - " \n", - "\n", - "## The Exploratory Data Science and ML Ops Workflows\n", - "\n", - "[overview](#overview-0)\n", - "\n", - "### Exploratory Data Science and Scalable MLOps\n", - "\n", - "Note that there are typically two workflows: a manual exploratory workflow and an automated workflow. \n", - "\n", - "The *exploratory, manual data science workflow* is where experiments are conducted and various techniques and strategies are tested. \n", - "\n", - "After you have established your data prep, transformations, featurizations and training algorithms, testing of various hyperparameters for model tuning, you can start with the automated workflow where you *rely on MLOps or the ML Engineering part of your team* to streamline the process, make it more repeatable and scalable by putting it into an automated pipeline. \n", - "\n", - "![the 2 flows](images/2-flows.png)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "\n", - "## The ML Life Cycle: Detailed View\n", - "[overview](#overview-0)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "![title](images/ML-Lifecycle-v5.png)\n", - "\n", - "The Red Boxes and Icons represent comparatively newer concepts and tasks that are now deemed important to include and execute, in a production-oriented (versus research-oriented) and scalable ML lifecycle.\n", - "\n", - " These newer lifecycle tasks and their corresponding, supporting AWS Services and features include:\n", - "\n", - "1. [*Data Wrangling*](): AWS Data Wrangler for cleaning, normalizing, transforming and encoding data, as well as join ing datasets. The outputs of Data Wrangler are code generated to work with SageMaker Processing, SageMaker Pipelines, SageMaker Feature Store or just a plain old python script with pandas,\n", - " 1. Feature Engineering has always been done, but now with AWS Data Wrangler we can use a GUI based tool to do so and generate code for the next phases of the life-cycle.\n", - "2. [*Detect Bias*](): Using AWS Clarify, in Data Prep or in Training we can detect pre-training and post-training bias, and eventually at Inference time provide Interpretability / Explainability of the inferences (e.g., which factors were most influential in coming up with the prediction)\n", - "3. [*Feature Store [Offline]*](): Once we have done all of our feature engineering, the encoding and transformations, we can then standardize features, offline in AWS Feature Store, to be used as input features for training models.\n", - "4. [*Artifact Lineage*](): Using AWS SageMaker’s Artifact Lineage features we can associate all the artifacts (data, models, parameters, etc.) with a trained model to produce meta data that can be stored in a Model Registry.\n", - "5. [*Model Registry*](): AWS Model Registry stores the meta data around all artifacts that you have chosen to include in the process of creating your models, along with the model(s) themselves in a Model Registry. Later a human approval can be used to note that the model is good to be put into production. This feeds into the next phase of deploy and monitor .\n", - "6. [*Inference and the Online Feature Store*](): For realtime inference, we can leverage a online AWS Feature Store we have created to get us single digit millisecond low latency and high throughput for serving our model with new incoming data.\n", - "7. [*Pipelines*](): Once we have experimented and decided on the various options in the lifecycle (which transforms to apply to our features, imbalance or bias in the data, which algorithms to choose to train with, which hyper-parameters are giving us the best performance metrics, etc.) we can now automate the various tasks across the lifecycle using SageMaker Pipelines. \n", - " 1. In this blog, we will show a pipeline that starts with the outputs of AWS Data Wrangler and ends with storing trained models in the Model Registry. \n", - " 2. Typically, you could have a pipeline for data prep, one for training until model registry (which we are showing in the code associated with this blog) , one for inference, and one for re-training using SageMaker Monitor to detect model drift and data drift and trigger a re-training using , say an AWS Lambda function.\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[overview](#overview-0)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "___\n", - "\n", - "### Next Notebook: [Data Preparation, Process, and Store Features](./1-data-prep-e2e.ipynb)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { diff --git a/end_to_end/fraud_detection/1-data-prep-e2e.ipynb b/end_to_end/fraud_detection/1-data-prep-e2e.ipynb index b8faea4e3d..55771cd401 100644 --- a/end_to_end/fraud_detection/1-data-prep-e2e.ipynb +++ b/end_to_end/fraud_detection/1-data-prep-e2e.ipynb @@ -4,27 +4,30 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Part 1 : Data Preparation, Process, and Store Features" + "# Fraud Detection for Automobile Claims: Data Preparation, Process, and Store Features" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "## Background\n", "\n", - "## [Overview](./0-AutoClaimFraudDetection.ipynb)\n", - "* [Notebook 0: Overview, Architecture and Data Exploration](./0-AutoClaimFraudDetection.ipynb)\n", - "* **[Notebook 1: Data Preparation, Process, and Store Features](./1-data-prep-e2e.ipynb)**\n", - " * **[Architecture](#arch)**\n", - " * **[Getting started](#aud-getting-started)**\n", - " * **[DataSets](#aud-datasets)**\n", - " * **[SageMaker Feature Store](#aud-feature-store)**\n", - " * **[Create train and test datasets](#aud-dataset)**\n", - "* [Notebook 2: Train, Check Bias, Tune, Record Lineage, and Register a Model](./2-lineage-train-assess-bias-tune-registry-e2e.ipynb)\n", - "* [Notebook 3: Mitigate Bias, Train New Model, Store in Registry](./3-mitigate-bias-train-model2-registry-e2e.ipynb)\n", - "* [Notebook 4: Deploy Model, Run Predictions](./4-deploy-run-inference-e2e.ipynb)\n", - "* [Notebook 5: Create and Run an End-to-End Pipeline to Deploy the Model](./5-pipeline-e2e.ipynb)" + "This notebook is the second part of a series of notebooks that will demonstrate how to prepare, train, and deploy a model that detects fradulent auto claims. In this notebook, we will be preparing, processing, and storing features using SageMaker Feature Store. You can choose to run this notebook by itself or in sequence with the other notebooks listed below. Please see the [README.md](README.md) for more information about this use case implemented by this series of notebooks. \n", + "\n", + "\n", + "1. [Fraud Detection for Automobile Claims: Data Exploration](./0-AutoClaimFraudDetection.ipynb)\n", + "1. **[Fraud Detection for Automobile Claims: Data Preparation, Process, and Store Features](./1-data-prep-e2e.ipynb)**\n", + "1. [Fraud Detection for Automobile Claims: Train, Check Bias, Tune, Record Lineage, and Register a Model](./2-lineage-train-assess-bias-tune-registry-e2e.ipynb)\n", + "1. [Fraud Detection for Automobile Claims: Mitigate Bias, Train, Register, and Deploy Unbiased Model](./3-mitigate-bias-train-model2-registry-e2e.ipynb)\n", + "\n", + "\n", + "## Contents\n", + "1. [Architecture for Data Prep, Process and Store Features](#Architecture-for-Data-Prep,-Process-and-Store-Features)\n", + "1. [Getting Started: Creating Resources](#Getting-Started:-Creating-Resources)\n", + "1. [Datasets and Feature Types](#Datasets-and-Feature-Types)\n", + "1. [SageMaker Feature Store](#SageMaker-Feature-Store)\n", + "1. [Create Train and Test Datasets](#Create-Train-and-Test-Datasets)" ] }, { @@ -40,10 +43,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - " \n", - "\n", "## Architecture for Data Prep, Process and Store Features\n", - "[overview](#all-up-overview)\n", "----\n", "![Data Prep and Store](./images/e2e-1-pipeline-v3b.png)" ] @@ -65,31 +65,6 @@ "!python -m pip install -q awswrangler==2.2.0 imbalanced-learn==0.7.0 sagemaker==2.41.0 boto3==1.17.70" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Loading stored variables\n", - "If you ran this notebook before, you may want to re-use the resources you aready created with AWS. Run the cell below to load any prevously created variables. You should see a print-out of the existing variables. If you don't see anything printed then it's probably the first time you are running the notebook! " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%store -r\n", - "%store" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Important: You must have run the previous sequential notebooks to retrieve variables using the StoreMagic command.**" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -118,11 +93,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "\n", - "## Getting started: Creating Resources\n", - "\n", - "[overview](#all-up-overview)\n", + "## Getting Started: Creating Resources\n", "----\n", "In order to successfully run this notebook you will need to create some AWS resources. \n", "First, an S3 bucket will be created to store all the data for this tutorial. \n", @@ -226,12 +197,12 @@ "metadata": {}, "outputs": [], "source": [ - "if 'bucket' not in locals():\n", + "if \"bucket\" not in locals():\n", " bucket = sagemaker_session.default_bucket()\n", - " prefix = 'fraud-detect-demo'\n", + " prefix = \"fraud-detect-demo\"\n", " %store bucket\n", " %store prefix\n", - " print(f'Creating bucket: {bucket}...')" + " print(f\"Creating bucket: {bucket}...\")" ] }, { @@ -360,10 +331,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "\n", - "## DataSets and Feature Types\n", - "[overview](#all-up-overview)\n", + "## Datasets and Feature Types\n", "----" ] }, @@ -437,7 +405,7 @@ "outputs": [], "source": [ "# ======> This is your DataFlow output path if you decide to redo the work in DataFlow on your own\n", - "#flow_output_path = \"YOUR_PATH_HERE\"\n", + "# flow_output_path = \n", "claims_flow_path = \"\"\n", "customers_flow_path = \"\"\n", "\n", @@ -446,9 +414,7 @@ " claims_s3_path = f\"{flow_output_path}/claims_output\"\n", " customers_s3_path = f\"{flow_output_path}/customers_output\"\n", "\n", - " claims_preprocessed = wr.s3.read_csv(\n", - " path=claims_s3_path, dataset=True, dtype=claims_dtypes\n", - " )\n", + " claims_preprocessed = wr.s3.read_csv(path=claims_s3_path, dataset=True, dtype=claims_dtypes)\n", "\n", " customers_preprocessed = wr.s3.read_csv(\n", " path=customers_s3_path, dataset=True, dtype=customers_dtypes\n", @@ -488,12 +454,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "\n", "## SageMaker Feature Store\n", - "\n", - "[overview](#all-up-overview)\n", "----\n", + "\n", "Amazon SageMaker Feature Store is a purpose-built repository where you can store and access features so it’s much easier to name, organize, and reuse them across teams. SageMaker Feature Store provides a unified store for features during training and real-time inference without the need to write additional code or create manual processes to keep features consistent. SageMaker Feature Store keeps track of the metadata of stored features (e.g. feature name or version number) so that you can query the features for the right attributes in batches or in real time using Amazon Athena, an interactive query service. SageMaker Feature Store also keeps features updated, because as new data is generated during inference, the single repository is updated so new features are always available for models to use during training and inference.\n", "\n", "A feature store consists of an offline componet stored in S3 and an online component stored in a low-latency database. The online database is optional, but very useful if you need supplemental features to be available at inference. In this section, we will create a feature groups for our Claims and Customers datasets. After inserting the claims and customer data into their respective feature groups, you need to query the offline store with Athena to build the training dataset.\n", @@ -674,14 +637,14 @@ "metadata": {}, "outputs": [], "source": [ - "if 'claims_table' not in locals():\n", - " claims_table = (\n", - " claims_feature_group.describe()[\"OfflineStoreConfig\"][\"DataCatalogConfig\"][\"TableName\"]\n", - " )\n", - "if 'customers_table' not in locals():\n", - " customers_table = (\n", - " customers_feature_group.describe()[\"OfflineStoreConfig\"][\"DataCatalogConfig\"][\"TableName\"]\n", - " )\n", + "if \"claims_table\" not in locals():\n", + " claims_table = claims_feature_group.describe()[\"OfflineStoreConfig\"][\"DataCatalogConfig\"][\n", + " \"TableName\"\n", + " ]\n", + "if \"customers_table\" not in locals():\n", + " customers_table = customers_feature_group.describe()[\"OfflineStoreConfig\"][\"DataCatalogConfig\"][\n", + " \"TableName\"\n", + " ]\n", "\n", "claims_feature_group_s3_prefix = (\n", " f\"{prefix}/{account_id}/sagemaker/{region}/offline-store/{claims_table}/data\"\n", @@ -690,6 +653,8 @@ " f\"{prefix}/{account_id}/sagemaker/{region}/offline-store/{customers_table}/data\"\n", ")\n", "\n", + "print(claims_feature_group_s3_prefix)\n", + "\n", "offline_store_contents = None\n", "while offline_store_contents is None:\n", " objects_in_bucket = s3_client.list_objects(\n", @@ -704,16 +669,24 @@ "print(\"\\nData available.\")" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "claims_feature_group.describe()[\"OfflineStoreConfig\"][\n", + " \"DataCatalogConfig\"\n", + "], customers_feature_group.describe()[\"OfflineStoreConfig\"][\"DataCatalogConfig\"]" + ] + }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "\n", - "## Create train and test datasets\n", - "\n", - "[overview](#all-up-overview)\n", + "## Create Train and Test Datasets\n", "----\n", + "\n", "Once the data is available in the offline store, it will automatically be cataloged and loaded into an Athena table (this is done by default, but can be turned off). In order to build our training and test datasets, you will submit a SQL query to join the the Claims and Customers tables created in Athena." ] }, @@ -771,7 +744,6 @@ "outputs": [], "source": [ "col_order = [\"fraud\"] + list(dataset.drop([\"fraud\", \"policy_id\"], axis=1).columns)\n", - "%store col_order\n", "\n", "train = dataset.sample(frac=0.80, random_state=0)[col_order]\n", "test = dataset.drop(train.index)[col_order]" @@ -800,484 +772,19 @@ "execution_count": null, "metadata": {}, "outputs": [], - "source": [ - "s3_client.upload_file(\n", - " Filename=\"data/train.csv\", Bucket=bucket, Key=f\"{prefix}/data/train/train.csv\"\n", - ")\n", - "s3_client.upload_file(Filename=\"data/test.csv\", Bucket=bucket, Key=f\"{prefix}/data/test/test.csv\")\n", - "%store train_data_uri\n", - "%store test_data_uri" - ] - }, - { - "cell_type": "code", - "execution_count": 107, - "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", - "
fraudvehicle_claimdriver_relationship_selfnum_witnessespolicy_deductableincident_daypolicy_state_nvpolicy_state_azauto_yearpolicy_state_or...authorities_contacted_policetotal_claim_amountincident_hourpolicy_state_cainjury_claimauthorities_contacted_ambulancepolicy_annual_premiumcustomer_gender_maledriver_relationship_othernum_claims_past_year
398021500.015750240120120...123000.02001500.002450100
3833116000.01175050020170...116000.0800.002600000
483604000.012750190020090...04000.0510.002450100
4572019500.01175040120180...119500.01300.003000100
63609500.010750220020120...09500.02010.002750100
\n", - "

5 rows × 46 columns

\n", - "
" - ], - "text/plain": [ - " fraud vehicle_claim driver_relationship_self num_witnesses \\\n", - "398 0 21500.0 1 5 \n", - "3833 1 16000.0 1 1 \n", - "4836 0 4000.0 1 2 \n", - "4572 0 19500.0 1 1 \n", - "636 0 9500.0 1 0 \n", - "\n", - " policy_deductable incident_day policy_state_nv policy_state_az \\\n", - "398 750 24 0 1 \n", - "3833 750 5 0 0 \n", - "4836 750 19 0 0 \n", - "4572 750 4 0 1 \n", - "636 750 22 0 0 \n", - "\n", - " auto_year policy_state_or ... authorities_contacted_police \\\n", - "398 2012 0 ... 1 \n", - "3833 2017 0 ... 1 \n", - "4836 2009 0 ... 0 \n", - "4572 2018 0 ... 1 \n", - "636 2012 0 ... 0 \n", - "\n", - " total_claim_amount incident_hour policy_state_ca injury_claim \\\n", - "398 23000.0 20 0 1500.0 \n", - "3833 16000.0 8 0 0.0 \n", - "4836 4000.0 5 1 0.0 \n", - "4572 19500.0 13 0 0.0 \n", - "636 9500.0 20 1 0.0 \n", - "\n", - " authorities_contacted_ambulance policy_annual_premium \\\n", - "398 0 2450 \n", - "3833 0 2600 \n", - "4836 0 2450 \n", - "4572 0 3000 \n", - "636 0 2750 \n", - "\n", - " customer_gender_male driver_relationship_other num_claims_past_year \n", - "398 1 0 0 \n", - "3833 0 0 0 \n", - "4836 1 0 0 \n", - "4572 1 0 0 \n", - "636 1 0 0 \n", - "\n", - "[5 rows x 46 columns]" - ] - }, - "execution_count": 107, - "metadata": {}, - "output_type": "execute_result" - } - ], "source": [ "train.head(5)" ] }, { "cell_type": "code", - "execution_count": 108, + "execution_count": null, "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", - "
fraudvehicle_claimdriver_relationship_selfnum_witnessespolicy_deductableincident_daypolicy_state_nvpolicy_state_azauto_yearpolicy_state_or...authorities_contacted_policetotal_claim_amountincident_hourpolicy_state_cainjury_claimauthorities_contacted_ambulancepolicy_annual_premiumcustomer_gender_maledriver_relationship_othernum_claims_past_year
008500.000750270020140...08500.01510.003000100
7016000.01175020020141...141000.08025000.003000100
2107000.010750190020140...07000.0910.003000100
24017500.00075010020200...017500.0410.003000100
25017000.000750171020180...117000.01800.003000100
\n", - "

5 rows × 46 columns

\n", - "
" - ], - "text/plain": [ - " fraud vehicle_claim driver_relationship_self num_witnesses \\\n", - "0 0 8500.0 0 0 \n", - "7 0 16000.0 1 1 \n", - "21 0 7000.0 1 0 \n", - "24 0 17500.0 0 0 \n", - "25 0 17000.0 0 0 \n", - "\n", - " policy_deductable incident_day policy_state_nv policy_state_az \\\n", - "0 750 27 0 0 \n", - "7 750 2 0 0 \n", - "21 750 19 0 0 \n", - "24 750 1 0 0 \n", - "25 750 17 1 0 \n", - "\n", - " auto_year policy_state_or ... authorities_contacted_police \\\n", - "0 2014 0 ... 0 \n", - "7 2014 1 ... 1 \n", - "21 2014 0 ... 0 \n", - "24 2020 0 ... 0 \n", - "25 2018 0 ... 1 \n", - "\n", - " total_claim_amount incident_hour policy_state_ca injury_claim \\\n", - "0 8500.0 15 1 0.0 \n", - "7 41000.0 8 0 25000.0 \n", - "21 7000.0 9 1 0.0 \n", - "24 17500.0 4 1 0.0 \n", - "25 17000.0 18 0 0.0 \n", - "\n", - " authorities_contacted_ambulance policy_annual_premium \\\n", - "0 0 3000 \n", - "7 0 3000 \n", - "21 0 3000 \n", - "24 0 3000 \n", - "25 0 3000 \n", - "\n", - " customer_gender_male driver_relationship_other num_claims_past_year \n", - "0 1 0 0 \n", - "7 1 0 0 \n", - "21 1 0 0 \n", - "24 1 0 0 \n", - "25 1 0 0 \n", - "\n", - "[5 rows x 46 columns]" - ] - }, - "execution_count": 108, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "test.head(5)" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "----\n", - "\n", - "### Next Notebook: [Train, Check Bias, Tune, Record Lineage, Register Model](./2-lineage-train-assess-bias-tune-registry-e2e.ipynb)" - ] - }, { "cell_type": "code", "execution_count": null, @@ -1287,11 +794,10 @@ } ], "metadata": { - "instance_type": "ml.t3.medium", "kernelspec": { - "display_name": "Python 3 (Data Science)", + "display_name": "conda_python3", "language": "python", - "name": "python3__SAGEMAKER_INTERNAL__arn:aws:sagemaker:us-east-1:081325390199:image/datascience-1.0" + "name": "conda_python3" }, "language_info": { "codemirror_mode": { @@ -1303,7 +809,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.10" + "version": "3.6.13" } }, "nbformat": 4, diff --git a/end_to_end/fraud_detection/2-lineage-train-assess-bias-tune-registry-e2e.ipynb b/end_to_end/fraud_detection/2-lineage-train-assess-bias-tune-registry-e2e.ipynb index 1f276f0eaa..b5ca147647 100644 --- a/end_to_end/fraud_detection/2-lineage-train-assess-bias-tune-registry-e2e.ipynb +++ b/end_to_end/fraud_detection/2-lineage-train-assess-bias-tune-registry-e2e.ipynb @@ -4,46 +4,37 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Part 2: Train, Check Bias, Tune, Record Lineage, and Register a Model" + "# Fraud Detection for Automobile Claims: Train, Check Bias, Tune, Record Lineage, and Register a Model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - " \n", + "## Background\n", + "\n", + "This notebook is the third part of a series of notebooks that will demonstrate how to prepare, train, and deploy a model that detects fradulent auto claims. In this notebook, we will show how you can assess pre-training and post-training bias with SageMaker Clarify, Train the Model using XGBoost on SageMaker, and then finally deposit it in the Model Registry, along with the Lineage of Artifacts that were created along the way: data, code and model metadata. You can choose to run this notebook by itself or in sequence with the other notebooks listed below. Please see the [README.md](README.md) for more information about this use case implemented by this series of notebooks. \n", "\n", - "## [Overview](./0-AutoClaimFraudDetection.ipynb)\n", - "* [Notebook 0 : Overview, Architecture and Data Exploration](./0-AutoClaimFraudDetection.ipynb)\n", - "* [Notebook 1: Data Prep, Process, Store Features](./1-data-prep-e2e.ipynb)\n", - "* **[Notebook 2: Train, Check Bias, Tune, Record Lineage, and Register a Model](./2-lineage-train-assess-bias-tune-registry-e2e.ipynb)**\n", - " * **[Architecture](#train)**\n", - " * **[Train a model using XGBoost](#aud-train-model)**\n", - " * **[Model lineage with artifacts and associations](#model-lineage)**\n", - " * **[Evaluate the model for bias with Clarify](#check-bias)**\n", - " * **[Deposit Model and Lineage in SageMaker Model Registry](#model-registry)**\n", - "* [Notebook 3: Mitigate Bias, Train New Model, Store in Registry](./3-mitigate-bias-train-model2-registry-e2e.ipynb)\n", - "* [Notebook 4: Deploy Model, Run Predictions](./4-deploy-run-inference-e2e.ipynb)\n", - "* [Notebook 5 : Create and Run an End-to-End Pipeline to Deploy the Model](./5-pipeline-e2e.ipynb)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In this section we will show how you can assess pre-training and post-training bias with SageMaker Clarify, Train the Model using XGBoost on SageMaker, and then finally deposit it in the Model Registry, along with the Lineage of Artifacts that were created along the way: data, code and model metadata.\n", "\n", - "In this second model, you will fix the gender imbalance in the dataset using SMOTE and train another model using XGBoost. This model will also be saved to our registry and eventually approved for deployment." + "1. [Fraud Detection for Automobile Claims: Data Exploration](./0-AutoClaimFraudDetection.ipynb)\n", + "1. [Fraud Detection for Automobile Claims: Data Preparation, Process, and Store Features](./1-data-prep-e2e.ipynb)\n", + "1. **[Fraud Detection for Automobile Claims: Train, Check Bias, Tune, Record Lineage, and Register a Model](./2-lineage-train-assess-bias-tune-registry-e2e.ipynb)**\n", + "1. [Fraud Detection for Automobile Claims: Mitigate Bias, Train, Register, and Deploy Unbiased Model](./3-mitigate-bias-train-model2-registry-e2e.ipynb)\n", + "\n", + "## Contents\n", + "\n", + "1. [Architecture for the ML Lifecycle Stage: Train, Check Bias, Tune, Record Lineage, Register Model](#Architecture-for-the-ML-Lifecycle-Stage:-Train,-Check-Bias,-Tune,-Record-Lineage,-Register-Model)\n", + "1. [Train a Model using XGBoost](#Train-a-Model-using-XGBoost)\n", + "1. [Model Lineage with Artifacts and Associations](#Model-Lineage-with-Artifacts-and-Associations)\n", + "1. [Evaluate Model for Bias with Clarify](#Evaluate-Model-for-Bias-with-Clarify)\n", + "1. [Deposit Model and Lineage in SageMaker Model Registry](#Deposit-Model-and-Lineage-in-SageMaker-Model-Registry)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - " \n", - "\n", "## Architecture for the ML Lifecycle Stage: Train, Check Bias, Tune, Record Lineage, Register Model\n", - "[overview](#overview)\n", "----\n", "\n", "![train-assess-tune-register](./images/e2e-2-pipeline-v3b.png)" @@ -66,49 +57,6 @@ "!python -m pip install -q awswrangler==2.2.0 imbalanced-learn==0.7.0 sagemaker==2.41.0 boto3==1.17.70" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "To apply the update to the current kernel, run the following code to refresh the kernel." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import IPython\n", - "\n", - "IPython.Application.instance().kernel.do_shutdown(True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Load stored variables\n", - "Run the cell below to load any prevously created variables. You should see a print-out of the existing variables. If you don't see anything you may need to create them again or it may be your first time running this notebook." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%store -r\n", - "%store" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Important: You must have run the previous sequential notebooks to retrieve variables using the StoreMagic command.**" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -184,6 +132,9 @@ "outputs": [], "source": [ "# variables used for parameterizing the notebook run\n", + "bucket = sagemaker_session.default_bucket()\n", + "prefix = \"fraud-detect-demo\"\n", + "\n", "estimator_output_path = f\"s3://{bucket}/{prefix}/training_jobs\"\n", "train_instance_count = 1\n", "train_instance_type = \"ml.m4.xlarge\"\n", @@ -206,12 +157,32 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "### Store Data" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "train_data_uri = f\"s3://{bucket}/{prefix}/data/train/train.csv\"\n", + "test_data_uri = f\"s3://{bucket}/{prefix}/data/test/test.csv\"\n", "\n", - "## Train a model using XGBoost\n", "\n", - "[overview](#overview)\n", + "s3_client.upload_file(\n", + " Filename=\"data/train.csv\", Bucket=bucket, Key=f\"{prefix}/data/train/train.csv\"\n", + ")\n", + "s3_client.upload_file(Filename=\"data/test.csv\", Bucket=bucket, Key=f\"{prefix}/data/test/test.csv\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Train a Model using XGBoost\n", "----\n", + "\n", "Once the training and test datasets have been persisted in S3, you can start training a model by defining which SageMaker Estimator you'd like to use. For this guide, you will use the [XGBoost Open Source Framework](https://sagemaker.readthedocs.io/en/stable/frameworks/xgboost/xgboost.html) to train your model. This estimator is accessed via the SageMaker SDK, but mirrors the open source version of the [XGBoost Python package](https://xgboost.readthedocs.io/en/latest/python/index.html). Any functioanlity provided by the XGBoost Python package can be implemented in your training script." ] }, @@ -234,8 +205,7 @@ " \"eta\": \"0.2\",\n", " \"objective\": \"binary:logistic\",\n", " \"num_round\": \"100\",\n", - "}\n", - "%store hyperparameters" + "}" ] }, { @@ -275,26 +245,22 @@ }, "outputs": [], "source": [ - "if 'training_job_1_name' not in locals():\n", - " \n", - " xgb_estimator.fit(inputs = {'train': train_data_uri})\n", + "if \"training_job_1_name\" not in locals():\n", + "\n", + " xgb_estimator.fit(inputs={\"train\": train_data_uri})\n", " training_job_1_name = xgb_estimator.latest_training_job.job_name\n", - " %store training_job_1_name\n", - " \n", + "\n", "else:\n", - " print(f'Using previous training job: {training_job_1_name}')" + " print(f\"Using previous training job: {training_job_1_name}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "\n", - "## Model lineage with artifacts and associations\n", - "\n", - "[Overview](#aud-overview)\n", + "## Model Lineage with Artifacts and Associations\n", "----\n", + "\n", "Amazon SageMaker ML Lineage Tracking creates and stores information about the steps of a machine learning (ML) workflow from data preparation to model deployment. With the tracking information you can reproduce the workflow steps, track model and dataset lineage, and establish model governance and audit standards. With SageMaker Lineage Tracking data scientists and model builders can do the following:\n", "* Keep a running history of model discovery experiments.\n", "* Establish model governance by tracking model lineage artifacts for auditing and compliance verification.\n", @@ -308,8 +274,6 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "\n", "### Register artifacts" ] }, @@ -444,8 +408,6 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "\n", "### Set artifact associations" ] }, @@ -521,12 +483,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "\n", - "## Evaluate model for bias with Clarify\n", - "\n", - "[overview](#aud-overview)\n", + "## Evaluate Model for Bias with Clarify\n", "----\n", + "\n", "Amazon SageMaker Clarify helps improve your machine learning (ML) models by detecting potential bias and helping explain the predictions that models make. It helps you identify various types of bias in pretraining data and in posttraining that can emerge during model training or when the model is in production. SageMaker Clarify helps explain how these models make predictions using a feature attribution approach. It also monitors inferences models make in production for bias or feature attribution drift. The fairness and explainability functionality provided by SageMaker Clarify provides components that help AWS customers build less biased and more understandable machine learning models. It also provides tools to help you generate model governance reports which you can use to inform risk and compliance teams, and external regulators. \n", "\n", "You can reference the [SageMaker Developer Guide](https://docs.aws.amazon.com/sagemaker/latest/dg/clarify-fairness-and-explainability.html) for more information about SageMaker Clarify." @@ -546,7 +505,6 @@ "outputs": [], "source": [ "model_1_name = f\"{prefix}-xgboost-pre-smote\"\n", - "%store model_1_name\n", "model_matches = sagemaker_boto_client.list_models(NameContains=model_1_name)[\"Models\"]\n", "\n", "if not model_matches:\n", @@ -566,8 +524,6 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "\n", "### Check for data set bias and model bias\n", "\n", "With SageMaker, we can check for pre-training and post-training bias. Pre-training metrics show pre-existing bias in that data, while post-training metrics show bias in the predictions from the model. Using the SageMaker SDK, we can specify which groups we want to check bias across and which metrics we'd like to show. \n", @@ -705,12 +661,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "\n", "## Deposit Model and Lineage in SageMaker Model Registry\n", - "\n", - "[overview](#aud-overview)\n", "----\n", + "\n", "Once a useful model has been trained and its artifacts properly associated, the next step is to save the model in a registry for future reference and possible deployment.\n" ] }, @@ -728,10 +681,9 @@ "metadata": {}, "outputs": [], "source": [ - "if 'mpg_name' not in locals():\n", + "if \"mpg_name\" not in locals():\n", " mpg_name = prefix\n", - " %store mpg_name\n", - " print(f'Model Package Group name: {mpg_name}')" + " print(f\"Model Package Group name: {mpg_name}\")" ] }, { @@ -911,37 +863,13 @@ "source": [ "sagemaker_boto_client.list_model_packages(ModelPackageGroupName=mpg_name)[\"ModelPackageSummaryList\"]" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "----\n", - "\n", - "### Next Notebook: [Mitigate Bias, Train New Model, Store in Registry](./3-mitigate-bias-train-model2-registry-e2e.ipynb)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "To handle the imbalance, in the next notebook, we over-sample (i.e. upsample) the minority class using [SMOTE (Synthetic Minority Over-sampling Technique)](https://imbalanced-learn.readthedocs.io/en/stable/generated/imblearn.over_sampling.SMOTE.html)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { - "instance_type": "ml.t3.medium", "kernelspec": { - "display_name": "Python 3 (Data Science)", + "display_name": "conda_python3", "language": "python", - "name": "python3__SAGEMAKER_INTERNAL__arn:aws:sagemaker:us-east-1:081325390199:image/datascience-1.0" + "name": "conda_python3" }, "language_info": { "codemirror_mode": { @@ -953,7 +881,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.10" + "version": "3.6.13" } }, "nbformat": 4, diff --git a/end_to_end/fraud_detection/3-mitigate-bias-train-model2-registry-e2e.ipynb b/end_to_end/fraud_detection/3-mitigate-bias-train-model2-registry-e2e.ipynb index 4e3d804f85..68e0a90fd3 100644 --- a/end_to_end/fraud_detection/3-mitigate-bias-train-model2-registry-e2e.ipynb +++ b/end_to_end/fraud_detection/3-mitigate-bias-train-model2-registry-e2e.ipynb @@ -4,35 +4,34 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Part 3 : Mitigate Bias, Train another unbiased Model and Put in the Model Registry" + "# Fraud Detection for Automobile Claims: Mitigate Bias, Train, Register, and Deploy Unbiased Model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "## Background\n", "\n", - "## [Overview](./0-AutoClaimFraudDetection.ipynb)\n", - "* [Notebook 0 : Overview, Architecture and Data Exploration](./0-AutoClaimFraudDetection.ipynb)\n", - "* [Notebook 1: Data Prep, Process, Store Features](./1-data-prep-e2e.ipynb)\n", - "* [Notebook 2: Train, Check Bias, Tune, Record Lineage, and Register a Model](./2-lineage-train-assess-bias-tune-registry-e2e.ipynb)\n", - "* **[Notebook 3: Mitigate Bias, Train New Model, Store in Registry](./3-mitigate-bias-train-model2-registry-e2e.ipynb)**\n", - " * **[Architecture](#train2)**\n", - " * **[Develop a second model](#second-model)**\n", - " * **[Analyze the Second Model for Bias](#analyze-second-model)**\n", - " * **[View Results of Clarify Bias Detection Job](#view-second-clarify-job)**\n", - " * **[Configure and Run Clarify Explainability Job](#explainability)**\n", - " * **[Create Model Package for the Second Trained Model](#model-package)**\n", - "* [Notebook 4: Deploy Model, Run Predictions](./4-deploy-run-inference-e2e.ipynb)\n", - "* [Notebook 5 : Create and Run an End-to-End Pipeline to Deploy the Model](./5-pipeline-e2e.ipynb)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In this notebook, we will describe how to detect bias using Clarify, Mitigate it with SMOTE, train another model, put it in the Model Registry along with all the Lineage of the Artifacts created along the way: data, code and model metadata." + "This notebook is the fourth part of a series of notebooks that will demonstrate how to prepare, train, and deploy a model that detects fradulent auto claims. In this notebook, we will describe how to detect bias using Clarify, mitigate it with SMOTE, train another model, put it in the Model Registry along with all the Lineage of the Artifacts created along the way: data, code and model metadata. You can choose to run this notebook by itself or in sequence with the other notebooks listed below. Please see the [README.md](README.md) for more information about this use case implemented by this series of notebooks. \n", + "\n", + "\n", + "1. [Fraud Detection for Automobile Claims: Data Exploration](./0-AutoClaimFraudDetection.ipynb)\n", + "1. [Fraud Detection for Automobile Claims: Data Preparation, Process, and Store Features](./1-data-prep-e2e.ipynb)\n", + "1. [Fraud Detection for Automobile Claims: Train, Check Bias, Tune, Record Lineage, and Register a Model](./2-lineage-train-assess-bias-tune-registry-e2e.ipynb)\n", + "1. **[Fraud Detection for Automobile Claims: Mitigate Bias, Train, Register, and Deploy Unbiased Model](./3-mitigate-bias-train-model2-registry-e2e.ipynb)**\n", + "\n", + "\n", + "## Contents\n", + "1. [Architecture: Train, Check Bias, Tune, Record Lineage, Register Model](#Architecture:-Train,-Check-Bias,-Tune,-Record-Lineage,-Register-Model)\n", + "1. [Develop an Unbiased Model](#Develop-an-Unbiased-Model)\n", + "1. [Analyze Model for Bias and Explainability](#Analyze-Model-for-Bias-and-Explainability)\n", + "1. [View Results of Clarify Job](#View-Results-of-Clarify-Job)\n", + "1. [Configure and Run Explainability Job](#Configure-and-Run-Explainability-Job)\n", + "1. [Create Model Package for the Trained Model](#Create-Model-Package-for-the-Trained-Model)\n", + "1. [Architecture: Deploy and Serve Model](#Architecture:-Deploy-and-Serve-Model)\n", + "1. [Deploy an Approved Model](#Deploy-an-Approved-Model)\n", + "1. [Run Predictions on Claims](#Run-Predictions-on-Claims)" ] }, { @@ -49,7 +48,7 @@ "outputs": [], "source": [ "!python -m pip install -Uq pip\n", - "!python -m pip install -q awswrangler==2.2.0 imbalanced-learn==0.7.0 sagemaker==2.41.0 boto3==1.17.70" + "!python -m pip install -q awswrangler==2.2.0 imbalanced-learn==0.7.0 sagemaker==2.23.0 boto3==1.17.70" ] }, { @@ -81,31 +80,6 @@ "%matplotlib inline" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Load stored variables\n", - "Run the cell below to load any prevously created variables. You should see a print-out of the existing variables. If you don't see anything you may need to create them again or it may be your first time running this notebook." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%store -r\n", - "%store" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Important: You must have run the previous sequential notebooks to retrieve variables using the StoreMagic command.**" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -140,7 +114,7 @@ "\n", "sagemaker_boto_client = boto_session.client(\"sagemaker\")\n", "\n", - "sagemaker_session = sagemaker.session.Session(\n", + "sagemaker_session = sagemaker.Session(\n", " boto_session=boto_session, sagemaker_client=sagemaker_boto_client\n", ")\n", "\n", @@ -156,6 +130,12 @@ "outputs": [], "source": [ "# variables used for parameterizing the notebook run\n", + "bucket = sagemaker_session.default_bucket()\n", + "prefix = \"fraud-detect-demo\"\n", + "\n", + "claims_fg_name = f\"{prefix}-claims\"\n", + "customers_fg_name = f\"{prefix}-customers\"\n", + "\n", "model_2_name = f\"{prefix}-xgboost-post-smote\"\n", "\n", "train_data_upsampled_s3_path = f\"s3://{bucket}/{prefix}/data/train/upsampled/train.csv\"\n", @@ -173,10 +153,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - " \n", - "\n", - "## Architecture for this ML Lifecycle Stage : Train, Check Bias, Tune, Record Lineage, Register Model\n", - "[overview](#aup-overview)\n", + "## Architecture: Train, Check Bias, Tune, Record Lineage, Register Model\n", "----\n", "\n", "![train-assess-tune-register](./images/e2e-2-pipeline-v3b.png)" @@ -186,12 +163,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "\n", - "## Develop a second model\n", - "\n", - "[overview](#aup-overview)\n", + "## Develop an Unbiased Model\n", "----\n", + "\n", "In this second model, you will fix the gender imbalance in the dataset using SMOTE and train another model using XGBoost. This model will also be saved to our registry and eventually approved for deployment." ] }, @@ -205,826 +179,6 @@ "test = pd.read_csv(\"data/test.csv\")" ] }, - { - "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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
fraudvehicle_claimdriver_relationship_selfnum_witnessespolicy_deductableincident_daypolicy_state_nvpolicy_state_azauto_yearpolicy_state_or...authorities_contacted_policetotal_claim_amountincident_hourpolicy_state_cainjury_claimauthorities_contacted_ambulancepolicy_annual_premiumcustomer_gender_maledriver_relationship_othernum_claims_past_year
0021500.015750240120120...123000.02001500.002450100
1116000.01175050020170...116000.0800.002600000
204000.012750190020090...04000.0510.002450100
3019500.01175040120180...119500.01300.003000100
409500.010750220020120...09500.02010.002750100
..................................................................
399509500.003750220020140...19500.0910.003000010
399608500.013750121020150...18500.02200.003000000
3997012000.011750150020160...112000.0810.003000100
3998033000.01375040020150...136000.02013000.003000000
3999014000.01075030020080...014000.01410.012600100
\n", - "

4000 rows × 46 columns

\n", - "
" - ], - "text/plain": [ - " fraud vehicle_claim driver_relationship_self num_witnesses \\\n", - "0 0 21500.0 1 5 \n", - "1 1 16000.0 1 1 \n", - "2 0 4000.0 1 2 \n", - "3 0 19500.0 1 1 \n", - "4 0 9500.0 1 0 \n", - "... ... ... ... ... \n", - "3995 0 9500.0 0 3 \n", - "3996 0 8500.0 1 3 \n", - "3997 0 12000.0 1 1 \n", - "3998 0 33000.0 1 3 \n", - "3999 0 14000.0 1 0 \n", - "\n", - " policy_deductable incident_day policy_state_nv policy_state_az \\\n", - "0 750 24 0 1 \n", - "1 750 5 0 0 \n", - "2 750 19 0 0 \n", - "3 750 4 0 1 \n", - "4 750 22 0 0 \n", - "... ... ... ... ... \n", - "3995 750 22 0 0 \n", - "3996 750 12 1 0 \n", - "3997 750 15 0 0 \n", - "3998 750 4 0 0 \n", - "3999 750 3 0 0 \n", - "\n", - " auto_year policy_state_or ... authorities_contacted_police \\\n", - "0 2012 0 ... 1 \n", - "1 2017 0 ... 1 \n", - "2 2009 0 ... 0 \n", - "3 2018 0 ... 1 \n", - "4 2012 0 ... 0 \n", - "... ... ... ... ... \n", - "3995 2014 0 ... 1 \n", - "3996 2015 0 ... 1 \n", - "3997 2016 0 ... 1 \n", - "3998 2015 0 ... 1 \n", - "3999 2008 0 ... 0 \n", - "\n", - " total_claim_amount incident_hour policy_state_ca injury_claim \\\n", - "0 23000.0 20 0 1500.0 \n", - "1 16000.0 8 0 0.0 \n", - "2 4000.0 5 1 0.0 \n", - "3 19500.0 13 0 0.0 \n", - "4 9500.0 20 1 0.0 \n", - "... ... ... ... ... \n", - "3995 9500.0 9 1 0.0 \n", - "3996 8500.0 22 0 0.0 \n", - "3997 12000.0 8 1 0.0 \n", - "3998 36000.0 20 1 3000.0 \n", - "3999 14000.0 14 1 0.0 \n", - "\n", - " authorities_contacted_ambulance policy_annual_premium \\\n", - "0 0 2450 \n", - "1 0 2600 \n", - "2 0 2450 \n", - "3 0 3000 \n", - "4 0 2750 \n", - "... ... ... \n", - "3995 0 3000 \n", - "3996 0 3000 \n", - "3997 0 3000 \n", - "3998 0 3000 \n", - "3999 1 2600 \n", - "\n", - " customer_gender_male driver_relationship_other num_claims_past_year \n", - "0 1 0 0 \n", - "1 0 0 0 \n", - "2 1 0 0 \n", - "3 1 0 0 \n", - "4 1 0 0 \n", - "... ... ... ... \n", - "3995 0 1 0 \n", - "3996 0 0 0 \n", - "3997 1 0 0 \n", - "3998 0 0 0 \n", - "3999 1 0 0 \n", - "\n", - "[4000 rows x 46 columns]" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "train" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
fraudvehicle_claimdriver_relationship_selfnum_witnessespolicy_deductableincident_daypolicy_state_nvpolicy_state_azauto_yearpolicy_state_or...authorities_contacted_policetotal_claim_amountincident_hourpolicy_state_cainjury_claimauthorities_contacted_ambulancepolicy_annual_premiumcustomer_gender_maledriver_relationship_othernum_claims_past_year
008500.000750270020140...08500.01510.003000100
1016000.01175020020141...141000.08025000.003000100
207000.010750190020140...07000.0910.003000100
3017500.00075010020200...017500.0410.003000100
4017000.000750171020180...117000.01800.003000100
..................................................................
995011000.01075040020141...111000.01600.002850100
996014000.010750170120190...114000.02200.003000100
997040000.01175070020190...155000.018115000.003000100
998040000.01175030020180...040000.01800.013000101
999135000.012750211020160...135000.01600.003000101
\n", - "

1000 rows × 46 columns

\n", - "
" - ], - "text/plain": [ - " fraud vehicle_claim driver_relationship_self num_witnesses \\\n", - "0 0 8500.0 0 0 \n", - "1 0 16000.0 1 1 \n", - "2 0 7000.0 1 0 \n", - "3 0 17500.0 0 0 \n", - "4 0 17000.0 0 0 \n", - ".. ... ... ... ... \n", - "995 0 11000.0 1 0 \n", - "996 0 14000.0 1 0 \n", - "997 0 40000.0 1 1 \n", - "998 0 40000.0 1 1 \n", - "999 1 35000.0 1 2 \n", - "\n", - " policy_deductable incident_day policy_state_nv policy_state_az \\\n", - "0 750 27 0 0 \n", - "1 750 2 0 0 \n", - "2 750 19 0 0 \n", - "3 750 1 0 0 \n", - "4 750 17 1 0 \n", - ".. ... ... ... ... \n", - "995 750 4 0 0 \n", - "996 750 17 0 1 \n", - "997 750 7 0 0 \n", - "998 750 3 0 0 \n", - "999 750 21 1 0 \n", - "\n", - " auto_year policy_state_or ... authorities_contacted_police \\\n", - "0 2014 0 ... 0 \n", - "1 2014 1 ... 1 \n", - "2 2014 0 ... 0 \n", - "3 2020 0 ... 0 \n", - "4 2018 0 ... 1 \n", - ".. ... ... ... ... \n", - "995 2014 1 ... 1 \n", - "996 2019 0 ... 1 \n", - "997 2019 0 ... 1 \n", - "998 2018 0 ... 0 \n", - "999 2016 0 ... 1 \n", - "\n", - " total_claim_amount incident_hour policy_state_ca injury_claim \\\n", - "0 8500.0 15 1 0.0 \n", - "1 41000.0 8 0 25000.0 \n", - "2 7000.0 9 1 0.0 \n", - "3 17500.0 4 1 0.0 \n", - "4 17000.0 18 0 0.0 \n", - ".. ... ... ... ... \n", - "995 11000.0 16 0 0.0 \n", - "996 14000.0 22 0 0.0 \n", - "997 55000.0 18 1 15000.0 \n", - "998 40000.0 18 0 0.0 \n", - "999 35000.0 16 0 0.0 \n", - "\n", - " authorities_contacted_ambulance policy_annual_premium \\\n", - "0 0 3000 \n", - "1 0 3000 \n", - "2 0 3000 \n", - "3 0 3000 \n", - "4 0 3000 \n", - ".. ... ... \n", - "995 0 2850 \n", - "996 0 3000 \n", - "997 0 3000 \n", - "998 1 3000 \n", - "999 0 3000 \n", - "\n", - " customer_gender_male driver_relationship_other num_claims_past_year \n", - "0 1 0 0 \n", - "1 1 0 0 \n", - "2 1 0 0 \n", - "3 1 0 0 \n", - "4 1 0 0 \n", - ".. ... ... ... \n", - "995 1 0 0 \n", - "996 1 0 0 \n", - "997 1 0 0 \n", - "998 1 0 1 \n", - "999 1 0 1 \n", - "\n", - "[1000 rows x 46 columns]" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "test" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -1071,6 +225,28 @@ "train_data_upsampled[\"customer_gender_female\"].value_counts()" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Set the hyperparameters\n", + "These are the parameters which will be sent to our training script in order to train the model. Although they are all defined as \"hyperparameters\" here, they can encompass XGBoost's [Learning Task Parameters](https://xgboost.readthedocs.io/en/latest/parameter.html#learning-task-parameters), [Tree Booster Parameters](https://xgboost.readthedocs.io/en/latest/parameter.html#parameters-for-tree-booster), or any other parameters you'd like to configure for XGBoost." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "hyperparameters = {\n", + " \"max_depth\": \"3\",\n", + " \"eta\": \"0.2\",\n", + " \"objective\": \"binary:logistic\",\n", + " \"num_round\": \"100\",\n", + "}" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -1116,15 +292,14 @@ }, "outputs": [], "source": [ - "if 'training_job_2_name' not in locals():\n", - " \n", - " xgb_estimator.fit(inputs = {'train': train_data_upsampled_s3_path})\n", + "if \"training_job_2_name\" not in locals():\n", + "\n", + " xgb_estimator.fit(inputs={\"train\": train_data_upsampled_s3_path})\n", " training_job_2_name = xgb_estimator.latest_training_job.job_name\n", - " %store training_job_2_name\n", - " \n", + "\n", "else:\n", - " \n", - " print(f'Using previous training job: {training_job_2_name}')" + "\n", + " print(f\"Using previous training job: {training_job_2_name}\")" ] }, { @@ -1330,21 +505,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n",
-    "\n",
-    "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "\n", - "## Analyze the second model for bias and explainability\n", - "\n", - "[overview](#aup-overview)\n", + "## Analyze Model for Bias and Explainability\n", "----\n", + "\n", "Amazon SageMaker Clarify provides tools to help explain how machine learning (ML) models make predictions. These tools can help ML modelers and developers and other internal stakeholders understand model characteristics as a whole prior to deployment and to debug predictions provided by the model after it's deployed. Transparency about how ML models arrive at their predictions is also critical to consumers and regulators who need to trust the model predictions if they are going to accept the decisions based on them. SageMaker Clarify uses a model-agnostic feature attribution approach, which you can used to understand why a model made a prediction after training and to provide per-instance explanation during inference. The implementation includes a scalable and efficient implementation of SHAP ([see paper](https://papers.nips.cc/paper/2017/file/8a20a8621978632d76c43dfd28b67767-Paper.pdf)), based on the concept of a Shapley value from the field of cooperative game theory that assigns each feature an importance value for a particular prediction. " ] }, @@ -1449,10 +612,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "\n", - "## View results of Clarify job\n", - "[overview](#aup-overview)\n", + "## View Results of Clarify Job\n", "----\n", "\n", "Running Clarify on your dataset or model can take ~15 minutes. If you don't have time to run the job, you can view the pre-generated results included with this demo. Otherwise, you can run the job by un-commenting the code in the cell above." @@ -1495,11 +655,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "\n", - "## Configure and run explainability job\n", - "[overview](#aup-overview)\n", + "## Configure and Run Explainability Job\n", "----\n", + "\n", "To run the full Clarify job, you must un-comment the code in the cell below. Running the job will take ~15 minutes. If you wish to save time, you can view the results in the next cell after which loads a pre-generated output if no explainability job was run." ] }, @@ -1530,7 +688,7 @@ "\n", "# un-comment the code below to run the whole job\n", "\n", - "# if 'clarify_expl_job_name' not in locals():\n", + "# if \"clarify_expl_job_name\" not in locals():\n", "\n", "# clarify_processor.run_explainability(\n", "# data_config=explainability_data_config,\n", @@ -1554,30 +712,9 @@ }, { "cell_type": "code", - "execution_count": 32, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Loading pre-generated analysis file...\n", - "\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "if \"clarify_expl_job_name\" in locals():\n", " s3_client.download_file(\n", @@ -1615,31 +752,9 @@ }, { "cell_type": "code", - "execution_count": 102, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'Click link below to view the SageMaker Clarify report'" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "clarify_output/report.pdf
" - ], - "text/plain": [ - "/root/amazon-sagemaker-examples/end_to_end/clarify_output/report.pdf" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "from IPython.display import FileLink, FileLinks\n", "\n", @@ -1680,11 +795,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "\n", - "## Create Model Package for the Second Trained Model\n", - "[overview](#aup-overview)\n", - "----" + "## Create Model Package for the Trained Model\n", + "----\n" ] }, { @@ -1781,6 +893,7 @@ "metadata": {}, "outputs": [], "source": [ + "mpg_name = prefix\n", "mp_input_dict = {\n", " \"ModelPackageGroupName\": mpg_name,\n", " \"ModelPackageDescription\": \"XGBoost classifier to detect insurance fraud with SMOTE.\",\n", @@ -1790,8 +903,7 @@ "\n", "mp_input_dict.update(mp_inference_spec)\n", "mp2_response = sagemaker_boto_client.create_model_package(**mp_input_dict)\n", - "mp2_arn = mp2_response[\"ModelPackageArn\"]\n", - "%store mp2_arn" + "mp2_arn = mp2_response[\"ModelPackageArn\"]" ] }, { @@ -1842,9 +954,271 @@ "cell_type": "markdown", "metadata": {}, "source": [ + " \n", + "\n", + "## Architecture: Deploy and Serve Model\n", "----\n", "\n", - "### Next Notebook: [Deploy Model, Run Predictions](./4-deploy-run-inference-e2e.ipynb)" + "Now that we have trained a model, we can deploy and serve it. The follwoing picture shows the architecture for doing so.\n", + "\n", + "![train-assess-tune-register](./images/e2e-3-pipeline-v3b.png)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# variables used for parameterizing the notebook run\n", + "endpoint_name = f\"{model_2_name}-endpoint\"\n", + "endpoint_instance_count = 1\n", + "endpoint_instance_type = \"ml.m4.xlarge\"\n", + "\n", + "predictor_instance_count = 1\n", + "predictor_instance_type = \"ml.c5.xlarge\"\n", + "batch_transform_instance_count = 1\n", + "batch_transform_instance_type = \"ml.c5.xlarge\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Deploy an Approved Model and Make a Prediction\n", + "----" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Approve the second model\n", + "In the real-life MLOps lifecycle, a model package gets approved after evaluation by data scientists, subject matter experts and auditors." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "second_model_package = sagemaker_boto_client.list_model_packages(ModelPackageGroupName=mpg_name)[\n", + " \"ModelPackageSummaryList\"\n", + "][0]\n", + "model_package_update = {\n", + " \"ModelPackageArn\": second_model_package[\"ModelPackageArn\"],\n", + " \"ModelApprovalStatus\": \"Approved\",\n", + "}\n", + "\n", + "update_response = sagemaker_boto_client.update_model_package(**model_package_update)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Create an endpoint config and an endpoint\n", + "Deploy the endpoint. This might take about 8minutes." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "primary_container = {\"ModelPackageName\": second_model_package[\"ModelPackageArn\"]}\n", + "endpoint_config_name = f\"{model_2_name}-endpoint-config\"\n", + "existing_configs = len(\n", + " sagemaker_boto_client.list_endpoint_configs(NameContains=endpoint_config_name, MaxResults=30)[\n", + " \"EndpointConfigs\"\n", + " ]\n", + ")\n", + "\n", + "if existing_configs == 0:\n", + " create_ep_config_response = sagemaker_boto_client.create_endpoint_config(\n", + " EndpointConfigName=endpoint_config_name,\n", + " ProductionVariants=[\n", + " {\n", + " \"InstanceType\": endpoint_instance_type,\n", + " \"InitialVariantWeight\": 1,\n", + " \"InitialInstanceCount\": endpoint_instance_count,\n", + " \"ModelName\": model_2_name,\n", + " \"VariantName\": \"AllTraffic\",\n", + " }\n", + " ],\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "existing_endpoints = sagemaker_boto_client.list_endpoints(\n", + " NameContains=endpoint_name, MaxResults=30\n", + ")[\"Endpoints\"]\n", + "if not existing_endpoints:\n", + " create_endpoint_response = sagemaker_boto_client.create_endpoint(\n", + " EndpointName=endpoint_name, EndpointConfigName=endpoint_config_name\n", + " )\n", + "\n", + "endpoint_info = sagemaker_boto_client.describe_endpoint(EndpointName=endpoint_name)\n", + "endpoint_status = endpoint_info[\"EndpointStatus\"]\n", + "\n", + "while endpoint_status == \"Creating\":\n", + " endpoint_info = sagemaker_boto_client.describe_endpoint(EndpointName=endpoint_name)\n", + " endpoint_status = endpoint_info[\"EndpointStatus\"]\n", + " print(\"Endpoint status:\", endpoint_status)\n", + " if endpoint_status == \"Creating\":\n", + " time.sleep(60)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Run Predictions on Claims\n", + "----" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " \n", + "\n", + "### Create a predictor" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "predictor = sagemaker.predictor.Predictor(\n", + " endpoint_name=endpoint_name, sagemaker_session=sagemaker_session\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Sample a claim from the test data" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "dataset = pd.read_csv(\"data/dataset.csv\")\n", + "train = dataset.sample(frac=0.8, random_state=0)\n", + "test = dataset.drop(train.index)\n", + "sample_policy_id = int(test.sample(1)[\"policy_id\"])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "test.info()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Get Multiple Claims" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "dataset = pd.read_csv(\"./data/claims_customer.csv\")\n", + "col_order = [\"fraud\"] + list(dataset.drop([\"fraud\", \"Unnamed: 0\", \"policy_id\"], axis=1).columns)\n", + "col_order" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "col_order" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Pull customer data and format the datapoint\n", + "When a customer submits an insurance claim online for instant approval, the insurance company will need to pull customer-specific data. You can do it either using the customer data we have stored in a CSV files or an online feature store to add to the claim data. The pulled data will serve as input for a model prediction.\n", + "\n", + "Then, the datapoint must match the exact input format as the model was trained--with all features in the correct order. In this example, the `col_order` variable was saved when you created the train and test datasets earlier in the guide." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "sample_policy_id = int(test.sample(1)[\"policy_id\"])\n", + "pull_from_feature_store = False\n", + "\n", + "if pull_from_feature_store:\n", + " customers_response = featurestore_runtime.get_record(\n", + " FeatureGroupName=customers_fg_name, RecordIdentifierValueAsString=str(sample_policy_id)\n", + " )\n", + "\n", + " customer_record = customers_response[\"Record\"]\n", + " customer_df = pd.DataFrame(customer_record).set_index(\"FeatureName\")\n", + "\n", + " claims_response = featurestore_runtime.get_record(\n", + " FeatureGroupName=claims_fg_name, RecordIdentifierValueAsString=str(sample_policy_id)\n", + " )\n", + "\n", + " claims_record = claims_response[\"Record\"]\n", + " claims_df = pd.DataFrame(claims_record).set_index(\"FeatureName\")\n", + "\n", + " blended_df = pd.concat([claims_df, customer_df]).loc[col_order].drop(\"fraud\")\n", + "else:\n", + " customer_claim_df = dataset[dataset[\"policy_id\"] == sample_policy_id].sample(1)\n", + " blended_df = customer_claim_df.loc[:, col_order].drop(\"fraud\", axis=1).T.reset_index()\n", + " blended_df.columns = [\"FeatureName\", \"ValueAsString\"]\n", + "\n", + "data_input = \",\".join([str(x) for x in blended_df[\"ValueAsString\"]])\n", + "data_input" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Make prediction" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "results = predictor.predict(data_input, initial_args={\"ContentType\": \"text/csv\"})\n", + "prediction = json.loads(results)\n", + "print(f\"Probablitity the claim from policy {int(sample_policy_id)} is fraudulent:\", prediction)" ] }, { @@ -1858,9 +1232,9 @@ "metadata": { "instance_type": "ml.t3.medium", "kernelspec": { - "display_name": "Python 3 (Data Science)", + "display_name": "conda_python3", "language": "python", - "name": "python3__SAGEMAKER_INTERNAL__arn:aws:sagemaker:us-east-1:081325390199:image/datascience-1.0" + "name": "conda_python3" }, "language_info": { "codemirror_mode": { @@ -1872,7 +1246,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.10" + "version": "3.6.13" } }, "nbformat": 4, diff --git a/end_to_end/fraud_detection/4-deploy-run-inference-e2e.ipynb b/end_to_end/fraud_detection/4-deploy-run-inference-e2e.ipynb deleted file mode 100644 index 8c0ede1bbd..0000000000 --- a/end_to_end/fraud_detection/4-deploy-run-inference-e2e.ipynb +++ /dev/null @@ -1,555 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Part 4 : Deploy, Run Inference, Interpret Inference" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "\n", - "## [Overview](./0-AutoClaimFraudDetection.ipynb)\n", - "* [Notebook 0 : Overview, Architecture and Data Exploration](./0-AutoClaimFraudDetection.ipynb)\n", - "* [Notebook 1: Data Prep, Process, Store Features](./1-data-prep-e2e.ipynb)\n", - "* [Notebook 2: Train, Check Bias, Tune, Record Lineage, and Register a Model](./2-lineage-train-assess-bias-tune-registry-e2e.ipynb)\n", - "* [Notebook 3: Mitigate Bias, Train New Model, Store in Registry](./3-mitigate-bias-train-model2-registry-e2e.ipynb)\n", - "* **[Notebook 4: Deploy Model, Run Predictions](./4-deploy-run-inference-e2e.ipynb)**\n", - " * **[Architecture](#deploy)**\n", - " * **[Deploy an approved model and Run Inference via Feature Store](#deploy-model)**\n", - " * **[Create a Predictor](#predictor)**\n", - " * **[Run Predictions from Online FeatureStore](#run-predictions)**\n", - "* [Notebook 5 : Create and Run an End-to-End Pipeline to Deploy the Model](./5-pipeline-e2e.ipynb)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In this section of the end to end use case, we will deploy the mitigated model that is the end-product of this fraud detection use-case. We will show how to run inference and also how to use Clarify to interpret or \"explain\" the model." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Install required and/or update third-party libraries" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "!python -m pip install -Uq pip\n", - "!python -m pip install -q awswrangler==2.2.0 imbalanced-learn==0.7.0 sagemaker==2.41.0 boto3==1.17.70" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Load stored variables\n", - "Run the cell below to load any prevously created variables. You should see a print-out of the existing variables. If you don't see anything you may need to create them again or it may be your first time running this notebook." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%store -r\n", - "%store" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Important: You must have run the previous sequential notebooks to retrieve variables using the StoreMagic command.**" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Import libraries" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import json\n", - "import time\n", - "import boto3\n", - "import sagemaker\n", - "import numpy as np\n", - "import pandas as pd\n", - "import awswrangler as wr" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Set region, boto3 and SageMaker SDK variables" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# You can change this to a region of your choice\n", - "import sagemaker\n", - "\n", - "region = sagemaker.Session().boto_region_name\n", - "print(\"Using AWS Region: {}\".format(region))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "boto3.setup_default_session(region_name=region)\n", - "\n", - "boto_session = boto3.Session(region_name=region)\n", - "\n", - "s3_client = boto3.client(\"s3\", region_name=region)\n", - "\n", - "sagemaker_boto_client = boto_session.client(\"sagemaker\")\n", - "\n", - "sagemaker_session = sagemaker.session.Session(\n", - " boto_session=boto_session, sagemaker_client=sagemaker_boto_client\n", - ")\n", - "\n", - "sagemaker_role = sagemaker.get_execution_role()\n", - "\n", - "account_id = boto3.client(\"sts\").get_caller_identity()[\"Account\"]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# variables used for parameterizing the notebook run\n", - "endpoint_name = f\"{model_2_name}-endpoint\"\n", - "endpoint_instance_count = 1\n", - "endpoint_instance_type = \"ml.m4.xlarge\"\n", - "\n", - "predictor_instance_count = 1\n", - "predictor_instance_type = \"ml.c5.xlarge\"\n", - "batch_transform_instance_count = 1\n", - "batch_transform_instance_type = \"ml.c5.xlarge\"" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - " \n", - "\n", - "## Architecture for this ML Lifecycle Stage : Train, Check Bias, Tune, Record Lineage, Register Model\n", - "[overview](#overview-4)\n", - "\n", - "![train-assess-tune-register](./images/e2e-3-pipeline-v3b.png)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "\n", - "## Deploy an approved model and make prediction via Feature Store\n", - "\n", - "[overview](#overview-4)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Approve the second model\n", - "In the real-life MLOps lifecycle, a model package gets approved after evaluation by data scientists, subject matter experts and auditors." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "second_model_package = sagemaker_boto_client.list_model_packages(ModelPackageGroupName=mpg_name)[\n", - " \"ModelPackageSummaryList\"\n", - "][0]\n", - "model_package_update = {\n", - " \"ModelPackageArn\": second_model_package[\"ModelPackageArn\"],\n", - " \"ModelApprovalStatus\": \"Approved\",\n", - "}\n", - "\n", - "update_response = sagemaker_boto_client.update_model_package(**model_package_update)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Create an endpoint config and an endpoint\n", - "Deploy the endpoint. This might take about 8minutes." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "primary_container = {'ModelPackageName': second_model_package['ModelPackageArn']}\n", - "endpoint_config_name=f'{model_2_name}-endpoint-config'\n", - "existing_configs = len(sagemaker_boto_client.list_endpoint_configs(NameContains=endpoint_config_name, MaxResults = 30)['EndpointConfigs'])\n", - "\n", - "if existing_configs == 0:\n", - " create_ep_config_response = sagemaker_boto_client.create_endpoint_config(\n", - " EndpointConfigName=endpoint_config_name,\n", - " ProductionVariants=[{\n", - " 'InstanceType': endpoint_instance_type,\n", - " 'InitialVariantWeight': 1,\n", - " 'InitialInstanceCount': endpoint_instance_count,\n", - " 'ModelName': model_2_name,\n", - " 'VariantName': 'AllTraffic'\n", - " }]\n", - " )\n", - " %store endpoint_config_name" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "existing_endpoints = sagemaker_boto_client.list_endpoints(NameContains=endpoint_name, MaxResults = 30)['Endpoints']\n", - "if not existing_endpoints:\n", - " create_endpoint_response = sagemaker_boto_client.create_endpoint(\n", - " EndpointName=endpoint_name,\n", - " EndpointConfigName=endpoint_config_name)\n", - " %store endpoint_name\n", - "\n", - "endpoint_info = sagemaker_boto_client.describe_endpoint(EndpointName=endpoint_name)\n", - "endpoint_status = endpoint_info['EndpointStatus']\n", - "\n", - "while endpoint_status == 'Creating':\n", - " endpoint_info = sagemaker_boto_client.describe_endpoint(EndpointName=endpoint_name)\n", - " endpoint_status = endpoint_info['EndpointStatus']\n", - " print('Endpoint status:', endpoint_status)\n", - " if endpoint_status == 'Creating':\n", - " time.sleep(60)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - " \n", - "\n", - "### Create a predictor" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "predictor = sagemaker.predictor.Predictor(\n", - " endpoint_name=endpoint_name, sagemaker_session=sagemaker_session\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Sample a claim from the test data" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "dataset = pd.read_csv(\"data/dataset.csv\")\n", - "train = dataset.sample(frac=0.8, random_state=0)\n", - "test = dataset.drop(train.index)\n", - "sample_policy_id = int(test.sample(1)[\"policy_id\"])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "test.info()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Get sample's claim data from online feature store\n", - "This will simulate getting data in real-time from a customer's insurance claim submission." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "featurestore_runtime = boto_session.client(\n", - " service_name=\"sagemaker-featurestore-runtime\", region_name=region\n", - ")\n", - "\n", - "feature_store_session = sagemaker.Session(\n", - " boto_session=boto_session,\n", - " sagemaker_client=sagemaker_boto_client,\n", - " sagemaker_featurestore_runtime_client=featurestore_runtime,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - " \n", - "\n", - "## Run Predictions on Multiple Claims\n", - "\n", - "[overview](#overview-4)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "scrolled": true - }, - "outputs": [], - "source": [ - "import datetime as datetime\n", - "\n", - "timer = []\n", - "MAXRECS = 100\n", - "\n", - "\n", - "def barrage_of_inference():\n", - " sample_policy_id = int(test.sample(1)[\"policy_id\"])\n", - "\n", - " temp_fg_name = \"fraud-detect-demo-claims\"\n", - "\n", - " claims_response = featurestore_runtime.get_record(\n", - " FeatureGroupName=temp_fg_name, RecordIdentifierValueAsString=str(sample_policy_id)\n", - " )\n", - "\n", - " if claims_response.get(\"Record\"):\n", - " claims_record = claims_response[\"Record\"]\n", - " claims_df = pd.DataFrame(claims_record).set_index(\"FeatureName\")\n", - " else:\n", - " print(\"No Record returned / Record Key \\n\")\n", - "\n", - " t0 = datetime.datetime.now()\n", - "\n", - " customers_response = featurestore_runtime.get_record(\n", - " FeatureGroupName=customers_fg_name, RecordIdentifierValueAsString=str(sample_policy_id)\n", - " )\n", - "\n", - " t1 = datetime.datetime.now()\n", - "\n", - " customer_record = customers_response[\"Record\"]\n", - " customer_df = pd.DataFrame(customer_record).set_index(\"FeatureName\")\n", - "\n", - " blended_df = pd.concat([claims_df, customer_df]).loc[col_order].drop(\"fraud\")\n", - " data_input = \",\".join(blended_df[\"ValueAsString\"])\n", - "\n", - " results = predictor.predict(data_input, initial_args={\"ContentType\": \"text/csv\"})\n", - " prediction = json.loads(results)\n", - " # print (f'Probablitity the claim from policy {int(sample_policy_id)} is fraudulent:', prediction)\n", - "\n", - " arr = t1 - t0\n", - " minutes, seconds = divmod(arr.total_seconds(), 60)\n", - "\n", - " timer.append(seconds)\n", - " # print (prediction, \" done in {} \".format(seconds))\n", - "\n", - " return sample_policy_id, prediction\n", - "\n", - "\n", - "for i in range(MAXRECS):\n", - " sample_policy_id, prediction = barrage_of_inference()\n", - " print(f\"Probablitity the claim from policy {int(sample_policy_id)} is fraudulent:\", prediction)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "scrolled": true - }, - "outputs": [], - "source": [ - "timer" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Note: the above \"timer\" records the first call and then subsequent calls to the online Feature Store" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import statistics\n", - "import numpy as np\n", - "\n", - "statistics.mean(timer)\n", - "\n", - "\n", - "arr = np.array(timer)\n", - "print(\n", - " \"p95: {}, p99: {}, mean: {} for {} distinct feature store gets\".format(\n", - " np.percentile(arr, 95), np.percentile(arr, 99), np.mean(arr), MAXRECS\n", - " )\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Pull customer data from Customers feature group\n", - "When a customer submits an insurance claim online for instant approval, the insurance company will need to pull customer-specific data from the online feature store to add to the claim data as input for a model prediction." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "customers_response = featurestore_runtime.get_record(\n", - " FeatureGroupName=customers_fg_name, RecordIdentifierValueAsString=str(sample_policy_id)\n", - ")\n", - "\n", - "customer_record = customers_response[\"Record\"]\n", - "customer_df = pd.DataFrame(customer_record).set_index(\"FeatureName\")\n", - "\n", - "\n", - "claims_response = featurestore_runtime.get_record(\n", - " FeatureGroupName=claims_fg_name, RecordIdentifierValueAsString=str(sample_policy_id)\n", - ")\n", - "\n", - "claims_record = claims_response[\"Record\"]\n", - "claims_df = pd.DataFrame(claims_record).set_index(\"FeatureName\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Format the datapoint\n", - "The datapoint must match the exact input format as the model was trained--with all features in the correct order. In this example, the `col_order` variable was saved when you created the train and test datasets earlier in the guide." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "blended_df = pd.concat([claims_df, customer_df]).loc[col_order].drop(\"fraud\")\n", - "data_input = \",\".join(blended_df[\"ValueAsString\"])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Make prediction" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "results = predictor.predict(data_input, initial_args={\"ContentType\": \"text/csv\"})\n", - "prediction = json.loads(results)\n", - "print(f\"Probablitity the claim from policy {int(sample_policy_id)} is fraudulent:\", prediction)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "----\n", - "\n", - "\n", - "\n", - "### Next Notebook: [Create and Run an End-to-End Pipeline to Deploy the Model](./5-pipeline-e2e.ipynb)\n", - "Now that as a Data Scientist, you've manually experimented with each step in our machine learning workflow, you can take certain steps to allow for faster model creation and deployment without sacrificing transparency and tracking via model lineage. In the next section you will create a pipeline which trains a new model on SageMaker, persists the model in SageMaker and then adds the model to the registry and deploys it as a SageMaker hosted endpoint." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "instance_type": "ml.t3.medium", - "kernelspec": { - "display_name": "Python 3 (Data Science)", - "language": "python", - "name": "python3__SAGEMAKER_INTERNAL__arn:aws:sagemaker:us-east-1:081325390199:image/datascience-1.0" - }, - "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.10" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/end_to_end/fraud_detection/README.md b/end_to_end/fraud_detection/README.md index bd76cf5aa0..73b2804bb6 100644 --- a/end_to_end/fraud_detection/README.md +++ b/end_to_end/fraud_detection/README.md @@ -1,3 +1,149 @@ -# Architect and Build an End to End Workflow for Auto Claim Fraud Detection with SageMaker Services +# Architect and Build an End-to-End Workflow for Auto Claim Fraud Detection with SageMaker Services + +The purpose of this end-to-end example is to demonstrate how to prepare, train, and deploy a model that detects auto insurance claims. + +## Contents +1. [Business Problem](#business-problem) +2. [Technical Solution](#nb0-solution) +3. [Solution Components](#nb0-components) +4. [Solution Architecture](#nb0-architecture) +5. [Code Resources](#nb0-code) +6. [Exploratory Data Science and Operational ML workflows](#nb0-workflows) +7. [The ML Life Cycle: Detailed View](#nb0-ml-lifecycle) + + + + +## Business Problem + + "Auto insurance fraud ranges from misrepresenting facts on insurance applications and inflating insurance claims to staging accidents and submitting claim forms for injuries or damage that never occurred, to false reports of stolen vehicles. +Fraud accounted for between 15 percent and 17 percent of total claims payments for auto insurance bodily injury in 2012, according to an Insurance Research Council (IRC) study. The study estimated that between \$5.6 billion and \$7.7 billion was fraudulently added to paid claims for auto insurance bodily injury payments in 2012, compared with a range of \$4.3 billion to \$5.8 billion in 2002. " [source: Insurance Information Institute](https://www.iii.org/article/background-on-insurance-fraud) + +In this example, we will use an *auto insurance domain* to detect claims that are possibly fraudulent. +more precisely we address the use-case: "what is the likelihood that a given auto claim is fraudulent?" , and explore the technical solution. + +As you review the notebooks and the [architectures](#nb0-architecture) presented at each stage of the ML life cycle, you will see how you can leverage SageMaker services and features to enhance your effectiveness as a data scientist, as a machine learning engineer, and as an ML Ops Engineer. + +We then perform data exploration on the synthetically generated datasets for Customers and Claims. + +Then, we provide an overview of the technical solution by examining the [Solution Components](#nb0-components) and the [Solution Architecture](#nb0-architecture). +We are motivated by the need to accomplish new tasks in ML by examining a [detailed view of the Machine Learning Lifecycle](#nb0-ml-lifecycle), recognizing the [separation of exploratory data science and operationalizing an ML worklfow](#nb0-workflows). + +### Car Insurance Claims: Data Sets and Problem Domain + +The inputs for building our model and workflow are two tables of insurance data: a claims table and a customers table. This data was synthetically generated is provided to you in its raw state for pre-processing with SageMaker Data Wrangler. However, completing the SageMaker Data Wrangler step is not required to continue with the rest of this notebook. If you wish, you may use the `claims_preprocessed.csv` and `customers_preprocessed.csv` in the `data` directory as they are exact copies of what SageMaker Data Wrangler would output. + + + + + +## Technical Solution + +In this introduction, you will look at the technical architecture and solution components to build a solution for predicting fraudulent insurance claims and deploy it using SageMaker for real-time predictions. While a deployed model is the end-product of this notebook series, the purpose of this guide is to walk you through all the detailed stages of the [machine learning (ML) lifecycle](#ml-lifecycle) and show you what SageMaker services and features are there to support your activities in each stage. + + + + + +## Solution Components + +The following [SageMaker](https://sagemaker.readthedocs.io/en/stable/v2.html) Services are used in this solution: + + 1. [SageMaker DataWrangler](https://aws.amazon.com/sagemaker/data-wrangler/) - [docs](https://docs.aws.amazon.com/sagemaker/latest/dg/data-wrangler.html) + 1. [SageMaker Processing](https://aws.amazon.com/blogs/aws/amazon-sagemaker-processing-fully-managed-data-processing-and-model-evaluation/) - [docs](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_processing.html) + 1. [SageMaker Feature Store](https://aws.amazon.com/sagemaker/feature-store/)- [docs](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_featurestore.html) + 1. [SageMaker Clarify](https://aws.amazon.com/sagemaker/clarify/)- [docs](https://docs.aws.amazon.com/sagemaker/latest/dg/clarify-processing-job-run.html) + 1. [SageMaker Training with XGBoost Algorithm and Hyperparameter Optimization](https://sagemaker.readthedocs.io/en/stable/frameworks/xgboost/using_xgboost.html)- [docs](https://sagemaker.readthedocs.io/en/stable/frameworks/xgboost/index.html) + 1. [SageMaker Model Registry](https://docs.aws.amazon.com/sagemaker/latest/dg/model-registry.html)- [docs](https://docs.aws.amazon.com/sagemaker/latest/dg/model-registry-deploy.html#model-registry-deploy-api) + 1. [SageMaker Hosted Endpoints]()- [predictors - docs](https://sagemaker.readthedocs.io/en/stable/api/inference/predictors.html) + 1. [SageMaker Pipelines]()- [docs](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/index.html) + +![Solution Components](images/solution-components-e2e.png) + + + + + +## Solution Architecture + +The overall architecture is shown in the diagram below. +1[end to end](./images/ML-Lifecycle-v5.png) + +We will go through 5 stages of ML and explore the solution architecture of SageMaker. Each of the sequancial notebooks will dive deep into corresponding ML stage. + +### [Notebook 1](./0-AutoClaimFraudDetection.ipynb): Data Exploration + +### [Notebook 2](./1-data-prep-e2e.ipynb): Data Preparation, Ingest, Transform, Preprocess, and Store in SageMaker Feature Store + +![Solution Architecture](images/e2e-1-pipeline-v3b.png) + +### [Notebook 3](./2-lineage-train-assess-bias-tune-registry-e2e.ipynb) and [Notebook 4](./3-mitigate-bias-train-model2-registry-e2e.ipynb) : Train, Tune, Check Pre- and Post-Training Bias, Mitigate Bias, Re-train, Deposit, and Deploy the Best Model to SageMaker Model Registry + +![Solution Architecture](images/e2e-2-pipeline-v3b.png) + +This is the architecture for model deployment. + +![Solution Architecture](images/e2e-3-pipeline-v3b.png) + +### [Pipeline Notebook](./pipeline-e2e.ipynb): End-to-End Pipeline - MLOps Pipeline to run an end-to-end automated workflow with all the design decisions made during manual/exploratory steps in previous notebooks. + +![Pipelines Solution Architecture](images/e2e-5-pipeline-v3b.png) + + + + + +## Code Resources + +### Stages + +Our solution is split into the following stages of the [ML Lifecycle](#nb0-ml-lifecycle), and each stage has its own notebook: + +* [Notebook 1: Data Exploration](./0-AutoClaimFraudDetection.ipynb): We first explore the data. +* [Notebook 2: Data Prep and Store](./1-data-prep-e2e.ipynb): We prepare a dataset for machine learning using SageMaker Data Wrangler, create and deposit the datasets in a SageMaker Feature Store. +* [Notebook 3: Train, Assess Bias, Establish Lineage, Register Model](./2-lineage-train-assess-bias-tune-registry-e2e.ipynb): We detect possible pre-training and post-training bias, train and tune a XGBoost model using Amazon SageMaker, record Lineage in the Model Registry so we can later deploy it. +* [Notebook 4: Mitigate Bias, Re-train, Register, Deploy Unbiased Model](./3-mitigate-bias-train-model2-registry-e2e.ipynb): We mitigate bias, retrain a less biased model, store it in a Model Registry. We then deploy the model to a Amazon SageMaker Hosted Endpoint and run real-time inference via the SageMaker Online Feature Store. +* [Pipeline Notebook: Create and Run an MLOps Pipeline](./pipeline-e2e.ipynb): We then create a SageMaker Pipeline that ties together everything we have done so far, from outputs from Data Wrangler, Feature Store, Clarify, Model Registry and finally deployment to a SageMaker Hosted Endpoint. [--> Architecture](#nb0-pipeline) + + + + + +## The Exploratory Data Science and ML Ops Workflows + +### Exploratory Data Science and Scalable MLOps + +Note that there are typically two workflows: a manual exploratory workflow and an automated workflow. + +The *exploratory, manual data science workflow* is where experiments are conducted and various techniques and strategies are tested. + +After you have established your data prep, transformations, featurizations and training algorithms, testing of various hyperparameters for model tuning, you can start with the automated workflow where you *rely on MLOps or the ML Engineering part of your team* to streamline the process, make it more repeatable and scalable by putting it into an automated pipeline. + +![the 2 flows](images/2-flows.png) + + + + + + +## The ML Life Cycle: Detailed View + +![title](images/ML-Lifecycle-v5.png) + +The Red Boxes and Icons represent comparatively newer concepts and tasks that are now deemed important to include and execute, in a production-oriented (versus research-oriented) and scalable ML lifecycle. + + These newer lifecycle tasks and their corresponding, supporting AWS Services and features include: + +1. *Data Wrangling*: AWS Data Wrangler for cleaning, normalizing, transforming and encoding data, as well as joining datasets. The outputs of Data Wrangler are code generated to work with SageMaker Processing, SageMaker Pipelines, SageMaker Feature Store or just a plain old python script with pandas. + 1. Feature Engineering has always been done, but now with AWS Data Wrangler we can use a GUI based tool to do so and generate code for the next phases of the lifecycle. +2. *Detect Bias*: Using AWS Clarify, in Data Prep or in Training we can detect pre-training and post-training bias, and eventually at Inference time provide Interpretability / Explainability of the inferences (e.g., which factors were most influential in coming up with the prediction) +3. *Feature Store (Offline)*: Once we have done all of our feature engineering, the encoding and transformations, we can then standardize features, offline in AWS Feature Store, to be used as input features for training models. +4. *Artifact Lineage*: Using AWS SageMaker’s Artifact Lineage features we can associate all the artifacts (data, models, parameters, etc.) with a trained model to produce metadata that can be stored in a Model Registry. +5. *Model Registry*: AWS Model Registry stores the metadata around all artifacts that you have chosen to include in the process of creating your models, along with the model(s) themselves in a Model Registry. Later a human approval can be used to note that the model is good to be put into production. This feeds into the next phase of deploy and monitor. +6. *Inference and the Online Feature Store*: For real-time inference, we can leverage an online AWS Feature Store we have created to get us single digit millisecond low latency and high throughput for serving our model with new incoming data. +7. *Pipelines*: Once we have experimented and decided on the various options in the lifecycle (which transforms to apply to our features, imbalance or bias in the data, which algorithms to choose to train with, which hyper-parameters are giving us the best performance metrics, etc.) we can now automate the various tasks across the lifecycle using SageMaker Pipelines. + 1. In this notebook, we will show a pipeline that starts with the outputs of AWS Data Wrangler and ends with storing trained models in the Model Registry. + 2. Typically, you could have a pipeline for data prep, one for training until model registry (which we are showing in the code associated with this blog), one for inference, and one for re-training using SageMaker Model Monitor to detect model drift and data drift and trigger a re-training using an AWS Lambda function. + + -1[end to end](./images/ML-Lifecycle-v5.png) \ No newline at end of file diff --git a/end_to_end/fraud_detection/create_dataset.py b/end_to_end/fraud_detection/create_dataset.py index a7732a7ea4..d338b7a860 100644 --- a/end_to_end/fraud_detection/create_dataset.py +++ b/end_to_end/fraud_detection/create_dataset.py @@ -1,9 +1,15 @@ +import sys +import subprocess +subprocess.check_call([sys.executable, "-m", "pip", "install", "sagemaker"]) + import argparse import pathlib import time import boto3 import pandas as pd +import sagemaker +from sagemaker.feature_store.feature_group import FeatureGroup # Parse argument variables passed via the CreateDataset processing step parser = argparse.ArgumentParser() @@ -23,8 +29,25 @@ account_id = boto3.client("sts").get_caller_identity()["Account"] now = pd.to_datetime("now") -claims_feature_group_s3_prefix = f'{args.bucket_prefix}/{account_id}/sagemaker/{region}/offline-store/{args.claims_table_name}/data/year={now.year}/month={now.strftime("%m")}/day={now.strftime("%d")}' -customers_feature_group_s3_prefix = f'{args.bucket_prefix}/{account_id}/sagemaker/{region}/offline-store/{args.customers_table_name}/data/year={now.year}/month={now.strftime("%m")}/day={now.strftime("%d")}' +feature_store_session = sagemaker.Session() +claims_feature_group = FeatureGroup(name=args.claims_feature_group_name, sagemaker_session=feature_store_session) +customers_feature_group = FeatureGroup( + name=args.customers_feature_group_name, sagemaker_session=feature_store_session +) + +claims_table_name = ( + claims_feature_group.describe()["OfflineStoreConfig"]["DataCatalogConfig"]["TableName"] +) +customers_table_name = ( + customers_feature_group.describe()["OfflineStoreConfig"]["DataCatalogConfig"]["TableName"] +) +athena_database_name = customers_feature_group.describe()["OfflineStoreConfig"]["DataCatalogConfig"]["Database"] + +print(f'claims_table_name: {claims_table_name}') +print(f'customers_table_name: {customers_table_name}') + +claims_feature_group_s3_prefix = f'{args.bucket_prefix}/{account_id}/sagemaker/{region}/offline-store/{claims_table_name}/data/year={now.year}/month={now.strftime("%m")}/day={now.strftime("%d")}' +customers_feature_group_s3_prefix = f'{args.bucket_prefix}/{account_id}/sagemaker/{region}/offline-store/{customers_table_name}/data/year={now.year}/month={now.strftime("%m")}/day={now.strftime("%d")}' print(f'claims_feature_group_s3_prefix: {claims_feature_group_s3_prefix}') print(f'customers_feature_group_s3_prefix: {customers_feature_group_s3_prefix}') @@ -110,7 +133,7 @@ query_string = f""" SELECT DISTINCT {training_columns_string} -FROM "{args.claims_table_name}" claims LEFT JOIN "{args.customers_table_name}" customers +FROM "{claims_table_name}" claims LEFT JOIN "{customers_table_name}" customers ON claims.policy_id = customers.policy_id """ @@ -118,7 +141,7 @@ query_execution = athena.start_query_execution( QueryString=query_string, - QueryExecutionContext={"Database": args.athena_database_name}, + QueryExecutionContext={"Database": athena_database_name}, ResultConfiguration={"OutputLocation": f"s3://{args.bucket_name}/query_results/"}, ) diff --git a/end_to_end/fraud_detection/index.rst b/end_to_end/fraud_detection/index.rst index c4f8d93740..f84b4ac680 100644 --- a/end_to_end/fraud_detection/index.rst +++ b/end_to_end/fraud_detection/index.rst @@ -6,7 +6,7 @@ Build end-to-end Examples with SageMaker Services and Features. Fraud Detection System for Auto Claims --------------------------------------------------------------------- Architect and build an end to end auto claims fraud detection example. -This section consists of 4 notebooks and the next one consists of 1 notebook that ties all the steps together in an automated Pipeline +This section consists of 3 notebooks and the next one consists of 1 notebook that ties all the steps together in an automated Pipeline Fraud Detection System for Auto Claims using Exploratory Data Science @@ -19,7 +19,6 @@ Fraud Detection System for Auto Claims using Exploratory Data Science 1-data-prep-e2e 2-lineage-train-assess-bias-tune-registry-e2e 3-mitigate-bias-train-model2-registry-e2e - 4-deploy-run-inference-e2e Fraud Detection System for Auto Claims using an automated Pipeline @@ -28,4 +27,4 @@ Fraud Detection System for Auto Claims using an automated Pipeline .. toctree:: :maxdepth: 1 - 5-pipeline-e2e + pipeline-e2e diff --git a/end_to_end/fraud_detection/5-pipeline-e2e.ipynb b/end_to_end/fraud_detection/pipeline-e2e.ipynb similarity index 94% rename from end_to_end/fraud_detection/5-pipeline-e2e.ipynb rename to end_to_end/fraud_detection/pipeline-e2e.ipynb index 82fe6d70ae..e7893b81b6 100644 --- a/end_to_end/fraud_detection/5-pipeline-e2e.ipynb +++ b/end_to_end/fraud_detection/pipeline-e2e.ipynb @@ -4,32 +4,37 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Part 5 : Create an End to End Pipeline" + "# Fraud Detection for Automobile Claims: Create an End to End Pipeline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "## Background\n", "\n", - "## [Overview](./0-AutoClaimFraudDetection.ipynb)\n", - "* [Notebook 0 : Overview, Architecture and Data Exploration](./0-AutoClaimFraudDetection.ipynb)\n", - "* [Notebook 1: Data Prep, Process, Store Features](./1-data-prep-e2e.ipynb)\n", - "* [Notebook 2: Train, Check Bias, Tune, Record Lineage, and Register a Model](./2-lineage-train-assess-bias-tune-registry-e2e.ipynb)\n", - "* [Notebook 3: Mitigate Bias, Train New Model, Store in Registry](./3-mitigate-bias-train-model2-registry-e2e.ipynb)\n", - "* [Notebook 4: Deploy Model, Run Predictions](./4-deploy-run-inference-e2e.ipynb)\n", - "* **[Notebook 5 : Create and Run an End-to-End Pipeline to Deploy the Model](./5-pipeline-e2e.ipynb)**\n", - " * **[Architecture](#arch-5)**\n", - " * **[Create an Automated Pipeline](#pipelines)**\n", - " * **[Clean up](#cleanup)**" + "In this notebook, we will build a SageMaker Pipeline that automates the entire end-to-end process of preparing, training, and deploying a model that detects automobile claim fraud. For a more detailed explanation of each step of the pipeline, you can look the series of notebooks (listed below) that implements this same process using a manual approach. Please see the [README.md](README.md) for more information about this use case implemented by this series of notebooks. \n", + "\n", + "\n", + "1. [Fraud Detection for Automobile Claims: Data Exploration](./0-AutoClaimFraudDetection.ipynb)\n", + "1. [Fraud Detection for Automobile Claims: Data Preparation, Process, and Store Features](./1-data-prep-e2e.ipynb)\n", + "1. [Fraud Detection for Automobile Claims: Train, Check Bias, Tune, Record Lineage, and Register a Model](./2-lineage-train-assess-bias-tune-registry-e2e.ipynb)\n", + "1. [Fraud Detection for Automobile Claims: Mitigate Bias, Train, Register, and Deploy Unbiased Model](./3-mitigate-bias-train-model2-registry-e2e.ipynb)\n", + "\n", + "\n", + "## Contents\n", + "1. [Prerequisites](#Prerequisites)\n", + "1. [Architecture: Create a SageMaker Pipeline to Automate All the Steps from Data Prep to Model Deployment](#Architecture:-Create-a-SageMaker-Pipeline-to-Automate-All-the-Steps-from-Data-Prep-to-Model-Deployment)\n", + "1. [Creating an Automated Pipeline using SageMaker Pipeline](#Creating-an-Automated-Pipeline-using-SageMaker-Pipeline)\n", + "1. [Clean-Up](#Clean-Up)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "In this notebook, we will build a SageMaker Pipeline that automates the entire end to end process. Recall that we initially did all the steps in a manual way, and experimented as a data scientist: testing each segment, hands on, and determine for example, which transformations should be applied to the features, which algorithm should be selected, which hyperparamneters, etc. Now we will automate these steps, and perhaps pass on the responsibility to an ML Engineer or MLOps role." + "## Prerequisites\n", + "----" ] }, { @@ -49,31 +54,6 @@ "!python -m pip install -q awswrangler==2.2.0 imbalanced-learn==0.7.0 sagemaker==2.41.0 boto3==1.17.70" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Load stored variables\n", - "Run the cell below to load any prevously created variables. You should see a print-out of the existing variables. If you don't see anything you may need to create them again or it may be your first time running this notebook." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%store -r\n", - "%store" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Important: You must have run the previous sequential notebooks to retrieve variables using the StoreMagic command.**" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -94,6 +74,7 @@ "import numpy as np\n", "import pandas as pd\n", "import awswrangler as wr\n", + "import string\n", "\n", "import demo_helpers\n", "\n", @@ -136,7 +117,13 @@ ")\n", "sagemaker_role = sagemaker.get_execution_role()\n", "\n", - "account_id = boto3.client(\"sts\").get_caller_identity()[\"Account\"]" + "account_id = boto3.client(\"sts\").get_caller_identity()[\"Account\"]\n", + "\n", + "bucket = sagemaker_session.default_bucket()\n", + "prefix = \"fraud-detect-demo\"\n", + "\n", + "claims_fg_name = f\"{prefix}-claims\"\n", + "customers_fg_name = f\"{prefix}-customers\"" ] }, { @@ -173,10 +160,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - " \n", - "\n", - "### Architecture : Create a SageMaker Pipeline to Automate All the Steps from Data Prep to Model Deployment\n", - "[overview](#overview-5)\n", + "## Architecture: Create a SageMaker Pipeline to Automate All the Steps from Data Prep to Model Deployment\n", + "----\n", "\n", "![End to end pipeline architecture](./images/e2e-5-pipeline-v3b.png)" ] @@ -185,21 +170,17 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "## Creating an Automated Pipeline using SageMaker Pipeline\n", "\n", - "## SageMaker Pipeline\n", - "\n", - "- [Step 1: Claims Data Wrangler Preprocessing Step](#claims-data-wrangler)\n", - "- [Step 2: Customers Data Wrangler Preprocessing step](#data-wrangler)\n", - "- [Step 3: Dataset and train test split](#dataset-train-test)\n", - "- [Step 4: Train XGboost Model](#pipe-train-xgb)\n", - "- [Step 5: Model Pre-deployment](#pipe-pre-deploy)\n", - "- [Step 6: Use Clarify to Detect Bias](#pipe-detect-bias)\n", - "- [Step 7: Register Model](#pipe-Register-Model)\n", - "- [Step 8: Combine the Pipeline Steps and Run](#define-pipeline)\n", - "\n", - "\n", - "[back to overview](#overview-5)\n", + "- [Step 1: Claims Data Wrangler Preprocessing Step](#Step-1:-Claims-Data-Wrangler-Preprocessing-Step)\n", + "- [Step 2: Customers Data Wrangler Preprocessing Step](#Step-2:-Customers-Data-Wrangler-Preprocessing-Step)\n", + "- [Step 3: Create Dataset and Train/Test Split](#Step-3:-Create-Dataset-and-Train/Test-Split)\n", + "- [Step 4: Train XGBoost Model](#Step-4:-Train-XGBoost-Model)\n", + "- [Step 5: Model Pre-Deployment Step](#Step-5:-Model-Pre-Deployment-Step)\n", + "- [Step 6: Run Bias Metrics with Clarify](#Step-6:-Run-Bias-Metrics-with-Clarify)\n", + "- [Step 7: Register Model](#Step-7:-Register-Model)\n", + "- [Step 8: Deploy Model](#Step-8:-Deploy-Model)\n", + "- [Step 9: Combine and Run the Pipeline Steps](#Step-9:-Combine-and-Run-the-Pipeline-Steps)\n", "\n" ] }, @@ -240,10 +221,68 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "### Step 1: Claims Data Wrangler Preprocessing Step" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Upload raw data to S3\n", + "Before you can preprocess the raw data with Data Wrangler, it must exist in S3." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "s3_client.upload_file(\n", + " Filename=\"data/claims.csv\", Bucket=bucket, Key=f\"{prefix}/data/raw/claims.csv\"\n", + ")\n", + "s3_client.upload_file(\n", + " Filename=\"data/customers.csv\", Bucket=bucket, Key=f\"{prefix}/data/raw/customers.csv\"\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Update attributes within the `.flow` file \n", + "Data Wrangler will generate a .flow file. It contains a reference to an S3 bucket used during the Wrangling. This may be different from the one you have as a default in this notebook eg if the Wrangling was done by someone else, you will probably not have access to their bucket and you now need to point to your own S3 bucket so you can actually load the .flow file into Data Wrangler or access the data.\n", "\n", - "### Step 1: Claims Data Wranger Preprocessing Step\n", - "[pipeline](#pipelines)" + "After running the cell below you can open the `claims.flow` and `customers.flow` files and export the data to S3 or you can continue the guide using the provided `data/claims_preprocessed.csv` and `data/customers_preprocessed.csv` files." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "claims_flow_template_file = \"claims_flow_template\"\n", + "\n", + "with open(claims_flow_template_file, \"r\") as f:\n", + " variables = {\"bucket\": bucket, \"prefix\": prefix}\n", + " template = string.Template(f.read())\n", + " claims_flow = template.substitute(variables)\n", + " claims_flow = json.loads(claims_flow)\n", + "\n", + "with open(\"claims.flow\", \"w\") as f:\n", + " json.dump(claims_flow, f)\n", + "\n", + "customers_flow_template_file = \"customers_flow_template\"\n", + "\n", + "with open(customers_flow_template_file, \"r\") as f:\n", + " variables = {\"bucket\": bucket, \"prefix\": prefix}\n", + " template = string.Template(f.read())\n", + " customers_flow = template.substitute(variables)\n", + " customers_flow = json.loads(customers_flow)\n", + "\n", + "with open(\"customers.flow\", \"w\") as f:\n", + " json.dump(customers_flow, f)" ] }, { @@ -352,7 +391,7 @@ "\n", "# Pulls the latest data-wrangler container tag, i.e. \"1.x\"\n", "# The latest tested container version was \"1.11.0\"\n", - "image_uri = image_uris.retrieve(framework='data-wrangler',region=region)\n", + "image_uri = image_uris.retrieve(framework=\"data-wrangler\", region=region)\n", "\n", "print(\"image_uri: {}\".format(image_uri))\n", "\n", @@ -366,12 +405,8 @@ "\n", "output_content_type = \"CSV\"\n", "\n", - "# Output configuration used as processing job container arguments \n", - "claims_output_config = {\n", - " claims_output_name: {\n", - " \"content_type\": output_content_type\n", - " }\n", - "}\n", + "# Output configuration used as processing job container arguments\n", + "claims_output_config = {claims_output_name: {\"content_type\": output_content_type}}\n", "\n", "claims_flow_step = ProcessingStep(\n", " name=\"ClaimsDataWranglerProcessingStep\",\n", @@ -386,11 +421,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "\n", - "### Step 2: Customers Data Wrangler preprocessing step\n", - "\n", - "[pipeline](#pipelines)" + "### Step 2: Customers Data Wrangler Preprocessing Step" ] }, { @@ -461,12 +492,8 @@ "\n", "output_content_type = \"CSV\"\n", "\n", - "# Output configuration used as processing job container arguments \n", - "customers_output_config = {\n", - " customers_output_name: {\n", - " \"content_type\": output_content_type\n", - " }\n", - "}\n", + "# Output configuration used as processing job container arguments\n", + "customers_output_config = {customers_output_name: {\"content_type\": output_content_type}}\n", "\n", "customers_flow_step = ProcessingStep(\n", " name=\"CustomersDataWranglerProcessingStep\",\n", @@ -481,11 +508,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "\n", - "### Step 3: Create Dataset and Train/Test Split\n", - "\n", - "[pipeline](#pipelines)" + "### Step 3: Create Dataset and Train/Test Split" ] }, { @@ -527,12 +550,6 @@ " bucket,\n", " \"--bucket-prefix\",\n", " prefix,\n", - " \"--athena-database-name\",\n", - " database_name,\n", - " \"--claims-table-name\",\n", - " claims_table,\n", - " \"--customers-table-name\",\n", - " customers_table,\n", " \"--region\",\n", " region,\n", " ],\n", @@ -545,12 +562,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "\n", "### Step 4: Train XGBoost Model\n", - "In this step we use the ParameterString `train_instance_param` defined at the beginning of the pipeline.\n", - "\n", - "[pipeline](#pipelines)" + "In this step we use the ParameterString `train_instance_param` defined at the beginning of the pipeline.\n" ] }, { @@ -594,11 +607,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "\n", - "### Step 5: Model Pre-Deployment Step\n", - "\n", - "[pipeline](#pipelines)" + "### Step 5: Model Pre-Deployment Step\n" ] }, { @@ -624,10 +633,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "\n", - "### Step 6: Run Bias Metrics with Clarify\n", - "[pipeline](#pipelines)" + "### Step 6: Run Bias Metrics with Clarify\n" ] }, { @@ -726,12 +732,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", "### Step 7: Register Model\n", - "In this step you will use the ParameterString `model_approval_status` defined at the outset of the pipeline code.\n", - "\n", - "\n", - "[pipeline](#pipelines)" + "In this step you will use the ParameterString `model_approval_status` defined at the outset of the pipeline code.\n" ] }, { @@ -740,6 +742,8 @@ "metadata": {}, "outputs": [], "source": [ + "mpg_name = prefix\n", + "\n", "model_metrics = demo_helpers.ModelMetrics(\n", " bias=sagemaker.model_metrics.MetricsSource(\n", " s3_uri=clarify_step.properties.ProcessingOutputConfig.Outputs[\n", @@ -767,11 +771,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "### Step 8: Deploy Model\n", - "\n", - "\n", - "[pipeline](#pipelines)" + "### Step 8: Deploy Model" ] }, { @@ -814,10 +814,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "\n", - "### Combine the Pipeline Steps and Run\n", - "[pipeline](#overview-5)\n", + "### Step 9: Combine and Run the Pipeline Steps\n", "\n", "Though easier to reason with, the parameters and steps don't need to be in order. The pipeline DAG will parse it out properly." ] @@ -880,7 +877,7 @@ }, "outputs": [], "source": [ - "json.loads(pipeline.describe()['PipelineDefinition'])" + "json.loads(pipeline.describe()[\"PipelineDefinition\"])" ] }, { @@ -928,7 +925,7 @@ "metadata": {}, "outputs": [], "source": [ - "start_response.wait()\n", + "start_response.wait(delay=60, max_attempts=500)\n", "start_response.describe()" ] }, @@ -964,10 +961,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "## Clean up\n", - "\n", - "[overview](#overview-5)\n", + "## Clean Up\n", "----\n", "After running the demo, you should remove the resources which were created. You can also delete all the objects in the project's S3 directory by passing the keyword argument `delete_s3_objects=True`." ] @@ -987,25 +981,22 @@ "metadata": {}, "outputs": [], "source": [ - "\"\"\"\n", "delete_project_resources(\n", " sagemaker_boto_client=sagemaker_boto_client,\n", - " endpoint_name=endpoint_name, \n", - " pipeline_name=pipeline_name, \n", - " mpg_name=mpg_name, \n", + " pipeline_name=pipeline_name,\n", + " mpg_name=mpg_name,\n", " prefix=prefix,\n", " delete_s3_objects=False,\n", - " bucket_name=bucket)\n", - "\"\"\"" + " bucket_name=bucket,\n", + ")" ] } ], "metadata": { - "instance_type": "ml.t3.medium", "kernelspec": { - "display_name": "Python 3 (Data Science)", + "display_name": "conda_python3", "language": "python", - "name": "python3__SAGEMAKER_INTERNAL__arn:aws:sagemaker:us-east-1:081325390199:image/datascience-1.0" + "name": "conda_python3" }, "language_info": { "codemirror_mode": { @@ -1017,7 +1008,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.10" + "version": "3.6.13" } }, "nbformat": 4,