[Python & SQLite] Ich habe den erwarteten Wert eines Rennens mit Pferden im 1x-Gewinnbereich ② analysiert

Überblick

Dies ist eine Fortsetzung des vorherigen Beitrags [Python & SQLite] Ich habe versucht, den erwarteten Wert eines Rennens mit Pferden im 1x-Gewinnbereich zu analysieren (. Letztes Mal habe ich die Daten in SQL zusammengefasst und den erwarteten Gewinnwert mit Python (Jupiter Notebook) berechnet.

Das Thema des letzten Males lautet "Wie kaufe ich ein Rennen, bei dem Pferde mit 1x Siegen laufen".

Letzter Reflexionspunkt

Ich konnte keinen Weg finden, ein Gewinn-Wettschein zu kaufen, das den erwarteten Wert von 100 überschreitet, weil ich es berechnet habe, ohne die Bedingungen wie Rennstrecke und Distanz einzugrenzen. Lassen Sie uns diesmal die Rennstrecke, die Entfernung, den Rasen / Schmutz und den Ticket-Typ eingrenzen und detailliert analysieren.

Suchen Sie nach Bedingungen, die wahrscheinlich hohe Erwartungen haben, indem Sie die Rennbahn und die Ticketarten eingrenzen

Dieses Mal werde ich die Ergebnisse mit dem Schwerpunkt "Tokyo Racecourse" schreiben. Andere Rennstrecken sind in Ordnung, aber ich habe mich für die Tokyo Racecourse entschieden, weil es sich um eine historische Rennstrecke handelt und ich denke, dass es für starke Pferde einfach ist, ihre Fähigkeiten unter Beweis zu stellen.

Zusätzlich wird der Ticket-Typ von Maren analysiert (gewinnen, wenn zwei der ersten oder zweiten Plätze enthalten sind). Wie Sie im vorherigen Beitrag sehen können, haben die beliebtesten Gewinne im 1x-Gewinnbereich eine Gewinnchance von fast 50%. Wir stellten die Hypothese auf, dass Maren ein gutes Gleichgewicht zwischen Leichtigkeit und guten Dividenden hat. (Es gibt auch einen Grund, warum es Geräusche von Pferden geben kann, die im Triple-System nicht beliebt sind.)

TokyoRacecource


#Shiba Kurs Suche nach leckeren Wettkarten bei Maren
#Finden Sie die Solidaritätsrate der beliebtesten Pferde mit einem Gewinn von 1x heraus
cur.execute("SELECT i.distance, 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 IN ('1','2') AND i.surface like 'Shiba%' AND i.place_detail like '%Tokio%' \
AND r.race_id IN (SELECT race_id from race_result WHERE odds<2.0 AND popularity='1') \
GROUP BY i.distance ORDER BY i.distance")
rows = cur.fetchall()

print('Anzahl der Solidarität(Shiba)')
for row in rows:
    print(row)
    
cur.execute("SELECT i.distance, 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 NOT IN ('1', '2') AND i.surface like 'Shiba%' AND i.place_detail like '%Tokio%'\
AND r.race_id IN (SELECT race_id from race_result WHERE odds<2.0 AND popularity='1') \
GROUP BY i.distance ORDER BY i.distance")
rows2 = cur.fetchall()

print('Anzahl 3 oder weniger(Shiba)')
for row2 in rows2:
    print(row2)

rentai1800 = round(rows[2][1] / (rows[2][1] + rows2[2][1]) * 100, 2)
print('1800m Solidaritätsrate: %f Prozent' %rentai1800)
rentai2000 = round(rows[3][1] / (rows[3][1] + rows2[3][1]) * 100, 2)
print('2000m Solidaritätsrate: %f Prozent' %rentai2000)

----------Ergebnis----------
Anzahl der Solidarität(Shiba)
(1400, 66)
(1600, 89)
(1800, 90)
(2000, 84)
(2300, 2)
(2400, 40)
(3400, 1)
Anzahl 3 oder weniger(Shiba)
(1400, 31)
(1600, 59)
(1800, 38)
(2000, 31)
(2300, 2)
(2400, 22)
1800m Solidaritätsrate: 70.310000 Prozent
2000m Solidaritätsrate: 73.040000%

Die Ergebnisse von 1800 m und 2000 m sind besonders gut. Die 2400 m, auf denen das Japan Derby, die Oaks und der Japan Cup stattfinden, sind mit etwa 64% empfindlich.

Lassen Sie uns tiefer in die Bedingungen des 2000 m hohen Rasens eintauchen, der die höchste Solidaritätsrate aufweist.

Tokyo Shiba 2000m Lassen Sie uns näher auf die Bedingungen eingehen, unter denen Solidarität am beliebtesten ist

Ein weiteres Solidaritätspferd [gewinnt an Popularität]

Ein weiteres Solidaritätspferd


#Versuchen Sie, auf 2000 m zu drücken
#1 Eine weitere Popularität, wenn Popularität Solidarität ist

cur.execute("SELECT r.popularity, count(r.race_id) FROM race_result r \
INNER JOIN race_info i on r.race_id=i.id \
WHERE r.order_of_finish IN ('1','2') AND r.popularity != '1' \
AND r.race_id IN (SELECT race_id from race_result r INNER JOIN race_info i on r.race_id=i.id WHERE odds<2.0 AND popularity='1' \
AND order_of_finish IN ('1','2') AND i.surface like 'Shiba%' AND i.place_detail like '%Tokio%' AND i.distance=2000) \
GROUP BY r.popularity ORDER BY r.popularity")
rows = cur.fetchall()

print('(Beliebt,Anzahl)')
for row in rows:
    print(row)

----------Ergebnis----------
(Beliebt,Anzahl)
(2, 21)
(3, 31)
(4, 12)
(5, 6)
(6, 7)
(7, 4)
(8, 2)
(11, 1)

Überraschenderweise gab es mehr Solidaritäten der 1. und 3. Popularität als Solidarität der 1. und 2. Popularität. Ist es das Ergebnis anderer Pferde, die das zweitbeliebteste markieren, das wahrscheinlich sogar ein wenig gewinnt, und nicht das beliebteste?

Übrigens, [wenn das beliebteste Pferd mit einem Sieg von 1x keine Solidarität war] und [die Anzahl der Solidaritäten war am größten] auch das drittbeliebteste. Ob die beliebtesten Gewinne oder Moos, der Kauf von den zweitmeisten scheint weniger interessant zu sein.

Ein weiteres Solidaritätspferd [Position an der 4. Ecke]

4cornerPosition


cur.execute("SELECT substr(r.pass, -2), count(r.race_id) FROM race_result r \
INNER JOIN race_info i on r.race_id=i.id \
WHERE r.order_of_finish IN ('1','2') AND r.popularity != '1' \
AND r.race_id IN (SELECT race_id from race_result r INNER JOIN race_info i on r.race_id=i.id WHERE odds<2.0 AND popularity='1' \
AND order_of_finish IN ('1','2') AND i.surface like 'Shiba%' AND i.place_detail like '%Tokio%' AND i.distance=2000) \
GROUP BY substr(r.pass, -2) ORDER BY substr(r.pass, -2)")
rows = cur.fetchall()

print('(Anzahl,Anzahl)')
for row in rows:
    print(row)

----------Ergebnis----------
(Anzahl,Anzahl)
('-1', 14)
('-2', 15)
('-3', 14)
('-4', 4)
('-5', 10)
('-6', 6)
('-7', 4)
('-8', 4)
('-9', 2)
('10', 3)
('11', 3)
('12', 2)
('13', 3)

Am letzten geraden Eingang scheinen Pferde, die auf dem 5. Platz waren, solidarisch zu sein. Es ist möglich, dass dies daran liegt, dass das Pferd mit dem Vorderbein klebrig ist und dass es in erster Linie freie Kapazität gab, es vorne liegt.

Ein beliebtes Pferd mit einem Sieg von 1x läuft in Tokyo Shiba 2000 m, und wenn das drittbeliebteste Pferd das führende Bein ist, scheint der erwartete Wert hoch zu sein. Es erinnert mich an den Emperor's Award Herbst 2019 ...!

Versuchen Sie, den erwarteten Wert von Maren zu berechnen (Informationsbeschaffung aus 3 Tabellen)

Von hier aus werden wir drei Tabellen verwenden, die von Netkeiba-Scraper erhalten wurden. Aus diesem Grund habe ich beschlossen, [die Bedingungen durch Verschachteln von Unterabfragen einzugrenzen].

Gewinnen Nr. 1 Beliebt-Gewinnen Nr. 2 Beliebte Maren

Zuallererst ist es der erwartete Wert beim Kauf der [1. beliebtesten-2. beliebtesten] Maren, die einen niedrigen erwarteten Wert zu haben scheint.

1-2 Beliebte Maren Erwarteter Wert


# race_Ergebnis Rennen_ID und Auszahlungsrennen_Berechnen Sie den erwarteten Wert, indem Sie die ID zuordnen
# ticket_Geben Sie win 0 ein,Doppelsieg 1,Rahmen Ren 2,Maren 3,Breit 4,Pferdesingle 5,Triple 6,Triple Single 7

#Unter Verwendung von doppelten Unterabfragen werden die aufeinanderfolgenden Rückerstattungen des Pferdes für [das Rennen, bei dem ein Pferd solidarisch war] und [das Rennen, bei dem das andere Pferd das zweitbeliebteste war] summiert.
cur.execute("SELECT DISTINCT p.race_id, p.payoff FROM payoff p \
INNER JOIN race_result r ON p.race_id=r.race_id INNER JOIN race_info i on p.race_id=i.id \
WHERE p.ticket_type=3 AND p.race_id IN \
        (SELECT r.race_id FROM race_result r \
        INNER JOIN race_info i on r.race_id=i.id \
        WHERE r.order_of_finish IN ('1','2') AND r.popularity='2' \
            AND r.race_id IN (SELECT race_id from race_result r INNER JOIN race_info i on r.race_id=i.id \
            WHERE odds<2.0 AND popularity='1' AND order_of_finish IN ('1','2') AND i.surface like 'Shiba%' \
            AND i.place_detail like '%Tokio%' AND i.distance=2000))")
rows = cur.fetchall()
umaren_sum = 0
for row in rows:
    umaren_sum += row[1]

#Finden Sie heraus, wie viele Rennen Pferde im 1x gewinnen
cur.execute("SELECT count(race_id) from race_result r INNER JOIN race_info i on r.race_id=i.id \
            WHERE odds<2.0 AND popularity='1' AND i.surface like 'Shiba%' AND i.place_detail like '%Tokio%' \
            AND i.distance=2000")
rows2 = cur.fetchall()

print('Die Gesamtzahl der Pferde in einem Rennen, in dem Pferde im 1x gewinnen:')
print(umaren_sum)

print('Die Anzahl der Rennen, bei denen Pferde mit einem Sieg von 1x in den Tokyo Shiba 2000m kamen:')
print(rows2[0][0])

print('Maren erwarteter Wert')
print(round(umaren_sum / rows2[0][0], 2))

-----Ergebnis-----
Die Gesamtzahl der Pferde in einem Rennen, in dem Pferde im 1x gewinnen:
6740.0
Die Anzahl der Rennen, bei denen Pferde mit einem Sieg von 1x in den Tokyo Shiba 2000m kamen:
115
Maren erwarteter Wert
58.61

Immerhin ist es niedrig. Es macht keinen Sinn, ein anderes beliebtes Pferd zu kaufen, da eines stark zu sein scheint. In diesem Fall ist es besser, den beliebtesten Gewinn zu kaufen.

Gewinnen Nr. 1 Beliebt-Gewinnen Nr. 3 Beliebte Maren

Als nächstes ist es der erwartete Wert beim Kauf der [1. beliebtesten-3. beliebtesten] Maren, von dem erwartet werden kann, dass er den höchsten erwarteten Wert hat.

1-3 Beliebter Maren Erwarteter Wert


# race_Ergebnis Rennen_ID und Auszahlungsrennen_Berechnen Sie den erwarteten Wert, indem Sie die ID zuordnen
# ticket_Geben Sie win 0 ein,Doppelsieg 1,Rahmen Ren 2,Maren 3,Breit 4,Pferdesingle 5,Triple 6,Triple Single 7

#Unter Verwendung doppelter Unterabfragen werden die aufeinanderfolgenden Rückerstattungen des Pferdes für [das Rennen, bei dem ein Pferd solidarisch war] und [das Rennen, bei dem ein anderes Pferd das drittbeliebteste war] summiert.
cur.execute("SELECT DISTINCT p.race_id, p.payoff FROM payoff p \
INNER JOIN race_result r ON p.race_id=r.race_id INNER JOIN race_info i on p.race_id=i.id \
WHERE p.ticket_type=3 AND p.race_id IN \
        (SELECT r.race_id FROM race_result r \
        INNER JOIN race_info i on r.race_id=i.id \
        WHERE r.order_of_finish IN ('1','2') AND r.popularity='3' \
            AND r.race_id IN (SELECT race_id from race_result r INNER JOIN race_info i on r.race_id=i.id \
            WHERE odds<2.0 AND popularity='1' AND order_of_finish IN ('1','2') AND i.surface like 'Shiba%' \
            AND i.place_detail like '%Tokio%' AND i.distance=2000))")
rows = cur.fetchall()
umaren_sum = 0
for row in rows:
    umaren_sum += row[1]

#Finden Sie heraus, wie viele Rennen Pferde im 1x gewinnen
cur.execute("SELECT count(race_id) from race_result r INNER JOIN race_info i on r.race_id=i.id \
            WHERE odds<2.0 AND popularity='1' AND i.surface like 'Shiba%' AND i.place_detail like '%Tokio%' \
            AND i.distance=2000")
rows2 = cur.fetchall()

print('Die Gesamtzahl der Pferde in einem Rennen, in dem Pferde im 1x gewinnen:')
print(umaren_sum)

print('Die Anzahl der Rennen, bei denen Pferde mit einem Sieg von 1x in den Tokyo Shiba 2000m kamen:')
print(rows2[0][0])

print('Maren erwarteter Wert')
print(round(umaren_sum / rows2[0][0], 2))

-----Ergebnis-----
Die Gesamtzahl der Pferde in einem Rennen, in dem Pferde im 1x gewinnen:
18460.0
Die Anzahl der Rennen, bei denen Pferde mit einem Sieg von 1x in den Tokyo Shiba 2000m kamen:
115
Maren erwarteter Wert
160.52

Der erwartete Wert hat endlich 100 überschritten! Wenn Sie diese Daten kennen würden, hätten Sie [Almond Eye und Danon Premium Maren] im Herbst des Emperor's Award 2019 gekauft.

Gewinnen Nr. 1 Beliebt-Gewinnen Nr. 4 Beliebte Maren

Für alle Fälle werfen wir einen Blick auf den erwarteten Wert beim Kauf der [1. beliebtesten - 4. beliebtesten] Maren.

1-4 Beliebter Maren Erwarteter Wert


# race_Ergebnis Rennen_ID und Auszahlungsrennen_Berechnen Sie den erwarteten Wert, indem Sie die ID zuordnen
# ticket_Geben Sie win 0 ein,Doppelsieg 1,Rahmen Ren 2,Maren 3,Breit 4,Pferdesingle 5,Triple 6,Triple Single 7

#Unter Verwendung von doppelten Unterabfragen werden die aufeinanderfolgenden Rückerstattungen des Pferdes für [das Rennen, bei dem ein Pferd solidarisch war] und [das Rennen, bei dem ein anderes Pferd das viertbeliebteste war] summiert.
cur.execute("SELECT DISTINCT p.race_id, p.payoff FROM payoff p \
INNER JOIN race_result r ON p.race_id=r.race_id INNER JOIN race_info i on p.race_id=i.id \
WHERE p.ticket_type=3 AND p.race_id IN \
        (SELECT r.race_id FROM race_result r \
        INNER JOIN race_info i on r.race_id=i.id \
        WHERE r.order_of_finish IN ('1','2') AND r.popularity='4' \
            AND r.race_id IN (SELECT race_id from race_result r INNER JOIN race_info i on r.race_id=i.id \
            WHERE odds<2.0 AND popularity='1' AND order_of_finish IN ('1','2') AND i.surface like 'Shiba%' \
            AND i.place_detail like '%Tokio%' AND i.distance=2000))")
rows = cur.fetchall()
umaren_sum = 0
for row in rows:
    umaren_sum += row[1]

#Finden Sie heraus, wie viele Rennen 1x Pferde gelaufen sind
cur.execute("SELECT count(race_id) from race_result r INNER JOIN race_info i on r.race_id=i.id \
            WHERE odds<2.0 AND popularity='1' AND i.surface like 'Shiba%' AND i.place_detail like '%Tokio%' \
            AND i.distance=2000")
rows2 = cur.fetchall()

print('Die Gesamtzahl der Pferde in einem Rennen, in dem Pferde im 1x gewinnen:')
print(umaren_sum)

print('Die Anzahl der Rennen, bei denen Pferde mit einem Sieg von 1x in den Tokyo Shiba 2000m kamen:')
print(rows2[0][0])

print('Maren erwarteter Wert')
print(round(umaren_sum / rows2[0][0], 2))

-----Ergebnis-----
Die Gesamtzahl der Pferde in einem Rennen, in dem Pferde im 1x gewinnen:
10030.0
Die Anzahl der Rennen, bei denen Pferde mit einem Sieg von 1x in den Tokyo Shiba 2000m kamen:
115
Maren erwarteter Wert
87.22

Obwohl dies 100 nicht überschreitet, wurde festgestellt, dass der erwartete Wert höher als [1-2 Popular Maren] ist.

Zusammenfassung

Durch die Eingrenzung der Rennstrecken, Strecken und Ticketarten wurde die Erwartungswertberechnung vertieft. Ich gewöhne mich an den Umgang mit SQL. Wenn Sie die Bedingungen ändern, können Sie sie auf anderen Rennstrecken analysieren. Warum also nicht versuchen, den erwarteten Wert der Rennbahn in der Nähe Ihres Wohnortes zu berechnen?

Das nächste Ziel ist es, WIN5 zu gewinnen (ein Wettschein, der alle Siegerpferde in den 5 Rennen mit einer maximalen Dividende von Hunderten von Millionen Yen gewinnt)! Es wird schwieriger, weil es notwendig ist, das Reiten und Lesen der Entwicklung von Pferderennen zu analysieren, aber ich werde es versuchen!

Vielen Dank, dass Sie so weit gelesen haben.

Recommended Posts

[Python & SQLite] Ich habe den erwarteten Wert eines Rennens mit Pferden im 1x-Gewinnbereich ② analysiert
Ich habe Hunderte Millionen SQLite mit Python ausprobiert
Ich habe Pygame mit Python 3.5.1 in der Umgebung von pyenv unter OS X installiert
[Bot dekodieren] Ich habe versucht, einen Bot zu erstellen, der mir den Rassenwert von Pokemon angibt
Ein Memo, dass ich den Datenspeicher mit Python berührt habe
Ich dachte darüber nach, warum Python selbst mit dem Gefühl eines Python-Interpreters notwendig ist
Ich habe versucht, die Entropie des Bildes mit Python zu finden
Ich habe das Windows PowerShell-Kochbuch durch ein Python-Skript ersetzt.
Ich habe versucht, das Bild mit Python + OpenCV "gammakorrektur" zu machen
Ich habe die grundlegende Grammatik von Python in Jupyter Lab geschrieben
Ich habe die Strategie des Aktiensystemhandels mit Python evaluiert.
Ich habe versucht, die Wahrscheinlichkeit eines Bingospiels mit Python zu simulieren
Ich schrieb einen Test in "Ich habe versucht, die Wahrscheinlichkeit eines Bingospiels mit Python zu simulieren".
Ich habe die Geschwindigkeit von Hash mit Topaz, Ruby und Python verglichen
Ich habe versucht, das Ranking des Qiita-Adventskalenders mit Python zu kratzen
Eine Geschichte über das Schreiben von AWS Lambda und ein wenig Abhängigkeit von den Standardwerten von Python-Argumenten
[Python, Ruby] Selen-Holen Sie sich Webseiteninhalte mit Webdriver
[Einführung in StyleGAN] Ich habe mit "The Life of a Man" ♬ gespielt
Ich möchte den Anfang des nächsten Monats mit Python ausgeben
Ich habe mit Python eine Lotterie gemacht.
Ich habe versucht, mit Python eine Liste von Primzahlen zu erstellen
Die Geschichte, einen Standardtreiber für db mit Python zu erstellen.
Ich mochte den Tweet mit Python. ..
Ich wollte das ABC164 A ~ D-Problem mit Python lösen
Die Idee, die Konfigurationsdatei mit einer Python-Datei anstelle von yaml zu füttern
Tipps: [Python] Berechnen Sie den Durchschnittswert des angegebenen Bereichs mit Bedgraph
Ich habe versucht, die Effizienz der täglichen Arbeit mit Python zu verbessern
Ich habe mit Python einen Daemon erstellt
Die Geschichte, ein Modul zu erstellen, das E-Mails mit Python überspringt
Erstellen Sie ein Kompatibilitätsbewertungsprogramm mit dem Zufallsmodul von Python.
Ich hatte Python satt und analysierte die Daten mit Nehan (Corona verwandt, ist das Wort jetzt?)
[Python] Ich habe das Tagebuch eines Mannes im ersten Jahr des Arbeitslebens analysiert und das Arbeitsleben positiv / negativ beurteilt.
Ich habe die numerische Berechnung von Python durch Rust ersetzt und die Geschwindigkeit verglichen
Die Geschichte, wie man mit Python einen 100-Yen-Frühstücks-Bot für die Universität macht
[Erklärung zum AtCoder] Kontrollieren Sie die A-, B- und C-Probleme von ABC182 mit Python!
Berechnen Sie die kürzeste Route eines Diagramms mit der Dyxtra-Methode und Python
[Einführung in Python] So sortieren Sie den Inhalt einer Liste effizient mit Listensortierung
Ich habe versucht, den Authentifizierungscode der Qiita-API mit Python abzurufen.
Berechnen Sie die Wahrscheinlichkeit, eine Tintenfischmünze zu sein, mit dem Bayes-Theorem [Python]
Treffen Sie eine Methode einer Klasseninstanz mit der Python Bottle Web API
Ich erhalte einen Python No-Modul mit dem Namen 'Encodings' mit dem Befehl aws
Erhalten Sie eine Liste der Ergebnisse der Parallelverarbeitung in Python mit Starmap
Ich habe GAN mit Keras gemacht, also habe ich ein Video des Lernprozesses gemacht.
Eine Erinnerung an das, was ich beim Starten von Atcoder mit Python feststeckte
Ich habe versucht, die Standardrolle neuer Mitarbeiter mit Python zu optimieren
Ich habe versucht, die Filminformationen der TMDb-API mit Python abzurufen
Ich habe ein Programm erstellt, um die Größe einer Datei mit Python zu überprüfen
Ich habe einen Fehler beim Abrufen der Hierarchie mit MultiIndex von Pandas gemacht
Ich habe versucht, den Höhenwert von DTM in einem Diagramm anzuzeigen
Ruft den Rückgabewert eines externen Shell-Skripts (ls) mit python3 ab
Ich habe die Geschwindigkeit der Listeneinschlussnotation für und während mit Python2.7 gemessen.
Python: Ich möchte die Verarbeitungszeit einer Funktion genau messen
[AtCoder Erklärung] Kontrollieren Sie ABC184 A, B, C Probleme mit Python!