📉

【Roblox】Analytics(2)~Funnel Events、カスタムフィールドについて~

2024/11/22に公開

はじめに

前回は、ダッシュボードから確認できるAnalyticsで自身でイベントを追加して追跡する方法について紹介しました。
また、例としてEconomyEventsについて解説しました。

今回はFunnelEventsについて紹介します。

前回の記事を見ていない方は、こちらのリンクから見ることができます。
理解が深まると思うのでぜひご覧ください!
https://zenn.dev/landho_roblox/articles/73d0bbb45de51a

Robloxバージョン 0.641.2.6410741

Funnel Events

EconomyEventsは主にゲーム内のゴールドやコインなどの経済を計測、追跡するイベントでした。
FunnelEventsはゲーム内のユーザーの進行状況を計測、追跡するイベントです。
具体的には下記を追跡できます。

  • Onboarding - ユーザーはエクスペリエンスを始めるとき、どこで離脱するか。
  • Progression - ユーザーはどこでエクスペリエンスの進行を停止するか。
  • Shop - ユーザーはどこで購入を中止するか。

エクスペリエンスでファネルイベントの追跡が開始されると、クリエイターハブの分析ダッシュボードのファネルページのロックが解除されます。

ワンタイムファネルの追跡

ユーザーごとに1度きりのイベントを監視する場合はAnalyticsService:LogOnboardingFunnelStepEvent()を使用します。

local AnalyticsService = game:GetService("AnalyticsService")

AnalyticsService:LogOnboardingFunnelStepEvent(
    player,
    1,
    "Joined Game"
)

AnalyticsService:LogOnboardingFunnelStepEvent(
    player,
    2,
    "Choose Class"
)

AnalyticsService:LogOnboardingFunnelStepEvent()の引数は以下です。

説明
player Player イベントをトリガーしたプレイヤー。
step number ファネル内のステップ数。ファネル内のステップごとに一意の数値である必要がある。(1~100)スキップした場合は中間の手順は完了したとみなされる。
stepName string ファネル内のステップのオプション名。チャートの表示で使用される。
customFields Dictionary チャートの内訳を提供するカスタムフィールドのオプション。エクスペリエンス毎に3つのカスタムフィールドにわたる値の一意の組み合わせは8000個に制限される。

使用例としては主にOnboardingファネルにあたります。
ユーザーがどこで離脱しているかを監視することで、プレイ時間の見直しを検討することができます。

定期的に呼ばれるファネル

ユーザーごとに複数回発生するイベントを監視するには
AnalyticsService:LogFunnelStepEvent()を使用します。

local AnalyticsService = game:GetService("AnalyticsService")
local HttpService = game:GetService("HttpService")

funnelSessionId = HttpService:GenerateGUID()

AnalyticsService:LogFunnelStepEvent(
	player,
	"ArmoryCheckout",
	funnelSessionId,
	1,
	"Opened Store"
)

AnalyticsService:LogFunnelStepEvent(
	player,
	"ArmoryCheckout",
	funnelSessionId,
	2,
	"Viewed Item"
)

AnalyticsService:LogFunnelStepEvent(
	player,
	"ArmoryCheckout",
	funnelSessionId,
	3,
	"Added to Cart"
)

AnalyticsService:LogFunnelStepEvent()の引数は以下です。

説明
player Player イベントをトリガーしたプレイヤー。
funnelName string ファネル名。同じファネル内のすべてのステップで共通である必要がある。エクスペリエンス毎の固有のファネルは10個までに制限される。
funnelSessionId string ファネルセッションのオプションの一意の識別子。同じファネル内のすべてのステップで共通である必要がある。購入フローファネルやアイテムアップグレードファネルなどの複数回呼ばれる可能性があるファネルにのみ必要。自然なファネルセッションIDがない場合は、HttpService:GenerateGUID()を使用するとよい。
step number ファネル内のステップ数。ファネル内のステップごとに一意の数値である必要がある。(1~100)同じファネルセッションで同じユーザーが繰り返し実行したステップ、またはfunnelSessionIdがnilの場合は無視される。いずれかの手順でスキップした場合は中間の手順は完了したとみなされる。
stepName string ファネル内のステップのオプション名。チャートの表示で使用される。
customFields Dictionary チャートの内訳を提供するカスタムフィールドのオプション。エクスペリエンス毎に3つのカスタムフィールドにわたる値の一意の組み合わせは8000個に制限される。

上記のコードはストアを開き、アイテムを表示し、アイテムをカートに入れたという動作を追跡するコードです。
このようなショップファネルなどを追跡することで、エクスペリエンスの収益などを改善させるきっかけになります。


この際、単一のセッションで複数回ショップを開くなどした場合と、同じユーザーの異なるセッションと区別する場合にfunnelSessionIdを設定します。
HttpService:GenerateGUID()を使用することで簡単に一意の識別子を実装できます。

またアイテムのアップグレードなど、通常のセッションよりも長い時間アクセスした場合などは
funnelSessionIdを使用して区物することもあります。
この際は playerId - itemIdのようなアイテムに基づいて一意のキーを設定するとよいです。

FunnelEvents いろいろな状況

ステップを繰り返した場合

ユーザーがステップを繰り返した場合、ファネルではそのステップの最初のインスタンスのみ考慮されます。
同じファネル内でステップ2を2回繰り返した場合、1回目のみ記録、カウントされます。

ステップをスキップした場合

何らかの理由でファネル内のステップをスキップした場合、それよりも前のステップは自動で完了します。
例えば、1,2,3のステップがあった時、3を完了したとします。
この場合1と2のステップはすでに完了したものとみなされます。

ファネルフィルターの使用

Robloxはファネルデータを分析するために役立つフィルタを用意しており、その中にはプレイヤーのデータやデバイスデータなども含まれます。
例えば、ゲームをプレイ中にモバイル端末からPCに変更した場合など、ファネルの途中でプレイヤーのステータスが変更する場合があります。

ファネルの2重カウントを避けるために、フィルタは必ず最初のステップのみに適用されます。
先ほどの例の場合、ファネルはモバイル端末に帰属することになります。

またファネル計測中に日にちを跨ぎ次の日に完了した場合も、ファネルは前日に帰属します。

Custom Fieldsについて

前回と今回でEconomyイベント、Funnelイベントを学びました。
それぞれ計測するメソッドの引数にDictionary型のcustomFieldsがあったと思います。

これを設定することで、エクスペリエンスに固有の独自のディメンションを設定してフィルタすることができます。

設定するのはEnum.AnalyticsCustomFieldKeysをキー、フィルタ用の文字列型をテーブルとして設定します。
1つのイベントで3つまで設定することができ、8000個までペアの組み合わせを作成できます。
https://create.roblox.com/docs/reference/engine/enums/AnalyticsCustomFieldKeys

下記が例です。

AnalyticsService:LogEconomyEvent(
	player,
	Enum.AnalyticsEconomyFlowType.Source,
	"Gold",
	addAmount,
	currentAmount,
	Enum.AnalyticsEconomyTransactionType.Gameplay.Name,
	"Add Gold",
	{
		[Enum.AnalyticsCustomFieldKeys.CustomField01.Name] = "Category - Gold",
		[Enum.AnalyticsCustomFieldKeys.CustomField02.Name] = "Where - GoalFlag",
		[Enum.AnalyticsCustomFieldKeys.CustomField03.Name] = "Level - 10",
	}
)

独自にフィルタリングさせたい場合は、カスタムフィールドを使用しましょう。

まとめ

  • ユーザーの進行状況を計測、追跡する場合はFunnelEventsを使用する。
  • 一度きりのイベントを追跡する場合は、AnalyticsService:LogOnboardingFunnelStepEvent()を使用する。
  • 複数回呼ばれるイベントの場合は、AnalyticsService:LogFunnelStepEvent()を使用する。
  • ほかのセッションと区別をつけたい場合はfunnelSessionIdを設定する。
  • カスタムフィールドを設定することで、独自のフィルタを設定することができる。

今回はFunnelEventsについて紹介しました。
ユーザーの進行状況を計測することで、新規ユーザーの維持率や離脱箇所の発見に役立つと思います。

ユーザーの進行状況を計測、追跡して居心地のいいゲームを作成しましょう!!

参考

https://create.roblox.com/docs/production/analytics/event-types
https://create.roblox.com/docs/reference/engine/classes/AnalyticsService
https://create.roblox.com/docs/reference/engine/enums/AnalyticsCustomFieldKeys

ランド・ホー Roblox開発チーム

Discussion