Meine erste Herausforderung für einen Kaggle-Wettbewerb (2/2)

Im letzten Eintrag habe ich die Aufgabe "Titanic: Machine Learning from Disaster" erklärt. In diesem Eintrag erzähle ich mein Ergebnis. Den Quellcode (außerhalb Forum) zu veröffentlichten, ist verboten, aber ich habe diesmal mit Python Datenanalyse gemacht.

Das Ziel ist ein besseres Ergebnis als das Geschlechte-Klasse-Preis-Modell (GKP-Modell). Ich habe das Ziel erreicht, aber ich bin nicht so mit meinem Ergebnis zufrieden.

Strategie

Man sollte die Test-Daten nicht sehen, wenn man ein Vorhersagemodell erstellt. Sonst wirken die Test-Daten das erstellte Vorhersagemodell und man wahrscheinlich das Modell nicht verallgemeinern kann. Aber das Ziel ist die Genauigkeit für die Test-Daten. Ich habe für die folgenden Gründe die Test-Daten gesehen.

  1. Die Anzahl der Leute, die zu einer bestimmten Gruppe gehört. Die brauche ich, um die Genauigkeit von meinem Modell für die Test-Daten zu schätzen.
  2. Die Daten mit Altern. Viele Alter fehlen in die Training-Daten und die Test-Daten. Aber die Alter sind wichtige Information, wie ich später erkläre. Deshalb habe ich ein Vorhersagemodell für Alter gemacht, um die fehlenden Alter zu ergänzen.

Die folgende Tabelle zeigt die Anzahl und die Genauigkeit von Ãœberleben für jede Gruppe von ("Sex", "Pclass").

SexPclassSurvivedCountInTrainCountInTestNaiveCount
female10.968085 945048
female20.921053763027
female30.5000001447236
male10.3688521225735
male20.1574071086353
male30.135447347146126

Mit der Tabelle kann man sofort ein einfaches Modell erstellen: Man hat überlebt, wenn die Wahrscheinlichkeit der Gruppe, zu der man gehört, ist gleich oder großer als 0.5. (Das Modell ist äquivalent zu dem Geschlechtes-Modell.) Das GKP-Modell benutzt den Preis (für Frauen mit Pclass=3), um das einfache Modell zu verbessern.

Die Genauigkeit der Gruppen von Frauen mit Pclass=1 und 2 sind schon hoch. Deshalb wollte ich die Genauigkeiten der anderen Gruppe verbessern.

Vorbereitung von den Daten

Erstens habe ich die Daten mit Alter von den Training- und Test-Daten genommen, um ein Vorhersagemodell für Alter erstellt. Ich habe SVM für den Algorithmus benutzen. (Der Mittelwert von RMSE für CV-Mengen ist 14.381.) Mit dem Vorhersagemodell habe ich alle fehlenden Alter ergänzt.

Zweitens habe ich die Spalte "Name", "Ticket" und "Embarked" gelöscht. "Name" und "Ticket" verursachen overfitting. Dass "Embarked" nicht relevant für Ãœberleben ist, denke ich, obwohl ich die Spalte benutzt habe, um die Alter zu schätzen.

Dritten habe ich die Spalte "FamilySize" gemacht. Sie ist die Summe von "SibSp" und "Parch".

Schließlich mache ich die Spalte "inCabin" gemacht. Sie ist 1, wenn "Cabin" gegeben ist.

Analyse

Frauen mit Pclass=3

Hier gibt es der Grund, warum ich mit meinem Ergebnis nicht zufrieden bin.

Frauen mit Pclass=3

Die blauen Punkte sind die Frauen, die überlebt haben.

Es scheint mir, als ob es keine einfache Regel geben würde. Deshalb habe ich versucht, ein gutes Vorhersagemodell mit maschinellem Lernen zu erstellen. Die geschätzten Genauigkeiten sind:

  • GKP-Modell (ohne maschinelles Lernen) : 0.5833
  • Random Forest (mit 'Fare', 'Age', 'Parch', 'SibSp'): 0.6736
  • Logistische Regression (mit 'Fare', 'Age', Grenze=0.624): 0.7133
  • SVM (mit 'Fare', 'Age', 'Parch', 'SibSp'): 0.7152

Deshalb habe ich gedacht, dass ich die Prognose mit SVM oder logistische Regression sehr gut verbessern kann. Aber die richtigen Genauigkeiten von dem maschinellen Lernen ist sogar schlechter als die Genauigkeit von dem GKP-Modell! Deswegen habe ich mich entscheidet, kein maschinelles Lernen zu verwenden.

Männer mit Pclass=1 und inCabin=1

Das GKP-Modell sagt, dass keine Männer überlebt haben. Deshalb kann ich das Modell verbessern, wenn ich einen Teil von überlebten Männern finde.

inCabinSurvivedCountInTrainCountInTestNaiveCount
00.222222271713
10.410526954023

Das folgende Diagramm zeigt die Männer mit Pclass = 1 und inCabin = 1.

Männer mit Pclass=1

Natürlich habe ich zuerst maschinelles Lernen versucht. Die geschätzten Genauigkeiten sind:

  • GKP-Modell: 0.5895
  • SVM (mit 'Fare', 'Age', 'FamilySize') 0.589473684211
  • Random Forest (mit 'Fare', 'Age', 'Parch', 'SibSp') : 0.610526315789

SVM und Random Forest könnten keinen großen Unterschied machen.

Aber man kann vielleicht finden, dass es überlebte Männer im Diagramm unten links gibt. Deshalb habe ich versucht, eine Entscheidungsgrenze wie die grüne Linie im Diagramm zu finden. Dafür habe ich die Männer gelöscht, die mehr als $500 für das Ticket ausgegeben haben, weil ich die Männer als "outlier" beobachtet habe. Danach habe ich logistische Regression verwendet. Die geschätzte Genauigkeit davon ist 0.675 mit der Grenze 0.471. Darüber hinaus erfolgt das Modell, die Genauigkeit für die Test-Daten zu verbessern.

Männer mit Pclass=2 und inCabin=0

inCabinSurvivedCountInTrainCountInTestNaiveCount
00.1274511025951
10.666667642

Ich habe die Männer mit Pclass=2 und inCabin=0 ignoriert, weil nur wenig Männer zu der Gruppe gehören.

Männer mit Pclass=2 und inCabin=0

Aus der Grafik wird deutlich, dass viele Junge überlebt haben. Deshalb habe ich die Entscheidungsgrenze Age=14 gestellt.

Ich habe für diese Gruppe kein maschinelles Lernen verwendet. Die Genauigkeit von dem Geschlechte-Modell ist 0.87 für die Gruppe. Ich zweifle, dass man ein besseres Vorhersagemodell mit maschinellem Lernen erstellen kann.

Aber am wichtigsten ist, dass die Entscheidungsgrenze auch für die Test-Daten keine Rolle spielt. Schade.

Männer mit Pclass=3 und FamilySize ≥ 3

Für Männer mit Pclass=3 spielt "FamilySize" eine Rolle. Die folgende Grafik zeigt die Männer mit Pclass=3 und FamilySize ≤ 3.

Männer mit Pclass=3 und small Family

Und die folgende Grafik zeigt die Männer mit Pclass=3 und FamilySize ≥ 4. Die grünen Linien sind "Age=14".

Männer mit Pclass=3 und large Family

Ich habe maschinelles Lernen versucht, aber es war nicht erfolgreich. Die Genauigkeit von dem GKP-Modell ist schon 0.8645 für die Gruppe von den Männern mit Pclass=3. Ich denke, dass es schwierig ist, ein besseres Vorhersagemodell mit maschinellem Lernen zu erstellen.

Das Ergebnis

Mein Vorhersagemodell

  • Frauen
    • Pclass=3 & Fclass ≥ 3 ⇒ nicht überlebt
    • sonst ⇒ überlebt
  • Männer
    • Pclass=1 & inCabin=1 ⇒ Logistische Regression
    • Pclass=3 & inCabin=0 & FamilySize ≥ 3 & Age ≥ 14 ⇒ überlebt
    • sonst ⇒ nicht überlebt.

Mit diesem Vorhersagemodell bekomme ich 0.78947.

Mein Eindruck

Durch die Aufgabe kann man verstehen, wie maschinelles Lernen nicht funktioniert. Das GKP-Modell beschreibt schon sehr gut die Daten. In diesem Fall ist es schwierig, dass maschinelles Lernen gut das Vorhersagemodell verbessert. Aber ich bin noch nicht damit einverstanden, mit maschinellem Lernen die Genauigkeit der Gruppe von Frauen mit Pclass=3 nicht verbessern zu können. Weil der Punkt auf 25% der Test-Daten bestimmt wird, glaube ich noch, dass SVM auf den ganzen Daten gut machen kann.

Share this page on        
Categories: #data-mining