ディープラーニングで大相撲千秋楽の勝敗を予想してみる
11月場所で鶴竜が千秋楽前に7場所ぶりの優勝を決めました。
9月場所の千秋楽前にもこんな記事を書いたのですが、またしても相撲絡みの記事を書きたくなったので書きます。
今回はアホみたく流行っている「ディープラーニング」を使って、大相撲千秋楽の勝敗を予想してみようという記事です。といっても4層しかないのですが「ディープラーニング」の方が引きが良さそうなのでタイトルに盛り込んでしまいました。
以下が、今回の目的です。「千秋楽の勝敗は、その場所の14日目までの成績(調子)に依存する部分がある」という仮定を置きました。この仮定のもと、14日目までの成績を入力として、千秋楽の勝敗を予想する分類器を作成します。
下図が、今回作成したディープニューラルネット(DNN)です。
このDNNに訓練データとして過去の幕内の取り組み結果を与えます。データ構造は以下の通りです。
過去の取り組みデータは「大相撲星取表」というサイトから収集しました。データ収集には、pythonのpandasの機能を利用しました。
upura.hatenablog.com
今回の場合、平成元年~平成28年7月場所までのデータを訓練データとしてDNNに与えました。実装にはRの「mxnet」というライブラリを使っています。以下のサイトを参考にしました。
tjo.hatenablog.com
# Data Import df <- read.csv("C:/data.csv", header = F) newdata <- read.csv("C:/newdata.csv", header = F) library(mxnet) # Training Data train <- data.matrix(df) train.x <- train[,-1] train.y <- as.numeric(train[,1]) # Test Data test <- data.matrix(newdata[,-1]) # DNN data <- mx.symbol.Variable("data") fc1 <- mx.symbol.FullyConnected(data, name="fc1", num_hidden=28) act1 <- mx.symbol.Activation(fc1, name="tanh1", act_type="tanh") fc2 <- mx.symbol.FullyConnected(act1, name="fc2", num_hidden=14) act2 <- mx.symbol.Activation(fc2, name="tanh2", act_type="tanh") fc3 <- mx.symbol.FullyConnected(act2, name="fc3", num_hidden=10) act3 <- mx.symbol.Activation(fc3, name="tanh3", act_type="tanh") fc4 <- mx.symbol.FullyConnected(act3, name="fc4", num_hidden=2) softmax <- mx.symbol.SoftmaxOutput(fc4, name="softmax") # Execution devices <- mx.cpu() mx.set.seed(71) model <- mx.model.FeedForward.create(softmax, X=train.x, y=train.y, ctx=devices, num.round=4000, array.batch.size=100, learning.rate=0.03, momentum=0.99, eval.metric=mx.metric.accuracy, initializer=mx.init.uniform(0.5), array.layout = "rowmajor", epoch.end.callback=mx.callback.log.train.metric(100)) # Result preds <- predict(model, test, array.layout = "rowmajor") pred.label <- max.col(t(preds)) - 1 pred.label
さていよいよ学習を終えたDNNを使って、千秋楽の勝敗を予想します。訓練データと同様、14日目までの結果から28次元のベクトルを作成します。これをDNNに入れ、千秋楽の勝敗を予想してもらいます。結果は以下のようになりました。
DNNの結果を見る前に、僭越ながら私も予想をしました。私の予想時には、14日目までの成績以外の情報(過去の対戦成績など)もフル活用しています。ちなみに私は小学校の頃に「わんぱく相撲」で2年連続名古屋市でベスト8になった実績を持つ(隠れた自慢)くらいには昔から相撲を見ています。
黄色はDNNと私の予想が食い違ったことを示します。意図的かのごとく食い違っていますね。
ディープラーニングと人間、どちらの予想が正しいか。明日の千秋楽の土俵に注目したいと思います。
追記
発表スライドにまとめました。