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, classification_report
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
# 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_response.csv"
df = pd.read_csv(LINK)
Verschaffen Sie sich eine Übersicht über die Daten:
df.head()
Unnamed: 0 | User ID | Gender | Age | salary | response | |
---|---|---|---|---|---|---|
0 | 1 | 15624510 | Male | 19 | 19000 | 0 |
1 | 2 | 15810944 | Male | 35 | 20000 | 0 |
2 | 3 | 15668575 | Female | 26 | 43000 | 0 |
3 | 4 | 15603246 | Female | 27 | 57000 | 0 |
4 | 5 | 15804002 | Male | 19 | 76000 | 0 |
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 400 entries, 0 to 399
Data columns (total 6 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Unnamed: 0 400 non-null int64
1 User ID 400 non-null int64
2 Gender 400 non-null object
3 Age 400 non-null int64
4 salary 400 non-null int64
5 response 400 non-null int64
dtypes: int64(5), object(1)
memory usage: 18.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 = ['User ID', 'Gender', 'response', 'Unnamed: 0']
list_cat
['User ID', 'Gender', 'response', 'Unnamed: 0']
1b) Führen Sie mit Hilfe von Pandas die Datentransformation für die kategoriale Variablen durch (Umwandeln in “category”)
for i in list_cat:
df[i] = df[i].astype('category')
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 400 entries, 0 to 399
Data columns (total 6 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Unnamed: 0 400 non-null category
1 User ID 400 non-null category
2 Gender 400 non-null category
3 Age 400 non-null int64
4 salary 400 non-null int64
5 response 400 non-null category
dtypes: category(4), int64(2)
memory usage: 47.5 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, ob eine Person auf einen Call-to-Action reagiert (Variable response
).
# Wir erzeugen das y_label
y_label = "response"
# Wir nutzen alle geeigneten unabhängigen Variablen in dem Modell (und entfernen die abhängige Variable)
X = df[['Age', 'salary']]
# 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
Age | salary | |
---|---|---|
count | 400.000000 | 400.000000 |
mean | 37.655000 | 69742.500000 |
std | 10.482877 | 34096.960282 |
min | 18.000000 | 15000.000000 |
25% | 29.750000 | 43000.000000 |
50% | 37.000000 | 70000.000000 |
75% | 46.000000 | 88000.000000 |
max | 60.000000 | 150000.000000 |
# 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.
# ACME
alt.Chart(df).mark_boxplot().encode(
x = 'Age',
y = 'response'
)
<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
Plot interpretieren (nutzen Sie die nächste Zelle):
# 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 Random Forest zu verwenden)
Speichern Sie das Modell unter der Bezeichnung
model
model = RandomForestClassifier()
# Nehmen Sie keine Änderungen an dieser Zelle vor
Training#
4b) Führen Sie das Modell-Training durch
model.fit(X_train, y_train)
RandomForestClassifier()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.
RandomForestClassifier()
# 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
# YOUR CODE HERE
y_pred = model.predict(X_test)
Ausgabe von y_pred
# Nehmen Sie keine Änderungen an dieser Zelle vor
y_pred
array([0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1,
1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0,
1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1,
0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0,
1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1,
0, 0, 0, 0, 1, 1, 0, 0, 0, 1])
# 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
# Confusion matrix
confusion_matrix(y_true=y_test, y_pred=y_pred)
array([[60, 12],
[ 3, 45]])
# Classification report
classification_report(y_test, y_pred)
Interpretation:
Describe the task here!
# Nehmen Sie keine Änderungen an dieser Zelle vor
Glückwunsch! Dies war die letzte Aufgabe in dem Notebook.