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.
GradientBoostingRegressor()
# 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.