diff --git a/CRM/Customer Churn Prediction/notebook.ipynb b/CRM/Customer Churn Prediction/notebook.ipynb index 4ef48e358b89d7df45815621859957ed64bab2c6..698e464af50e53fe910401defe3e689fc119b2ba 100644 --- a/CRM/Customer Churn Prediction/notebook.ipynb +++ b/CRM/Customer Churn Prediction/notebook.ipynb @@ -1,2220 +1,34 @@ { "cells": [ { + "attachments": {}, "cell_type": "markdown", "metadata": { "editable": true, + "include": true, + "paragraph": "BusinessUnderstanding", "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ - "## Geschäftsverständnis\n", - "Die Analyse zielt darauf ab, die Kundenabwanderung im Telekommunikationssektor vorherzusagen, um proaktiv Maßnahmen zur Kundenbindung zu ergreifen und potenzielle Abwanderungen zu minimieren. Dies trägt zur langfristigen Stabilität und Rentabilität des Unternehmens bei.\n", - "\n", - "## Datenverständnis\n", - "Im geschäftlichen Kontext basiert die Analyse auf dem Telco-Customer-Churn-Datensatz https://www.kaggle.com/datasets/blastchar/telco-customer-churn/suggestions?status=pending&yourSuggestions=true von Kaggle aus dem Jahr 2019, der von einem Telekommunikationsunternehmen bereitgestellt wurde und Kundenmerkmale sowie Vertragsinformationen umfasst, um die Kundenabwanderung vorherzusagen.\n", - "Der Datensatz enthält eine Vielzahl von Kundenattributen, darunter Vertragsdetails, demografische Merkmale und Service-Informationen. Mit insgesamt 21 Attributen bietet der Datensatz Einblicke in das Kundenverhalten und die Gründe für eine mögliche Abwanderung. Eine sorgfältige Analyse der Daten zeigt, dass die Dauer der Betriebszugehörigkeit (\"tenure\") und die Gesamtkosten (\"TotalCharges\") eine hohe positive Korrelation aufweisen, was darauf hinweist, dass Kunden mit längerer Betriebszugehörigkeit tendenziell höhere Gesamtkosten haben.\n", - "\n", - "## Datenaufbereitung\n", - "Die Datenaufbereitung ist ein kritischer Schritt, um sicherzustellen, dass die Daten für die Modellierung geeignet sind. \n", - "Dazu gehört die Reduzierung von Dimensionen, die Behandlung von fehlenden Daten und Ausreißern sowie die Umwandlung kategorialer Merkmale in numerische Werte. \n", - "Besonderes Augenmerk wird auch auf die Überprüfung von Multikollinearität gelegt, um sicherzustellen, dass die unabhängigen Variablen nicht stark miteinander korreliert sind.\n", - "\n", - "## Modellierung und Auswertung\n", - "\n", - "Für die Vorhersage der Kundenabwanderung wird eine logistische Regressionsanalyse durchgeführt. \n", - "Die logistische Regression ist ein leistungsstarkes statistisches Modell, das die Beziehung zwischen einer binären Zielvariable (in diesem Fall \"Churn\") und den unabhängigen Variablen modelliert. \n", - "Durch die Festlegung eines Schwellenwerts wird bestimmt, ob ein Kunde voraussichtlich abwandert oder nicht.\n", + "# 1. Business Understanding\n", "\n", - "## Bereitstellung \n", - "Das Modell hat das Potenzial, in bestehende Geschäftsprozesse integriert zu werden, um Unternehmen dabei zu unterstützen, proaktiv auf Kundenabwanderung zu reagieren. \n", - "Indem sie Kunden identifizieren, die voraussichtlich abwandern werden, können Unternehmen gezielte Maßnahmen ergreifen, um diese Kunden zu halten und die Kundenbindung zu stärken. \n", - "Dies kann dazu beitragen, Umsatzverluste zu minimieren und das langfristige Wachstum des Unternehmens zu fördern." + "Test Input Kundenabwanderung ist die Entscheidung eines Kunden, eine bestimmte Unternehmensdienstleistung nicht mehr zu kaufen. Sie stellt somit das Gegenstück zur langfristigen Kundenbindung dar. Um die Kundenbindung zu fördern, müssen Unternehmen Analysen einsetzen, die frühzeitig erkennen, ob ein Kunde das Unternehmen verlassen will. So können Marketing- und Vertriebsmaßnahmen eingeleitet werden, bevor es zum eigentlichen Kundenverlust kommt. In diesem Zusammenhang beantwortet der Service konkret diese beiden Fragen: Wie hoch ist die Wahrscheinlichkeit, dass anhand historischer Daten vorhergesagt werden kann, ob ein Kunde zu einem anderen Anbieter abwandert? Welche Faktoren führen zur Kundenabwanderung?" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": { + "editable": true, "include": true, - "paragraph": "BusinessUnderstanding" - }, - "source": [ - "# 1. Business Understanding\n", - "\n", - "Kundenabwanderung ist die Entscheidung eines Kunden, eine bestimmte Unternehmensdienstleistung nicht mehr zu kaufen. Sie stellt somit das Gegenstück zur langfristigen Kundenbindung dar. Um die Kundenbindung zu fördern, müssen Unternehmen Analysen einsetzen, die frühzeitig erkennen, ob ein Kunde das Unternehmen verlassen will. So können Marketing- und Vertriebsmaßnahmen eingeleitet werden, bevor es zum eigentlichen Kundenverlust kommt. In diesem Zusammenhang beantwortet der Service konkret diese beiden Fragen: Wie hoch ist die Wahrscheinlichkeit, dass anhand historischer Daten vorhergesagt werden kann, ob ein Kunde zu einem anderen Anbieter abwandert? Welche Faktoren führen zur Kundenabwanderung?" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 1. Business Understanding¶\n", - "Diese Fallstudie soll Technologieunternehmen bei der Entwicklung und Verbesserung von Komponenten für autonome Fahrzeuge unterstützen. Dabei wirft diese Fallstudie die Frage auf: In welchen Bereichen liegen die Schwächen der getesteten Systeme und wie lassen sich diese einordnen? Die Frage wird beantwortet, indem die Gründe für den Eingriff des menschlichen Testfahrers in das System klassifiziert werden. Dabei sollen die Gründe in verschiedene Kategorien eingeteilt werden:\n", - "- Software Probleme\n", - "- Hardware Probleme\n", - "- Software und Hardware Probleme (Probleme, die in Kombination auftreten)\n", - "- Probleme, die durch Objekte der Verkehrssteuerung verursacht werden (z. B. Fehlfunktionen von Lichtsignalanlagen)\n", - "- Probleme, die durch andere Verkehrsteilnehmer verursacht werden\n", - "- äußere Einflüsse (einschließlich z. B. Blockaden, verborgene Elemente, Wetter- und Straßenbedingungen)\n", - "- sonstige Probleme" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 2. Daten und Datenverständnis \n", - "Der zugrundeliegende Datensatz wurde von Kaggle bezogen und zeigt notwendige Eingriffe eines Fahrers in autonom fahrende Fahrzeugtechnologie. Er wurde vom 1. Dezember 2018 bis zum 30. November 2019 aufgezeichnet und steht unter der Lizenz von U.S. Government Works. Die Datenverarbeitung erfolgt mit Hilfe eines Jupyter-Notebooks, das in der populärsten Data-Science-Plattform \"Anaconda\" enthalten ist. Der Datensatz liegt im Format 8885 x 9 vor. Die folgenden Daten wurden erfasst:\n", - "- Hersteller\n", - "- Zulassungsnummer\n", - "- Datum\n", - "- Fahrzeug-Identifikationsnummer\n", - "- Möglichkeit des Betriebs ohne Fahrer\n", - "- Ist ein Fahrer vor Ort?\n", - "- Unterbrechung des autonomen Fahrens durch AV-System, Testfahrer, Fernsteuerung oder Beifahrer\n", - "- Ort des Vorfalls: Autobahn, Schnellstraße, Landstraße, Straße oder Parkplatz\n", - "- Beschreibung der Ursachen" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 2.1. Import von relevanten Modulen" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "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": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'1.3.4'" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "pd.__version__" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 2.2 Daten einlesen" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "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": null, - "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... " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "raw_data.head()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 2.3. Daten bereinigen" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "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": null, - "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 " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "raw_data.describe(include=\"all\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "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": [ - "## Fehlende Werte" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "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" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "raw_data.isnull().sum()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "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" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "data_no_mv=raw_data.dropna(axis=0)\n", - "data_no_mv.isnull().sum()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "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 " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "data_no_mv.describe(include='all')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Datenaufbereitung und Kennzeichnung" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Test Driver 6037\n", - "AV System 2698\n", - "Vehicle Operator 81\n", - "Test driver 68\n", - "Name: DISENGAGEMENT INITIATED BY, dtype: int64" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "data_no_mv['DISENGAGEMENT INITIATED BY'].value_counts()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "469" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "data_no_mv['FACTS CAUSING DISENGAGEMENT'].nunique()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "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... " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "data_no_mv.head()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "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: FACTS CAUSING DISENGAGEMENT, Length: 469, dtype: int64" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "data_no_mv['FACTS CAUSING DISENGAGEMENT'].value_counts()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Test Driver 6037\n", - "AV System 2698\n", - "Vehicle Operator 81\n", - "Test driver 68\n", - "Name: DISENGAGEMENT INITIATED BY, dtype: int64" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "data_no_mv['DISENGAGEMENT INITIATED BY'].value_counts()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "data_reduced = data_no_mv.loc[0:1999, :]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "<class 'pandas.core.frame.DataFrame'>\n", - "Int64Index: 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": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "92" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "data_reduced['FACTS CAUSING DISENGAGEMENT'].nunique()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/yassermurtada/opt/anaconda3/lib/python3.8/site-packages/pandas/util/_decorators.py:311: 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", - " return func(*args, **kwargs)\n" - ] - } - ], - "source": [ - "data_reduced.drop_duplicates(subset =\"FACTS CAUSING DISENGAGEMENT\", \n", - " keep = 'first', inplace = True) " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "data_reduced = data_reduced.reset_index()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "data_reduced['FACTS CAUSING DISENGAGEMENT'] = data_reduced['FACTS CAUSING DISENGAGEMENT'].astype('str')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "dtype('O')" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "data_reduced['FACTS CAUSING DISENGAGEMENT'].dtype" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import re" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "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": null, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/yassermurtada/opt/anaconda3/lib/python3.8/site-packages/pandas/core/indexing.py:1684: 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", - " self.obj[key] = infer_fill_value(value)\n", - "/Users/yassermurtada/opt/anaconda3/lib/python3.8/site-packages/pandas/core/indexing.py:1817: 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", - " self._setitem_single_column(loc, value, pi)\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": null, - "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": null, - "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": null, - "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": null, - "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": null, - "metadata": {}, - "outputs": [], - "source": [ - "Traffic_ctrl_keywords = [\"unstable target lane\", \"Traffic light error\", \"Stop sign error\"]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "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": null, - "metadata": {}, - "outputs": [], - "source": [ - "road_user_keywords = [\"reckless driver\", \"behaving road user\", \"other road user\"]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "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": null, - "metadata": {}, - "outputs": [], - "source": [ - "external_influences = [\"obstruction\", \"encroachment\", \"occluded view\", \"surface conditions\", \"wheater\"]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "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": null, - "metadata": {}, - "outputs": [], - "source": [ - "data_no_mv.loc[data_no_mv['Problem class'].isnull()\n", - " , 'Problem class'] = \"Other problems\" " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "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 " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "data_no_mv.head()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "ename": "NameError", - "evalue": "name 'data_reduced_classified' is not defined", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n", - "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)\n", - "\u001b[0;32m/var/folders/kh/bds3ggxd09gbnhkp6c414s9h0000gn/T/ipykernel_20061/3854068531.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n", - "\u001b[1;32m 2\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtitle\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Problems\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[1;32m 3\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mxticks\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrotation\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m45\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m----> 4\u001b[0;31m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbar\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdict\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mCounter\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata_reduced_classified\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'Problem class'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mkeys\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdict\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mCounter\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata_reduced_classified\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'Problem class'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalues\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0m\n", - "\u001b[0;31mNameError\u001b[0m: name 'data_reduced_classified' is not defined" - ] - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "<Figure size 432x288 with 1 Axes>" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from collections import Counter\n", - "plt.title(\"Problems\")\n", - "plt.xticks(rotation = 45)\n", - "plt.bar(dict(Counter(data_reduced_classified['Problem class'])).keys(), dict(Counter(data_reduced_classified['Problem class'])).values())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Klassifikationsmodell" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "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": null, - "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 " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "data_preprocessed.head()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "<class 'pandas.core.frame.DataFrame'>\n", - "Int64Index: 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": null, - "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>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>...</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>1</th>\n", - " <td>3</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>...</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2</th>\n", - " <td>3</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>...</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>3</th>\n", - " <td>6</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>...</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>4</th>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>...</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", - " <td>0</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 0 \n", - "1 3 0 \n", - "2 3 0 \n", - "3 6 0 \n", - "4 0 0 \n", - "\n", - " Manufacturer_Aurora Innovation, Inc. \\\n", - "0 0 \n", - "1 0 \n", - "2 0 \n", - "3 0 \n", - "4 0 \n", - "\n", - " Manufacturer_AutoX Technologies, Inc. Manufacturer_BMW of North America \\\n", - "0 0 0 \n", - "1 0 0 \n", - "2 0 0 \n", - "3 0 0 \n", - "4 0 0 \n", - "\n", - " Manufacturer_Baidu USA LLC Manufacturer_CRUISE LLC \\\n", - "0 0 0 \n", - "1 0 0 \n", - "2 0 0 \n", - "3 0 0 \n", - "4 0 0 \n", - "\n", - " Manufacturer_Drive.ai Inc Manufacturer_Lyft \\\n", - "0 0 0 \n", - "1 0 0 \n", - "2 0 0 \n", - "3 0 0 \n", - "4 0 0 \n", - "\n", - " Manufacturer_Mercedes-Benz Research & Development North America, Inc. ... \\\n", - "0 0 ... \n", - "1 0 ... \n", - "2 0 ... \n", - "3 0 ... \n", - "4 0 ... \n", - "\n", - " FACTS CAUSING DISENGAGEMENT_precautionary takeover to address planning, \\nprecautionary takeover to address perception, \\nother road user behaving poorly \\\n", - "0 0 \n", - "1 0 \n", - "2 0 \n", - "3 0 \n", - "4 0 \n", - "\n", - " FACTS CAUSING DISENGAGEMENT_precautionary takeover to address planning, \\nprecautionary takeover to address perception, AV made unsuccessful left turn \\\n", - "0 0 \n", - "1 0 \n", - "2 0 \n", - "3 0 \n", - "4 0 \n", - "\n", - " FACTS CAUSING DISENGAGEMENT_precautionary takeover to address planning, \\nprecautionary takeover to address perception, third party lane encroachment \\\n", - "0 0 \n", - "1 0 \n", - "2 0 \n", - "3 0 \n", - "4 0 \n", - "\n", - " FACTS CAUSING DISENGAGEMENT_precautionary takeover to address planning, \\nprecautionary takeover to address perception, third party lane obstruction \\\n", - "0 0 \n", - "1 0 \n", - "2 0 \n", - "3 0 \n", - "4 0 \n", - "\n", - " FACTS CAUSING DISENGAGEMENT_precautionary takeover to address planning, AV lane change issues \\\n", - "0 0 \n", - "1 0 \n", - "2 0 \n", - "3 0 \n", - "4 0 \n", - "\n", - " FACTS CAUSING DISENGAGEMENT_precautionary takeover to address planning, AV made unsuccessful left turn \\\n", - "0 0 \n", - "1 0 \n", - "2 0 \n", - "3 0 \n", - "4 0 \n", - "\n", - " FACTS CAUSING DISENGAGEMENT_precautionary takeover to address planning, other road user behaving poorly \\\n", - "0 0 \n", - "1 0 \n", - "2 0 \n", - "3 0 \n", - "4 0 \n", - "\n", - " FACTS CAUSING DISENGAGEMENT_precautionary takeover to address planning, third party lane encroachment \\\n", - "0 0 \n", - "1 0 \n", - "2 0 \n", - "3 0 \n", - "4 0 \n", - "\n", - " FACTS CAUSING DISENGAGEMENT_precautionary takeover to address planning, third party lane obstruction \\\n", - "0 0 \n", - "1 0 \n", - "2 0 \n", - "3 0 \n", - "4 0 \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 0 \n", - "1 0 \n", - "2 0 \n", - "3 0 \n", - "4 0 \n", - "\n", - "[5 rows x 4538 columns]" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "data_with_dummies = pd.get_dummies(data_preprocessed, drop_first=True)\n", - "data_with_dummies.head()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "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" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "data_with_dummies.isnull().sum()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "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": null, - "metadata": {}, - "outputs": [], - "source": [ - "target = data_with_dummies['Problem class']\n", - "inputs = data_with_dummies.drop(['Problem class'],axis=1)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "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": null, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/yassermurtada/opt/anaconda3/lib/python3.8/site-packages/seaborn/distributions.py:2619: FutureWarning: `distplot` is a deprecated function and will be removed in a future version. Please adapt your code to use either `displot` (a figure-level function with similar flexibility) or `histplot` (an axes-level function for histograms).\n", - " warnings.warn(msg, FutureWarning)\n" - ] - }, - { - "data": { - "text/plain": [ - "<AxesSubplot:xlabel='Problem class', ylabel='Density'>" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYQAAAEJCAYAAACUk1DVAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAAApvUlEQVR4nO3deXxU9b3/8ddk3xMIk4UEgiyFiOy7IogKEQNFU7SoLVavVH1Y4/VxxfpDir24YIUr6uW6XB7c9qG19xZZjLQFoaICBgtGWSIBEQyQhSQkhCyTmWRmzu+PTKYEAkmAmUnI+/l45AHfc2b5nDNz5n3O95z5jskwDAMREeny/HxdgIiIdAwKBBERARQIIiLiokAQERFAgSAiIi4KBBERARQIIiLiEuDrAi7H6dO1OJ3Nv0YRGxtBeXmNjyryva6+/KB1AFoHoHXQ0vL7+Zno1i38gvfp1IHgdBrnBULT9K6sqy8/aB2A1gFoHbR3+dVlJCIigAJBRERcFAgiIgIoEERExEWBICIigAJBRERcFAgiIgJ08u8hiIg0sTvB1mB3t0Ms9T6spnNSIIjIVcHWYGd3Xom7PXlUb0w+rKczUpeRiIgACgQREXFRIIiICODhQHj99de5/fbbSU9P5/e///158/Py8sjIyCAtLY1nn30Wu93ewqOIiIg3eCwQdu3axZdffslHH33E2rVree+99zh69Giz28yfP59Fixbx8ccfYxgGq1ev9lQ5IiLSCo8FwtixY3n33XcJCAigvLwch8NBWFiYe35hYSFWq5Xhw4cDkJGRwaZNmzxVjoiItMKjXUaBgYG88cYbpKenM2HCBOLj493zSktLMZvN7rbZbKakpKSlhxERES/w+PcQMjMzmTdvHo888girV6/mpz/9KQBOpxOT6Z9XCRuG0azdFrGxES1ON5sjL73gq0BXX37QOoCutw6MCguRESHNpnW1dXCu9i6/xwLhyJEj1NfXk5qaSmhoKNOmTePQoUPu+QkJCZSVlbnbp06dIi4url3PUV5ec94vApnNkZSVVV9e8Z1YV19+0DqArrkOLDY71TXWZtO62jo4W0vvAT8/0wV3pMGDXUYFBQUsXLiQ+vp66uvr+eSTTxg1apR7flJSEsHBweTk5ACQlZXFpEmTPFWOiIi0wmOBMHnyZG666SbuuOMOfvKTnzBixAjS09OZN28e+/fvB2DZsmUsWbKE2267DYvFwty5cz1VjoiItMJkGEan/RVqdRmdr6svP2gdQNdcB7W2FsYycjh8WJFvdaguIxER6VwUCCIiAigQRETERYEgIiKAAkFERFwUCCIiAigQRETERYEgIiKAAkFERFwUCCIiAigQRETERYEgIiKAAkFERFwUCCIiAigQRETERYEgIiKAAkFERFwUCCIiAigQRETERYEgIiKAAkFERFwUCCIiAigQRETERYEgIiIABHjywVesWMHGjRsBmDx5Mk8//fR589euXUtUVBQAd999N/fdd58nSxIRkQvwWCBkZ2ezY8cO1q9fj8lk4qGHHmLLli1MnTrVfZvc3FxeffVVRowY4akyRESkjTwWCGazmWeeeYagoCAA+vXrR1FRUbPb5Obm8s4771BYWMiYMWP49a9/TXBwsKdKEhGRi/DYOYQBAwYwfPhwAPLz89m4cSOTJ092z6+trSU1NZX58+ezfv16qqqqePPNNz1VjoiItMJkGIbhySc4fPgwDz/8MI8//jh33nnnBW934MABFixYwIcffujJcq561ZZ66qx2dzs0JIDIsCAfViTiHaUVFr4+VOpujxwYR1z3MB9W1Pl49KRyTk4OmZmZLFiwgPT09GbzioqKyM7OZvbs2QAYhkFAQPvKKS+vwelsnmdmcyRlZdWXV3gnZvj783nOcXd7TGo81lqbDyvyvq7+HoCuuQ4sNjvVNdZm07raOjhbS+8BPz8TsbERF7yPx7qMiouLeeyxx1i2bNl5YQAQEhLC0qVLOXHiBIZh8P777zc74SzSXnYn1NrslFZYsDt9XY1I5+OxI4RVq1Zhs9l4+eWX3dPmzJnD1q1byczMZMiQISxevJhHH32UhoYGRo4cyQMPPOCpcqQLsDXY2Z1XQmRECIN6RRMQ7NEDYJGrjsfPIXiSuozO11KXUXgX+WCstTUPhK6y3C3pittB0+vfZPKo3pgcDh9W5FsdqstIREQ6FwWCiIgACgQREXFRIIiICKBAEBERFwWCiIgACgQREXFRIIiICKBAEBERFwWCiIgACgQREXFRIIiICKBAEBERFwWCiIgACgQREXFRIIiICKBAEBERFwWCiIgACgQREXFRIIiICKBAEBERFwWCiIgACgQREXFRIIiICODhQFixYgXp6emkp6fzyiuvnDc/Ly+PjIwM0tLSePbZ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eatOERHxsIsGwrvvvssf/vAHevbs6Z7Wr18/hg0bxoIFCxQIIiJXkYueQ6itrW0WBk2uueYafZFMROQqc9FA8Pf3v+A8wzAuOE9ERDqfS/8ygYiIXFUueg7h0KFDjBw58rzphmFQX1/vsaJERMT7LhoIW7Zs8VYdIiLiYxcNhKSkJG/VISIiPqZzCCIiAigQRETERYEgIiKAAkFERFwUCCIiAigQRETERYEgIiKAAkFERFwUCCIiAigQRETERYEgIiKAAkFERFwUCCIiAigQRETERYEgIiKAAkFERFw8Ggg1NTXMmDGDgoKC8+bl5eWRkZFBWloazz77LHa73ZOliIhIKzwWCHv37uWee+4hPz+/xfnz589n0aJFfPzxxxiGwerVqz1VioiItIHHAmH16tU899xzxMXFnTevsLAQq9XK8OHDAcjIyGDTpk2eKkVERNrgor+pfDlefPHFC84rLS3FbDa722azmZKSEk+VIiIibeCxQLgYp9OJyWRytw3DaNZuq9jYiBanm82Rl1xbZ1daYSEyIsTdDgsLxtw9zIcVeY9x1rJ3peW+kK62HRjnvPeh662Dc7V3+X0SCAkJCZSVlbnbp06darFrqTXl5TU4nUazaWZzJGVl1ZddY6fl7091jdXdtFhslDkcPizIeyw2O9U1ViIjQrrUcrekK24HTa//2braOjhbS+8BPz/TBXekwUeXnSYlJREcHExOTg4AWVlZTJo0yReliIiIi1cDYd68eezfvx+AZcuWsWTJEm677TYsFgtz5871ZikiInIOj3cZbd261f3/lStXuv8/aNAg1qxZ4+mnFxGRNtI3lUVEBFAgiIiIiwJBREQABYKIiLgoEEREBFAgiIiIiwJBREQABYKIiLgoEEREBFAgiIiIiwJBREQABYKIiLgoEEREBFAgiIiIiwJBREQABYKIiLgoEEREBFAgiIiIiwJBREQABYKIiLgoEEREBFAgiIiIiwJBREQABYKIiLgoEEREBPBwIGzYsIHbb7+dadOm8f777583f8WKFUyZMoVZs2Yxa9asFm8jIiLeEeCpBy4pKWH58uWsW7eOoKAg5syZw7hx4+jfv7/7Nrm5ubz66quMGDHCU2WIiEgbeewIITs7m/HjxxMTE0NYWBhpaWls2rSp2W1yc3N55513mDlzJosXL8Zms3mqHBERaYXHjhBKS0sx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Upp9uQ5gz549LF26lPr6esrKyrj++ut56aWXsNvtPP/883z99dcEBgaSnJzMkiVLCA4ObnF6eHi4Z1a4XDXUZSRXnW+++Ybjx4+7hz3+/vvvee+993jvvfdYu3Yt27dvZ82aNWzYsIEBAwY0+yGZ2tpaVq9ezerVq/noo4/4/PPPmz32hx9+yHfffccHH3xAVlYWkydPZuHChe75hYWF/N///R9Lly5l6dKljB07lnXr1nHjjTfyxz/+8bxaP/nkE9atW8ef//xn/vKXv5CcnHze7d59910yMzP54IMP+Otf/8rWrVvJzc1lz5497Nq1i48++oh169bRq1cvDh06dMHpIq3REYJ0elar1T3sucPhoFu3bixdupTExESg8XcxIiIiANi2bRsZGRmEhYUBMHfuXN5++23q6+sBmD17NgEBAURERJCWlkZ2djb9+vVzP9enn37K/v373cMhNI0732Tq1KkA9OrVC4Abb7wRgN69e7Nr167zat+5cye33Xabe4jm//f//h/QeA6hycsvv8y2bdt4++23OXr0KDabDYvFwqBBg/D39+euu+5i4sSJpKWlMXToUKqqqlqcLtIaBYJ0eueeQzhX04c/nD9MuNPpxG63u9v+/v7u/xuGQUBA803E6XS6x8qBxqHWz5w5455/7oCKrY226+/v36yeqqoqqqqqmt3mZz/7GQMHDuTGG29k+vTp7N27F8MwiIqKIisri6+//povv/ySf/3Xf+Vf/uVfuO+++y44XeRi1GUkXcqNN97I2rVrsVgsALz33nuMGTPG/UH+4YcfYhgGZ86cYePGje49/CYTJ05kzZo11NTUAPD666/z9NNPX3I9119/PVu2bHE/3n/+53/yhz/8wT2/qqqK/fv389RTTzFt2jROnjzJ8ePHcTqdfPrpp/ziF79gxIgRPP7449xxxx3k5uZecLpIa3SEIF3K7NmzKS4u5q677sLpdJKSksKyZcvc8yMjI8nIyMBqtfKzn/2M8ePHU1BQ4J5/1113UVJSwt13343JZCIxMfG8k8DtMXnyZL7//nv3qKz9+/fn+eefZ/PmzQBERUXxy1/+kjvvvJOwsDDi4+MZOXIkx44d46677mLbtm3MmDGDsLAwoqOjef7550lMTGxxukhrNNqpiIgA6jISEREXBYKIiAAKBBERcVEgiIgIoEAQEREXBYKIiAAKBBERcVEgiIgIAP8f4ej3zc5nA2oAAAAASUVORK5CYII=", - "text/plain": [ - "<Figure size 432x288 with 1 Axes>" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "sns.distplot((y_test),bins=50)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### K-Nearest Neighbors" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from sklearn.neighbors import KNeighborsClassifier" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Text(0, 0.5, 'Error Rate')" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAm8AAAGECAYAAABgXcdUAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAABm7UlEQVR4nO3deZzNdf//8cfZZjOKNIMvJUtxZUmMjG1UZMrehLryiwihUipFNFeKS6RLtExl66q4UIlkvShbRhmVLSkqShpjZJl9zjmf3x/nMlFmn7M/77dbt5z5nOX1ns+Z83md9/J6mwzDMBARERERv2D2dgAiIiIiUnJK3kRERET8iJI3ERERET+i5E1ERETEjyh5ExEREfEjSt5ERERE/IjV2wGISOBo2LAh11xzDWbzhd8LX331VWrXru2R1zWZTGRnZxMZGckzzzxD06ZNi3zse++9R15eHv3793dbfEV5+eWX+f3330lMTAQgLy+Pxx9/nBMnTpCUlMSll15acN977rmHDh06MGzYsAueY968eezYsYOkpKQSvYaI+DclbyJSof79739z2WWXef11586dy6RJk1i8eHGRj9u5cydXX321u8MrkaysLB566CHCwsKYP38+oaGhFxy/++67eemll/6SvC1ZsoQJEyZ4MlQR8SIlbyLiEZ9//jmTJ08mIiKCzMxMnnjiCV544YWC2x988AEffvgh77zzDmazmcsvv5ynn36aunXrMnbsWE6dOsXPP//MjTfeyJgxY4p8LbvdzrFjxwp6rU6cOEFiYiLp6emkpaVRq1YtXnrpJb788ks++eQTPvvsM8LCwujfvz9JSUmsW7cOp9NJrVq1+Mc//kH16tUveP677rqLQYMGER8fD8ALL7wAwL333suTTz7J77//DkDHjh155JFHSvT7OX36NPfffz+NGjUiMTHxL72XALfccgv//Oc/SUlJISYmBoAvvvgCwzBo164dr7/+Ohs2bCAnJ4fs7GyefPJJbrnllgue4+abb2bmzJkFPZLn3/7yyy+ZPn062dnZmM1mHnzwQW666SbS0tLK3C4RqXhK3kSkQg0cOPCCxKN27dq8+uqrAHz//fesX7+eWrVq8fnnn19wOzk5mTlz5rB48WIuu+wyli5dygMPPMDKlSsByMnJKfh3Ya8L8PvvvxMaGspNN93ElClTAFi5ciXNmzdn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fPnyguNjxoyhTp06vPTSS4SEhBQ8plGjRqxfvx6An376iePHj1O3bl13NUFERKSAtsQTX2EyDMNtXVErVqzgjTfeID8/nz59+jB06FCGDh3KqFGjaNq0Kd9++y0TJkwgIyODxo0bM2XKFA4ePMjtt99OgwYNsFpdHYPR0dHMnj2bn376icTERE6ePElISAiPP/44bdu2LXE86nlzr2BuOwR3+9X24Gw7BHf7g7ntENzt93bPm1uTN1+j5M29grntENztV9uDs+0Q3O0P5rZDcLff28mbqgmKiIiI+BElbyIiIiJ+RMmbiIiIiB9R8iYiIiLiR5S8iYiIiPgRJW8iIiIifsRtOyz4IrPZVPyd/Oh1fFEwtx2Cu/1qe/AK5vYHc9shuNvvzrYX99xBVedNRERExN9p2FRERETEjyh5ExEREfEjSt5ERERE/IiSNxERERE/ouRNRERExI8oeRMRERHxI0reRERERPyIkjcRERERP6LkTURERMSPKHmrQBkZGXTv3p1ffvnF26F41CuvvEK3bt3o1q0b06ZN83Y4Hjdz5ky6du1Kt27dmD9/vrfD8YqpU6cyduxYb4fhcffccw/dunWjV69e9OrVi127dnk7JI/55JNPSEhI4LbbbmPSpEneDsej3nvvvYJz3qtXL1q2bMmzzz7r7bA8Zvny5QWf+VOnTvV2OB715ptvEh8fT48ePUhKSvJeIIZUiK+//tro3r270bhxY+Pnn3/2djge89lnnxl33nmnkZuba+Tl5RkDBgww1q1b5+2wPObzzz837rrrLiM/P9/Izs42brrpJuPQoUPeDsujtm3bZrRu3dp48sknvR2KRzmdTqN9+/ZGfn6+t0PxuCNHjhjt27c3jh07ZuTl5Rl///vfjY0bN3o7LK/47rvvjFtuucVIT0/3digekZWVZbRq1cpIT0838vPzjT59+hifffaZt8PyiM8++8zo3r27cfbsWcNutxv333+/sXbtWq/Eop63CrJkyRL+8Y9/EB0d7e1QPCoqKoqxY8cSEhKCzWajfv36/Prrr94Oy2NuuOEG3n77baxWK+np6TgcDiIiIrwdlsecOnWKGTNmMHz4cG+H4nE//PADAIMHD6Znz568++67Xo7Ic/773//StWtXatSogc1mY8aMGVx33XXeDssrnnnmGUaPHs1ll13m7VA8wuFw4HQ6yc7Oxm63Y7fbCQ0N9XZYHvHNN9/Qvn17IiMjsVgsdOjQgfXr13slFiVvFWTy5MnExMR4OwyPu/rqq2nevDkAP/30E6tXr6Zjx47eDcrDbDYbs2bNolu3brRp04bq1at7OySPSUxMZPTo0VxyySXeDsXjzpw5Q5s2bXj11Vd56623WLRoEZ999pm3w/KIw4cP43A4GD58OL169WLhwoVceuml3g7L47Zt20ZOTg633Xabt0PxmMjISB5++GFuu+02OnbsSK1atWjRooW3w/KIxo0bs3XrVk6dOkVubi6ffPIJJ06c8EosSt6kQnz//fcMHjyYJ554gquuusrb4XjcqFGjSE5O5tixYyxZssTb4XjEe++9R82aNWnTpo23Q/GK66+/nmnTplG5cmUuu+wy+vTpw6ZNm7wdlkc4HA6Sk5P55z//yeLFi9m9ezcffviht8PyuEWLFjFo0CBvh+FR3377LR988AGffvopW7ZswWw2M3fuXG+H5RFt2rQhISGBe+65hyFDhtCyZUtsNptXYlHyJuW2c+dO7r33Xh577DFuv/12b4fjUYcOHWL//v0AhIeH06VLFw4cOODlqDxj1apVfPbZZ/Tq1YtZs2bxySef8M9//tPbYXlMSkoKycnJBbcNw8BqtXoxIs+5/PLLadOmDZdddhlhYWF07tyZ3bt3ezssj8rLy2PHjh3cfPPN3g7Fo7Zu3UqbNm2oVq0aISEhJCQk8MUXX3g7LI/IyMigS5curFixgnfeeYeQkBCuuOIKr8Si5E3K5dixYzzwwANMnz6dbt26eTscj/vll1+YMGECeXl55OXlsWHDBlq2bOntsDxi/vz5fPzxxyxfvpxRo0Zx880389RTT3k7LI85e/Ys06ZNIzc3l4yMDD788ENuueUWb4flETfddBNbt27lzJkzOBwOtmzZQuPGjb0dlkcdOHCAq666KqjmuAI0atSIbdu2kZWVhWEYfPLJJzRt2tTbYXnEL7/8wsiRI7Hb7Zw9e5b333/fa0PmwfE1Udxm7ty55Obm8vzzzxf87K677uLvf/+7F6PynI4dO7J792569+6NxWKhS5cuQZnEBqObbrqJXbt20bt3b5xOJ3fffTfXX3+9t8PyiOuuu44hQ4Zw9913k5+fT7t27bjjjju8HZZH/fzzz9SoUcPbYXhc+/bt+eabb0hISMBms9G0aVOGDRvm7bA8olGjRnTp0oWePXvicDi49957vfZl3WQYhuGVVxYRERGRUtOwqYiIiIgfUfImIiIi4keUvImIiIj4ESVvIiIiIn5EyZuIiIiIH1HyJiJSSr/88stfyoKsWrWK1q1bX1C4V0TEHVTnTUSknBYtWsRrr73GW2+9xd/+9jdvhyMiAU7Jm4hIObz55pssXbqUhQsXUrt2bW+HIyJBQMOmIiJlNG3aNF588UXuueceJW4i4jFK3kREyiArK4vvvvuON998kxdffJFvvvnG2yGJSJBQ8iYiUgZhYWEkJSXRsWNH7r//fh588EFOnTrl7bBEJAgoeRMRKQOz2YzNZgNg2LBhNGjQgMceewyn0+nlyEQk0Cl5ExEpJ5PJxNSpUzl06BAvvfSSt8MRkQBnMgzD8HYQIiIiIlIy6nkTERER8SNK3kRERET8iJI3ERERET+i5E1ERETEjyh5ExEREfEjSt5ERERE/IiSNxERERE/ouRNRERExI/8f9X2unm6ViELAAAAAElFTkSuQmCC", - "text/plain": [ - "<Figure size 720x432 with 1 Axes>" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "error_rate = []\n", - " \n", - "for i in range(1,10):\n", - " \n", - " KNN_model = KNeighborsClassifier(n_neighbors=i)\n", - " KNN_model.fit(x_train,y_train)\n", - " KNN_prediction = KNN_model.predict(x_test)\n", - " error_rate.append(np.mean(KNN_prediction != y_test)) #nur Fehler berücksichtigen\n", - "\n", - "plt.figure(figsize=(10,6))\n", - "plt.plot(range(1,10),error_rate,color='blue', linestyle='dashed', marker='o',\n", - " markerfacecolor='red', markersize=10)\n", - "plt.title('Error Rate vs. K Values')\n", - "plt.xlabel('K')\n", - "plt.ylabel('Error Rate')\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "KNN_model = KNeighborsClassifier(n_neighbors=3)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "KNeighborsClassifier(n_neighbors=3)" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "KNN_model.fit(x_train, y_train)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "KNN_prediction = KNN_model.predict(x_test)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0.9712999437253799" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "accuracy_score(KNN_prediction, y_test)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " precision recall f1-score support\n", - "\n", - " 0 0.98 0.97 0.97 538\n", - " 1 0.82 0.82 0.82 17\n", - " 2 0.97 0.97 0.97 530\n", - " 3 0.00 0.00 0.00 0\n", - " 4 0.83 0.74 0.78 27\n", - " 5 0.70 1.00 0.82 7\n", - " 6 0.98 0.99 0.98 658\n", - "\n", - " accuracy 0.97 1777\n", - " macro avg 0.76 0.78 0.77 1777\n", - "weighted avg 0.97 0.97 0.97 1777\n", - "\n" - ] + "paragraph": "DataUnderstanding", + "slideshow": { + "slide_type": "" }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/yassermurtada/opt/anaconda3/lib/python3.8/site-packages/sklearn/metrics/_classification.py:1308: UndefinedMetricWarning: Recall and F-score are ill-defined and being set to 0.0 in labels with no true samples. Use `zero_division` parameter to control this behavior.\n", - " _warn_prf(average, modifier, msg_start, len(result))\n", - "/Users/yassermurtada/opt/anaconda3/lib/python3.8/site-packages/sklearn/metrics/_classification.py:1308: UndefinedMetricWarning: Recall and F-score are ill-defined and being set to 0.0 in labels with no true samples. Use `zero_division` parameter to control this behavior.\n", - " _warn_prf(average, modifier, msg_start, len(result))\n", - "/Users/yassermurtada/opt/anaconda3/lib/python3.8/site-packages/sklearn/metrics/_classification.py:1308: UndefinedMetricWarning: Recall and F-score are ill-defined and being set to 0.0 in labels with no true samples. Use `zero_division` parameter to control this behavior.\n", - " _warn_prf(average, modifier, msg_start, len(result))\n" - ] - } - ], - "source": [ - "print(classification_report(KNN_prediction, y_test))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Entscheidungsbaum" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from sklearn.tree import DecisionTreeClassifier" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "dtree = DecisionTreeClassifier()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "DecisionTreeClassifier()" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "dtree.fit(x_train,y_train)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "predictions = dtree.predict(x_test)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "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 0.94 1.00 0.97 17\n", - " 2 0.99 0.98 0.99 527\n", - " 3 1.00 1.00 1.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.96 0.96 0.96 1777\n", - "weighted avg 0.99 0.99 0.99 1777\n", - "\n" - ] - } - ], - "source": [ - "print(classification_report(y_test,predictions))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "include": true, - "paragraph": "DataUnderstanding" + "tags": [] }, "source": [ "# 2. Daten und Datenverständnis\n", @@ -6025,10 +3839,11 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.9" + "version": "3.12.3" }, + "skipNotebookInDeployment": false, "title": "Customer Churn Prediction", - "teaser": "In diesem Praxisbeispiel können Sie mithilfe eines Machine-Learning-Modells präzise vorhersagen, ob ein Kunde mit dem Service eines Luftfahrtunternehmens zufrieden sein wird, indem Sie Kundenzufriedenheitsdaten analysieren." + "teaser": "In diesem Praxisbeispiel können Sie mithilfe des Machine Learning Models herausfinden, wie Sie die Kundenabwanderung in der Telekommunikationsbranche präzise vorhersagen und proaktiv darauf reagieren können. " }, "nbformat": 4, "nbformat_minor": 4