バリエーション名の取得方法

バリエーション名の取得方法

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

getVariationName() メソッドは、フルスタック A/B テスト実験で、指定したユーザーに割り当てられたバリエーション名を取得します。

この API は、ユーザーに割り当てられたバリエーションのみを返し、PageSense へのトラッキング処理は行いません。単にユーザーがどのバリエーションに割り当てられるべきかを知りたいだけで、アクティベーションイベントを発火させたくない場合に使用します。

メソッドの呼び出し

  1. // フルスタック A/B テストでユーザーに割り当てられたバリエーションを取得する
  2. $variationName= $pageSenseClient->getVariationName($experimentName, $userId, $userAttributes);
メソッドパラメーター

Parameter

種類

説明

experimentName

string

バリエーションを取得する対象の実験名。

userId

string

ユーザーを一意に識別する ID。

userAttributes

array

(任意) オーディエンスのターゲティングとセグメンテーションに使用する、ユーザー属性の連想配列。

 

返される値  

  • ユーザーがフルスタック A/B テストの対象となる場合、割り当てられたバリエーションの名前を返します。

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

コード例

  1. use Zoho\PageSense\PageSenseClient;
  2. // ユーザー属性の配列を作成する
  3. $userAttributes= [
  4. 'Browser' => 'Chrome',
  5. 'Device' =>'Desktop',
  6. 'OS' => 'Windows 10'
  7. ];
  8. // 実験でユーザーに割り当てられたバリエーションを取得する
  9. $variationName = $pageSenseClient->getVariationName($experimentName, $userId, $userAttributes);
  10. // バリエーションごとのロジックを処理する
  11. if ($variationName === '元の内容') {
  12. // コード: '元の内容' バリエーション用のロジック
  13. } elseif ($variationName === 'Variation 1') {
  14. // コード: 'Variation 1' バリエーション用のロジック
  15. } elseif ($variationName === 'Variation 2') {
  16. // コード: 'Variation 2' バリエーション用のロジック
  17. } elseif ($variationName === 'Variation 3') {
  18. // コード: 'Variation 3' バリエーション用のロジック
  19. } else {
  20. // コード: ユーザーがいずれのバリエーションにも属さない場合の処理}


API の動作
  

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

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

まず API は、ユーザーが PageSense で定義されたオーディエンスターゲティング条件を満たし、実験の対象となるかどうかを評価します。

ターゲティング条件には通常、ブラウザー、デバイス種別、オペレーティングシステム、または ユーザー属性 で渡す任意のカスタムユーザーデータなどの属性が含まれます。

  • ユーザーがターゲティング条件に一致する 場合 → 処理が続行されます。

  • ユーザーがターゲティング条件に一致しない 場合 → 返されるバリエーションは NULL になります。

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

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

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

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

3. MurmurHash によるハッシュ化  

ユーザー ID と実験キーを組み合わせて一意のキーを作成し、この一意のキーに対して API が MurmurHash アルゴリズム を適用して0 〜 9999 の数値を生成します。

MurmurHash アルゴリズムは、同じ ユーザー ID と実験キー の組み合わせに対しては、常に同じハッシュ値を生成します。これにより、異なるセッションやブラウザー間でも、同じ実験についてユーザーには常に同じバリエーションが割り当てられることが保証されます。

生成されたハッシュ値は、その実験の合計トラフィック配分と、各バリエーションに割り当てられた個別トラフィックに基づいて、ユーザーがどのバリエーションに属するかを判定するために使用されます。

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

各バリエーションには、そのトラフィック配分に比例した 重複しないハッシュ範囲 が割り当てられます。ある Full Stack 実験で、合計トラフィック配分が 80% で、4 つのバリエーションがマッピングされており、それぞれのバリエーションに 25% のトラフィックが割り当てられているとします。この場合、各バリエーションのハッシュ値範囲は次のようになります。

バリエーション

ハッシュ値の範囲

元の内容

0 – 2000

バリエーション 1

2001 – 4000

バリエーション 2

4001 – 6000

バリエーション 3

6001 – 8000

  • ユーザーのハッシュ値がこれらの範囲のいずれかに入る場合 → そのバリエーションが返されます。

  • ユーザーのハッシュ値が定義されたすべての範囲外にある場合 → ユーザーは実験のいずれのバリエーションにも属さず、NULLが返されます。

5. 返される値のロジック  

シナリオ

返される値

ユーザーが条件を満たし、バリエーションが割り当てられている

バリエーション名

ユーザーがオーディエンスターゲティング条件を満たさない

NULL

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

NULL


getVariationName()をユーザー属性なしで使用する  

getVariationName() API は、ユーザー属性なしでも呼び出すことができます。現在、この種類の API 呼び出しは、「すべての訪問者」をターゲットにした実験でのみ使用できます。特定のオーディエンスターゲティング条件が設定されている実験では使用できません。これは、この API 呼び出しではユーザー属性が渡されないため、ユーザーがオーディエンスターゲティング条件に一致しないためです。

メソッドの呼び出し方法

  1. // ユーザーに割り当てられたバリエーションを取得する
  2. $variationName= $pageSenseClient->getVariationName($experimentName, $userId);

動作方法  

  • 必須なのは、ExperimentName とユーザー ID のみです。

  • オーディエンスターゲティングは引き続き実行されますが、ユーザー属性が渡されないため:
          ユーザーが対象となるのは、「すべての訪問者をターゲットにした実験のみです。
         ユーザーは、対象になりません ユーザー属性が利用できないため、特定のオーディエンスターゲティング条件が設定されている実験には参加できません。

  • ユーザーが対象となった後、API は MurmurHash ベースのバケッティングを使用して、割り当てるバリエーションを決定します。

  • ユーザーのハッシュ値が実験のトラフィック配分の範囲外にある場合 → NULLを返します。

ベストプラクティス  

  • 常に一貫性があり一意なユーザー ID(例:ログイン ID、メールアドレスなど)を使用してください。ユーザー ID にセッション ID を使用することは避けてください。セッション ID は頻繁に変更されるため、セッションごとに異なるバリエーションがユーザーに配信されてしまいます。

  • NULL が返される場合を常に適切に処理してください。バリエーションが NULL として返された場合に備えて、フォールバック実装を追加しておきましょう。

  • 頻繁にアクセスするユーザーについては、ハッシュの評価を繰り返さないよう、バリエーション割り当てをキャッシュすることを検討してください。

  • アプリケーション全体で一貫したオーディエンスターゲティングとレポートのセグメント化を行うために、ユーザー属性のキーには同じ名前を使用してください。

NotesWeb ページ上でバリエーションのみをレンダリングしたい場合は getVariationName() API を使用し、アクティベーションイベントもトラッキングしたい場合は activateExperiment() API を使用してください。

このドキュメントが手順の理解に役立てば幸いです。さらに詳しい説明が必要な場合やご不明な点がある場合は、いつでも support@zohopagesense.com までメールでお問い合わせください。