[PYTHON] Ich habe mit LightGBM einen Code geschrieben, der die Wiederherstellungsrate von 100% bei der Vorhersage von Pferderennen überschreitet (Teil 2).

Einführung

Dieser Beitrag

・ Ich habe mit LightGBM (Teil 1) einen Code geschrieben, der die Wiederherstellungsrate von 100% bei der Vorhersage von Pferderennen überschreitet

Es wird eine Fortsetzung des Artikels sein.

In Teil 1 habe ich mit Schwung über das Modell geschrieben, aber in Teil 2 werde ich das Ergebnis der tatsächlichen Vorhersage der Zukunft schreiben und schließlich den Code veröffentlichen.

Voraussichtlicher Wert nach der Modellerstellung

Tatsächlich war der vorhergesagte Wert ab Juli bereits in der Notiz angegeben. Der für die Vorhersage verwendete Code verbessert sich jedoch weiter, während die Vorhersage-Notiz ausgegeben wird, und der diesmal freigegebene Code ist nur der grundlegende Teil, so dass die Vorhersage der Notiz hier und der Vorhersagewert des zu veröffentlichenden Codes nicht unbedingt erforderlich sind Es passt nicht.

[Pferderennprognose] 25. Juli 2020 [Pferderennprognose] 26. Juli 2020 [Pferderennprognose] 01. August 2020 [[Pferderennen Vorhersage] 08/08/2020] (https://note.com/km_takao/n/n9d2acf507e60) [Prognose für Pferderennen] 9. August 2020 [Pferderennen-Prognose] 15. August 2020 [Pferderennprognose] 22. August 2020

(2., 16. und 23. August 2020 konnten aufgrund der Notwendigkeit nicht vorhergesagt werden.)

Die Wiederherstellungsrate, wenn diese im doppelten Gewinn gekauft werden, ist wie folgt. Was den zu setzenden Betrag betrifft, haben wir die in Teil 1 erläuterte Methode von Herrn Ushi gelernt und als "Gesamtbudget x 0,01 / 30 Minuten vor Gewinnchancen" festgelegt, und das Gesamtbudget wird mit 100.000 Yen berechnet.

Renntermin Gesamtbetrag Einsatz Rückerstattungsbetrag Erholungsrate
25. Juli 2020 7,500 Yen 9,440 Yen 125%
26. Juli 2020 6,700 Yen 7,350 Yen 109%
01. August 2020 10,100 Yen 10,110 Yen 100%
08/08/2020 23,700 Yen 23,200 Yen 98%
09. August 2020 14,900 Yen 15,210 Yen 102%
15. August 2020 23,200 Yen 26,260 Yen 113%
22. August 2020 31,000 Yen 30,540 Yen 99%

Infolge der Verbesserung konnten wir die Anzahl der zu kaufenden Artikel erhöhen, aber die Wiederherstellungsrate verschlechtert sich (als Ergänzung waren es seit dem 15. 3 Baba). Derzeit wird geprüft, ob ein solches Rennen gerade zu diesem Zeitpunkt stattgefunden hat oder ob weitere Verbesserungen erforderlich sind.

Ebenso ist die Wiederherstellungsrate beim Kauf eines Gewinns wie folgt.

Renntermin Gesamtbetrag Einsatz Rückerstattungsbetrag Erholungsrate
25. Juli 2020 2,800 Yen 4,390 Yen 156%
26. Juli 2020 1,900 Yen 1,580 Yen 83%
01. August 2020 4,700 Yen 4,410 Yen 93%
08/08/2020 9,800 Yen 7,600 Yen 78%
09. August 2020 4,500 Yen 3,380 Yen 75%
15. August 2020 9,600 Yen 15,060 Yen 157%
22. August 2020 12,700 Yen 13,900 Yen 109%

Auch hier steigt die Anzahl der Einkäufe, aber es gibt Tage, an denen die Wiederherstellungsrate gesunken ist. Übrigens, hier ist das Ergebnis des Gewinns, wenn Sie zu der Methode wechseln, immer nur 100 Yen zu kaufen, unabhängig vom Budget, anstelle der Wettmethode von Herrn Ushi.

Renntermin Gesamtbetrag Einsatz Rückerstattungsbetrag Erholungsrate
25. Juli 2020 1,600 Yen 1,850 Yen 115%
26. Juli 2020 1,100 Yen 1,080 Yen 98%
01. August 2020 1,600 Yen 3,500 Yen 218%
08/08/2020 3,900 Yen 11,610 Yen 297%
09. August 2020 2,400 Yen 8,190 Yen 341%
15. August 2020 3,700 Yen 4,530 Yen 122%
22. August 2020 4,800 Yen 5,980 Yen 125%

Mit anderen Worten, das Modell kann den Gewinn von Anoma vorhersagen, aber mit der Wettmethode von Herrn Ushi werden die maximalen Gewinnchancen in Abhängigkeit von der Höhe des Budgets gesenkt, und es ist nicht möglich, auf Anoma zu wetten. Infolgedessen können nur beliebte Pferde mit geringen Gewinnchancen gewettet werden, was ein Faktor für die Senkung der Wiederherstellungsrate zu sein scheint. Im Gegenteil, für Rennen, die nicht rau wurden, ist es ein Faktor, die Erholungsrate zu erhöhen, indem eine Steigung wie die Wettmethode von Herrn Ushi erzielt wird. Wenn das Budget, über das Sie nachdenken, 100.000 Yen beträgt, hat es keine großen Auswirkungen, wenn die Gewinnchancen niedrig sind (höchstens etwa fünfmal), wie bei einem doppelten Gewinn. Wenn die Gewinnchancen bei einem Gewinn jedoch etwa zehnmal oder mehr betragen, beträgt der Mindesteinsatz 100 Yen, sodass er besonders betroffen zu sein scheint. In diesem Bereich müssen die Konstante der Einsatzberechnungsformel (in diesem Fall 0,01), Ihr eigenes Budget und der vorhergesagte Wert des Modells berücksichtigt werden.

Code veröffentlichen

Ich werde es in Notiz veröffentlichen. Eine ausführliche Erläuterung des Codes finden Sie in den Notizen und Kommentaren im Notizbuch. Hier erklären wir den einfachen Ablauf.

Scraping vergangener Leistungsdatenbank

Scraping vergangener Rennergebnisse, Gewinnchancen usw. aus der Netkeiba-Datenbank zur Modellerstellung. Wie ich in Teil 1 geschrieben habe, basiert das Scraping hier auf "Wie man Pferderenndaten mit read_html von Pandas kratzt". Zusätzlich zu Informationen zu jedem teilnehmenden Pferd wie Ankunftsreihenfolge und Name des Reiters werden Informationen zum Rennen selbst wie Entfernung, Informationen zum Reitplatz, Wetter usw. und die Gewinnchancen jedes Pferdes vor dem Start des Rennens als zu kratzende Merkmale verwendet.

スクリーンショット 2020-08-21 22.33.09.png

Feature-Erstellung

Der Code, den ich veröffentliche, ist die Grundlage des Codes, den ich noch verbessere, und ich denke, es ist noch genauer, wenn Sie beispielsweise aus diesem Code eigene Funktionen erstellen oder mit anderen Algorithmen zusammenstellen. .. Selbst in dem zu veröffentlichenden Code wird natürlich aus der Menge der abgekratzten Merkmale eine neue Feature-Menge erstellt, die sich auf die Aggregation früherer Noten bezieht.

Ein Beispiel für die zu erstellende Merkmalsmenge ist die Aggregation der Leistung von Pferden in der Vergangenheit. Es ist notwendig zu aggregieren, damit zukünftige Noten zum vergangenen Zeitpunkt nicht berücksichtigt werden. Daher sortieren wir hier race_id in aufsteigender Reihenfolge, damit zukünftige Noten ab dem Zeitpunkt der Aggregation nicht aggregiert werden. Wenn Sie sich beispielsweise die aggregierten Ergebnisse für Almond Eye ansehen,

スクリーンショット 2020-08-21 22.27.54.png

Daher werden nur die vergangenen Daten ordnungsgemäß aggregiert und als neue Feature-Menge hinzugefügt. (Beachten Sie, dass hier nur die Daten von 2018 bis 2020 zur Überprüfung des öffentlichen Codes verwendet werden.)

Modellieren

Wie der Titel schon sagt, werden wir ein Modell mit lightGBM erstellen. Die Parameter werden von optuna automatisch angepasst. Ich denke, dass die Genauigkeit durch die Durchführung einer Ensemble- und Kreuzvalidierung in diesem Teil weiter verbessert werden kann.

Scraping Renninformationen vor dem Ereignis, Anzeige der vorhergesagten Werte

Informationen zum Rennen vor dem Ereignis, damit das Modell sie vorhersagen kann, sind nicht die netkeiba Datenbank, sondern die Renninformationsseite. Holen Sie sich von / top /? Rf = navi). Der Basiscode entspricht fast dem Scraping früherer Noten.

Die vorhergesagten Werte werden für jedes Rennen angezeigt. Der Einsatzbetrag, der der Berechnung von Herrn similar ähnelt, wird zusätzlich zu der Spalte mit den Quoten zum Zeitpunkt des Scrapings angezeigt.

Wenn Sie beispielsweise Niigata 4R am Samstag, den 8. August 2020, anzeigen

スクリーンショット 2020-08-26 9.07.58.png

In diesem Fall setzen Sie auf Pferde, deren Vorhersagewert einen bestimmten Wert überschreitet, oder auf 3 Pferde von dem Pferd mit dem größten Wert.

Vollständiger Code

Der vollständige Text ist unter [hier] verfügbar (https://note.com/km_takao/n/n5e54ee157d17). Wir bieten auch detailliertere Erklärungen.

Recommended Posts

Ich habe mit LightGBM einen Code geschrieben, der die Wiederherstellungsrate von 100% bei der Vorhersage von Pferderennen überschreitet (Teil 2).
Ich habe das Schaben mit Selen gelernt, um ein Vorhersagemodell für Pferderennen zu erstellen.
Ein Memo, das ich schnell in Python geschrieben habe
Ich habe einen japanischen Parser auf Japanisch mit Pyparsing geschrieben.
Ich habe versucht, den Pferderennplatz Teil 2 zu kriechen und abzukratzen
Ich habe eine Klasse geschrieben, die das Schreiben erleichtert, indem ich die Teiltexte spezifiziere, wenn ich Mecab mit Python verwende
Ich habe ein Skript geschrieben, das das Bild in zwei Teile teilt
Ich habe versucht, mit Pandas eine Pferderenn-Datenbank zu erstellen
Mit Deep Learning können Sie die Erholungsrate von 100% im Pferderennen überschreiten
Ich habe einen Code geschrieben, um die Quaternion mit Python in einen Ölerwinkel vom Typ z-y-x umzuwandeln
[Python] Ich habe einen einfachen Code geschrieben, der automatisch AA generiert (Ascii Art).
Ich habe FizzBuzz in Python mit der Support Vector Machine (Bibliothek LIVSVM) geschrieben.
Eine Geschichte über das Erreichen einer Wiederherstellungsrate von Pferderennen von über 100% durch maschinelles Lernen
Ich habe ein PyPI-Modul geschrieben, das den Parameterstil in Pythons sqlite3-Modul erweitert
Ich habe eine Animation geschrieben, bei der das lineare System mit tödlich schmutzigem Code schrumpft
Ich habe ein Designmuster in der Kotlin Prototype Edition geschrieben