
* Farm - (aus der englischen Landwirtschaft) - eine lange und langweilige Wiederholung bestimmter Spielaktionen für einen bestimmten Zweck (Erfahrung sammeln, Ressourcen beschaffen usw.).
Einführung
Kürzlich (1. Oktober) wurde eine neue Sitzung des hervorragenden DS / ML-Kurses gestartet (ich kann jedem nur empfehlen, der, wie es jetzt heißt, DS als Erstkurs "eingeben" möchte). Und wie üblich haben Absolventen nach Abschluss eines Kurses eine Frage: Wo können sie jetzt praktische Erfahrungen sammeln, um das noch rohe theoretische Wissen zu festigen? Wenn Sie diese Frage in einem Profilforum stellen, lautet die Antwort höchstwahrscheinlich "Kaggle lösen". Kaggle ist ja, aber wo soll ich anfangen und wie kann ich diese Plattform am effektivsten für praktische Fertigkeiten nutzen? In diesem Artikel wird der Autor versuchen, diese Fragen aus eigener Erfahrung zu beantworten und die Position des Hauptschwaders auf dem Feld des wettbewerbsfähigen DS zu beschreiben, um den Pumpvorgang zu beschleunigen und einen Ventilator daraus zu gewinnen.
Ein paar Worte über den Kurs von seinen Machern:
Der mlcourse.ai-Kurs ist eine der umfangreichen Aktivitäten der OpenDataScience-Community. @yorko und das Unternehmen (~ 60 Personen) zeigen, dass coole Fähigkeiten außerhalb der Universität erworben werden können und sogar absolut kostenlos sind. Die Hauptidee des Kurses ist die optimale Kombination von Theorie und Praxis. Einerseits erfolgt die Präsentation der Grundkonzepte nicht ohne Mathematik, andererseits werden viele Hausaufgaben, Kaggle Inclass-Wettbewerbe und -Projekte mit einem gewissen Energieeinsatz hervorragende maschinelle Lernfähigkeiten vermitteln. Es ist unmöglich, den Wettbewerbscharakter des Kurses nicht zu bemerken - es wird eine allgemeine Bewertung der Studenten durchgeführt, die stark motiviert. Der Kurs unterscheidet sich auch darin, dass er in einer wirklich lebendigen Community stattfindet.
Der Kurs beinhaltet zwei Kaggle Inclass-Wettbewerbe. Beide sind sehr interessant, sie funktionieren gut beim Bau von Schildern. Die erste ist die Benutzeridentifikation anhand der Reihenfolge der besuchten Websites . Die zweite ist die Vorhersage der Popularität eines Artikels auf dem Medium . Der Hauptvorteil sind zwei Hausaufgaben, bei denen Sie klug sein und die Grundlinien in diesen Wettbewerben übertreffen müssen.
Nachdem wir dem Kurs und seinen Machern Tribut gezollt haben, setzen wir unsere Geschichte fort ...
Ich erinnere mich, dass vor anderthalb Jahren ein Kurs (noch die erste Version) von Andrew Ng abgeschlossen wurde, die Spezialisierung des Moskauer Instituts für Physik und Technologie abgeschlossen wurde , ein Berg von Büchern gelesen wurde - theoretischer Kopf voll, aber wenn man versucht, eine grundlegende Kampfaufgabe zu lösen - entsteht eine Betäubung. Nein, wie das Problem zu lösen ist - es ist klar, welche Algorithmen anzuwenden sind - ist ebenfalls verständlich, aber der Code ist sehr schwer zu schreiben, da die Hilfe von sklearn / pandas jede Minute abgerufen wird usw. Warum so - es gibt keine angesammelten Pipelines und das Gefühl des Codes "an Ihren Fingerspitzen".
Das wird nicht funktionieren, dachte der Autor und ging zu Kaggle. Es war beängstigend, sofort von einem Kampfwettbewerb zu starten, und das Haus des Wettbewerbs " Hauspreise: Fortgeschrittene Regressionstechniken " wurde zum ersten Zeichen, das den in diesem Artikel beschriebenen Ansatz für effektives Pumpen bildete.
In dem, was später beschrieben wird, gibt es kein Know-how, alle Techniken, Methoden und Techniken sind offensichtlich und vorhersehbar, aber dies beeinträchtigt nicht ihre Wirksamkeit. Zumindest gelang es dem Autor, den Kaggle Competition Master für sechs Monate und drei Wettbewerbe im Solo-Modus sterben zu lassen und zum Zeitpunkt des Schreibens dieses Artikels in die Top-200 der Kaggle-Weltrangliste einzutreten . Dies beantwortet übrigens die Frage, warum sich der Autor überhaupt den Mut genommen hat, einen Artikel dieser Art zu schreiben.
Kurz gesagt, was ist Kaggle?

Kaggle ist eine der bekanntesten Plattformen für die Durchführung von Wettbewerben in Data Science. In jedem Wettbewerb laden die Organisatoren eine Beschreibung des Problems, Daten zur Lösung dieses Problems und eine Metrik hoch, anhand derer die Lösung bewertet wird - und legen Fristen und Preise fest. Die Teilnehmer erhalten 3 bis 5 Versuche (nach dem Willen der Organisatoren) pro Tag, „einzureichen“ (ihre eigene Lösung zu senden).
Die Daten sind in ein Trainingsmuster (Zug) und einen Test (Test) unterteilt. Für den Trainingsteil ist der Wert der Zielvariablen (Ziel) bekannt, für den Testteil - Nr. Die Aufgabe der Teilnehmer besteht darin, ein Modell zu erstellen, das anhand des Trainingsteils der Daten das maximale Testergebnis liefert.
Jeder Teilnehmer macht Vorhersagen für das Testmuster - und sendet das Ergebnis an Kaggle. Anschließend wertet der Roboter (der die Zielvariable für den Test kennt) das gesendete Ergebnis aus, das auf der Bestenliste angezeigt wird.
Aber nicht alles ist so einfach - Testdaten wiederum sind in einem bestimmten Verhältnis in den öffentlichen (öffentlichen) und den privaten (privaten) Teil unterteilt. Während des Wettbewerbs wird die gesendete Entscheidung gemäß der von den Organisatoren festgelegten Metrik im öffentlichen Teil der Daten bewertet und in der Rangliste (der sogenannten öffentlichen Rangliste) dargestellt, anhand derer die Teilnehmer die Qualität ihrer Modelle bewerten können. Die endgültige Entscheidung (normalerweise zwei - nach Wahl des Teilnehmers) wird im privaten Teil der Testdaten bewertet - und das Ergebnis fällt in die private Rangliste, die erst nach dem Ende des Wettbewerbs verfügbar ist und anhand derer tatsächlich die endgültigen Ergebnisse bewertet, Preise, Brötchen und Medaillen verteilt werden.
Während des Wettbewerbs stehen den Teilnehmern daher nur Informationen zur Verfügung, da sich ihr Modell im öffentlichen Teil der Testdaten verhalten hat (welches Ergebnis - oder welche Geschwindigkeit gezeigt wurde). Wenn im Fall eines kugelförmigen Pferdes in einem Vakuum der private Teil der Daten in der Verteilung und Statistik mit der Öffentlichkeit übereinstimmt - alles ist in Ordnung, aber wenn nicht -, funktioniert ein Modell, das in der Öffentlichkeit gut funktioniert hat, möglicherweise nicht im privaten Teil, dh Überfixieren (Umschulung). Und hier entsteht das, was im Jargon als „Flug“ bezeichnet wird, wenn Personen vom 10. Platz auf einem öffentlichen Platz 1000-2000 Plätze auf einem privaten Teil hinunterfliegen, weil das von ihnen gewählte Modell umgeschult wurde und nicht die erforderliche Genauigkeit für geben konnte neue Daten.

Wie vermeide ich das? Zu diesem Zweck ist es zunächst erforderlich, das richtige Validierungsschema zu erstellen, das in den ersten Lektionen in fast allen DS-Kursen vermittelt wird. Weil Wenn Ihr Modell nicht die richtige Prognose für die Daten liefern kann, die es noch nie gesehen hat - unabhängig davon, welche ausgefeilte Technik Sie verwenden, egal wie komplex die neuronalen Netze sind, kann ein solches Modell nicht in der Produktion erstellt werden, weil Die Ergebnisse sind wertlos.
Für jeden Wettbewerb auf Kaggle wird eine separate Seite erstellt, auf der es einen Abschnitt mit Daten gibt, mit einer Beschreibung der Metrik - und für uns am interessantesten -, einem Forum und Kerneln.
Forum er und das Kaggle-Forum, Leute schreiben, diskutieren und tauschen Ideen aus. Aber die Kernel sind schon interessanter. Auf diese Weise können Sie Ihren eigenen Code ausführen, der direkten Zugriff auf die Wettbewerbsdaten in der Kaggle-Cloud hat (analog zu Amazonian AWS, Googles GCE usw.). Für jeden Kernel werden begrenzte Ressourcen zugewiesen. Wenn also nicht viele Daten vorhanden sind, arbeiten Sie mit Mit ihnen können Sie direkt über den Browser auf der Kaggle-Website Code schreiben, zur Ausführung ausführen und das Ergebnis übermitteln. Vor zwei Jahren wurde Kaggle von Google übernommen, daher ist es nicht verwunderlich, dass diese Funktionalität die Google Cloud Engine „unter der Haube“ verwendet.
Darüber hinaus gab es mehrere Wettbewerbe (kürzlich - Mercari ), bei denen Sie im Allgemeinen nur über Kernel mit Daten arbeiten konnten. Ein sehr interessantes Format, das den Hardwareunterschied zwischen den Teilnehmern ausgleicht und das Gehirn dazu zwingt, sich für die Optimierung von Code und Ansätzen einzuschalten, da die Kernel zu diesem Zeitpunkt natürlich ein striktes Ressourcenlimit hatten - 4 Kerne / 16 GB RAM / 60 Minuten Laufzeit / 1 GB Arbeits- und Ausgabespeicherplatz. Während der Arbeit an diesem Wettbewerb lernte der Autor mehr über die Optimierung neuronaler Netze als aus irgendeinem theoretischen Kurs. Ein bisschen war nicht genug für Gold, endete am 23. solo, erhielt aber ziemlich viel Erfahrung und Vergnügen ...
Bei dieser Gelegenheit möchte ich mich noch einmal bei meinen Kollegen von ods.ai - Arthur Stepanenko (Arthur) , Konstantin Lopukhin (Kostia) und Sergey Fironov (Sergeif) - für ihren Rat und ihre Unterstützung bei diesem Wettbewerb bedanken . Im Allgemeinen gab es viele interessante Punkte: Konstantin Lopukhin (kostia) , der mit Paweł Jankiewicz den ersten Platz belegte , legte dann im Chatraum eine sogenannte „ Referenz-Demütigung von 75 Zeilen “ an - einen Kernel in 75 Codezeilen, der das Ergebnis in die goldene Zone der Rangliste ausgibt. Das muss man natürlich sehen :)
Okay, abgelenkt und so - die Leute schreiben den Code und legen Kernel mit Lösungen, interessanten Ideen und vielem mehr an. Normalerweise erscheint in jedem Wettbewerb nach ein paar Wochen ein oder zwei ausgezeichnete Kernel-EDA (explorative Datenanalyse) mit einer detaillierten Beschreibung des Datensatzes, der Statistiken, Eigenschaften usw. Und ein paar Baselines (Basislösungen), die natürlich nicht das beste Ergebnis in der Rangliste zeigen, aber als Ausgangspunkt für die Erstellung Ihrer eigenen Lösung verwendet werden können.
Warum Kaggle?

Egal auf welcher Plattform Sie spielen, Kaggle ist eine der ersten und beliebtesten, mit einer exzellenten Community und einer recht komfortablen Umgebung (ich hoffe, sie werden die Kernel für Stabilität und Leistung verfeinern, sonst erinnern sich viele an die Hölle, in der es los war Mercari ) Aber im Allgemeinen ist die Plattform sehr praktisch und autark, und ihre Würfel werden immer noch geschätzt.
Ein kleiner Exkurs im Allgemeinen zum Thema wettbewerbsfähige DS. Sehr oft klingt in Artikeln, Gesprächen und anderen Mitteilungen der Gedanke, dass dies alles Blödsinn ist, Erfahrung in Wettbewerben nichts mit echten Aufgaben zu tun hat und die Leute dort damit beschäftigt sind, die 5. Dezimalstelle zu stimmen, die Wahnsinn ist und von der man sich scheidet Realität. Schauen wir uns dieses Problem etwas genauer an:
Als praktizierende DS-Spezialisten müssen und werden wir in unserer Arbeit im Gegensatz zu Wissenschaft und Wissenschaft geschäftliche Probleme lösen. Das heißt (hier ist ein Verweis auf CRISP-DM ), um die Aufgabe zu lösen, die notwendig ist:
- die geschäftliche Herausforderung verstehen
- Daten zu diesem Thema auswerten, ob die Antwort auf diese Geschäftsaufgabe darin verborgen ist
- Sammeln Sie zusätzliche Daten, wenn diese nicht ausreichen, um eine Antwort zu erhalten
- Wählen Sie die Metrik , die dem Geschäftsziel am nächsten kommt
- und erst danach das Modell auswählen, die Daten in das ausgewählte Modell konvertieren und "hgbusta entleeren". (C)
Die ersten vier Punkte aus dieser Liste werden nirgendwo gelehrt (korrigieren Sie mich, wenn solche Kurse erschienen sind - ich werde mich ohne zu zögern anmelden), hier können wir nur aus den Erfahrungen der in dieser Branche tätigen Kollegen lernen. Und hier ist der letzte Punkt: Ausgehend von der Wahl des Modells und darüber hinaus ist es möglich und notwendig, Wettbewerbe einzuleiten.
In jedem Wettbewerb wurde der größte Teil der Arbeit für uns von den Organisatoren erledigt. Wir haben das beschriebene Geschäftsziel, die ungefähre Metrik wurde ausgewählt, die Daten wurden gesammelt - und unsere Aufgabe ist es, aus all diesem Lego eine funktionierende Pipeline aufzubauen. Und hier werden die Fähigkeiten verbessert - wie man mit Pässen arbeitet, wie man Daten für neuronale Netze und Bäume vorbereitet (und warum neuronale Netze einen speziellen Ansatz erfordern), wie man die Validierung korrekt erstellt, wie man nicht umschult, wie man Hyperparameter auswählt, wie ....... ein Dutzend oder zwei „wie“, deren kompetente Leistung einen guten Spezialisten von Menschen unterscheidet, die in unserem Beruf auf dem Vormarsch sind.
Was Sie auf Kaggle "bewirtschaften" können

Grundsätzlich, und das ist vernünftig, kommen alle Neuankömmlinge nach Kaggle, um praktische Erfahrungen zu sammeln, aber vergessen Sie nicht, dass es darüber hinaus mindestens zwei weitere Ziele gibt:
- Farmmedaillen und Würfel
- Farm Reputation in der Kaggle Community
Das Wichtigste ist, dass diese drei Ziele völlig unterschiedlich sind, dass unterschiedliche Ansätze erforderlich sind, um sie zu erreichen, und dass Sie sie nicht besonders in der Anfangsphase verwechseln sollten!
Es ist nicht umsonst, dass es "in der Anfangsphase" beim Pumpen betont wird - diese drei Ziele verschmelzen zu einem und werden parallel gelöst, aber während Sie gerade erst anfangen - mischen Sie sie nicht ! Auf diese Weise vermeiden Sie Schmerzen, Enttäuschungen und Ressentiments in dieser ungerechten Welt.
Lassen Sie uns kurz auf die Ziele von unten nach oben eingehen:
- Reputation - gepumpt durch das Schreiben guter Beiträge (und Kommentare) im Forum und das Erstellen nützlicher Kernel. Zum Beispiel EDA-Kernel (siehe oben), Beiträge, die nicht standardmäßige Techniken beschreiben usw.
- Medaillen sind ein sehr kontroverses und hasserfülltes Thema, aber na ja. Es wird durch die Mischung der öffentlichen Kernel (*), die Teilnahme an einem Team mit Erfahrungsvoreingenommenheit und die Erstellung einer eigenen Top-Pipeline gepumpt.
- Erfahrung - gepumpt durch Analyse von Entscheidungen und Arbeiten an Fehlern.
(*) Beim Mischen öffentlicher Kernel handelt es sich um eine Farmmedaillentechnik, bei der auf einer öffentlichen Rangliste angeordnete Kernel mit maximaler Geschwindigkeit ausgewählt, ihre Vorhersagen gemittelt (gemischt) und das Ergebnis übermittelt werden. Normalerweise führt diese Methode zu einer harten Überanpassung (Umschulung zum Trainieren) und zum Fliegen im Liguster, aber manchmal können Sie eine Einreichung fast in Silber erhalten. Der Autor empfiehlt im Anfangsstadium keinen ähnlichen Ansatz (lesen Sie weiter unten über den Gürtel und die Hose).
Ich empfehle das erste Ziel, "Erfahrung" zu wählen und dabei zu bleiben, bis Sie das Gefühl haben, bereit zu sein, an zwei / drei Zielen gleichzeitig zu arbeiten.
Es gibt zwei weitere erwähnenswerte Punkte (Vladimir Iglovikov (ternaus) - danke für die Erinnerung).
Das erste ist die Umwandlung der in Kaggle investierten Anstrengungen in einen neuen, interessanteren und / oder hochbezahlten Arbeitsplatz. Unabhängig davon, wie die Kaggle-Würfel jetzt geebnet sind, sind zum Verständnis der Menschen die Zeile in der Zusammenfassung des Kaggle-Wettbewerbs und andere Erfolge immer noch etwas wert.
Um diesen Punkt zu veranschaulichen, können wir zwei Interviews ( eins , zwei ) mit unseren Kollegen Sergey Mushinsky (cepera_ang) und Alexander Buslaev (albu) zitieren.
Und auch die Meinung von Valery Babushkin ( venheads) :
Valery Babushkin - Leiter Data Science bei der X5 Retail Group (derzeit sind 30 Mitarbeiter + 20 freie Stellen seit 2019)
Leiter der Analytics-Gruppe Yandex Advisor
Kaggle Competition Master ist eine hervorragende Proxy-Metrik für die Bewertung eines zukünftigen Teammitglieds. Natürlich ist im Zusammenhang mit den neuesten Ereignissen in Form von Teams mit 30 Personen und unverkleideten Lokomotiven eine etwas gründlichere Untersuchung des Profils erforderlich als zuvor, aber dies ist immer noch eine Frage von mehreren Minuten. Eine Person, die mit hoher Wahrscheinlichkeit den Titel eines Masters erreicht hat, weiß, wie man Code von mindestens durchschnittlicher Qualität schreibt, ist mit maschinellem Lernen ziemlich vertraut, weiß, wie man Daten bereinigt und stabile Lösungen entwickelt. Wenn Sie sich immer noch nicht mit der Sprache eines Meisters rühmen können, ist die Tatsache der Teilnahme auch ein Plus, zumindest weiß der Kandidat über die Existenz von Kagl Bescheid und war nicht zu faul und verbrachte Zeit damit, sie zu beherrschen. Und wenn etwas anderes als ein öffentlicher Kernel gestartet wurde und die resultierende Lösung ihre Ergebnisse übertraf (was ziemlich einfach zu überprüfen ist), dann ist dies eine Gelegenheit für eine detaillierte Diskussion über die technischen Details, die viel besser und interessanter ist als die Fragen der klassischen Theorie, deren Antworten sie geben weniger Verständnis dafür, wie eine Person die Arbeit in Zukunft erledigen wird. Das einzige, wovor ich Angst haben sollte und was mir begegnet ist, ist, dass einige Leute denken, dass die Arbeit von DS so etwas wie Kagl ist, was grundlegend falsch ist. Viele mehr denken, dass DS = ML, was auch ein Fehler ist
Der zweite Punkt ist, dass die Lösung für viele Probleme in Form von Vorabdrucken oder Artikeln formuliert werden kann, die einerseits das Wissen, das der kollektive Verstand während des Wettbewerbs hervorgebracht hat, nicht in der Wildnis des Forums sterben lassen, andererseits das Portfolio des Autors um eine weitere Zeile erweitern und +1 auf Sichtbarkeit, was sich in jedem Fall positiv auf den Karriere- und Zitierindex auswirkt.
Zum Beispiel die Liste der Arbeiten unserer Kollegen nach den Ergebnissen mehrerer WettbewerbeAutoren (in alphabetischer Reihenfolge):
Andrei O., Ilja, Albu, Aleekart, Alex.radionov, Almln, Alxndrkalinin, Cepera_ang, Dautovri, Davydov, Fartuk, Golovanov, Ikibardin, Kes, Mpavlov, Mvakhrushev, n01z3, Rakhlin, Scit, Resol snikolenko, ternaus, twoleggedeye, versus, vicident, zfturbo
So vermeiden Sie den Schmerz, eine Medaille zu verlieren

Um zu punkten!
Ich werde es erklären. In fast jedem Wettbewerb, der sich dem Ende nähert, wird der Öffentlichkeit ein Kernel mit einer Lösung zur Verfügung gestellt, die die gesamte Rangliste nach oben verschiebt, aber für Sie mit Ihrer Entscheidung entsprechend nach unten. Und jedes Mal, wenn das Forum beginnt, SCHMERZEN! Wie kommt es, dass ich mich für Silber entschieden habe und jetzt nicht einmal mehr an Bronze ziehe? Was ist los, hol es zurück.
Denken Sie daran - Kaggle ist ein wettbewerbsfähiger DS. Der Platz auf der Rangliste, auf dem Sie sich befinden, liegt bei Ihnen. Nicht von dem Typ, der den Kernel angelegt hat, nicht davon, ob die Sterne zusammengekommen sind oder nicht, sondern nur davon, wie viel Aufwand Sie in die Lösung gesteckt haben und ob Sie alle möglichen Möglichkeiten genutzt haben, um sie zu verbessern.
Wenn der öffentliche Kernel Sie von Ihrem Platz in der Rangliste verdrängt, ist dies nicht Ihr Platz.
Anstatt Schmerz aus der Ungerechtigkeit der Welt zu schütten - danke diesem Kerl. Im Ernst, ein öffentlicher Kernel mit einer besseren Lösung als Ihrer bedeutet, dass Sie etwas in Ihren Pipelines verpasst haben. Finden Sie was genau, verbessern Sie Ihre Pipeline und umgehen Sie diese Menge von Hamstern mit der gleichen Geschwindigkeit. Denken Sie daran, um zu Ihrem Platz zurückzukehren, müssen Sie nur ein bisschen besser sein als dieses Publikum.
, , — … . , , — — .
, . — . ( Talking Data , 8- ) , (ppleskov) : " , , — ". , .
— :
" "()
, .

— python 3.6 jupyter notebook ubuntu . Python - DS, , jupyter , jupyter_contrib_nbextensions , , ubuntu — , bash :)
jupyter_contrib_nbextensions :
- Collapsible headings ( )
- Code folding ( )
- Split cells (, - )
.
- , . — . — .
, jupyter notebook , , . ( , , ( (ternaus) )
, jupyter - IDE, pycharm .
, , " ". , .
/OOF (.) .
(*) OOF — out of folds , -. . .
Wie? :
- , , , ..
- , , ( , , ..)
- Es wird ein speziell für DS / ML geschärftes Versionskontrollsystem verwendet. Zum Beispiel https://dvc.org .
Im Allgemeinen besteht in der Gemeinde die Tendenz, schrittweise zur dritten Option zu wechseln, weil und der erste und der zweite haben ihre Nachteile, aber sie sind einfach, zuverlässig und, ehrlich gesagt, für Kaggle sind sie genug.

Ja, mehr über Python für diejenigen, die kein Programmierer sind - haben Sie keine Angst davor. Ihre Aufgabe ist es, die Grundstruktur des Codes und die grundlegende Essenz der Sprache zu verstehen, um die Kernel anderer Leute zu verstehen und Ihre Bibliotheken zu schreiben. Es gibt viele gute Kurse für Anfänger im Web, vielleicht sagen sie Ihnen in den Kommentaren genau, wo. Leider (oder zum Glück) kann ich die Qualität solcher Kurse nicht beurteilen, daher gebe ich im Artikel keine Links an.
Kommen wir also zum Framework.

Hinweis
Alle weiteren Beschreibungen basieren auf der Arbeit mit Tabellen- und Textdaten. Bilder, die jetzt sehr viel auf Kaggle sind, sind ein separates Thema mit separaten Frameworks. Grundsätzlich ist es gut, sie verarbeiten zu können, wenn man nur etwas wie ResNet / VGG durchläuft und Funktionen herausholt, aber eine tiefere und subtilere Arbeit mit ihnen ist ein separates und sehr umfangreiches Thema, das im Rahmen dieses Artikels nicht behandelt wird.
Der Autor gibt ehrlich zu, dass er nicht sehr gut in Bildern ist. Der einzige Versuch, sich auf das Schöne einzulassen, war der Camera Identification- Wettbewerb, bei dem unsere Teams mit dem Tag [ ods.ai ] übrigens die gesamte Rangliste in die Luft sprengten, so dass Kaggle-Administratoren uns in der Pause besuchen mussten, um sicherzustellen, dass alles drin war Regeln - und die Gemeinschaft beruhigen. Bei diesem Wettbewerb erhielt ich Ehrensilber mit dem 46. Platz. Als ich die Beschreibung der Top-Lösungen unserer Kollegen las, stellte ich fest, dass ich nicht höher klettern konnte - sie verwenden wirklich schwarze Magie mit Erweiterung, Güte von 300 GB Daten, Opfer und so weiter.
Wenn Sie mit Bildern beginnen möchten, benötigen Sie im Allgemeinen andere Frameworks und andere Anleitungen.
Hauptziel
Ihre Aufgabe ist es, Pipelines (als Jupyter-Notebooks + Module konzipiert) für die folgenden Aufgaben zu schreiben:
- EDA (explorative Datenanalyse) . Hier müssen wir einen Kommentar abgeben - es gibt speziell ausgebildete Leute bei Kaggle :), die in jedem Wettbewerb atemberaubende EDA-Kernel gesehen haben. Sie werden es kaum schaffen, sie zu übertreffen, aber Sie müssen immer noch verstehen, wie Sie die Daten betrachten können, weil In Kampfeinsätzen sind Sie diese speziell ausgebildete Person. Deshalb untersuchen wir Ansätze, erweitern unsere Bibliotheken.
- Datenbereinigung - alles über Datenbereinigung. Emissionen, Auslassungen usw.
- Datenaufbereitung - alles, was mit der Aufbereitung von Daten für das Modell zusammenhängt. Ein paar Blocks:
- Modelle
- Lineare Modelle
- Baummodelle
- Neuronale Netze
- Exotisch (FM / FFM)
- Funktionsauswahl
- Suche nach Hyperparametern
- Ensemble
In Kerneln werden normalerweise alle diese Aufgaben in einem einzigen Code zusammengefasst, was verständlich ist. Ich empfehle jedoch dringend, für jede dieser Unteraufgaben einen separaten Laptop und ein separates Modul (eine Reihe von Modulen) zu erstellen. So wird es für Sie später einfacher.
Warnung vor dem möglichen Holivar - die Struktur dieses Frameworks ist nicht die ultimative Wahrheit, es gibt viele andere Möglichkeiten, Ihre Pipelines zu strukturieren - dies ist nur eine davon.
Daten werden zwischen den Modulen entweder in Form von CSV oder Feder / Gurke / HDF übertragen - was für Sie bequemer ist und was Sie gewohnt sind oder die Seele lügt.
Tatsächlich hängt noch viel von der Datenmenge ab. In TalkingData musste ich beispielsweise memmap durchgehen , um den Speichermangel beim Erstellen eines Datensatzes für lgb zu umgehen.
In anderen Fällen werden die Hauptdaten in HDF / Feder gespeichert , etwas Kleines (z. B. eine Reihe ausgewählter Attribute) befindet sich in CSV . Ich wiederhole - es gibt keine Vorlagen, die daran gewöhnt sind, damit zu arbeiten.
Anfangsphase

Wir gehen zu jedem Erste-Schritte-Wettbewerb (wie bereits erwähnt, begann der Autor mit Hauspreisen: Fortgeschrittene Regressionstechniken ) und beginnen mit der Erstellung unserer Laptops. Wir lesen öffentliche Kernel, kopieren Codeteile, Prozeduren, Ansätze usw. usw. Wir führen die Daten durch die Pipeline, senden sie ab - wir betrachten das Ergebnis, verbessern uns usw. in einem Kreis.
Die Aufgabe in dieser Phase besteht darin, eine effizient funktionierende Vollzyklus-Pipeline vom Laden und Reinigen der Daten bis zur endgültigen Übermittlung zu erfassen.
Eine Beispielliste dessen, was zu 100% bereit und funktionsfähig sein sollte, bevor Sie mit dem nächsten Schritt fortfahren:
- EDA . (Statistiken zu Datensatz, Boxplots, Kategorien, ...)
- Datenbereinigung. (geht durch Fillna, reinigt Kategorien, kombiniert Kategorien)
- Datenaufbereitung
- Allgemein (Verarbeitungskategorien - Label / Ohe / Frequenz, Projektion von Zahlen auf Kategorien, Transformation von Zahlen, Binning)
- Für Regressionen (verschiedene Skalierungen)
- Modelle
- Lineare Modelle (verschiedene Regressionen - Grat / Logistik)
- Baummodelle (lgb)
- Funktionsauswahl
- Ensemble
Geh in die Schlacht

Wähle einen beliebigen Wettbewerb und ... starte :)
Es gibt zwar kein funktionierendes Validierungsschema - keine weiteren Schritte !!!
- Führen Sie die Daten durch unsere generierte Pipeline und senden Sie das Ergebnis
- Wir halten unsere Köpfe fest, verrückt, beruhigen uns ... und fahren fort ...
- Wir lesen alle Kernel bezüglich der verwendeten Techniken und Ansätze.
- Lesen Sie alle Forumsdiskussionen
- Wir bauen Pipelines um / ergänzen sie mit neuen Techniken
- Wir gehen zu Schritt 1 über
Denken Sie daran - unser Ziel in dieser Phase ist es, Erfahrungen zu sammeln ! Füllen Sie unsere Pipelines mit Arbeitsansätzen und -methoden, füllen Sie unsere Module mit Arbeitscode. Wir kümmern uns nicht um Medaillen - oder besser gesagt, es ist großartig, wenn Sie sofort Ihren Platz in der Rangliste einnehmen können, aber wenn nicht, machen Sie sich keine Sorgen. Wir sind fünf Minuten lang nicht hierher gekommen, Medaillen und Sterbefälle werden nirgendwo hingehen.
Hier ist der Wettbewerb vorbei, bist du irgendwo da draußen, es scheint, dass jeder auf den nächsten greift?
NEIN!
Was machst du als nächstes:
- Ich warte fünf Tage. Lies das Forum nicht, vergiss Kaggle zu diesem Zeitpunkt. Lassen Sie Ihr Gehirn entspannen und Ihre Augen verwischen.
- Gehen Sie zurück zum Wettbewerb. Während dieser fünf Tage werden nach den Regeln des guten Geschmacks alle Spitzen eine Beschreibung ihrer Entscheidungen veröffentlichen - in Beiträgen im Forum, in Form von Kerneln, in Form von Github-Repositories.
Und hier beginnt deine persönliche HÖLLE!
- Sie nehmen mehrere Blätter im A4-Format und schreiben jeweils den Namen des Moduls aus dem obigen Framework (EDA / Vorbereitung / Modell / Ensemble / Funktionsauswahl / Hyperparametersuche / ...).
- Lesen Sie regelmäßig alle Lösungen, schreiben Sie neue Techniken, Methoden und Ansätze, die Ihnen neu sind, in die entsprechenden Broschüren.
Und das Schlimmste:
- Schreiben (spionieren) Sie konsequent für jedes Modul die Implementierung dieser Ansätze und Methoden und erweitern Sie Ihre Pipeline und Bibliotheken.
- Führen Sie die Daten im Post-Submit-Modus durch Ihre aktualisierte Pipeline, bis Sie eine Lösung in der Goldzone haben oder bis Geduld und Nerven ausgehen.
Und erst danach fahren wir mit dem nächsten Wettbewerb fort.
Nein, ich bin nicht beschissen. Ja, das ist möglich und einfacher. Sie entscheiden.
Warum 5 Tage warten und nicht sofort lesen, denn im Forum kann man Fragen stellen? In diesem Stadium (meiner Meinung nach) ist es besser, die bereits gebildeten Threads mit der Diskussion von Lösungen und Fragen zu lesen, die Sie möglicherweise haben - entweder wird jemand fragen, oder es ist besser, sie überhaupt nicht zu stellen, sondern selbst nach der Antwort zu suchen).
Warum tun das alles so? Nun noch einmal - die Aufgabe dieser Phase ist es, eine Datenbank mit Lösungen, Methoden und Ansätzen zu entwickeln. Arbeitsbasis bekämpfen. Damit Sie beim nächsten Wettbewerb keine Zeit verschwenden, sondern sofort sagen: Ja, es kann eine mittlere Zielcodierung eingehen , und ich habe übrigens den richtigen Code dafür durch die Falten in den Falten. Oder oh! Ich erinnere mich, dass das Ensemble dann scipy.optimize durchlaufen hat und der Code übrigens bereits für mich bereit ist.
Irgendwie so...
In den Arbeitsmodus wechseln

In diesem Modus lösen wir mehrere Wettbewerbe. Jedes Mal, wenn wir feststellen, dass sich immer weniger Datensätze auf den Blättern und immer mehr Code in den Modulen befinden. Allmählich reduziert sich die Aufgabe der Analyse auf die Tatsache, dass Sie gerade die Beschreibung der Lösung lesen, sagen Sie ja, wow, oh da ist es! Und fügen Sie Ihrem Sparschwein ein oder zwei neue Zaubersprüche oder Ansätze hinzu.
Danach wechselt der Modus in den Fehlerbehandlungsmodus. Die Basis ist bereit für Sie, jetzt muss sie nur noch richtig angewendet werden. Sehen Sie nach jedem Wettbewerb, während Sie die Beschreibung der Lösungen lesen, was Sie nicht getan haben, was besser gemacht werden könnte, was Sie verpasst haben oder wo Sie hineingegangen sind, wie ich es in Toxic getan habe. Er ging ziemlich gut, im Unterbauch aus Gold, und flog privat 1.500 Positionen hinunter. Es ist eine Schande für Tränen ... aber beruhigt, einen Fehler gefunden, einen Beitrag in einer Pause geschrieben - und eine Lektion gelernt.
Ein Zeichen für das endgültige Verlassen des Betriebsmodus kann die Tatsache sein, dass eine der Beschreibungen der Top-Lösung aus Ihrem Spitznamen geschrieben wird.
Was sollte bis zum Ende dieser Phase ungefähr in den Pipelines sein:
- Alle Arten von Optionen für die Vorverarbeitung und Erstellung numerischer Features - Projektionen, Beziehungen,
- Verschiedene Methoden zum Arbeiten mit Kategorien - Mittlere Zielcodierung in der richtigen Version, Häufigkeit, Bezeichnung / ohe,
- Verschiedene Einbettungsschemata über Text (Glove, Word2Vec, Fasttext)
- Verschiedene Textvektorisierungsschemata (Count, TF-IDF, Hash)
- Mehrere Validierungsschemata (N * M für Standard-Kreuzvalidierung, zeitbasiert, nach Gruppen)
- Bayesianische Optimierung / Hyperopt / etwas anderes zur Auswahl von Hyperparametern
- Shuffle / Target Permutation / Boruta / RFE - zur Auswahl von Features
- Lineare Modelle - im gleichen Stil über einen Datensatz
- LGB / XGB / Catboost - im gleichen Stil über einen Datensatz
Der Autor erstellte Metaklassen getrennt für lineare und baumbasierte Modelle mit einer einzigen externen Schnittstelle, um die Unterschiede in der API für verschiedene Modelle auszugleichen. Jetzt können Sie in einer einzelnen Zeile eine Zeile ausführen, z. B. LGB oder XGB, und zwar über einen einzelnen verarbeiteten Datensatz.
- Mehrere neuronale Netze für alle Gelegenheiten (wir machen derzeit keine Bilder) - Einbettungen / CNN / RNN für Text, RNN für Sequenzen, Feed-Forward für alles andere. Es ist gut zu verstehen und in der Lage zu sein, Auto-Encoder zu verwenden .
- Ensemble basierend auf lgb / Regression / Scipy - für Regressions- und Klassifizierungsaufgaben
- Es ist gut, bereits in der Lage zu sein, genetische Algorithmen zu verwenden , manchmal funktionieren sie gut
Zusammenfassend
Jede Sportart und jeder Wettkampf-DS ist auch eine Sportart, es ist viel Schweiß und viel Arbeit. Das ist weder gut noch schlecht, es ist eine Tatsache. Die Teilnahme an Wettbewerben (wenn Sie sich dem Prozess richtig nähern) fördert die technischen Fähigkeiten sehr gut und erschüttert mehr oder weniger den Sportgeist, wenn Sie wirklich nichts tun möchten, bricht direkt alles - aber Sie steigen auf Ihren Laptop, wiederholen das Modell, beginnen mit der Berechnung, damit nagen Sie an dieser unglücklichen 5. Dezimalstelle.
Entscheide dich also für Kaggle - Farmerfahrung, Medaillen und Fan!
Ein paar Worte zu den Pipelines des Autors

In diesem Abschnitt werde ich versuchen, die Hauptidee der über anderthalb Jahre gesammelten Pipelines und Module zu beschreiben. Wieder - dieser Ansatz behauptet nicht, universell oder einzigartig zu sein, aber plötzlich wird jemand helfen.
- Der gesamte Feature-Engineering-Code mit Ausnahme der mittleren Zielcodierung wird in Form von Funktionen in einem separaten Modul entfernt. Ich habe versucht, durch Objekte zu sammeln, es stellte sich als umständlich heraus, und in diesem Fall ist es auch nicht notwendig.
- Alle Funktionen des Feature-Engineerings sind im gleichen Stil ausgeführt und haben eine einzige Anruf- und Rückgabesignatur:
def do_cat_dummy(data, attrs, prefix_sep='_ohe_', params=None): # do something return _data, new_attrs
Wir übergeben den Datensatz, Attribute für die Arbeit, ein Präfix für neue Attribute und zusätzliche Parameter an die Eingabe. Am Ausgang erhalten wir einen neuen Datensatz mit neuen Attributen und eine Liste dieser Attribute. Außerdem wird dieser neue Datensatz in einer separaten Gurke / Feder gespeichert.
Dies gibt uns die Möglichkeit, schnell einen Datensatz für das Training aus vorgenerierten Cubes zusammenzustellen. Zum Beispiel führen wir für Kategorien drei Verarbeitungen gleichzeitig durch - Label Encoding / OHE / Frequency, speichern sie in drei separaten Federn und spielen dann in der Modellierungsphase einfach mit diesen Blöcken und erstellen verschiedene Trainingsdatensätze in einer eleganten Bewegung.
pickle_list = [ 'attrs_base', 'cat67_ohe', # 'cat67_freq', ] short_prefix = 'base_ohe' _attrs, use_columns, data = load_attrs_from_pickle(pickle_list) cat_columns = []
Wenn Sie ein anderes Dataset pickle_list
müssen, ändern Sie pickle_list
, pickle_list
neu und arbeiten Sie mit dem neuen Dataset.
Der Hauptfunktionssatz über tabellarische Daten (real und kategorial) umfasst verschiedene Codierungen von Kategorien, die Projektion numerischer Attribute auf kategoriale sowie verschiedene Transformationen.
def do_cat_le(data, attrs, params=None, prefix='le_'): def do_cat_dummy(data, attrs, prefix_sep='_ohe_', params=None): def do_cat_cnt(data, attrs, params=None, prefix='cnt_'): def do_cat_fact(data, attrs, params=None, prefix='bin_'): def do_cat_comb(data, attrs_op, params=None, prefix='cat_'): def do_proj_num_2cat(data, attrs_op, params=None, prefix='prj_'):
Ein universelles Schweizer Messer zum Kombinieren von Attributen, in das wir eine Liste von Quellattributen und eine Liste von Konvertierungsfunktionen übertragen. Am Ausgang erhalten wir wie üblich einen Datensatz und eine Liste neuer Attribute.
def do_iter_num(data, attrs_op, params=None, prefix='comb_'):
Plus verschiedene zusätzliche spezifische Konverter.
Zur Verarbeitung von Textdaten wird ein separates Modul verwendet, das verschiedene Methoden zur Vorverarbeitung, Tokenisierung, Lemmatisierung / Stemming, Übersetzung in eine Häufigkeitstabelle usw. enthält. usw. Mit sklearn , nltk und keras ist alles Standard.
Zeitreihen werden auch von einem separaten Modul verarbeitet, mit Funktionen zum Konvertieren des Originaldatensatzes sowohl für normale Aufgaben (Regression / Klassifizierung) als auch für Sequenz-zu-Sequenz. Vielen Dank an François Chollet für die Fertigstellung von Keras, damit die Konstruktion von Seq-2-Seq-Modellen nicht einem Voodoo-Ritual ähnelt, bei dem Dämonen gerufen werden.
Im selben Modul gibt es übrigens Funktionen der üblichen statistischen Analyse von Serien - Überprüfung auf Stationarität, STL-Zerlegung usw. ... Es hilft in der Anfangsphase der Analyse sehr, die Serie zu "fühlen" und zu sehen, wie sie ist.
Funktionen, die nicht sofort auf den gesamten Datensatz angewendet werden können, sondern während der Kreuzvalidierung innerhalb der Falten verwendet werden müssen, werden in einem separaten Modul abgelegt:
- Bedeutung Zielcodierung
- Upsampling / Downsampling
Sie werden in der Trainingsphase innerhalb der Modellklasse (siehe Modelle unten) übergeben.
_fpreproc = fpr_target_enc _fpreproc_params = fpr_target_enc_params _fpreproc_params.update(**{ 'use_columns' : cat_columns, })
- Für die Modellierung wurde eine Metaklasse erstellt, die das Konzept eines Modells mit abstrakten Methoden verallgemeinert: fit / Predict / Set_params / etc. Für jede spezifische Bibliothek (LGB, XGB, Catboost, SKLearn, RGF, ...) wird eine Implementierung dieser Metaklasse erstellt.
Das heißt, um mit LGB zu arbeiten, erstellen wir ein Modell
model_to_use = 'lgb' model = KudsonLGB(task='classification')
Für XGB:
model_to_use = 'xgb' metric_name= 'auc' task='classification' model = KudsonXGB(task=task, metric_name=metric_name)
Und alle Funktionen arbeiten weiter mit model
.
Zur Validierung wurden mehrere Funktionen erstellt, die sowohl die Vorhersage als auch die OOF für mehrere Seeds während der Kreuzvalidierung sofort berechnen, sowie eine separate Funktion für die regelmäßige Validierung über train_test_split. Alle Validierungsfunktionen werden mit Metamodellmethoden betrieben, die einen modellunabhängigen Code liefern und die Verbindung zur Pipeline einer anderen Bibliothek erleichtern.
res = cv_make_oof( model, model_params, fit_params, dataset_params, XX_train[use_columns], yy_train, XX_Kaggle[use_columns], folds, scorer=scorer, metric_name=metric_name, fpreproc=_fpreproc, fpreproc_params=_fpreproc_params, model_seed=model_seed, silence=True ) score = res['score']
XX_train [use_columns], yy_train, XX_Kaggle [use_columns], Falten, scorer = scorer, METRIC_NAME = METRIC_NAME, fpreproc = _fpreproc, fpreproc_params = _fpreproc_params, model_seed = model_seed, Schweigen = True res = cv_make_oof( model, model_params, fit_params, dataset_params, XX_train[use_columns], yy_train, XX_Kaggle[use_columns], folds, scorer=scorer, metric_name=metric_name, fpreproc=_fpreproc, fpreproc_params=_fpreproc_params, model_seed=model_seed, silence=True ) score = res['score']
Für die Funktionsauswahl - nichts Interessantes, Standard-RFE und meine Lieblings-Shuffle-Permutation auf alle möglichen Arten.
Für die Suche nach Hyperparametern wird hauptsächlich die Bayes'sche Optimierung verwendet, wiederum in einheitlicher Form, damit Sie nach jedem Modell suchen können (über das Kreuzvalidierungsmodul). Dieses Gerät befindet sich im selben Laptop wie die Simulation.
Für Ensembles wurden verschiedene Funktionen entwickelt, die für Regressions- und Klassifizierungsaufgaben auf der Basis von Ridge / Logreg, LGB, Neural Network und meinem Lieblings-scipy.optimize vereinheitlicht wurden.
Eine kleine Erklärung - jedes Modell aus der Pipeline liefert als Ergebnis zwei Dateien: sub_xxx und oof_xxx , die die Vorhersage für den Test und die OOF-Vorhersage für den Zug sind. Als nächstes laden wir im Ensemble-Modul aus dem angegebenen Verzeichnis Paare von Vorhersagen aus allen Modellen in zwei Datenrahmen hoch - df_sub / df_oof . Nun, dann schauen wir uns die Korrelationen an, wählen die besten aus, erstellen dann Level 2-Modelle über df_oof und wenden sie auf df_sub an .
Manchmal ist die Suche nach genetischen Algorithmen gut (der Autor verwendet diese Bibliothek ), um nach der besten Teilmenge von Modellen zu suchen, manchmal nach der Methode von Caruana . In den einfachsten Fällen funktionieren Standardregressionen und scipy.optimize einwandfrei.
Neuronale Netze leben in einem separaten Modul, der Autor verwendet Keras in einem funktionalen Stil , ja, nicht so flexibel wie Pytorch , aber vorerst genug. Auch hier werden universelle Trainingsfunktionen geschrieben, die für den Netzwerktyp unveränderlich sind.
Diese Pipeline wurde kürzlich in einem Wettbewerb von Home Credit erneut getestet. Die sorgfältige und genaue Verwendung aller Blöcke und Module brachte den 94. Platz und Silber.
Der Autor ist im Allgemeinen bereit, die aufrührerische Idee auszudrücken, dass für tabellarische Daten und eine normal erstellte Pipeline die endgültige Einreichung für jeden Wettbewerb in die Top-100-Rangliste gelangen sollte. Natürlich gibt es Ausnahmen, aber im Allgemeinen scheint diese Aussage wahr zu sein.
Über Teamwork

Es ist nicht so einfach, sich für Kaggle in einem Team oder Solo zu entscheiden, hängt stark von der Person (und dem Team) ab, aber mein Rat für diejenigen, die gerade erst anfangen, ist, zu versuchen, ein Solo zu starten. Warum? Ich werde versuchen, meinen Standpunkt zu erklären:
- Erstens werden Sie Ihre Stärken verstehen, Schwächen erkennen und im Allgemeinen Ihr Potenzial als DS-Praxis einschätzen können.
- Zweitens warten sie auch bei der Arbeit in einem Team (es sei denn, es handelt sich um ein etabliertes Team mit Rollentrennung) auf eine fertige Komplettlösung von Ihnen - das heißt, Sie sollten bereits über funktionierende Pipelines verfügen. (" Senden oder nicht ") (C)
- Und drittens ist es optimal, wenn das Niveau der Spieler im Team ungefähr gleich (und ziemlich hoch) ist, dann können Sie etwas wirklich Nützliches auf hohem Niveau lernen.) In schwachen Teams (es gibt nichts abfälliges, ich spreche über das Niveau des Trainings und der Erfahrung bei Kaggle) imho Es ist sehr schwierig, etwas zu lernen. Es ist besser, das Forum und die Kernel zu beißen. Ja, Sie können Medaillen züchten, aber siehe oben für Ziele und einen Gürtel für die Pflege der Hosen.
Nützliche Tipps vom Kapitän für Beweise und die versprochene Rechenkarte :)

Diese Tipps spiegeln die Erfahrung des Autors wider, sind kein Dogma und können (und sollten) durch unsere eigenen Experimente überprüft werden
Beginnen Sie immer mit dem Aufbau einer kompetenten Validierung - es wird keine geben, alle anderen Anstrengungen werden in den Ofen fliegen. Schauen Sie sich noch einmal die Mercedes-Rangliste an .
Der Autor ist sehr erfreut darüber, dass er in diesem Wettbewerb ein stabiles Kreuzvalidierungsschema (3x10-fach) aufgebaut hat, das die Geschwindigkeit beibehält und den legitimen 42. Platz einbringt.
Wenn eine kompetente Validierung erstellt wird, vertrauen Sie immer den Ergebnissen Ihrer Validierung . Wenn sich die Geschwindigkeit Ihrer Modelle bei der Validierung verbessert, sich jedoch in der Öffentlichkeit verschlechtert, ist es sinnvoller, Validierungen zu vertrauen. Lesen Sie bei der Analyse einfach die Daten, auf denen die öffentliche Rangliste als eine weitere Falte betrachtet wird. Sie möchten Ihr Modell nicht um eine Falte überfüllen?
Wenn das Modell und das Schema dies zulassen , machen Sie immer OOF-Vorhersagen und halten Sie sie nahe am Modell. Auf der Ensemble-Bühne weiß man nie, was feuern wird.
Bewahren Sie den / OOF-Code immer neben dem Ergebnis auf, um ihn zu erhalten . Auf Github spielt es vor Ort keine Rolle. Zweimal stellte sich heraus, dass im Ensemble das beste Modell das war, das vor zwei Wochen sofort hergestellt wurde und für das der Code nicht gespeichert wurde. Schmerz
Hammer auf die Auswahl der "richtigen" Seite für die Kreuzvalidierung , sündigte er selbst zuerst. Wählen Sie besser drei aus und führen Sie eine 3xN-Kreuzvalidierung durch. Das Ergebnis wird stabiler und einfacher.
Verfolgen Sie nicht die Anzahl der Modelle im Ensemble - es ist besser, weniger, aber vielfältiger - vielfältiger in Modellen, in der Vorverarbeitung, in Datensätzen. Im schlimmsten Fall nach Parametern beispielsweise ein tiefer Baum mit starrer Regularisierung, ein flacher.
Verwenden Sie Shuffle / Boruta / RFE, um Merkmale auszuwählen. Denken Sie daran, dass die Bedeutung von Merkmalen in verschiedenen baumbasierten Modellen eine Metrik für Papageien auf einem Sägemehlbeutel ist.
Persönliche Meinung des Autors (stimmt möglicherweise nicht mit der Meinung des Lesers überein) Bayesianische Optimierung > Zufallssuche> Hyperoption zur Auswahl von Hyperparametern. (">" == besser)
Die auf einem öffentlichen Kernel erstellte zerreißende Bestenliste lässt sich am besten wie folgt handhaben:
- Es ist Zeit - wir schauen uns an, was neu ist und bauen in uns selbst
- Weniger Zeit - wiederholen Sie es für unsere Validierung, machen Sie OOF - und befestigen Sie es am Ensemble
- Es gibt überhaupt keine Zeit - wir haben uns dumm mit unserer besten Lösung vermischt und schauen schnell.
Wie man zwei endgültige Einreichungen auswählt - natürlich intuitiv. Aber im Ernst, dann praktiziert normalerweise jeder die folgenden Ansätze:
- Konservative Einreichung (nach nachhaltigen Modellen) / riskante Einreichung.
- Am besten auf OOF / Public Leaderboard
Denken Sie daran - alles ist eine Ziffer und die Möglichkeiten seiner Verarbeitung hängen nur von Ihrer Vorstellungskraft ab. Verwenden Sie die Klassifizierung anstelle der Regression, behandeln Sie Sequenzen als Bild usw.
Und zum Schluss:
- Mach mit bei ods.ai :) chatte und mache Spaß von DS und vom Leben! )
Nützliche Links

Allgemein
http://ods.ai/ - für diejenigen, die der besten DS-Community beitreten möchten :)
https://mlcourse.ai/ - ods.ai Kurswebsite
https://www.Kaggle.com/general/68205 - Beitrag über den Kurs auf Kaggle
Im Allgemeinen empfehle ich dringend, im gleichen Modus wie im Artikel beschrieben den mltrainings-Videozyklus anzusehen - es gibt viele interessante Ansätze und Techniken.
Video
Kurse
Ab dem zweiten Jahr der Spezialisierung " Wie man einen Data Science-Wettbewerb gewinnt: Lernen Sie von Top-Kagglern" erfahren Sie mehr über die Methoden und Ansätze zur Problemlösung bei Kaggle.
Außerschulische Lesung:
Fazit

Das Thema Data Science im Allgemeinen und wettbewerbsfähige Data Science im Besonderen ist so unerschöpflich wie Atom (C). In diesem Artikel hat der Autor das Thema des Pumpens praktischer Fähigkeiten auf wettbewerbsfähigen Plattformen nur geringfügig aufgezeigt. Wenn es interessant wurde - verbinden Sie sich, schauen Sie sich um, sammeln Sie Erfahrungen - und schreiben Sie Ihre Artikel. Je mehr gute Inhalte, desto besser für uns alle!
Vorwegnahme der Fragen - nein, die Pipelines und Bibliotheken des Autors wurden noch nicht frei verfügbar gemacht.
Vielen Dank an Kollegen von ods.ai: Vladimir Iglovikov (ternaus) , Yuri Kashnitsky (yorko) , Valery Babushkin ( venheads) , Alexei Pronkin (pronkin_alexey) , Dmitry Petrov (dmitry_petrov) , Arthur Kuzin (n01z3) und auch alle, die Sie lesen Artikel vor Veröffentlichung, für Änderungen und Rezensionen.
Besonderer Dank geht an Nikita Zavgorodnoy (njz) für das endgültige Korrekturlesen.
Vielen Dank für Ihre Aufmerksamkeit, ich hoffe, dieser Artikel wird jemandem nützlich sein.
Mein Spitzname bei Kaggle / ods.ai : kruegger