Magst du Pferderennen? Ich bin ein Anfänger, der dieses Jahr angefangen hat, aber es macht wirklich Spaß, verschiedene Informationen zu sammeln, vorherzusagen und zu raten!
Anfangs hat es Spaß gemacht, nur zu antizipieren, aber der Wunsch, ** "Ich will nicht verlieren" **, floss über.
Als ich im Internet surfte, fragte ich mich, ob es einen köstlichen Weg gibt, um zu gewinnen, und es schien interessant, Pferderennen mit maschinellem Lernen vorherzusagen. Deshalb beschloss ich, es nach dem Studium zu versuchen.
Die Rücklaufquote bei Pferderennen scheint zwischen 70 und 80% zu liegen. Wenn Sie es also richtig kaufen, wird die Wiederherstellungsrate wahrscheinlich auf dieses Niveau konvergieren.
Daher möchte ich vorerst eine ** Wiederherstellungsrate von 100% oder mehr ** anstreben, indem ich die vor dem Rennen erhaltenen Daten verwende!
Selbst wenn Sie eine Vorhersage für Pferderennen sagen, gibt es meiner Meinung nach verschiedene Dinge, wie beispielsweise die einfache Vorhersage des Rankings oder die Optimierung der Wettmethode unter Berücksichtigung der Gewinnchancen. Es gibt auch verschiedene Arten von Wettkarten zu kaufen.
Dieses Mal möchte ich die Rangliste der Pferderennen in 3 Gruppen innerhalb des 3. Platzes, der Mitte und der unteren, aufteilen und eine ** Mehrklassenklassifizierung ** durchführen.
Und ich werde ein ** Win-Type ** Wett-Ticket für das Pferd kaufen, das in den erwarteten Ergebnissen an erster Stelle steht. Der Grund dafür ist, dass die Win-Win-Rücklaufquote höher ist als die von hochpreisigen Wettkarten wie Triple. (Referenz: Buenas Blog-Wissen über Pferderennen für Wettscheine)
Außerdem werde ich keine Informationen zu Beliebtheit und Gewinnchancen für Feature-Mengen verwenden. Wie wäre es mit Informationen, die erst kurz vor dem Rennen entschieden werden? Und das liegt daran, dass ich dachte, es wäre nicht interessant, einfach ein beliebtes Pferd zu kaufen. (Die etwa 50 Minuten vor dem Start des Rennens ermittelten Pferdegewichtsdaten werden als Merkmalsbetrag behandelt.)
Dieses Mal möchte ich mich auf das Rennen auf der Tokyo Racecourse konzentrieren und wie folgt vorgehen. Der Grund für die Eingrenzung der Rennstrecke ist, dass es aufgrund des schlechten Algorithmus und der Zeit von 1 Sekunde Zeit braucht, um die Renndaten zu kratzen. (Die Datenerfassung dauerte von 2008 bis 2019 etwa 50 Stunden ...)
Es ist ein Ärger, aber wenn Sie sich die Zeit nehmen, können Sie Daten für alle Rennstrecken sammeln.
Sammeln Sie durch Scraping von dieser Site (netkeiba.com). Soweit ich robots.txt (das überhaupt nicht vorhanden war) und die Nutzungsbedingungen gelesen habe, schien es für das Scraping in Ordnung zu sein, also habe ich darauf geachtet, es nicht zu überladen. Für die Schabemethode habe ich auf den folgenden Artikel verwiesen.
Das Ergebnis der Datenerfassung ist wie folgt.
Beim Schaben haben wir Informationen über Pferde entfernt, die in den letzten drei Rennen keine Leistung erbracht haben. Dies liegt daran, dass wir glauben, dass die Zukunft nicht für Dinge vorhergesagt werden kann, die keine Informationen aus der Vergangenheit haben.
Darüber hinaus fehlt möglicherweise der Zeitindex usw. für Pferde, die in ländlichen Gebieten oder in Übersee gelaufen sind, aber dieser Teil ist mit dem Durchschnittswert gefüllt.
Dieses Mal wurden die folgenden Elemente als Merkmalsmengen behandelt. Daten des Tages
Variablennamen | Inhalt |
---|---|
kai | Wie oft |
day | Welchen Tag findet statt? |
race_num | Was R. |
field | Shiba oder Dreck |
dist | Entfernung |
turn | Welche Richtung |
weather | Wetter |
field_cond | Baba Staat |
~~place~~ | ~~Tagungsort~~ |
sum_num | Wie viele Köpfe |
prize | Gewinnerpreis |
horse_num | Pferdenummer |
sex | Sex |
age | Alter |
weight_carry | Gewicht |
horse_weight | Pferdegewicht |
weight_change | Änderung des Pferdegewichts |
l_days | Wie viele Tage sind seit dem letzten Lauf vergangen? |
Variablennamen | Inhalt |
---|---|
p_place | Tagungsort |
p_weather | Wetter |
p_race_num | Was R. |
p_sum_num | Wie viele Köpfe |
p_horse_num | Pferdenummer |
p_rank | Rangfolge |
p_field | Shiba oder Dreck |
p_dist | Entfernung |
p_condi | Baba Staat |
p_condi_num | Baba Index |
p_time_num | Zeitindex |
Ich habe nur die Zeit in Sekunden angegeben und die kategorialen Variablen beschriftet. Unten finden Sie als Beispiel den Code für die Beschriftung des Wetters.
encode.py
num = df1.columns.get_loc('weather')
for i in range(df1['weather'].size):
copy = df1.iat[i, num]
if copy == 'Fein':
copy = '6'
elif copy == 'Regen':
copy = '1'
elif copy == 'leichter Regen':
copy = '2'
elif copy == 'Leichter Schnee':
copy = '3'
elif copy == 'Wolkig':
copy = '4'
elif copy == 'Schnee':
copy = '5'
else:
copy = '0'
df1.iat[i, num] = int(copy)
df1['weather'] = df1['weather'].astype('int64')
Beschriften Sie jede Kategorievariable auf diese Weise mit einem Label.
Ich dachte, es wäre einfacher mit LabelEncoder, aber ich habe es nicht verwendet, weil es unmöglich schien, die Kompatibilität konvertierter Zahlen und Variablen zwischen mehreren Datendateien zu vereinheitlichen.
Außerdem scheint LightGBM, das diesmal verwendete Framework für maschinelles Lernen, einen Entscheidungsbaum für den schwachen Klassifikator zu verwenden, sodass keine Standardisierung erforderlich ist. (Referenz: Einführung in LightGBM)
Erstellen Sie ein Modell mit LightGBM, einem Framework zur Erhöhung des Gradienten. Der Grund, warum ich mich dafür entschieden habe, ist, dass es schnell und (wahrscheinlich) am stärksten in nicht-tief ist.
Und was die Vorhersagemethode betrifft, haben wir diesmal eine Mehrklassenklassifikation vorgenommen, die in eine der drei Gruppen mit dem 3. Platz oder weniger, dem mittleren 1/3 ohne den 3. Platz und dem unteren 1/3 eingeteilt wird. Zum Beispiel ist bei 15 Köpfen der 1. bis 3. Platz die Gruppe 0, der 4. bis 8. Platz die Gruppe 1 und der 9. bis 15. Platz die Gruppe 2.
Ich habe auf die folgende Seite verwiesen, um zu erfahren, wie man es benutzt. (Referenz: [[Für Anfänger] LightGBM (Klassifizierung mehrerer Klassen) [Python] [Maschinelles Lernen]](https://mathmatical22.xyz/2020/04/11/%E3%80%90%E5%88%9D % E5% AD% A6% E8% 80% 85% E5% 90% 91% E3% 81% 91% E3% 80% 91lightgbm-% E5% 9F% BA% E6% 9C% AC% E7% 9A% 84% E3% 81% AA% E4% BD% BF% E3% 81% 84% E6% 96% B9-% E5% A4% 9A% E3% 82% AF% E3% 83% A9% E3% 82% B9% E5 % 88% 86% E9% A1% 9E% E7% B7% A8 /))
Die Trainingsdaten und Verifizierungsdaten sind wie folgt.
Trainingsdaten / Verifizierungsdaten | Testdaten |
---|---|
Tokyo_2008_2018 | Tokyo_2019 |
Die Trainingsdaten werden durch train_test_split in Trainingsdaten und Modellbewertungsdaten unterteilt.
Es wurde keine spezielle Abstimmung der Parameter durchgeführt.
train.py
train_set, test_set = train_test_split(keiba_data, test_size=0.2, random_state=0)
#Trainingsdaten erklären Variable Daten(X_train)Und objektive variable Daten(y_train)Eingeteilt in
X_train = train_set.drop('rank', axis=1)
y_train = train_set['rank']
#Erläutern Sie die Modellbewertungsdaten. Variablendaten(X_test)Und objektive variable Daten(y_test)Eingeteilt in
X_test = test_set.drop('rank', axis=1)
y_test = test_set['rank']
#Stellen Sie die zum Lernen verwendeten Daten ein
lgb_train = lgb.Dataset(X_train, y_train)
lgb_eval = lgb.Dataset(X_test, y_test, reference=lgb_train)
params = {
'task': 'train',
'boosting_type': 'gbdt',
'objective': 'multiclassova',
'num_class': 3,
'metric': {'multi_error'},
}
model = lgb.train(params,
train_set=lgb_train, #Bezeichnung der Trainingsdaten
valid_sets=lgb_eval, #Angeben von Verifizierungsdaten
verbose_eval=10
)
Die richtige Antwortrate liegt bei 54%. Sie raten mehr als die Hälfte. Dieser Wert hat sich nicht viel geändert, auch wenn ich die Parameter manipuliert habe. Dieses Mal werde ich so weitermachen, wie er ist.
Wir werden die verifizierten Daten 2019 für ein Jahr auf der Rennbahn von Tokio veröffentlichen.
Hier als Bedingung
Es wird gesagt. Der Grund für die zweite Bedingung besteht darin, Rennen auszuschließen, die mit ziemlicher Sicherheit fehlen, wie das 2-jährige Rennen, bei dem nur ein Pferd 3 oder mehr vergangene Renndaten hat.
Unten ist das resultierende Diagramm.
Die Trefferquote liegt bei 26%, was ein guter Treffer ist.
Aufgrund der zweiten Bedingung gab es Rennen, bei denen ich nicht auf 100 Rennen wetten konnte, aber ich denke, es gibt keine Beschwerde über diese Wiederherstellungsrate, nachdem ich an ungefähr 80% der Rennen teilgenommen habe.
Es ist sehr gut ...! Bei Mamono liegt die Wiederfindungsrate nahe bei 200%, was ein wunderbares Ergebnis ist. Wettkarten mit einer hohen Rendite anstelle einer niedrigen Trefferquote schwanken jedoch stark in der Sammelquote, daher möchte ich sie als Referenz behalten.
Der Unzufriedenheitspunkt ist, dass die Wiederherstellungsrate von Doppelsiegen weniger als 100% beträgt, obwohl wir bewerten, ob wir auf dem dritten Platz sind oder nicht. Ich möchte etwas gegen diesen Bereich unternehmen.
Bisher ist die einzige Bedingung für den Kauf eines Wettscheins die Anzahl der Pferde, aber im praktischen Gebrauch denke ich, dass dies durch das Gute oder Schlechte des erwarteten Wertes entschieden wird, anstatt alle Rennen zu kaufen.
Daher möchte ich die folgenden neuen Bedingungen hinzufügen.
** ・ Kaufen Sie nur, wenn die Differenz zwischen der 1. und 2. vorhergesagten Zahl in Gruppe 0 0,1 oder mehr beträgt. ** ** **
Mit anderen Worten, kaufen Sie nur in solchen Fällen Ich kaufe zu solchen Zeiten nicht darüber.
Der Grund für diesen Zustand
Nachfolgend sind die Ergebnisse der Überprüfung unter diesen Bedingungen aufgeführt.
**: entspannt: Es fühlt sich wirklich gut an: entspannt: **
Die Trefferquote hat sich von 26% auf 39% und die Wiederherstellungsrate von 130% auf 168% deutlich verbessert.
Die Anzahl der Zielrennen hat sich um etwa 250 verringert und wurde auf 100 Rennen pro Jahr eingegrenzt. Angesichts der Tatsache, dass 1/4 immer noch teilnimmt, halte ich diese Wiederherstellungsrate für gut.
Ich werde vorerst andere Wettkarten ausprobieren.
Es ist gut! Es ist erwähnenswert, dass die Trefferquote bei doppelten Gewinnen 70% und die Wiederherstellungsrate 100% übersteigt. Das beliebteste Pferd hat eine doppelte Gewinnrate von etwa 60-65% (Referenz: Entwicklerblog | AlphaImpact Co., Ltd.) Das scheint sehr gut zu sein.
Schauen wir uns auch die Bedeutung von Features beim Erstellen eines Modells an.
Sie können sehen, dass der Zeitindex als ziemlich wichtige Merkmalsgröße behandelt wird. Offensichtlich gewinnen Pferde, die in den vergangenen Rennen gut gelaufen sind, eher.
Überraschend war, dass die Anzahl der Tage seit dem letzten Rennen ebenso wichtig war wie die Anstiegszeit und das Pferdegewicht. Ich war überrascht, dass ich nicht viele Leute sehe, die Pferderennen vorhersagen und die Rotation betonen. Dies ist auch deshalb interessant, weil es sich mit Almond Eye überschneidet, der verloren hat, indem er Rote für die Mitte von zwei Wochen gezwungen hat. Nun, ich bin mir nicht sicher, ob der Index schlechter wird, weil der Platz kurz ist, aber lol
Heutzutage scheint die KI des Pferderennsports immer aufgeregter zu werden, da einige Websites als Dienstleister fungieren und Dwangos Cyber Award. Unter solchen Umständen konnte ich die Vorhersage von Pferderennen mithilfe von maschinellem Lernen üben, was sehr viel Spaß machte.
Die Zukunft kann jedoch nicht perfekt vorhergesagt werden. Die Verwendung dieses Modells bedeutet also nicht, dass Sie definitiv gewinnen können. Es ist möglich, dass dieses und nächstes Jahr das Rennen besiegt wird.
Ich denke nicht, dass es gut ist, von so etwas zu viel zu erwarten, aber ich denke, es gibt Träume, weil manche Leute mit Pferderennprogrammen Geld verdienen.
Da Sie darauf hingewiesen haben, dass es sich um einen Leitfaden für finanzielle Zwecke handelt, habe ich die URL gelöscht. : Bogen:
Recommended Posts