手法編からの続きです。
実験
まず、学習データの準備です。パーティを10,000個用意して、別の100個のパーティとバトルさせることにより勝率を求めました。
各特徴量を用いてパーティの勝率へ線形回帰します。 単純な最小二乗法でも学習は可能でしたが、「多重共線性」という問題があるため重みの要素が1,000以上の大きな値になってしまい、分析が困難でした。 そのため、リッジ回帰という手法を用いることで完全ではないにせよ分析可能な結果を得ることができました。
リッジ回帰の実装はscikit-learnライブラリを用いました。
9,000個のデータで学習し、残りの1,000個で評価しました。
まず、使用した特徴量ごとの回帰精度を示します。以前の記事で示したように、Pはポケモンの種類、Mは技の種類です。PMはポケモンとその技の組み合わせを示しています。
P | PP | M | MM | PM | 決定係数R2 |
---|---|---|---|---|---|
Y | 0.388 | ||||
Y | 0.312 | ||||
Y | Y | 0.691 | |||
Y | Y | 0.388 | |||
Y | Y | 0.383 | |||
Y | Y | Y | 0.847 | ||
Y | Y | Y | Y | Y | 0.874 |
決定係数R2は回帰の良さを表す指標で、もっとも良い場合で1、最も悪い場合で(回帰先の期待値を定数で出すモデルで)0となります。 ポケモンと技の組み合わせ情報がパーティの強さを予測するうえで有用であることがわかりました。 ポケモンの情報だけ、技の情報だけの場合より、両方の情報がある状況のほうが大きく精度が向上することがわかります。
そして、線形モデルの良い点は、学習で求められた重みから各特徴量次元の寄与度を測れる点です。 今回、特徴量の要素はすべて0か1であり、勝敗({1, -1})に回帰しているため、対応する重みが正の大きな値であればパーティを強くする効果のある特徴、負の大きな値であればパーティを弱くする効果のある特徴であるとみなすことができます。
現在実装されているポケモンは9種類、技は20種類に制限されていることに注意してください。
実装したポケモン:ダグトリオ・フーディン・ゲンガー・ナッシー・スターミー・ルージュラ・ケンタロス・ラプラス・サンダース
実装した技:ふぶき・10まんボルト・サイコキネシス・のしかかり・じこさいせい・リフレクター・でんじは・かげぶんしん・きりさく・いわなだれ・はかいこうせん・あくまのキッス・どくどく・ あなをほる・にどげり・かいりき・メガドレイン・あやしいひかり・ナイトヘッド・はねる
まずはP特徴のみで回帰したときの係数を、大きい順に並べて示します。
特徴の意味 | 係数 |
---|---|
ゲンガー | 0.251 |
ナッシー | 0.137 |
ケンタロス | 0.031 |
スターミー | -0.012 |
ラプラス | -0.042 |
フーディン | -0.043 |
サンダース | -0.053 |
ダグトリオ | -0.126 |
ルージュラ | -0.144 |
ゲンガーの係数が最大です。これは、ゲンガーがパーティに入っていると勝率が大きく高まるということを意味しています。ゲンガーはゴーストタイプで、20種類の技のうち5種類を無効化できるところが強い要因だと思われます。 ダグトリオは係数が低いです。この環境だと強力な技「じしん」が使えない点が厳しいものと思われます。ルージュラは「ふぶき」で凍らないというメリットがありますが、意外にも最下位となりました。
次にM特徴のみで回帰したときの係数を、大きい順に並べて示します。
特徴の意味 | 係数 |
---|---|
ふぶき | 0.111 |
サイコキネシス | 0.101 |
10まんボルト | 0.095 |
あくまのキッス | 0.069 |
じこさいせい | 0.067 |
きりさく | 0.062 |
はかいこうせん | 0.039 |
のしかかり | 0.037 |
いわなだれ | 0.025 |
どくどく | 0.023 |
あやしいひかり | 0.022 |
かげぶんしん | 0.018 |
かいりき | 0.009 |
メガドレイン | -0.003 |
あなをほる | -0.010 |
にどげり | -0.037 |
ナイトヘッド | -0.084 |
でんじは | -0.107 |
リフレクター | -0.109 |
はねる | -0.177 |
妥当な順位だといえるのではないでしょうか。こおりタイプ以外の相手を27%の確率で即死させるふぶきが最強です。何の効果もない「はねる」がちゃんと最下位になりました。 「でんじは」も使い方によっては強力ですが、行動選択がランダムなため複数回無駄に使ってしまうなどの事態が生じやすいと思われます。 この序列はあくまで「行動をランダムに選んだ場合」の技の良さを示すものであることに注意が必要です。
最後に、すべての特徴量(P, PP, M, MM, PM)を用いて回帰したときの係数を示します。
まずは値が大きいものから10個示します。
特徴の種類 | 特徴の意味 | 係数 |
---|---|---|
PM | フーディン&サイコキネシス | 0.156 |
PM | ナッシー&サイコキネシス | 0.139 |
PM | ケンタロス&きりさく | 0.134 |
PM | サンダース&10まんボルト | 0.128 |
PM | スターミー&サイコキネシス | 0.123 |
PM | ケンタロス&はかいこうせん | 0.119 |
PM | ゲンガー&サイコキネシス | 0.111 |
P | ゲンガー | 0.107 |
PM | ゲンガー&10まんボルト | 0.105 |
PM | ゲンガー&ふぶき | 0.105 |
ポケモンとタイプが一致する技の係数が非常に高いことがわかります。ポケモン単独、技単独では測れないポケモンと技の相性のよさを定量化することができていると考えられます。
次に、値が小さいものから10個示します(一部省略)。
特徴の種類 | 特徴の意味 | 係数 |
---|---|---|
PM | ナッシー&はねる | -0.156 |
PM | (はねる関係省略) | |
PM | ケンタロス&ナイトヘッド | -0.097 |
PM | ナッシー&でんじは | -0.096 |
PM | (でんじは関係省略) | |
PM | (ナイトヘッド関係省略) | |
PM | ゲンガー&リフレクター | -0.088 |
MM | でんじは&あくまのキッス | -0.084 |
P | ルージュラ | -0.065 |
PM | (リフレクター関係省略) | |
PM | フーディン&にどげり | -0.054 |
PM | ルージュラ&あなをほる | -0.053 |
P | ダグトリオ | -0.053 |
PM | (にどげり関係省略) | |
PM | ケンタロス&メガドレイン | -0.049 |
まず、はねる等の弱い技とポケモンの組み合わせが目立ちます。次に、「でんじは&あくまのキッス」という技と技の組み合わせが登場しました。 どちらも相手を状態異常にする技ですが、状態異常は複数種類掛けることができないため、この2つの技を両方覚えるのは良くないということが係数に表れています。 また、「フーディン&にどげり」や「ケンタロス&メガドレイン」のように、ポケモンの「こうげき」「とくしゅ」の能力値の大小関係と技が合っていない場合の係数が低いことがわかります。
以上で分析したように、2技関係特徴量により、ポケモンプレイヤーの直観に沿う形でパーティの強さを定量的に予測できることがわかりました。 この技術を用いることで、ランダムにパーティを組み替えるよりも効率的に強いパーティを探索できるようになることが期待できます。
今後はまずポケモン・技の種類を増加させる実装を行ったうえで、今回提案した手法を取り入れながら強いパーティの構築技術を模索していきたいと考えています。