Das Modell von Python x Bradley-Terry visualisiert den Übergang von Stärkewerten sowohl in der Sepa- als auch in der Pa-Liga

Bradley-Terry's Model Dies ist ein Modell für "Stärke". Einfach ausgedrückt ist das Konzept, dass jede "Stärke" aus den Ergebnissen des Spiels quantifiziert werden kann. Die folgenden Dokumente waren hilfreich. Weitere Informationen finden Sie hier. Quantitative Bewertungsmethode für "Stärke" und ihre Anwendung

Es gibt n Elemente (Teams und Einzelpersonen) und es wird eine Art Match gespielt. Das Match ist ein Match von einem Element zu einem Element und das Ergebnis ist nur ein Sieg oder eine Niederlage gegen ein Element. Die "Stärke" jedes Elements wird aus den Ergebnissen mehrerer Schlachten gemessen. Unter der Annahme, dass die Wahrscheinlichkeit, dass Element i Element j gewinnt, für alle Kombinationen Pij ist, Pij = πi / πi + πj (1) Führe πi ein. Der relationale Ausdruck von Gleichung (1) wird als Bradley-Terry (BT) -Modell bezeichnet. Im BT-Modell kann man sich vorstellen, dass πi die Stärke des Elements i darstellt.

Referenziert

Ich verweise auf die Vorlesungsinhalte in der Data Mining-Studiengruppe basierend auf statistischer Verarbeitung und maschinellem Lernen # 03, an der ich neulich teilgenommen habe. Hier ist eine Python-Implementierung von Bradley-Terrys Modell. (Die Zahl, die ws zugewiesen wurde, ist eine Liste der Gesamtzahl der Siege der 6 Se League-Teams im Jahr 2014, ausgenommen die Ergebnisse des Austauschspiels. Der Einfachheit halber wird die Auslosung mit 0,5 gezählt.) Das hier erhaltene Theta ist der numerische Wert der "Stärke" jedes Teams.

import numpy as np
theta = np.ones(6)/6.0 # \Theta-Anfangswert
t = np.zeros(6)
r = 24.0 #Anzahl der Übereinstimmungen
ws = np.array([66.5, 66.5, 66, 56.5, 55, 50.5])  #Gesamtzahl der Siege
for iloop in range(0, 100):
    for i in range(0,6):
        acc = 0 #Akku für insgesamt
        for j in range(0,6):
            if (j == i):
                pass
            else:
                acc += r / (theta[i]+theta[j])
        t[i] = ws[i]/acc
    s = sum(t)
    for i in range(0, 6):
        theta[i] = t[i] / s

Kraftübergang in den letzten 5 Jahren

Mit Bezug auf das obige Bradley-Terry-Modell habe ich versucht, den Übergang der Se League über 5 Jahre mit matplotlib grafisch darzustellen.

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import numpy as np
import matplotlib.pyplot as plt
import os

theta = np.ones(6) / 6.0
t = np.zeros(6)
r = 24.0

teams = [u"Riese", u"Hanshin", u"Hiroshima", u"Chunichi", u"Yokohama", u"Yakult"]
colors = ["#f27b00", "#ffff00", "#ff0000", "#002468", "#044a90", "#111c3c"]
scores = [[67.5, 68, 48, 68.5, 42.5, 65.5], [66, 61, 57, 66, 43.5, 66.5], [76.5, 51.5, 55.5, 69, 43, 64.5], [74, 62.5, 58.5, 57.5, 55, 51.5], [66.5, 66.5, 66, 56.5, 55, 50.5]]
years = ["2010", "2011", "2012", "2013", "2014"]
points = [[], [], [], [], [], []]


def reset():
    global theta
    theta = np.ones(6) / 6.0

def bradley_terry(ws):
    for iloop in range(0, 100):
        for i in range(0, 6):
            acc = 0
            for j in range(0, 6):
                if i == j:
                    pass
                else:
                    acc += r / (theta[i] + theta[j])
            t[i] = ws[i] / acc
        s = sum(t)
        for i in range(0, 6):
            theta[i] = t[i] / s

if __name__ == '__main__':
    for score in scores:
        reset()
        bradley_terry(score)
        for i in range(0, 6):
            points[i].append(theta[i])

    for i in range(0, 6):
        data = np.loadtxt(points[i])
        plt.plot(
            data,
            linestyle="-",
            color=colors[i],
            label=teams[i],
            linewidth=2
        )

    plt.ylim(0, 0.5)
    X = np.arange(len(years))
    plt.xticks(X, years)
    plt.tick_params(labelleft="off")
    plt.xlabel("Year")
    plt.ylabel("BradleyTerry Rate")
    plt.title("Central League")
    plt.grid(True)
    plt.legend(loc="best")
    plt.rcParams.update({"font.size": 20})
    os.chdir("graph/")
    plt.savefig("central.eps")

    plt.show()

central.png

Es stellte sich heraus, dass es so etwas war. ・ Stabile Stärke der Riesen ・ Chunichi, Yakults Abhang ・ Hiroshima und Yokohama steigen auf Ich denke du kannst lesen ...

Wenn Sie dasselbe in der Pa League versuchen, sieht die Grafik wie folgt aus.

pacific.png

Verglichen mit der Grafik der Central League ist es charakteristisch, dass 6 gestrichelte Linien durcheinander sind. Sie können oft das "gemischte Pa" ausdrücken, das auftritt, wenn die AB-Klasse in den Jahren 2013 und 2014 vollständig ersetzt wird!

Recommended Posts

Das Modell von Python x Bradley-Terry visualisiert den Übergang von Stärkewerten sowohl in der Sepa- als auch in der Pa-Liga
Überprüfen Sie die Existenz der Datei mit Python
Ich habe Pygame mit Python 3.5.1 in der Umgebung von pyenv unter OS X installiert
Simulieren wir den Übergang der Infektionsrate in Bezug auf die Bevölkerungsdichte mit Python
Bereiten Sie die Ausführungsumgebung von Python3 mit Docker vor
2016 Todai Mathematik mit Python gelöst
[Hinweis] Exportieren Sie das HTML der Site mit Python.
Berechnen Sie die Gesamtzahl der Kombinationen mit Python
Überprüfen Sie das Datum der Flaggenpflicht mit Python
Lösen des Lorenz 96-Modells mit Julia und Python
Konvertieren Sie den Zeichencode der Datei mit Python3
[Python] Bestimmen Sie den Typ der Iris mit SVM
[Blender x Python] Denken Sie an Code mit Symbolen
[Python & SQLite] Ich habe den erwarteten Wert eines Rennens mit Pferden im 1x-Gewinnbereich ② analysiert
Extrahieren Sie die Tabelle der Bilddateien mit OneDrive & Python
Lerne Nim mit Python (ab Anfang des Jahres).
Berechnen Sie die Summe der eindeutigen Werte durch Pandas-Kreuztabellen
Zerstören Sie den Zwischenausdruck der Sweep-Methode mit Python
Visualisieren Sie den Bereich der internen und externen Einfügungen mit Python
Berechnen Sie den Regressionskoeffizienten der einfachen Regressionsanalyse mit Python
Installieren Sie die neueste stabile Version von Python mit pyenv (sowohl 2 als auch 3).
Zusammenfassung des grundlegenden Ablaufs des maschinellen Lernens mit Python
Holen Sie sich mit Python den Betriebsstatus von JR West
Erstellen Sie eine Matrix mit numpy nur für Spalten, deren Gesamtwert der Elemente der Spalten der Matrix das oberste X ist