インタビュー

プロ野球開幕記念,DL4Jでペナント予想!今年勝つのはどのチーム?――AIは解説者たちに勝てるのか

この記事を読むのに必要な時間:およそ 3 分

いよいよ本日,日本プロ野球ペナントリーグ2017年シーズンが開幕します。今年は第4回ワールド・ベースボール・クラシックが開催されたこともあり,春先から野球熱が高まっています。

今回,株式会社ビーブレイクシステムズの上川伸彦氏,平原靖之氏の両名が,ディープラーニングのライブラリである「DL4J(Deep Learning for Java)⁠を利用し,プロ野球2017シーズンセパ両リーグの順位予想を行いました。

テクノロジーの進化はスポーツにどのような影響を与えるのか,技術的視点を踏まえながらお話を伺いました。

画像

上川伸彦氏(写真左)
株式会社ビーブレイクシステムズ技術担当取締役。
父親が中日ファン,母親が巨人ファン。実家の近くに日ハムの二軍の本拠地あり。小さいころ,巨人を応援していたが,最近では,WBCのような国際試合しか見ない(TV観戦)⁠MLBでの敬遠のルール改正を耳にすると,クロマティ選手や新庄選手を思い出す程度のたしなみはある。
平原靖之氏(写真右)
株式会社ビーブレイクシステムズ開発部所属。
自社製品のMA-EYESの導入から保守に従事。
25年来の日本ハムファン。年に数回プロ野球観戦に出かけ,球場のグラウンドの芝の緑を見るとテンションが上がる。好きな球場飯は神宮球場のメガ盛りソーセージ。
株式会社ビーブレイクシステムズ
http://www.bbreak.co.jp/

Q:まず,今回利用したDL4J(Deep Learning for Java)の特徴を教えてください。

上川: 商用サポートも提供されている高機能なプロダクトで,ホームページを見るとわかるとおり,サンプルも充実しています。本格的に使えるディープラーニングのライブラリの中で,Java向けのプロダクトは,現時点では唯一と言っても良いと思います。

Deep Learning for Java
https://deeplearning4j.org/ja-index

Q:今回,DL4Jでペナント予想をしようと思ったきっかけは何でしょうか?

平原: 元々,ペナントレースの予想大会が,社内の10名程度の有志により,2016年に始まりました。酒の肴ですね。

上川: 2016年の冬に,2016年ペナント予想の答え合わせの飲み会があったんですが,たまたまそこに私が参加して,その流れで,2017年の予想大会に呼ばれたことがきっかけでした。

正直,私は,野球をそれほど見ているわけではないので,他の参加者のように,好きな球団を熱烈に押すこともできないし,冷静に各球団の戦力を分析して順位を予想することもできませんでした。そこで,⁠コンピュータに予想させよう」と,AIを使うことを思いつきました。

平原: ちなみに,2016年ペナント予想では,誰一人として,優勝チームを当てることができませんでした(笑)⁠

上川: 何よりも,その結果が強烈に私の背中を押しましたね。⁠あ,外れ前提で大丈夫なんだ(笑)⁠と。

Q:なるほど。社内交流の場がきっかけで,さらにそれほど野球に詳しくない上川さんが参加したことの2つが重なって,AI予想をすることになったんですね。

さて,今回の予想は,どのようなデータを用いて,どのようなプログラミング(前提条件)で行ったのでしょうか。

上川: 今回使ったのは,球団ごとの年度成績,ドラフトやトレードのデータです。年度成績は,NPB(日本野球機構)オフィシャルサイトで公開されているデータで,順位や打撃成績,投手成績,守備成績になります。ドラフトやトレードのデータは,オフィシャルサイトにはありませんでしたので,情報が載っているサイトを探し,そこから自分たちで用意しました。

前提として社内の予想大会があるので,参加するためにもそれっぽい結果が出ることを優先させました。とにかく,結果(それぞれ1~6位の順位付け)を出すことが前提です。

予想に影響があるであろうデータを用意し学習させ,学習したモデルから結果が出ることを最重要要件として実施しています。そのため,ハイパーパラメータは,検討して決めたというよりも,試行錯誤で結果が出そうな値を,あまり考えずに使ったりしています。この点については,今後さらに改善の余地があると感じています。

また,当初はAIに順位を予想させていたのですが,あまりうまく結果を出すことができませんでした。そこで,順位予想の前段階として,勝ち数と負け数を予想させることをゴールにしました。その数値を,別途計算し,勝率を求めて順位を予想するという方法を採用しています。

今回の予想に関する備考

使用した過去のデータと条件

  • 10年分(2007~2016年シーズン)のもの
  • 「ドラフトやトレードの人数(過去4年分)⁠および「各チームの順位,打撃成績,投手成績,守備成績(過去2年分)⁠をまとめて入力情報とし,⁠次の年の勝数・負数」を出力情報として学習
  • 1球団につき223次元のデータ(ドラフトやトレードの人数の過去4年分、順位・打撃成績・投手成績・守備成績の過去2年分)を採用

使用したディープラーニング構成

  • 全結合×3階層のニューラルネットワーク。中間層のノード数は1,000~10,000
  • ハイパーパラメータの値は,学習が進みそうな値を人的に決定
  • 学習回数は12,600~126,000回。学習率=0.0001~0.000005。セパ別々に学習を実施
  • 元データが少ないため,過学習になると想定。そのため,学習化程度の精度推移を見ながら,安定した状態での予測値を採用

結果の出し方

  • 球団ごとに「勝数×確率の合計値」⁠負数×確率の合計値」を求め,そこから算出された勝率が大きい順に1~6位の順位付けを行う
  • それぞれの球団の勝数・負数は記事最後のとおり

利用したソースコード(抜粋)

int layerNum = 10000;

conf = new NeuralNetConfiguration.Builder() //
		.iterations(iterations) //
		.activation(Activation.SIGMOID).weightInit(WeightInit.ZERO)//
		.optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT)//
		.updater(Updater.NESTEROVS) //
		.momentum(momentum) //
		.learningRate(learningRate).regularization(true) //
		.dropOut(0.5) //
		.list() //

		.layer(0, //
				new DenseLayer.Builder() //
						.nIn(numInputs).nOut(layerNum).build()) //
		.layer(1, //
				new DenseLayer.Builder() //
						.nIn(layerNum).nOut(layerNum).build()) //
		.layer(2, //
				new OutputLayer.Builder(//
						LossFunctions.LossFunction.NEGATIVELOGLIKELIHOOD) //
								.activation(Activation.SOFTMAX). //
								nIn(layerNum).nOut(numOutputs).build()) //
		.backprop(true).pretrain(false).build();

著者プロフィール

馮富久(ふぉんとみひさ)

株式会社技術評論社クロスメディア事業部電子出版推進室室長。

1975年生まれ。横浜市出身。1999年4月株式会社技術評論社に入社。入社後から『Software Design』編集部に配属され,2004年1月に編集長へ就任。同2004年9月に『Web Site Expert』を立ち上げ,同誌編集長に就任,現在に至る。その後,2008年9月に設立したクロスメディア事業部に配属。現在,電子書籍を考える出版社の会の事務局長やWebSig 24/7のモデレーターを務める。過去にIPAオープンソースデータベースワーキンググループ委員やアックゼロヨン・アワード他各賞審査員などの経験を持つ。

Twitte ID:tomihisa(http://twitter.com/tomihisa/

バックナンバー

2017

  • プロ野球開幕記念,DL4Jでペナント予想!今年勝つのはどのチーム?――AIは解説者たちに勝てるのか

コメント

コメントの記入