Ich arbeite an einem Zeitreihenklassifizierungsproblem, bei dem die Eingabe Zeitreihen-Sprachnutzungsdaten (in Sekunden) für die ersten 21 Tage eines Mobiltelefonkontos sind. Die entsprechende Zielvariable ist, ob dieses Konto im Bereich von 35 bis 45 Tagen gekündigt wurde oder nicht. Es handelt sich also um ein binäres Klassifizierungsproblem.
Ich erhalte sehr schlechte Ergebnisse mit allen Methoden, die ich bisher ausprobiert habe (in unterschiedlichem Maße). Zuerst habe ich die k-NN-Klassifizierung (mit verschiedenen Modifikationen) ausprobiert und extrem schlechte Ergebnisse erzielt. Dies führte mich dazu, Merkmale aus den Zeitreihen zu extrahieren - dh Mittelwert, Varianz, Max, Min, Gesamtzahl der Nulltage, Gesamtzahl der nachfolgenden Nulltage, Differenz zwischen dem Durchschnitt der ersten Hälfte und dem Durchschnitt der zweiten Hälfte usw. - und die prädiktivsten Merkmale schienen insgesamt zu sein Null-Tage und insgesamt nachfolgende Null-Tage (unter Verwendung mehrerer Klassifizierungsalgorithmen). Dies war die beste Leistung, aber die Leistung war immer noch nicht sehr gut.
Meine nächste Strategie bestand darin, die negativen Instanzen in meinem Trainingsset zu übertasten, da es so wenige davon gab. Dies führte zu einer korrekteren Stornierungsvorhersage, jedoch auf Kosten von mehr falsch positiven Ergebnissen.
Ich fange an zu denken, dass die Zeitreihen-Nutzungsdaten selbst einfach nicht sehr prädiktiv sind (obwohl der gesunde Menschenverstand dies vorschreibt). Vielleicht gibt es eine latente Variable, die ich nicht in Betracht ziehe. Das Betrachten der Daten zeigt auch ein seltsames Verhalten. Das heißt, einige Beispiele zeigen eine sehr geringe oder abnehmende Nutzung (oder manchmal gar keine) und werden nicht abgebrochen, und einige zeigen eine Zunahme der Nutzung, die abgebrochen wird. Vielleicht erzeugt dieses widersprüchliche Verhalten keine sehr klare Entscheidungsgrenze für einen Klassifikator.
Eine weitere mögliche Fehlerquelle ist die Tatsache, dass viele Trainingsbeispiele sehr spärlich sind (dh viele Tage mit 0 Verwendung). Eine Idee, die ich noch nicht ausprobiert habe, ist, die Zeitreihen in Segmente aufzuteilen und auf diese Weise einige Funktionen zu generieren, aber ich habe keine großen Hoffnungen.
quelle
Antworten:
Ich hatte ziemlich gute Erfolge bei der Anwendung von KNN mit Dynamic Time Warping als Entfernungsmetrik.
Meine Forschung (pdf) legt nahe, dass dieser Ansatz sehr schwer zu übertreffen ist. Das folgende Schema stammt aus meiner Python-Implementierung von KNN und DTW auf Github . Oder in IPython Notebook anzeigen
Wenn Ihr Trainingsdatensatz sehr groß ist, empfehle ich, eine hierarchische Gruppierung der Distanzmatrix durchzuführen. Dann Stichproben aus gewünschten Clustern, um Ihren kleineren Trainingsdatensatz zu erstellen. Dadurch
hclust
wird sichergestellt, dass Sie Zeitreihen haben, die eine breite Palette von Zeitreihenmerkmalen in Ihren Daten darstellen.quelle
Die beiden Ansätze zur Klassifizierung von Zeitreihen
Es gibt zwei Möglichkeiten, mit zeitlich strukturierten Eingaben für Klassifizierungsaufgaben umzugehen:
Ich habe KNN in der Vergangenheit auch erfolgreich mit DTW bereitgestellt. Ich war jedoch fast immer in der Lage, seine Genauigkeit mit einem Modell zu übertreffen, das gut gestaltete Funktionen verwendet. Außerdem skaliert KNN mit DTW für binäre Klassifikationen mit O (n_t · m_ {Zug} · m_ {Test}), wobei n_t die Länge der Zeitreihe ist, wobei mtrain und mtest die Anzahl der Geräte im Zug bzw. im Testsatz sind . Dies bedeutet, dass die Berechnungen ziemlich lange dauern.
Daher würde ich empfehlen, einen funktionsbasierten Ansatz zu verfolgen.
tsfresh berechnet eine Vielzahl von Funktionen
Das Python-Paket tsfresh berechnet eine große Anzahl solcher Funktionen aus einem pandas.DataFrame, der die Zeitreihen enthält. Die Dokumentation finden Sie unter http://tsfresh.readthedocs.io .
Sie können versuchen, eine große Anzahl von Funktionen zu berechnen. Später können Sie die Features nach ihrer Bedeutung filtern und vielversprechende Kandidaten identifizieren.
Haftungsausschluss: Ich bin einer der Autoren von tsfresh.
quelle