Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

難易度ボラタリティグラフという分析手法

IGDA日本 ゲームサーバ勉強会 #7で話しました。
「難易度ボラタリティグラフ」という、心理学と統計を組み合わせた、ゲームにおける難易度調整手法です。

Audiolibros relacionados

Gratis con una prueba de 30 días de Scribd

Ver todo
  • Sé el primero en comentar

難易度ボラタリティグラフという分析手法

  1. 1. 難易度ボラタリティグラフ という分析手法 IGDA日本 ゲームサーバ勉強会 #7 https://techplay.jp/event/638904 中山ところてん
  2. 2. お前誰よ • ところてん • @tokoroten • プログラマ、分析屋、ゲーム屋 • 情報処理学会・社団法人未踏 • 経歴 • 半導体計測機研究開発 • 電子透かし、フィッシングサイト検出 • マルウェア解析、ハニーポット運用、VMMいじり • 広告分析、ゲーム分析、ゲームデザイナ、ゲームディレクター • ECサイトの分析、行動経済学、機械学習 • 独立して社長業 • 会社作った • 傭兵業で外貨稼ぎ • ゲームディレクタ・ゲームデザイナ、半導体計測機開発、機械学習コンサル • お仕事募集中
  3. 3. 最近遊んでいるゲーム
  4. 4. 本が出るよ • 仕事ではじめる機械学習
  5. 5. なぜデータ分析の話をするのか • サーバ・インフラはデータ分析に最も近い • サーバに触れる=全部のデータが見える • データ分析部門がない会社では、インフラ部門がデータ分析を必然的 に担うことになる • とりあえず分析してみるだけなら、SQL一発で行けることが多い • 覚えておいて損はない • アレなディレクターを殴り殺そう
  6. 6. この発表について • 学会で話した内容の焼き直し • 第56回プログラミングシンポジウム 「オンラインゲームにおけるゲームバランスの調整手法の提案」 • 本番データが使えないのでシミュレーション • とあるタイトルでは、本番利用しました • シミュレーションは眠い内容なので、無視してOK
  7. 7. オンラインゲームの課題 • ゲームバランスの重要性が非常に高い • 家庭用では買った後にゲームバランスが評価される • F2Pオンラインゲームでは、ゲームを遊んだ後に面白かったら課金 する • F2Pオンラインゲームは常にアップデート • 最強の武器防具を手に入れたプレーヤーは、それ以上やることが なくなる • =ゲームに課金しなくなる • アップデートでゲームバランスが壊れる • 常に修正し続けなければ収益が悪化する • バランス調整の効率化が必要
  8. 8. 先行研究:MDAフレームワーク • ゲームデザインを三層に分解して考える • Mechanics (データ、アルゴリズム) • Dynamics (発生する現象) • Aesthetics(生成される感情) Mechanics Dynamics Aesthetics ①どのような現象が 面白いと感じられる のか? ②どのようなルール やパラメータにする と、目的とする現象 が得られるのか? ③意図した現象は 生まれているの か? ④意図した感情は 得られているの か?
  9. 9. 先行研究:MDAフレームワーク • MDAフレームワークの特徴・課題 • Aesthetics(感情)から順に定義するので、ゴールがブレない • 仕様書やソースコードはMechanicsに相当 • 面白さのためには、仕様を曲げてもよい、となる • 課題 • 分析者によって得られる結論が異なる • ゲーム開発におけるワークフロー、マインドセットなので、システ ム化できるわけではない
  10. 10. 先行研究:Machination • Machination • ダイアグラムによる、リソース変換記述言語 • ゲームとは、複数種類のリソースを変換して、 目的に到達するものと定義 • ゲーム内で獲得、変換するリソースを記述することで、ゲームが正常に 回ることをシミュレーションする • 「ゲームメカニクス」というタイトルで解説本が出てます
  11. 11. 先行研究:Machination • 課題 • ゲーム内の経済が回ることは検証できるが、 面白いことは検証できない • MachinationはMDAフレームワークにおけるM→Dをシミュレーショ ン • Aの正しさまでは検証できない • アクション性の検証はできない • マリオはリソース変換で記述できない
  12. 12. 本提案の狙い • 心理学と統計学、ゲームデザインを融合 • 心理学によりAestheticsとDynamicsを定義 • どのような現象が発生していると、人は面白いと感じるのか • 統計学により、運用中のゲームからDynamicsを計測する • オンラインゲームは数万人のプレーヤが毎日プレイ • 統計情報を分析することで、Dynamicsが実現出来ているかを確認する • AIによるテストプレイが発達すれば、運用前からAIによるテストプレイでバランス調整が行える • AI時代を見据える • AIによるテストプレイが発展すれば、そのログから分析可能 • リリース前からAIによるバランス調整が行える
  13. 13. 今回ターゲットとするゲーム • ステージクリア型のゲームを対象 • パズドラ、モンスト、etc… • クリア済みのステージはいつでも再挑戦可能 • クリアできなかったら過去のステージでレベル上げ可能 • プレーヤースキルを、ゲーム内リソースで補えるもの • 対象としないゲーム • ハースストン、シャドーバースのような、TCG • レベル上げ要素が存在しないゲーム • プレーヤースキルを、ゲーム内リソースで補えないもの
  14. 14. ゲームにおける「面白い」とは何か • 面白い=フロー体験 • プレーヤースキルとチャレンジの難易度がかみ合っている状態
  15. 15. フロー体験の条件 1. 達成できる見通しのある課題に取り組んでいる 2. 自分がしていることに集中できている 3. 行われている作業に明瞭な目標がある 4. 直接的なフィードバックがある 5. 深いけれども無理のない没入状態である 6. 自分の行為を統制しているという感覚を伴う 7. 作業中は自己についての意識は消失する 作業後は自己についての意識は明瞭になる 8. 時間の感覚が変わる
  16. 16. 退屈なゲーム、不安なゲーム • 退屈なゲーム • 敵が弱すぎて絶対に勝てる • 新しい体験が起こらない • 学習が回らない • 不安なゲーム • 敵が強すぎて絶対に勝てない、ストレス • 勝利の目が見えない • どうしていいか分からない • 学習が回らない • 「おもしろいのゲームデザイン」にも同じ話が
  17. 17. フロー体験が発生するゲーム • フローの条件の一部 • 直接的なフィードバックがある • 深いけれども無理のない没入状態である • 自分の行為を統制しているという感覚を伴う • 集中力を欠いたプレイでは失敗する状態 • ゲームの勝率が高すぎず、低すぎない状態 • フロー状態は勝率で定義できる、と仮定する
  18. 18. フロー理論と勝率のマッピング 勝率100% 勝率0% 勝率10%~90%くらい?
  19. 19. ゲームにおけるフロー体験の適応 • フロー理論のスキル軸はゲーム内資産で補える • ゲーム内のキャラクターの成長がフローを阻害することもある • ガチャがゲームをクソゲーにすることも
  20. 20. フロー体験の図をゲーム用に修正 • 強さ=ゲーム内資産+運+スキル • 計測しづらい • チャレンジ=ステージの難易度 • 多次元なので、定量化しづらい
  21. 21. 難易度ボラタリティグラフの提案 • 計測可能なものに軸を変換する • 横軸、ゲーム内資産 • パーティーのATKの合計値等の疑似的な値を利用する • 縦軸、勝率 不安 退屈 フロー ゲーム内資産 勝率 強さ ス テ ー ジ 難 易 度 =ゲーム内資産+運+スキル キリトル
  22. 22. 難易度ボラタリティグラフの特徴 • 動いているゲームのログから簡易に生成できる • ステージの難易度が間接的に計測可能 • ステージ難易度=勝率が50%になる点におけるゲーム内資産 • ボラタリティの大きさ=プレーヤースキルの寄与度合 不安 退屈 フロー ゲーム内資産 勝率 ステージの難易度 ボラタリティ
  23. 23. ボラタリティが大きすぎる • プレーヤースキルが、勝敗に影響しない • 運ゲーで面白くない ゲーム内資産 勝率
  24. 24. ボラタリティが小さすぎる • プレーヤースキルが、勝敗に影響しない • 課金ゲーで面白くない • フロー体験を提供できるユーザが少ない ゲーム内資産 勝率
  25. 25. ステージ間の比較に利用する • 二つの連続するステージ間のボラタリティの重複領域を調べる • 重複領域が存在しない場合、そのゲームにおいてフローが感じられない領域が生 まれてしまう • 勝率100%のステージと、勝率0%のステージしか供給されていない場合、ユーザ は離脱してしまう ゲーム内資産 勝率
  26. 26. 仮想ゲームによるシミュレーション • TRPG風のゲームを想定する • x+2D6≧s でクリアとなるゲーム • x ゲーム内の資産 • 2D6 6面ダイス*2 (運+プレーヤースキルを表現) • S ステージの難易度 • 架空のプレーヤをゲームに投入し、何%のプレーヤがゲー ムを継続して遊んだかを調査する • n=10000 26
  27. 27. 仮想ゲームによるシミュレーション • x+2D6≧s でクリアとなるゲーム • S=15、xを変化させたグラフ 27 0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100% 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 勝率 ゲーム内資産 X
  28. 28. プレーヤーのモデリング • 架空のプレーヤーに遊ばせることで、難易度ボラタリティグラフを検証する • 100回連続でゲームをプレイ • 10回連続で勝利->退屈なゲームなので、ゲームをやめてしまう • 10回連続で敗北->不安なゲームなので、ゲームをやめてしまう • 勝率50%程度くらいの領域が一番ゲームを継続する 28 0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100% 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ゲーム内資産 X 勝率 生存率
  29. 29. ステージの難易度上昇と成長 • ゲームの難易度は上昇する • 3回連続勝利で、次のステージが解放 • sを3上昇させる、初期値7 • プレーヤのゲーム内資産xも上昇する • 勝利時に確率rでxが1成長、xの初期値0、r=0.6で最大 29 0.0% 10.0% 20.0% 30.0% 40.0% 50.0% 60.0% 70.0% 80.0% 90.0% 100.0% 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 勝率 ゲーム内資産x s=7 s=10 s=13 s=16 s=19 s=22 0% 5% 10% 15% 20% 25% 30% 35% 40% 45% 50% 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 継続率 成長確率r
  30. 30. シミュレーション環境まとめ • x+2D6≧s で勝利となるゲーム • x 初期値0、勝利時0.6の確率で1上昇 • s 初期値7、3回連続勝利で3上昇 • 10回連続勝利、10回連続敗北でユーザは離脱 • 100回連続プレイ時のユーザ継続率を評価 • sの設定を変えて、シミュレーション • レベルデザインを難易度ボラタリティグラフを用いて可視化し、 生存率と比較検討する 30
  31. 31. 難易度上昇が急過ぎる場合 • S=16のステージを除外する • 難易度上昇が急激になるため、S=19での敗北が増加、 ゲームからユーザが抜けてしまう 0.0% 10.0% 20.0% 30.0% 40.0% 50.0% 60.0% 70.0% 80.0% 90.0% 100.0% 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 勝率 ゲーム内資産x s=7 s=10 s=13 s=16 s=19 s=22 0.0% 10.0% 20.0% 30.0% 40.0% 50.0% 60.0% 70.0% 80.0% 90.0% 100.0% 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 勝率 ゲーム内資産x s=7 s=10 s=13 s=19 s=22
  32. 32. 難易度上昇がぬる過ぎる場合 • S=14,15,17,18のステージを追加する • 難易度上昇が緩すぎるため、ユーザの成長速度に対して、難 易度上昇が追い付かず、適切な難易度をユーザに提供でき ず、離脱する 0.0% 10.0% 20.0% 30.0% 40.0% 50.0% 60.0% 70.0% 80.0% 90.0% 100.0% 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 勝率 ゲーム内資産x s=7 s=10 s=13 s=16 s=19 s=22 0.0% 10.0% 20.0% 30.0% 40.0% 50.0% 60.0% 70.0% 80.0% 90.0% 100.0% 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 勝率 ゲーム内資産x s=7 s=10 s=13 s=14 s=15 s=16 s=17 s=18 s=19 s=22
  33. 33. ファネル分析との併用 • ファネル分析によりユーザが離脱する箇所と、難易度ボラ タリティグラフを突合 • 離脱が多い箇所の難易度ボラタリティグラフのステージ密度か ら、難易度調整の適切性を判断可能 0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100% 7 10 13 16 19 22 25 28 31 34 37 40 ステージの難易度s 生存率 生存率(s=16を除外) 生存率(s=14,15,17,18,20,21を追加) 0% 10% 20% 30% 40% 50% 60% 70% 7 10 13 16 19 22 25 28 31 34 37 40 ステージの難易度s 離脱率 離脱率(s=16を除外) 離脱率(s=14,15,17,18,20,21を追加)
  34. 34. ヒートマップによる可視化 • 5つ以上のステージの難易度比較に、難易度ボラタリティグラフは不適当 • 難易度が前のステージよりも低いステージは区別がつかない • 難易度ボラタリティグラフをヒートマップで可視化する • 横軸:ゲーム内資産x、縦軸:ステージ番号、濃淡:勝率 • ボラタリティ領域の重複が一目でわかる • バランス崩壊している過剰に難しいステージや、過去のステージよりも簡単なステー ジが可視化可能 x=0 x=1 x=2 x=3 x=4 x=5 x=6 x=7 x=8 x=9 x=10 x=11 x=12 x=13 x=14 x=15 x=16 x=17 x=18 x=19 s=7 59.6% 71.8% 82.4% 91.0% 97.1% 100.0% 100.0% 100.0% 100.0% 100.0% 100.0% 100.0% 100.0% 100.0% 100.0% 100.0% 100.0% 100.0% 100.0% 100.0% s=10 16.8% 28.3% 41.6% 58.5% 72.3% 83.3% 91.7% 97.1% 100.0% 100.0% 100.0% 100.0% 100.0% 100.0% 100.0% 100.0% 100.0% 100.0% 100.0% 100.0% s=13 0.0% 2.9% 8.3% 16.6% 28.1% 42.4% 58.2% 71.7% 83.5% 91.9% 97.4% 100.0% 100.0% 100.0% 100.0% 100.0% 100.0% 100.0% 100.0% 100.0% s=16 0.0% 0.0% 0.0% 0.0% 2.9% 8.4% 16.2% 27.9% 41.9% 58.2% 71.9% 83.6% 92.0% 97.3% 100.0% 100.0% 100.0% 100.0% 100.0% 100.0% s=19 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 2.6% 8.8% 16.4% 27.9% 40.8% 58.7% 72.6% 84.0% 91.4% 97.3% 100.0% 100.0% 100.0% s=17 0.0% 0.0% 0.0% 0.0% 0.0% 2.7% 8.4% 17.0% 27.6% 41.1% 59.2% 72.2% 83.5% 91.8% 97.4% 100.0% 100.0% 100.0% 100.0% 100.0% s=22 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 2.7% 7.9% 16.5% 27.6% 41.2% 58.1% 72.2% 83.8% 97.2% 100.0%
  35. 35. まとめ • フロー理論をステージクリア型の オンラインゲームに合わせて変換 • スキル=ユーザスキル+ゲーム内資産+運 • チャレンジ=ステージの難易度 • 難易度ボラタリティグラフを提案 • 横軸:ゲーム内資産、縦軸:勝率 • オンラインゲームのログから容易に描くことができる • ゲームの性質に依存しないで、ゲームバランス可視化が可能
  36. 36. おまけ:細かい分析手法いろいろ • ステージ継続率曲線と、ファネル分析 • 強さ分布曲線の時間変化 • ランキングの報酬設計手法 • データ分析のためのDB構造をどうするか
  37. 37. ステージ継続率曲線、ファネル分析 • ステージ継続率曲線 • 一般に継続率というと、横軸に日数をとる • 一般的な継続率曲線は、収益予測には使えるが、ゲーム改善には利用できない • ステージ継続率曲線では、横軸にステージIDをとる • ゲーム離脱ユーザに限定して描くとより鮮明になる(ラストログイン等で絞る) • 「スタミナ切れで止まっている」ユーザを除外、「飽きたからやめた」ユーザに限定 継続率 ステージID リセマラ離脱 2回目の10連ガチャでのリセマラ離脱
  38. 38. ステージ継続率曲線、ファネル分析 • ステージ継続率曲線をステージ間離脱率に変換する • ステージ間離脱率(s) = 1 - クリア人数s/クリア人数s+1 • リセマラ領域以外でピークが立って居る場所を探し、ユーザの離脱要因を考える 継続率 ステージID ステージID ステージ間離脱率 !? 難易度が高すぎる? シナリオが面白くない? 同じようなステージが続いている? ここで離脱したユーザを詳細に調べる
  39. 39. おまけ:細かい分析手法いろいろ • ステージ継続率曲線と、ファネル分析 • 強さ分布曲線の時間変化 • ランキングの報酬設計手法 • データ分析のためのDB構造をどうするか
  40. 40. 強さ分布曲線 • 強さをベースとしたヒストグラム • 理想的なユーザ分布は下図のようになる インストール直後 強さ 人数
  41. 41. 強さ分布曲線 • ゲーム内リソース不足 • これ以上強くなれないユーザが増えてきている • やることが無いので、超優良顧客が離脱する • コンテンツの追加タイミングを測ることが出来る 強さ 人数
  42. 42. 強さ分布曲線 • 一週間程度の時間をおいて分布を確認する • 山が右側にシフトしていれば、プレーヤーが成長できているため、問題ないと判断する • 特定の強さのセグメントが減っていないか確認する 強さ 人数 インストール不足からくる 下位層の減少 ミドル層の成長 上位層の成長と飽和
  43. 43. 強さ分布曲線 • 末期のゲームの分布 • 報酬ばらまきで分布が固まる • 上位層はコンテンツ不足で飽和徐々に離脱 • 新規インストールしても上位層にしかコンテンツが提供されないため離脱 強さ 人数 ゲームコンテンツ提供領域 ゲームコンテンツが提供されないた め、新規ユーザが遊ぶものがない
  44. 44. おまけ:細かい分析手法いろいろ • ステージ継続率曲線と、ファネル分析 • 強さ分布曲線の時間変化 • ランキングの報酬設計手法 • データ分析のためのDB構造をどうするか
  45. 45. ランキングの報酬設計手法 「仕事ではじめる機械学習」 の中でのコラムで触れています
  46. 46. ランキングの報酬設計手法 • 報酬が存在しない場合のランキング、課金分布 • イベントでランキングがあったと仮定してグラフを作る • 実際はこんなキレイな曲線にはならないので、 10位ごとの平均値などで均すとよい 課金額 順位
  47. 47. ランキングの報酬設計手法 • ある順位以上に報酬を出すようにした場合 • ランキング境界付近の課金額が持ち上がる • あと少しで報酬がもらえる、というところで競争が生まれる 課金額 順位 報酬境界
  48. 48. ランキングの報酬設計手法 • ランキング境界による持ち上がりがオーバーラップしないように、ランキング境界を切っていく • ランキングが適切に設計できると、オレンジ線のような歪みが生まれる • 曲線が歪んでいないのであれば、ランキングイベントの設計が失敗している • オレンジ線-灰色線=ランキングの効果 課金額 順位
  49. 49. ランキングの報酬設計手法 • ランキング=オークションシステムだと考える • 配布物の価値=ランキングのボーダーラインの課金額 • レアカードであれば、そのレアカードの価値が決定する • ユーザはガチャを回すよりも安いから、イベントに参加していると仮定する • イベント課金額が下がってきているのであればカードの強さ、絵柄が足りない • ガチャでの排出期待値と比較して、ランキングの価値が適当かどうかを考える • カード価値が下がってきていると分かったら、インフレさせることを考える 課金額 順位 ランキング報酬で レアカード配布 ボーダーライン の課金額
  50. 50. おまけ:細かい分析手法いろいろ • ステージ継続率曲線と、ファネル分析 • 強さ分布曲線の時間変化 • ランキングの報酬設計手法 • データ分析のためのDB構造をどうするか
  51. 51. データ分析のためのデータ構造 • ゲームのデータ構造と、データ分析のデータ構造は違う • ゲームのデータは基本的にアップデートされる • レベル、所持金、所持アイテム… • データ分析のデータは、基本的にはログ • ~~~というイベントが起った瞬間のユーザのレベル、所持金、所持アイテム … • この違いを念頭に置いていないと、ログ設計で事故る • 過去のデータをどう保存するかが重要 • 基本的にjoinが必要なデータは全部joinして保存する • クエストに入った瞬間のデッキ情報等 • ユーザの所持金、経験値、アイテム情報等はデイリーで保存 • 全ユーザだと死ぬので、アクティブユーザのみの制約が必要 • 統計を取ると何のリソースがいつの時点で不足しているかが分かる

×