diff --git a/Automotive/Improvement of components for autonomous motor vehicles/notebook.ipynb b/Automotive/Improvement of components for autonomous motor vehicles/notebook.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..922c709389dca2028c2e10d514c694b6cd4b9e20 --- /dev/null +++ b/Automotive/Improvement of components for autonomous motor vehicles/notebook.ipynb @@ -0,0 +1,2023 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1. Business Understanding¶\n", + "This case study is intended to assist technology companies in developing and improving components for autonomous vehicles.\n", + "In doing so, this case study poses the question:\n", + "In which areas are the weaknesses of the tested systems and how can these be classified?\n", + "The question will be answered by classifying the reasons for the human test driver's intervention in the system. In doing so, the reasons are to be classified into different categories:\n", + "- Software problems\n", + "- hardware problems\n", + "- Software and hardware problems (problems that occur in combination)\n", + "- Problems caused by objects of traffic control (e.g. malfunctions of traffic light systems)\n", + "- problems caused by other road users\n", + "- external influences (including e.g. blockages, hidden elements, weather and road conditions)\n", + "- other problems" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2. Data and Data Understanding \n", + "The underlying dataset was obtained from Kaggle and shows necessary interventions by a driver in autonomous driving vehicle technology.\n", + "It was recorded from December 1, 2018 to November 30, 2019 and is licensed under U.S. Government Works.\n", + "The data processing is done with the help of a Jupyter notebook, which is included in the most popular data science platform \"Anaconda\".\n", + "The data set is in 8885 x 9 format.\n", + "The following data was recorded:\n", + "- Manufacturer\n", + "- Approval number\n", + "- date\n", + "- Vehicle identification number\n", + "- Possibility of operation without driver\n", + "- Is there a driver on site?\n", + "- Autonomous driving interrupted by AV system, test driver, remote control, or passenger\n", + "- Location of incident: interstate, highway, expressway, rural road, street or parking lot\n", + "- Description of causes" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2.1. Import of Relevant Modules" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import pandas as pd\n", + "import statsmodels.api as sm\n", + "import matplotlib.pyplot as plt\n", + "import seaborn as sns\n", + "sns.set()" + ] + }, + { + "cell_type": "code", + "execution_count": 77, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'2.0.3'" + ] + }, + "execution_count": 77, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.__version__" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2.2 Read Data" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "metadata": {}, + "outputs": [], + "source": [ + "raw_data = pd.read_csv('https://storage.googleapis.com/ml-service-repository-datastorage/Improvement_of_components_for_autonomous_motor_vehicles_data.csv')" + ] + }, + { + "cell_type": "code", + "execution_count": 79, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>Manufacturer</th>\n", + " <th>Permit Number</th>\n", + " <th>DATE</th>\n", + " <th>VIN NUMBER</th>\n", + " <th>VEHICLE IS CAPABLE OF OPERATING WITHOUT A DRIVER\\n(Yes or No)</th>\n", + " <th>DRIVER PRESENT\\n(Yes or No)</th>\n", + " <th>DISENGAGEMENT INITIATED BY\\n(AV System, Test Driver, Remote Operator, or Passenger)</th>\n", + " <th>DISENGAGEMENT\\nLOCATION\\n(Interstate, Freeway, Highway, Rural Road, Street, or Parking Facility)</th>\n", + " <th>DESCRIPTION OF FACTS CAUSING DISENGAGEMENT</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>AImotive Inc.</td>\n", + " <td>AVT003</td>\n", + " <td>12.06.2018</td>\n", + " <td>JTDKN3DU5A1092792</td>\n", + " <td>No</td>\n", + " <td>Yes</td>\n", + " <td>Test Driver</td>\n", + " <td>Freeway</td>\n", + " <td>Lane change maneuver: risk of lane departure, ...</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>AImotive Inc.</td>\n", + " <td>AVT003</td>\n", + " <td>12.10.2018</td>\n", + " <td>JTDKN3DU5A1092792</td>\n", + " <td>No</td>\n", + " <td>Yes</td>\n", + " <td>Test Driver</td>\n", + " <td>Freeway</td>\n", + " <td>Lane change maneuver: risk of lane departure, ...</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>AImotive Inc.</td>\n", + " <td>AVT003</td>\n", + " <td>12.10.2018</td>\n", + " <td>JTDKN3DU5A1092792</td>\n", + " <td>No</td>\n", + " <td>Yes</td>\n", + " <td>Test Driver</td>\n", + " <td>Freeway</td>\n", + " <td>Lane change maneuver: risk of lane departure, ...</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>AImotive Inc.</td>\n", + " <td>AVT003</td>\n", + " <td>04.23.2019</td>\n", + " <td>JTDKN3DU5A1092792</td>\n", + " <td>No</td>\n", + " <td>Yes</td>\n", + " <td>Test Driver</td>\n", + " <td>Freeway</td>\n", + " <td>Lane change maneuver: risk of lane departure, ...</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>AImotive Inc.</td>\n", + " <td>AVT003</td>\n", + " <td>05.14.2019</td>\n", + " <td>JTDKN3DU5A1092792</td>\n", + " <td>No</td>\n", + " <td>Yes</td>\n", + " <td>Test Driver</td>\n", + " <td>Freeway</td>\n", + " <td>Lane change maneuver to the exit lane: risk of...</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " Manufacturer Permit Number DATE VIN NUMBER \\\n", + "0 AImotive Inc. AVT003 12.06.2018 JTDKN3DU5A1092792 \n", + "1 AImotive Inc. AVT003 12.10.2018 JTDKN3DU5A1092792 \n", + "2 AImotive Inc. AVT003 12.10.2018 JTDKN3DU5A1092792 \n", + "3 AImotive Inc. AVT003 04.23.2019 JTDKN3DU5A1092792 \n", + "4 AImotive Inc. AVT003 05.14.2019 JTDKN3DU5A1092792 \n", + "\n", + " VEHICLE IS CAPABLE OF OPERATING WITHOUT A DRIVER\\n(Yes or No) \\\n", + "0 No \n", + "1 No \n", + "2 No \n", + "3 No \n", + "4 No \n", + "\n", + " DRIVER PRESENT\\n(Yes or No) \\\n", + "0 Yes \n", + "1 Yes \n", + "2 Yes \n", + "3 Yes \n", + "4 Yes \n", + "\n", + " DISENGAGEMENT INITIATED BY\\n(AV System, Test Driver, Remote Operator, or Passenger) \\\n", + "0 Test Driver \n", + "1 Test Driver \n", + "2 Test Driver \n", + "3 Test Driver \n", + "4 Test Driver \n", + "\n", + " DISENGAGEMENT\\nLOCATION\\n(Interstate, Freeway, Highway, Rural Road, Street, or Parking Facility) \\\n", + "0 Freeway \n", + "1 Freeway \n", + "2 Freeway \n", + "3 Freeway \n", + "4 Freeway \n", + "\n", + " DESCRIPTION OF FACTS CAUSING DISENGAGEMENT \n", + "0 Lane change maneuver: risk of lane departure, ... \n", + "1 Lane change maneuver: risk of lane departure, ... \n", + "2 Lane change maneuver: risk of lane departure, ... \n", + "3 Lane change maneuver: risk of lane departure, ... \n", + "4 Lane change maneuver to the exit lane: risk of... " + ] + }, + "execution_count": 79, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "raw_data.to_csv('rawdata.csv', index=False)\n", + "raw_data.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2.3. Data Cleaning" + ] + }, + { + "cell_type": "code", + "execution_count": 80, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "<class 'pandas.core.frame.DataFrame'>\n", + "RangeIndex: 8885 entries, 0 to 8884\n", + "Data columns (total 9 columns):\n", + " # Column Non-Null Count Dtype \n", + "--- ------ -------------- ----- \n", + " 0 Manufacturer 8885 non-null object\n", + " 1 Permit Number 8885 non-null object\n", + " 2 DATE 8884 non-null object\n", + " 3 VIN NUMBER 8884 non-null object\n", + " 4 VEHICLE IS CAPABLE OF OPERATING WITHOUT A DRIVER\n", + "(Yes or No) 8884 non-null object\n", + " 5 DRIVER PRESENT\n", + "(Yes or No) 8884 non-null object\n", + " 6 DISENGAGEMENT INITIATED BY\n", + "(AV System, Test Driver, Remote Operator, or Passenger) 8884 non-null object\n", + " 7 DISENGAGEMENT\n", + "LOCATION\n", + "(Interstate, Freeway, Highway, Rural Road, Street, or Parking Facility) 8884 non-null object\n", + " 8 DESCRIPTION OF FACTS CAUSING DISENGAGEMENT 8884 non-null object\n", + "dtypes: object(9)\n", + "memory usage: 624.9+ KB\n" + ] + } + ], + "source": [ + "raw_data.info()" + ] + }, + { + "cell_type": "code", + "execution_count": 81, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>Manufacturer</th>\n", + " <th>Permit Number</th>\n", + " <th>DATE</th>\n", + " <th>VIN NUMBER</th>\n", + " <th>VEHICLE IS CAPABLE OF OPERATING WITHOUT A DRIVER\\n(Yes or No)</th>\n", + " <th>DRIVER PRESENT\\n(Yes or No)</th>\n", + " <th>DISENGAGEMENT INITIATED BY\\n(AV System, Test Driver, Remote Operator, or Passenger)</th>\n", + " <th>DISENGAGEMENT\\nLOCATION\\n(Interstate, Freeway, Highway, Rural Road, Street, or Parking Facility)</th>\n", + " <th>DESCRIPTION OF FACTS CAUSING DISENGAGEMENT</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>count</th>\n", + " <td>8885</td>\n", + " <td>8885</td>\n", + " <td>8884</td>\n", + " <td>8884</td>\n", + " <td>8884</td>\n", + " <td>8884</td>\n", + " <td>8884</td>\n", + " <td>8884</td>\n", + " <td>8884</td>\n", + " </tr>\n", + " <tr>\n", + " <th>unique</th>\n", + " <td>28</td>\n", + " <td>27</td>\n", + " <td>3711</td>\n", + " <td>289</td>\n", + " <td>5</td>\n", + " <td>4</td>\n", + " <td>4</td>\n", + " <td>11</td>\n", + " <td>469</td>\n", + " </tr>\n", + " <tr>\n", + " <th>top</th>\n", + " <td>Toyota Research Institute</td>\n", + " <td>AVT050</td>\n", + " <td>3/28/2019</td>\n", + " <td>JTHDU1EF3G5020098</td>\n", + " <td>No</td>\n", + " <td>Yes</td>\n", + " <td>Test Driver</td>\n", + " <td>Street</td>\n", + " <td>Safety Driver proactive disengagement.</td>\n", + " </tr>\n", + " <tr>\n", + " <th>freq</th>\n", + " <td>2947</td>\n", + " <td>2947</td>\n", + " <td>59</td>\n", + " <td>900</td>\n", + " <td>4369</td>\n", + " <td>4934</td>\n", + " <td>6037</td>\n", + " <td>4668</td>\n", + " <td>1780</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " Manufacturer Permit Number DATE VIN NUMBER \\\n", + "count 8885 8885 8884 8884 \n", + "unique 28 27 3711 289 \n", + "top Toyota Research Institute AVT050 3/28/2019 JTHDU1EF3G5020098 \n", + "freq 2947 2947 59 900 \n", + "\n", + " VEHICLE IS CAPABLE OF OPERATING WITHOUT A DRIVER\\n(Yes or No) \\\n", + "count 8884 \n", + "unique 5 \n", + "top No \n", + "freq 4369 \n", + "\n", + " DRIVER PRESENT\\n(Yes or No) \\\n", + "count 8884 \n", + "unique 4 \n", + "top Yes \n", + "freq 4934 \n", + "\n", + " DISENGAGEMENT INITIATED BY\\n(AV System, Test Driver, Remote Operator, or Passenger) \\\n", + "count 8884 \n", + "unique 4 \n", + "top Test Driver \n", + "freq 6037 \n", + "\n", + " DISENGAGEMENT\\nLOCATION\\n(Interstate, Freeway, Highway, Rural Road, Street, or Parking Facility) \\\n", + "count 8884 \n", + "unique 11 \n", + "top Street \n", + "freq 4668 \n", + "\n", + " DESCRIPTION OF FACTS CAUSING DISENGAGEMENT \n", + "count 8884 \n", + "unique 469 \n", + "top Safety Driver proactive disengagement. \n", + "freq 1780 " + ] + }, + "execution_count": 81, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "raw_data.describe(include=\"all\")" + ] + }, + { + "cell_type": "code", + "execution_count": 82, + "metadata": {}, + "outputs": [], + "source": [ + "raw_data.rename(columns = {'VEHICLE IS CAPABLE OF OPERATING WITHOUT A DRIVER\\n(Yes or No)':'OPERATING WITHOUT DRIVER', 'DRIVER PRESENT\\n(Yes or No)':'DRIVER PRESENT', 'DISENGAGEMENT INITIATED BY\\n(AV System, Test Driver, Remote Operator, or Passenger)':'DISENGAGEMENT INITIATED BY', 'DISENGAGEMENT\\nLOCATION\\n(Interstate, Freeway, Highway, Rural Road, Street, or Parking Facility)':'DISENGAGEMENT LOCATION', 'DESCRIPTION OF FACTS CAUSING DISENGAGEMENT':'FACTS CAUSING DISENGAGEMENT'}, inplace = True) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Missing Values" + ] + }, + { + "cell_type": "code", + "execution_count": 83, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Manufacturer 0\n", + "Permit Number 0\n", + "DATE 1\n", + "VIN NUMBER 1\n", + "OPERATING WITHOUT DRIVER 1\n", + "DRIVER PRESENT 1\n", + "DISENGAGEMENT INITIATED BY 1\n", + "DISENGAGEMENT LOCATION 1\n", + "FACTS CAUSING DISENGAGEMENT 1\n", + "dtype: int64" + ] + }, + "execution_count": 83, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "raw_data.isnull().sum()" + ] + }, + { + "cell_type": "code", + "execution_count": 84, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Manufacturer 0\n", + "Permit Number 0\n", + "DATE 0\n", + "VIN NUMBER 0\n", + "OPERATING WITHOUT DRIVER 0\n", + "DRIVER PRESENT 0\n", + "DISENGAGEMENT INITIATED BY 0\n", + "DISENGAGEMENT LOCATION 0\n", + "FACTS CAUSING DISENGAGEMENT 0\n", + "dtype: int64" + ] + }, + "execution_count": 84, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data_no_mv=raw_data.dropna(axis=0)\n", + "data_no_mv.isnull().sum()" + ] + }, + { + "cell_type": "code", + "execution_count": 85, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>Manufacturer</th>\n", + " <th>Permit Number</th>\n", + " <th>DATE</th>\n", + " <th>VIN NUMBER</th>\n", + " <th>OPERATING WITHOUT DRIVER</th>\n", + " <th>DRIVER PRESENT</th>\n", + " <th>DISENGAGEMENT INITIATED BY</th>\n", + " <th>DISENGAGEMENT LOCATION</th>\n", + " <th>FACTS CAUSING DISENGAGEMENT</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>count</th>\n", + " <td>8884</td>\n", + " <td>8884</td>\n", + " <td>8884</td>\n", + " <td>8884</td>\n", + " <td>8884</td>\n", + " <td>8884</td>\n", + " <td>8884</td>\n", + " <td>8884</td>\n", + " <td>8884</td>\n", + " </tr>\n", + " <tr>\n", + " <th>unique</th>\n", + " <td>27</td>\n", + " <td>26</td>\n", + " <td>3711</td>\n", + " <td>289</td>\n", + " <td>5</td>\n", + " <td>4</td>\n", + " <td>4</td>\n", + " <td>11</td>\n", + " <td>469</td>\n", + " </tr>\n", + " <tr>\n", + " <th>top</th>\n", + " <td>Toyota Research Institute</td>\n", + " <td>AVT050</td>\n", + " <td>3/28/2019</td>\n", + " <td>JTHDU1EF3G5020098</td>\n", + " <td>No</td>\n", + " <td>Yes</td>\n", + " <td>Test Driver</td>\n", + " <td>Street</td>\n", + " <td>Safety Driver proactive disengagement.</td>\n", + " </tr>\n", + " <tr>\n", + " <th>freq</th>\n", + " <td>2947</td>\n", + " <td>2947</td>\n", + " <td>59</td>\n", + " <td>900</td>\n", + " <td>4369</td>\n", + " <td>4934</td>\n", + " <td>6037</td>\n", + " <td>4668</td>\n", + " <td>1780</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " Manufacturer Permit Number DATE VIN NUMBER \\\n", + "count 8884 8884 8884 8884 \n", + "unique 27 26 3711 289 \n", + "top Toyota Research Institute AVT050 3/28/2019 JTHDU1EF3G5020098 \n", + "freq 2947 2947 59 900 \n", + "\n", + " OPERATING WITHOUT DRIVER DRIVER PRESENT DISENGAGEMENT INITIATED BY \\\n", + "count 8884 8884 8884 \n", + "unique 5 4 4 \n", + "top No Yes Test Driver \n", + "freq 4369 4934 6037 \n", + "\n", + " DISENGAGEMENT LOCATION FACTS CAUSING DISENGAGEMENT \n", + "count 8884 8884 \n", + "unique 11 469 \n", + "top Street Safety Driver proactive disengagement. \n", + "freq 4668 1780 " + ] + }, + "execution_count": 85, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data_no_mv.describe(include='all')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Data preparation and labeling" + ] + }, + { + "cell_type": "code", + "execution_count": 86, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "DISENGAGEMENT INITIATED BY\n", + "Test Driver 6037\n", + "AV System 2698\n", + "Vehicle Operator 81\n", + "Test driver 68\n", + "Name: count, dtype: int64" + ] + }, + "execution_count": 86, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data_no_mv['DISENGAGEMENT INITIATED BY'].value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 87, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "469" + ] + }, + "execution_count": 87, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data_no_mv['FACTS CAUSING DISENGAGEMENT'].nunique()" + ] + }, + { + "cell_type": "code", + "execution_count": 88, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>Manufacturer</th>\n", + " <th>Permit Number</th>\n", + " <th>DATE</th>\n", + " <th>VIN NUMBER</th>\n", + " <th>OPERATING WITHOUT DRIVER</th>\n", + " <th>DRIVER PRESENT</th>\n", + " <th>DISENGAGEMENT INITIATED BY</th>\n", + " <th>DISENGAGEMENT LOCATION</th>\n", + " <th>FACTS CAUSING DISENGAGEMENT</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>AImotive Inc.</td>\n", + " <td>AVT003</td>\n", + " <td>12.06.2018</td>\n", + " <td>JTDKN3DU5A1092792</td>\n", + " <td>No</td>\n", + " <td>Yes</td>\n", + " <td>Test Driver</td>\n", + " <td>Freeway</td>\n", + " <td>Lane change maneuver: risk of lane departure, ...</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>AImotive Inc.</td>\n", + " <td>AVT003</td>\n", + " <td>12.10.2018</td>\n", + " <td>JTDKN3DU5A1092792</td>\n", + " <td>No</td>\n", + " <td>Yes</td>\n", + " <td>Test Driver</td>\n", + " <td>Freeway</td>\n", + " <td>Lane change maneuver: risk of lane departure, ...</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>AImotive Inc.</td>\n", + " <td>AVT003</td>\n", + " <td>12.10.2018</td>\n", + " <td>JTDKN3DU5A1092792</td>\n", + " <td>No</td>\n", + " <td>Yes</td>\n", + " <td>Test Driver</td>\n", + " <td>Freeway</td>\n", + " <td>Lane change maneuver: risk of lane departure, ...</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>AImotive Inc.</td>\n", + " <td>AVT003</td>\n", + " <td>04.23.2019</td>\n", + " <td>JTDKN3DU5A1092792</td>\n", + " <td>No</td>\n", + " <td>Yes</td>\n", + " <td>Test Driver</td>\n", + " <td>Freeway</td>\n", + " <td>Lane change maneuver: risk of lane departure, ...</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>AImotive Inc.</td>\n", + " <td>AVT003</td>\n", + " <td>05.14.2019</td>\n", + " <td>JTDKN3DU5A1092792</td>\n", + " <td>No</td>\n", + " <td>Yes</td>\n", + " <td>Test Driver</td>\n", + " <td>Freeway</td>\n", + " <td>Lane change maneuver to the exit lane: risk of...</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " Manufacturer Permit Number DATE VIN NUMBER \\\n", + "0 AImotive Inc. AVT003 12.06.2018 JTDKN3DU5A1092792 \n", + "1 AImotive Inc. AVT003 12.10.2018 JTDKN3DU5A1092792 \n", + "2 AImotive Inc. AVT003 12.10.2018 JTDKN3DU5A1092792 \n", + "3 AImotive Inc. AVT003 04.23.2019 JTDKN3DU5A1092792 \n", + "4 AImotive Inc. AVT003 05.14.2019 JTDKN3DU5A1092792 \n", + "\n", + " OPERATING WITHOUT DRIVER DRIVER PRESENT DISENGAGEMENT INITIATED BY \\\n", + "0 No Yes Test Driver \n", + "1 No Yes Test Driver \n", + "2 No Yes Test Driver \n", + "3 No Yes Test Driver \n", + "4 No Yes Test Driver \n", + "\n", + " DISENGAGEMENT LOCATION FACTS CAUSING DISENGAGEMENT \n", + "0 Freeway Lane change maneuver: risk of lane departure, ... \n", + "1 Freeway Lane change maneuver: risk of lane departure, ... \n", + "2 Freeway Lane change maneuver: risk of lane departure, ... \n", + "3 Freeway Lane change maneuver: risk of lane departure, ... \n", + "4 Freeway Lane change maneuver to the exit lane: risk of... " + ] + }, + "execution_count": 88, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data_no_mv.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 89, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "FACTS CAUSING DISENGAGEMENT\n", + "Safety Driver proactive disengagement. 1780\n", + "Disengage for unwanted maneuver of the vehicle caused by a planning discrepancy while generating an appropriate trajectory 805\n", + "Automatic disengagement caused by planner fault. 742\n", + "Disengage due to operator discomfort 636\n", + "Disengage for a software fault due to a potential performance issue with a software component of the self-driving system (including third party software components) 482\n", + " ... \n", + "Planning Logic: planner inadequately yields for cross traffic agent with right-of-way 1\n", + "Planning Logic: planned trajectory fails to avoid vehicle stopped ahead intersection 1\n", + "Object Perception: inaccurate perception of animal slowly crossing road leads to planned trajectory overlap 1\n", + "Planning Logic: incorrect behavior prediction for oncoming vehicle results in a planned trajectory that overlaps with the vehicle 1\n", + "Planning discrepancy; system planned incorrect trajectory to avoid oncoming traffic 1\n", + "Name: count, Length: 469, dtype: int64" + ] + }, + "execution_count": 89, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data_no_mv['FACTS CAUSING DISENGAGEMENT'].value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 90, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "DISENGAGEMENT INITIATED BY\n", + "Test Driver 6037\n", + "AV System 2698\n", + "Vehicle Operator 81\n", + "Test driver 68\n", + "Name: count, dtype: int64" + ] + }, + "execution_count": 90, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data_no_mv['DISENGAGEMENT INITIATED BY'].value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 91, + "metadata": {}, + "outputs": [], + "source": [ + "data_reduced = data_no_mv.loc[0:1999, :]" + ] + }, + { + "cell_type": "code", + "execution_count": 92, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "<class 'pandas.core.frame.DataFrame'>\n", + "Index: 2000 entries, 0 to 1999\n", + "Data columns (total 9 columns):\n", + " # Column Non-Null Count Dtype \n", + "--- ------ -------------- ----- \n", + " 0 Manufacturer 2000 non-null object\n", + " 1 Permit Number 2000 non-null object\n", + " 2 DATE 2000 non-null object\n", + " 3 VIN NUMBER 2000 non-null object\n", + " 4 OPERATING WITHOUT DRIVER 2000 non-null object\n", + " 5 DRIVER PRESENT 2000 non-null object\n", + " 6 DISENGAGEMENT INITIATED BY 2000 non-null object\n", + " 7 DISENGAGEMENT LOCATION 2000 non-null object\n", + " 8 FACTS CAUSING DISENGAGEMENT 2000 non-null object\n", + "dtypes: object(9)\n", + "memory usage: 156.2+ KB\n" + ] + } + ], + "source": [ + "data_reduced.info()" + ] + }, + { + "cell_type": "code", + "execution_count": 93, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "92" + ] + }, + "execution_count": 93, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data_reduced['FACTS CAUSING DISENGAGEMENT'].nunique()" + ] + }, + { + "cell_type": "code", + "execution_count": 94, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\ar\\AppData\\Local\\Temp\\ipykernel_3376\\3061903378.py:1: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " data_reduced.drop_duplicates(subset =\"FACTS CAUSING DISENGAGEMENT\",\n" + ] + } + ], + "source": [ + "data_reduced.drop_duplicates(subset =\"FACTS CAUSING DISENGAGEMENT\", \n", + " keep = 'first', inplace = True) " + ] + }, + { + "cell_type": "code", + "execution_count": 95, + "metadata": {}, + "outputs": [], + "source": [ + "data_reduced = data_reduced.reset_index()" + ] + }, + { + "cell_type": "code", + "execution_count": 96, + "metadata": {}, + "outputs": [], + "source": [ + "data_reduced['FACTS CAUSING DISENGAGEMENT'] = data_reduced['FACTS CAUSING DISENGAGEMENT'].astype('str')" + ] + }, + { + "cell_type": "code", + "execution_count": 97, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "dtype('O')" + ] + }, + "execution_count": 97, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data_reduced['FACTS CAUSING DISENGAGEMENT'].dtype" + ] + }, + { + "cell_type": "code", + "execution_count": 98, + "metadata": {}, + "outputs": [], + "source": [ + "import re" + ] + }, + { + "cell_type": "code", + "execution_count": 99, + "metadata": {}, + "outputs": [], + "source": [ + "software_keywords = [\"software performance\", \"software fault\", \"software discrepancy\"\n", + " \"trajectory planning\", \"planning discrepancy\", \"planning error\",\n", + " \"wrong lane change suggestion\", \"wrong lane association\", \"data recording\",\n", + " \"improper lane-change plan\", \"undesirable manuever\", \"undesirable yielding maneuver\",\n", + " \"outside of rate requirements\", \"merged poorly\", \"mapping issue\", \"software issue\",\n", + " \"poor trajectory across lanes\", \"incorrect assessment\", \"incorrect behavior\",\n", + " \"unprotected\", \"Poor lane change\", \"very wide\", \"wrong object prediction\", \"undesired motion\",\n", + " \"unwanted maneuver\", \"perception discrepancy\", \"ghost object prediction\",\n", + " \"driving faster than driver expected\", \"expected path\",\n", + " \"not initialized correctly\", \"software module\", \"perception mismatch\", \"estimation\",\n", + " \"planner fault\", \"unstable\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 100, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\ar\\AppData\\Local\\Temp\\ipykernel_3376\\1320408372.py:1: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " data_no_mv.loc[data_no_mv['FACTS CAUSING DISENGAGEMENT'].str.contains('|'.join(software_keywords), na=False, case=False)\n" + ] + } + ], + "source": [ + "data_no_mv.loc[data_no_mv['FACTS CAUSING DISENGAGEMENT'].str.contains('|'.join(software_keywords), na=False, case=False)\n", + " , 'Problem class'] = \"Software\" " + ] + }, + { + "cell_type": "code", + "execution_count": 101, + "metadata": {}, + "outputs": [], + "source": [ + "hardware_keywords = [\"hardware performance\", \"hardware diagnostics\", \"controls diagnostics\", \"actor\", \n", + " \"yield to other actors\", \"Hardware irregularity\", \"weather conditions\", \"Autobox\", \n", + " \"performance issue with a hardware component\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 102, + "metadata": {}, + "outputs": [], + "source": [ + "data_no_mv.loc[data_no_mv['FACTS CAUSING DISENGAGEMENT'].str.contains('|'.join(hardware_keywords), na=False, case=False)\n", + " , 'Problem class'] = \"Hardware\" " + ] + }, + { + "cell_type": "code", + "execution_count": 103, + "metadata": {}, + "outputs": [], + "source": [ + "soft_hardware_keywords = [\"timed out\", \"timeout\", \"too long\", \"incorrect detection\", \"Lost track\", \"Localization\", \n", + " \"geo-location related\", \"unsuccessful right turn\", \"unsuccessful left turn\", \"system\",\n", + " \"traffic conditions\", \"failed to detect an object correctly\", \" took longer than expected\",\n", + " \"main computer froze\", \"not braking correctly\", \"not speeding up correctly\",\n", + " \"not turning enough\", \"not slowing down enough\", \"didn't detect\", \"Sensor Fusion discrepancy\",\n", + " \"did not meet expectation\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 104, + "metadata": {}, + "outputs": [], + "source": [ + "data_no_mv.loc[data_no_mv['FACTS CAUSING DISENGAGEMENT'].str.contains('|'.join(soft_hardware_keywords), na=False, case=False)\n", + " , 'Problem class'] = \"Software/Hardware\" " + ] + }, + { + "cell_type": "code", + "execution_count": 105, + "metadata": {}, + "outputs": [], + "source": [ + "Traffic_ctrl_keywords = [\"unstable target lane\", \"Traffic light error\", \"Stop sign error\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 106, + "metadata": {}, + "outputs": [], + "source": [ + "data_no_mv.loc[data_no_mv['FACTS CAUSING DISENGAGEMENT'].str.contains('|'.join(Traffic_ctrl_keywords), na=False, case=False)\n", + " , 'Problem class'] = \"Traffic control objects\" " + ] + }, + { + "cell_type": "code", + "execution_count": 107, + "metadata": {}, + "outputs": [], + "source": [ + "road_user_keywords = [\"reckless driver\", \"behaving road user\", \"other road user\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 108, + "metadata": {}, + "outputs": [], + "source": [ + "data_no_mv.loc[data_no_mv['FACTS CAUSING DISENGAGEMENT'].str.contains('|'.join(road_user_keywords), na=False, case=False)\n", + " , 'Problem class'] = \"Other road user\" " + ] + }, + { + "cell_type": "code", + "execution_count": 109, + "metadata": {}, + "outputs": [], + "source": [ + "external_influences = [\"obstruction\", \"encroachment\", \"occluded view\", \"surface conditions\", \"wheater\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 110, + "metadata": {}, + "outputs": [], + "source": [ + "data_no_mv.loc[data_no_mv['FACTS CAUSING DISENGAGEMENT'].str.contains('|'.join(external_influences), na=False, case=False)\n", + " , 'Problem class'] = \"External influences\" " + ] + }, + { + "cell_type": "code", + "execution_count": 111, + "metadata": {}, + "outputs": [], + "source": [ + "data_no_mv.loc[data_no_mv['Problem class'].isnull()\n", + " , 'Problem class'] = \"Other problems\" " + ] + }, + { + "cell_type": "code", + "execution_count": 112, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>Manufacturer</th>\n", + " <th>Permit Number</th>\n", + " <th>DATE</th>\n", + " <th>VIN NUMBER</th>\n", + " <th>OPERATING WITHOUT DRIVER</th>\n", + " <th>DRIVER PRESENT</th>\n", + " <th>DISENGAGEMENT INITIATED BY</th>\n", + " <th>DISENGAGEMENT LOCATION</th>\n", + " <th>FACTS CAUSING DISENGAGEMENT</th>\n", + " <th>Problem class</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>AImotive Inc.</td>\n", + " <td>AVT003</td>\n", + " <td>12.06.2018</td>\n", + " <td>JTDKN3DU5A1092792</td>\n", + " <td>No</td>\n", + " <td>Yes</td>\n", + " <td>Test Driver</td>\n", + " <td>Freeway</td>\n", + " <td>Lane change maneuver: risk of lane departure, ...</td>\n", + " <td>Traffic control objects</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>AImotive Inc.</td>\n", + " <td>AVT003</td>\n", + " <td>12.10.2018</td>\n", + " <td>JTDKN3DU5A1092792</td>\n", + " <td>No</td>\n", + " <td>Yes</td>\n", + " <td>Test Driver</td>\n", + " <td>Freeway</td>\n", + " <td>Lane change maneuver: risk of lane departure, ...</td>\n", + " <td>Traffic control objects</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>AImotive Inc.</td>\n", + " <td>AVT003</td>\n", + " <td>12.10.2018</td>\n", + " <td>JTDKN3DU5A1092792</td>\n", + " <td>No</td>\n", + " <td>Yes</td>\n", + " <td>Test Driver</td>\n", + " <td>Freeway</td>\n", + " <td>Lane change maneuver: risk of lane departure, ...</td>\n", + " <td>Traffic control objects</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>AImotive Inc.</td>\n", + " <td>AVT003</td>\n", + " <td>04.23.2019</td>\n", + " <td>JTDKN3DU5A1092792</td>\n", + " <td>No</td>\n", + " <td>Yes</td>\n", + " <td>Test Driver</td>\n", + " <td>Freeway</td>\n", + " <td>Lane change maneuver: risk of lane departure, ...</td>\n", + " <td>Other problems</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>AImotive Inc.</td>\n", + " <td>AVT003</td>\n", + " <td>05.14.2019</td>\n", + " <td>JTDKN3DU5A1092792</td>\n", + " <td>No</td>\n", + " <td>Yes</td>\n", + " <td>Test Driver</td>\n", + " <td>Freeway</td>\n", + " <td>Lane change maneuver to the exit lane: risk of...</td>\n", + " <td>Software</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " Manufacturer Permit Number DATE VIN NUMBER \\\n", + "0 AImotive Inc. AVT003 12.06.2018 JTDKN3DU5A1092792 \n", + "1 AImotive Inc. AVT003 12.10.2018 JTDKN3DU5A1092792 \n", + "2 AImotive Inc. AVT003 12.10.2018 JTDKN3DU5A1092792 \n", + "3 AImotive Inc. AVT003 04.23.2019 JTDKN3DU5A1092792 \n", + "4 AImotive Inc. AVT003 05.14.2019 JTDKN3DU5A1092792 \n", + "\n", + " OPERATING WITHOUT DRIVER DRIVER PRESENT DISENGAGEMENT INITIATED BY \\\n", + "0 No Yes Test Driver \n", + "1 No Yes Test Driver \n", + "2 No Yes Test Driver \n", + "3 No Yes Test Driver \n", + "4 No Yes Test Driver \n", + "\n", + " DISENGAGEMENT LOCATION FACTS CAUSING DISENGAGEMENT \\\n", + "0 Freeway Lane change maneuver: risk of lane departure, ... \n", + "1 Freeway Lane change maneuver: risk of lane departure, ... \n", + "2 Freeway Lane change maneuver: risk of lane departure, ... \n", + "3 Freeway Lane change maneuver: risk of lane departure, ... \n", + "4 Freeway Lane change maneuver to the exit lane: risk of... \n", + "\n", + " Problem class \n", + "0 Traffic control objects \n", + "1 Traffic control objects \n", + "2 Traffic control objects \n", + "3 Other problems \n", + "4 Software " + ] + }, + "execution_count": 112, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data_no_mv.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Classification model" + ] + }, + { + "cell_type": "code", + "execution_count": 113, + "metadata": {}, + "outputs": [], + "source": [ + "data_preprocessed = data_no_mv.copy()\n", + "data_preprocessed['Problem class']=data_preprocessed['Problem class'].map(\n", + " {'Software':0,'Hardware':1,'Software/Hardware':2,\n", + " 'Traffic control objects':3,'Other road user':4, 'External influences':5,\n", + " 'Other problems':6})\n" + ] + }, + { + "cell_type": "code", + "execution_count": 114, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>Manufacturer</th>\n", + " <th>Permit Number</th>\n", + " <th>DATE</th>\n", + " <th>VIN NUMBER</th>\n", + " <th>OPERATING WITHOUT DRIVER</th>\n", + " <th>DRIVER PRESENT</th>\n", + " <th>DISENGAGEMENT INITIATED BY</th>\n", + " <th>DISENGAGEMENT LOCATION</th>\n", + " <th>FACTS CAUSING DISENGAGEMENT</th>\n", + " <th>Problem class</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>AImotive Inc.</td>\n", + " <td>AVT003</td>\n", + " <td>12.06.2018</td>\n", + " <td>JTDKN3DU5A1092792</td>\n", + " <td>No</td>\n", + " <td>Yes</td>\n", + " <td>Test Driver</td>\n", + " <td>Freeway</td>\n", + " <td>Lane change maneuver: risk of lane departure, ...</td>\n", + " <td>3</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>AImotive Inc.</td>\n", + " <td>AVT003</td>\n", + " <td>12.10.2018</td>\n", + " <td>JTDKN3DU5A1092792</td>\n", + " <td>No</td>\n", + " <td>Yes</td>\n", + " <td>Test Driver</td>\n", + " <td>Freeway</td>\n", + " <td>Lane change maneuver: risk of lane departure, ...</td>\n", + " <td>3</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>AImotive Inc.</td>\n", + " <td>AVT003</td>\n", + " <td>12.10.2018</td>\n", + " <td>JTDKN3DU5A1092792</td>\n", + " <td>No</td>\n", + " <td>Yes</td>\n", + " <td>Test Driver</td>\n", + " <td>Freeway</td>\n", + " <td>Lane change maneuver: risk of lane departure, ...</td>\n", + " <td>3</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>AImotive Inc.</td>\n", + " <td>AVT003</td>\n", + " <td>04.23.2019</td>\n", + " <td>JTDKN3DU5A1092792</td>\n", + " <td>No</td>\n", + " <td>Yes</td>\n", + " <td>Test Driver</td>\n", + " <td>Freeway</td>\n", + " <td>Lane change maneuver: risk of lane departure, ...</td>\n", + " <td>6</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>AImotive Inc.</td>\n", + " <td>AVT003</td>\n", + " <td>05.14.2019</td>\n", + " <td>JTDKN3DU5A1092792</td>\n", + " <td>No</td>\n", + " <td>Yes</td>\n", + " <td>Test Driver</td>\n", + " <td>Freeway</td>\n", + " <td>Lane change maneuver to the exit lane: risk of...</td>\n", + " <td>0</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " Manufacturer Permit Number DATE VIN NUMBER \\\n", + "0 AImotive Inc. AVT003 12.06.2018 JTDKN3DU5A1092792 \n", + "1 AImotive Inc. AVT003 12.10.2018 JTDKN3DU5A1092792 \n", + "2 AImotive Inc. AVT003 12.10.2018 JTDKN3DU5A1092792 \n", + "3 AImotive Inc. AVT003 04.23.2019 JTDKN3DU5A1092792 \n", + "4 AImotive Inc. AVT003 05.14.2019 JTDKN3DU5A1092792 \n", + "\n", + " OPERATING WITHOUT DRIVER DRIVER PRESENT DISENGAGEMENT INITIATED BY \\\n", + "0 No Yes Test Driver \n", + "1 No Yes Test Driver \n", + "2 No Yes Test Driver \n", + "3 No Yes Test Driver \n", + "4 No Yes Test Driver \n", + "\n", + " DISENGAGEMENT LOCATION FACTS CAUSING DISENGAGEMENT \\\n", + "0 Freeway Lane change maneuver: risk of lane departure, ... \n", + "1 Freeway Lane change maneuver: risk of lane departure, ... \n", + "2 Freeway Lane change maneuver: risk of lane departure, ... \n", + "3 Freeway Lane change maneuver: risk of lane departure, ... \n", + "4 Freeway Lane change maneuver to the exit lane: risk of... \n", + "\n", + " Problem class \n", + "0 3 \n", + "1 3 \n", + "2 3 \n", + "3 6 \n", + "4 0 " + ] + }, + "execution_count": 114, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data_preprocessed.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 115, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "<class 'pandas.core.frame.DataFrame'>\n", + "Index: 8884 entries, 0 to 8884\n", + "Data columns (total 10 columns):\n", + " # Column Non-Null Count Dtype \n", + "--- ------ -------------- ----- \n", + " 0 Manufacturer 8884 non-null object\n", + " 1 Permit Number 8884 non-null object\n", + " 2 DATE 8884 non-null object\n", + " 3 VIN NUMBER 8884 non-null object\n", + " 4 OPERATING WITHOUT DRIVER 8884 non-null object\n", + " 5 DRIVER PRESENT 8884 non-null object\n", + " 6 DISENGAGEMENT INITIATED BY 8884 non-null object\n", + " 7 DISENGAGEMENT LOCATION 8884 non-null object\n", + " 8 FACTS CAUSING DISENGAGEMENT 8884 non-null object\n", + " 9 Problem class 8884 non-null int64 \n", + "dtypes: int64(1), object(9)\n", + "memory usage: 1021.5+ KB\n" + ] + } + ], + "source": [ + "data_preprocessed.info()" + ] + }, + { + "cell_type": "code", + "execution_count": 116, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>Problem class</th>\n", + " <th>Manufacturer_Apple Inc.</th>\n", + " <th>Manufacturer_Aurora Innovation, Inc.</th>\n", + " <th>Manufacturer_AutoX Technologies, Inc.</th>\n", + " <th>Manufacturer_BMW of North America</th>\n", + " <th>Manufacturer_Baidu USA LLC</th>\n", + " <th>Manufacturer_CRUISE LLC</th>\n", + " <th>Manufacturer_Drive.ai Inc</th>\n", + " <th>Manufacturer_Lyft</th>\n", + " <th>Manufacturer_Mercedes-Benz Research & Development North America, Inc.</th>\n", + " <th>...</th>\n", + " <th>FACTS CAUSING DISENGAGEMENT_precautionary takeover to address planning, \\nprecautionary takeover to address perception, \\nother road user behaving poorly</th>\n", + " <th>FACTS CAUSING DISENGAGEMENT_precautionary takeover to address planning, \\nprecautionary takeover to address perception, AV made unsuccessful left turn</th>\n", + " <th>FACTS CAUSING DISENGAGEMENT_precautionary takeover to address planning, \\nprecautionary takeover to address perception, third party lane encroachment</th>\n", + " <th>FACTS CAUSING DISENGAGEMENT_precautionary takeover to address planning, \\nprecautionary takeover to address perception, third party lane obstruction</th>\n", + " <th>FACTS CAUSING DISENGAGEMENT_precautionary takeover to address planning, AV lane change issues</th>\n", + " <th>FACTS CAUSING DISENGAGEMENT_precautionary takeover to address planning, AV made unsuccessful left turn</th>\n", + " <th>FACTS CAUSING DISENGAGEMENT_precautionary takeover to address planning, other road user behaving poorly</th>\n", + " <th>FACTS CAUSING DISENGAGEMENT_precautionary takeover to address planning, third party lane encroachment</th>\n", + " <th>FACTS CAUSING DISENGAGEMENT_precautionary takeover to address planning, third party lane obstruction</th>\n", + " <th>FACTS CAUSING DISENGAGEMENT_prediction discrepancy, a vehicle in the front was backing up, ego was not able to predict this behavior correctly.</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>3</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>...</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>3</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>...</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>3</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>...</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>6</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>...</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>0</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>...</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " <td>False</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "<p>5 rows × 4538 columns</p>\n", + "</div>" + ], + "text/plain": [ + " Problem class Manufacturer_Apple Inc. \\\n", + "0 3 False \n", + "1 3 False \n", + "2 3 False \n", + "3 6 False \n", + "4 0 False \n", + "\n", + " Manufacturer_Aurora Innovation, Inc. \\\n", + "0 False \n", + "1 False \n", + "2 False \n", + "3 False \n", + "4 False \n", + "\n", + " Manufacturer_AutoX Technologies, Inc. Manufacturer_BMW of North America \\\n", + "0 False False \n", + "1 False False \n", + "2 False False \n", + "3 False False \n", + "4 False False \n", + "\n", + " Manufacturer_Baidu USA LLC Manufacturer_CRUISE LLC \\\n", + "0 False False \n", + "1 False False \n", + "2 False False \n", + "3 False False \n", + "4 False False \n", + "\n", + " Manufacturer_Drive.ai Inc Manufacturer_Lyft \\\n", + "0 False False \n", + "1 False False \n", + "2 False False \n", + "3 False False \n", + "4 False False \n", + "\n", + " Manufacturer_Mercedes-Benz Research & Development North America, Inc. ... \\\n", + "0 False ... \n", + "1 False ... \n", + "2 False ... \n", + "3 False ... \n", + "4 False ... \n", + "\n", + " FACTS CAUSING DISENGAGEMENT_precautionary takeover to address planning, \\nprecautionary takeover to address perception, \\nother road user behaving poorly \\\n", + "0 False \n", + "1 False \n", + "2 False \n", + "3 False \n", + "4 False \n", + "\n", + " FACTS CAUSING DISENGAGEMENT_precautionary takeover to address planning, \\nprecautionary takeover to address perception, AV made unsuccessful left turn \\\n", + "0 False \n", + "1 False \n", + "2 False \n", + "3 False \n", + "4 False \n", + "\n", + " FACTS CAUSING DISENGAGEMENT_precautionary takeover to address planning, \\nprecautionary takeover to address perception, third party lane encroachment \\\n", + "0 False \n", + "1 False \n", + "2 False \n", + "3 False \n", + "4 False \n", + "\n", + " FACTS CAUSING DISENGAGEMENT_precautionary takeover to address planning, \\nprecautionary takeover to address perception, third party lane obstruction \\\n", + "0 False \n", + "1 False \n", + "2 False \n", + "3 False \n", + "4 False \n", + "\n", + " FACTS CAUSING DISENGAGEMENT_precautionary takeover to address planning, AV lane change issues \\\n", + "0 False \n", + "1 False \n", + "2 False \n", + "3 False \n", + "4 False \n", + "\n", + " FACTS CAUSING DISENGAGEMENT_precautionary takeover to address planning, AV made unsuccessful left turn \\\n", + "0 False \n", + "1 False \n", + "2 False \n", + "3 False \n", + "4 False \n", + "\n", + " FACTS CAUSING DISENGAGEMENT_precautionary takeover to address planning, other road user behaving poorly \\\n", + "0 False \n", + "1 False \n", + "2 False \n", + "3 False \n", + "4 False \n", + "\n", + " FACTS CAUSING DISENGAGEMENT_precautionary takeover to address planning, third party lane encroachment \\\n", + "0 False \n", + "1 False \n", + "2 False \n", + "3 False \n", + "4 False \n", + "\n", + " FACTS CAUSING DISENGAGEMENT_precautionary takeover to address planning, third party lane obstruction \\\n", + "0 False \n", + "1 False \n", + "2 False \n", + "3 False \n", + "4 False \n", + "\n", + " FACTS CAUSING DISENGAGEMENT_prediction discrepancy, a vehicle in the front was backing up, ego was not able to predict this behavior correctly. \n", + "0 False \n", + "1 False \n", + "2 False \n", + "3 False \n", + "4 False \n", + "\n", + "[5 rows x 4538 columns]" + ] + }, + "execution_count": 116, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data_with_dummies = pd.get_dummies(data_preprocessed, drop_first=True)\n", + "data_with_dummies.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 117, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Problem class 0\n", + "Manufacturer_Apple Inc. 0\n", + "Manufacturer_Aurora Innovation, Inc. 0\n", + "Manufacturer_AutoX Technologies, Inc. 0\n", + "Manufacturer_BMW of North America 0\n", + " ..\n", + "FACTS CAUSING DISENGAGEMENT_precautionary takeover to address planning, AV made unsuccessful left turn 0\n", + "FACTS CAUSING DISENGAGEMENT_precautionary takeover to address planning, other road user behaving poorly 0\n", + "FACTS CAUSING DISENGAGEMENT_precautionary takeover to address planning, third party lane encroachment 0\n", + "FACTS CAUSING DISENGAGEMENT_precautionary takeover to address planning, third party lane obstruction 0\n", + "FACTS CAUSING DISENGAGEMENT_prediction discrepancy, a vehicle in the front was backing up, ego was not able to predict this behavior correctly. 0\n", + "Length: 4538, dtype: int64" + ] + }, + "execution_count": 117, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data_with_dummies.isnull().sum()" + ] + }, + { + "cell_type": "code", + "execution_count": 118, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.model_selection import train_test_split\n", + "from sklearn.metrics import confusion_matrix, accuracy_score, classification_report" + ] + }, + { + "cell_type": "code", + "execution_count": 119, + "metadata": {}, + "outputs": [], + "source": [ + "target = data_with_dummies['Problem class']\n", + "inputs = data_with_dummies.drop(['Problem class'],axis=1)" + ] + }, + { + "cell_type": "code", + "execution_count": 120, + "metadata": {}, + "outputs": [], + "source": [ + "x_train, x_test, y_train, y_test = train_test_split(inputs, target, test_size=0.2, random_state=365)" + ] + }, + { + "cell_type": "code", + "execution_count": 121, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\ar\\AppData\\Local\\Temp\\ipykernel_3376\\2234393116.py:1: UserWarning: \n", + "\n", + "`distplot` is a deprecated function and will be removed in seaborn v0.14.0.\n", + "\n", + "Please adapt your code to use either `displot` (a figure-level function with\n", + "similar flexibility) or `histplot` (an axes-level function for histograms).\n", + "\n", + "For a guide to updating your code to use the new functions, please see\n", + "https://gist.github.com/mwaskom/de44147ed2974457ad6372750bbe5751\n", + "\n", + " sns.distplot((y_test),bins=50)\n" + ] + }, + { + "data": { + "text/plain": [ + "<Axes: xlabel='Problem class', ylabel='Density'>" + ] + }, + "execution_count": 121, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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HA2e4ux0OjFnzhzMnTsXFy5cwIQJE/Dggw/iwQcfxLhx43D69GnMnDnTo/N1cnJykJiYiJ07dwIAIiIi8J///AeVlZWYPHkyHnjgAfj5+WHLli11bkZKREREBFzHnp3k5GR88cUXmD9/Pu6//37XKam1nE4n3n33Xbz00ksYOXIkJk6ceN3FvPzyy27fR0VFIS0tza2td+/e2Lhx43Uvm4iIiNqnBu/Z+eijj3D33XfjgQceqBN0AEAURdx7773461//ig8++MCjRRIRERE1VoPDTkZGBpKSkq7Zb+TIkTh37lyTiiIiIiLylAaHHZPJVOe07/oEBgaiuLi4SUUREREReUqDw44kSQ262aYoinA6eT0CIiIiah14wxUiIiJStOu6zs7ixYvh6+t71T4VFRVNKoiIiIjIkxocdhISEgDgmpeK9/HxweDBg5tWFREREZGHNDjsbN26tTnrICIiImoWnLNDREREisawQ0RERIrGsENERESKxrBDREREisawQ0RERIrGsENERESKxrBDREREisawQ0RERIrGsENERESKxrBDREREisawQ0RERIrGsENERESKxrBDREREisawQ0RERIrGsENERESKxrBDREREisawQ0RERIrGsENERESKxrBDREREisawQ0RERIrGsENERESKxrBDREREisawQ0RERIrGsENERESKxrBDREREisawQ0RERIrGsENERESKxrBDREREisawQ0RERIrGsENERESKxrBDREREisawQ0RERIrGsENERESKxrBDREREisawQ0RERIrGsENERESKxrBDREREitaqws769esxZcqUq/YpKSnBk08+iYSEBCQkJOD5559HVVVVC1VIREREbU2rCTubN2/GmjVrrtlv1qxZyMrKcvXft28flixZ0gIVEhERUVuklruAvLw8LFiwAIcPH0bXrl2v2vfIkSNISUnBzp07ERMTAwB44YUX8NBDD2HOnDkICwtriZKJiIioDZF9z86vv/4Kf39/fPbZZ4iLi7tq39TUVISEhLiCDgAMGTIEgiDg8OHDzV0qERERtUGy79kZO3Ysxo4d26C+eXl5iIiIcGvTarUICAhATk5Ok+pQq+vPfSqV6PaVWpZKJQJOCaIoQCUKv7WLAgRRgFotQJKEqyyBrocgAELNWKtEAaJYvd6LHG9ZcPvTMq5c72uJNc9VKhGSJFd17Zcn13/Zw871MJlM0Gq1ddp1Oh0sFkujlyuKAgIDfa7ax2DwavTyqWlMxVXQ6TQQVSpXm0YtwkuvRUCAt4yVKZPVWQUvLy3UGqerTafTcLxlxO1P86tvvdfU/BHs58fxl5Mn1v82FXb0ej2sVmuddovFAm/vxm+EnU4JRmP9Z3SpVCIMBi8YjSY4HM56+1Dzqd3jZrHYYLbYXe1ajQomsxWlpRL/4vIgQQBMZhtMJiusNgdEUYRer4HFYuN4y4Dbn5Zx5XpfS6+r/ogsLzfBbuf4t7Rrrf8Gg1eD9/q0qbATHh6OPXv2uLVZrVaUlpY2eXLytVZkh8PJlV0GggAAApxOCQ7nb5+yDqcEySnBbpcg8dPXYwRBgFQz1tXjXb3OOznesuL2p3nVXe+rOWuec/zl5Ynxb1MHghMSEpCbm4vMzExX28GDBwEA8fHxcpVFRERErVirDjsOhwMFBQUwm80AgLi4OMTHx2P27Nk4fvw4fvzxRyxatAi33XYbTzsnIiKierXqsJOTk4PExETs3LkTQPWuxrVr1yIqKgpTp07FE088gVGjRmHx4sXyFkpEREStVquas/Pyyy+7fR8VFYW0tDS3tg4dOjToSstEREREQCvfs0NERETUVAw7REREpGgMO0RERKRoDDtERESkaAw7REREpGgMO0RERKRoDDtERESkaAw7REREpGgMO0RERKRoDDtERESkaAw7REREpGgMO0RERKRoDDtERESkaAw7REREpGgMO0RERKRoDDtERESkaAw7REREpGgMO0RERKRoDDtERESkaAw7REREpGgMO0RERKRoDDtERESkaAw7REREpGgMO0RERKRoDDtERESkaAw7REREpGgMO0RERKRoDDtERESkaAw7REREpGgMO0RERKRoDDtERESkaAw7REREpGgMO0RERKRoDDtERESkaAw7REREpGgMO0RERKRoDDtERESkaAw7REREpGgMO0RERKRoDDtERESkaAw7REREpGgMO0RERKRoDDtERESkaAw7REREpGiyhx2n04k1a9Zg5MiRiIuLw4MPPojMzMzf7f/xxx+jV69edR5X+xkiIiJqv9RyF7B+/Xq89957WL58OcLCwvDaa6/h4Ycfxo4dO6DVauv0T0tLw5AhQ7By5Uq39qCgoJYqmYiIiNoQWffsWK1WbNq0CTNnzkRSUhJiY2OxatUq5OXlYffu3fX+THp6OmJjYxESEuL2UKlULVw9ERERtQWyhp1Tp06hsrISw4YNc7UZDAb06dMHhw4dqvdn0tLS0L1795YqkYiIiNo4WQ9j5ebmAgAiIiLc2kNDQ5GTk1Onf3FxMQoLC3Ho0CFs3boVpaWliIuLw9y5c9G1a9cm1aJW15/7VCrR7Su1LJVKBJwSRFGAShR+axcFCKIAtVqAJAlXWQJdD0EAhJqxVokCRLF6vRc53rLg9qdlXLne1xJrnqtUIiRJruraL0+u/7KGHZPJBAB15ubodDqUlZXV6Z+eng4AUKlUeOWVV1BVVYX169fjnnvuwfbt2xEcHNyoOkRRQGCgz1X7GAxejVo2NZ2puAo6nQbiZYcqNWoRXnotAgK8ZaxMmazOKnh5aaHWOF1tOp2G4y0jbn+aX33rvabmj2A/P46/nDyx/ssadvR6PYDquTu1zwHAYrHAy6vumxs2bBhSUlLg7+/valu3bh3GjBmDjz76CI888kij6nA6JRiNVfW+plKJMBi8YDSa4HA46+1Dzad2j5vFYoPZYne1azUqmMxWlJZK/IvLgwQBMJltMJmssNocEEURer0GFouN4y0Dbn9axpXrfS29rvojsrzcBLud49/SrrX+GwxeDd7rI2vYqT18lZ+fj86dO7va8/PzERsbW+/PXB50AMDb2xtRUVHIy8trUi3XWpEdDidXdhkIAgAIcDolOJy/fco6nBIkpwS7XYLET1+PEQQBUs1YV4939Trv5HjLituf5lV3va/mrHnO8ZeXJ8Zf1gPBsbGx8PX1xcGDB11tRqMRJ06cwODBg+v0T05OxtChQ2E2m11tFRUVyMjI4KRlIiIiqpesYUer1eK+++7DihUr8NVXX+HUqVOYPXs2wsPDMX78eDgcDhQUFLjCzZgxYyBJEp5++mmcPn0aP//8M2bOnImgoCDcfvvtcr4VIiIiaqVkn+I/a9Ys3HnnnXjuuecwefJkqFQqbNy4EVqtFjk5OUhMTMTOnTsBVB/2+s9//oPKykpMnjwZDzzwAPz8/LBlyxa3OT9EREREtWS/grJKpcJTTz2Fp556qs5rUVFRSEtLc2vr3bs3Nm7c2FLlERERURsn+54dIiIioubEsENERESKxrBDREREisawQ0RERIrGsENERESKxrBDREREisawQ0RERIrGsENERESKxrBDREREisawQ0RERIrGsENERESKxrBDREREisawQ0RERIrGsENERESKxrBDREREisawQ0RERIrGsENERESKxrBDREREiqaWuwAiIiK5WW0O5JeYUFpuRqXZDpvdCUEAsgoq4atXw1unRkiAF8KDvBHgq4UgCHKXTNeBYYeIiNodm92BUxdKcfxsEdKzSpFdUAGnVLffsTNFddoCfLXoHhWAvl0CMbBHCPx9tC1QMTUFww4REbULkiQh7UIp9v+Si0Np+bBYHW6v67Uq+Hlr4eOlhlatgl6rQmiQDyxWG0rLrcgrqUJhqRmlFVaknspH6ql8bPkiDT06BWDkgAgM7hUKnVYl07ujq2HYISIiRbPaHNj/ay6+Sr2I7MJKV3ugnw79u3VAv25BCO/gg8xcI2x2p+t1L50aQ/p1hFaUYLNVt1tsDpy/ZER6VimOnS3E+ZxypGeVIj2rFMl70pEUF4kbB0chyKBv8fdJv49hh4iIFMlic2DvkWzsOngBZZVWAIBOq8LQ3qEY0S8CPaL8IQgCBEFAhdmGC3nXnoej06gQGx2I2OhA3JrYFcVGM/b/kosfjucgv9SEL1IuYHdqFkYOiMCtiV0R4Ktr7rdJDcCwQ0REiuKUJBz4JRfb9p5FaUV1yOlg0GH84E5IHNAR3nrPffQFGfS4eUQXTBgejV/OFeGLgxdw6kIpvj16Cft/zcUfEzrhpiHRHv2ddP04+tRq2OxO5BRVoqDUhMIyMypMNlhsDlhsThSWmeB0StBpVNDrVAj01aFjsA+8QlUQeVaER1SabSg2WnCpqBLpWaUwW+yQJECv10CQnHA4JYQFeCPYXweDD89GodYp7UIJ3vvqDDLzygEAHQx63HJDF4zoFw61qvmutiIKAgbEBGNATDDSs0rx32/P4Gy2ETv2Z+LbI5dwyw1dMDY+EiqRV3yRgyBJUj3zz9sXh8OJ4uLKel9Tq0UEBvqgpKQS9suO5VLTVZhsOJVZgpMXSnA6qww5RZVw1Hc6xFVo1SKiw/0Q09Ef/boFoWengGbdoCmFxerAmewynL5YinOXjLhYUOH6C7ghvHVqRIX4ICbSH90j/REbHQgvHf928jRufxqusMyE9786g8PpBQCqJxvfMqILbhwcBY366pOGaw9jHTtTCKvtt0nL9c3ZaShJknDkdCG27T2LnKIqAECnUF/cf1MvxHT0v8531z5da/0PCvKBqoHbe4YdMOy0pAqTDQdP5OFwWj7Ss8rgvGL189GrERbkjWB/Pfy8tfD10kBUicjKM8JidcBic8BkcaDCZENFlQ02h/u/iU6rQt8uQRgQ0wEDuwfDwFNCXcoqq88gOXq6AGlZZbA76q7PBh8t/H20kCQJKlGASiVCEAXYbA6IooDyKhuKjWZcudVQiQK6R/pjcGwohvQOhZ83x90TuP25NqdTwp7DF/Hxd+dgsTkgCEBSXEfcNrJbg///b46wU8vhdOL7YznYtvcsKs12CACSBkXijqRu8NFrGrXM9oJhx8MYdpqXU5JwKrME3x27hJ/SC90+ZCODfaon+3UOQJdwA4IMOrfDIxqNCKtTQMovl2Cy2F3tWo0K/WM6oKLShnOXynDqQgl+PlcMY+VveydUooD+3Trghv7hGBATDI26/e3xqTLbcDi9AAdP5OFkZolbSAky6NCzUwC6R/ojOswPHYN94K3XuG30VaIAb28d7DY7+nXrAF+9BlabHbnFJmTmluNMdhnSLpQgr8TkWq5KFDAgpgOG9w1HXPf2Oe6ewu3P1V3IK8d/vjiF8znVh6x6RPljyh97ISrU97qW05xhp5axyor/fn0G+37JBQAYvDX42409MLR3GA8J/w6GHQ9j2GkeJosde49ewtc/XURhmdnV3inUFyP6hWNQzxCEBnhddRlXCztx3YPhq9egdhV2ShIu5JXj+NkiHD1diIzccld/H70aw/qEI2lgx+veELY1kiThbLYRXx+5iNRT+bA7fvtfvGuEAQmxoRgQ0wERHbzrbGSv3OjXF3bq22Tkl1Th6JkiHPg1F5lXjPvoQZEY94conpXSCNz+1M9qc+CzfRn4MuUCHE4JXjoV7hrdHaMGdmzUHL6WCDu1TmWWYOv/0lyHtgbEdMD9f+rFU9XrwbDjYQw7nmWstGLP4Sx8fTgbVTUBxUunwtA+4RgVF4HoML8G/yVzPWHnSpcKK7Hvlxwc+CXXbT5K9yh/jBkYicGxIdc8lt+WmK12/PhrHr7+KRsXCypc7R2DfTC0TxiG9g5FaKD3VZfR2LBzuezCShz4JRcHfs1FSbkFQPXenmF9wjA+oRM6h/k1/c22E9z+1HUyoxj/+TIN+TV7E//QMwT3jO+JQL/Gh+mWDDsAYHc4sfNAJrbvz4DDKUGvVeHO0TEYPSiSJ1xchmHHwxh2PKOk3ILPD2Tg++M5rgtzhQd546ahnTG0Txh0musPFk0JO7WcTgknMorx3bFLOHK60DUJ2tdLg8T+EUga1BFh1wgBrVl2YSW+/Skb+37JgbnmirAatYihvcMwJj4SXcIbHi49EXZqOZ3VEzT/d+gCTl8sc7X36xaE2xK7oVtHw/W/2XaG25/fVJhs+ODrM/jh5xwA1RcEvHd8T8T3DGnysls67NTKLqzE5l0ncTbbCKD6MNwDf45FRAcfj/+utohhx8MYdprGWGXFzgOZ+PqnbNd8nK4RfpgwrAsG9Qxu0l8qngg7lyutsOD7Y5ew99glFBstrva+XQIxelAk4roHt4mzuewOJ46cLsQ3P13EqQulrvawQC+MGRSJEf0j4Ot1/ZMfPRl2LnfukhFfplxAalq+a97QgJgO+EtiV3SNYOj5Pdz+VB+WTTmZj3f3pMNYZYMAYHR8JO5MivHYGYByhR2g+vD7Nz9l48O9Z2GxOqBWCbjlhq7489DObWJb1JwYdjyMYadxqsw2fJGShd2pWa57zPSI8sdtiV0RGx3okUl3ng47tZxOCcfPFuHbo9n4+WwRapcQ4KvFqLiOGBXXsVUeQy82mvHdsUvYe/SS64qwoiBgYI9gjImPRO/owCaFy+YKO7XyS6qwfX8GDvyS5zoTb2D3YPwlsSuiw3l460rtfftTWGbC1i/T8fO56ptxdgz2wQM3xaJ7lGdP3ZYz7NQqKjNjy5dprvcaFeKLv0+Ibdd/DDDseBjDzvWxWB3YczgLXxy8gEpzdQCJDvfDpFHd0K9rkEfPLGiusHO5glITvjt2Cd8fuwRjlQ0AIAjVH8KjB0Wib9cgWY+jO50STmaW4Nsj2ThyutAVEvx9tEga6Nlg1txhp1ZeSRW278vAgV9zXXt6BvWoDj2c0/Ob9rr9sTuc+N+hLHy27zysNifUKqH6KsXDoptlb0drCDtA9V6sH3/Nw7tfnUaFyQZBAP6Y0Am3jezWqGkAbR3Djocx7DSMze7At0cu4fMDGa5Q0DHYB7eP7Ir4niHNcvpkS4SdWnaHEz+lF+Cbn7KRllXqag/212P0oEgk9o9osev2SJKEjNxy/PhrHlJO5rn24gBAr04BGPuHKAzq4flDbi0VdmrlFFVi+/4MHDyR5wo9g3uF4C8juyEymPMW2uP258qzlXp1CsD9N/Vq1nksrSXs1DJWWfHentP48UQeACAkQI+pN8WiT5egFquhNWDY8TCGnauzO5z44XgOdhzIcM1zCQnQ4y+JXTGsTzhEsfn2erRk2LncpcJKfHs0G/t+znX9XkEAekT6Y0D3YAyI6YDIYB+PBjyrzYH0i6U4cb4ER84UIq+4yvWaj16NoX3CMGZQJCJDmu/U+ZYOO7Vyiirx6Q/ncehkPiQAAoChfcJwa2JXhAe13cnjTdWetj/FRjO27T2LA79Wf8AbvDX469juGN43vNmvQ9Pawk6tY2cKsfV/aa7tbmL/CNw9rnu7uRghw46HMezUz+5w4oefc/D5/gwU1fzPFuinwy0juiBxQESLTJ6TK+zUstgcSDmZh2+PZLsuXFarg0GP2OgAxET6o0u4HyI6+FzXrmZjlRVZeRXIyDXiZGYJ0q+4qrFWLWJgj2AM6xuOfl2DWmS85Qo7tS4WVODT78+7LvkvCMCIvuG4JbHrNa/JpEQajYiAAB+UllbCbq8ed6Vtsk0WO3YdzMT/UrJgtTtdE5AnjWq5Kwy31rADVI/Ptr1n8fVP2QCqr3I+aVQ3JPaPaNY/NFsDhh0PY9hxZ3c4sf+XXOzYn+G6GKC/rxYThkVj9MCOLXptGrnDzuUKS004fq4Ix84U4WRmSZ3bLQiovipxoJ8eAb5aeOnU0GlUEAQBDqcTFqsD5SYbyiqtKCgxua5BdLlAPx36dglC367Vt7xo6ftNyR12amXmluPTH87j6JlCANXX6RnaJwx/Hhbdbg5vOVAdtr30WpjMVkg1l0zQ69RQwuwNh9OJ747l4NPvz7kOi/eI8sffxvVo8Um5rTns1Dp9sRSbd51yHd7rHOqLu8f1QO/oQFnrak4MOx7GsFPNZnfiwK9XhByf6pCTNLAjtDJMkGtNYedyFpsDaRdKcCa7DGezjcjKr0CFyXbdywkL9HLdyLRv16B6r2rcklpL2Kl17pIRn3x/Dr+cL3a1DeoRjAnDoxV9M8Xaf4e0CyVQa9QwmaxwOCVo1CL6dAmSbb33hNo/pnb+mOm6MGBYoBfuGtMdg3oEy7L+t4WwA1Rvo7/+6SI+25fh2h4O7B6Mu8bEKPLaPJ4MO7xNMaHCZMM3P13EVz9lu+4tZfDRYsLQzkgaFNkuzwK4Fp1GhQExwRgQE+xqM1ZZkV9sQkmFBaUVFteNS4HqPRNajQq+Xhr4eWsQEuCFkAAvju01dOtowJy7B+J8jhGfH8jET+kFOHK6EEdOF6JnpwCMa6aJ2q2Fze6EJDhhtTlcF8Nsqyw2B747dglfHLzgurK2r5cGf0nsiqSBHRX7b+hJGrWIPw3pjBH9wvHZDxn45kg2jp4pxLEzhUjoHYpbRnRp1jl9bRnDTjuWXViJr3+6iH3Hc2CtSc2Bfjr8MaETRjPkXDeDtxaGy+727QBgrudQlVIOQ7SkrhEG/GNSf1wqrMSuHzPx44k8pGeVIj2rFAG+WoweGIlRAzvy/lutUH2XdvD31eLPQzojaWAkdFr+33C9/Ly1uPePPTEmPhLb9p7FkdOFSDmZj5ST+RjcKwQ3j+jCSzhcgWGnnbFYHUg5lYfvj+XgTPZvl/DvHOaLm4Z0xuDYUP6F5QGCIMBstuFERrHr1hkAFHEYQk4dg30w7eY+uH1UN3x79BK+O5qN0gorPvnhPLbvz0C/rkEY3q/6busM6/KxO5w4dqYQ3x69hBPni10X7Qz21+PPw6KR2D9cUfelk0vHYB/MvGMALuSVY8f+DKSmFbgevToFYEx8JOJ7hnCbDoaddsHucCLtQikOncpDysl81/2TREFAXPcOuHFwJ8R2DpB1rohS2exOtzkA5BlBBj0mjeqGW2/ogtS0fHx9OBtnsstw7GwRjp0tgk6rwh96hmBI71DEdg6UZb5Ze2OzO/BrRgl+SivAkdMFrguOAkDfrkEYPbBjm7kdS1vTOcwPj93eHxcLKqpDz6kCpGWVIi2rFAYfLUYOiMDIuI7t8ozGWgw7CmWzO3AysxSpafk4ku6+4QkN8MLIuAgk9o+AP3f7UxumVokY1iccw/qE41JhJX48kYsff81DYZkZ+3/Jxf5fcqFVi4iNDsSAmA4Y0K0DgtvxBt+TJElCXokJaRdKcDKzBMfOFrluGwPA9SE7Ki4SoYFe3JPZAqJCfPHoX/qheEzNbWWOXUJZhRWfH8jE5wcyER3mh8GxIUiIDUVoG775cWPIHnacTifWrl2L//73vzAajfjDH/6ARYsWITo6ut7+JSUlePHFF/Hdd98BAG666SY888wz8PZuX/9wV3I6JVzIL8eJjBKcyCjG6YtlbodP/Lw1iO8ZgiG9w9Crc4Cstz8gag4dg30waVQMbh/ZDWeyy/DjiTwcPV2IknILjp8twvGz1fcc6mDQISbSHzGR/uge6Y9Oob7c29AAVWYbsvIrcCG/Amezy5CWVYqyCqtbn0A/HQb1DEG/rkHoFukPVc11YCrMNs5Va0FBBj1uG9kNN4/ogqOnC/Ht0WyczCxBZl45MvPKsW3vOXQO9UXfbkHoHR2IHpEBip87JXvYWb9+Pd577z0sX74cYWFheO211/Dwww9jx44d0GrrXpp/1qxZsFgs2Lx5M4xGIxYsWIAlS5bglVdekaF6eUiShJJyC87nGHE+pxznc4zIyC13OzUbqL6pZXzPEAzuFYoenfyhErlBJ+UTBAE9ogLQIyoA943vieyCShw/V4TjZwpxJtuIIqMFRcbqyZxA9Zly4R28ERnsg47BPogM9kGwvxc6+Ovho1e3m8O7kiTBZHGguNyMwlIzCspMKCw1I7+kChcLKlwXFr2cWiWgW0d/9OoUgLjuweja0YAqix0nMorxS80NLQHOVZOLWiVicGwoBseGwlhpxU/pBTh0Kh+nLpTgQk1w3fXjBahEATEdDejRKQDRYX7oHO6HEH+9otZ9WcOO1WrFpk2b8NRTTyEpKQkAsGrVKowcORK7d+/GxIkT3fofOXIEKSkp2LlzJ2JiYgAAL7zwAh566CHMmTMHYWFhLf4emotTkmCstKLYaEGx0Yy8kirkFFUht7j665XBBgD0WhViOweiT5dA9O4ShI4yX7OFSG6CICAq1BdRob6YMCwaZqsd53PKcSa7DGculuFsdhmqLHZkF1Qiu6Dutba0GhEdDHoE+Org562Br9dvD71WDZ1WBa1ahE6jglajglYjQqtRQRSq58SJogBBEKq/FwWIggCh5jUJ1QFDklD9QO3z6htmVJhtqDTboLZLqDLZYHdK0NgcKCwzocpkh1NyQpKqrxNmd0hwOCXYHU44nNJlbU7YHNUXtDS7HnbXc5PFDmOlFeVVVpRV2upcKPNKHQx6dAr1RXS4H3p1CkC3jga3+VC12xvOVWt9DD5ajB4UidGDImGssuKXc9UXRz2ZWYJiowXpF8uQfvG3k1a8dWp0DvNFeJA3QgO9ERbohdBALwT7e7XJvUCyhp1Tp06hsrISw4YNc7UZDAb06dMHhw4dqhN2UlNTERIS4go6ADBkyBAIgoDDhw9jwoQJLVZ7Q9jsDlSZ7bDYnbBaHbDYHbDanLDYHLBYHag021Bhqn5UmmyoNNtRYbLBWGlFSbnlqtfVEAUBUSE+6BLhhy4RBnQNNyAq1Id7b4iuQq9Vo3d0oOuqs05JQnGZGdmFlbhUWInswkrkFFWiyGiBsdIKq82JnKIq11Vr2wMvnRohAXqE+HshOECPkAAvRAb7oFOoL7zbyT2ZlM7grcWIfhEY0S8CkiQhv9SEk5klyMipPsyVXVCBKosdpy6U4tSF0jo/76VTwd9HhwBfLQJ8dfDRa+ClV8Nbp4Z3zdfa77VqEb5eGtnnh8oadnJzcwEAERERbu2hoaHIycmp0z8vL69OX61Wi4CAgHr7N5QoCggKqv/qk7U7Rvz9vXA9e1/tDidKyy3w1WrQlEs81f41qFIJUItizVcBokpEe9hnIwjVf/WOHRLtNv6CUH3vKFEUruvfpaUIAuDvlBAa7Num6xYEQIAACVKrrrspgjv4ome34HpfczglOGsfUvVDkqrnyLnvman+Hpc/byaC6z/VTy7/vvZ5Tatr+yXU7lFC9dfa74XL9kBV73US0JSdwUpZ7y9vr77lC1pl3Z7SoYMveseEuLXZL9s76KjZc+hwOhs9Dt7eWuivc4/QtT5/r+feYLKGHZOp+lLhV87N0el0KCsrq7d/ffN4dDodLJa6x5MbSqgJE1cjXuceE5VKRFgH2adEKYZ3G5xAKopok9cSaat1NwcVh+G6tdX1p63W3VxUKhGt5Vzd6/38rXcZHqij0fR6PYDquTuXs1gs8PKqe3qoXq+v07e2f3s/G4uIiIjqJ2vYqT0klZ+f79aen5+P8PDwOv3Dw8Pr9LVarSgtLVXU5GQiIiLyHFnDTmxsLHx9fXHw4EFXm9FoxIkTJzB48OA6/RMSEpCbm4vMzExXW+3PxsfHN3/BRERE1ObIOqlEq9Xivvvuw4oVKxAUFITIyEi89tprCA8Px/jx4+FwOFBcXAw/Pz/o9XrExcUhPj4es2fPxuLFi1FVVYVFixbhtttu454dIiIiqpcgyXyFJ4fDgZUrV+Kjjz6C2WxGQkICFi5ciKioKFy8eBHjxo3D8uXLMWnSJABAUVERlixZgu+//x46nc51BWWdrrVMpSIiIqLWRPawQ0RERNSc2t75vERERETXgWGHiIiIFI1hh4iIiBSNYYeIiIgUjWGHiIiIFI1hh4iIiBSNYYeIiIgUjWHnOuTk5GDOnDm44YYbkJCQgGnTpuH06dNyl6VYTqcTa9aswciRIxEXF4cHH3zQ7VYh1HxKS0uxcOFCjBo1CvHx8Zg8eTJSU1PlLqtdOn/+PAYNGoSPPvpI7lLalU8++QQTJkxA//79MXHiROzatUvuktoNm82GVatWYfTo0Rg0aBDuuece/PTTT01aJsNOA1mtVjzyyCMoKirCP//5TyQnJ8PPzw9Tp05FcXGx3OUp0vr16/Hee+/hxRdfxPvvvw9BEPDwww/DarXKXZrizZkzB8eOHcPKlSvx4Ycfom/fvpg2bRrOnj0rd2ntis1mw9y5c1FVVSV3Ke3Kp59+imeffRZ33303duzYgQkTJmDOnDk4cuSI3KW1Cxs2bMC2bdvw4osv4pNPPkG3bt3w8MMPIy8vr9HLZNhpoNTUVKSnp+PVV19Fv3790KNHD7z66quoqqrC119/LXd5imO1WrFp0ybMnDkTSUlJiI2NxapVq5CXl4fdu3fLXZ6iZWZmYt++fVi0aBEGDx6Mbt26YcGCBQgLC8OOHTvkLq9defPNN+Hj4yN3Ge2KJEl44403MHXqVEydOhXR0dF4/PHHMWLECKSkpMhdXrvw1Vdf4eabb0ZiYiKio6Mxf/58VFRU4OjRo41eJsNOA/Xo0QNvvfVWnRuOSpKEsrIymapSrlOnTqGyshLDhg1ztRkMBvTp0weHDh2SsTLlCwwMxFtvvYV+/fq52gRB4Lrewg4dOoT3338fr7zyityltCvnzp1DdnY2brnlFrf2jRs3Yvr06TJV1b4EBATgm2++wcWLF+FwOPD+++9Dq9Wid+/ejV6mrHc9b0tCQkKQlJTk1rZlyxZYLBbccMMNMlWlXLm5uQCAiIgIt/bQ0FDk5OTIUVK7YTAY6qzru3btwoULF5CYmChTVe2L0WjE008/jeeee67O/wPUvDIyMgAAVVVVmDZtGk6cOIGoqCjMmDEDY8eOlbe4dmLBggWYPXs2xo0bB5VKBVEU8cYbb6Bz586NXib37NS4ePEievXq9buPgoICt/7/+9//sGrVKkyZMgWxsbEyVa1cJpMJAKDVat3adTodLBaLHCW1W4cPH8azzz6LcePGcWPfQhYvXoyBAwfW2btAza+iogIAMG/ePNx8883YtGkTbrjhBjz22GM4cOCAzNW1D2fPnoXBYMC6devw/vvvY9KkSZg3bx5OnTrV6GVyz06NsLAw7Ny583dfDwoKcj1/9913sXTpUkyYMAHPPPNMS5TX7uj1egDVc3dqnwOAxWKBl5eXXGW1O3v27MHcuXMRFxeHlStXyl1Ou/DJJ58gNTUV27dvl7uUdkmj0QAApk2bhttvvx0A0Lt3b5w4cQL//ve/MXz4cDnLU7zs7Gw89dRT2Lx5MwYPHgwA6N+/P86cOYM333wT69ata9RyGXZqaDQaxMTEXLPfihUr8K9//QtTpkzBggULIAhCC1TX/tTuus/Pz3fbdZmfn889aS3knXfewbJlyzB+/HisWLGizl42ah7btm1DUVERRo8e7da+aNEibNy4EZ9//rk8hbUT4eHhAICePXu6tXfv3h3ffvutDBW1L8ePH4fNZkP//v3d2uPi4vDdd981erkMO9fhtddew9tvv42nn34a06ZNk7scRYuNjYWvry8OHjzoCjtGoxEnTpzAfffdJ3N1ypecnIylS5diypQpePbZZyGKPOLdUlasWAGz2ezW9sc//hGzZs3ChAkTZKqq/ejTpw98fHxw7Ngx154FAEhPT2/SnBFqmNo/dNPS0jBgwABXe3p6OqKjoxu9XIadBjp48CDefvttTJkyBbfeeqvbHB5vb2+eHuphWq0W9913H1asWIGgoCBERkbitddeQ3h4OMaPHy93eYp2/vx5vPTSSxg/fjymT5+OoqIi12t6vR5+fn4yVqd8V57xWatDhw6IjIxs4WraH71ej4ceegjr1q1DWFgYBgwYgM8//xz79u3D5s2b5S5P8QYMGIDBgwdj3rx5WLRoEcLDw/HJJ5/gwIEDSE5ObvRyGXYaqPb6Ilu3bsXWrVvdXvvHP/6BmTNnylGWos2aNQt2ux3PPfcczGYzEhISsHHjRh5OaWZffvklbDYbdu/eXeeaRrfffjtefvllmSojahmPPfYYvLy8XNf2iomJwZtvvomhQ4fKXZriiaKI9evXY/Xq1XjmmWdQVlaGnj17YvPmzRg4cGCjlytIkiR5rkwiIiKi1oUH4omIiEjRGHaIiIhI0Rh2iIiISNEYdoiIiEjRGHaIiIhI0Rh2iIiISNEYdoiIiEjReFFBIqpjypQpSElJcWvTaDQIDg7GmDFj8MQTT8Df37/Jv2fs2LEYMmTIVS9UOH/+fKSkpODrr79u8u9rDlOmTAGAOhcbJaLWg2GHiOrVp08fLFq0yPW9zWbDr7/+ipUrV+LkyZN49913eSNcImoTGHaIqF6+vr51Ls+ekJCAyspKrFmzBseOHWvS5duJiFoK5+wQ0XXp168fAODSpUsAqg/jzJ07F7NmzUJ8fDweeeQRAEB5eTmWL1+OG2+8Ef3798fNN9+MDz/8sM7ybDYbXnzxRSQkJCAhIQHz5s1DcXHxVWv473//i4kTJ6Jfv34YPXo03nzzTdjtdtfr8+fPx7Rp0/DBBx/gxhtvxIABA/C3v/0N58+fxzfffINbbrkFcXFxuOuuu3Dy5Mmr/i6bzYZ169a5ljNx4kRs27btd/sXFxdjyZIlGDNmDPr164chQ4bg8ccfx8WLF119srKyMGPGDAwdOhRxcXG4++67sXfvXtfrFosFS5YswahRo9CvXz/cdNNN2LRp01XrJKLfxz07RHRdzp8/DwDo1KmTq23Xrl246aabsG7dOjgcDpjNZtxzzz0oLCzEzJkz0alTJ+zZswcLFixAYWEhHn30UbefHTBgAF5++WUUFxdjxYoVyMzMxHvvvVfv7//nP/+JVatW4b777sMzzzyDkydP4s0330ROTg5eeuklV7+jR48iPz8f8+fPh9lsxuLFi/HII49AEATMmjULoijipZdewty5c/H555//7vudN28evvrqK8yYMQNxcXH4/vvv8eyzz0KlUuG2225z6ytJEqZPn46ysjI8+eSTCAkJwcmTJ/HGG29g4cKF2LRpE5xOJ6ZPn46QkBC8+uqrUKvV2LJlCx577DHs3LkT0dHRWLZsGX744QfMmzcPwcHB+O677/DKK68gICAAkyZNasw/G1G7xrBDRPWSJMltb0lZWRlSUlKwYcMGDBw40LWHB6i+U/HSpUvh7e0NAEhOTkZ6ejqSk5Pxhz/8AQAwcuRI2O12rF+/Hn/7298QEBAAADAYDHj77bfh6+sLAAgMDMTjjz+OH374AYmJiW41lZeXY8OGDbj77rvx3HPPAQASExMREBCA5557Dn//+9/Ro0cPAEBFRQVWr16NmJgYAEBKSgref/99bN68GcOHDwcA5Obm4pVXXoHRaITBYKgzBqdPn8bnn3+OBQsW4P777wcADB8+HJcuXcLBgwfrhJ38/Hx4eXlh3rx5GDx4MABg6NChuHjxoiu8FRUV4ezZs3j00UeRlJQEABgwYADWrl0Li8XiqnXEiBGYOHGiaxne3t4IDAxswL8cEV2JYYeI6nXo0CH07dvXrU0URQwfPhxLly51m5wcFRXlCjpA9Yd1ZGSkK+jUuvXWW/Hhhx/i2LFjrg/6pKQkV9ABqs/Q0mg02L9/f52wc+TIEZhMJowdO9YtiI0dOxYAsG/fPlfY8ff3dwUdAAgJCQEAt3lGtYHr98JOamoqAGD8+PFu7atXr67TFwDCwsKwZcsWANWH+TIzM3H27Fn89NNPsNlsAIDg4GB0794dzz//PPbv349Ro0YhMTERzzzzjGs5Q4cOxXvvvYe8vDyMGTMGSUlJePzxx+v9nUR0bQw7RFSvvn37YsmSJQAAQRCg0+kQERHhFkxqBQcHu31fVlZWp+3yfkaj8Xd/VhRFBAQEuPWpVVpaCgCueUFXys/Pdz2vr04A8PLyqre9PrW/r0OHDg3+mc8++wwrV65ETk4OAgICEBsbC71e73pdEARs2rQJGzZswO7du/Hxxx9Do9HgxhtvxOLFixEQEIAFCxYgPDwcn332mevfYNCgQVi4cCH69OnT4FqIqBrDDhHVy8fHB/3792/Uz/r7+yMzM7NOe0FBAQC4HY65MtQ4HA6UlJTUGzBq976sWLECXbp0qfN6fQGrKWp/X3FxMcLDw13t586dQ3FxsetQVa3U1FTMmzcP9913H6ZNm+b6mVdffRWHDx929QsLC8PixYuxaNEinDp1Cl988QX+9a9/wd/fH0uWLIFWq8WMGTMwY8YMXLp0Cd988w3Wr1+PJ598Ert27fLoeyRqD3g2FhF5XEJCArKzs90+4IHqvR4ajQYDBgxwte3fv9/tkNSXX34Ju92OoUOH1lluXFwcNBoN8vLy0L9/f9dDo9Hg9ddfdzvjyRNqD8Pt2bPHrX3VqlVYunRpnf5HjhyB0+nErFmzXEHH4XBg//79AACn04kjR45gxIgROH78OARBQO/evTF79mz07NkTubm5MJvN+NOf/uQ6+6pjx4649957MXHiROTm5nr0/RG1F9yzQ0QeN2nSJCQnJ+Mf//gHZs2ahU6dOuHrr7/Gtm3b8I9//MNtfkztGVtTpkxBRkYGVq5ciRtuuME1ifhygYGBeOihh/DGG2+goqICQ4cORV5eHt544w0IgoDY2FiPvo/Y2FjcdNNNWLFiBcxmM/r27YsffvgBu3fvrnfeTm2Ie+GFF3DHHXfAaDTinXfewalTpwAAVVVV6NOnD/R6PZ5++mnMnDkTwcHB2L9/P06ePIn7778fer0effv2xdq1a6HRaNCrVy+cP38eH3/8Mf70pz959P0RtRcMO0TkcV5eXti6dStef/11rFmzBhUVFejWrRuWLVuGO++8063vX//6V5jNZjz++OPQarW45ZZb8NRTT/3u1ZmfeOIJhISEIDk5GW+//Tb8/f0xfPhwzJkzB35+fh5/L6+99hrWrl2LrVu3oqSkBF27dsXq1atx00031ek7dOhQLFy4EP/+97/xxRdfIDg4GEOHDsXatWvx+OOP4/Dhw0hKSsKmTZvw+uuvY9myZTAajejSpQteeOEF12nlL7zwAlavXo1NmzahoKAAHTp0wJ133on/83/+j8ffH1F7IEiSJMldBBEREVFz4ZwdIiIiUjSGHSIiIlI0hh0iIiJSNIYdIiIiUjSGHSIiIlI0hh0iIiJSNIYdIiIiUjSGHSIiIlI0hh0iIiJSNIYdIiIiUjSGHSIiIlI0hh0iIiJStP8P+baJdiSqafQAAAAASUVORK5CYII=", + "text/plain": [ + "<Figure size 640x480 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "sns.distplot((y_test),bins=50)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Decision Tree" + ] + }, + { + "cell_type": "code", + "execution_count": 124, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.tree import DecisionTreeClassifier" + ] + }, + { + "cell_type": "code", + "execution_count": 125, + "metadata": {}, + "outputs": [], + "source": [ + "dtree = DecisionTreeClassifier()" + ] + }, + { + "cell_type": "code", + "execution_count": 126, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<style>#sk-container-id-1 {color: black;}#sk-container-id-1 pre{padding: 0;}#sk-container-id-1 div.sk-toggleable {background-color: white;}#sk-container-id-1 label.sk-toggleable__label {cursor: pointer;display: block;width: 100%;margin-bottom: 0;padding: 0.3em;box-sizing: border-box;text-align: center;}#sk-container-id-1 label.sk-toggleable__label-arrow:before {content: \"▸\";float: left;margin-right: 0.25em;color: #696969;}#sk-container-id-1 label.sk-toggleable__label-arrow:hover:before {color: black;}#sk-container-id-1 div.sk-estimator:hover label.sk-toggleable__label-arrow:before {color: black;}#sk-container-id-1 div.sk-toggleable__content {max-height: 0;max-width: 0;overflow: hidden;text-align: left;background-color: #f0f8ff;}#sk-container-id-1 div.sk-toggleable__content pre {margin: 0.2em;color: black;border-radius: 0.25em;background-color: #f0f8ff;}#sk-container-id-1 input.sk-toggleable__control:checked~div.sk-toggleable__content {max-height: 200px;max-width: 100%;overflow: auto;}#sk-container-id-1 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {content: \"▾\";}#sk-container-id-1 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 input.sk-hidden--visually {border: 0;clip: rect(1px 1px 1px 1px);clip: rect(1px, 1px, 1px, 1px);height: 1px;margin: -1px;overflow: hidden;padding: 0;position: absolute;width: 1px;}#sk-container-id-1 div.sk-estimator {font-family: monospace;background-color: #f0f8ff;border: 1px dotted black;border-radius: 0.25em;box-sizing: border-box;margin-bottom: 0.5em;}#sk-container-id-1 div.sk-estimator:hover {background-color: #d4ebff;}#sk-container-id-1 div.sk-parallel-item::after {content: \"\";width: 100%;border-bottom: 1px solid gray;flex-grow: 1;}#sk-container-id-1 div.sk-label:hover label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 div.sk-serial::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: 0;}#sk-container-id-1 div.sk-serial {display: flex;flex-direction: column;align-items: center;background-color: white;padding-right: 0.2em;padding-left: 0.2em;position: relative;}#sk-container-id-1 div.sk-item {position: relative;z-index: 1;}#sk-container-id-1 div.sk-parallel {display: flex;align-items: stretch;justify-content: center;background-color: white;position: relative;}#sk-container-id-1 div.sk-item::before, #sk-container-id-1 div.sk-parallel-item::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: -1;}#sk-container-id-1 div.sk-parallel-item {display: flex;flex-direction: column;z-index: 1;position: relative;background-color: white;}#sk-container-id-1 div.sk-parallel-item:first-child::after {align-self: flex-end;width: 50%;}#sk-container-id-1 div.sk-parallel-item:last-child::after {align-self: flex-start;width: 50%;}#sk-container-id-1 div.sk-parallel-item:only-child::after {width: 0;}#sk-container-id-1 div.sk-dashed-wrapped {border: 1px dashed gray;margin: 0 0.4em 0.5em 0.4em;box-sizing: border-box;padding-bottom: 0.4em;background-color: white;}#sk-container-id-1 div.sk-label label {font-family: monospace;font-weight: bold;display: inline-block;line-height: 1.2em;}#sk-container-id-1 div.sk-label-container {text-align: center;}#sk-container-id-1 div.sk-container {/* jupyter's `normalize.less` sets `[hidden] { display: none; }` but bootstrap.min.css set `[hidden] { display: none !important; }` so we also need the `!important` here to be able to override the default hidden behavior on the sphinx rendered scikit-learn.org. See: https://github.com/scikit-learn/scikit-learn/issues/21755 */display: inline-block !important;position: relative;}#sk-container-id-1 div.sk-text-repr-fallback {display: none;}</style><div id=\"sk-container-id-1\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>DecisionTreeClassifier()</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-1\" type=\"checkbox\" checked><label for=\"sk-estimator-id-1\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">DecisionTreeClassifier</label><div class=\"sk-toggleable__content\"><pre>DecisionTreeClassifier()</pre></div></div></div></div></div>" + ], + "text/plain": [ + "DecisionTreeClassifier()" + ] + }, + "execution_count": 126, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dtree.fit(x_train,y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 127, + "metadata": {}, + "outputs": [], + "source": [ + "predictions = dtree.predict(x_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 128, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " precision recall f1-score support\n", + "\n", + " 0 0.99 0.99 0.99 531\n", + " 1 1.00 0.94 0.97 17\n", + " 2 0.99 0.98 0.98 527\n", + " 3 0.00 0.00 0.00 1\n", + " 4 0.79 0.96 0.87 24\n", + " 5 1.00 0.80 0.89 10\n", + " 6 0.99 0.99 0.99 667\n", + "\n", + " accuracy 0.99 1777\n", + " macro avg 0.82 0.81 0.81 1777\n", + "weighted avg 0.99 0.99 0.99 1777\n", + "\n" + ] + } + ], + "source": [ + "print(classification_report(y_test,predictions))" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}