[PYTHON] Ich habe versucht, die Pferde vorherzusagen, die mit LightGBM unter den Top 3 sein werden

Zweck

Prognostizieren Sie Pferderennen mit maschinellem Lernen und streben Sie eine Wiederherstellungsrate von 100% an.

Was ist diesmal zu tun?

Unter Verwendung aller Rennergebnisdaten für 2019, die in Vorheriger Artikel erhalten wurden, sagen wir die Pferde voraus, die in LightGBM unter den Top 3 sein werden. スクリーンショット 2020-07-07 15.34.15.png

Quellcode

Zunächst die Vorbehandlung

import datetime

def preprocessing(results):
    df = results.copy()

    #Entfernen Sie Elemente, die nicht numerische Zeichenfolgen in der Reihenfolge ihrer Ankunft enthalten
    df = df[~(df["Reihenfolge der Ankunft"].astype(str).str.contains("\D"))]
    #Die Verwendung von Backslashes in Qiita ist fehlerhaft, daher habe ich sie groß geschrieben.
    df["Reihenfolge der Ankunft"] = df["Reihenfolge der Ankunft"].astype(int)

    #Teilen Sie das Geschlechtsalter in Geschlecht und Alter
    df["Sex"] = df["Sex齢"].map(lambda x: str(x)[0])
    df["Alter"] = df["Sexuelles Alter"].map(lambda x: str(x)[1:]).astype(int)

    #Teilen Sie das Pferdegewicht in Gewicht und Gewichtsänderung
    df["Körpergewicht"] = df["馬Körpergewicht"].str.split("(", expand=True)[0].astype(int)
    df["Gewichtsänderung"] = df["Pferdegewicht"].str.split("(", expand=True)[1].str[:-1].astype(int)

    #Int Daten,In Float umwandeln
    df["Sieg"] = df["Sieg"].astype(float)

    #Entfernen Sie unnötige Spalten
    df.drop(["Zeit", "Unterschied", "Trainer", "Sexuelles Alter", "Pferdegewicht"], axis=1, inplace=True)

    df["date"] = pd.to_datetime(df["date"], format="%Y Jahr%m Monat%d Tag")

    return df

results_p = preprocessing(results)

スクリーンショット 2020-07-07 15.40.28.png Ich möchte es in Trainingsdaten und Testdaten aufteilen, aber train_test_split kann in diesem Fall nicht verwendet werden, da die Trainingsdaten älter als die Testdaten sein müssen. Aus diesem Grund erstellen wir eine Funktion, die Trainingsdaten und Testdaten in chronologischer Reihenfolge unter Verwendung der Spalte "Datum" trennt, die jetzt vom Typ "Datum / Uhrzeit" ist.

def split_data(df, test_size=0.3):
    sorted_id_list = df.sort_values("date").index.unique()
    train_id_list = sorted_id_list[: round(len(sorted_id_list) * (1 - test_size))]
    test_id_list = sorted_id_list[round(len(sorted_id_list) * (1 - test_size)) :]
    train = df.loc[train_id_list].drop(['date'], axis=1)
    test = df.loc[test_id_list].drop(['date'], axis=1)
    return train, test

Die kategoriale Variable wird zu einer Dummy-Variablen gemacht, aber der Pferdename hat zu viele Kategorien, sodass er diesmal weggelassen wird.

results_p.drop(["Pferdename"], axis=1, inplace=True)
results_d = pd.get_dummies(results_p)

Wenn die Reihenfolge der Ankunft innerhalb der 3. liegt, kennzeichnen Sie sie als 1 und andernfalls als 0 und behandeln Sie sie als objektive Variable.

results_d["rank"] = results_d["Reihenfolge der Ankunft"].map(lambda x: 1 if x < 4 else 0)
results_d.drop(['Reihenfolge der Ankunft'], axis=1, inplace=True)

Teilen Sie die erstellte Funktion split_data in Trainingsdaten und Testdaten auf und trainieren Sie sie mit LightGBM.

import lightgbm as lgb

train, test = split_data(results_d, 0.3)
X_train = train.drop(["rank"], axis=1)
y_train = train["rank"]
X_test = test.drop(["rank"], axis=1)
y_test = test["rank"]

params = {
    "num_leaves": 4,
    "n_estimators": 80,
    "class_weight": "balanced",
    "random_state": 100,
}

lgb_clf = lgb.LGBMClassifier(**params)
lgb_clf.fit(X_train.values, y_train.values)

Bewertung nach AUC-Punktzahl.

y_pred_train = lgb_clf.predict_proba(X_train)[:, 1]
y_pred = lgb_clf.predict_proba(X_test)[:, 1]
print(roc_auc_score(y_train, y_pred_train))
print(roc_auc_score(y_test, y_pred))

Ergebnis ist, Trainingsdaten: 0,819 Testdaten: 0,812 war. Ich denke, es ist eine gute Punktzahl für die Tatsache, dass ich noch keine Features gemacht habe. Betrachtet man die Bedeutung von Merkmalsmengen,

importances = pd.DataFrame(
    {"features": X_train.columns, "importance": lgb_clf.feature_importances_}
)
importances.sort_values("importance", ascending=False)[:20]

スクリーンショット 2020-07-07 15.56.41.png Wenn man dies betrachtet, hängt es fast ausschließlich von den Daten der Gewinnchancen ab, dh ist es zu einem Modell geworden, auf niedrige Gewinnchancen zu setzen </ font>, also erstellen Sie Funktionen usw. Ich möchte es verbessern.

Wir haben eine ausführliche Erklärung im Video! Datenanalyse und maschinelles Lernen beginnend mit der Vorhersage von Pferderennen スクリーンショット 2020-07-09 17.56.49.png

Recommended Posts

Ich habe versucht, die Pferde vorherzusagen, die mit LightGBM unter den Top 3 sein werden
Ich habe versucht, die Operationen zusammenzufassen, die wahrscheinlich mit numpy-stl verwendet werden
Ich habe versucht, den Datenverkehr mit WebSocket in Echtzeit zu beschreiben
Ich habe versucht, das Bild mit OpenCV im "Skizzenstil" zu verarbeiten
Tag 71 Ich habe versucht vorherzusagen, wie lange diese Selbstbeherrschung mit dem SIR-Modell anhalten wird
Ich habe versucht, das Bild mit OpenCV im "Bleistift-Zeichenstil" zu verarbeiten
Ich habe versucht, es zu erweitern, damit die Datenbank mit der Analysesoftware von Wiire verwendet werden kann
Eine Geschichte, die nicht funktioniert hat, als ich versucht habe, mich mit dem Python-Anforderungsmodul anzumelden
Ich habe es mit den Top 100 PyPI-Paketen versucht.> Ich habe versucht, die auf Python installierten Pakete grafisch darzustellen
Ich habe versucht, das Verhalten des neuen Koronavirus mit dem SEIR-Modell vorherzusagen.
Ich habe versucht, nächstes Jahr mit AI vorherzusagen
Ich habe versucht, lightGBM, xg Boost mit Boruta zu verwenden
Ich habe versucht, die Daten mit Zwietracht zu speichern
Ich habe versucht, Keras in TFv1.1 zu integrieren
Ich habe versucht, das Überleben der Titanic mit PyCaret vorherzusagen
Ich habe versucht, die Veränderung der Schneemenge für 2 Jahre durch maschinelles Lernen vorherzusagen
Ich habe versucht, die in Python installierten Pakete grafisch darzustellen
Ich habe versucht, eine CSV-Datei mit Python zu berühren
Ich habe versucht, Soma Cube mit Python zu lösen
[Python] Ich habe versucht, die Top 10 der Lidschatten grafisch darzustellen
Ich habe versucht, das Problem mit Python Vol.1 zu lösen
Kaggle Tutorial Titanic Know-how, um in den Top 2% zu sein
Arbeitsnotiz, die ich i18n mit Flask App ausprobiert habe
Beachten Sie, dass ich mich mit HTML in Beautiful Soup befasst habe
Arbeitsnotiz, die ich i18n mit Flask App ausprobiert habe
Ich habe PyQCheck, eine Bibliothek, die QuickCheck mit Python ausführen kann, in PyPI registriert.
Ich habe versucht, die Pferde vorherzusagen, die mit LightGBM unter den Top 3 sein werden
Ich habe versucht, die Anzahl der mit dem Coronavirus infizierten Menschen in Japan nach der Methode des neuesten Papiers in China vorherzusagen
Ich habe versucht, die Anzahl der mit dem Coronavirus infizierten Personen unter Berücksichtigung der Auswirkung des Verzichts auf das Ausgehen vorherzusagen
Einführung in die KI-Erstellung mit Python! Teil 2 Ich habe versucht, den Hauspreis in Boston mit einem neuronalen Netz vorherzusagen
Ich werde versuchen, die Links zusammenzufassen, die vorerst nützlich erscheinen
Ich habe versucht, Überlebende der Titanic mit Kaggle vorherzusagen und einzureichen
Ich habe versucht, die Entropie des Bildes mit Python zu finden
Ich habe versucht zu simulieren, wie sich die Infektion mit Python ausbreitet
Ich habe versucht, die Emotionen des gesamten Romans "Wetterkind" zu analysieren
Ich habe versucht, mit TensorFlow den Durchschnitt mehrerer Spalten zu ermitteln
Ich habe versucht, die Zugverspätungsinformationen mit LINE Notify zu benachrichtigen
Ich habe versucht, den in Pandas häufig verwendeten Code zusammenzufassen
Ich habe versucht, die Zeit und die Zeit der C-Sprache zu veranschaulichen
Ich habe versucht, die im Geschäftsleben häufig verwendeten Befehle zusammenzufassen
Ich habe versucht, die Mail-Sendefunktion in Python zu implementieren
Ich kann mich mit Django 3 nicht auf der Admin-Seite anmelden
Ich habe versucht, den Immobilienpreis in Boston mit PyCaret vorherzusagen
Ich habe die Vorbehandlung untersucht, die mit PyCaret durchgeführt werden kann
Ich habe versucht, einen Artikel mit SQL Alchemy auf Wiki.js zu erstellen
Verwenden Sie die Swagger-Benutzeroberfläche. Wenn Sie einen Swagger-UI-ähnlichen Stil wünschen, kopieren Sie einfach die gesamte Datei unter / dist unter https://github.com/swagger-api/swagger-ui. Danach schreiben Sie einfach hier in index.html die URL der yml-Datei um. Wenn Sie der Meinung sind, dass Sie @ApiModel oder @ApiModelProperty nicht finden können, wurden übrigens anscheinend alle Anmerkungen zur Schemadefinition in @Schema integriert. Emotionsanalyse mit Java, Swagger, OpenAPI, Micronaut Natural Language Processing! Ich habe versucht, die Bewertung anhand des Überprüfungstextes vorherzusagen
Ich habe auch versucht, die Funktionsmonade und die Zustandsmonade mit dem Generator in Python nachzuahmen
Ich schrieb einen Test in "Ich habe versucht, die Wahrscheinlichkeit eines Bingospiels mit Python zu simulieren".
Ich habe versucht, den Verkauf von Spielesoftware mit VARISTA anhand des Artikels von Codexa vorherzusagen
Ich habe versucht, LightGBM mit Yellowbrick zu lernen
Ich habe versucht, den Ball zu bewegen
Ich habe versucht, den Abschnitt zu schätzen.
Ich habe versucht, die Anfängerausgabe des Ameisenbuchs mit Python zu lösen
Ich habe die Bewegung Python3 ausprobiert, die die Richtung im Koordinatensystem ändert
Ich habe versucht, die Bewässerung des Pflanzgefäßes mit Raspberry Pi zu automatisieren
[Python] Ein Memo, das ich versucht habe, mit Asyncio zu beginnen
Ich habe am Wochenende versucht, mit Bitcoin Systre zu beginnen
Ich ließ RNN Sin Wave lernen und versuchte vorherzusagen
Ich habe versucht, die Größe des logischen Volumes mit LVM zu erweitern
Ich habe versucht, die Effizienz der täglichen Arbeit mit Python zu verbessern
Ich habe versucht, mich automatisch mit Selen bei Twitter anzumelden (RPA, Scraping)
[Flask] Ich habe versucht, die "Docker-Compose-Konfiguration" zusammenzufassen, die schnell für Webanwendungen erstellt werden kann