PK戦の順序

MikuHatsune2017-03-06

こんな記事があった。簡単にいうと、PK戦は先攻有利と言われているから、先攻後攻をABABAB... とやるのではなく、途中で入れ子にしてABBAABBA... というような順序でやろう、という話である。
実際にPK戦が先攻有利かというと、先攻は6割くらい勝つらしい(PDF)。
ということで、英語論文をあたってみると、269のPK戦の、2820回のPK なので間違えているようである。ならば、このデータを取ってこようと思って本文を見ると、FIFA から取れると書いてありながら、ちょっと探したくらいではなかった。というのも、単純なPK戦のスコアだけでなく、各PKごとの順番と成功/失敗のデータが必要なのである。
Psychological Pressure in Competitive Environments: Evidence from a Randomized Natural Experiment
というわけで、2時間くらい手作業でJFA から高校サッカーの公式記録をググって、218試合でのPK戦2311回分を入手した。厳密には、冬の選手権(winter)、夏の高校総体(summer)、国体(成年、少年含むkokutai)なので、少しばらついているが、蹴った順序まで取れるデータがこれくらいしかなかったので水増ししている。
ここで、1 は成功、0 は失敗で、先攻・後攻・先攻・後攻、…の順番で並んでいる配列である。
 
結果から言うと、このデータで先攻が勝つ確率は、49.5% である。こちらではW杯でのPK(試合中のものでありPK戦ではなさそう) において、成功率は81% と言っている。高校選手権データでは、何も考えずに各回での成功率は77% となっている。2311回も数えているので、有意に低いことは低い。(95% CI で0.752 - 0.787)
 
PK戦は技術よりも精神面での戦い、と言われることが多いようで、上のリンクでは、最初のひとりが決めることで先攻のチームが勝つ確率が60% に上がる、と言っている(そもそも先攻が勝つ確率が60% という話もあるけど、どうなった?)。というわけで高校選手権データで見てみると、最初のひとりが決めると、先攻が勝つ確率は55% であり、最初のひとりが失敗すると、先攻が勝つ確率は19% になっている。
そもそも、最初のひとりが決める確率は、83% であり、各回での成功率77% より高い。逆に、回を経るごとに、成功率は下がる。9回目や10回目の選手ほど、勝敗に大きく関わるPK になるので、精神的にくる。

 
前の選手の結果にどれくらい影響されるかどうかを見てみると、直前の相手選手が失敗した場合の成功率は77%、成功した場合の成功率は77% で特に差がなく、直前の味方選手が失敗した場合は75%、成功した場合は76% で、これも特に差がなかった。
 
勝敗がかかっているときのPK がどれくらい影響するかは、勝敗に関係ないお気楽な回での成功率が79%、外すと負けるフラグの回の成功率が69%、決めると勝つフラグの回の成功率が73% と、少しだけ負けフラグが立つと厳しいようである。あまりにも差がなかったので、サドンデス、いわゆる、11人目以上が登場するパターンは除外(意外と12人目までに決まらず、16回とか行くことが多い)した154試合1389回に限定すると、お気楽76%、負けフラグ時の成功率56%、勝ちフラグ時の成功率90% と、際立つ結果になった。後半の回ほど成功率が下がり、かつ、負けフラグが立つと本当に厳しい戦いである。
 
本当は、ABABAB パターンと、ABBA パターンでの先攻が勝つ確率を考えたかったけど、普通にデータを集めた時点で先攻が勝つ確率がほぼ50% だったので、適当な集計の解析になってしまった。戦況が各PK で変わるので、ベイズ的な条件付き確率を扱うにはいいデータセットだと思う。
 

library(gtools)
dat <- readLines("pk.txt")
s <- do.call(rbind, mapply(strsplit, dat, " ", USE.NAMES=FALSE))
s0 <- s1 <- lapply(mapply(strsplit, s[,3], "", USE.NAMES=FALSE), as.numeric)
for(i in seq(s0)){
  if(length(s0[[i]]) %% 2 == 1){
    s0[[i]] <- c(s0[[i]], NA)
  }
}
s2 <- lapply(s0, matrix, nr=2)

# すべてのPK での成功率
mean(unlist(s1), na.rm=TRUE)

# 先攻,後攻それぞれの成功率
rowMeans(do.call(cbind, s2), na.rm=TRUE)

# 直前の相手の結果による成功率
b1 <- mapply(function(z) tapply(tail(z, -1), head(z, -1), c), s1)
b2 <- list("0"=unlist(mapply(function(z) z$"0", b1)), "1"=unlist(mapply(function(z) z$"1", b1)))
sapply(b2, mean)

# 直前の仲間の結果による成功率
b1 <- mapply(function(z) tapply(tail(z, -2), head(z, -2), c), s1)
b2 <- list("0"=unlist(mapply(function(z) z$"0", b1)), "1"=unlist(mapply(function(z) z$"1", b1)))
sapply(b2, mean)

# 先攻が勝つ確率
wl <- apply(sapply(s2, rowSums, na.rm=TRUE), 2, diff)<0
mean(wl)

# 最初のひとりの結果による勝率
tapply(wl, sapply(s1, head, 1), mean)

# 勝敗が決まりうる番での確率
# すべて書き出す
tide <- function(vec){
  n <- 6:length(vec)
  flag <- rep("", length(vec))
  for(i in n){
    p1 <- vec[ which(odd(seq(i-1))) ]
    p2 <- vec[ which(even(seq(i-1))) ]
    dif <- sum(p1) - sum(p2)
    if(i == 6){
      if(dif == 3){
        flag[i] <- "L"
      } else if(dif == -2){
        flag[i] <- "W"
      }
    } else if(i == 7) {
      if(dif == 2){
        flag[i] <- "W"
      } else if (dif == -2) {
        flag[i] <- "L"
      } 
    } else if (i == 8) {
      if (dif == 2){
        flag[i] <- "L"
      } else if (dif == -1) {
        flag[i] <- "W"
      }
    } else if (i == 9) {
       if (dif == 1){
         flag[i] <- "W"
       } else if (dif == -1){
         flag[i] <- "L"
       }
    } else if (i == 10){
      if (dif == 1) {
        flag[i] <- "L"
      } else if (dif == 0){
        flag[i] <- "W"
      }
    } else {
      if(i%%2 == 0){
        flag[i] <- ifelse(dif==0, "W", "L")
      }
    }
  }
  return(flag)
}

wlflag <- mapply(tide, s1)
wl0 <- tapply(unlist(s1), unlist(wlflag), c)
sapply(wl0, mean)

# 10人(5ターン目)までのデータに限定する
j <- sapply(wlflag, length)<11
wl1 <- tapply(unlist(s1[j]), unlist(wlflag[j]), c)
sapply(wl1, mean)

n_th <- rowMeans(mapply(function(z){ a <- z[1:10];c(a, rep(NA, 10-length(a)))}, s1), na.rm=TRUE)
plot(n_th, pch=16, xlab="PK の回", ylab="成功率", ylim=c(0.5, 1))
winter 95 1101111111
winter 95 10111110
winter 95 01111101
winter 95 11110101
winter 95 101111111
winter 95 1001110111
winter 94 111100111101
winter 94 1110010111
winter 94 11111010
winter 94 1110101
winter 94 101010
winter 94 1101010
winter 94 1110111100
winter 94 1111111101
winter 93 1111111111111101
winter 93 111101001010
winter 93 111001101
winter 93 101101101
winter 93 111011111
winter 93 111101001011111110
winter 93 1111110111
winter 93 111011111
winter 93 111111101
winter 93 111111111110
winter 93 0111010
winter 93 1101111111
winter 92 100111010
winter 92 10110010
winter 92 1111110111
winter 92 11101110
winter 92 111101110
winter 92 11111111111101
winter 92 111111110010
winter 92 1111011111
winter 92 1111010010111101
winter 92 010101
winter 92 111110111
winter 91 110011010
winter 91 111111101
winter 91 011010111
winter 91 110011111110
winter 91 1101111001
winter 91 1111111101
winter 91 111110001
winter 91 1111101100
winter 91 111001111101
winter 91 111111010
winter 91 01011111
winter 91 1111011110111101
winter 91 101010
winter 91 0111111111
winter 91 111011010001
winter 91 101111111
winter 90 1100111101
winter 90 1101110011
winter 90 1111110111
winter 90 1111110111
winter 90 1111111110
winter 90 101111001
winter 90 1101111011111101
winter 90 01111100101111111101
winter 90 111110111
winter 90 01011111
winter 90 11111010
winter 90 1011101
winter 89 01101000011110
winter 89 11110101
winter 89 0101110
winter 89 111111010
winter 89 1110011101
winter 89 11011011110001
winter 89 001111010
winter 89 111111100111001110
winter 88 0100001111
winter 88 1011110110
winter 88 1101110011
winter 88 001011111
winter 88 1111111110
winter 88 11111100001101
winter 88 1000111100
winter 87 010111100
winter 87 11111111001111111101
winter 87 111011011110
winter 87 111111100110
winter 87 1111110111
winter 87 11111010
winter 87 1110101
winter 87 101110011
winter 86 111011001
winter 86 1000101
winter 86 111111111101
winter 86 1111110111
winter 86 101111111
winter 86 111011001
winter 86 111100101
winter 86 0111110011
winter 85 111111011001
winter 85 11111010
winter 85 111111111111111110
winter 85 1111111110
winter 85 111100101
winter 85 1101111111
winter 85 101010
winter 85 111110111
winter 85 1111110001
winter 85 11110011111110
winter 85 111001101
winter 85 11010111
winter 85 1101101101
winter 85 111111100110
winter 85 1110100100
summer 2016 111111111101
summer 2016 1101111111
summer 2016 111111100110
summer 2016 111111111101
summer 2016 1111111101
summer 2016 0111111111
summer 2016 1011010111
summer 2016 111111010
summer 2016 1001111101
summer 2016 111011001
summer 2016 0101101111
summer 2015 1111011001
summer 2015 111001111101
summer 2015 1111111101
summer 2015 0011110010
summer 2015 111111101
summer 2015 011111110
summer 2015 1111110111
summer 2015 11011111101110
summer 2015 10111110
summer 2015 111111111100111110
summer 2015 11110101
summer 2015 111111111110
summer 2014 010101
summer 2014 111111111110
summer 2014 1111111101
summer 2014 10011111111101
summer 2014 111011011101
summer 2014 01110111
summer 2014 1000101
summer 2014 11110111101110
summer 2014 11011101
summer 2013 111011111
summer 2013 1101111111
summer 2013 11111010
summer 2013 111111100110
summer 2013 101100110110
summer 2013 0111010
summer 2013 111111101
summer 2013 111011111
summer 2013 11011111101101
summer 2013 111111101
summer 2013 1111111111111110
summer 2013 11111111111111111101
summer 2012 100111110010
summer 2012 1101111101
summer 2012 001011111
summer 2012 110110111110
summer 2012 01111101
summer 2012 11011001100011111110
summer 2012 1011111111
summer 2012 111101110
summer 2012 111111101
summer 2012 11111111111101
summer 2012 1111111101
summer 2012 0011111101
summer 2012 00110111101110
summer 2012 111101110
summer 2012 0111111111
summer 2012 1010001
summer 2012 1111011111
summer 2011 1111110111
summer 2011 1110011101
summer 2011 11111111110010
summer 2011 111111111100111110
summer 2011 0100111111
summer 2011 111001101
summer 2011 11111111111101
summer 2011 01011111
summer 2011 1111111111001111111110
summer 2011 001100010
summer 2011 00111111110010
summer 2010 011110111101
summer 2010 1111110111
summer 2010 111111101
summer 2009 1101101101
summer 2009 111011001
summer 2009 1111111110
summer 2009 111110111
summer 2009 111111111101
summer 2009 0111010
summer 2009 111011111
summer 2009 0111111110111111111111111101
summer 2009 1111101100
summer 2009 11111111111110
kokutai 2016 0101111011
kokutai 2016 1111111111001110
kokutai 2016 0100111111
kokutai 2014 111011111
kokutai 2013 10111110
kokutai 2013 111101110
kokutai 2013 111111101
kokutai 2013 1111111110
kokutai 2013 1011011100111110
kokutai 2013 111111111101
kokutai 2012 111110111
kokutai 2012 111101110
kokutai 2012 110110111110
kokutai 2012 111110011111111101
kokutai 2010 11011011001101
kokutai 2010 101111111
kokutai 2010 111111111110
kokutai 2010 111111010
kokutai 2009 1111110010
kokutai 2009 111111101
kokutai 2009 101101010
kokutai 2009 101101111110