データサイエンスで導き出すマリオカートで最強のキャラクター

>こちらの記事は、[Civis Analytics](https://medium.com/@CivisAnalytics) 氏により2019年 7月に公開された『 [The best Mario Kart character according to data science](https://medium.com/civis-analytics/the-best-mario-kart-character-according-to-data-science-7dfb65d4c18e) 』の和訳です。
本記事は原著者から許可を得た上で記事を公開しています。

マリオカートは私の子供の頃の定番でしたー学校が終わったあと、マリオやルイージ、そして他の任天堂の世界のからのキャラクター達として、漫画風のコースでレースをし、ピクセルのバナナを投げ合うのに、友達と私はいったい何時間過ごしたかわかりません。

そんな自称スピードスターの小さな集まりをいつも悩ませていたのは、どのキャラクターが最強なのかという疑問でした。小回りの効くヨッシーに信頼を寄せる人もいれば、大きくて重いクッパこそが最良の選択肢だと主張する人もいました。当時のキャラクターは8つのみでした; 時代を早送りして、最近のマリオカートシリーズ作品では、キャラクターに合わせて様々なカートやタイヤを選択できるため、この疑問はさらに複雑になります。

私の今のマリオカートでの反射神経は当時とは変わってしまっていますが、その代わりに私は小学四年生の頃よりもデータサイエンスは得意になったので、この記事ではデータを使って「マリオカートで最強のキャラクターは誰なのか？」という疑問に答えてみることにします。

#パレート効率性
実はこれは難しい質問です。なぜならキャラクター、カート、タイヤの構成のパターンは山のようにあり、それらはすべて多くの属性に渡って大きく異なる数値を持っているからです。一般に、複数の次元を同時に最適化するのは不可能ですが、一部の構成は他の構成よりも明らかに劣ります。ですので今日のマリオカートのチャンピオンを目指す人たちにとっての疑問は「全てにおいて”ベスト”な選択肢は一つもない中で、最も適切なキャラクター、カート、タイヤの組み合わせをどう選ぶか？」でしょう。この疑問に答えるために、私たちはマリオと同じイタリア出身の経済学者、ヴィルフレド・パレートと彼が導入した、[パレート効率性](https://en.wikipedia.org/wiki/Pareto_efficiency)の概念を使用します。

パレート効率性の概念は、有限なリソースのプールで、複数の競合する結果がそれらのリソースの配分方法に依存する状況で適用されます。「パレート効率的」な配分とは、ある結果を改善するには他の結果を悪化させなければならない配分のことです。これは図を使用すると、より簡単に説明できます([Wikipediaから引用](https://en.wikipedia.org/wiki/Pareto_efficiency))。

![](https://miro.medium.com/max/300/0*qEAjbAwa8hljtaoE)

それぞれの円はありうるリソースの配分を示しており、マリオカートの場合では重さ、ハンドリング、トラクションといった様々な属性間での統計値の分布になります(マリオカートのキャラクターでは、各属性の性能は分布が異なるだけで、合計はほぼ同じになります)。

それぞれの円の位置は、2つの競合する次元(例えば速度と加速)に対する配分の結果を表します。赤色の配分は、パレート最適曲線上にあります。それぞれの配分に対して片方の結果を向上させるには、もう片方を悪化させる必要があります。

グレーの配分は、別々のリソース配分をして、結果を改善できるためパレート効率的ではありません。マリオカートでは、一般的に速度と加速が最も重要な属性であるため、この解析では速度と加速に関してパレート最適曲線上にあるキャラクター、カート、タイヤの構成を特定することが目的となります。

#探索的データ解析
まず、ゲームのコミュニティによって作成された[データ](https://github.com/woodnathan/MarioKart8-Stats)を使用して、それぞれのキャラクター、カート、タイヤの統計を個別に調べます。マリオカートの奇妙な点の一つは、キャラクターが何十人もいるのにもかかわらず、その多くの統計値(性能)が同じであるということです。ここからはキャラクター(またはカートやタイヤ)のクラスをそのグループのメンバーの名前で示します。

例えば、下のヒートマップの「ピーチ」という行のデータは、デイジーとヨッシーも含んでいます。あなたのお気に入りのキャラクターがどこにいるか確認したい場合は、記事の一番最後にクラスメンバーの完全な一覧がありますので、そちらを参照してください。

キャラクターのクラスは合計で7つあります。それらの統計を比較してみましょう。

![](https://miro.medium.com/max/533/0*pfZQeBhhY9U4CSyJ)

最も顕著な傾向として速度と加速の関係はトレードオフです。重いキャラクターは高い速度を持つ代わりに加速は悪くなっていますが、軽いキャラクターは素早い加速を持つ代わりに最高速度は低くなっています。他の統計値にもばらつきがありますが、大きな枠で見ると、その構成の全体的なパフォーマンスを決定付けるのは速度と加速であるため、残りの統計値は無視することにします。

カートとタイヤはキャラクターの基本統計値を修正する役割を持ちます。最終的な構成の属性はキャラクタの統計値とカート・タイヤによる調整の合計で決まります。キャラクターと同じく、カートとタイヤも数十種類ほどありますが、異なる統計値を持つカテゴリは少数です。

![](https://miro.medium.com/max/542/0*oxAcGeYqRpD7M2gN)

ここでの傾向はそれほど顕著ではありませんが、私たちがキャラクターの統計でも見たように、速度の向上は加速を犠牲にしてもたらされており、その逆も同様です。

ここでの目標は、速度と加速の最適な構成を持つすべての設定を見つけることです。次のステップでは、それぞれの固有のキャラクター、カート、タイヤの構成ごとに統計値を計算します。

#最適な構成を探し出す
ちょっとしたPythonスクリプトを書いて、全てのキャラクター、カート、タイヤの構成を列挙し、上の図の値を合計することでその性能を計算することができます。それぞれの可能な構成の統計が取れたなら、あとは可能な各構成の速度対加速の関係をプロットし、パレート最適曲線上にあるものを明らかにします。

![](https://miro.medium.com/max/442/0*Z7Pq2tX3u0BeZAsv)

上の表によると最適な構成は、可能な全ての構成のうちのかなり少数のサブセットであることがわかります。これは、全ての異なる構成(図では一部の構成が重複していることに注意)を数えることによって定量化することができます。参考までに、統計が同じ全てのキャラクター、カート、タイヤの構成を数えてみましょう。

全ての可能な構成の数: 149760
固有の統計を持つ構成の数: 294
最適な構成の数: 15

最適な構成は、潜在的に固有の統計値を持つ構成のわずか5%になっています。これらの最適な構成がどのようなものか見ていきましょう。

![](https://miro.medium.com/max/669/0*Zl9jeKc95LI2TWGG)

加速に全振りしない限りは、重いキャラクターを使えば間違いなさそうです。パレート最適な構成の中で、最も重いキャラクターのクラス(ワリオとドンキーコング)が11/15を占めています。

また、これらの各構成に対するその他の主な統計も確認できます。

![](https://miro.medium.com/max/655/0*4lpldscBsiVCszeD)

というわけで、このような感じになります。速度と加速に重きを置くのなら、これらの15種類の構成のいずれかを選ぶのが良いでしょう。

#すべての構成を探索する

ですが、最適な構成が常にあなたが求めているものとは限りませんよね(適当な例を挙げるならルームメイトが何かしらのハンデがなければプレーをやめると言っているなど)。そんな時は簡単な[bokeh](http://bokeh.pydata.org/en/latest/)対話型グラフィックを使用して条件に当てはまる全ての構成を調べることができます。
※訳注：元記事で確認することができます。

得られた知見:

- 重いキャラクターは軽いキャラクターよりも広い用途に適応できる。ワリオを使った構成は最大加速の約77%を達成できるが、ベビーマリオは最大速度の50%しか達成できない。
- メタルマリオ・ピンクゴールドピーチは、パレート最適曲線上に構成がない唯一のキャラクターである。
- ビートデイモンは本当に悪く、パレート最適曲線上にないほとんど全ての構成(つまり最悪になり得る構成)には、ビートデイモンクラスのカートが含まれている。

今回の解析で使用したコードはこちらから確認できます。最後に、あなたのお気に入りのキャラクター(またはカートやタイヤ)がある場合は、それがどのクラスに属しているかは以下から確認することができます。

##キャラクタークラス
- ベビーマリオ(Baby Mario)、ベビールイージ(Baby Luigi)、ベビーピーチ(Baby Peach)、ベビーデイジー(Baby Daisy)、ベビーロゼッタ(Baby Rosalina)、クッパJr(Lemmy Koopa)、Mii（軽）(Mii Light)
- キノピオ(Toad)、ヘイホー（Shy Guy)、ノコノコ(Koopa Troopa)、ジュゲム(Lakitu)、ウェンディ(Wendy Koopa)、ラリー(Larry Koopa)、キノピコ(Toadette)
- ピーチ(Peach)、デイジー(Daisy)、ヨッシー(Yoshi)
- マリオ(Mario)、ルイージ(Luigi)、イギー(Iggy Koopa)、ルドウィッグ(Ludwig Koopa)、Mii（中）(Mii Medium)
- ドンキーコング(Donkey Kong)、ワルイージ(Waluigi)、ロゼッタ(Rosalina)、ロイ(Roy Koopa)
- メタルマリオ(Metal Mario)、ピンクゴールドピーチ(Pink Gold Peach)
- ワリオ(Wario)、クッパ(Bowser)、モートン(Morton Koopa)、Mii（重）(Mii Heavy)

##ボディクラス
- スタンダードカート(Standard Kart)、プリンセスコーチ(Prancer)、ネコクラシカル(Cat Cruiser)、スニーカート(Sneeker)、マキシマム(The Duke)、くまライド(Teddy Buggy)
- ゴールドカート(Gold Standard)、Gフォース(Mach 8)、ターボ・ワン(Circuit Special)、スーパースター(Sports Coupe)
- ビートデイモン(Badwagon)、トライマッシュ(TriSpeeder)、スティールダイバー(Steel Driver)、スタンダードATV(Standard ATV)
- パタテンテン(Biddybuggy)、クッパシップ(Landship)、そらまめ(Mr. Scooty)
- スケルトン(Pipe Frame)、スタンダードバイク(Standard Bike)、バーニングボール(Flame Ride)、モトドーザー(Varmint)、ハナチャンバギー(Wild Wiggler)
- マッハGP(Sports Bike)、ジェットライダー(Jet Bike)、スーパーコメット(Comet)、ヨッシーバイク(Yoshi Bike)

##タイヤクラス
- ノーマルタイヤ(Standard)、ノーマルブルー(Blue Standard)、ブロックタイヤ(Offroad)、クリームブロック(Retro Offroad)
- ワイルドタイヤ(Monster)、ワイルドホット(Hot Monster)
- スリックタイヤ(Slick)、サイバースリック(Cyber Slick)
- ローラータイヤ(Roller)、スカイローラー(Azure Roller)、ボタンタイヤ(Button)
- リングタイヤ(Slim)、スパイシーリング(Crimson Slim)
-  メタルタイヤ(Metal)、ゴールドタイヤ(Gold)
-  ウッドリング(Wood)、スポンジタイヤ(Sponge)、クッションタイヤ(Cushion)




# 翻訳協力
Original Author:  **[Civis Analytics](https://medium.com/@CivisAnalytics)** 
Thank you for letting us share your knowledge! 

この記事は以下の方々のご協力により公開する事が出来ました。
改めて感謝致します。
選定担当: yumika tomita
翻訳担当: siho1
監査担当: @nyorochan
公開担当: @aoharu

# ご意見・ご感想をお待ちしております
今回の記事は、いかがだったでしょうか？
・こうしたら良かった、もっとこうして欲しい、こうした方が良いのではないか
・こういったところが良かった
などなど、率直なご意見を募集しております。
いただいたお声は、今後の記事の質向上に役立たせていただきますので、お気軽にコメント欄にてご投稿ください。
みなさまのメッセージをお待ちしております。