読者です 読者をやめる 読者になる 読者になる

300億円欲しい

メジャーリーグのデータ解析します

イチローは本当に安打製造機なのか!?

この記事はR Advent Calendar 2013 : ATND , 1月3日の配当記事です.
よろしくお願いします.

序論

イチロー. 凄いですよね. MLBでの成績をのせます.

   YEAR GAME ATBAT HIT       AVG
1  2001  157   692 242 0.3497110
2  2002  157   647 208 0.3214838
3  2003  159   679 212 0.3122239
4  2004  161   704 262 0.3721591
5  2005  162   679 206 0.3033873
6  2006  161   695 224 0.3223022
7  2007  161   678 238 0.3510324
8  2008  162   686 213 0.3104956
9  2009  146   639 225 0.3521127
10 2010  162   680 214 0.3147059
11 2011  161   677 184 0.2717873
12 2012  162   629 178 0.2829889

ほぼ怪我せずに200本以上のヒットを打ち続けてきたイチロー.
まさしく安打製造機です.
最近は少し衰えが見えますが, それでも180本近くヒットを打っています.

...イチローって本当に人間なのでしょうか.

もしかして,

本当に安打製造機なのでは?

調べました.

イチローが本当に安打製造機なのかどうか調べる

機械には各時刻で調子の善し悪しなんて存在しないはずです.
常にランダムにヒットを打っているはず.
逆に, もし調子の良し悪しがあれば, ある時刻のデータが過去のデータに影響されている, と考えられます.

イチローの打席結果が過去の結果に影響されているかどうかを調べたいです.
もしも影響されていなければ, 彼は本当に安打製造機かもしれません.

時系列データに系列相関があるかどうかを調べる手法を, 大学の講義で習いました.
(ランダムシャッフル)サロゲートデータ法, というものです.
覚えたことはすぐに使います.

サロゲートデータ法とは

データの系列相関の有無を調べる手法の1つとして, (ランダムシャッフル)サロゲートデータ法があります.
"時系列データについて計算される統計量"と,
"時系列データをランダムシャッフルして得られるデータについて計算される統計量"
を比べて議論する方法です.
時系列データ解析などをするときに用いるみたいです.



よく分からないので, 具体的な例を見てみます.

コイン投げでサロゲートデータ法

13回のコイン投げをします.
その結果, 表を1, 裏を0として,

0,1,0,0,1,1,0,0,0,0,1,1,1

という結果が現れたとします.
この結果が, ランダムな結果かどうかを調べたいです.
つまり, コイントスの結果を時系列データとみて, 系列に依存しているかどうかを見ます.
過去の表裏の結果が, 次の結果に影響しているかどうかを調べます.

そのために, 今回は"表が出る間隔"に注目します.
すなわち"裏"の連なりの長さです.
コイントスの結果は 0,1,0,0,1,1,0,0,0,0,1,1,1 なので,
裏の連なりの長さは, 前から1, 2, 4 となっています.

ここで,
統計量$S =\text{裏の連なりの長さの平方和}$
とします.
今回の場合は, $S = 1^2 + 2^2 + 4^2 = 21$です.

時系列に依存していないコインの場合, $S$の分布がどうなるか, を考えます.
そのために, データから時間の情報を潰します.
コイントスの時系列データ"0100110000111"をランダムシャッフルして, $S$を計算してみます.
ランダムシャッフルを10000回行って, $S$の値の分布を出してみました.
f:id:gg_hatano:20140103124852p:plain
時系列データをシャッフルすることによって, 時系列の情報が潰れます.
時系列を潰した仮想的データと, 元のデータの統計量で大きな差があれば,
元のデータは系列相関があるデータなのだろう, と考えられるわけです.

仮に, コイントスの結果が

0,0,0,0,0,0,0,1,1,1,1,1,1

だったとします.
過去の結果に影響されてそうですよね.
この場合, 統計量$S = 7^2 = 49 $となります.
系列相関がないと仮定して得られる$S$の分布と比較してみると,
f:id:gg_hatano:20140103125712p:plain
極端なところにいます.
おそらく,このデータには系列相関があるのだろう, と考えられます.

このようにして, 時系列データに系列相関があるのかどうかを調べていきます

イチロー安打製造機かどうかを調べる

もしもイチロー安打製造機なら, 常に時刻に関係なくヒットを打つはずです.
逆に人間なら, 調子の良し悪しがあるでしょうから,
ヒットの出る出ないについて時系列の相関があるでしょう.

ヒットの出る出ないをコインの表裏だと思って,
ヒット出る出ない時系列データに系列相関があるかどうかを調べてみました.

まずはデータから.
メジャーリーグの全プレイの結果がcsvになっています.
過去記事でデータについて書きました.
メジャーリーグのデータ解析をしたい( 犠牲フライくらい打てよ ) - 300億円欲しい
今回は, 2011年のイチローの打席結果データの分析を行います.

まず, ヒットが出る出ないの時系列データを作ります.

# data2011 <- read.csv("all2011.csv")
fields <- read.csv("fields.csv")
names(data2011) <- fields[,"Header"]
ichiro.AB <- subset(data2011, BAT_ID == "suzui001"& AB_FL == TRUE)
ichiro.AB$HIT <- ifelse(ichiro.AB$H_FL > 0, 1, 0)
ichiro.AB$DATE <- substr(ichiro.AB$GAME_ID, 4, 12)
ichiro.AB <- arrange(ichiro.AB, DATE)

データを少し見てみます. 2011年は677打席で184安打でした.

> head(ichiro.AB$HIT)
[1] 1 0 1 0 0 1
> sum(ichiro.AB$HIT)
[1] 184
> length(ichiro.AB$HIT)
[1] 677

あってますね.

ヒットの出る出ないをコインの裏表だと思って, 先ほどの統計量$S$の計算をします.
さらに, 時系列データをランダムシャッフルして, $S$の分布を調べます.
f:id:gg_hatano:20140103131934p:plain

イチローのヒット時系列データから得られる統計量は,
系列相関がないと仮定した場合のデータから得られる統計量と大差ありませんね.



(おかしい...)

(イチローはやっぱり人間でしたー...というオチをつけるつもりだった...)

(やばい...)

ロビンソン・カノーは安打製造機かどうかを調べる

他の選手ではどうでしょうか.
今年ヤンキースからマリナーズに移籍したスーパースター選手, ロビンソン・カノーでも調べます.
ロビンソン・カノ - Wikipedia
今年結んだ契約は, 10年で約245億円でした. 年俸24.5億円です. 欲しい.

2011年のカノーは623打席で188安打でした.
統計量$S$と, ランダムシャッフルした場合の統計量$S$の分布を見てみます.
f:id:gg_hatano:20140103132840p:plain
これはだいぶ外れているように見えますね.
カノーについては, ヒットの出る出ないに系列相関があるのだろう, と言えます.
カノーは人間でしょうね.

まとめ

サロゲートデータ法を使って調べましたが, イチローは本当に安打製造機かもしれません.
以上です.

参考文献

Analyzing Baseball Data with R (Chapman & Hall/CRC The R Series)

Analyzing Baseball Data with R (Chapman & Hall/CRC The R Series)