[レポート] 機械学習を用いたプレイヤーのチート検出 #AmazonGameTech #AmznGameTechJP

2019.11.20

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

機械学習を用いたプレイヤーのチート検出

2019年11月20日(水)にアマゾン目黒オフィスでアマゾンウェブサービス社の自社イベント「Amazon Game Developers Conference」が開催されました。

本記事は、セッション「機械学習を用いたプレイヤーのチート検出」をレポートします。

スピーカー

アマゾン ウェブ サービス ジャパン株式会社 ソリューションアーキテクト 保里 善太さん

セッション概要

セッション紹介ページ からの引用です。

ゲーム内のチート行為は大変厄介なものです。また、これらの行為の検出も人出のかかる作業となります。機械学習を用いてある程度チート検出が自動化できたらどんなに効率的なことでしょう。このハンズオンでは、2次元マップ上を行動するユーザーの行動ログを収集し、マップ外や移動が不可能なところを移動するなど疑わしいユーザーの行動を異常検出する仕組みを学びます。異常検出には、SageMakerのBuilt-inアルゴリズムを使用した機械学習による方法を用います。

レポート

アジェンダ

  • 概要
  • アーキテクチャ
  • Dat Lake
  • データの準備
  • データの分析
  • 結果

概要

  • 2Dゲームの二次元マップを仮定する
    • マップのセルは2種類
    • 通行可
    • 通行不可
    • マップの範囲外もNG
    • 20,043人のUU登録データ
    • ユーザの行動ログもリアルタイムに取得している
    • 4000万レコードの行動ログにエントリがある
    • ユーザのX,Y座標を行動履歴として記録
    • およそ0.1%の行動が疑わしい
  • 問題
    • map hackをしているユーザがいることがわかっている
    • game play log, player profileなど他のログを取得してる
    • 行動ログを用いてどのユーザが問題行動を起こしているか自動的に検知したい

行動ログ

  • ユーザがゲーム内でどういう行動をしたかを表す
    • プレイヤーの識別子
    • 移動する前の位置情報
    • 移動した後の位置情報
    • イベント発生日時

アーキテクチャ

  • データの収集 (2経路)
    • DDB → Lambda → Kinesis Firehose → S3
    • プレイヤーデータなど
    • EC2 → Kinesis Firehose → S3
    • ユーザの行動ログ (ゲーム内の情報)
  • 分析
    • GlueのクローラでS3のデータを収集
    • GlueのETLジョブで分析用のデータを作成
    • SageMakerでは分析用のデータを使ってtrain/inferする

データレイク

  • 多様なデータを一元的に管理
  • データを失わない
  • サイズ制限からの開放
  • 決められた方法(API)ですぐにアクセスできる
  • システム全体のハブにする
  • AWSのデータレイク = Amazon S3

データの準備

  • 今回は機械学習で必要な特徴量を抽出するためにGlueを使う
  • データカタログ
    • Hiveメタストア五感のデータソース用メタデータリポジトリ
    • テーブル、データ型、パーティションフォーマットを推測するためにソースをクロール
    • Redshift Spectrum, Athena, EMRのカタログとしても利用・連携可能
  • ジョブ
    • ETL処理のためのPythonコード(PySpark)、Scala、Python Shellを生成
    • DPUでパフォーマンスを定義
    • 任意のIDEでコードを作成可能
    • 分散処理でジョブを実行
    • サーバレス・利用したリソース分だけのお支払い
    • マネージドなJupyter Notebookを使える

データの分析

  • Amazon SageMakerを使う
  • 機械学習システムでよくある問題を解消
  • データサイエンティストやエンジニアが素早くプロセスを回せるようにする
  • 比較的簡単に利用できる18種類のビルトインアルゴリズムがある
  • 今回は疑わしいユーザの行動を特定するために時系列の外れ値を検出する
    • Random Cut Forrest algorithmを利用する
  • AL/ML/機械学習には継続的なフィードバックとデータ分類が必要

Random Cut Forrestについて

  • 異常なデータポイントを検出する教師なし機械学習のアルゴリズム
  • RCFは任意の次元入力で機能するように設計されている
  • 各データポイントに対して異常スコアを割り当てる
  • 異常スコアの値が
    • 低ければ通常データ
    • 高ければ異常あり
  • 正常/異常の閾値は異常スコアの平均値と標準偏差を算出し、3σ以上のデータを異常とみなすことが多い
  • ハンズオンではもうすこし緩めにする
  • 今回は二次元マップを利用するが、ゲーム内通貨や経験値など他の項目でも同じ手法を適用できる

ハンズオン

  • ハンズオン用のCloudFormationスタックテンプレートを使って構築
  • 要所要所で理解を深めるために手作業で構築するリソースあり
    • 生データから分析用データを用意するところ
    • Glueのクローラで生データのデータカタログを生成
    • Glueジョブで分析用データを生成
    • SageMakerのエンドポイントを作成
    • Jupyter Notebookを使ってトレーニング/推論

まとめ

以前ゲーム開発していたときにチート対策を行ったことがあるんですが、そのときは被害の傾向やデータの異常値をもとに人力でデータを分析していました。チートの手口や内容に応じて分析するのは大変だったことをよく覚えています。

今回はハンズオンセッションだったこともあり、どういうことが出来そうか具体的にイメージしやすかったです。機械学習を上手に活用することで、ゲームの開発・運営の効率化に繋げられると良いですね!