[PYTHON] [Verifikation] Nur weil es tiefes Lernen gibt, bedeutet dies nicht, dass die Wiederherstellungsrate bei Pferderennen leicht 100% überschreiten kann.

Jetzt ist der Beginn der Lösung des Rätsels

Originalartikel: Wenn Sie tiefes Lernen haben, können Sie die 100% ige Wiederherstellungsrate bei Pferderennen überschreiten

Bewegen wir es zuerst

Ich werde das Programm sofort kaufen und es versuchen. Wie in der Erklärung geschrieben, funktionierte es im Grunde genommen mit Kopieren und Einfügen, aber die folgenden beiden Stellen funktionierten nicht so wie es ist, also habe ich es hier behoben.

--Parsing Datumsdaten

Es ist nicht genau dasselbe, da es zufällige Elemente enthält, aber das Diagramm verhält sich ähnlich, sodass es scheinbar reproduziert wurde. Wie im Artikel angegeben, ist ** "Ein Teil des Bereichs (um 55-60), in dem der 3. Platz Index 60 oder mehr beträgt und die Gewinnchancen nicht zu hoch sind" ** zu 100% verfügbar Übertroffen. Es scheint, dass die Anzahl der Rennen und Rekorde letzte Woche zugenommen hat (Queen Elizabeth Cup Woche).

Das Ergebnis meiner Hinrichtung

Artikel Ergebnis
Anzahl der Zielrennen (*) 3672
Anzahl der Zieldatensätze 42299
Kaufnummer 74
Trefferzahl 13
Trefferquote 17.57%
Erholungsrate 172.97%

Ergebnisse im Originalartikel

Artikel Ergebnis
Anzahl der Zielrennen (*) 3639
Anzahl der Zieldatensätze 41871
Kaufnummer 98
Trefferzahl 20
Trefferquote 20.4%
Erholungsrate 213.3%

Welche Art von Pferd wird vorhergesagt

Welche Art von Pferd haben Sie gekauft und 100% überschritten? Streben Sie eher ein bedingtes Rennen als ein Hauptrennen an? Wenn Sie ein Pferderennen-Fan sind, werden Sie neugierig sein. Der Datenrahmen der Verifizierungsdaten enthielt jedoch nicht den Pferdenamen, sondern nur die vorverarbeiteten Werte wie Pferdenummer und Beliebtheit, und die Gewinnchancen waren keine Rohdaten, so dass es sehr schwer zu verstehen war. Ich konnte es nicht nachschlagen, ohne separate Daten zu erstellen.

Versuchen Sie, von Deep Learning zu einem anderen Modell zu wechseln

Dies ist der Code, den ich geändert habe. Wechseln wir zu einer einfacheren logistischen Regression im Vergleich zu einem einfachen neuronalen Netzwerk.

python


from sklearn.linear_model import LogisticRegression

model = LogisticRegression(C=2.0, penalty='l1', random_state=42, multi_class="auto")
model.fit(df_train, train_labels)

Bei Verwendung der Ausgabe model.predict_proba (df) [:, 1] dieses Modells als Index für den 3. Platz beträgt der Index für den 3. Platz nach wie vor 60 oder mehr, und die Gewinnchancen sind nicht zu hoch. (Um 55-60) Versuchen Sie, "` zu kaufen.

Artikel Ergebnis
Kaufnummer 175
Trefferzahl 21
Trefferquote 12.0%
Erholungsrate 127.26%

** Erstaunlich. Die logistische Regression hat 100% überschritten! ** Übrigens waren es 196% in Random Forest!

Sind die Daten falsch?

Ich habe das Gefühl, dass die Daten eine Art Voreingenommenheit aufweisen, kein tiefes Lernen. Die Orte, an denen wir die Kaufmethode in Betracht ziehen, sind wie folgt.

python


#0, wenn Sie die Quoten (standardisiert) im Bereich von 1-8 kaufen.01〜0.Setze 08
if win3_pred >= 0.60 and 0.01 <= odds < 0.08:
    return 1
else:
    return 0

win3_pred ist der 3. Platz vor dem Multiplizieren mit 100. Ich bin neugierig, dass die Gewinnchancen immer noch standardisiert sind (0,01-0,08 entspricht den normalen Gewinnchancen 55-60), aber hier werde ich sie wie folgt umschreiben.

python


if 0.01 <= odds < 0.08:
    return 1
else:
    return 0

Dies ist eine Simulation des Kaufs eines Doppelgewinn-Wettscheins, wenn die Gewinnchancen 55- bis 60-mal sind, ohne den 3. Platz zu verwenden.

Artikel Ergebnis
Kaufnummer 778
Trefferzahl 68
Trefferquote 8.74%
Erholungsrate 90.67%

Da die Abzugsrate für doppelt gewinnende Wettscheine 20% beträgt, liegt die Wiederherstellungsrate natürlich bis zu einem gewissen Grad bei etwa 80%, selbst wenn die Reichweite einfach durch die Gewinnchancen festgelegt wird. Wenn es sich um ein großes Loch-Wettschein handelt, ist ein Schuss groß, so dass es zu Unschärfen kommen kann, aber ich denke, dass 90% etwas hoch sind. Möglicherweise liegt ein Problem mit den Überprüfungsdaten selbst vor. Lassen Sie uns überprüfen, wo die Vorverarbeitung und die Datenverarbeitung durchgeführt werden.

Werfen Sie Pferde weg, die nicht die Ergebnisse der letzten 5 Läufe haben

Dies ist der erste Ort, an dem ich erwischt wurde

#Fehlende Zeilen löschen
df = df.dropna(subset=[
    'past_time_sec1', 'past_time_sec2', 'past_time_sec3',
    'past_time_sec4', 'past_time_sec5'
]).reset_index(drop=True)

past_time_sec1 bis past_time_sec5 repräsentieren die Zeit der letzten 5 Läufe des Pferdes. Dies bedeutet, dass Pferde, die nicht alle Zeiten der letzten 5 Läufe haben, hier aufgegeben werden. Besonders im 2-3 Jahre alten Rennen variiert die Anzahl der Läufer jedes Pferdes. Zum Beispiel hat Fukushima 10R Fukushima 2-jähriger S letzte Woche 2019/11/10 14 Läufer (https://race.netkeiba.com/?pid=race_old&id=c201903030410), aber die Zeit der letzten 5 Läufe ist abgeschlossen Es gab drei, und tatsächlich waren nur drei im gelöschten Datenrahmen. Mit dieser dropna ** beträgt die Anzahl der Datensätze 471500-> 252885 **. ** Fast die Hälfte der Daten wurde verworfen. ** Die hier verworfenen Daten sind 2-3 Jahre alte Pferde, lokale Pferde (da für lokale Pferderennen keine Daten erfasst wurden) und Daten für 2010 (frühere Laufinformationen können nicht erfasst werden, da für 2009 keine Daten vorliegen). Es war das Zentrum. Es scheint nicht angemessen zu sein, aber es ist kein schwerwiegender Fehler, da es durch dieselbe Regel beim Ableiten ausgeschlossen werden kann.

Wie viele doppelte Gewinne werden zurückerstattet?

Wettende Tickets mit doppeltem Gewinn gewinnen bis zum 3. Platz, wenn die Anzahl der Läufer 8 oder mehr beträgt, bis zum 2. Platz, wenn 5 bis 7 Pferde vorhanden sind, und werden nicht verkauft, wenn 4 oder weniger Pferde vorhanden sind. Die folgende Verarbeitung wurde ** an den Verifizierungsdaten durchgeführt.

python


#Konzentrieren Sie sich auf Rennen mit 2 oder mehr Doppelsiegen und insgesamt 5 oder mehr
win3_sums = df.groupby('race_id')['win3'].sum()
win3_races = win3_sums[win3_sums >= 2]
win3_races_indexs = win3_races.index.tolist()

win3_counts = df.groupby('race_id')['win3'].count()
win3_races2 = win3_counts[win3_counts >= 5]
win3_races_indexs2 = win3_races2.index.tolist()

race_id_list = list(set(win3_races_indexs) & set(win3_races_indexs2))

Durch diesen Vorgang wird die Anzahl der Datensätze zu ** 48555-> 42999 **, und 11,4% der Daten werden verworfen. Was Sie wirklich wegwerfen möchten, ist ein Rennen, das nicht für einen Doppelsieg erstattet wurde, aber es ist zu viel zum Nachdenken. Tatsächlich gibt es zwischen 2018 und 2019 keinen Wettbewerb für weniger als 4 Tiere in JRA (zumindest in meinem Keibadb). Dieser Prozess ist ein Problem.

Was ist los

Was ist los? Da "win3" eine objektive Variable ist, die angibt, ob sie in der Reihenfolge der Ankunft im doppelten Gewinnbereich eingegeben wurde oder nicht, beträgt in der obigen Verarbeitung die Anzahl der Pferde, die in den doppelten Gewinnbereich eingegeben haben, 2 oder mehr und die Anzahl der Läufer 5 oder mehr. Aber erinnere dich. ** Pferde, die nicht die Ergebnisse der letzten 5 Läufe haben, wurden bereits weggeworfen **, so dass ** Pferde, die nicht gelöscht werden sollten, verschwunden sind **. Es ist ein wenig verwirrend, aber lassen Sie uns einen konkreten Blick darauf werfen. Zum Beispiel Kyoto 12R am 2. November 2019. https://race.netkeiba.com/?pid=race&id=p201908050112&mode=shutuba Die 5 Pferde von Nr. 4 Bockerini, Nr. 7 Sunray Pocket, Nr. 9 Narita Blue, Nr. 10 Theo Amazon und Nr. 12 Metropole wurden im Voraus aus dem Rekord ausgeschlossen, da die Rennzeiten der letzten 5 Läufe nicht aufeinander abgestimmt sind und 8 Köpfe stehen. Es wird als Rennen angesehen. Die Reihenfolge der Ankunft in diesem Rennen war 4-3-7. Da es sich um ein 13-köpfiges Rennen handelt, beträgt der Doppelsieg 4, 3 und 7. Da jedoch ** 4 und 7 Pferde bereits aus dem DataFrame gelöscht wurden, wurde in diesem Rennen ** nur ein Pferd zu einem Wettschein mit doppeltem Gewinn **, sodass es in diesem Rennen Pferde im Bereich mit doppeltem Gewinn gibt. Es wird eins sein und von den Validierungsdaten ausgeschlossen werden. Diese Operation kann für zukünftige Rennen nicht durchgeführt werden, da wir natürlich nicht wissen, welches Pferd vor dem Rennen das doppelt gewinnende Wettticket sein wird ** Übrigens hatte der 5. Nihon Piro Halo dieses Rennens eine Gewinnchance von 60 Mal, verlor aber (Verifizierungsdaten zeigen, dass es nicht mehr notwendig ist, ein Pferd zu kaufen, das 55-60 Mal verliert). Ich kann es nach und nach sehen. Unabhängig vom Trainingsmodell sind einige Pferde aus den Validierungsdaten verschwunden, was voreingenommen zu sein scheint.

Lassen Sie uns mit korrekten Daten überprüfen

Lassen Sie uns eine Schlussfolgerung ziehen, ohne sie unangemessen einzugrenzen. Es gibt kein Rennen, für das 2018-2019 keine doppelte Gewinnrückerstattung gewährt wurde. Daher müssen die Verifizierungsdaten nicht eingegrenzt werden. Simulieren wir den Kauf für die Verifizierungsdaten, die nicht durch Auskommentieren eingegrenzt wurden

Artikel Ergebnis
Anzahl der Zielrennen (*) 5384
Anzahl der Zieldatensätze 48555
Kaufnummer 88
Trefferzahl 13
Trefferquote 14.77%
Erholungsrate 145.45%

Diese Wiederfindungsrate von 145% beträgt

――Dritter Platzindex (vorhergesagter Wert des Deep-Learning-Modells) ――Kaufen Sie keine Pferde, die in den letzten 5 Läufen nicht die gleiche Zeit haben

Es wird unter diesen drei Bedingungen erreicht. Sowohl die Trefferquote als auch die Wiederherstellungsrate sind gesunken, aber es ist eine Berechnung, die normalerweise rentabel ist. Ist dies die Kraft des tiefen Lernens?

Welche Art von Pferd schätzen Sie?

Wann wird der 3. Platz höher sein? Ich habe versucht, mit DecisionTree anhand der Klasse zu lernen, ob der Index für den 3. Platz größer oder kleiner als 0,5 ist, als die richtigen Antwortdaten.

python


from sklearn.tree import DecisionTreeClassifier

clf = DecisionTreeClassifier(max_depth=3)
clf = clf.fit(df[all_columns], df.win3_pred > 0.5)

Lassen Sie uns den resultierenden Baum visualisieren. H.png

Anscheinend scheinen past_odds1, dh ** die Gewinnchancen des vorherigen Laufs ** und die Reihenfolge der Ankunft des vorherigen Laufs wichtig zu sein.

Dieses Mal geben wir einfach den 3. Platz-Index der Kaufbedingung als 10-mal oder weniger der Gewinnchancen des vorherigen Laufs basierend auf der Regel an.

python


# if win3_pred >= 0.60 and 0.01 <= odds < 0.08:
if raw_past_odds1 <= 10 and 55 <= raw_odds <= 60:
Artikel Ergebnis
Kaufnummer 115
Trefferzahl 15
Trefferquote 13.04%
Erholungsrate 147.22%

Anstatt die Ausgabe des durch Deep Learning erlernten Modells zu verwenden, ergab die Verwendung nur einer Regel die gleiche Wiederherstellungsrate. ** **.

Überprüfen Sie alle Daten erneut

Gehen wir zurück zu 2010 sowie 2018-2019, um Daten mit Gewinnchancen von 55-60 zu erhalten.

Pferde mit Gewinnchancen von 55-60 für alle 471.500 Rekorde

pivot_df = df2[(df2['odds'] >= 55) & (df2['odds'] <= 60)].groupby('year') \
          .fukusho.agg(["mean", "count", "sum"])
pivot_df.columns = ["Erholungsrate", "Kaufnummer", "Rückerstattung"]
pivot_df['Einnahmen und Ausgaben'] = pivot_df['Kaufnummer'] * (-100) + pivot_df['Rückerstattung']
pivot_df.style.background_gradient()

A.png Die Wiederherstellungsrate im Jahr 2015 ist hoch, liegt aber bei etwa 80%. Die Verifizierungsdaten für 2018-2019 liegen ebenfalls unter 80%, was nicht besonders hoch ist.

Pferde, die nicht für alle 5 Läufe die gleiche Zeit haben, und Pferde mit Gewinnchancen von 55 bis 60 Mal

C.png Die Verifizierungsdaten befinden sich in diesem Zustand. Die Wiederherstellungsrate ging erst 2016 zurück, stieg aber in anderen Jahren an. Die Verifizierungsdaten für 2018-2019 stiegen ebenfalls um mehr als 80%.

Pferde mit Gewinnchancen von 55-60 und früheren Laufchancen von 10 oder weniger

D.pngE.png   Das linke ist für alle Daten und das rechte ist für alle 5 Läufe mit Einschränkung. Die Ergebnisse für jedes Jahr (147,22%) unter den Bedingungen, die die gleichen Zahlen wie früheres Deep Learning ergaben, sind die kombinierten Daten für 2018 und 2019 in der Tabelle rechts. ** Sie können sehen, dass selbst wenn Sie unter den gleichen Bedingungen kaufen, die Wiederherstellungsrate in einigen Jahren unter 60% liegen kann **.

Fazit

Die Bedingung für das Ersetzen des 3. Platz-Index innerhalb des 10-fachen der Gewinnchancen des vorherigen Rennens war 147,22%, da es ** 2018-2019 ** war, und diese Regel wird in Zukunft eine Wiederherstellungsrate von 100% erreichen. Es scheint schwierig zu sein. Was ist also mit dem 3. Platz Index? Wenn Sie die Beziehung zwischen dem 3. Platz-Index und den vorherigen Laufquoten darstellen ... ダウンロード (6).png Natürlich verwende ich auch andere Funktionen, aber ** Ich kann sehen, dass der Index für den 3. Platz umso höher ist, je niedriger die Gewinnchancen des vorherigen Laufs sind. ** **. Genau das hat mir Decision Tree beigebracht.

Der ursprüngliche Artikel hatte den Titel ** "Wenn Sie tiefes Lernen haben, können Sie die 100% ige Wiederherstellungsrate bei Pferderennen überschreiten" , In der Tat ** "Wenn Sie Pferde entfernen, die in den letzten 5 Läufen nicht die gleiche Zeit haben, und im November 2018 bis November 2019 ein doppeltes Gewinn-Wettticket für Pferde mit einer Gewinnchance von 55 bis 60 kaufen, beträgt die Wiederherstellungsrate 100. Sie können% durch Regeln überschreiten, anstatt tief zu lernen, und es ist zufällig "" Ich denke, dass es der Inhalt ist. ** Ist es nicht einfach, die 100% ige Wiederherstellungsrate im Pferderennen zu überschreiten, nur weil es tiefes Lernen gibt? **

(Ich habe alles auf einmal analysiert und alles auf einmal geschrieben, sodass ich möglicherweise einen Fehler gemacht habe. Bitte lassen Sie mich wissen, wenn Sie einen Fehler gemacht haben.)

Mangel an Liebe zu Daten

Was ich in diesem Artikel sagen möchte, ist, die Daten besser zu betrachten. Ich genoss diese Überprüfung und das Gefühl, dass das Rätsel gelöst wurde. ** Grundsätzlich finde ich die Daten interessant **. Es gibt verschiedene Perspektiven und verschiedene Entdeckungen. Sogar die Daten der Überlebensanalyse der Titanic sind schon bei Betrachtung interessant. Wenn wir richtig mit den Daten umgehen, können wir verschiedene Dinge sehen. Auf diese Weise können Sie ein gutes Modell erstellen **, unabhängig davon, wie tiefgreifend Sie lernen oder welche Algorithmen Sie verwenden. Ein Modell, das sich nicht um Ihre Daten kümmert, ist keine gute KI. ** **. Wenn Sie mit den Daten auskommen wollen, aber nicht wissen, womit Sie anfangen sollen, gehen Sie zur Rennbahn! Es macht Spaß, auch wenn Sie kein Geld verdienen !!!

Recommended Posts

[Verifikation] Nur weil es tiefes Lernen gibt, bedeutet dies nicht, dass die Wiederherstellungsrate bei Pferderennen leicht 100% überschreiten kann.
Mit Deep Learning können Sie die Erholungsrate von 100% im Pferderennen überschreiten
Vorhersage für Pferderennen: Wenn Sie der Meinung sind, dass die Wiederherstellungsrate beim maschinellen Lernen (Light GBM) 100% überschritten hat, haben Sie dies getan
Tiefes Lernen! Die Geschichte der Daten selbst, die gelesen werden, wenn sie nach der handschriftlichen Nummernerkennung nicht folgen
Python gibt keine Fehler oder Ausgaben aus, nur weil der Einzug falsch ausgerichtet ist
Es wird gesagt, dass libmysqlclient.so.18 nicht existiert