見出し画像

ポケモン好きがノーコードでポケモンデータをAI分析してみた | 第2回:伝説のポケモンを予測する

こんにちは!株式会社ヒューマノーム研究所でインターンをしている佐藤です!

みなさんポケモンはお好きですか?2022年1月28日には、完全新作の「Pokemon LEGENDS アルセウス」が発売されました。私も先日からヒスイ地方へ行き、ポケモンの調査をしています。

前回に引き続き、ポケモン好きな私が当社が開発する表データ解析向けノーコードツール・Humanome CatData(以下「CatData」)を使って、ポケットモンスターのデータ(以下ポケモンデータ)の解析を行っていきます。今回は伝説のポケモンを予測するAIを構築します!

CatDataは無料で利用できますので、お気軽にお試しください!

1. 今回のポケモンデータについて

今回の解析は、前回使用したポケモンデータを世代別に分割した二つのデータを使います。学習用に第1世代〜第5世代までのデータを、予測用に第6世代のみのデータを使用することにします。以下のGoogleスプレッドシートにデータを用意しました。

伝説のポケモンかどうか?を種族値を使って予測できることを確認するためには、タイプと種族値の関係を見ていきます。伝説のポケモンであることを表す要素 “Legendary” において「True」は伝説のポケモンであることを示し、「False」は伝説のポケモンではないことを示しています。

ポケモンには、普通のポケモンと幻のポケモン、そして伝説のポケモンが存在します。普通のポケモンはお馴染みのピカチュウやイーブイなど大多数のポケモンです。幻のポケモンはミュウ、アルセウスなど、伝説のポケモンはミュウツーやディアルガ、パルキアなどを指します。

幻のポケモンには種族値が全て100となっている特殊なポケモンが多く、伝説のポケモンには種族値の総合値が600を超えているポケモンが多いです。種族値の総合値が600を超えているのは一部の普通のポケモンと一部の伝説のポケモンだけです。

2. ポケモンデータを可視化する

では、先程の学習用データを利用して可視化を進めます。前回は「テーブルの新規作成」からデータを読み込み「可視化」を選択しました。しかし、今回は「可視化」の機能が学習テーブル内にあるため「学習」を選択し、そこから可視化を行います(図1)。

図1. 新規テーブルの作成


CatData には、欠損値のある行を学習時に自動で削除する、という前処理をサポートする機能があります。今回利用するデータの列 ”Type2” には欠損値が存在するため、通常通りに操作すると、欠損値のある行は学習時に削除されます。しかし、今回はType2に値が無いポケモンも含めて学習したいため、以下の流れで ”Type2” の列を手動で削除します(図2)。

図2. 手動で列を削除する

手動で列を削除する方法

  1.  ”Type2”の列をクリックして「前処理:アクションの詳細設定」に移動

  2. 「高度な操作」→「この列を削除」→「削除」

  3. 「適用」をクリック

この操作が終わり次第、以下の順番で ”Legendary”(伝説のポケモン) の傾向をグラフにすることで確認してみましょう(図3)。

  1. 「確認」ボタンをクリック

  2. 「前処理:前処理結果の確認」に移動

  3. 画面内の「可視化」ボタンをクリック

  4. 列1は ”Legendary” を、列2には”Total”(総合値)を選択

図3. 伝説のポケモンとそうでないポケモンについて、総合値・特殊攻撃力で比較した結果

「True」と「False」を比べると、「True」の方が全体的に総合値が高い傾向があるように見えます。次に列1は ”Legendary” で変えずに、列2を ”Sp.Atk”(特殊攻撃力)に変更して、伝説のポケモンであることと特殊攻撃力の相関を確認します。こちらも「True」の方が、全体的に特殊攻撃力が高い傾向にありました。

3. ポケモンデータを学習する

データを可視化することで、伝説のポケモンについての傾向が見えたので、次はこのデータを使ってモデルの学習に進みます。「可視化」の画面内の「前処理」をクリックすると、「前処理:アクションの詳細設定」に移動するので、ここで学習を行います。

まず、学習の前処理として、伝説のポケモンを予測する時は使わない以下の項目を、先程の「手動で列を削除する方法」と同じ手順で削除します。

  • “#”:ポケモン図鑑の番号(特徴とは関係ないので不要)

  • ”Generation”:世代(今回は世代ごとにデータを分けているため不要)

この操作が終わったら、以下の手順でAIにデータを学習させていきます(図4)。

  1. 「確認」→「学習」をクリック

  2. 「学習済みモデル一覧」の枠内にある「モデルの新規作成」をクリック

  3. 「予測対象の列」は ”Legendary” 、「手法」はRandom Forestをそれぞれプルダウンメニューで選択

  4. 「学習データとテストデータに分割する」の項目にチェックがついていることを確認

  5. 選択した内容に不備がなければ「学習の開始」をクリック。これで学習が始まります。

図4. 伝説のポケモンを予測するモデルを新規作成する

モデルの学習が終わり次第、「評価結果」をクリックし、できあがったモデルを評価する画面へ移ります。

CatData無料版では、学習モデルは1つのみ作ることができます。

4. 「伝説のポケモン」学習モデルを評価する

モデルの評価結果を示す画面では、「混同行列」「ROCカーブ」「変数の重要度」の3つの要素について表示されます。

4-1. 混同行列

混同行列は、縦軸がAIモデルが予測した結果を、横軸が正解として与えられた内容を示すグラフです。このエリアでは、学習データとテストデータ、それぞれの混同行列が示されています(図5)。与えたデータをAIがどのように予測したのかがわかります。今回の結果は、学習データの精度は「1.0」、テストデータの精度は「0.97222」となっており、どちらも高い精度であることが分かります。

図5. 混同行列の結果

4-2. ROCカーブ

ROCカーブは、x軸を偽陽性率、y軸を真陽性率で示した曲線です。真陽性とは、正解データが陽性(伝説のポケモンであることを表した「1」)であった時、正しく陽性と予測したもので、偽陽性とは、正解データが陽性であった時、誤って陰性(伝説のポケモンではないことを表した「0」)と予測したものです。AUCが1.0 に近いほど良い判断能力であると言えます。

このモデルは、学習データのAUCが「1.0」、テストデータのAUCが「0.99405」とどちらも高い値を示しました。このことから、このモデルの判断能力は高い、ということが分かります(図6)。

図6. ROCカーブの結果

4-3. 変数の重要度

変数の重要度は、モデルが学習や予測をする際、何の項目をどの程度重要視して考えたのかを表したものです。学習する手法として「Random Forest」を選択すると変数の重要度が表示されます。今回の学習と予測を実施した際、重要度が最も高かったのは ”Total(総合値)”でした。次いで ”Sp.Atk(特殊攻撃力)”、 ”HP(体力)” と続いています(図7)。

図7. 変数の重要度の結果

5. 「伝説のポケモン」予測モデルで実際に予測する

それでは、先程作った「伝説のポケモン」予測モデルは本当に伝説のポケモンを当てられるのか?について検証していきます。検証用データとして、学習時には使わなかった第6世代のポケモンデータを利用します。

テーブルの新規作成からデータを読み込み「予測」を選択し保存しすると、自動的に予測を実施する画面に移動します。以下の流れで、先程作成したモデルを使って予測し、その結果を評価します。

  1. 「学習済みモデルによる予測」の項目にある「予測結果と比較したい列を選択」をクリック

  2. 「予測する値」で正解が記載された列をプルダウンメニューから指定

  3. 伝説のポケモンかどうかを予測するため ”Legendary” を指定

  4. 先ほど学習したモデル「#1 Pokemon2 第1〜5世代」を指定

  5. 「予測の開始」をクリック

  6. 予測が終わったら「予測結果」をクリックし、予測結果の確認画面へ移動

この作業を行わない場合、予測はしますが評価が行われず、混同行列やROCカーブを確認することができません。

図8. 予測の流れ

それでは伝説のポケモン予測モデルが予測した結果を確認していきます。

「評価」タブをクリックすると、予測結果と正解を混同行列とROCカーブで比較した結果を確認することができます。混同行列を見ると、精度が「0.96341」とあり、82個中79個の予測が正しかったことが分かります。ROCカーブを見るとAUCが「0.9789」であるため、高い予測精度であると言えます(図9)。

図9. 「伝説のポケモン」予測モデルを使って実際に評価した結果(混同行列・ROCカーブ)

次に、モデルを構築した時にテストデータに対して示した精度と、今回の第6世代データについて予測した際の精度を比較してみましょう。モデルを学習したときのテストデータにおける精度は0.97222でした。この値は、今回のデータにおける精度の0.96341とほとんど変わりません。このことから、予想通りの結果が得られたことが分かります(図10)。

図10. モデル構築時のテストデータの予測評価と今回の第6世代データの予測評価

6. 予測結果を考察する

AIはどのポケモンを間違えて予測したのか、個人的に気になったので確認してみました。

TrueをFalseと予測していたのは、”Zygarde50% Forme(ジガルデ 50%フォルム)”、FalseとTrueと予測していたのは”HoopaHoopa Unbound(フーパ [ときはなたれしフーパ])”と”Googra(ヌメルゴン)”でした。

6-1. ジガルデ

ジガルデは、それぞれ「10%フォルム」と「50%フォルム」と「パーフェクトフォルム」の3体がいますが、今回使用したデータには「10%フォルム」と「パーフェクトフォルム」は記載されていません。フォルムの数字が大きくなるほど種族値も高くなるように設定されています。「ジガルデ50%フォルム」は「ジガルデパーフェクトフォルム」より種族値が低く設定されているため、このことからFalseになったと考えられます。恐らく「ジガルデ10%フォルム」はFalse、「ジガルデパーフェクトフォルム」はTrueと予測されると思われます。

6-2. フーパとヌメルゴン

フーパには、「いましめられしフーパ」と「ときはなたれしフーパ」がいます。「いましめられしフーパ」はフーパの封印された姿で「ときはなたれしフーパ」はフーパの真の姿とされています。そのため、「ときはなたれしフーパ」は種族値が高く設定されており、Trueと予測されたと考えられます。

ポケモンの中には、進化すればするほど強くなる大器晩成型が存在します。この大器晩成型の最終進化系として扱われているポケモンは各世代に1体はいます。大器晩成型の最終進化系であるポケモンは伝説のポケモン並に強いとされており、ヌメルゴンもその一種であるためTrueと予測されたと考えられます。

7. おわりに

今回は「伝説のポケモン」なのか?について予測しました。前回のように過学習を起こさず精度は高く予測することができました。ポケモンについてはよく知っているので、結果を見るのもそれについて考察をするのも楽しかったです。今回使用したデータ内にはなかった第6世代以降のデータについてもいつかやってみたいです。

※ 筆者紹介
佐藤 美結(慶應義塾大学環境情報学部1年):植物の生態に興味があります。好きなものはポケモンです。機械学習、プログラミングを今年から学び始めました。
---
私たちは今年度から当社でインターンシップを始め、ワークショップのTAや機械学習ツールの使い方の紹介記事を執筆しています。今後も、AI構築の実際についてご紹介していきますので、お読みいただけると嬉しいです!

8. 関連記事

表データを利用したAI学習テキスト(Humanome CatData

画像・動画を利用したAI学習テキスト(Humanome Eyes


AI・DX・データサイエンスについてのご質問・共同研究等についてはお気軽にお問い合わせ下さい!


この記事が気に入ったらサポートをしてみませんか?