実験の有効化

実験の有効化

お知らせ:当社は、お客様により充実したサポート情報を迅速に提供するため、本ページのコンテンツは機械翻訳を用いて日本語に翻訳しています。正確かつ最新のサポート情報をご覧いただくには、本内容の英語版を参照してください。

Activate Experiment」手順では、ユーザーが Full Stack A/B テストの対象かどうかを判定し、それに応じてバリエーションを割り当てます。これは、アプリケーションがユーザーにどのエクスペリエンスを表示するかを決定するポイントです。

実験のアクティベーションロジックは、PageSense SDK を使用してサーバーサイドのみで実行されます。

これによりできること  

実験をアクティブ化すると、次のことができます。

  • ユーザーが Full Stack 実験の対象かどうかを確認する

  • 対象ユーザーに一貫したバリエーションを割り当てる

  • 割り当てられたバリエーションに基づいてアプリケーションの動作を制御する

  • 同じユーザーがセッションをまたいでも同じバリエーションを見続けられるようにする

実験をアクティブ化するタイミング  

次のタイミングで実験をアクティブ化してください。

  • SDK の初期化が正常に完了した後

  • ユーザーセッションの開始時、またはユーザー ID が利用可能になったタイミング

  • バリエーションごとのレンダリングやロジックを実行する前

メモ: アクティベーションは、SDK の初期化コールバックが完了する前に呼び出さないでください。

ユーザー属性を使用して実験をアクティブ化する  

ユーザー属性は、PageSense で定義されたオーディエンスターゲティングルールに基づき、ユーザーが実験の対象かどうかを判定するのに役立ちます。

KOTLIN

  1. com。Zoho。pagesense。android。abtesting。PageSenseClient をインポートします
  2. // ユーザー属性を保持するマップを作成します
  3. val userAttributes = mutableMapOf(
  4. 'DeviceType' to '電話番号',
  5. 'OS'to 'Android',
  6. 'OSVersion'to '14',
  7. 'DeviceModel'to 'Pixel 8 Pro'
  8. )
  9. // Full Stack A/B テスト実験をアクティブ化します
  10. val variationName = pageSenseClient。activateExperiment(
  11. experimentName,
  12. userId,
  13. userAttributes
  14. )
  15. // バリエーションごとのロジックを処理します
  16. if (variationName == '元の内容') {
  17. // 元の内容バリエーションを処理します
  18. } else if (variationName == 'Variation 1') {
  19. // Variation 1 を処理します
  20. } else if (variationName == 'Variation 2') {
  21. // Variation 2 を処理します
  22. } else if (variationName == 'Variation 3') {
  23. // Variation 3 を処理します
  24. } else {
  25. // ユーザーはこの実験の対象ではありません
  26. }

JAVA

  1. import com.zoho.pagesense.android.abtesting.PageSenseClient;
  2. import java.util.HashMap;
  3. // ユーザー属性を保持するマップを作成
  4. HashMap<String, String> userAttributes = new HashMap<>();
  5. userAttributes.put('DeviceType', 'Phone');
  6. userAttributes.put('OS', 'Android');
  7. userAttributes.put('OSVersion','14');
  8. userAttributes.put('DeviceModel', 'Pixel 8 Pro');
  9. // フルスタック A/B テストの実験を有効化
  10. String variationName = pageSenseClient.activateExperiment(
  11. experimentName,
  12. userId,
  13. userAttributes
  14. );
  15. // バリエーションごとのロジックを処理
  16. if ('Original'.equals(variationName)) {
  17. // Original バリエーションを処理
  18. } else if ('Variation 1'.equals(variationName)) {
  19. // Variation 1 を処理
  20. } else if ('Variation 2'.equals(variationName)) {
  21. // Variation 2 を処理
  22. } else if ('Variation 3'.equals(variationName)) {
  23. // Variation 3 を処理
  24. } else {
  25. // ユーザーが実験のいずれのバリエーションにも属していない場合の処理
  26. }

パラメーター

パラメーター

種類

必須

説明

experimentName

String

はい

PageSense で設定したフルスタック実験の名前。

userId

String

はい

ユーザーを一意かつ安定して識別する ID。セッションをまたいで一貫している必要があります。

userAttributes

Map<String, String>

いいえ

オーディエンスターゲティングやセグメンテーションに使用する任意のユーザー属性。

レスポンスの理解  

  • ユーザーが実験の条件を満たしている場合、API はユーザーに割り当てられたバリエーション名String 形式で返します。

  • ユーザーがオーディエンスターゲティングやトラフィック配分の条件を満たさない場合、API はnullを返します。

安全なフォールバック動作を確保するため、常にnullが返されるケースをハンドリングしてください。

例外ケース  

シナリオ

結果

実験が見つからない

null を返す

ユーザーがトラフィック配分の対象外

null を返す

オーディエンスターゲティングに失敗

null を返す

SDK が初期化されていない

動作は未定義(初期化が完了する前に呼び出さないでください)

API の動作  

activateExperiment() メソッドが呼び出されると、ユーザーにどのバリエーションを割り当てるかを判断するために、次の手順を実行します。

1. オーディエンスターゲティング  

API はまず、ユーザーが PageSense で定義された実験のオーディエンスターゲティングルールを満たしているかどうかを確認します。これらのルールには、ブラウザー、デバイスの種類、OS、ユーザー属性で渡される任意のカスタムプロパティなどのユーザー属性を含めることができます。

  • ユーザーの属性がオーディエンスターゲティング条件と一致する場合、評価が続行されます。

  • 一致しない場合、API は直ちに null を返し、そのユーザーが実験の対象外であることを示します。

2. ユーザーストレージサービス
  

ユーザーストレージサービスは、データベース、Redis キャッシュ、ファイルシステムなど、ユーザーが用意したストレージレイヤーに、特定の実験でユーザーに割り当てられたバリエーションを保存します。これにより、異なるセッションやブラウザー間でも、同じ A/B テストに対して常に同じバリエーションがユーザーに割り当てられるようになります。

  • 対象のユーザー ID と実験に対して、すでに保存済みのバリエーションが存在する場合は、ストレージから取得され、そのまま返されます。

  • 存在しない場合、SDK はハッシュアルゴリズムを使用して新しいバリエーションの割り当てを行います。

3. MurmurHash によるハッシュ化   

ユーザー ID と実験キーを結合して一意のキーを作成し、この一意のキーに MurmurHash アルゴリズムを適用して、0 ~ 9999 の範囲の決定論的な数値を生成します。

このハッシュ値によって、実験のトラフィック配分範囲内でのユーザーの位置が決まり、割り当てるバリエーションが決定されます。

  • MurmurHash は、同じユーザー ID と実験キーの組み合わせに対して、常に同じハッシュ値を生成します。

  • これにより、異なるセッションやブラウザー間でも、ユーザーは常に一貫したバリエーションが割り当てられます。

4. バリエーションのマッピング   

実験内の各バリエーションには、割り当てられたトラフィック割合(%)に基づいて値の範囲が割り当てられます。例えば、トラフィック配分 80% の A/B テスト実験で、4 つのバリエーションにそれぞれ 25% ずつトラフィックを割り当てる場合、4 つのバリエーションの値の範囲は次のように割り当てられます。

バリエーション

値の範囲

元の内容

0 – 2000

Variation 1

2001 – 4000

Variation 2

4001 – 6000

Variation 3

6001 – 8000

 

これらの範囲は重複せず、実験に割り当てられたトラフィックの合計を網羅します。

  • ユーザーのハッシュ値が特定のバリエーションの範囲内に入る場合、そのバリエーションがユーザーに割り当てられます。

  • ユーザーのハッシュ値が、バリエーションに割り当てられたすべての範囲外である場合、ユーザーにはいずれのバリエーションも割り当てられず、そのユーザーは実験の対象外となり、バリエーションには NULL が返されます。

5. トラッキングと分析


バリエーションが割り当てられると、次の処理が行われます。

API は PageSense へのユーザー訪問のトラッキング処理を開始し、実験名、ユーザー ID、バリエーション名、および(渡された場合は)ユーザー属性の詳細を記録します。

6. 返される値  


結果

返される値

ユーザーが対象となり、バリエーションが割り当てられた場合

バリエーション名を返す

ユーザーがオーディエンスターゲティングルールに一致しない場合

NULL を返す

ユーザーがトラフィック配分の範囲外である場合

NULL を返す


ユーザー属性なしで実験をアクティブ化する  

場合によっては、ユーザー属性を渡さずにフルスタック実験をアクティブ化したいことがあります。これは次のような場合に便利です。

  • ユーザー属性がまだ利用できない場合

  • 実験のターゲットがすべての訪問者

  • バリエーションの割り当てに、ユーザー識別子だけを利用したい場合

ユーザー属性が指定されていない場合、SDK は追加のオーディエンス条件を必要としない実験に対してのみ、そのユーザーを評価します。

KOTLIN & JAVA

  1. // ユーザー属性なしでフルスタック A/B テスト実験をアクティブ化する
  2. val variationName = pageSenseClient。activateExperiment(
  3. experimentName,
  4. userId
  5. )

重要なメモ  

  • ユーザー属性が指定されていない場合に対象となるのは、すべての訪問者をターゲットにした実験のみです。

  • 同じユーザー ID に対するバリエーションの割り当ては決定的(再現性あり)なままです。

  • 安全なフォールバック動作を確保するため、常にnullの場合をハンドリングしてください。

ベストプラクティス  

  • (ユーザー ID やアカウント ID などの)安定したユーザー識別子を使用します。

  • ユーザー属性は、利用可能な場合にのみ渡してください。

  • 同じユーザーセッションに対して、activateExperimentを複数回呼び出すことは避けてください。

  • 実験の対象外となるユーザーも必ず考慮して処理してください。