24機械学習の初心者が某ゲームの防御貫通率を機械学習で算出してみるsckit-learnGoogleColaboratoryきっかけ私は対人コンテンツがある某スマホゲームをやっています。このゲームはキャラ育成に大量のリソース(時間もしくはお金)1を使うため、「最小限のリソースで相手に勝つにシュミレートができるといいのではないだろうか」と思ったのがきっかけです。12キャラでの自動戦闘。最終的に作りたいもの時間とお金を可能な限り削減したい2ため、「相手に勝つために何をすればいいか」を導き出せるシュミレーターを作成します。ハードルが高いので、下記のステップを刻もうと思います。【本記事の内容】各種データの収集と戦闘に使用される各種パラメータの算出このゲームはステータスとレベルから戦闘に使用されるXX率が算出されます。このXX率はステータスの単純比例ではなく、全く同じ値でもレベルが異なるとXX率が変わります。最適な行動をシュミレートするには、レベルアップとステータスの強化でXX率がどうなるかを算出する必要があります。各キャラクターの作成キャラクターと最低限のステータスを入力すると戦闘を再現できるWebコンテンツ相手と自分のPT情報を入力すると、勝つために必要な今後の行動(強化・キャラ取得)が表示されるシュミレーター(参考)ステータス画面3各種パラメータの算出方法データを集めた後でプロットしてみたところ、どうにもわからない...頑張って計算式を自分で見つけるのではなく、興味があった機械学習でどうにかすることにしました。Colaboratoryのセットアップ機械学習やディープラーニングを使うとなった場合、マシンリソースが必要となります。Colabと表記)を使うことにしました。Colabをセットアップします。Notebookライクな開発画面が表示されますセットアップは以上です。Notebooks」に保存されます。Driveでspreadsheetを作成し、スマホ片手にひたすら入力します。【スマホの操作】キャラクター選択→【スマホの操作】ステータス画面表示→【PCの操作】spreadsheet入力→(以後繰り返し)で1データ30秒、全150データを入れるには失敗時のやり直しも含めて2時間くらいかかりました。防御貫通率算出のプログラム作成いよいよ本番の防御貫通率算出のプログラム作成です。Driveをマウントします。spreadsheetから直接データロード下記の手順でデータを取り込んでいたのですが、データの入力→プログラムの実行を何度も繰り返していると、楽をしたくなりました。Colabから直接spreadsheetを扱うため、gspreadの使用を組み込みます。Colabは標準ではgspreadのライブラリがインストールされていません。下記のコマンドでgspreadをインストールします。Colabからspreadsheetに直接アクセスするには認証情報が必要となります。下記を実行し、クレデンシャルを取得します。機械学習のプログラミングは初めてで、どのモデルを使えばいいのかさっぱりわかりませんでした。sckit-learnのチートシートのフローをたどり、なんとなくスタンダードな線形回帰モデルで分析することにしました。list(map(int,input().split()))clf.predict([get_value])実行結果した結果、正答率が低く、実データと予測値も乖離しています。1651array([41.88932495])分析前にデータをべき変換データを増やしても(150→188)正答率や予測値の精度があがらないため、何かがおかしいと気付きました。入門を参照してみたところ、以下の記載がありました。処理を訓練を開始する前にデータセットに対して行うことです。手法やデータに合わせた前処理が必要となるため、適切な前処理を行うためには手法そのものについて理解している必要があるだけでなく、使用するデータの特性についてもよく調べておく必要があります。いった指標ごとに大きく異なっています。おこなってみましょう。防御貫通率の計算で使用する2つのデータ(「レベル(level)」は144〜180、「防御貫通値(value)」は60〜7318)も上記と同様に値の範囲が異なっています。正答率と予測値の精度をあげるため、ドキュメントにならってべき変換を入れてみることにしました。list(map(int,input().split()))clf.predict(scaler.transform([get_value]))実行結果した結果、正答率が高く、実データも予測値と近くなりました。下記がコードの最終形態です。list(map(int,input().split()))clf.predict(scaler.transform([get_value]))下記が最終形態のコードの実行結果です。最後に今までは書籍に書いてある難しい数式で早々に挫折してしまい、実際のプログラミングまではやっていませんでした。やってプログラムするの?なんで数学が必要なの?そもそも機械学習ってなに?ディープラーニングとどう違うの?何からやればいいんだー!そもそも、そんな大量のデータもってないよ!作り始めた頃は、上記のような感じでさっぱりでした。作り終わった後、「データの前処理で何をするか(べき変換など)」と「何のモデル(線形回帰モデルなど)を使うのか」が大事だとわかりました。それらを判断するには数学の知識がやっぱり必要なんだと痛感しました。ゴールのシュミレーターはもっと強敵です。時間がかかっても、一歩ずつ着実に必要な知識を身に着け、完走したいと思います。Learningsckit-learnとTensorFlowによる実践機械学習1キャラクターを無課金でフル強化する場合、1年程度かかります。お金で解決しようとすると数万円かかります。↩ゲームをやめるのが一番削減できる、という話もあります。後述のgspreadの使用によりこの手順は後々不要になりましたが、備忘録として残しておきます。本拠を置くITコンサルティング会社です。技術的な知見に基づいて技術案件から上流案件まで幅広くご支援しています。upLoginユーザーは見つかりませんでした。