Wichtige Hinweise

  • Aktivieren Sie die Conda-Umgebung bevor Sie beginnen.

  • Geben Sie als NAME ihr HdM-Kürzel an.

  • Ändern Sie nicht den Namen der Datei und löschen Sie keine Zellen.

  • Bearbeiten Sie alle Zellen mit dem Hinweis # YOUR CODE HERE

  • Die Funktion NotImplementedError() soll die Abgabe von leeren Zellen verhindern. Löschen Sie die Funktion, sobald Sie in einer dieser Zellen arbeiten.

  • Stellen Sie sicher, dass alles wie erwartet läuft, bevor Sie die Prüfung abgeben: Starten Sie den Kernel neu und führen Sie alle Zellen aus: wählen Sie “Restart” und dann “Run All”

Ich wünsche Ihnen viel Erfolg!

NAME = "jk123"
import IPython
assert IPython.version_info[0] >= 3, "Your version of IPython is too old, please update it."

E-Exam Notebook#

Setup#

Importieren Sie die Bibliotheken (Sie werden nicht alle benötigen):

# Nehmen Sie keine Änderungen an dieser Zelle vor

import pandas as pd
import altair as alt
alt.renderers.enable('mimetype')

# Scikit-learn Bibliotheken

from sklearn.tree import DecisionTreeClassifier
from sklearn.tree import DecisionTreeRegressor

from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import RandomForestRegressor

from sklearn.ensemble import GradientBoostingClassifier
from sklearn.ensemble import GradientBoostingRegressor

from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, confusion_matrix
from sklearn.metrics import ConfusionMatrixDisplay
from sklearn.metrics import classification_report
from sklearn.metrics import RocCurveDisplay
from sklearn.metrics import mean_squared_error
from sklearn.metrics import mean_absolute_error
from sklearn.metrics import r2_score

# Weitere Hilfsbibliotheken
import io
import warnings
warnings.simplefilter(action='ignore', category=FutureWarning)

1) Daten#

Daten importieren#

  • Importieren Sie die Daten:

LINK = "https://raw.githubusercontent.com/kirenz/datasets/master/mini_test_drives.csv"

df = pd.read_csv(LINK)

Verschaffen Sie sich eine Übersicht über die Daten:

df.head()
campaign spendings test_drives exposure rating
0 1 10.256 330 43 10
1 2 985.685 120 28 7
2 3 1445.563 360 35 7
3 4 1188.193 270 33 7
4 5 574.513 220 44 5
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 200 entries, 0 to 199
Data columns (total 5 columns):
 #   Column       Non-Null Count  Dtype  
---  ------       --------------  -----  
 0   campaign     200 non-null    int64  
 1   spendings    200 non-null    float64
 2   test_drives  200 non-null    int64  
 3   exposure     200 non-null    int64  
 4   rating       200 non-null    int64  
dtypes: float64(1), int64(4)
memory usage: 7.9 KB

Daten transformieren#

  • 1a) kategoriale Variablen:

    • Erstellen Sie eine Liste, in der alle kategorialen Variablen aufgeführt werden

    • Nennen Sie die Liste list_cat

list_cat = ['campaign']
  • 1b) Führen Sie mit Hilfe von Pandas die Datentransformation für die kategoriale Variablen durch (Umwandeln in “category”)

df['campaign'] = df['campaign'].astype('category')
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 200 entries, 0 to 199
Data columns (total 5 columns):
 #   Column       Non-Null Count  Dtype   
---  ------       --------------  -----   
 0   campaign     200 non-null    category
 1   spendings    200 non-null    float64 
 2   test_drives  200 non-null    int64   
 3   exposure     200 non-null    int64   
 4   rating       200 non-null    int64   
dtypes: category(1), float64(1), int64(3)
memory usage: 16.4 KB
# Nehmen Sie keine Änderungen an dieser Zelle vor
# Nehmen Sie keine Änderungen an dieser Zelle vor
# Nehmen Sie keine Änderungen an dieser Zelle vor
# Nehmen Sie keine Änderungen an dieser Zelle vor

Variablen für Modellierung vorbereiten#

Sie sollen ein Modell erstellen, mit dessen Hilfe vorhergesagt wird, wie viele Testfahrten gebucht werden (Variable test_drives).

# Wir erzeugen das y_label
y_label = "test_drives"

# Wir nutzen nur geeignete unabhängige Variablen in dem Modell
X = df[['spendings', 'exposure', 'rating']]

# Wir erzeugen die abhängige Variable
y = df[y_label]

2) Analyse#

Deskriptive Analyse#

  • 2a) Statistische Kennzahlen

    • Erstellen Sie mit Pandas eine Tabelle mit statistischen Kennzahlen für die numerischen Variablen

    • Speichern Sie das Ergebnis als df_stats

df_stats = df.describe()

Lassen Sie die Tabelle anzeigen:

# Nehmen Sie keine Änderungen an dieser Zelle vor

df_stats
spendings test_drives exposure rating
count 200.000000 200.000000 200.000000 200.00000
mean 614.412255 193.200000 27.500000 6.77000
std 485.655208 80.698957 12.269585 1.39529
min 9.104000 10.000000 0.000000 1.00000
25% 215.917750 137.500000 19.750000 6.00000
50% 531.916000 200.000000 28.000000 7.00000
75% 911.225500 250.000000 36.000000 8.00000
max 2271.860000 360.000000 63.000000 10.00000
# Nehmen Sie keine Änderungen an dieser Zelle vor

3) Explorative Analyse#

  • 3a) Erzeugen Sie eine Abbildung, in welcher Sie den Zusammenhang zwischen einer beliebigen unabhängigen und der abhängigen Variable untersuchen. Wählen Sie eine geeignete Darstellungsform, zeigen Sie das Plot und interpretieren Sie das Ergebnis.

alt.Chart(df).mark_circle().encode(
    x='rating',
    y='test_drives'
)
<VegaLite 4 object>

If you see this message, it means the renderer has not been properly enabled
for the frontend that you are using. For more information, see
https://altair-viz.github.io/user_guide/troubleshooting.html
# Nehmen Sie keine Änderungen an dieser Zelle vor
# Nehmen Sie keine Änderungen an dieser Zelle vor
# Nehmen Sie keine Änderungen an dieser Zelle vor
# Nehmen Sie keine Änderungen an dieser Zelle vor

Daten splitten#

Wir führen den Datensplit für die spätere Modellierung durch (keine Änderungen an dem Code vornehmem).

# Nehmen Sie keine Änderungen an dieser Zelle vor

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state = 1)

4) Model#

Modell auswählen#

  • 4a) Modell auswählen

    • Wählen Sie ein für Ihre Problemstellung geeignetes Modell aus (Sie wurden angewiesen, einen Gradient Boosted Tree zu verwenden)

    • Speichern Sie das Modell unter der Bezeichnung model

model = GradientBoostingRegressor()
# Nehmen Sie keine Änderungen an dieser Zelle vor

Training#

  • 4b) Führen Sie das Modell-Training durch

model.fit(X_train, y_train)
GradientBoostingRegressor()
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
# Nehmen Sie keine Änderungen an dieser Zelle vor

Evaluation des Modells#

  • 4e) Führen Sie die Modellvorhersage durch und speichern Sie das Ergebnis mit der Bezeichnung y_pred

y_pred = model.predict(X_test)

Ausgabe von y_pred

# Nehmen Sie keine Änderungen an dieser Zelle vor

y_pred
array([ 68.1189161 , 232.72749202, 285.31309758, 113.04546727,
       322.08289086, 280.65071979, 171.48284196, 261.69934391,
       134.38217729, 228.40016235, 249.42755132, 288.44459159,
        84.48014073, 128.2445909 , 192.53089072, 301.22082243,
       190.52249613, 241.82819886, 135.79803371, 217.99998858,
        62.68470377, 301.1176793 , 252.1138626 , 307.4083424 ,
       115.12874937, 209.53221158, 222.93452444, 138.23883214,
       162.94067369, 252.00321787, 127.81534598, 150.68520254,
       253.40235262, 228.76793842, 144.62297337, 230.44487618,
       222.65119237, 220.01990626, 194.18758476, 229.91544461,
       123.54337902, 126.28279069, 103.8913961 , 132.79685748,
       184.59056653, 282.76443562, 218.14911939, 157.84091666,
       162.06875167, 110.98512793, 318.16150223, 275.36461371,
       107.31737386, 234.15476422, 167.1620306 , 168.65323571,
       137.10095428, 123.09422593, 179.20386835, 220.14439148])
# Nehmen Sie keine Änderungen an dieser Zelle vor
# Nehmen Sie keine Änderungen an dieser Zelle vor
  • 4f) Führen Sie eine ausführliche Evaluierung des Modells durch und interpretieren Sie die Ergebnisse

mean_squared_error(y_test, y_pred)
2704.731899531797
mean_squared_error(y_test, y_pred, squared=False)
52.00703701934765
r2_score(y_test, y_pred)
0.4790215657486413
# Nehmen Sie keine Änderungen an dieser Zelle vor

Glückwunsch! Dies war die letzte Aufgabe in dem Notebook.