選出予想計算式

いつもお世話になっております。

今更感ありますが、ポケモンの選出予想システムの詳しい計算式を書いておきます。
なんの話よ?って方は下記動画をご参照ください。

https://www.nicovideo.jp/watch/sm35950475

選出予想の考え方

①同じパーティで対戦しまくって、選出の統計取る
②単体の選出率ではなく、6体中3体の組み合わせのパターンのなかで、どのパターンが
一番選ばれるか?を予想する

この記事で書くのが②の予想するための計算式です。
単純に計算式を作ろうとすると、①で集めた統計から選出された3体組み合わせのパターンを数え上げれば事足りそうです。

例)

f:id:YaliYalice:20200326230647p:plain

f:id:YaliYalice:20200326234403p:plain

→よっしゃ、じゃあこの↓パターンがくるはずや!

f:id:YaliYalice:20200326234847p:plain

と、「選出されたこと有る」パターンがあれば予測はできます。

ただ「選出がまったく一致するってそんなに多い?」「型が変われば選出方法も変わっるのでは?」と課題が残ります。

さらに、全パターン「選出されたこと無い」であれば、予想が全くできません。

以上の課題を解決するための手段として、単体の選出回数も考慮に含めることにしました。

 

単体と3体組み合わせを考慮するのなら、2体組み合わせも入れたらええんちゃうか、ってことで計算方法は最終的にこんな感じになりました。

f:id:YaliYalice:20200606214950p:plain

用語説明

汎用化した式の説明の前に、いちいち図を用意しなくても済むように記号で表します。

P(X):Xというポケモンが選出された割合
   = (Xが選出された回数)÷(相手のパーティにXがいた回数)

P(X,Y):XというポケモンとYというポケモンが同時選出された割合

   =(XとYが同時選出された回数)÷(相手のパーティにXとYがいた回数)

P(X,Y,Z):ポケモンX、Y、Zの組み合わせが選出された割合

   =(XとYが同時選出された回数)÷(相手のパーティにXとYがいた回数)

 

選出予想計算式 

ポケモンX,Y,Zの選出スコア

 = α × P(X,Y,Z) + β × {P(X,Y)+P(Y,Z)+P(Z,X)} + γ ×{P(X)+P(Y)+P(Z)}

  ただし、(1 ≧ α > β > γ ≧ 0)

これを20パターンすべて計算して、選出スコアが高いものが一番選出される確率が高いと判断します。
※そのまま確率とせずスコアと言い換えてるのは正規化するのが面倒だったから

突然でてきた、α、β、γ ってなんだよっていう話ですが、ただの調整用のパラメータです。
選出される3体の予測に一番影響を与えるのは、やはり "P(X,Y,Z)" なので、P(X)よりも選出スコアへの影響度を高くしたい、その調整のためのパラメータです。

実際に選出予想をしていたときは、α=1, β=0.1, γ=0.01 としています。

 

最後に

 大学で統計学やら機械学習をかじった程度の知識で作ってみたので、たぶん穴だらけだと思います。
もうちょっと勉強してればよかったと後悔しつつ、統計数を増やしたりより精度の高い手法を考えたりしようと思います。

その前に対戦データを記録し、集計するツールが必要ですね。
今までは全部エクセルに記入して、集計→予想までを全部VBAで組んでましたw

ちゃんとしたGUIアプリ作ったことないので、そこの勉強からしようと思います。

それでは、お元気で。