IT & Engineering

Blinde Flecken durch fehlende Daten beim Machine Learning vermeiden

Sie haben ein Projekt und möchten darauf Machine Learning anwenden. Sie beginnen einfach: ein Merkmal hinzufügen, Daten sammeln, ein Modell erstellen. Sie fügen ein weiteres äußerst nützliches Merkmal hinzu, das jedoch nur in der Hälfte Ihrer Datenpunkte vorhanden ist. Sie möchten klug vorgehen und alle verfügbaren Daten nutzen (einschließlich derer mit fehlenden Werten), aber wie stellen Sie das an?
Bild für Blinde Flecken durch fehlende Daten beim Machine Learning vermeiden

Sie haben ein Projekt und möchten darauf Machine Learning anwenden. Sie beginnen einfach: ein Merkmal hinzufügen, Daten sammeln, ein Modell erstellen. Sie fügen ein weiteres äußerst nützliches Merkmal hinzu, das jedoch nur in der Hälfte Ihrer Datenpunkte vorhanden ist. Sie möchten klug vorgehen und alle verfügbaren Daten nutzen (einschließlich derer mit fehlenden Werten), aber wie stellen Sie das an?

Benedict Cumberbatch as Sherlock in solemn pose

Wenn ich in der Entwicklung auf ein Problem stoße, versuche ich, eine funktionierende Lösung zu googeln. Sie muss nicht zu 100 % mathematisch exakt sein, sollte aber sinnvoll sein. Meine Suche führte mich zu Missing Value in Data Analysis auf Stack Overflow.

Die Lösungen reichen von einfachen Ansätzen, wie dem Füllen von Lücken mit dem Durchschnitt oder den häufigsten Werten, bis hin zur Vorab-Vorhersage der fehlenden Werte. In meinem Fall führte ich ein separates binäres Merkmal ein, das angibt, ob der Wert fehlt.

Wann immer ich an einer Lösung zweifelte, wandte ich mich der Mathematik zu. Die Mathematik ist sehr präzise darin, wann etwas funktioniert oder nicht, und was die Bedingungen und Kompromisse sind. Es gibt auch viel Literatur über Datenimputation– Fachleute schreiben ihre Doktorarbeiten über dieses Problem.

Doch dann stieß ich (eher zufällig) auf einen anderen Ansatz. Anstatt zu versuchen, die Daten zu imputieren, nutzen Sie Algorithmen, die keine Datenimputation erfordern. Diese funktionieren sofort – ob mit fehlenden Werten oder ohne. Klingt wie ein Märchen, oder?

Während meiner Recherche erwähnte niemand so etwas. Ich sprach mit Promovierten und Fachleuten aus diesem Bereich und hörte immer nur von Datenimputation.

Dann stieß ich auf einen Coursera Kurs, der sehr detailliert auf Entscheidungsbaum-Algorithmen einging. Entscheidungsbäume funktionieren so, dass an der Wurzel begonnen wird und man mit einer bestimmten Wahrscheinlichkeit nach links oder rechts geht. Hier ist ein Entscheidungsbaum für das Überleben von Fahrgästen auf der Titanic:

A decision tree for the outcome of the Titanic survivors

Wie Entscheidungsbaum-Algorithmen wie C4.5, C5.0 und CART fehlende Werte berücksichtigen, sieht so aus:

Stellen Sie sich vor, ein Merkmalswert ist unbekannt. Das bedeutet, Sie können die Bedingung nicht überprüfen und wissen nicht, welchem Zweig Sie folgen sollen. Ein gängiger Ansatz ist die Verwendung des häufigsten Wertes. Dies entspricht im Grunde der Wahl des wahrscheinlichsten Zweigs.

Baumalgorithmen betrachten beide Zweige mit Gewichtungen, die der Wahrscheinlichkeit der Zweige entsprechen.

Lernen an einem Beispiel

Ziehen wir ein weiteres Beispiel heran. Hier ist ein Wahrscheinlichkeitsbaum aus einem einfachen GMAT-Test der eine Stichprobengröße von 100 Studierenden in einer Hochschulklasse annimmt:

A GMAT decision tree for college students

Für männliche Personen beträgt die Wahrscheinlichkeit, ledig zu sein,

50 / 70 = 71 %

Für weibliche Personen beträgt die Wahrscheinlichkeit, ledig zu sein,

20 / 30 = 67 %

Ist das Geschlecht unbekannt, beträgt die Wahrscheinlichkeit, ledig zu sein,

(0,7 71 %) + (0,3 67 %) = 70 %

0,7, da 70 von 100 Studierenden männlich sind. 0,3, da 30 von 100 Studierenden weiblich sind.

Indem die Gesamtwahrscheinlichkeit in Zweigwahrscheinlichkeiten mit Gewichtungen aufgeteilt wird, werden alle Möglichkeiten berücksichtigt. Im Allgemeinen halte ich dies für eine viel bessere Methode, um fehlende Daten zu bewältigen und dem Modell beizubringen, zukünftige Werte zu generalisieren.

Leider unterstützen Bibliotheken, die diese Algorithmen implementieren, selten fehlende Werte. Zum Beispiel scikit-learn -Bibliothek – die De-facto-Machine-Learning-Bibliothek für Python – erfordert, dass alle Werte numerisch sind.

Dennoch gibt es gute Bibliotheken wie Orange die fehlende Werte unterstützen. Und wie sich zeigt, lässt sich diese Einschränkung überwinden.

Die Leistungsfähigkeit der Datenimputation

Anfangs machte mich dieser mangelnde Support für fehlende Werte sowohl wütend als auch amüsiert. Ernsthaft, warum lässt sich ausgerechnet der Algorithmus, dessen Vorteil der integrierte Support für fehlende Werte ist, nicht ohne Datenimputation nutzen? Mal ehrlich.

Dwight from "The Office" in a panicked expression
                                

                                    import randomrndef impute_gender():rnreturn random.choice(["Male"] * 70 + ["Female"] * 30)
                                
                            

Das Schöne an der Datenimputation ist, dass sie sich auf jeden Machine-Learning-Algorithmus anwenden lässt, nicht nur auf Entscheidungsbäume.

Das hat mich völlig verblüfft. Aus einem Hindernis wurde eine Lösung, alles dank derselben einfachen Idee.

Erkenntnisse

Unabhängig davon, in welchem Bereich Sie arbeiten oder wie gut Sie beim Sammeln von Daten sind, es werden immer fehlende Werte auftreten. Vielleicht arbeiten Sie an einer Credit-Scoring-Anwendung. Oder Sie versuchen vorherzusagen, wann E-Mail-Empfänger ihre Nachrichten am wahrscheinlichsten öffnen, um den Versand entsprechend zu planen. Reale Aufgaben weisen oft Lücken auf.

Es gibt viele verschiedene Herangehensweisen an das Problem fehlender Werte, und je nach Anwendungsfall fallen die Antworten unterschiedlich aus. Doch im Kern einer komplexen Lösung liegt oft eine einfache Idee.

Viel Erfolg beim Machine Learning. Wie gehen Sie mit fehlenden Werten um? Teilen Sie es unten in den Kommentaren mit …