Das Thema Pferderennen x KI hat in den letzten Jahren zugenommen, aber viele davon sind für alle Rennen. Ich möchte mich auf die Fälle konzentrieren, die mir persönlich wichtig sind! Ich dachte, ich habe diesmal versucht, Netkeiba-Scraper zu verwenden.
Das Thema, das diesmal eingegrenzt werden soll, lautet "Wie kaufe ich ein Rennen, bei dem Pferde mit 1x Siegen laufen". Im Jahr 2019 gab es viele Fälle, in denen Pferde mit einem Gewinn von 1x außerhalb des Wettscheins versenkt wurden, wie beispielsweise Japan Derby, Hanshin JF und Arima Memorial. Die Analyse wurde mit einem Gewinn-Wettschein fortgesetzt.
Für das Scraping von Pferderenndaten habe ich den Code eines großen Vorfahren verwendet. Klicken Sie hier für gitHub
Wir haben Daten für die letzten 10 Jahre erfasst. Ich habe "genfeature" nicht für die Feature-Extraktion verwendet, da die Verarbeitung anscheinend etwa 40 Tage dauerte. Da der Name der JRA-Klasse geändert wurde (z. B. 5 Millionen unter → 1 Gewinnklasse), scheint es auch nicht möglich zu sein, das Genfeature ordnungsgemäß zu "korrigieren", ohne den Scala-Code zu korrigieren.
Lesen Sie die Datei DL race.db in Python und starten Sie die Datenanalyse.
dbconnect
import sqlite3 as sq
conn = sq.connect('race.db')
cur = conn.cursor()
cur.execute("SELECT r.race_id, i.race_name, r.order_of_finish, r.odds \
FROM race_result r INNER JOIN race_info i on r.race_id=i.id \
WHERE r.odds<2.0")
rows = cur.fetchall()
for row in rows:
print(row)
Verschieben Sie die Datei race.db auf die gleiche Ebene wie die ipynb-Datei von Jupyter Notebook und laden Sie sie. Da die Renndaten in race.db in der Tabelle "race_info" und der Tabelle "race_result" gespeichert sind, Holen Sie sich die gewünschten Informationen aus jeder Tabelle.
Race_info-Tabelle Informationen zu jedem Rennen werden aufgelistet.
Race_result-Tabelle Der Kampfrekord für jedes Pferd wird aufgelistet.
Erwarteter Wert nach Gewinnchancen(Alle Klassen)
#Anzahl der Siege
cur.execute("SELECT r.odds, count(r.race_id) \
FROM race_result r \
WHERE r.odds<2.0 AND r.order_of_finish='1' \
GROUP BY r.odds ORDER BY r.odds ASC")
rows = cur.fetchall()
#Alle Rennen
cur.execute("SELECT r.odds, count(r.race_id) \
FROM race_result r \
WHERE r.odds<2.0 \
GROUP BY r.odds ORDER BY r.odds")
rows2 = cur.fetchall()
#Erwartungswertberechnung Ich denke, ich werde mehr schreiben
try:
t11 = rows[0][0] * rows[0][1] / (rows2[0][0] * rows2[0][1]) * 100
t12 = rows[1][0] * rows[1][1] / (rows2[1][0] * rows2[1][1]) * 100
t13 = rows[2][0] * rows[2][1] / (rows2[2][0] * rows2[2][1]) * 100
t14 = rows[3][0] * rows[3][1] / (rows2[3][0] * rows2[3][1]) * 100
t15 = rows[4][0] * rows[4][1] / (rows2[4][0] * rows2[4][1]) * 100
t16 = rows[5][0] * rows[5][1] / (rows2[5][0] * rows2[5][1]) * 100
t17 = rows[6][0] * rows[6][1] / (rows2[6][0] * rows2[6][1]) * 100
t18 = rows[7][0] * rows[7][1] / (rows2[7][0] * rows2[7][1]) * 100
t19 = rows[8][0] * rows[8][1] / (rows2[8][0] * rows2[8][1]) * 100
except:
None
print('Gewinnen Sie 1.Der erwartete Wert von 1x Wettschein ist%d' %t11)
print('Gewinnen Sie 1.Der erwartete Wert des Doppelwettscheins ist%d' %t12)
print('Gewinnen Sie 1.Der erwartete Wert des Triple-Wett-Tickets beträgt%d' %t13)
print('Gewinnen Sie 1.Der erwartete Wert eines Vierfach-Wettscheins ist%d' %t14)
print('Gewinnen Sie 1.Erwarteter Wert des 5-fachen Wettscheins%d' %t15)
print('Gewinnen Sie 1.Der erwartete Wert des 6-fachen des Wettscheins beträgt%d' %t16)
print('Gewinnen Sie 1.7 mal das erwartete Wettticket%d' %t17)
print('Gewinnen Sie 1.Der erwartete Wert des 8-fachen Wettscheins beträgt%d' %t18)
print('Gewinnen Sie 1.Der erwartete Wert des 9-fachen des Wettscheins beträgt%d' %t19)
Interessanterweise haben wir festgestellt, dass der erwartete Gewinn umso höher ist, je niedriger die Gewinnchancen sind (= der 1. Platz ist wahrscheinlich). Liegt es daran, dass es viele historisch berühmte Pferde gibt, wenn es 1,1-mal so viel ist?
Wenn wir uns unter ähnlichen Bedingungen auf [Offene Klasse und höher (einschließlich schwerer Preise)] eingrenzen, steigt der erwartete Wert von 1,1-fach weiter an.
OnlyOpenClass
cur.execute("SELECT r.odds, count(r.race_id) \
FROM race_result r INNER JOIN race_info i on r.race_id=i.id \
WHERE r.odds<2.0 AND r.order_of_finish='1' AND i.race_class like '%öffnen%' \
GROUP BY r.odds ORDER BY r.odds ASC")
Welches Pferd gewinnt oft in einem Rennen, in dem Pferde im 1x-Gewinnbereich laufen? Ist die 2. oder 3. Popularität interessant?
Im Gegensatz zu der obigen Analyse kann sie nur berechnet werden, wenn sie [auf Rennen mit Pferden mit 1x Siegen beschränkt] ist. Ich habe eine Unterabfrage in der Notation "WHERE ~ IN (SELECT ~~)" verwendet.
ResultByPopularity
#Anzahl der Siege nach Beliebtheit bei Rennen mit Pferden mit 1x Siegen
cur.execute("SELECT r.popularity, count(r.race_id) \
FROM race_result r \
WHERE r.order_of_finish='1' AND r.race_id IN (SELECT race_id from race_result WHERE odds<2.0 AND popularity='1') \
GROUP BY r.popularity ORDER BY r.popularity ASC")
rows = cur.fetchall()
#Alle Rennen mit Pferden im 1x gewinnen
cur.execute("SELECT count(r.race_id) FROM race_result r WHERE r.odds<2.0 AND r.popularity='1'")
rows2 = cur.fetchall()
for row in rows:
print(row)
print(rows2[0][0])
Von allen 7.619 Rennen ist etwa die Hälfte das beliebteste. Die 2. Popularität wird den erwarteten Wert von 100 nicht überschreiten, es sei denn, der Gewinn ist 6-mal oder mehr und die 3. Popularität ist fast 10-mal.
Ich habe den erwarteten Wert berechnet, indem ich die Gewinnchancen mit der Anzahl der Köpfe multipliziert und durch die Anzahl der Rennen dividiert habe, aber mit 32 war es schrecklich.
Das Ergebnis dieser Zeit war, dass Sie keinen Gewinn erzielen, wenn Sie die Rennstrecke, den Schmutz / Rasen, das Alter des Pferdes, die Anzahl der Pferde und die Qualität der Pferdebeine nicht unterteilen, selbst wenn Sie die Gewinnchancen betrachten. Da es verschiedene Arten von Wettscheinen für Pferderennen gibt, [Welcher Wettscheintyp hat die höchsten Erwartungen in einem Rennen, in dem Pferde mit einem Gewinn von 1x laufen? 】Eine solche, Es scheint, dass wir es tiefer analysieren können.
Nachdem ich herausgefunden habe, wie SQL mit Python (Jupiter Notebook) extrahiert wird, werde ich es weiter analysieren.
Eine Geschichte darüber, ob Netkeiba-Scraper ab Juni 2019 funktioniert (Ubuntu 18.04.2 LTS)
Recommended Posts