各チームの打力と投手力をBradley-Terryモデルで

このシリーズの投稿は最終回となるかもしれない。

2017年度、交流戦が終わった段階での、
各チームの打力と投手力を推定してみよう。

モデルにおける勝敗は、
これまでの投稿と同じである。

まずは、ヒット・四死球なら打者の勝ち、それ以外は投手の勝ち、
として計算した強さが、こんな図のようになった。
f:id:koganie:20170623233944p:plain
横軸が打力、縦軸が投手力である。

一方で、打者の勝ちの場合に塁打を積算するとして
計算した結果はこんな図になった。
f:id:koganie:20170623235822p:plain

このグラフからも、
パリーグソフトバンク楽天
投打ともにバランスよく好調な様子がうかがえる。
反対にロッテの弱さも際立っている。

阪神は出塁だけでいえば打力は高いと出るが、
長打もまぜると落ち込んでしまった。

広島は、打力では抜きんでているが、
投手力に難がある様子が読み取れる。
チーム防御率はそれほど悪くはないが、
計算上は、そう推定される。

ぜひとも楽天に優勝してもらいたいものだ。

野球ネタでこういうなにか調べものしてみたいけど、
なかなかネタが思い浮かばない。
なにか面白そうなことがあったらまたやってみたい。

投手と打者の強さをBradley-Terryモデルで②

前回は出塁の可否を勝ち負けと見立ててモデルを計算しましたが
今回は長打力も検討に加えてみます。

出塁時はいずれも打者の1勝と見立てていたところ、
今回はその代わりに塁打を積算していく。
例えば本塁打なら4勝ぶんしたと見立てる。
投手にとっては抑えれば一勝、は前回と変わりません。

なんとも単純な方法ですが、やってみたらどうなるでしょう。

上位30選手投手編がこちら。

巨Pマシソン 0.00597838
西P牧田 和久 0.00595643
オP吉田 一将 0.0055647
ソP岩嵜 翔 0.00556156
楽P美馬 学 0.00550519
中P田島 慎二 0.00546596
ソPサファテ 0.0053279
DP山﨑 康晃 0.00528116
西P菊池 雄星 0.00519269
ヤP秋吉 亮 0.00513918
ロP内 竜也 0.00505028
阪P髙橋 聡文 0.00500306
楽Pハーマン 0.00497282
広P中田 廉 0.00492338
楽P松井 裕樹 0.00490814
楽P福山 博之 0.00490137
阪P桑原 謙太朗 0.00485029
オP黒木 優太 0.00481626
西Pウルフ 0.00480438
中P岩瀬 仁紀 0.00477409
巨P菅野 智之 0.00477396
日P鍵谷 陽平 0.00467817
ヤP小川 泰弘 0.00465996
ソP千賀 滉大 0.0046561
楽P岸 孝之 0.00456707
ソP森 唯斗 0.0045374
DPウィーランド 0.00446431
中P柳 裕也 0.00443908
広P床田 寛樹 0.00442964
阪P岩崎 優 0.0044192

前回と比べてどうでしょう。
上位に現れる選手層に大きく変化はありません。
微妙に順位が変わっていたりはしますが。
目立つのは前回47位の阪神桑原が今回ランクインしています。

では打者編。

オBロメロ 0.00586507
日B近藤 健介 0.00584543
広B丸 佳浩 0.00486705
西B秋山 翔吾 0.00484886
広B西川 龍馬 0.00476557
ソB内川 聖一 0.0047194
中Bゲレーロ 0.00468942
広Bエルドレッド 0.00463338
ソB柳田 悠岐 0.00446933
オBT-岡田 0.00422492
DBロペス 0.00417165
ソBデスパイネ 0.00414819
西Bメヒア 0.00410004
巨B坂本 勇人 0.00401284
楽B三好 匠 0.00398838
西B渡辺 直人 0.00398186
巨Bマギー 0.00393956
広B鈴木 誠也 0.0038594
日Bレアード 0.0037422
広B新井 貴浩 0.00373229
DB筒香 嘉智 0.00355535
楽B茂木 栄五郎 0.00352282
ヤBバレンティン 0.00351977
楽B聖澤 諒 0.00347741
DB宮﨑 敏郎 0.00344153
楽Bペゲーロ 0.0033329
広B松山 竜平 0.00332757
楽Bウィーラー 0.00331215
ヤB荒木 貴裕 0.00327607
ロB鈴木 大地 0.00327135

前回30位のロメロが、今回は1位です。
対戦結果を見てみると、投手で1位のマシソンから本塁打を打っているのが
大きく効いているような感じがあります。

ちなみに我らが楽天イーグルスからは、
前回は19位に三好匠がいるだけでしたが、
今回は茂木、聖澤、ペゲーロ、ウィーラーといった
今年の楽天を支えている選手がランクインしています。

しかしまあ今回のこの「強さ」が一体何を表すのかは言葉にはできず、
前回のように、次の打席での出塁率の計算などにも使えなそうです。
考えてみれば「ロメロとマシソンが1回戦って本塁打を打った」という事実から
これだけ大きく変わってしまうわけです。

・・・なんか意味があるんでしょうか。

投手と打者の強さをBradley-Terryモデルで①

ある投手とある打者が対戦した時に、ヒットになる可能性はどれくらいだろう、
と考えてみると、
単純に打率を見ただけではわからない。
打率はあくまで、その打者がそれまでに対戦してきた結果でしかないからだ。

といったところで、投手の強さ、打者の強さがわかると
なんとなく計算ができるような気がする。

そこで先の記事で書いたようなデータを収集して、
打者と投手の対戦結果をまとめている。
この結果を使って、Bradley-Terryモデルを使ったら、
投手の強さ、打者の強さが推定できるのでは、とふと思ったのである。

Bradley-Terryモデルについては
[R] Bradley-Terry model を用いてプレイヤー間の勝敗予測を行う | Developers.IO

http://www.ise.chuo-u.ac.jp/ise-labs/taguchi-lab/pdf/bachelor/2006/r2006_tamura.pdf

を参照である。
正直なところ、ほとんど理解はしていない。

今回は前回収集したデータ形式を(交流戦終了時まで)
ヒット、四死球なら打者の勝ち、
凡打なら投手の勝ち、
として計算を行っている。

Bradley-Terryモデルは、
上記の論文の2.32-2.34式を実装している。

今回の対象選手は、
投手に関しては65対戦以上、打者に関しては35対戦以上、
の対戦結果が残っている選手だけとしている。
あまり対戦結果が少なすぎると変な結果になるからだが、
ここで足切りをしている根拠はあるわけではない。適当である。
(試合数が現時点で65試合程度、というのは若干ある)

計算結果の上位30選手投手編はこちら。

巨Pマシソン 0.00925779
西P牧田 和久 0.00886314
DP山﨑 康晃 0.00833788
ソPサファテ 0.00774104
中P田島 慎二 0.00767384
ソP岩嵜 翔 0.00761731
楽P美馬 学 0.00721432
広P中田 廉 0.00704321
楽P福山 博之 0.00691287
中P岩瀬 仁紀 0.00673476
ヤP秋吉 亮 0.00670174
ロP内 竜也 0.00664855
オP吉田 一将 0.00640868
西P菊池 雄星 0.00626094
楽P松井 裕樹 0.00614154
ヤP小川 泰弘 0.00594624
楽Pハーマン 0.0058464
広P床田 寛樹 0.00581362
日P鍵谷 陽平 0.0058098
ソP千賀 滉大 0.00576664
西Pシュリッター 0.00573868
広P岡田 明丈 0.00571478
巨P菅野 智之 0.0056624
DP井納 翔一 0.00564968
楽P岸 孝之 0.00564496
オP黒木 優太 0.00561143
ヤP原 樹理 0.00558502
西Pウルフ 0.00555555
阪P髙橋 聡文 0.00549512
中P又吉 克樹 0.00541012

一方打者編はこちら。

日B近藤 健介 0.00653568
西B秋山 翔吾 0.00365323
広B丸 佳浩 0.00365323
オBT-岡田 0.00323847
DB筒香 嘉智 0.00323112
ソB内川 聖一 0.00308824
阪B糸井 嘉男 0.0030629
DB宮﨑 敏郎 0.0030397
ソB柳田 悠岐 0.00299378
広B新井 貴浩 0.00297482
巨B坂本 勇人 0.00294658
ヤBバレンティン 0.00289664
広B田中 広輔 0.00289138
広Bエルドレッド 0.00288231
中B大島 洋平 0.00286667
阪B鳥谷 敬 0.0028614
巨Bマギー 0.00285822
西B渡辺 直人 0.00277986
楽B三好 匠 0.00274763
阪B上本 博紀 0.00273266
ロB井口 資仁 0.00272242
ヤB坂口 智隆 0.00270844
巨B陽 岱鋼 0.0026825
ロB角中 勝也 0.00266387
ヤB山田 哲人 0.00264073
ヤB雄平 0.00263779
広B鈴木 誠也 0.00263631
日B矢野 謙次 0.00260109
ヤB畠山 和洋 0.00258032
オBロメロ 0.0025205

今回見ているのが、単純に出塁だけなので、
はやりの「長打力」とかは反映されていない。
だからこれを「強さ」と言っていいのかというと、それは違うんではないか。
ちなみに
投手と打者とは、3打席で1回ヒットが出ればいいような力関係なので、
投手のほうが全体的に大きな値にはなっている。

たとえば、楽天の松井祐樹から、巨人のマギーが出塁する確率は

p=\frac{0.00285822}{0.00614154+0.00285822}=0.3176
と計算できる。
なんとなく、そんなもんかあ、という感じはする。

が、データ数が少なすぎるからか、選手数が多すぎるからか、
そんな有意な差が生まれにくいからか、
そもそもプログラムがどっか違っているからか、
原因はわからんが、
強さの数値がどの選手も非常に小さい。
本当にこれであっているんだろうか。

もう少し遊んでみたい。

なにかお気づきの点などございましたらご教示ねがいたい。

投手対打者の対戦成績2017(5月まで)

いまいち、野球のデータを探しても見つからない。
各種データサイトがファイルで公開していたら楽なんだけどなあ。

ほしかったのが、投手対打者の対戦成績。
見た感じどこのデータサイトも扱っていないよう。

ヤフースポーツの出場成績を見れば、今年のは集められる。
プロ野球 - 2017年3月31日 巨人vs.中日 成績 - スポーツナビ
例えばこういうの。
イニングごとのバッティング成績と、
投手の対戦打者数が掲載されているので、
とりあえず対戦成績だけは集めることができる。
ただ、去年のデータ等は消えているようだ。

一球速報も試合後消えてしまう。
これを解析したら、その対戦の状況や要した球数なども
収集できるが、めんどうくさい。すこぶるめんどうくさい。
各種データサイトはこういうことをやっているんだろうか?

対戦順に並べたデータを公開してみる。
とりあえず5月までである。
matome3.txt - Google ドライブ
matome4.txt - Google ドライブ
matome5.txt - Google ドライブ

なお、よく確認してないので間違いがあるかもしれん。

(追記)
と、思ってたら、まとめてるところあるやん…
lcom.sakura.ne.jp

日記 あさひなぐ

このあいだ、あさひなぐのライブビューイングというのに行ってきました。

ぼくは特に斎藤飛鳥さんが好きなのですが、
殆ど彼女目当てで言ったような感じで、
気まぐれで券買って、
舞台そのものには正直言って期待とかしていなかったのです。

行ってから後悔ですよ、
なんで本会場の券を取ろうとすらしなかったんだろうって。

「強くなりたい」というセリフが、彼女の言葉に聞こえるんです。
角川の連載で彼女自身、
"努力って当たり前のことだと思ってるので"
とかさらっと書いていましたが、
自分の目指すところに向かっていくその姿は
やっぱり見ていて素晴らしいのです。

実際、あすかさんだけじゃなくて、
他のキャストも輝いているのです。
アイドルってすげえなあって、思うのです。

平野美宇さんも世界卓球でメダル決めたあとのインタビューで、
なんだかよくわからない受け答えをしていて、
なんなんだこの試合との落差は…
と衝撃を受けたばかりですけども、
頑張りの原動力はアイドルって、発言がありましたよね。
彼ら彼女らがこんなに頑張ってるんだから、
自分も頑張らなきゃって、
そういう連鎖がこういう人たちの周りをバチバチと引き起ってるわけですよね。
それが世の中の人にもバチバチ影響を与えていく。
アイドルってすげえなあって、思うのです。

だから安直に、僕も頑張らなきゃなあと思うんです。
思うんですけど、
今週もぐうたらしてしまいました。
進捗ございません。

asahinagu-proj.com

(正直映画も、(七瀬さんも好きだけど)なあちゃん主演じゃなあ
 とか思っちゃったりしてたんですが、映画も期待ですね!)

進捗報告 その3

前回の記事で

理想とすれば、もう少し緩やかな傾斜を描いて、 一致率を向上させていく、というのがよさそうな感じはある。 もう少し学習率の微調整を試すべきであろうか。

と書いたので、これの続きです。

学習率を小さくとって、少しずつ動かしていきます。

まず0.0000005で挑戦。 これまでは50回しか学習を繰り返していませんでしたが、 100回まで試してみました。 結果がこちら。

テストデータに対する誤差関数の値は、確かに下がっています。 f:id:koganie:20170508225343p:plain

ただ学習結果で対戦させてみると、こんな感じ。 f:id:koganie:20170508224703p:plain

・・・ん?

f:id:koganie:20170508233455p:plain

ネコかなあ!?

40をピークにして、あとは平均得点は下がっている。 誤差関数は下がっているのに、である。

次に0.0000001で挑戦。 こちらはさらに小さいので150回やっており、順調に下がっています。 f:id:koganie:20170508230647p:plain

対戦の結果はこちら。 f:id:koganie:20170509231910p:plain こちらは若干右肩上がりに見えるが、3.2前後のところで上げどまっている。

これまであまりに 「誤差関数は下がっているのに対戦成績に反映されないのはおかしい」 という点にこだわってきたが、 さすがに受け入れなくてはいけない。 つまり、これまであまりに直視してこなかったけど、 「特徴要素」をもっとうまく設定すれば、強さに反映されるんでは? いまの特徴要素ではどうあがいてもこれくらいが限度ってことなんでは?

ともかく、学習自体はうまくいっているように見える。 今度は特徴要素に注意して実験を行ってみようぞ。

進捗報告 その2

前回の、コンピュータ大貧民挑戦の続き。
進捗報告 その1 - koganie’s blog

前回、特徴要素を増やし、kou2相手に学習したところ、
対デフォルトでようやく勝ち越すことができました。
学習の仕方を変えてみたらもっと強くなるでしょうか?

学習率0.00005で10000試合分学習して、10000試合対デフォルトで対戦した結果
31151 29734 29515 29740 29860(得点。一番左が学習クライアント、それ以外はデフォルト)
で、デフォルトよりは若干強くなっているようです。
では、このまま40000試合分学習させてみましょう…の結果がこちら。
31013 29665 29806 29703 29813
見事に弱くなっています。
学習の際に、学習率に対し0.999を毎回かけて減衰させていった結果がこちら。
31169 29843 29432 29975 29581
f:id:koganie:20170430235703p:plain

続いて学習率を1/10して同じようにした結果。
32772 29519 29182 28990 29537
さっきより強くなっている!
では学習データを増やせば…!
31671 29645 29672 29268 29744
弱くなっている!なんでだ!
上では減衰させたが、こちらでは論文にもあるL2正則化を試してみる。

L2正則化というのは、誤差関数に
R(w)=\lambda ||w||^2_2
を足したもの(\lambda正則化項の学習係数)。
||w||_p=\sqrt[p]{|w_1|^p+...+|w_n|^p}
をp-ノルムというようで、
ノルム - Wikipedia
すなわち
\frac{\partial \lambda R(w)}{\partial w}=2\lambda w
正則化 - Wikipedia
を、勾配に足していくというもの。(たぶん)

で、学習した結果がこちら。
31722 29152 29818 29986 29322
あってもなくても、大して効果はないようだ…。

f:id:koganie:20170501000623p:plain

どちらにせよ、テストデータに大して誤差、一致率とも向上はしているので
過学習」をしているとは言いづらい。
実際、一致率は若干ではあるが、データ数多いほうが大きな数値をとっている。
が、現実問題としてデータ数を増やすと弱くなってしまうというのは、
過度に学習をしてしまっている、ということなのだろうか?

理想とすれば、もう少し緩やかな傾斜を描いて、
一致率を向上させていく、というのがよさそうな感じはある。
もう少し学習率の微調整を試すべきであろうか。

なんだかやる気がおきない。
もっとこう、劇的な変化してほしいが。果たして。