Ceci est une suite du post précédent [Python & SQLite] J'ai essayé d'analyser la valeur attendue d'une course avec des chevaux dans la gamme 1x win ①. La dernière fois, j'ai résumé les données récupérées en SQL et calculé la valeur de gain attendue avec Python (Jupiter Notebook).
Dans la continuité de la dernière fois, le thème est "Comment acheter une course dans laquelle les chevaux avec 1x gagne courent".
Je n'ai pas pu trouver un moyen d'acheter un billet de pari gagnant qui dépasse la valeur attendue de 100 car je l'ai calculé sans restreindre les conditions telles que l'hippodrome et la distance. Cette fois, restreignons l'hippodrome, la distance, le gazon / terre et le type de billet et analysons en détail.
Cette fois, j'écrirai les résultats en se concentrant sur "Tokyo Racecourse". Les autres hippodromes sont bien, mais j'ai choisi l'hippodrome de Tokyo car c'est un hippodrome historique et je pense qu'il est facile pour les chevaux forts de démontrer leurs capacités.
De plus, le type de billet sera analysé par Maren (gagnant si deux chevaux sélectionnés pour la 1ère ou la 2ème place sont inclus). Comme vous pouvez le voir dans l'article précédent, les victoires les plus populaires dans la gamme de gains 1x ont près de 50% de chances de gagner. Nous avons émis l'hypothèse que Maren a un bon équilibre entre la facilité de toucher et de bons dividendes. (Il y a aussi une raison pour laquelle il peut y avoir du bruit provenant de chevaux qui ne sont pas populaires dans le système triple)
TokyoRacecource
#Cours de Shiba Recherchez de délicieux billets de paris à Maren
#Découvrez le taux de solidarité des chevaux les plus populaires avec un gain de 1x
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 '%Tokyo%' \
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('Nombre de solidarité(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 '%Tokyo%'\
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('Nombre de 3 ou moins(Shiba)')
for row2 in rows2:
print(row2)
rentai1800 = round(rows[2][1] / (rows[2][1] + rows2[2][1]) * 100, 2)
print('1800m de taux de solidarité: %f pour cent' %rentai1800)
rentai2000 = round(rows[3][1] / (rows[3][1] + rows2[3][1]) * 100, 2)
print('Taux de solidarité 2000m: %f pour cent' %rentai2000)
----------résultat----------
Nombre de solidarité(Shiba)
(1400, 66)
(1600, 89)
(1800, 90)
(2000, 84)
(2300, 2)
(2400, 40)
(3400, 1)
Nombre de 3 ou moins(Shiba)
(1400, 31)
(1600, 59)
(1800, 38)
(2000, 31)
(2300, 2)
(2400, 22)
1800m de taux de solidarité: 70.310000 pour cent
Taux de solidarité 2000m: 73.040000%
Les résultats de 1800m et 2000m sont particulièrement bons. Le 2400m où se déroulent le Japan Derby, Oaks et Japan Cup est délicat à environ 64%.
Explorons les conditions du turf 2000m, qui a le taux de solidarité le plus élevé.
Un autre cheval de solidarité
#Essayez de serrer à 2000m
#1 Une autre popularité quand la popularité est la solidarité
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 '%Tokyo%' AND i.distance=2000) \
GROUP BY r.popularity ORDER BY r.popularity")
rows = cur.fetchall()
print('(Populaire,Nombre de fois)')
for row in rows:
print(row)
----------résultat----------
(Populaire,Nombre de fois)
(2, 21)
(3, 31)
(4, 12)
(5, 6)
(6, 7)
(7, 4)
(8, 2)
(11, 1)
Étonnamment, il y avait plus de solidarités de 1ère et 3ème popularité que de solidarité de 1ère et 2ème popularité. Est-ce le résultat d'autres chevaux marquant le deuxième plus populaire, qui est susceptible de gagner même un peu, plutôt que le plus populaire?
À propos, [lorsque le cheval le plus populaire avec une victoire de 1x n'était pas la solidarité] et [le plus grand nombre de solidarité] était également le 3e plus populaire. Qu'il s'agisse des gains les plus populaires ou de la mousse, l'achat au second semble moins intéressant.
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 '%Tokyo%' AND i.distance=2000) \
GROUP BY substr(r.pass, -2) ORDER BY substr(r.pass, -2)")
rows = cur.fetchall()
print('(Compter,Nombre de fois)')
for row in rows:
print(row)
----------résultat----------
(Compter,Nombre de fois)
('-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)
À la dernière entrée droite, les chevaux qui étaient à la 5e place semblent solidaires. Il est possible que ce soit parce que le cheval avec la jambe de tête est collant, et parce qu'il y avait de la capacité de réserve en premier lieu, il est à l'avant.
Un cheval populaire avec une victoire de 1x court à Tokyo Shiba 2000m, et si le 3ème cheval le plus populaire est la jambe de tête, la valeur attendue semble être élevée. Cela me rappelle le prix de l'empereur automne 2019 ...!
De là, nous utiliserons trois tables obtenues par netkeiba-grattoir. Par conséquent, j'ai décidé de [affiner les conditions en imbriquant des sous-requêtes].
Tout d'abord, c'est la valeur attendue lorsque vous achetez le Maren [1er le plus populaire-2e le plus populaire], qui semble avoir une valeur attendue faible.
1-2 Valeur attendue Maren populaire
# race_résultat course_course d'identité et de paiement_Calculez la valeur attendue en associant l'id
# ticket_tapez win 0,Double victoire 1,Cadre Ren 2,Maren 3,Large 4,Cheval seul 5,Triple 6,Triple simple 7
#Utilisation de sous-requêtes doubles, totalisant les remboursements consécutifs du cheval pour [la course dans laquelle un cheval était solidaire] et [la course dans laquelle l'autre cheval était le deuxième plus populaire]
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 '%Tokyo%' AND i.distance=2000))")
rows = cur.fetchall()
umaren_sum = 0
for row in rows:
umaren_sum += row[1]
#Découvrez le nombre de courses dans lesquelles les chevaux de la victoire 1x
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 '%Tokyo%' \
AND i.distance=2000")
rows2 = cur.fetchall()
print('Le nombre total de chevaux dans une course dans laquelle les chevaux avec une victoire de 1x sont solidaires:')
print(umaren_sum)
print('Le nombre de courses dans lesquelles des chevaux avec une victoire de 1x sont entrés au Tokyo Shiba 2000m:')
print(rows2[0][0])
print('Valeur attendue de Maren')
print(round(umaren_sum / rows2[0][0], 2))
-----résultat-----
Le nombre total de chevaux dans une course dans laquelle les chevaux avec une victoire de 1x sont solidaires:
6740.0
Le nombre de courses dans lesquelles des chevaux avec une victoire de 1x sont entrés au Tokyo Shiba 2000m:
115
Valeur attendue de Maren
58.61
Après tout, il est faible. Cela n'a pas de sens d'acheter un autre cheval populaire, car l'un semble être fort. Dans ce cas, il vaut mieux acheter la victoire la plus populaire.
Ensuite, il s'agit de la valeur attendue lorsque vous achetez le Maren [1er le plus populaire-3e le plus populaire], à laquelle vous pouvez vous attendre à la valeur la plus attendue.
1-3 Valeur attendue Maren populaire
# race_résultat course_course d'identité et de paiement_Calculez la valeur attendue en associant l'id
# ticket_tapez win 0,Double victoire 1,Cadre Ren 2,Maren 3,Large 4,Cheval seul 5,Triple 6,Triple simple 7
#Utilisation de doubles sous-requêtes, totalisant les remboursements consécutifs du cheval pour [la course dans laquelle un cheval était solidaire] et [la course dans laquelle un autre cheval était le troisième plus populaire]
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 '%Tokyo%' AND i.distance=2000))")
rows = cur.fetchall()
umaren_sum = 0
for row in rows:
umaren_sum += row[1]
#Découvrez le nombre de courses dans lesquelles les chevaux de la victoire 1x
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 '%Tokyo%' \
AND i.distance=2000")
rows2 = cur.fetchall()
print('Le nombre total de chevaux dans une course dans laquelle les chevaux avec une victoire de 1x sont solidaires:')
print(umaren_sum)
print('Le nombre de courses dans lesquelles des chevaux avec une victoire de 1x sont entrés au Tokyo Shiba 2000m:')
print(rows2[0][0])
print('Valeur attendue de Maren')
print(round(umaren_sum / rows2[0][0], 2))
-----résultat-----
Le nombre total de chevaux dans une course dans laquelle les chevaux avec une victoire de 1x sont solidaires:
18460.0
Le nombre de courses dans lesquelles des chevaux avec une victoire de 1x sont entrés au Tokyo Shiba 2000m:
115
Valeur attendue de Maren
160.52
La valeur attendue a finalement dépassé 100! Si vous connaissiez ces données, vous auriez acheté [Almond Eye et Danon Premium Maren] à l'automne du Prix de l'Empereur 2019.
Au cas où, jetons un coup d'œil à la valeur attendue lors de l'achat de la Maren [1er plus populaire-4e plus populaire].
1-4 Valeur attendue Maren populaire
# race_résultat course_course d'identité et de paiement_Calculez la valeur attendue en associant l'id
# ticket_tapez win 0,Double victoire 1,Cadre Ren 2,Maren 3,Large 4,Cheval seul 5,Triple 6,Triple simple 7
#Utilisation de sous-requêtes doubles, totalisant les remboursements consécutifs du cheval pour [la course dans laquelle un cheval était solidaire] et [la course dans laquelle un autre cheval était le quatrième plus populaire]
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 '%Tokyo%' AND i.distance=2000))")
rows = cur.fetchall()
umaren_sum = 0
for row in rows:
umaren_sum += row[1]
#Découvrez le nombre de courses dans lesquelles 1x chevaux ont couru
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 '%Tokyo%' \
AND i.distance=2000")
rows2 = cur.fetchall()
print('Le nombre total de chevaux dans une course dans laquelle les chevaux avec une victoire de 1x sont solidaires:')
print(umaren_sum)
print('Le nombre de courses dans lesquelles des chevaux avec une victoire de 1x sont entrés au Tokyo Shiba 2000m:')
print(rows2[0][0])
print('Valeur attendue de Maren')
print(round(umaren_sum / rows2[0][0], 2))
-----résultat-----
Le nombre total de chevaux dans une course dans laquelle les chevaux avec une victoire de 1x sont solidaires:
10030.0
Le nombre de courses dans lesquelles des chevaux avec une victoire de 1x sont entrés au Tokyo Shiba 2000m:
115
Valeur attendue de Maren
87.22
Bien que cela ne dépasse pas 100, il a été constaté que la valeur attendue est supérieure à [1-2 Popular Maren].
En réduisant les hippodromes, les parcours et les types de billets, le calcul de la valeur attendue s'est approfondi. Je m'habitue à gérer SQL. Si vous modifiez les conditions, vous pouvez l'analyser sur d'autres hippodromes, alors pourquoi ne pas essayer de calculer la valeur attendue de l'hippodrome près de votre lieu de résidence?
Le prochain objectif est de capturer WIN5 (un ticket de pari qui gagne tous les chevaux gagnants dans le set 5 courses, avec un dividende maximum de centaines de millions de yens)! Ce sera plus difficile car il faut analyser la lecture du terrain équestre et la lecture du développement des courses de chevaux, mais je vais l'essayer!
Merci d'avoir lu jusqu'ici.
Recommended Posts