Anfang dieses Monats habe ich eine Facebook Live Code-Along-Session durchgeführt, in der ich (und alle, die mitprogrammiert haben) mehrere Algorithmen mit steigender Komplexität gebaut habe, um vorherzusagen, ob ein bestimmter Passagier der Titanic überlebt hat oder nicht – basierend auf Daten wie dem gezahlten Fahrpreis, dem Einschiffungshafen und dem Alter.
In diesem Beitrag gehst du einige der Inhalte aus dieser Session noch einmal durch. Wenn du sie dir erneut ansehen oder den Beitrag zusammen mit dem Video verfolgen möchtest, findest du es hier:
Insbesondere wirst du dich erinnern, dass wir überwachte Lernmodelle gebaut haben.
Überwachtes Lernen ist der Bereich des Machine Learnings (ML), bei dem Labels wie „Überlebt“ oder „Nicht überlebt“ vorhergesagt werden. Solche Modelle lernen aus gelabelten Daten, also Daten, die angeben, ob ein Passagier überlebt hat (das sogenannte „Modelltraining“), und treffen anschließend Vorhersagen auf ungelabelten Daten.
Auf Kaggle, einer Plattform für Wettbewerbe im Bereich Vorhersagemodelle und Analytics, heißen diese Datensätze Train- und Test-Set, weil
du ein Modell bauen willst, das Muster im Trainingsset lernt, und
du das Modell anschließend nutzt, um Vorhersagen auf dem Testset zu treffen.
Kaggle teilt dir dann den Prozentsatz deiner korrekten Vorhersagen mit: Das ist die Genauigkeit (Accuracy) deines Modells.
So startest du mit überwachtem Lernen
Wie du vielleicht schon weißt, eignet sich folgender Ansatz für überwachtes Lernen:
Führe eine Exploratory Data Analysis (EDA) auf deinem Datensatz durch.
Baue ein schnelles, pragmatisches Baseline-Modell, das dir als Vergleich für spätere Modelle dient.
Iteriere diesen Prozess: Du machst weitere EDA und baust ein neues Modell.
Betreibe Feature Engineering: Nutze vorhandene Features, kombiniere sie oder gewinne zusätzliche Information daraus, um schließlich zum letzten Punkt zu kommen, nämlich
ein Modell zu erhalten, das besser performt.
In dieser Code-Along-Session hast du all diese Schritte gemacht bzw. wirst sie gleich machen!
Hinweis: Wir haben auch Kurse, mit denen du Machine Learning für das Titanic-Datenset in Python und R direkt umsetzen kannst.
Daten importieren und einen ersten Blick werfen
Der erste Schritt ist immer, die Daten zu importieren und dir schnell einen Überblick über den Datensatz zu verschaffen. In diesem Fall importierst du das Paket pandas und nutzt die Funktion read_csv(), um die Daten einzulesen:
Hinweis: In den folgenden Code-Blöcken sind weitere Pakete und Modulimporte wie matplotlib, sklearn und seaborn bereits vorhanden. Du wirst sie später intensiver für (statistische) Datenvisualisierung und Machine Learning einsetzen!
Außerdem nutzt du den IPython-Magic-Befehl %matplotlib inline, damit die Plots direkt im Notebook erscheinen. Mit sns.set() stellst du den Visualisierungsstil auf den Seaborn-Standard um:
# Import modulesimport pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn import tree
from sklearn.metrics import accuracy_score
# Figures inline and set visualization style%matplotlib inline
sns.set()Bereitgestellt von
Also los: Importiere die Daten und mach den ersten Schritt bei der Dateninspektion:
# Import test and train datasets
df_train = pd.read_csv('../data/train.csv')
df_test = pd.read_csv('../data/test.csv')# View first lines of training data
df_train.head(n=4)Bereitgestellt von
PassengerId
Survived
Pclass
Name
Sex
Age
SibSp
Parch
Ticket
Fare
Cabin
Embarked
0
1
0
3
Braund, Mr. Owen Harris
male
22.0
1
0
A/5 21171
7.2500
NaN
S
1
2
1
1
Cumings, Mrs. John Bradley (Florence Briggs Th...
female
38.0
1
0
PC 17599
71.2833
C85
C
2
3
1
3
Heikkinen, Miss. Laina
female
26.0
0
0
STON/O2. 3101282
7.9250
NaN
S
3
4
1
1
Futrelle, Mrs. Jacques Heath (Lily May Peel)
female
35.0
1
0
113803
53.1000
C123
S
Was all diese Features bedeuten, findest du in der Kaggle-Dokumentation hier.
Bevor du weitermachst, beachte folgende Begrifflichkeiten:
Die Zielvariable (Target) ist die Variable, die du vorhersagen willst.
Alle anderen Variablen heißen „Features“ (oder „Prädiktorvariablen“ – die Merkmale, mit denen du die Zielvariable vorhersagst).
Mit diesem Wissen kannst du deine Daten weiter erkunden, z. B. mit der Funktion head(), die dir die ersten fünf Zeilen eines Datensatzes anzeigt:
Fazit: Im Trainingsset haben weniger Menschen überlebt als nicht überlebt. Lass uns also ein erstes Modell bauen, das vorhersagt, dass niemand überlebt hat.
Das ist natürlich ein schwaches Modell, denn wir wissen, dass Menschen überlebt haben. Aber es liefert uns eine Baseline: Jedes spätere Modell muss besser abschneiden als dieses.
Das geht so:
Erstelle für df_test eine Spalte 'Survived', die für alle Zeilen „nicht überlebt“ codiert.
Speichere die Spalten 'PassengerId' und 'Survived' von df_test als .csv und reiche sie bei Kaggle ein.
df_test['Survived']=0
df_test[['PassengerId','Survived']].to_csv('data/predictions/no_survivors.csv', index=False)Bereitgestellt von
Welche Genauigkeit bekommst du damit? Die Accuracy auf Kaggle liegt bei 62,7.
Gar nicht so schlecht!
Wichtiger Hinweis: Du solltest auch andere Metriken als Accuracy verwenden!
EDA zu Feature-Variablen
Nachdem du ein schnelles Basismodell gebaut hast, geht es in die nächste Runde: Lass uns mehr EDA machen und bald ein weiteres Modell bauen!
Nutze seaborn, um ein Balkendiagramm für das Feature 'Sex' des Titanic-Datensatzes (df_train) zu erstellen.
74% der Frauen überlebten, während 19% der Männer überlebten.
Baue nun ein zweites Modell und sage voraus, dass alle Frauen überlebt haben und alle Männer nicht. Auch das ist nicht realistisch, liefert aber eine bessere Baseline für den Vergleich mit zukünftigen Modellen.
Erstelle für df_test eine Spalte 'Survived', die obige Vorhersage abbildet.
Speichere die Spalten 'PassengerId' und 'Survived' von df_test als .csv und reiche sie bei Kaggle ein.
df_test['Survived']= df_test.Sex =='female'
df_test['Survived']= df_test.Survived.apply(lambda x:int(x))
df_test.head()Bereitgestellt von
PassengerId
Pclass
Name
Sex
Age
SibSp
Parch
Ticket
Fare
Cabin
Embarked
Survived
0
892
3
Kelly, Mr. James
male
34.5
0
0
330911
7.8292
NaN
Q
0
1
893
3
Wilkes, Mrs. James (Ellen Needs)
female
47.0
1
0
363272
7.0000
NaN
S
1
2
894
2
Myles, Mr. Thomas Francis
male
62.0
0
0
240276
9.6875
NaN
Q
0
3
895
3
Wirz, Mr. Albert
male
27.0
0
0
315154
8.6625
NaN
S
0
4
896
3
Hirvonen, Mrs. Alexander (Helga E Lindqvist)
female
22.0
1
1
3101298
12.2875
NaN
S
1
df_test[['PassengerId','Survived']].to_csv('../data/predictions/women_survive.csv', index=False)Bereitgestellt von
Welche Genauigkeit erzielt dieses Modell bei Kaggle?
Die Accuracy auf Kaggle beträgt 76,6%:
Mit dieser Einreichung bist du um etwa 2.000 Plätze im Leaderboard nach oben geklettert! Außerdem hast du deine Punktzahl verbessert – starke Leistung!
Erkunde deine Daten weiter!
Nutze seaborn, um Balkendiagramme der Zielvariable 'Survived' facettiert nach 'Pclass' zu erstellen.
sns.factorplot(x='Survived', col='Pclass', kind='count', data=df_train);Bereitgestellt von
Fazit: Passagiere der ersten Klasse hatten bessere Überlebenschancen. Passagiere der dritten Klasse hatten deutlich schlechtere Chancen.
Erstelle mit seaborn Balkendiagramme von 'Survived', facettiert nach 'Embarked'.
sns.factorplot(x='Survived', col='Embarked', kind='count', data=df_train);Bereitgestellt von
Fazit: Passagiere, die in Southampton einstiegen, hatten tendenziell geringere Überlebenschancen.
EDA mit numerischen Variablen
Nutze seaborn, um ein Histogramm der Spalte 'Fare' von df_train zu plotten.
Nutze seaborn, um einen Scatterplot von 'Age' gegen 'Fare' zu erstellen, eingefärbt nach 'Survived'.
sns.lmplot(x='Age', y='Fare', hue='Survived', data=df_train, fit_reg=False, scatter_kws={'alpha':0.5});Bereitgestellt von
Fazit: Es scheint, dass Überlebende entweder deutlich mehr für ihr Ticket zahlten oder jung waren.
Erstelle mit seaborn ein Pairplot von df_train, eingefärbt nach 'Survived'. Ein Pairplot fasst viele der bisherigen Erkenntnisse in einem Raster zusammen.
deine Daten geladen und dir einen Überblick verschafft,
die Zielvariable visualisiert und erste Vorhersagen getroffen,
einige Feature-Variablen visuell untersucht und darauf basierend bessere Vorhersagen gemacht,
ausführliche EDA für kategoriale und numerische Features durchgeführt.
Im nächsten Beitrag nimmst du dir Zeit, Machine-Learning-Modelle auf Basis der hier gewonnenen Erkenntnisse zu bauen. Das machen wir im nächsten Post zu diesem Projekt (Veröffentlichung am 27. Dezember).
Mach dich mit Python-Datenstrukturen vertraut: Lerne mehr über Datentypen und primitive sowie nicht-primitive Datenstrukturen wie Strings, Listen, Stapel usw.
Erforsche Pythons match-case: eine Anleitung zu seiner Syntax, Anwendungen in Data Science und ML sowie eine vergleichende Analyse mit dem traditionellen switch-case.
Lerne, wie du Python-Listen mit Techniken wie Slicing, List Comprehensions und itertools aufteilen kannst. Finde heraus, wann du welche Methode für die beste Datenverarbeitung nutzen solltest.
Anfang dieses Monats habe ich eine Facebook Live Code-Along-Session durchgeführt, in der ich (und alle, die mitprogrammiert haben) mehrere Algorithmen mit steigender Komplexität gebaut habe, um vorherzusagen, ob ein bestimmter Passagier der Titanic überlebt hat oder nicht – basierend auf Daten wie dem gezahlten Fahrpreis, dem Einschiffungshafen und dem Alter.
In diesem Beitrag gehst du einige der Inhalte aus dieser Session noch einmal durch. Wenn du sie dir erneut ansehen oder den Beitrag zusammen mit dem Video verfolgen möchtest, findest du es hier:
Insbesondere wirst du dich erinnern, dass wir überwachte Lernmodelle gebaut haben.
Überwachtes Lernen ist der Bereich des Machine Learnings (ML), bei dem Labels wie „Überlebt“ oder „Nicht überlebt“ vorhergesagt werden. Solche Modelle lernen aus gelabelten Daten, also Daten, die angeben, ob ein Passagier überlebt hat (das sogenannte „Modelltraining“), und treffen anschließend Vorhersagen auf ungelabelten Daten.
Auf Kaggle, einer Plattform für Wettbewerbe im Bereich Vorhersagemodelle und Analytics, heißen diese Datensätze Train- und Test-Set, weil
Kaggle teilt dir dann den Prozentsatz deiner korrekten Vorhersagen mit: Das ist die Genauigkeit (Accuracy) deines Modells.
So startest du mit überwachtem Lernen
Wie du vielleicht schon weißt, eignet sich folgender Ansatz für überwachtes Lernen:
In dieser Code-Along-Session hast du all diese Schritte gemacht bzw. wirst sie gleich machen!
Hinweis: Wir haben auch Kurse, mit denen du Machine Learning für das Titanic-Datenset in Python und R direkt umsetzen kannst.
Daten importieren und einen ersten Blick werfen
Der erste Schritt ist immer, die Daten zu importieren und dir schnell einen Überblick über den Datensatz zu verschaffen. In diesem Fall importierst du das Paket
pandasund nutzt die Funktionread_csv(), um die Daten einzulesen:Hinweis: In den folgenden Code-Blöcken sind weitere Pakete und Modulimporte wie
matplotlib,sklearnundseabornbereits vorhanden. Du wirst sie später intensiver für (statistische) Datenvisualisierung und Machine Learning einsetzen!Außerdem nutzt du den IPython-Magic-Befehl
%matplotlib inline, damit die Plots direkt im Notebook erscheinen. Mitsns.set()stellst du den Visualisierungsstil auf den Seaborn-Standard um:Also los: Importiere die Daten und mach den ersten Schritt bei der Dateninspektion:
Was all diese Features bedeuten, findest du in der Kaggle-Dokumentation hier.
Bevor du weitermachst, beachte folgende Begrifflichkeiten:
Mit diesem Wissen kannst du deine Daten weiter erkunden, z. B. mit der Funktion
head(), die dir die ersten fünf Zeilen eines Datensatzes anzeigt:Beachte, dass der DataFrame
df_testdie Spalte'Survived'nicht enthält – genau diese willst du ja vorhersagen!.info()kannst du dir Datentypen, fehlende Werte und mehr (vondf_train) anzeigen lassen.Hier siehst du, dass es in der Spalte „Age“ nur 714 Nicht-Null-Werte in einem DataFrame mit 891 Zeilen gibt. Das bedeutet, es fehlen 177 Werte.
.describe(), um dir zusammenfassende Statistiken der numerischen Spalten vondf_trainanzeigen zu lassen.Visuelle Exploratory Data Analysis (EDA) und dein erstes Modell
Jetzt, da du ein Gefühl für die Daten hast und einige Statistiken kennst, ist es Zeit, die Daten auch zu visualisieren – mit dem Paket
seaborn:seabornein Balkendiagramm zur Titanic-Überlebensrate, also deiner Zielvariable.Fazit: Im Trainingsset haben weniger Menschen überlebt als nicht überlebt. Lass uns also ein erstes Modell bauen, das vorhersagt, dass niemand überlebt hat.
Das ist natürlich ein schwaches Modell, denn wir wissen, dass Menschen überlebt haben. Aber es liefert uns eine Baseline: Jedes spätere Modell muss besser abschneiden als dieses.
Das geht so:
df_testeine Spalte'Survived', die für alle Zeilen „nicht überlebt“ codiert.'PassengerId'und'Survived'vondf_testals .csv und reiche sie bei Kaggle ein.Welche Genauigkeit bekommst du damit? Die Accuracy auf Kaggle liegt bei 62,7.
Gar nicht so schlecht!
Wichtiger Hinweis: Du solltest auch andere Metriken als Accuracy verwenden!
EDA zu Feature-Variablen
Nachdem du ein schnelles Basismodell gebaut hast, geht es in die nächste Runde: Lass uns mehr EDA machen und bald ein weiteres Modell bauen!
seaborn, um ein Balkendiagramm für das Feature'Sex'des Titanic-Datensatzes (df_train) zu erstellen.'Survived', aufgeteilt (facettiert) nach dem Feature'Sex'.Fazit: Frauen hatten eine höhere Überlebenswahrscheinlichkeit als Männer.
pandasherausfinden, wie viele Frauen und wie viele Männer überlebt haben:pandasden Anteil der überlebenden Frauen und der überlebenden Männer:74% der Frauen überlebten, während 19% der Männer überlebten.
Baue nun ein zweites Modell und sage voraus, dass alle Frauen überlebt haben und alle Männer nicht. Auch das ist nicht realistisch, liefert aber eine bessere Baseline für den Vergleich mit zukünftigen Modellen.
df_testeine Spalte'Survived', die obige Vorhersage abbildet.'PassengerId'und'Survived'vondf_testals .csv und reiche sie bei Kaggle ein.Welche Genauigkeit erzielt dieses Modell bei Kaggle?
Die Accuracy auf Kaggle beträgt 76,6%:
Mit dieser Einreichung bist du um etwa 2.000 Plätze im Leaderboard nach oben geklettert! Außerdem hast du deine Punktzahl verbessert – starke Leistung!
Erkunde deine Daten weiter!
seaborn, um Balkendiagramme der Zielvariable'Survived'facettiert nach'Pclass'zu erstellen.Fazit: Passagiere der ersten Klasse hatten bessere Überlebenschancen. Passagiere der dritten Klasse hatten deutlich schlechtere Chancen.
seabornBalkendiagramme von'Survived', facettiert nach'Embarked'.Fazit: Passagiere, die in Southampton einstiegen, hatten tendenziell geringere Überlebenschancen.
EDA mit numerischen Variablen
seaborn, um ein Histogramm der Spalte'Fare'vondf_trainzu plotten.Fazit: Die meisten Passagiere zahlten weniger als 100 für die Überfahrt.
pandas-Plotmethode, um die Spalte'Fare'für jede Ausprägung von'Survived'im selben Plot darzustellen.Fazit: Es sieht so aus, als hätten diejenigen mit höherem Fahrpreis eine größere Überlebenschance gehabt.
seaborn, um ein Histogramm der Spalte'Age'vondf_trainzu plotten. Entferne zuvor fehlende Werte.'Fare'mit'Survived'auf der x-Achse.Fazit: Der Fahrpreis korreliert eindeutig mit der Überlebenswahrscheinlichkeit.
.describe(), um zusammenfassende Statistiken von'Fare'in Abhängigkeit vom Überleben anzuzeigen.seaborn, um einen Scatterplot von'Age'gegen'Fare'zu erstellen, eingefärbt nach'Survived'.Fazit: Es scheint, dass Überlebende entweder deutlich mehr für ihr Ticket zahlten oder jung waren.
seabornein Pairplot vondf_train, eingefärbt nach'Survived'. Ein Pairplot fasst viele der bisherigen Erkenntnisse in einem Raster zusammen.Von EDA zum Machine-Learning-Modell
In diesem Tutorial hast du erfolgreich:
Im nächsten Beitrag nimmst du dir Zeit, Machine-Learning-Modelle auf Basis der hier gewonnenen Erkenntnisse zu bauen. Das machen wir im nächsten Post zu diesem Projekt (Veröffentlichung am 27. Dezember).