決定木を用いたサモナーズリフトのオブジェクトについての分析
はじめに
サモナーズリフトにおいて、勝率に関係するオブジェクトについて分析しました。
オブジェクトについて理解することで、ジャングルをやっているときに、どのレーンを勝たせるか?次はどのオブジェクトを狙おうか?サポートをやっているときに、どのあたりに視界を取ればよいか?といった指標になると思います。
ただし、チャンピオンの役割については、考慮していないので、注意が必要です。
分析手法としては、CART法を使って、サンプルを分けていき、決定木を作成しました。
そして、それについて考察しました。
まずは決定木の説明からしていこうと思います。
決定木
決定木とは、分類のルールを木で表現したものです。
視覚的にルールがわかりやすいのが特徴とされています。
Wikipediaに載っている図をおかりして、説明すると、
出典: Wikipedia
このような図を決定木といいます。
ここでは、天気、湿度、強風といった説明変数を用いていますが、これをサモナーズリフトにおけるオブジェクトにして、目的変数(従属変数)を「ゴルフをするか」から、勝ったか、負けたかの場合を考えると勝ちにつながるオブジェクトが見えるのではないかという考えです。
使用する情報(サンプル)
season9, season8におけるチャレンジャー、グランドマスター、マスター帯で行われた1週間分の試合を用います。
season8は、season9 の比較用に収集しました。
詳細は、以下の表のとおり。
シーズン | 試合数 | 15分以内の試合数 | 差分 | 期間 | パッチ |
season 9 | 793 | 23 | 770 | 2019/7/1 00:00:00 – 2019/7/7 23:59:00 | 9.13 |
season 8 | 1055 | 35 | 1020 | 2018/7/1 00:00:00 – 2018/7/7 23:59:00 | 8.13 |
2018年のチャレンジャー、グランドマスター、マスターのサモナーを特定できなかったので、season8においても、2019/7/1 時点でのチャレンジャー、グランドマスター、マスター帯のサモナーの試合を収集しました。
もちろん存在しないアカウントもあったので、2018年にアカウントが存在したサモナーのみ対象にしています。
収集した試合のなかで、リメイクされた試合を15分以内の試合という条件で除き、それを全体から引いた 差分というのが今回使用するデータになります。
パッチは少し古いですが、9.13 と 8.13の試合を使います。
9.14になると、オブジェクト以外にも勝率に変動させる事案が存在するので。
存在しないアカウントがいくつかあるにも関わらず、使用した試合数は、season8のほうが多くなっています。
これは、season9のほうがそれぞれのサモナーから抽出した試合が被っていることが原因です。
たとえば、グランドマスターのある1人の試合を抽出したときに、その試合にチャレンジャーの人が混ざっていたとすると、同じ試合と見なされます。
このような被った試合が、season8は少なかったというのが数の大小に影響を与えています。
説明変数
使用する説明変数は以下のとおり、
通番 | オブジェクト名 | 型 | 備考 |
1 | firstRiftHerald | flag(0: false, 1:true) | |
2 | firstBlood | flag(0: false, 1:true) | |
3 | firstTower | flag(0: false, 1:true) | |
4 | TopInhibitor1 | 時刻(ミリ秒) | |
5 | TopInhibitor2 | 時刻(ミリ秒) | |
6 | TopInhibitor3 | 時刻(ミリ秒) | |
7 | MidInhibitor1 | 時刻(ミリ秒) | |
8 | MidInhibitor2 | 時刻(ミリ秒) | |
9 | MidInhibitor3 | 時刻(ミリ秒) | |
10 | BotInhibitor1 | 時刻(ミリ秒) | |
11 | BotInhibitor2 | 時刻(ミリ秒) | |
12 | BotInhibitor3 | 時刻(ミリ秒) | |
13 | Baron1 | 時刻(ミリ秒) | |
14 | Baron2 | 時刻(ミリ秒) | |
15 | Baron3 | 時刻(ミリ秒) | |
16 | TopOuterTower | 時刻(ミリ秒) | |
17 | MidOuterTower | 時刻(ミリ秒) | |
18 | TopInnerTower | 時刻(ミリ秒) | |
19 | MidInnerTower | 時刻(ミリ秒) | |
20 | BotInnerTower | 時刻(ミリ秒) | |
21 | TopInhibitorTower | 時刻(ミリ秒) | |
22 | MidInhibitorTower | 時刻(ミリ秒) | |
23 | BotInhibitorTower | 時刻(ミリ秒) | |
24 | NexusTower1 | 時刻(ミリ秒) | 使用しない |
25 | NexusTower2 | 時刻(ミリ秒) | 使用しない |
26 | OceanDragon1 | 時刻(ミリ秒) | |
27 | OceanDragon2 | 時刻(ミリ秒) | |
28 | OceanDragon3 | 時刻(ミリ秒) | |
29 | CloudDragon1 | 時刻(ミリ秒) | |
30 | CloudDragon2 | 時刻(ミリ秒) | |
31 | CloudDragon3 | 時刻(ミリ秒) | |
32 | InfernalDragon1 | 時刻(ミリ秒) | |
33 | InfernalDragon2 | 時刻(ミリ秒) | |
34 | InfernalDragon3 | 時刻(ミリ秒) | |
35 | MountainDragon1 | 時刻(ミリ秒) | |
36 | MountainDragon2 | 時刻(ミリ秒) | |
37 | MountainDragon3 | 時刻(ミリ秒) | |
38 | ElderDragon1 | 時刻(ミリ秒) | |
39 | ElderDragon2 | 時刻(ミリ秒) | |
40 | ElderDragon3 | 時刻(ミリ秒) | |
41 | BlueBaseKills | 合計 | 使用しない |
42 | BlueTopKills | 合計 | |
43 | BlueTopJgKills | 合計 | |
44 | BlueMidKills | 合計 | |
45 | BlueBotJgKills | 合計 | |
46 | BlueBotKills | 合計 | |
47 | ContestedTopKills | 合計 | |
48 | TopRiverKills | 合計 | |
49 | ContestedMidKills | 合計 | |
50 | BotRiverKills | 合計 | |
51 | ContestedBotKills | 合計 | |
52 | RedBaseKills | 合計 | 使用しない |
53 | RedTopKills | 合計 | |
54 | RedTopJgKills | 合計 | |
55 | RedMidKills | 合計 | |
56 | RedBotJgKills | 合計 | |
57 | RedBotKills | 合計 |
私が考えるサモナーズリフトのオブジェクトを一覧表示しました。
タワー、ドラゴンといったようなオブジェクトだけではなく、敵プレイヤーのキルもオブジェクトとして表現しました。
まず、使用しない変数の説明として、両サイドのBaseでのキルと、NexusTower の破壊は説明変数から除外しました。
というのも、これら2つは勝利と深く結びついており、NexusTowerについては、Nexus ≒ NexusTowerと捉えることもできます。
NexusTowerを破壊したから、Nexusを破壊できた、ではなくて
Nexusを破壊できるから、NexusTowerを破壊できる、という解釈ができます。
実際に、説明変数に入れて、決定木を作成すると、2つの変数が大きく関わってきますが、上で述べたことを考えると考察が難しくなってしまいます。
他のオブジェクトでも、勝てる試合だから、Mid Inhibitor を破壊できたという捉え方ができますが、上述した2つよりかは可能性としては低いと考えられます。
実際に、Mid Inhibitorを破壊しても、負ける試合は多々あります。
なので、Nexusを破壊できるから、取れるオブジェクトとして考えられやすいBaseでのキルと、NexusTowerは除外しています。
次に、インヒビターやドラゴンをTopInhibitor1,TopInhibitor2,TopInhibitor3のように分けている理由として、時刻を表現したかったというのがあります。
1回目破壊した場合に、TopInhibitor1にその時刻が、2回目に破壊した場合には、TopInhibitor2にその時刻が入ります。
何分にドラゴンを取れば良いのか?といった指標が見れればよいなということで、分けています。
各ドラゴンは最大が3と決まっていますが、インヒビターは無限に再生します。
さすがに3回以上破壊するような試合は少ないだろうということで、3つまで表現できるようになっています。
バロン、エルダードラゴンも同じです。
最後に、敵プレイヤーのキルというオブジェクトについてです。
これは時刻で表現しようとすると、キルの数だけ説明変数が増えていき、表現するのが難しいため、キルの合計を説明変数として使っています。
また、場所ごとに分けることでどこのキルが有効か?といったところを表現できるようにしています。
定義としては、
上図で描画されている線分の範囲内で発生したキルをカウントしていきます。
被っている部分は、優先度 contested > river > lane > base > jg で分類しました。
ちなみに、contestedは、「争った」という意味だそうです。
ここでは、どのロールがどのロールに対して、キルを取ったかを考慮していないことに注意してください。
パラメータ
オブジェクトの取得において、取得できなかったオブジェクトの時刻は0としています。
学習データ:検証データ は、 7:3 としました。
木の深さは、4 にしています。
深さについては、厳密にこれがよいといった指標がなく、パラメータチューニングのしがいがあるようです。
深さを3 や 5, それ以上といった値をいろいろ試してみましたが、4 が一番いいのかなという印象です。
3 だとざっくりしすぎ、もう少しみてみたい、 5 だと 5層目は割とどっちでもいい結果が多かったからです。
具体的には、1試合だけのために分類されるといったものが多かったので。
可視化
いよいよ決定木を可視化していきます。
以下の4つの決定木とAUC と 正解率を載せています。
- season9 Blue Side
- season9 Red Side
- season8 Blue Side
- season8 Red Side
AUCとは、データに偏りがあったとしても適切に評価してくれる指標を指します。
正解率はそのまま正解している確率を指します。
ここでは、それぞれ、 1 に近づけば近くほど良いモデルだと考えてもらえればよいと思います。
AUCの詳細については、こちら が参考になりました。
season9 Blue Side
AUC:0.831, 正解率:0.827
season9 Red Side
AUC:0.922, 正解率:0.922
season8 Blue Side
AUC:0.857, 正解率:0.857
season8 Red Side
AUC:0.825, 正解率:0.824
いずれの場合でも、AUC, 正解率ともに 0.8 を超える結果となりました。
これを良しとするか悪しとするかは、正直よくわかっていません。
いろんな記事を見たのですが、0.9 でも低いとされていたり、0.8 でも良しとされていたからです。
個人的には、0.8 以上が出たのは、良いほうだと考えています。
なぜなら、サモナーズリフトにおいて、勝率オブジェクトの有無だけで説明しきれないと考えているからです。
たとえば、サポートがキャッチされた、ADCが強力なCCスキルに当たってしまったといった部分も勝率に関係していると考えています。
そのようなことを考慮せず、試合の結果だけを見て、80% 以上当たっている、一番大きくて92%当たっているのは、そこそこ良い結果ではないでしょうか。
正解率はさておき、
図の味方の説明です。
ざっくりいうと、右側に行くほど勝ちに進んでいて、左に行くほど負けに進んでいます。
具体例として、Season9 Blue Sideの一番最初では、Mid Inner Tower の破壊時間が 390508 ミリ秒(390508÷1000÷60=6.5 分)以下か?という質問に対して、正しい場合左に進み、間違っている場合は右に進みます。
gini は、ジニ係数を表していて、不純度を表す指標です。
分類したいクラス数が2種類(勝利か敗北か)なので、これらが混在しているときには、0.5 になります。
これが0 に近づけば近くほど、どちらかに綺麗に分類されていることを示しています。
samplesは、そのノードに含まれている学習データの数です。
valueは、samplesのなかの内訳になっています。たとえば、values = [36, 240] だとすると、このノードには、勝った試合が240、負けた試合が36 存在することを意味しています。
考察
まず、すべての木において、Mid Inner Towerが最初にありますが、season8 Red Sideをのぞいて、約6分を基準にしています。
ここでは、6分という数値に有益な意味はなさそうに見えます。
というのも、私の経験からMid Inner Tower が6分で破壊できているかどうかという場面はありえないと考えるからです。
学習データのなかでも、最速で破壊しているもので、11.6 分でした。
このため、6分という数値はMid Inner Tower を割ったか否か?という意味を表していると考えるのがよさそうです。
とはいえ、一番最初のノードをルートノードといって、目的変数を最もよく分けるルールが生成されるそうです。
これを見ると勝つか負けるかには、Mid Inner Tower を割ったか否か?ということが勝率に大きく影響していることがわかりますね。
最初のノードを0層だとすると、2, 3層目に2回目のMid Inner Towerが見受けられます。
この数値の意味は重要そうです。具体的にいうと、Season9 Red Sideの第3層目にMid Inner Towerの破壊が20.6分以下か?という分け方に対して、Trueに進むと87試合すべて勝利しているという結果が見れます。
このことから、Mid Inner Tower や Mid Inhibitor は重要なオブジェクトであると考えられます。
一方で、season9 Red Sideの図において、Mid Inner Tower が取れていない、かつFirst Tower が取れていないのにも関わらず、Bot Inhibitor Tower が取れている試合が、2試合勝利しているものも見受けられます。
これは、Mid, Bot レーンが負けてしまったけど、Topのスプリットプッシュできるチャンピオンが育ち、ゲームを終わらせたのではないかといったことが考えられます。
season9 Blue Sideでも第3層目に、RedBotJgKills が 2.5 以上といった分け方も存在しており、スプリットプッシャーが止めにきた相手を相手ジャングルでキルを取る行為が勝利に繋がっているようにも見えます。
ただ、時間軸がないので、序盤にジャングラーがカウンタージャングルを成功させた、とも取れるので、どう捉えるかは難しそうです。
season8 と season 9の比較として、season9のほうがタワープレートの登場により、First Tower の重要度が上がるのかなと思って、検証してみたのですが、オブジェクトの並びとしては、season8, 9は似ているなという印象です。
どちらかというとseason8のほうがFirst Tower の分け方が多いのかなという印象です。
あと気になったのが、Mid でのキルがそれほど関係していないことが意外でした。
私がゲームをやっているときに、開始10分までに、4/0/0 のゼド とかが相手に出来上がったすると、これは厳しいかな… と思ってしまうのですが、そのルールはなさそうです。
そもそもロールを考慮していないので、埋もれてしまっているだけかもしれませんが。
Bot Outer Tower を先にとり、ADCサポート込みでMid Inner Tower を破壊すれば、勝てるということが考えれるので、メンタルを保って勝ちにいけるといいですね。
おわりに
今回は、決定木を用いて、勝率に関係しているであろうオブジェクトについて検討しました。
私の感想・考察としては、
- Mid Inner Tower、Mid Inhibitorは大事
- Mid Inner Towerが取れなくても、スプリットプッシュをきめれば勝てる
- 序盤のアサシンにキルが集まってもTilt しない
でした。
3. については、推測なので確実に言い切れないのが悔しいですね。
序盤のアサシンのキルが1. のMid Inner Towerに繋がっている可能性も大いに考えられます。
ミッドがキルを取った場合のMid Inner Tower取得率、そしてその後の勝率といったように条件付き確率を出せれば、もっと良い考察ができそうに思います。そう、条件付き確率を使えば。
決定木の他に、ランダムフォレストを使った場合も試みていて、載せようかなと思ったのですが、載せると大作になってしまうので、次回に回そうと思いました。
これはこれで、説明しなければならないことが多いので。
次回は手法は違いますが、似たような内容になると思います。
よかったなと思った方は積極的に共有をお願いいたします。