テニスの試合の流れを可視化したく、確率シミュレーションを用いて勝率の推移をプロットしてみました【2018ウィンブルドン錦織】
公開日:
最終更新日:2018/07/27
2018/07/27
テニスの試合の流れを可視化したく、勝率の推移をプロットしてみました
試合のゲームスコア、統計スタッツ以外で試合の内容を伝えられるデータ可視化方法はないかなあ、と前から考えてました。
というのも、テニスは数時間戦うスポーツで、どうしても試合の中でアップダウンがあります。
その試合の流れというか、選手の優勢・劣勢の推移を表現できれば、より試合の全体像が伝えられるんじゃないか。
そんな思いもあって、試合の流れを可視化することにトライしてみました。
その時点での試合の勝率を計算し、ポイント毎の変化を見える化して試合の流れを表現します。
例えば、2018ウィンブルドン3回戦の錦織・キリオス戦の勝率推移をプロットしてみると↓のようになります。
横軸が何ポイント目かを表し、縦軸が勝率%を表してます。
直近30ポイントのサーブポイント率を算出し、そのポイント率で残りの試合を進行させたときの勝率を確率シミュレーションにて計算し、
その推移をプロットしてます。
この試合、錦織がセットカウント3-0で勝ち、終始錦織優勢で進んだ試合だったかと思います。
勝率プロットもそれを表しており、第1セットで勝率を上げていき、第2セット以降は、5-6の場面で勝率を72%に落としますが、
その後は、ずっと80%以上の勝率で試合を進めて勝ちました。
実際に試合をみましたが、試合をみたイメージとだいたい合っていて、全体の流れの傾向は捉えられているんじゃないかなあ、と思ってます。
グルビス戦、負けてもおかしくないぎりぎりの戦いだった
次は、ウィンブルドン4回戦、グルビス戦も勝率推移をプロットしてみました。
4-6、7-6(5)、7-6(10)、6-1とセットカウント3-1で勝った試合ですが、第2セット、第3セットと非常に苦しかったことがわかります。
特に第2セットは、勝率としてはグルビスがずっと80%以上。
サービスゲームはグルビスがあっさりキープするのに対して、錦織はぎりぎりのキープという展開でしたので、サーブポイント率はグルビスが上回り、計算結果としての勝率もグルビスが優勢となるようなプロットとなってます。
錦織の勝率が50%を越えたのは最終セットになってから。ポイント率の計算を30ポイントの範囲で広くとっているため、実際の流れはもう少しはやく来ていた可能性はありますが、第2・第3セットは劣勢ながらもとれたセットで、ぎりぎりの試合というかよく勝てた試合だったなあ、と思っています。
勝率はサーブポイント率をもとに確率シミュレーションを行い算出
勝率の計算方法について、簡単ですが説明します。
計算のイメージ図は↓のようになっています。
まずはサーブポイント率を計算し、それをもとに確率シミュレーションを行います。
確率シミュレーションではどちらの選手が勝つかを判定し、それを1000回行い、1000回中何回勝つかをみて勝率を計算します。
勝率を計算したら、次のポイントに移行し、サーブポイント率の計算・確率シミュレーションと前のポイントと同じようにして勝率を計算します。
こうして全ポイントの勝率を計算していきます。
各選手のサーブポイント率を計算する
どうやってサーブポイント率を計算しているか説明しましょう。
↓の表は錦織とグルビスのどちらがポイントを取得したかを示しています。
錦織が○、グルビスが×になっていれば錦織がポイントをとったことになります。
例えば、34ポイント目のポイント率を計算する場合、その前10ポイントが計算対象となります。
(実際は、直近30ポイントで計算してますが、表が長くなるので説明では10ポイントとします)
サーブのポイント率を計算するので、錦織であれば錦織のサーブ10ポイント(黄色)、グルビスであればグルビスのサーブ10ポイント(オレンジ色)となります。
それぞれのサーブポイント率を計算すると、
錦織は○が4つあるので、4/10で40%のサーブポイント率
グルビスは○が9つあるので、9/10で90%のサーブポイント率
となります。
(実際は、1stサーブと2ndサーブそれぞれのポイント率を算出してます。また1stサーブのIn率も計算してます。)
確率シミュレーションにて残りのポイントを進行させ、勝つか負けるかを判定させる
計算したサーブポイント率で残りのポイントを進行させた場合、試合に勝つか負けるかを判定させます。
34ポイント目の次の35ポイント目は、錦織のサーブなので、40%の確率で錦織が○になり、60%の確率でグルビスが×となるように、
ランダムシミレーションを実施します。プログラムコードはPythonで書いてます。
36ポイント目以降~試合が終わるまでこのやり方で計算して試合を進行させ、最終的に錦織とグルビスのどちらが勝つかを判定します。
確率シミュレーションを1000回繰り返して、勝った回数から勝率を計算する
↑のランダム計算による勝ち負け判定を1000回繰り返し、錦織が200回勝ち、グルビスが800回勝つという結果になれば、このときの錦織の勝率は20%となります。
これで34ポイント目の勝率計算は終了し、次の35ポイント目の勝率の計算に進みます。
前のポイントと同じように、サーブポイント率と確率シミュレーションを実施し、勝率を計算します。
これを最後までやることで前述した全ポイントの勝率プロットが得られます。
以上、こんな感じで勝率の計算をしています。
シミュレーションはPythonコードを書いて実施
計算は全てPythonで書いたコードで実施しています。
汚いコードなので公開は控えます。
公式サイトでも試合の流れを可視化している
参考情報ですが、
ウィンブルドン公式サイトでもMomentumという名前で、試合の流れを可視化しています。
棒グラフの大きさがその時点での試合全体の趨勢、色がどちらに流れがシフトしたかを表していそうです。
「連続ポイント」「サービスブレイク」を重要なパラメータとして計算しているっぽいのですが、
それ以上はわからずブラックボックスです。
公式サイトとの細かいところの比較はまだできていません。
あと肝心のジョコビッチの試合分析ができていませんね。
ごめんなさい。
【追記】ジョコビッチ戦とトミック戦
ウィンブルドンQF ジョコビッチ戦の勝率プロットは↓です。
第1セット、ブレイクされたあとにブレイクし返し、勝率50%まで持ち直しはしましたが。。。
第2セット ブレイクして3-1にしたぐらいから錦織の勝率は上がりはじめてセット奪取。
第3セット、2-3でブレイクされて2-4となってそのままセットをとられてしまいました。2-2まではスコアイーブンだけど、試合の流れとしてはジョコビッチ側でジョコ優勢の中でサービスブレイクされた感じでした。
最終セットは、良いところなくジョコビッチペースで試合終了でした。
ウィンブルドン1回戦 トミック戦の勝率プロットは↓です。
第3セットをとられたら危ない試合だったかもしれません。