Skip to content

分析

Braze SDKの分析について学習し、Brazeが収集するデータ、カスタムイベントとカスタム属性の違い、分析を管理するためのベストプラクティスについて理解を深めましょう。

自動的に収集されるデータ

特定のユーザーデータはSDKによって自動的に収集されます。たとえば、初回アプリ使用日、最終アプリ使用日、合計セッション数、デバイスOSなどです。統合ガイドに従ってSDKを実装すると、このデフォルトのデータ収集を活用できます。このリストを確認することで、ユーザーに関する同じ情報を重複して保存することを避けられます。セッションの開始と終了を除き、その他の自動的にトラッキングされるデータはデータポイント使用量にカウントされません。

特定のデータ項目のデフォルト収集をブロックするプロセスを許可リストに追加する方法については、SDKの概要の記事を参照してください。

カスタムイベント

カスタムイベントはユーザーが実行するアクションであり、アプリケーションとの価値の高いユーザーインタラクションをトラッキングするのに最適です。カスタムイベントをログに記録すると、設定可能な遅延を持つ任意の数のフォローアップキャンペーンをトリガーでき、そのイベントの最新性と頻度に関する以下のセグメンテーションフィルターが有効になります。

セグメンテーションオプション ドロップダウンフィルター 入力オプション
カスタムイベントがX回を超えて発生したかどうかを確認する MORE THAN NUMBER
カスタムイベントがX回未満発生したかどうかを確認する LESS THAN NUMBER
カスタムイベントが正確にX回発生したかどうかを確認する EXACTLY NUMBER
カスタムイベントが最後にX日以降に発生したかどうかを確認する AFTER TIME
カスタムイベントが最後にX日より前に発生したかどうかを確認する BEFORE TIME
カスタムイベントが最後にX日以上前に発生したかどうかを確認する MORE THAN NUMBER OF DAYS AGO (正の数)
カスタムイベントが最後にX日未満前に発生したかどうかを確認する LESS THAN NUMBER OF DAYS AGO (正の数)
カスタムイベントがX回(最大50回)を超えて発生したかどうかを確認する MORE THAN 過去Y日間(Y = 1,3,7,14,21,30)
カスタムイベントがX回(最大50回)未満発生したかどうかを確認する LESS THAN 過去Y日間(Y = 1,3,7,14,21,30)
カスタムイベントが正確にX回(最大50回)発生したかどうかを確認する EXACTLY 過去Y日間(Y = 1,3,7,14,21,30)

Brazeは、これらのイベントが発生した回数と、各ユーザーが最後に実行した時刻をセグメンテーション用に記録します。Custom Events分析ページでは、各カスタムイベントの発生頻度を集計で確認できるほか、より詳細な分析のためにセグメント別に時系列で確認することもできます。これは、Brazeが時系列に重ねて表示するグレーの線(キャンペーンが最後に送信された時刻を示す)を確認することで、キャンペーンがカスタムイベントのアクティビティにどのような影響を与えたかを把握するのに特に役立ちます。

30日間にわたるクレジットカード追加と検索実行に関するユーザー統計を示すカスタムイベント分析グラフ。

カスタムイベントの保存

すべてのユーザープロファイルデータ(カスタムイベント、カスタム属性、カスタムデータ)は、それらのプロファイルがアクティブである限り保存されます。

カスタムイベントプロパティ

カスタムイベントプロパティを使用すると、Brazeではカスタムイベントと購入にプロパティを設定できます。これらのプロパティは、トリガー条件のさらなる絞り込み、メッセージングのパーソナライゼーションの向上、および生データエクスポートによるより高度な分析の生成に使用できます。プロパティ値は、文字列、数値、ブール値、または時間オブジェクトにすることができます。ただし、プロパティ値を配列オブジェクトにすることはできません。

たとえば、eコマースアプリケーションがカートを放棄したユーザーにメッセージを送信したい場合、ユーザーのカートのcart_valueのカスタムイベントプロパティを追加することで、ターゲットオーディエンスをさらに改善し、キャンペーンのパーソナライゼーションを強化できます。

カートを放棄し、カートの値が100を超え200未満のユーザーにキャンペーンを送信するカスタムイベントの例。

カスタムイベントプロパティは、メッセージングテンプレート内のパーソナライゼーションにも使用できます。トリガーイベントを使用したアクションベース配信を使用するキャンペーンでは、そのイベントのカスタムイベントプロパティをメッセージングのパーソナライゼーションに使用できます。ゲームアプリケーションがレベルをクリアしたユーザーにメッセージを送信したい場合、ユーザーがそのレベルをクリアするのにかかった時間のプロパティを使用して、メッセージをさらにパーソナライズできます。この例では、条件付きロジックを使用して、3つの異なるセグメントに対してメッセージがパーソナライズされています。time_spentというカスタムイベントプロパティは、 {{event_properties.${time_spent}}} を呼び出すことでメッセージに含めることができます。

1
2
3
4
5
6
7
{% if {{event_properties.${time_spent}}} < 600 %}
Congratulations on beating that level so fast! Check out our online portal where you can play against top players from around the world!
{% elsif {{event_properties.${time_spent}}} < 1800 %}
Don't forget to visit the town store between levels to upgrade your tools.
{% else %}
Talk to villagers for essential tips on how to beat levels!
{% endif %}

カスタムイベントプロパティは、メッセージングのパーソナライズや、きめ細かなアクションベース配信キャンペーンの構築に役立つように設計されています。イベントプロパティの最新性と頻度に基づいてセグメントを作成したい場合は、カスタマーサクセスマネージャーまたはサポートチームにお問い合わせください。

カスタム属性

カスタム属性は非常に柔軟なツールであり、標準属性よりも高い精度でユーザーをターゲティングできます。カスタム属性は、ユーザーに関するブランド固有の情報を保存するのに最適です。カスタム属性には時系列情報が保存されないため、カスタムイベントの前述の例のようなグラフは取得できない点にご注意ください。

カスタム属性の保存

すべてのユーザープロファイルデータ(カスタムイベント、カスタム属性、カスタムデータ)は、それらのプロファイルがアクティブである限り保存されます。

カスタム属性のデータ型

以下のデータ型をカスタム属性として保存できます。

文字列(英数字)

文字列属性は、お気に入りのブランド、電話番号、アプリケーション内での最後の検索文字列など、ユーザー入力を保存するのに便利です。文字列属性には、カスタムデータの長さ制限(479バイト、シングルバイト文字で約479文字、日本語などのマルチバイト文字で約160文字)が適用されます。

以下の表は、文字列属性で利用可能なセグメンテーションオプションを示しています。

セグメンテーションオプション ドロップダウンフィルター 入力オプション
文字列属性が入力された文字列と完全に一致するかどうかを確認する EQUALS STRING
文字列属性が入力された文字列または正規表現と部分的に一致するかどうかを確認する MATCHES REGEX STRING OR REGULAR EXPRESSION
文字列属性が入力された文字列または正規表現と部分的に一致しないかどうかを確認する DOES NOT MATCH REGEX STRING OR REGULAR EXPRESSION
文字列属性が入力された文字列と一致しないかどうかを確認する DOES NOT EQUAL STRING
文字列属性がユーザーのプロファイルに存在するかどうかを確認する IS BLANK N/A
文字列属性がユーザーのプロファイルに存在しないかどうかを確認する IS NOT BLANK N/A

配列

配列属性は、ユーザーに関する関連情報のリストを保存するのに適しています。たとえば、ユーザーが視聴した最新100件のコンテンツを配列に保存することで、特定の興味関心に基づくセグメンテーションが可能になります。

カスタム属性の配列は一次元のセットです。多次元配列はサポートされていません。カスタム属性の配列に要素を追加すると、その要素が配列の末尾に追加されます。ただし、すでに存在する場合は、現在の位置から配列の末尾に移動されます。たとえば、配列['hotdog','hotdog','hotdog','pizza']がインポートされた場合、一意の値のみがサポートされるため、配列属性には['hotdog', 'pizza']として表示されます。

配列が最大要素数に達している場合、最初の要素が破棄され、新しい要素が末尾に追加されます。以下は、Web SDKでの配列の動作を示すサンプルコードです。

1
2
3
4
5
6
var abUser = appboy.getUser();
// initialize array for this user, assuming max length of favorite_foods is set to 4.
abUser.setCustomUserAttribute('favorite_foods', ['pizza', 'wings', 'pasta']); // => ['pizza', 'wings', 'pasta']
abUser.addToCustomAttributeArray('favorite_foods', 'fries'); // => ['pizza', 'wings', 'pasta', 'fries']
abUser.addToCustomAttributeArray('favorite_foods', 'pizza'); // => ['wings', 'pasta', 'fries', 'pizza']
abUser.addToCustomAttributeArray('favorite_foods', 'ice cream'); // => ['pasta', 'fries', 'pizza', 'ice cream']

配列のデフォルトおよび最大要素数は500です。最大数はBrazeダッシュボードのデータ設定 > カスタム属性で更新できます。最大要素数を超える配列は、最大要素数に切り詰められます。

以下の表は、配列属性で利用可能なセグメンテーションオプションを示しています。

セグメンテーションオプション ドロップダウンフィルター 入力オプション
配列属性が入力された値と完全に一致する値を含むかどうかを確認する INCLUDES VALUE STRING
配列属性が入力された値と完全に一致する値を含まないかどうかを確認する DOESN’T INCLUDE VALUE STRING
配列属性が入力された値または正規表現と部分的に一致する値を含むかどうかを確認する MATCHES REGEX STRING OR REGULAR EXPRESSION
配列属性に値があるかどうかを確認する HAS A VALUE N/A
配列属性が空であるかどうかを確認する IS EMPTY N/A

日付

時間属性は、特定のアクションが最後に実行された日時を保存するのに便利で、ユーザーにコンテンツ固有のリエンゲージメントメッセージを提供できます。

相対日付を使用した日付フィルター(たとえば、1日以上前、2日未満前)は、1日を24時間として計算します。これらのフィルターを使用して実行するキャンペーンには、24時間単位のすべてのユーザーが含まれます。たとえば、「最後にアプリを使用したのが1日以上前」は、キャンペーンが実行される正確な時刻から「24時間以上前に最後にアプリを使用した」すべてのユーザーをキャプチャします。より長い日付範囲が設定されたキャンペーンでも同様です。つまり、アクティベーションから5日間は、過去120時間を意味します。

以下の表は、時間属性で利用可能なセグメンテーションオプションを示しています。

セグメンテーションオプション ドロップダウンフィルター 入力オプション
時間属性が選択した日付より前であるかどうかを確認する BEFORE CALENDAR DATE SELECTOR
時間属性が選択した日付より後であるかどうかを確認する AFTER CALENDAR DATE SELECTOR
時間属性がX日以上前であるかどうかを確認する MORE THAN NUMBER OF DAYS AGO
時間属性がX日未満前であるかどうかを確認する LESS THAN NUMBER OF DAYS AGO
時間属性がX日以上先であるかどうかを確認する IN MORE THAN NUMBER OF DAYS IN FUTURE
時間属性がX日未満先であるかどうかを確認する IN LESS THAN NUMBER OF DAYS IN FUTURE
時間属性がユーザーのプロファイルに存在するかどうかを確認する BLANK N/A
時間属性がユーザーのプロファイルに存在しないかどうかを確認する IS NOT BLANK N/A

数値

数値属性にはさまざまなユースケースがあります。インクリメント型の数値カスタム属性は、特定のアクションやイベントが発生した回数を保存するのに便利です。標準的な数値には、靴のサイズ、ウエストサイズ、ユーザーが特定の製品機能やカテゴリを閲覧した回数の記録など、あらゆる用途があります。

以下の表は、数値属性で利用可能なセグメンテーションオプションを示しています。

セグメンテーションオプション ドロップダウンフィルター 入力オプション
数値属性が数値より大きいかどうかを確認する MORE THAN NUMBER
数値属性が数値より小さいかどうかを確認する LESS THAN NUMBER
数値属性が数値と完全に一致するかどうかを確認する EXACTLY NUMBER
数値属性が数値と一致しないかどうかを確認する DOES NOT EQUAL NUMBER
数値属性がユーザーのプロファイルに存在するかどうかを確認する EXISTS N/A
数値属性がユーザーのプロファイルに存在しないかどうかを確認する DOES NOT EXIST N/A

ブール値(true/false)

ブール属性は、購読ステータスやユーザーに関するその他のシンプルなバイナリデータを保存するのに便利です。提供される入力オプションにより、変数がブール値として明示的に設定されたユーザーと、その属性の記録がまだないユーザーの両方を検索できます。

以下の表は、ブール属性で利用可能なセグメンテーションオプションを示しています。

セグメンテーションオプション ドロップダウンフィルター 入力オプション
ブール値が次の値であるかどうかを確認する IS TRUEFALSETRUE OR NOT SET、またはFALSE OR NOT SET
ブール値がユーザーのプロファイルに存在するかどうかを確認する EXISTS N/A
ブール値がユーザーのプロファイルに存在しないかどうかを確認する DOES NOT EXIST N/A

購入イベント / 収益トラッキング

購入メソッドを使用してアプリ内購入を記録すると、各ユーザープロファイルの生涯価値(LTV)が確立されます。このデータは、収益ページの時系列グラフで確認できます。

以下の表は、購入イベントで利用可能なセグメンテーションオプションを示しています。

セグメンテーションオプション ドロップダウンフィルター 入力オプション
合計支出金額がある数値より大きいかどうかを確認する GREATER THAN NUMBER
合計支出金額がある数値より小さいかどうかを確認する LESS THAN NUMBER
合計支出金額がある数値と正確に一致するかどうかを確認する EXACTLY NUMBER
最後の購入がX日以降に発生したかどうかを確認する AFTER TIME
最後の購入がX日以前に発生したかどうかを確認する BEFORE TIME
最後の購入がX日以上前に発生したかどうかを確認する MORE THAN TIME
最後の購入がX日未満前に発生したかどうかを確認する LESS THAN TIME
購入がX回(最大50回)より多く発生したかどうかを確認する MORE THAN 過去Y日間(Y = 1,3,7,14,21,30)
購入がX回(最大50回)未満発生したかどうかを確認する LESS THAN 過去Y日間(Y = 1,3,7,14,21,30)
購入が正確にX回(最大50回)発生したかどうかを確認する EXACTLY 過去Y日間(Y = 1,3,7,14,21,30)

タクシー/ライドシェアアプリのユースケース

この例では、どのユーザーデータを収集するかを決定したいライドシェアアプリを考えてみましょう。以下の質問とブレインストーミングのプロセスは、マーケティングチームと開発チームが参考にできる優れたモデルです。この演習を終了すると、両方のチームは、目標を達成するためにどのカスタムイベントと属性を収集するとよいかが明確にわかるでしょう。

ケースの質問 No.1: 目標は何ですか?

目標は明確で、ユーザーにアプリ経由でタクシーを呼んでもらうことです。

ケースの質問 No.2: アプリをインストールしてからその目標に至るまで、どのような中間ステップがありますか?

  1. ユーザーは登録プロセスを開始して、個人情報を入力する必要があります。
  2. ユーザーは登録プロセスを完了し、SMS経由で受け取ったコードをアプリに入力して確認する必要があります。
  3. ユーザーはタクシーを呼ぶ必要があります。
  4. タクシーを呼ぶには、ユーザーが検索したときにタクシーが利用できなければなりません。

これらのアクションには、以下のカスタムイベントとしてタグを付けることができます。

  • 登録開始
  • 登録完了
  • タクシーの呼び出し成功
  • タクシーの呼び出し失敗

イベントを実装した後、次のキャンペーンを実行できます。

  1. 登録を開始したが、一定期間内に登録完了イベントをトリガーしなかったユーザーにメッセージを送信する。
  2. 登録を完了したユーザーにお祝いのメッセージを送信します。
  3. タクシーの呼び出しに失敗し、一定時間内に成功したタクシーの呼び出しがなかったユーザーに謝罪とプロモーションクレジットを送信します。
  4. タクシーの呼び出し成功数が多いパワーユーザーに、ロイヤルティへの感謝の気持ちを示すプロモーションを送信します。

そして他にもたくさんあります!

ケースの質問 No.3: メッセージングに役立つ、ユーザーに関する他のどのような情報が必要でしょうか?

  • プロモーションクレジットを持っているかどうか?
  • ユーザーによるドライバーの平均評価は?
  • ユーザー固有のプロモーションコードがあるか?

これらの特性には、以下のカスタム属性のタグを付けることができます。

  • プロモーションクレジット残高(10進数型)
  • ドライバーの平均評価(数値型)
  • 固有のプロモーションコード(文字列型)

これらの属性を追加することで、次のようなキャンペーンをユーザーに送信できるようになります。

  1. 7日間ログインしていないがプロモーションクレジットを持っているユーザーに、そのクレジットが存在することと、アプリに戻って使用するよう通知する。
  2. 低いドライバー評価を与えたユーザーにメッセージを送り、なぜ乗車を楽しめなかったのかを確認するために直接フィードバックを得る。
  3. メッセージテンプレートとパーソナライゼーション機能を使用して、固有のプロモーションコード属性をユーザー向けのメッセージングに付け加えます。

ベストプラクティス

一般的なベストプラクティス

イベントプロパティを使用する

  • カスタムイベントには、ユーザーが行うアクションを説明する名前を付けてください。
  • カスタムイベントプロパティを積極的に活用して、イベントに関する重要なデータを表現してください。
  • たとえば、50本の異なる映画の視聴ごとに個別のカスタムイベントを記録するのではなく、映画の視聴をイベントとして記録し、映画のタイトルをイベントプロパティとして含める方が効果的です。

開発のベストプラクティス

すべてのユーザーにユーザーIDを設定する

ユーザーIDは各ユーザーに設定する必要があります。これらは不変であり、ユーザーがアプリを開いたときにアクセス可能である必要があります。この識別子を提供することを強く推奨します。これにより、以下のことが可能になります。

  • デバイスやプラットフォームをまたいでユーザーを追跡し、行動データおよびデモグラフィックデータの品質を向上させます。
  • ユーザーデータAPIを使用してユーザーに関するデータをインポートします。
  • メッセージングAPIを使用して、一般的なメッセージとトランザクションメッセージの両方で特定のユーザーをターゲットにします。

ユーザーIDは512文字未満である必要があり、プライベートで容易に取得できないものにしてください(たとえば、プレーンなメールアドレスやユーザー名は避けてください)。このような識別子が利用できない場合、Brazeはユーザーに一意の識別子を割り当てますが、ユーザーIDに関する上記の機能は利用できません。個人として紐づけられる一意の識別子がないユーザーに対しては、ユーザーIDの設定を避けてください。デバイス識別子を渡しても、Brazeがデフォルトで提供する自動匿名ユーザートラッキングと比較してメリットはありません。以下は、適切なユーザーIDと不適切なユーザーIDの例です。

ユーザーIDとして適切な選択肢:

  • ハッシュ化されたメールアドレスまたは一意のユーザー名
  • 一意のデータベース識別子

ユーザーIDとして使用すべきでないもの:

  • デバイスID
  • ランダムな数値またはセッションID
  • 一意でないID
  • メールアドレス
  • 他のサードパーティベンダーのユーザーID

カスタムイベントと属性に読みやすい名前を付ける

実装から1〜2年後にBrazeを使い始めるマーケターを想像してみてください。追加のコンテキストなしに「usr_no_acct」のような名前がずらりと並んだドロップダウンリストを見ると、戸惑うかもしれません。イベントと属性に識別しやすく読みやすい名前を付けることで、プラットフォームのすべてのユーザーにとって使いやすくなります。以下のベストプラクティスを検討してください。

  • カスタムイベント名を数字で始めないでください。ドロップダウンリストはアルファベット順にソートされるため、数字で始めると目的のフィルターでセグメントするのが難しくなります。
  • 可能な限り、わかりにくい略語や専門用語を使用しないようにしてください。
    • 例:usr_ctryはコード内でユーザーの国を表す変数名としては問題ありませんが、カスタム属性としてBrazeに送信する際はuser_countryのようにして、後からダッシュボードを使用するマーケターにとってわかりやすくしてください。

属性は変更があった場合にのみ記録する

Brazeに渡されるすべての属性はデータポイントとしてカウントされます。これは、渡された属性が以前に保存された値と同じ値を含んでいる場合でも同様です。データが変更された場合にのみ記録することで、冗長なデータポイントの使用を回避し、不要なAPI呼び出しを避けることでよりスムーズなエクスペリエンスをサポートします。

プログラムによるイベント名の生成を避ける

常に新しいイベント名を作成していると、ユーザーを意味のある形でセグメントすることが不可能になります。一般的には、非常に具体的なイベント(「Gangnam Styleを視聴した」や「記事を読んだ:ミッドタウンマンハッタンのランチスポットベスト10」など)ではなく、汎用的なイベント(「動画を視聴した」や「記事を読んだ」)を記録するべきです。イベントに関する具体的なデータは、イベント名の一部としてではなく、イベントプロパティとして含めてください。

技術的な制限と制約

カスタムイベントを実装する際は、以下の制限と制約に注意してください。

文字数の制約

Brazeは、カスタムイベント名、カスタム属性名(キー)、およびカスタムイベントの文字列値に対してバイト単位の長さ制限(479バイト)を適用します。この制限を超える値は切り捨てられます。文字数で表すと、これはおよそ479のシングルバイト文字(たとえばASCII)、またはマルチバイトスクリプト(日本語など、UTF-8で1文字あたり約3バイトと仮定)ではおよそ160文字に相当します。理想的には、アプリのネットワークおよびバッテリーパフォーマンスを向上させるために、名前と値をできるだけ短くしてください。可能であれば50文字以内に制限してください。

コンテンツの制約

以下のコンテンツは、属性やイベントからプログラムによって自動的にトリミングされます。以下の使用には注意してください。

  • 先頭および末尾の空白
  • 改行
  • 電話番号内のすべての非数字文字
    • 例:「(732) 178-1038」は「7321781038」に短縮されます
  • 非空白文字はスペースに変換される必要があります
  • $をカスタムイベントのプレフィックスとして使用しないでください
  • 無効なUTF-8エンコーディング値
    • 「My \x80 Field」は「My Field」に短縮されます

予約キー

以下のキーは予約されており、カスタムイベントプロパティとして使用できません。

  • time
  • product_id
  • quantity
  • event_name
  • price
  • currency

値の定義

  • 整数値は64ビットです
  • 小数はデフォルトで15桁の精度を持ちます

汎用的な名前フィールドの解析

ユーザーに対して単一の汎用的な名前フィールドのみが存在する場合(たとえば「JohnDoe」)、このタイトル全体をユーザーの名属性に割り当てることができます。さらに、スペースを使用してユーザーの名と姓の両方を解析することも試みることができますが、この方法には一部のユーザーの名前を誤って設定してしまう潜在的なリスクがあります。

New Stuff!