連載
» 2011年02月17日 00時00分 公開

実践! Rで学ぶ統計解析の基礎(8):大相撲のアノーマリー (2) (1/2)

大相撲の勝敗結果を分析すると、ちょっとした不自然さが見つかります。前回に引き続き、ネット上のデータを利用して解析を試みます。八百長疑惑に揺れる角界ですが、その真相は?

[柏野雄太,バクフー株式会社]

今回の前口上

 連載ものの途中なのにまた少し時間が空いてしまいました。申し訳ございません。ただそのお陰というわけでもありませんが、偶然にも大相撲の八百長事件が世間を賑わすという、この連載にとってはタイムリーな状況になりました。そこで、今回は過去12年のデータから八百長のような行為がデータで確かめられるかどうかということに内容をフォーカスしたいと思います。当初の予定だった、Yahoo!スポーツの大相撲データを自動採取して、Google Refineで自動整形させるというネタについては、次回以降に回したいと思います。

 また、この「大相撲のアノーマリー」を計算するために利用しているデータは、Yahoo!スポーツから持ってきたために、1999年1月場所以降の幕内のものだけとなっています。その後、慶応大学教授の服部哲弥さんのご指摘により、goo大相撲に1998年以降の十両も含めたデータがあることに気付きました。こちらについては次回以降に機会があれば計算して結果をお知らせしたいと思います。ご指摘くださった服部さんに感謝いたします。

大相撲八百長問題

 2010年の5月20日に発売された週刊新潮において、当時の大関琴光喜が暴力団を胴元にしたプロ野球賭博に関与していたと報道されたのが端緒となって、何人もの力士や親方、関係者が野球賭博事件で解雇や除名、謹慎などの処分を受けました。その後、警察の捜査が入り、賭博や恐喝に関する捜査が行われました(Wikipedia:大相撲八百長問題

 その野球賭博事件の捜査の過程で、賭博に関与した力士の携帯電話のメール記録が調べられたのです。その結果、十両の力士が所有していた携帯電話のメールの内容に、勝ち負けの売買や具体的な戦い方のシナリオが記さていることを警察が見つけました。相当長期間に渡って大相撲では八百長疑惑が取り上げられていましたが、今回初めてその疑惑を裏付ける物証が得られたというわけです。

 これはまさに大相撲の存在理由を揺るがす事態であり、大相撲という業界全体が存亡の危機に立たされているのが現状です。

オープンデータによる大相撲八百長問題の解析

 さて、大相撲の八百長があることを統計分析で示唆したMark DugganとSteven D. Levittの論文(Duggan&Levitt2002)について、前回取り上げました。この論文は、1989年から2000年までの十両以上の取り組みデータに基づいていますが、前回の連載では1999年1月から2010年9月までの幕内力士のデータを利用しました。具体的には、Yahoo!スポーツ(http://sports.yahoo.co.jp/sumo/etc/torikumi/199901/)にある大相撲の幕内力士の取り組み結果をスクレイピングし、Google Refineで整形してから、1999年1月から2010年9月までの場所ごとの勝ち星についてプロットし、ランダムネスを仮定した場合の二項分布と比較しました。その結果、負け越しか勝ち越しを決める7勝/8勝のところで二項分布からずれているということを見出しました。

ランダムネスを仮定した場合の二項分布と、実際の取り組み結果を比較するとずれがある ランダムネスを仮定した場合の二項分布と、実際の取り組み結果を比較するとずれがある

 相撲の勝ち負けがランダムだと仮定すると、7勝も8勝も同じだけカウントされていなければならないのに、上の図では7勝が小さくなっているということです。この図を出力すRのコードは再掲すると以下の通りになります。プロットにggplot2を利用しました。

df <- read.csv("http://spreadsheets.google.com/pub?key=0AlBuJgqcP5f3dElpb0lWcDRjZldkMzE1LW5aY1VtMHc&hl=en&single=true&gid=0&output=csv", header=FALSE)
names(df) <- c("rikishi", "vs", "win", "year", "month")
nrow(df)
df <- subset(df, df$win!=-100 & df$win!=-1)
library(plyr)
df <- ddply(df, .(rikishi, year, month), summarize, numwin=sum(win))
library(ggplot2)
p2 <- ggplot(df, aes(numwin)) + geom_histogram(aes(y = ..count..))
ggsave(plot = p2, filename = "sumoobservation.png")
dsumo <- function(x, total) total*dbinom(x, size = 15, prob = 1/2)
dft<- data.frame(x = c(0:15), win_theory = dsumo(c(0:15), nrow(df)))
df2 <- as.data.frame(table(df$numwin))
names(df2) <- c("x", "win_observ")
str(df2)
df2 <- transform(df2, x = as.integer(x)-1, win_theory = dft$win_theory)
ggplot(data = melt(df2, id = 'x'), aes(x = x, y = value, colour = variable)) + geom_line()
ggplot(data = df2, aes(x)) + geom_point(aes(y = win_observ, colour = "win_observ")) + geom_line(aes(y = win_observ, colour = "win_observ")) + geom_line(aes(y = win_theory, colour = "win_theory"))

 このコードで工夫をしているところは、plyrライブラリのddply関数を利用して、場所ごとの力士の勝ち星を一気に計算しているところです。7行目の

"df <- ddply(df, .(rikishi, year, month), summarize, numwin=sum(win))"

とあるところがそれです。場所ごとの勝ち星をnumwin変数に入れた後、それをggplot2ライブラリを用いて二項分布と共にプロットしました。

 今回はその続きです。それでは、7勝/8勝の辺りランダムな事象からずれているというのは分かりましたが、これが意図的に仕組まれたものかどうか、というのが気になります。つまり八百長の可能性です。以下はDuggan&Levitt2002の解析手法に準拠しながら、最新の幕内力士のデータでそれを確かめていきます。

Index

大相撲のアノーマリー (2)

Page1
今回の前口上
大相撲八百長問題
オープンデータによる大相撲八百長問題の解析

Page2
バブル上にいる力士
バブル上の力士は勝ちやすいか?
結局どうなの?
まとめと次回について


       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。