2015年 4月 の投稿一覧

階層ベイズモデルでサッカーチームの攻撃力と守備力を推定する【リーガ・エスパニョーラ編】

以前プレミアリーグの主要チームの攻撃力・守備力の推定を行いました。
今回はリーガ・エスパニョーラのチームの攻撃力と守備力を以前と同様の階層ベイズモデルで推定を行いたいと思います。

はじめに

利用したデータ

前回と同様、データは football-data.co.uk のデータを10年分使用しています。

team_participation_laliga

各チームごとに1部リーグに参加した年は黒丸をプロットしています。
X軸に記載されている年は、その年から始まるリーグを意味しています。2005だったら、2005-2006シーズンのデータです。

分析対象とするチーム

今回は10年間1部リーグでプレイし続けているチームに関して、チームの攻撃力と守備力の推定結果を紹介します。
該当するチームはAthletic Bilbao、Atlético Madrid、Barcelona、Espanol、Getafe、RealMadrid、Sevilla、Valencia の8チームでした。
今回はこの8チームに関して、攻撃力と守備力を定量的に見てましょう。

その他細かい点

その他、モデルのコードや数値の見方等は前回の記事を参照してください。
今回はn.iter=10000, n.burnin=1000, n.chains=3で全てのパラメータが収束しました。

 

分析結果

アスレティック・ビルバオ

AthBilbaoAttackStrength
AthBilbaoDefenseStrength

 

アトレティコ・マドリード

AthMadridAttackStrength
AthMadridDefenseStrength

 

バルセロナ

BarcelonaAttackStrength
BarcelonaDefenseStrength

 

エスパニョール

EspanolAttackStrength
EspanolDefenseStrength

 

ヘタフェ

GetafeAttackStrength
GetafeDefenseStrength

 

レアル・マドリード

RealMadridAttackStrength
RealMadridDefenseStrength

 

セビージャ

SevillaAttackStrength
SevillaDefenseStrength

 

バレンシア

ValenciaAttackStrength
ValenciaDefenseStrength

やはり、バルセロナ、レアル・マドリードが圧倒、次いでアトレティコ・マドリードですね。
今季の攻撃力・守備力のチーム間比較は下記の通り。

2014-2015シーズンの攻撃力・守備力のチーム間比較

LaligaAttack2015
LaligaDefense2015

レアル・マドリード、バルセロナの攻撃力は群を抜いています。
また、守備はバルセロナ、次いでアトレティコ・マドリードが抜けています。
攻撃のレアル、守備のアトレティコ、高いレベルでバランスの良いバルセロナと言えそうですね。

優勝争いはバルセロナとレアルになりそうですが、残り5節。要注目です。

AzureのVirtual Machineで大規模データ解析もサクサクこなせるR環境を構築する

分析を進めるにあたって試行錯誤のスピードを上げるのって大事ですよね。

そこそこのマシンでも、ちょっとした集計なんかは対して時間がかかりませんが、
機械学習やMCMCなどの計算処理をブン回したいときは非力なマシンだと時間がかかってしょうがないです。

計算処理の高速化はそれこそ様々な手法がありますが、
今回はAzureを使って計算リソースのスケールアップすることができるRStudio Server環境の構築方法を紹介したいと思います。

Ubuntu14.04で構築することを前提に進めていきます。

 

1. Virtual Machineを作成する

Azureの管理ポータルからVirtual Machineを作成します。
DNA NAME, SIZE, NEW PASSWORD, CONFIRM, REGION の各項目を入力して、CREATE A VIRTUAL MACHINE をクリックします。

create-virtual-machine

2. SSHでログインする

Virtual Machineを作る際に設定したパスワードを入力し、ログインします。

 

3. Rのインストール

あとは、分析の際に使うパッケージを入れてください。
Ubuntuの場合

で大体入ります。

見つからない場合は、下記レポジトリを追加してみましょう。

 

4. Rstudio Serverのインストール

バージョンは今日現在の情報ですので、最新版はこちらを参考にしてください。

 

5. ポート開放

Rstudio Server はデフォルトで8787ポートを使います。
Azureでは管理ポータルからポート開放をする必要があります。
open-port

6. Rstudio Server にログインする

login-to-rstudio
Rstudio Server には Linux のユーザーアカウントでログインできます。
ID : azureuser
Pass : {Virtual Machine 作成時に設定した PASSWORD}
ですね。

 

7. 計算リソースのスケールアップの仕方

Virtual Machineを停止させ、CONFIGURE画面から、VIRTUAL MACHINE SIZE を変更することができます。
適したサイズを選んで、再度 Virtual Machine を起動させましょう。
試しに、D14インスタンス(CPU 16コア、Memory 112GB)を立ち上げてみます。
scale-up

CPUコア数

cpu-cores
 

メモリ容量

memory-amount
 

という感じでスケールアップが自由自在な分析マシンが構築できました。
インスタンスサイズには注意しつつ、使いましょう!


参考サイト
cran2deb4ubuntu | The Ubuntu R Blog
RStudio – Download RStudio Server
Getting Started – RStudio Support

階層ベイズモデルでサッカーチームの攻撃力と守備力を推定する【プレミアリーグ編】

階層ベイズモデルを用いて、プレミアリーグの主要チームの攻撃力と守備力を時系列で推定しました。
過去に書いた、一般化線形モデルのポアソン回帰を用いて攻撃力と守備力を推定した記事と、サッカーの勝敗予想をベイズモデル化した記事の合わせ技 + αな内容となっております。

目次

 

はじめに

利用したデータ

データは football-data.co.uk のプレミアリーグのデータを10年分使用しています。
どの国のリーグでも言えることですが、下位チームの降格、下位リーグの上位チームの昇格があります。
下図の通り、シーズンごとにプレミアリーグに参加しているチームが異なっています。

team_participation

各チームごとにプレミアリーグに参加した年は黒丸をプロットしています。
X軸に記載されている年は、その年から始まるリーグを意味しています。2005だったら、2005-2006シーズンのデータです。
また、今シーズンのデータに関しては、2015年3月22日に行われた試合までを対象としています。

分析対象とするチーム

今回は10年間プレミアリーグでプレイし続けているチームに関して、チームの攻撃力と守備力の推定結果を紹介します。
該当するチームはArsenal、Aston Villa、Chelsea、Everton、Manchester City、Manchester United、Tottenham の7チームでした。
この7チームに関して、攻撃力と守備力を定量的に見てましょう。
 

モデル

前提

以前の記事と同様、ゴール数はポアソン分布に従うという前提のもとモデルを構築しています。
ポアソン分布のパラメータであるλをいかに推定するかという問題になるわけですが、
ざっくり表現すると、

LambdaHome = exp(Baseline + HomeAttack - AwayDefense + HomeEffect)\\LambdaAway = exp(Baseline + AwayAttack - HomeDefense)

という形でλを推定しています。

このモデルの前提として、
・各チームの攻撃力・守備力は前年の攻撃力・守備力を平均とする正規分布に従う(分析初年度の2005年を除く)
・各チームの攻撃力・守備力のばらつきはチームごとに定義され、10年間で一定である
・各チームの攻撃力・守備力はシーズン中の変化しない

詳しくは下記コードで。

モデルのJAGSコード

RからJagsを叩いており、Rから下記のパラメータを投げています。

YH ホームチームの得点数
YA アウェイチームの得点数
XHT ホームチーム
XAT アウェイチーム
XS シーズン
XNG 10年間の総試合数
XNT 10年間にプレミアリーグでプレーしたチーム数
XNS シーズン数


MCMCの計算と結果

n.iter=105000, n.burnin=5000, n.chains=3で収束しました。※1


分析結果の見方

結果のサンプル

ArsenalAttackStrength



こんな感じで10年分の変化をプロットします。

Y軸の数値の意味

上で紹介したホームチームのλの計算式を分解すると、

LambdaHome\\= exp(Baseline + HomeAttack + AwayDefense + HomeEffect)\\= exp(Baseline)\times exp(HomeAttack)\times exp(AwayDefense)\times exp(HomeEffect)
ここでBaselineは

2005 0.04590155
2006 0.019349518
2007 0.047285737
2008 0.021237398
2009 0.059335881
2010 0.10370445
2011 0.123273471
2012 0.112604102
2013 0.082352007
2014 0.045952234



という結果になっています。
話を単純化するため、BaselineとHomeAttackだけを見てみましょう。
今年の攻撃力の値を見るとして、2014年のBaselineを仮定します。

exp(Baseline)\times exp(HomeAttack)\\= exp(0.045952234)\times exp(HomeAttack)
でホームチームの攻撃力が0.5だとすると

= exp(0.045952234)\times exp(0.5)\\\approx 1.047 \times 1.648
λを押し上げる分だけを考慮すると

\approx 1.047 \times 0.648= 0.678
となり、攻撃力が0.5ということはλを0.678だけ押し上げる要因となります。

λってなんだったっけ

今回のモデルは最終的にはλを推定しているわけですが、このλが何だったか、今一度確認しておきましょう。
推定しているのはポアソン分布のパラメータであるλです。

ポアソン分布は下記の式で定義される確率分布です。
P(X = k) = \frac{\lambda^k\mathrm{e}^{-\lambda}}{k!}
「単位時間中に平均で λ 回発生する事象がちょうど k 回発生する確率」
今回のケースにあてはめて意訳すると
「90分間に平均で λ 得点するチームがちょうど k 点いれる確率」
つまり、1試合で期待される得点数ですね。(実際ポアソン分布の期待値はλです)

というわけで、「攻撃力が0.5ということは、λを0.678だけ押し上げる」ということは
「攻撃力が0.5ということは、1試合で期待される得点数を0.678点押し上げる効果がある」
という意味です。

これは単純化した話なので、実際にはこれらに加え、相手チームの守備力・ホームチームの効果が加味されます。

濃いグレー・薄いグレー

図中の黒実線のまわりの濃いグレーはMCMCによって推定されたパラメータの50%区間、
さらにその外側の薄いグレーの部分は95%区間を示しています。

 
図の前提の説明が長くなりましたが、結果をみてみましょう。

 

分析結果

Arsenal

ArsenalAttackStrength
ArsenalDefenseStrength

今シーズンは攻撃が過去最高クラスになっている模様。
また、2012シーズンには前年に比べ、守備が結果を出しています。
2012シーズンってコシールニーがフェルメーレンからレギュラーを勝ち取ったシーズンです。

 

Aston Villa

AstonVillaAttackStrength
AstonVillaDefenseStrength

緩やかに衰退しています。特に攻撃。
守備力は2012シーズンから徐々に上がっています。
2012シーズンの夏って現主将でディフェンダーのロン・フラールが加入した年なんですよね。

 

Chelsea

ChelseaAttackStrength
ChelseaDefenseStrength

近年チェルシーといえば、2009シーズンですね。
リーグ戦優勝、FAカップ優勝と2冠を達成した年です。シーズン通算で103得点し、当時の最高記録を塗り替えました。
その後に低迷し、徐々に盛り返している模様。
今シーズンはジエゴコスタ等、攻撃陣の補強がうまくいき、2009シーズンに近い水準の攻撃力となっています。

 

Everton

EvertonAttackStrength
EvertonDefenseStrength

順調に伸び、2012シーズン、2013シーズンあたりがピークです。
今シーズンは良くないですね。

 

Liverpool

LiverpoolAttackStrength
LiverpoolDefenseStrength

攻撃は2,3シーズンごとに好不調を繰り返しています。守備は徐々に衰退。
2012シーズンと2013シーズンは攻撃力が大きく伸びていますが、完全にスアレスの仕業です。

 

Manchester City

ManCityAttackStrength
ManCityDefenseStrength

攻撃・守備ともに0付近だったのが、今や、リーグトップクラスです。
そもそも2005シーズンとか15位ですから、わりと降格ギリギリなわけです。
皆さんご存知の2008年にUAEの投資グループ、アブダビ・ユナイテッド・グループに買収されてからの躍進が凄いですね。

 

Manchester United

ManUnitedAttackStrength
ManUnitedDefenseStrength

昨シーズンは結果を残せませんでした。とは言え、2005シーズンとほぼ同等の実力となっています。
チェルシーやシティなどがこれを上回る実力をつけているため、リーグ内の順位という結果には結びついていないようです。
今期は攻撃陣を大型補強したにも関わらず、守備陣の方が結果をだしているように見えますね。

 

Tottenham

TottenhamAttackStrength
TottenhamDefenseStrength

守備力は2011シーズンを境に絶賛下落中です。
2013シーズンが始まる前の夏に大型補強を行なったにも関わらず、2013シーズンは結果が出ていませんね。

 

おわりに

というわけでプレミアリーグ編でした。
次回は別のリーグのチームごとの能力を推定します。
Jリーグも分析したい。乞うご期待!



参考サイト
http://www.sumsar.net/blog/2013/07/modeling-match-results-in-la-liga-part-one/
http://heartruptcy.blog.fc2.com/blog-entry-68.html