[Python] Denken Sie ernsthaft über die M-1-Gewinnmethode nach.

1. Inhalt

2. Die diesjährigen M-1-Daten

2019 M-1-Daten
data = pd.DataFrame([[98,97,96,97,97,99,97],
                     [95,95,94,93,95,95,93],
                     [96,94,92,94,91,94,93],
                     [92,92,93,91,96,96,92],
                     [94,91,93,91,94,92,94],
                     [94,90,93,90,89,90,93],
                     [94,90,94,91,89,89,91],
                     [92,89,91,90,92,91,92],
                     [94,88,92,90,87,89,92],
                     [90,82,88,88,90,91,87]],
                   columns=['kaminuma','matsumoto','reiji','tomizawa','shiraku','hanawa','kyojin'],
                   index=['milkboy','kamaitachi','pekopa','wagyu','mitorizu','karashi','ozuwarudo','suwe','indians','newyork'])

3. Datenübersicht

Mittelwert und Standardabweichung

data.describe()
kaminuma matsumoto reiji tomizawa shiraku hanawa kyojin
count 10.000000 10.000000 10.0000 10.00000 10.000000 10.000000 10.000000
mean 93.900000 90.800000 92.6000 91.50000 92.000000 92.600000 92.400000
std 2.233582 4.184628 2.1187 2.54951 3.366502 3.306559 2.503331
min 90.000000 82.000000 88.0000 88.00000 87.000000 89.000000 87.000000
25% 92.500000 89.250000 92.0000 90.00000 89.250000 90.250000 92.000000
50% 94.000000 90.500000 93.0000 91.00000 91.500000 91.500000 92.500000
75% 94.750000 93.500000 93.7500 92.50000 94.750000 94.750000 93.000000
max 98.000000 97.000000 96.0000 97.00000 97.000000 99.000000 97.000000

Korrelationskoeffizient

sns.heatmap(data.corr(), annot=True)
plt.show()

save.png

data.corr().sum(axis=0)
Richter Korrelationskoeffizient insgesamt
kaminuma 5.251470
matsumoto 5.876156
reiji 5.272178
tomizawa 5.791959
shiraku 4.487326
hanawa 5.002257
kyojin 5.535278

Paar Grundstück

sns.pairplot(data)
plt.show()

save.png

4. Modell

Strategie

Implementierung

Regressionsanalysecode
from sklearn.linear_model import LinearRegression
X = data.values
coefs = np.zeros((7,7))
V = np.zeros(7)
model = LinearRegression()
for i in range(X.shape[1]):
    residuals = np.zeros((6,10))
    coef = np.zeros(6)
    x = X[:,i].reshape(-1,1)
    y = np.delete(X, i, 1)
    for j in range(y.shape[1]):
        y_ = y[:,j].reshape(-1,1)
        model.fit(x, y_)
        coef[j] = model.coef_
        residuals[j,:] = (model.predict(x) - y_).flatten()
    coef = np.insert(coef, i, 1)
    coefs[i,:] = coef
    cov_mat = np.cov(residuals, bias=True)
    V[i] = cov_mat.sum()

Um eine kurze Erklärung hinzuzufügen,

Bei * für i in ... werden die Punktzahlen anderer Richter nachträglich basierend auf Uenumas Punktzahl analysiert, und dann wird die Schleife basierend auf Matsumotos Punktzahl ausgeführt. Bei * für j in ... wird beispielsweise basierend auf Uenumas Punktzahl Matsumotos Punktzahl und Reijis Punktzahl zurückgegeben. Außerdem wird der Regressionskoeffizient (entsprechend $ \ beta_ {person} $ in der obigen Formel) in einem Array namens coef gespeichert. Außerdem werden die Residuen der Regression in einem Array gespeichert, das als Residuen bezeichnet wird. Am Ende der Schleife * für j in ... behandelt np.insert beispielsweise den Regressionskoeffizienten von Uenuma nach Uenuma 1. Coefs werden auch in einem Array namens Coefs gespeichert.

  • Die Summe der Varianzen der Residuen wird in einem Array namens V gespeichert. Die Summe der Residuen-Kovarianzmatrix entspricht dieser.

Ergebnis

coefs_df = pd.DataFrame(coefs, 
                        columns=['kaminuma','matsumoto','reiji','tomizawa','shiraku','hanawa','kyojin'],
                        index=['kaminuma','matsumoto','reiji','tomizawa','shiraku','hanawa','kyojin'])
sns.heatmap(coefs_df, annot=True)
plt.title('regression coefficient')
plt.show()

save.png

std_df = pd.DataFrame(pow(V,0.5),
                      columns=['residual std'],
                      index=['kaminuma','matsumoto','reiji','tomizawa','shiraku','hanawa','kyojin'])
residual std
kaminuma 9.332082
matsumoto 4.644780
reiji 9.057326
tomizawa 5.586553
shiraku 10.673552
hanawa 8.872448
kyojin 7.665711

5. Überlegung

sensitivity_df = pd.DataFrame(data.std(axis=0)*coefs.sum(axis=1), columns=['sensitivity'])
sensitivity_df = pd.concat([sensitivity_df, std_df], axis=1)
sensitivity residual std
kaminuma 14.714779 9.332082
matsumoto 17.009344 4.644780
reiji 14.904319 9.057326
tomizawa 16.691662 5.586553
shiraku 13.664036 10.673552
hanawa 15.027370 8.872448
kyojin 15.747906 7.665711

6. Zusammenfassung

Recommended Posts

[Python] Denken Sie ernsthaft über die M-1-Gewinnmethode nach.
Denken Sie grob über die Gradientenabstiegsmethode nach
Überlegen Sie, wie Sie Python auf Ihrem iPad programmieren können
In Python sortieren. Lassen Sie uns als nächstes über den Algorithmus nachdenken.
Über das Python-Modul venv
Über die Aufzählungsfunktion (Python)
Über die Funktionen von Python
Denken Sie an das Problem der minimalen Änderung
Informationen zur Grundlagenliste der Python-Grundlagen
Denken Sie grob über die Verlustfunktion nach
[Python Kivy] Über das Ändern des Designthemas
[Python] Fassen Sie die rudimentären Dinge über Multithreading zusammen
Die Python-Projektvorlage, an die ich denke.
Mein Freund scheint Python zu machen, also denke über das Problem nach ~ fizzbuzz ~
Denken Sie an die Analyseumgebung (Teil 3: Installieren Sie pyenv + Anaconda [Python, R] + jupyter + Rstudio).
Informationen zur Genauigkeit der Berechnungsmethode für das Umfangsverhältnis von Archimedes
Ein Java-Programmierer studierte Python. (Über Dekorateure)
Lernen Sie das Entwurfsmuster "Vorlagenmethode" in Python
Ich habe die Methode der kleinsten Quadrate in Python ausprobiert
Lernen Sie das Entwurfsmuster "Factory Method" in Python
Denken Sie an Suchvorgänge mit Tiefenpriorität und Breitenpriorität in Python
Über den Unterschied zwischen "==" und "is" in Python
Schreiben Sie eine Notiz über die Python-Version von Python Virtualenv
Denken Sie daran, eine Python 3-Umgebung in einer Mac-Umgebung zu erstellen
[Hinweis] Über die Rolle des Unterstrichs "_" in Python
Versuchen Sie, die Monte-Carlo-Methode in Python zu implementieren
Denken Sie an selektive Schnittstellen in der Befehlszeile
Über Python-Slices
Über die Einschlussnotation von Python
Über den Test
Über Python tqdm.
Über die Python-Ausbeute
Über Python, Klasse
Informationen zur Python-Vererbung
Über Python, range ()
Über Python Decorator
Informationen zur Python-Referenz
Über Python-Dekorateure
[Python] Über Multi-Prozess
Johnson-Methode (Python)
Über die Warteschlange
[Python] Semi-Lagrange-Methode
Es ist Zeit, ernsthaft über die Definition und die Fähigkeiten von Datenwissenschaftlern nachzudenken
Zerstören Sie den Zwischenausdruck der Sweep-Methode mit Python
Bestimmen Sie den Schwellenwert mithilfe der P-Tile-Methode in Python
Denken Sie an das Rack und WSGI der nächsten Generation
Informationen zur Option --enable-shared beim Erstellen von Python unter Linux
Ein Memorandum über die Umsetzung von Empfehlungen in Python
Python-Memo (für mich): Über die Entwicklungsumgebung virtualenv
Python (2) erfordert self, da die Methode eine Instanzmethode ist