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.
# 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.