Kaggle. Vorhersage des Umsatzes, abhängig von den Wetterbedingungen



Noch am vergangenen Freitag hatte ich ein Interview in einem Unternehmen in Palo Alto für die Position eines Data Scientists. Dieser mehrstündige Marathon technischer und weniger schwerwiegender Probleme sollte mit meiner Präsentation über ein Projekt beginnen, an dem ich mich mit Datenanalyse beschäftigte. Dauer - 20-30 Minuten.

Data Science ist ein riesiger Bereich, der viele Dinge beinhaltet . Auf der einen Seite gibt es also eine große Auswahl, auf der anderen Seite musste ein Projekt ausgewählt werden, das von der Öffentlichkeit richtig angenommen wurde, das heißt, dass das Publikum die Aufgabe verstand, die Logik der Lösung verstand und gleichzeitig davon inspiriert werden konnte, wie der Ansatz ausgearbeitet wurde Das, was ich verwendet habe, hängt möglicherweise damit zusammen, was sie jeden Tag bei der Arbeit tun.

Ein paar Monate zuvor versuchte mein Freund, ein Inder, in dieselbe Firma zu kommen. Er erzählte ihnen von einer seiner Aufgaben, an denen er in der Graduiertenschule arbeitete. Und auf den ersten Blick sah es gut aus: Zum einen ist dies auf das zurückzuführen, was er in den letzten Jahren an der Universität getan hat, das heißt, er kann die Details und Nuancen auf einer tiefen Ebene erklären, und zum anderen wurden die Ergebnisse seiner Arbeit in einem Peer-Review veröffentlicht Magazin, das heißt, es ist ein Beitrag zum Welt-Sparschwein des Wissens. In der Praxis hat es aber ganz anders geklappt. Erstens, um zu erklären, was Sie tun möchten und warum, brauchen Sie viel Zeit und er hat 20 Minuten Zeit, um alles zu tun. Und zweitens warf seine Geschichte darüber, wie ein Graph mit einigen Parametern in Cluster unterteilt ist und wie alles wie ein Phasenübergang in der Physik aussieht, eine berechtigte Frage auf: "Warum brauchen wir das?"

Ich habe mich entschlossen, über einen der Wettbewerbe auf kaggle.com zu sprechen, an denen ich teilgenommen habe.

Die Wahl fiel auf die Aufgabe, bei der der Verkauf witterungsempfindlicher Güter in Abhängigkeit vom Datum und den gleichen Witterungsbedingungen vorherzusagen war . Der Wettbewerb fand vom 1. April bis 25. Mai 2015 statt. Im Gegensatz zu regulären Wettbewerben, bei denen die Gewinner groß und nicht sehr viel Geld verdienen und bei denen der Code und, was noch wichtiger ist, die Ideen geteilt werden dürfen, war der Preis in diesem Wettbewerb einfach: Der Personalvermittler wird sich Ihren Lebenslauf ansehen. Und da der Personalvermittler Ihr Modell bewerten möchte, war das Teilen von Code und Ideen verboten.

Herausforderung:


  • 45 SB-Warenhäuser an 20 verschiedenen Orten auf der Weltkarte (Geokoordinaten sind uns unbekannt)
  • 111 Waren, deren Verkauf theoretisch vom Wetter abhängen kann, wie Sonnenschirme oder Milch (die Waren sind anonym. Das heißt, wir versuchen nicht vorherzusagen, wie viele Galoschen an einem bestimmten Tag verkauft wurden. Wir versuchen vorherzusagen, wie viele Waren beispielsweise mit einem Index von 31 verkauft wurden.)
  • Daten vom 1. Januar 2012 bis 30. September 2014


Bild

Dieses nicht sehr klare Bild, das von der Datenbeschreibungsseite für diesen Wettbewerb entlehnt wurde, zeigt:
  • Spalte mit Zahlen auf der rechten Seite - meteorologische Stationen.
  • Jede Wetterstation hat zwei Reihen: untere - alle Daten, obere - Daten mit ungewöhnlichen Wetterbedingungen: Sturm, starker Wind, starker Regen oder Hagel usw.
  • Blaue Punkte - Zugset, für das sowohl Wetter als auch Verkauf bekannt sind. Rot - Testsatz. Wetterbedingungen sind bekannt, aber es gibt keinen Verkauf.


Die Daten werden in vier CSV-Dateien dargestellt:
  • train.csv - Verkauf von 111 Waren in 45 Geschäften pro Tag ab Zugset
  • test.csv - Datum, an dem der Umsatz in jedem der 45 Geschäfte für jedes der 111 Produkte vorhergesagt werden soll
  • key.csv - Welche Wetterstationen befinden sich neben welchen Geschäften?
  • weather.csv - Wetterbedingungen für jeden Tag im Intervall vom 1. Januar 2012 bis 30. September 2012 für jede der 20 Wetterstationen


Meteorologische Stationen liefern die folgenden Daten (in Klammern der Prozentsatz der fehlenden Werte):
  • Maximale Temperatur [Grad Fahrenheit] (4,4%)
  • Minimale Temperatur [Grad Fahrenheit] (4,4%)
  • Durchschnittliche Temperatur [Grad Fahrenheit] (7,4%)
  • Abweichung von der erwarteten Temperatur [Grad Fahrenheit] (56,1%)
  • Taupunkt [Grad Fahrenheit] (3,2%)
  • Nassthermometer-Temperatur [Grad Fahrenheit] (6,1%)
  • Sonnenaufgang (47%)
  • Sonnenuntergangszeit (47%)
  • Zusammenfassende Beschreibung der Art Regen, Nebel, Tornado (53,8%)
  • Niederschlag in Form von Schnee [Zoll] (35,2%)
  • Niederschlag [Zoll] (4,1%)
  • Atmosphärendruck der Station [Zoll Quecksilber] (4,5%)
  • Atmosphärendruck auf Meereshöhe [Zoll Quecksilber] (8,4%)
  • Windgeschwindigkeit [mph] (2,8%)
  • Windrichtung [Grad] (2,8%)
  • Durchschnittliche Windgeschwindigkeit [Meilen pro Stunde] (4,2%)

Offensichtliche Datenprobleme:
  • Wir kennen die geografischen Koordinaten der Geschäfte nicht. Und das ist schlimm. Regen oder Sonnenschein sind wichtig, aber Alaska und San Francisco dürften unterschiedliche Umsatzdynamiken aufweisen.
  • Produktnamen werden anonymisiert. Wir wissen nicht, ob es sich bei einem Produkt mit ID = 35 um Milch-, Whisky- oder Baumwollhosen handelt.
  • Die Organisatoren des Wettbewerbs haben beschlossen, den vorherigen Absatz zu verschärfen, und in englischer Sprache auf weiß geschrieben, dass es keine Garantien dafür gibt, dass ID = 35 in einem Geschäft dasselbe bedeutet wie in einem anderen.
  • Wetterstationen messen nicht alles und nicht immer. Die Wetterdaten sind ziemlich undicht. Und die Frage, wie diese Lücken geschlossen werden können, muss auf irgendeine Weise beantwortet werden.


Für mich ist die Hauptsache bei jeder Aufgabe im maschinellen Lernen, an der ich arbeite, die „Frage“. In dem Sinne, dass Sie die Frage verstehen müssen, um die Antwort zu finden. Dies scheint eine Tautologie zu sein, aber ich habe Beispiele sowohl für wissenschaftliche Aktivitäten als auch für Projekte von Drittanbietern wie kagla, bei denen versucht wurde, eine Antwort nicht auf die gestellte, sondern auf eine von ihnen erfundene Frage zu finden, und die nicht mit irgendetwas Gutem endete .

Das zweitwichtigste ist die Metrik. Mir gefällt nicht, wie es sich anhört: "Mein Modell ist genauer als deins." Viel netter klingt die Bedeutung ähnlich, aber etwas genauer: "Mein Modell ist genauer als deins, wenn wir diese Metrik zur Auswertung verwenden."

Wir müssen vorhersagen, wie viele Waren verkauft werden, das heißt, diese Regressionsaufgabe. Die Standard-Regressionsmetrik der Standardabweichung kann verwendet werden, ist jedoch unlogisch. Das Problem ist, dass ein Algorithmus, der vorhersagt, wie viele Paar Gummistiefel verkauft werden, negative Werte vorhersagen kann. Und dann wird die Frage sein, was mit diesen negativen Werten zu tun ist. Null raus? Den absoluten Wert nehmen? Es ist trostlos. Sie können es besser machen. Lassen Sie uns eine monotone Transformation dessen durchführen, was vorhergesagt werden muss, damit die konvertierten Werte alle realen, einschließlich negativer, Werte annehmen können. Wir sagen sie voraus und führen dann die inverse Transformation in das Intervall nicht negativer reeller Zahlen durch.

Sie können sich das so vorstellen, als wäre unsere Fehlerfunktion folgendermaßen definiert:


Wo:
  • a - realer Wert
  • p ist unsere Vorhersage
  • Der natürliche Logarithmus des um 1 verschobenen Arguments ist eine monotone Abbildung von einer nicht negativen reellen Achse auf die gesamte Achse mit einer offensichtlichen inversen Transformation.


Noch wichtiger ist jedoch, dass in diesem Wettbewerb die Genauigkeit unserer Vorhersage genau anhand dieser Metrik bewertet wird. Und ich werde es genau verwenden: Was die Organisatoren wollen, werde ich ihnen geben.

Null-Iteration oder Basismodell.


Bei der Arbeit an verschiedenen Aufgaben hat sich dieser Ansatz bewährt: Sobald Sie mit der Arbeit an einer Aufgabe begonnen haben, erstellen Sie ein „unbeholfenes“ Skript, das eine Vorhersage für unser Testset erstellt. Unbeholfen, weil es auf langweilige Weise erstellt wird, ohne zu reflektieren, ohne die Daten zu betrachten. Und ohne irgendwelche Distributionen aufzubauen. Die Idee ist, dass ich eine Untergrenze für die Genauigkeit des Modells benötige, das ich anbieten kann. Sobald ich ein solches "plumpes" Skript habe, kann ich einige neue Ideen überprüfen, neue Zeichen erstellen und die Modellparameter anpassen. Normalerweise bewerte ich die Genauigkeit auf zwei Arten:
  • Das Ergebnis der Vorhersageauswertung auf dem Testset, das uns das Public Leaderboard auf kaggle zeigt.
  • Halten Sie den Satz aus, wenn der Zugsatz groß und gleichmäßig ist, oder führen Sie eine 5-fache Kreuzvalidierung durch, wenn der Zugsatz klein oder ungleichmäßig ist


Das erste ist gut, weil es nicht viel Zeit braucht. Hat eine Vorhersage gemacht, an die Seite geschickt - hat das Ergebnis bekommen. Das Schlimme ist, dass die Anzahl der Versuche pro Tag begrenzt ist. In diesem Wettbewerb ist dies 5. Er ist auch gut darin, die relative Genauigkeit des Modells zu zeigen. Fehler 0.1 - ist es viel oder wenig? Wenn viele in der öffentlichen Bestenliste weniger Vorhersagen haben, dann ist das eine Menge.

Die zweite ist insofern gut, als Sie verschiedene Modelle beliebig oft bewerten können.

Das Problem besteht darin, dass ein Modell, das mit derselben Metrik ausgewertet wird, in diesen beiden Ansätzen unterschiedliche Genauigkeiten aufweisen
kann : Inkonsistenzen können verursacht werden durch:
  • Daten in Zug und Test werden von verschiedenen Distributionen gesammelt
  • sehr kleiner Zug oder Test
  • Eine knifflige Metrik erlaubt keine Validierung durch den Menschen

In der Praxis reicht es aus, dass die Verbesserung der Genauigkeit des Modells für die Kreuzvalidierung der Verbesserung der Ergebnisse in der öffentlichen Bestenliste entspricht, eine genaue numerische Entsprechung ist nicht erforderlich.

Also. Zunächst habe ich ein Skript geschrieben, das:
  • Destilliert die Zeit der Dämmerung / des Sonnenuntergangs von Stunden und Minuten auf die Anzahl der Minuten ab Mitternacht.
  • Zusammenfassung der Wetterbedingungen in Dummy-Variablen.
  • Anstelle aller fehlenden Werte -1.
  • Wir verbinden die entsprechenden train.csv / test.csv, key.csv und weather.csv
  • Das resultierende Zugset - 4.617.600 Objekte.
  • Der resultierende Testsatz - 526.917 Objekte.


Jetzt müssen wir diese Daten einem Algorithmus zuführen und eine Vorhersage treffen. Es gibt eine Fülle unterschiedlicher Regressionsalgorithmen, von denen jede ihre Vor- und Nachteile hat, dh es gibt eine große Auswahl. Meine Wahl in diesem Fall für das Basismodell ist Random Forest Regressor . Die Logik dieser Wahl ist, dass:
  • Random Forest bietet alle Vorteile von Decision Tree-Algorithmen. Zum Beispiel ist es ihm theoretisch gleichgültig, ob es sich um eine numerische oder eine kategoriale Variable handelt.
  • Es funktioniert klug genug. Wenn das Gedächtnis mir recht gibt, ist die Komplexität O (n log (n)), wobei n die Anzahl der Objekte ist. Dies ist schlechter als die Methode der stochastischen Gradientenabnahme mit ihrer linearen Komplexität, aber besser als die Support-Vektor-Methode mit einem nichtlinearen Kern, in dem O (n ^ 3).
  • Bewertet die Bedeutung von Attributen, die für die Modellinterpretation wichtig ist.
  • Gleichgültig gegenüber Multikollinearität und Korrelation von Daten.


Vorhersage => 0,49506

Iteration 1.


Normalerweise wird in allen Online-Kursen viel darüber diskutiert, welche Grafiken erstellt werden müssen, um zu verstehen, was vor sich geht. Und diese Idee ist richtig. Aber! In diesem Fall liegt ein Problem vor. 45 Geschäfte, 111 Produkte, und es gibt keine Garantie dafür, dass die gleiche ID in verschiedenen Geschäften dem gleichen Produkt entspricht. Das heißt, es stellt sich heraus, dass wir 45 * 111 = 4995 verschiedene Paare (Geschäft, Produkt) untersuchen und dann vorhersagen müssen. Die Wetterbedingungen können für jedes Paar unterschiedlich sein. Die richtige, einfache, aber nicht offensichtliche Idee besteht darin, für jedes Paar (Geschäft, Produkt) eine Heatmap zu erstellen, auf der angezeigt wird, wie viele Einheiten des Produkts während der gesamten Zeit verkauft wurden:


  • In der Vertikalen - der Produktindex.
  • Horizontal - Intex aufbewahren.
  • Die Helligkeit der Punkte ist logarithmisch (wie viele verkaufte Wareneinheiten zu jeder Zeit).

Und was sehen wir? Das Bild ist ziemlich blass. Das heißt, es ist möglich, dass einige Waren in einigen Geschäften grundsätzlich nicht verkauft wurden. Ich verbinde dies mit der geografischen Lage der Läden. (Wer kauft den Daunenschlafsack in Hawaii?). Und lassen Sie uns aus unserem Zug ausschließen und die Produkte testen, die noch nie in diesem Geschäft verkauft wurden.
  • Zug von 4617600 wird auf 236038 reduziert
  • Test von 526917 ist auf 26168 reduziert

Das heißt, die Datengröße hat sich um fast das 20-fache verringert. Und als Ergebnis:
  • Wir haben einige Störgeräusche aus den Daten entfernt. Infolgedessen ist es für den Algorithmus einfacher zu trainieren und vorherzusagen, dh die Genauigkeit des Modells sollte steigen.
  • Das Modell trainiert viel schneller, das heißt, das Testen neuer Ideen ist viel einfacher geworden.
  • Jetzt trainieren wir in einem reduzierten Zug (236038 Objekte), prognostizieren in einem reduzierten Test (26168 Objekte), aber da der Cuggle eine Vorhersage mit einer Größe (526917 Objekte) will, gleichen wir den Rest mit Nullen aus. Die Logik ist, dass wenn ein Produkt noch nie in diesem Geschäft verkauft wurde, es entweder nie verkauft wird oder es wird verkauft, aber wir können dies auf keinen Fall vorhersagen.


Vorhersage -> 0,14240 . Der Fehler hat sich dreimal verringert.

Iteration 2.


Das Trimmen von Zug- / Testgrößen funktionierte hervorragend. Kann man sich verschlimmern? Es stellt sich heraus, dass Sie können. Nach der vorherigen Iteration habe ich nur 255 Nicht-Null-Paare (Geschäft, Produkt) erhalten, und dies ist bereits sichtbar. Ich habe mir die Charts für jedes Paar angesehen und es stellte sich heraus, dass einige Produkte nicht wegen schlechter / guter Wetterbedingungen verkauft wurden, sondern einfach, weil sie nicht verfügbar waren. Hier ist zum Beispiel ein Bild für Produkt 93 in Laden 12:



Ich weiß nicht, um welche Art von Produkt es sich handelt, aber es besteht der Verdacht, dass der Verkauf Ende 2012 eingestellt wurde. Sie können versuchen, diese Produkte aus dem Zug zu entfernen und im Test 0 für alle Produkte festzulegen, wie wir voraussagen.

  • Zug ist auf 191.000 Objekte reduziert
  • Test ist auf 21272 Objekte reduziert

Vorhersage -> 0,12918

Iteration 3.


Der Name des Wettbewerbs beinhaltet eine Vorhersage auf der Grundlage von Wetterdaten, aber wie üblich sind sie schlau. Das Problem, das wir zu lösen versuchen, klingt anders:
"Sie haben einen Zug, Sie haben einen Test, drehen, wie Sie wollen, aber machen die genaueste Vorhersage für diese Metrik."

Was ist der Unterschied? Der Unterschied ist, dass wir nicht nur Wetterdaten haben, sondern auch ein Datum. Und das Datum ist eine Quelle von sehr mächtigen Funktionen.
  • Daten für drei Jahre => jährliche Häufigkeit => neue Zeichen Jahr und Anzahl der Tage ab dem neuen Jahr
  • Die Leute werden einmal im Monat bezahlt. Es ist möglich, dass monatlich Einkäufe getätigt werden. => neues Monatszeichen
  • Wie Menschen einkaufen, kann mit dem Wochentag in Beziehung gesetzt werden. Regen ist natürlich, aber Freitagabend ist Freitagabend => ein neues Zeichen ist der Wochentag .

Vorhersage -> 0.10649 (wir sind übrigens schon in den Top 25%)

Und wie ist es mit dem Wetter?
Es stellt sich heraus, dass das Wetter nicht sehr wichtig ist. Ich habe ehrlich versucht, ihr Gewicht zu verleihen. Ich habe versucht, die fehlenden Werte auf verschiedene Arten einzufügen, wie zum Beispiel den Durchschnittswert für das Attribut, für verschiedene knifflige Untergruppen, und habe versucht, die fehlenden Werte mithilfe verschiedener Algorithmen für maschinelles Lernen vorherzusagen. Etwas geholfen, aber auf der Ebene der Fehler.

Der nächste Schritt ist die lineare Regression.
Trotz der offensichtlichen Einfachheit des Algorithmus und der vielen Probleme, die dieser Algorithmus hat, hat er erhebliche Vorteile, die ihn zu einem meiner bevorzugten Regressionsalgorithmen machen.

  • Kategoriale Zeichen wie Wochentag, Monat, Jahr, Filialnummer und Produktindex werden in Dummy-Variablen destilliert
  • Skalierung zur Erhöhung der Konvergenzgeschwindigkeit und Interpretierbarkeit der Ergebnisse.
  • Drehen Sie die Regularisierungsparameter L1 und L2.


Vorhersage -> 0.12770
Dies ist schlimmer als Random Forest, aber nicht so sehr.

Die Frage ist, warum ich eine lineare Regression für nichtlineare Daten benötige. Es gibt einen Grund. Und dieser Grund ist eine Einschätzung der Wichtigkeit von Symptomen.

Ich benutze drei verschiedene Ansätze für diese Einschätzung.
Das erste ist, was RandomForest produziert, nachdem wir es trainiert haben:

Was sehen wir auf diesem Bild? Die Tatsache, dass die Art der verkauften Waren sowie die Filialnummer wichtig sind. Und der Rest ist viel weniger wichtig. Aber wir könnten das sagen, ohne die Daten zu betrachten. Entfernen wir den Produkttyp und die Filialnummer:

Und was ist da? Jahr - vielleicht ist das logisch, aber es ist mir nicht klar. Druck war übrigens für mich verständlich, für die Leute, denen ich ihn sendete, war es nicht sehr. Dennoch ändert sich in St. Petersburg das Wetter häufig, was mit einer Änderung des Luftdrucks einhergeht, und ich war mir bewusst, wie sich dadurch die Stimmung und das Wohlbefinden, insbesondere bei älteren Menschen, ändert. Für die Menschen in Kalifornien mit seinem stabilen Klima war dies nicht offensichtlich. Was weiter? Die Anzahl der Tage seit Jahresbeginn ist ebenfalls logisch. Verkürzt, zu welcher Jahreszeit wir versuchen, Verkäufe vorherzusagen. Und das Wetter, was auch immer man sagen mag, kann mit der Jahreszeit verbunden sein. Dann ist auch der Wochentag klar. Usw.

Die zweite Methode ist der Absolutwert der Koeffizienten, der eine lineare Regression der skalierten Daten ergibt. Je größer der Koeffizient, desto mehr Einfluss hat er.



Das Bild sieht so aus und hier ist wenig klar. Der Grund, warum es so viele Schilder gibt, ist, dass beispielsweise der Produkttyp für RandomForest ein Schild ist, und hier gibt es bereits 111 davon, die gleiche mit der Filialnummer, dem Monat und dem Wochentag. Lassen Sie uns den Produkttyp und die Filialnummer entfernen.


So ist es besser. Was ist hier los? Ein Monat ist wichtig, besonders wenn es Dezember, Januar oder November ist. Es scheint auch logisch. Winter Das wetter. Und vor allem die Feiertage. Hier ist das neue Jahr und Thanksgiving und Weihnachten.

Bei der dritten Methode handelt es sich um die Brute-Force-Methode, bei der Zeichen nacheinander weggeworfen werden und beobachtet wird, wie sich dies auf die Genauigkeit der Vorhersage auswirkt. Das zuverlässigste, aber das trostloseste.

Mit dem Auffinden von Zeichen und ihrer Interpretation scheinen sie nunmehr numerische Methoden abgeschlossen zu haben. Hier ist alles einfach. Wir probieren verschiedene Algorithmen aus, finden die optimalen Parameter manuell oder mithilfe von GridSearch. Wir verbinden. Wir sagen voraus.

  • Lineare Regression ( 0,12770 )
  • Zufälliger Wald ( 0.10649 )
  • Steigungserhöhung ( 0.09736 )

Ich habe nicht besonders erfunden. Er nahm einen gewichteten Durchschnitt dieser Vorhersagen. Er berechnete die Gewichte, indem er diese Algorithmen auf einem Holdout-Set vorhersagte, das er aus dem Zugset herausgebissen hatte.
Es stellte sich heraus, dass 0,85% Gradient Boosting, 10% Random Forest, 5% lineare Regression.

Ergebnis 0.09532 (15. Platz, Top 3%)


In dieser Grafik ist das bekannteste Ergebnis der erste Platz im Private LeaderBoard.

Was hat nicht funktioniert:
  • kNN ist ein einfacher Algorithmus, der jedoch häufig als Teil eines Ensembles eine gute Leistung erbringt. Ich konnte nicht weniger herauspressen (0.3)
  • Neuronale Netze - mit der richtigen Herangehensweise zeigen sie auch bei solchen gemischten Daten ein anständiges Ergebnis, und was wichtig ist, sie zeigen sich oft in Ensembles großartig. Dann hatte ich nicht die Stumpfheit meiner Hände, irgendwo war ich zu schlau.
  • Ich habe versucht, separate Modelle für jede Wetterstation, jedes Produkt und jedes Geschäft zu erstellen, aber die Daten werden sehr klein, sodass die Genauigkeit der Vorhersage abnimmt.
  • Es wurde versucht, Zeitreihen zu analysieren und den Trend und die periodischen Komponenten hervorzuheben, aber auch diese Genauigkeit der Vorhersage nahm nicht zu.


Gesamt:
  • Schlaue Algorithmen sind wichtig, und jetzt gibt es Algorithmen, die sofort sehr genaue Ergebnisse liefern. (Ich war zum Beispiel mit einem Faltungsnetz aus 28 Schichten zufrieden , das selbst die überlebenden Merkmale von den Bildern isoliert. )
  • Die Aufbereitung von Daten und die Erstellung kompetenter Attribute ist oft (aber nicht immer) viel wichtiger als komplexe Modelle.
  • Oft funktionieren brillante Ideen nicht.
  • Manchmal funktionieren völlig dumme und hoffnungslose Ideen großartig.
  • Menschen sind jene Kreaturen, die sich gerne in einer Komfortzone aufhalten und ihrem bewährten Zeitplan folgen, der auf einem Kalender basiert und nicht auf einem momentanen Impuls, der durch die Wetterbedingungen verursacht wird.
  • Ich habe versucht, so viele Daten wie möglich zusammenzudrücken, aber wenn wir den Preis der Waren oder deren Namen oder den geografischen Standort der Geschäfte kennen, wäre die Lösung anders.
  • Ich habe nicht versucht, Wetter vor und nach dem Tag hinzuzufügen, für den eine Vorhersage gemacht werden sollte. Außerdem habe ich nicht versucht, ein separates Attribut zur Beschreibung der Feiertage zu erstellen. Es ist möglich, dass dies helfen würde.
  • Ich verbrachte eine Woche mit allem, von Zeit zu Zeit habe ich nach einer Dissertation gesucht und eine weitere Iteration gestartet. Vielleicht könnte die Genauigkeit der Vorhersage gesteigert werden, wenn ich mehr Zeit aufwenden würde, obwohl ich dies in einer Woche nicht getan habe, dann sei es so. Auf kaggle.com gibt es eine Menge interessanter Wettbewerbe, und wenn man sich auf eine Sache beschränkt, ist dies in Bezug auf die Effektivität des Wissenserwerbs nicht richtig.
  • Ich empfehle es jedem, der nicht versucht hat, auf kaggle.com anzutreten . Es ist interessant und informativ.


UPDATE:
In den Kommentaren wurde eine sehr korrekte Frage zur Überanpassung gestellt, und ich beschloss, einen Text hinzuzufügen, der beschreibt, wie die Genauigkeit Ihres Modells auf kaggle.com bewertet wird.

Oft werde ich während des Interviews gefragt, wo ich Erfahrung im maschinellen Lernen habe. Zuvor antwortete ich, dass die theoretische Vorbereitung von Online-Kursen, das Lesen von Büchern, wissenschaftlichen Artikeln und Foren Themen betrifft. Ein Praktikum mit Versuchen, maschinelles Lernen in der Physik der kondensierten Materie anzuwenden, und Erfahrungen mit der Teilnahme an Wettbewerben zum Thema Husten. Darüber hinaus hat kaggle mir in Bezug auf Wissen viel mehr geboten. Zumindest, weil ich dort mit mehr als 20 verschiedenen Aufgaben gearbeitet habe und jede ihre eigenen Nuancen und Probleme hat. Zum Beispiel:

  • Otto Group Product Classification Challenge - Die Daten wurden so aufbereitet, dass es niemandem wirklich gelungen ist, Zeichen zu setzen. Der Schwerpunkt dieses Wettbewerbs lag auf numerischen Methoden. Algorithmen, Modellparameter, Ensembles. In diesem Wettbewerb habe ich die Algorithmen herausgefunden: Gradient Boosting, Neural Networks kennen gelernt, wie man einfache Ensembles macht. Er begann aktiv mit Scikit-Learn, Graphlab und Xgboost zu arbeiten.
  • Suchergebnisse Relevanz - hier Natural Language Processing mit allen relevanten theoretischen und praktischen Problemen. Theoretische Grundlagen und praktische Erfahrung in der Verwendung von SVM, Wortsack, word2vec, Glove, nltk.
  • Avito-Kontextanzeigenklicks - Es gab eine Frage der Skalierbarkeit. 300 Millionen Objekte mit vielen Schildern. Und dann ging ich zu Apache Spark und zeigte alle Stärken und Schwächen der logistischen Regression. (Leider haben meine Hände FFM nicht erreicht)
  • Erkennung von diabetischer Retinopathie - Bildverarbeitung, Extraktion von Zeichen aus Bildern, neuronale Netze, Vor- und Nachteile der Verwendung der GPU. Erfahrung mit Theano und ImageMagic.

und so weiter, weitere 15 verschiedene Probleme. Es ist sehr wichtig, dass Tausende von Menschen mit unterschiedlichen Kenntnissen und Erfahrungen gleichzeitig an diesen Aufgaben arbeiteten und Ideen und Code austauschten. Meer des Wissens. Meiner Meinung nach ist dies ein sehr effektives Training, insbesondere wenn Sie sich gleichzeitig mit der entsprechenden Theorie vertraut machen. Jeder Wettbewerb lehrt etwas und in der Praxis. Zum Beispiel haben viele auf unserem Campus von der PCA gehört, und viele glauben, dass dies ein Zauberstab ist, der fast blind verwendet werden kann, um die Anzahl der Zeichen zu verringern. Tatsächlich ist PCA jedoch eine sehr leistungsfähige Technik, wenn sie richtig angewendet wird. Und schießt sehr kraftvoll in das Bein, wenn falsch. Aber bis Sie es mit verschiedenen Datentypen ausprobiert haben, spüren Sie es wirklich nicht.

Und in meiner Unschuld nahm ich an, dass diejenigen, die von dem Kagl hörten, es so wahrnahmen. Es stellte sich heraus, dass nein. Als ich mit meinen Freunden von Data Scientists sprach und meine Erfahrungen mit dem Husten bei verschiedenen ein wenig diskutierte, stellte ich fest, dass die Leute nicht wissen, wie die Genauigkeit des Modells bei diesen Wettbewerben bewertet wird, und dass die allgemeine Meinung über Cahler übertrieben ist Die Teilnahme an Wettbewerben ist eher negativ als positiv.

Also werde ich versuchen zu erklären, wie es ist und was:


Die meisten (aber nicht alle) Aufgaben, die denjenigen angeboten werden, die dies wünschen, sind die Ausbildung bei einem Lehrer. Das heißt, wir haben ein Zugset, es gibt ein Testset. Und Sie müssen beim Testen eine Vorhersage treffen. Die Genauigkeit des Modells wird dadurch bewertet, wie richtig wir den Test vorhergesagt haben. Und das hört sich schlecht an. In dem Sinne, dass erfahrene Data Scientists das Problem sofort erkennen werden. Wir machen eine Reihe von Vorhersagen über Tests und passen diese aggressiv an. Und das Modell, das genau auf Test arbeitet, kann auf widerliche Weise auf neuen Daten arbeiten. Und genau so denken die meisten, die von Kagl gehört, es aber noch nicht versucht haben, über diesen Prozess nach. Aber! In der Tat ist dies nicht so.

Die Idee ist, dass der Testsatz in zwei Teile unterteilt ist: Öffentlich und Privat. In der Regel im Anteil von 30% bei Public und 70% bei Private. Sie machen eine Vorhersage für das gesamte Test-Set, aber bis der Wettbewerb vorbei ist, können Sie die Genauigkeit Ihrer Vorhersage nur auf Öffentlich sehen. Und nach dem Ende des Wettbewerbs steht Ihnen die Genauigkeit von Private zur Verfügung, und diese Private ist die endgültige Genauigkeit Ihres Modells.

Ein Beispiel für einen Wettbewerb, den ich in diesem Text beschrieben habe.

Der Wettbewerb endet am 25. Mai. => Bis 17.00 Uhr (PST) steht Ihnen ein Vorhersagefehler von 30% Testsatz zur Verfügung, dh der öffentliche Teil. In meinem Fall war es 0,09486 und der 10. Platz in der öffentlichen Rangliste. Um fünf Uhr abends endet der PST-Wettbewerb. Und die Vorhersage für die restlichen 70% (Privat) wird verfügbar.
Ich habe es0,09532 und 15. Platz. Das heißt, ich bin ein wenig überzogen.

Die Gesamtgenauigkeit Ihres Modells auf Private wird anhand der beiden von Ihnen ausgewählten Vorhersagen geschätzt. In der Regel wähle ich eines davon aus - dasjenige, das den kleinsten Fehler in der öffentlichen Bestenliste und das zweite, das den kleinsten Fehler in der Kreuzvalidierung ergibt, berechnet auf der Zuggarnitur.

Normalerweise arbeite ich in diesem Modus: Wenn der Fehler bei der lokalen Kreuzvalidierung abgenommen hat => sende die Vorhersage an den Cuggle. Das heißt, eine starke Überanpassung tritt nicht auf. Modellparameter werden auch basierend auf der Größe des Fehlers bei der Kreuzvalidierung ausgewählt. Zum Beispiel wurden die Gewichte, mit denen ich die lineare Regression, die zufällige Gesamtstruktur und die Steigungserhöhung gemittelt habe, anhand von Daten ermittelt, die ich aus dem Zug herausgebissen und nicht zum Trainieren des Modells verwendet habe, da ich auch das Testset nicht verwendet habe.

Wie Owen richtig betonte, ist in einer seiner Präsentationen die korrekte Beurteilung der Modellgenauigkeit viel wichtiger als die Komplexität des Modells. Daher konzentriere ich mich bei der Erstellung meines naiven Skripts (null Iteration), wie oben erwähnt, nicht auf Datenanalyse und Modellgenauigkeit, sondern auf die Tatsache, dass der Fehler bei der Kreuzvalidierung im Zugsatz dem Fehler in der öffentlichen Bestenliste entspricht.

Es ist nicht immer einfach, aber oft einfach unmöglich.

Beispiele:


  • Facebook Recruiting IV: Mensch oder Roboter? - hier ist etwas nicht zusammengewachsen Außerdem diskutierten die Leute im Forum, wie man es menschlich macht, das heißt, ich bin nicht der einzige. Ich habe mich gerade mit Gutachtern über das Thema der Dissertation gestritten, also habe ich hier die öffentliche Bestenliste nur überfüllt, aber ordentlich. Mein Platz bei Private ist 91. Platz höher als bei Public. Höchstwahrscheinlich, weil die anderen aggressiver überfüttert haben. Im Allgemeinen ist dies jedoch ein Beispiel für Wettbewerb, wenn Public und Private aus leicht unterschiedlichen Distributionen stammen.
  • Die Umsatzprognose für Restaurants ist im Allgemeinen eine Achtung. Zugset - 137 Objekte, einschließlich Ausreißer. Test-Set - 10000. Hier kann man sich aufgrund der geringen Größe des Zuges nichts anderes vorstellen, als die öffentliche Bestenliste zu übertreffen. Infolgedessen gibt es einen starken Unterschied zwischen privat und öffentlich. Aber das war im Prinzip die dümmste Aufgabe unter denen, an denen ich gearbeitet habe.
  • ECML / PKDD 15: Vorhersage der Taxi-Trajektorie (I) und ECML / PKDD 15: Vorhersage der Taxi-Fahrzeit (II) - in diesen beiden Wettbewerben ist die Aufgabenstruktur zunächst so schwierig, dass Sie sich überlegen müssen, wie Sie die Genauigkeit mit richtig bewerten können lokale Kreuzvalidierung. Nun, die Größen von Zug / Test addieren sich auch. Millionen von Objekten im Zug und etwa tausend im Test.
  • ICDM 2015: Drawbridge Cross-Device Connections ist teilüberwachtes Lernen und ich habe mir bei dieser Aufgabe bereits das Gehirn gebrochen. Es scheint sich überlegt zu haben, wie die Genauigkeit des Modells lokal bewertet werden kann. Aber hier muss ich viel nachdenken und lesen. Dieser Wettbewerb endet in 12 Tagen. Wie sie in Odessa sagen: "Wir werden sehen." Vielleicht erfinde ich etwas.


Moral - Ich habe versucht zu verdeutlichen, dass die Personen, die an den kaggle.com-Vorführungen teilnehmen, ein anderes Publikum sind. Zuerst ist die Mehrheit damit beschäftigt, die Parameter auf der Grundlage der Ergebnisse der öffentlichen Bestenliste anzupassen, und dann heult sie das Forum auf, dass "die Welt grausam ist, jeder ist schuld", wenn ihr endgültiger Platz auf Privat viel niedriger als erwartet ist. Aber in der Regel öffnen sich die Chakren und das Publikum geht der Frage nach, wo KFold benötigt wird, wo StarifiedKFold ist, wo es ausreicht, um festzulegen, wie viele Falten Sie nehmen müssen, wie die Ergebnisse zu interpretieren sind, sehr ehrfürchtig nach. und im Allgemeinen, wo ein Rechen vorhanden ist und wann es möglich ist, darauf zu treten und wann es sich nicht lohnt.

Nur registrierte Benutzer können an der Umfrage teilnehmen. Bitte komm rein .

Haben Sie versucht, an Werbeaktionen auf kaggle.com teilzunehmen?

  • 10,5% Aktiv beteiligt. 16
  • 2,6% haben aktiv teilgenommen, aber früher. Jetzt gibt es keine Zeit / Lust. 4
  • 21,1% haben es ein- oder zweimal ausprobiert. (Das heißt, es wurden Vorhersagen zur Auswertung an die Site gesendet.) 32
  • 37% registrierten sich, versuchten jedoch nicht, ihre Vorhersagen zu übermitteln. 56
  • 13,2% Öffnete die Website, sah und schloss. 20
  • 3,3% Ich habe von kaggle.com gehört, mich aber nie angemeldet. 5
  • 11,9% Ich habe zum ersten Mal von kaggle.com gehört. 18

Jetzt auch beliebt: