yiskw note

機械学習やプログラミングについて気まぐれで書きます

スマメイト13期の対戦データからレート帯ごとにキャラランクを決めてみた


スマメイト13期の対戦成績を解析して,レート帯ごとのキャラランクを決定してみました. あくまでオンラインでの結果であり,人口の少ないキャラクターがいてデータに偏りがある関係上, 直感とは反する結果が含まれる場合があるので, その点をご理解いただけたらと思います.

またスマメイト13期の対戦データは,Ver.10.1.0のものになります. その点も留意していただけたらと思います.

スマブラのオンライン対戦環境の傾向などを把握する助けとなれば幸いです.

過去に,スマメイトの対戦成績から相性補完ができるサブキャラを探してみたので,よければこちらも見ていただけたらと思います.

yiskw713.hatenablog.com

解析方法

使用するデータ

スマメイト13期のレート対戦の結果を使用しています. そのうちミラー対戦のものや,多キャラ使いのプレイヤーの試合などは除外しています.

今回は様々な条件でデータを絞りながらキャラランクを決定してみました. 具体的には以下の条件で検討しています.

  • 全ての試合データを使用 (計378696試合)
  • 最終レートが1500以下のプレイヤー同士の試合のみ使用 (計79,057試合)
  • 最終レートが1500以上のプレイヤー同士の試合のみ使用 (計203,256試合)
  • 最終レートが1500以上1700以下のプレイヤー同士の試合のみ使用 (計83,228試合)
  • 最終レートが1600以上のプレイヤー同士の試合のみ使用 (計119,998試合)
  • 最終レートの差が50以内のプレイヤー同士の試合のみ使用 (計107095試合)

としています.

ちなみにレート帯を絞るほど試合数が少なくなるため,上記6つの検証に留めております. 例えば,最終レート1700以上のプレイヤー同士の試合を対象にすると,総試合数59,845で,存在しないマッチアップが104通り存在しました.

また,この条件の指定方法だとレートの境界を挟んだプレイヤー同士の試合は考慮されないため,若干偏った結果になる可能性があります. 他に良い方法があればよかったのですが,特に思いつかなかったので,今回はこの方法で検証します.

キャラランクの決め方

方法1: キャラごとの勝率の平均値による決め方 (平均勝率方式)

キャラごとに,他の全てのキャラに対する勝率を計算し,その平均値の順でキャラランクを決定します. この際に

は同一のキャラクターとして扱っています.

このキャラランクの決め方は,かなり直感的で,またデータ数が多けれればそれなりに参考になるものではないかと思っております.
一方で,データが少ないと,信憑性が低い結果となってしまいます. 例えば,キャラAが,キャラBと1試合だけ試合をして勝利(勝率100%)し,キャラCに勝率30%だった場合,キャラAの勝率の平均は (100 + 30) / 2 = 65%とかなり高い値になってしまい,試合数の少ないマッチアップの影響を受けやすくなってしまいます.

方法2: キャラ相性でのポイントによる決め方 (ポイント方式)

キャラごとに,他の全てのキャラに対する勝率を計算します.

勝率が60%以上の時を有利(+1ポイント)
勝率が40%以下の時を不利(-1ポイント)
それ以外は五分(0ポイント)
として,キャラごとのポイントを計算します. そのポイントの総和の順でキャラランクを決定します.

このキャラランクの決め方は,平均勝率方式と比べると,データ数が少ない場合でも比較的参考になる結果だと思います.
なぜなら,試合数が少ないマッチアップでも,ポイントの増減はたかだか1ポイントで,試合数が少ないマッチアップの影響を受けにくいからです.
ただ試合数の少ないマッチアップが多いキャラは,ポイントが極端に大きくなったり,小さくなったりする可能性もあります.

方法3: 環境に存在する割合 × キャラ相性でのポイントによる決め方 (存在割合 × ポイント方式)

ポイント方式と同様に,キャラごとの相性を計算し,有利不利を決めます.
この際に,キャラごとの環境に存在する割合を掛け算してポイントを算出します.

勝率が60%以上の時を有利 (+1 × キャラの存在割合)
勝率が40%以下の時を不利(-1ポイント x キャラの存在割合)
それ以外は五分(0ポイント)
として,キャラごとのポイントの総和を計算し,キャラランクを決定します.
例えば,キャラAが,環境に存在する割合が20%のキャラBに有利を取った場合,0.2ポイント加算される仕組みです.

この時の環境に存在する割合は,自キャラを除いた時の他キャラの存在割合(= 他キャラの試合数 / 自キャラ以外の総試合数 )を使用しています.
例えば,キャラAが70%, キャラBが20%,キャラCが10%環境に存在するとして,AがBに有利, AがCに不利となった時, キャラAのポイントは,+1 × 0.2 / (0.2 + 0.1) - 1 × 0.1 / (0.2 + 0.1) = 0.33となります.

この方法では,環境に多いキャラに有利を取れるキャラが高く評価される仕組みになっています.
また,環境に少ないキャラとの対戦結果は軽視されるので,データが少ないキャラ(=環境に少ないキャラ)とのマッチアップの影響は小さくなり,よりデータの偏りに影響を受けにくい指標のような気がします.
ただ,こちらの方法を用いても,存在割合が低いキャラ自体のポイントは極端になる可能性があり,データの拡充などの対策が必要そうです.

こちらの方法はシカマさん(twitter: @Sycama_ssb)からご意見をいただきました.本当にありがとうございます!

解析結果

ここからは実際の分析結果となります.
繰り返しになりますが,これらはデータから得られた結果であり,データに偏りがある関係上,直感と反する結果が含まれることがございます.
その点ご留意いただけたらと思います.

全ての試合データを使用

計378696試合

  • キャラごとの試合数

f:id:yiskw713:20210310151725p:plain

キャラの使用人口はジョーカー > ドンキー > パルテナであったのに対し,試合数はジョーカー > パルテナ > ドンキーであった点が意外でした.
多キャラ使いは除いたデータになっているので,その影響もあるかもしれません.

  • 平均勝率方式

f:id:yiskw713:20210310014848p:plain

トップ5はスティーブ,ディディーコングダックハントMiiファイター射撃,ミェンミェンとなりました.
逆にワースト5は,ジョーカー,ルキナ,マリオ,マルス,ベレトスでした.

いわゆる強キャラと言われているジョーカーが最下位というのは意外でした.プレイヤー人口が最も多いので,その影響もありそうです.
ちなみに,使用率2位のドンキー67/79位,3位のパルテナは31/79位でした.
以下にプレイヤー人口と今回の平均勝率の関係を示したグラフを載せます.

f:id:yiskw713:20210310193612p:plain

確かに負の相関関係がありそうです.人口が増えると平均勝率が低くなり,人口が少ないキャラは平均勝率が高くなっているように見えます.
人口が増えるほど対策されやすかったり,プレイヤーの層が幅広くなることが要因として考えられます.

  • ポイント方式

f:id:yiskw713:20210310151745p:plain

トップ5は,ディディーコングダックハント,スティーブ,ミェンミェン,シモン/リヒターでした.
ワースト5は,ピカチュウルキナ,プリン,ジョーカー,マルスでした.
平均勝率方式の時と比べて若干順位が変動していますね.

平均勝率方式から比べて変動が大きかったキャラとして,こどもリンクが46位→23位,ピクミン&オリマーが45位→27位,ソニックが24位→42位となっていました.
こどもリンクのような順位が上がったキャラは,平均勝率としては高くないが,有利を取れるキャラが多いと言えます.
逆に,ピクオリやソニックのような順位が下がったキャラは,勝率的には安定しているが,勝率60%以上の有利を取れるキャラが多くはないということがわかります.

  • 存在割合 × ポイント方式

f:id:yiskw713:20210310153427p:plain

トップ5は,ディディーコングダックハント,スティーブ,ミェンミェン,Miiファイター射撃でした.
ワースト5は,マルスピカチュウルキナ,プリン,インクリングでした.

ポイント方式と比べて順位変動が多かったキャラとして,Miiファイター格闘が14位→44位,シュルクが31位→51位,ケンが52位→24位,パックンフラワーが36位→19位でした.
Miiファイター格闘やシュルクのような,ポイント方式から順位が下がったキャラは,有利キャラ自体は多いが,環境に多いキャラに有利を取れていない可能性があります.
逆に,ケンやパックンフラワーのような順位が上がったキャラは,環境に多いキャラに対して比較的有利を取れていると言えます.

最終レートが1500以下のプレイヤー同士の試合のみ使用

計79,057試合

  • キャラごとの試合数

f:id:yiskw713:20210310155411p:plain

  • 平均勝率方式

f:id:yiskw713:20210310015032p:plain

  • ポイント方式

f:id:yiskw713:20210310155425p:plain

  • 存在割合 × ポイント方式

f:id:yiskw713:20210310155551p:plain

レート1500以下では,一部例外もありますが飛び道具持ちが強い印象があります.
全ての試合を使用したキャラランクで上位だったスティーブや,ディディーコングは,中位あたりでした.
どうやらレート1500以上の環境で暴れてるみたいですね.

最終レートが1500以上のプレイヤー同士の試合のみ使用

計203,256試合

  • キャラごとの試合数

f:id:yiskw713:20210310155933p:plain

ジョーカーの試合数がかなり減りました.レート帯ごとで試合数が異なるのは面白いですね.
今回はレート1500を境界にしているので,その境界を跨いだプレイヤー同士の試合は数に含まれていません.
そのあたりの影響もありそうです.

  • 平均勝率方式

f:id:yiskw713:20210310015105p:plain

  • ポイント方式

f:id:yiskw713:20210310161334p:plain

  • 存在割合 × ポイント方式

f:id:yiskw713:20210310161356p:plain

どの方法でもMiiファイター射撃,スティーブ,ディディーコングダックハントクッパJr.が5強になっています.
最終レート1500以下では中位だった,クッパJr.がトップ5に食い込んでいました.
また,スティーブ,ディディーコングはレート1500以上での戦績が良いみたいです.

最終レートが1500以上1700以下のプレイヤー同士の試合のみ使用

計83,228試合

  • キャラごとの試合数

f:id:yiskw713:20210310162318p:plain

  • 平均勝率方式

f:id:yiskw713:20210310015220p:plain

  • ポイント方式

f:id:yiskw713:20210310162345p:plain

  • 存在割合 × ポイント方式

f:id:yiskw713:20210310162335p:plain

Miiファイター射撃 / 格闘の順位がかなり高いですが,試合数もかなり少ないのでデータとしてはやや怪しいです.
最終レート1500以上のキャラランクでは,下位だったクロムがトップ5に入っています.このレート帯で猛威を振るっているみたいです.

最終レートが1600以上のプレイヤー同士の試合のみ使用

計119,998試合

  • キャラごとの試合数

f:id:yiskw713:20210310162404p:plain

  • 平均勝率方式

f:id:yiskw713:20210310015310p:plain

  • ポイント方式

f:id:yiskw713:20210310162418p:plain

  • 存在割合 × ポイント方式

f:id:yiskw713:20210310162435p:plain

やはりスティーブは高レート帯で暴れているみたいでした.
Miiファイター射撃,ピチューは試合数がかなり少なく,データとしては若干怪しいですが,レート1600以上で良い成績を残しているみたいでした.

またレート1500以上の結果では中位だったガオガエンが,ここでは上位になっています.
これは,レート1600以上のガオガエンプレイヤーが,レート1600以下のプレイヤーとの試合で負け気味である可能性を示していると思います.
レート1600以下のプレイヤーに敗戦している結果は,このキャラランクでは反映されないので,結果として強く見えている可能性が高いです.
現にレート1500~1700のランキングでは,ガオガエンの順位はあまり高くないです.
このように,特定のレート帯のデータを使用してしまうと,境界を付近での戦績が考慮されないため,別の方法を考える必要がありそうです.

下位の方には,先ほどトップ5にいたクロムがいます.レート1500~1700帯のプレイヤーがクロムの対策に苦しんでいる可能性がありそうです.
こんな感じでレート帯ごとのキャラランクを比較すると,色々見えてくるものがあり,なかなか面白いです.

最終レートの差が50以内のプレイヤー同士の試合のみ使用

計107095試合

当初はこちらの条件がキャラランクを作成するのに最適だと考えておりました.
というのも,最終レート差が近いプレイヤー同士の試合は,実力が近いプレイヤー同士の試合になりそうと考えたからです.
ただ冷静に「レート = キャラの強さ × プレイヤーの強さ」と考えてみると,同じレート帯だとしてもプレイヤーが強いのか,キャラの強さが強いのかは判別できないので,正しい分析にはならないと思います.

なので,以前の相性補完の分析も検討し直した方が良さそうです.
一部のキャラが補間キャラとして多く出現しているのは,この辺りの影響が大きいと思います.

今回は参考までに結果だけ載せておきます.

  • キャラごとの試合数

f:id:yiskw713:20210310162731p:plain

  • 平均勝率方式 (※参考値)

f:id:yiskw713:20210310162744p:plain

  • ポイント方式 (※参考値)

f:id:yiskw713:20210310162809p:plain

  • 存在割合 × ポイント方式 (※参考値)

f:id:yiskw713:20210310162822p:plain

まとめ

スマメイトの対戦成績を用いて,レート帯ごとにキャラランクを決めてみました.
1期分のデータしか使用できていないので,よりデータを集めて解析し直したいと思います.
また解析方法にもまだまだ問題があると思うので,こちらの検討も進めていきたいと考えております.

何かご意見やコメント,指摘などがあれば,こちらにコメントを残していただくか,twitter(@yui_ssbu)にリプライやDMをいただけると嬉しいです.
最後まで読んでいただきありがとうございました.