実験の有効化

実験の有効化

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

「テストを有効にする」ステップでは、ユーザーがフルスタックA/Bテストの対象かどうかを評価し、該当するバリエーションを割り当てます。ここで、アプリケーションはユーザーに表示するエクスペリエンスを決定します。

テストの有効化ロジックは、PageSense SDKを使用してすべてサーバー側で実行されます。

テストの有効化によりできること  

テストを有効にすると、次のことができます。

  • ユーザーがフルスタックテストの対象かどうかを確認する

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

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

  • 同じユーザーに、セッションをまたいで同じバリエーションを継続して表示する

テストを有効にするタイミング  

テストは、次のタイミングで有効にします。

  • SDKが正常に初期化された後

  • ユーザーセッションの開始時、またはユーザーの識別情報を取得できた時点

  • バリエーション固有の表示を行う、またはロジックを実行する前

メモ:SDKの初期化コールバックが完了する前に有効化を呼び出さないでください。

ユーザー属性を使用したテストの有効化  

ユーザー属性は、PageSenseで設定したオーディエンスのターゲティングルールに基づいて、ユーザーがテストの対象となるかどうかを判定するために使用されます。

KOTLIN

  1. import com.zoho.pagesense.android.abtesting.PageSenseClient
  2. // ユーザー属性を保持するマップを作成
  3. val userAttributes = mutableMapOf(
  4. 'DeviceType' to 'Phone',
  5. 'OS'to 'Android',
  6. 'OSVersion'to '14',
  7. 'DeviceModel'to 'Pixel 8 Pro'
  8. )
  9. // フルスタックA/Bテストを有効にする
  10. val variationName = pageSenseClient.activateExperiment(
  11. experimentName,
  12. userId,
  13. userAttributes
  14. )
  15. // バリエーション固有のロジックを処理
  16. if (variationName == 'Original') {
  17. // オリジナルバリエーションを処理
  18. } else if (variationName == 'Variation 1') {
  19. // バリエーション1を処理
  20. } else if (variationName == 'Variation 2') {
  21. // バリエーション2を処理
  22. } else if (variationName == 'Variation 3') {
  23. // バリエーション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. // オリジナルのバリエーションを処理する
  18. } else if ('Variation 1'.equals(variationName)) {
  19. // バリエーション1を処理する
  20. } else if ('Variation 2'.equals(variationName)) {
  21. // バリエーション2を処理する
  22. } else if ('Variation 3'.equals(variationName)) {
  23. // バリエーション3を処理する
  24. } else {
  25. // ユーザーはテストの対象外です
  26. }

パラメーター

パラメーター

データ型

必須

説明

experimentName

文字列

はい

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

userId

文字列

はい

ユーザーを一意に識別する固定の識別子。セッションが変わっても同じ値を使用する必要があります。

userAttributes

Map<String, String>

いいえ

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

レスポンスについて  

  • ユーザーがテストの対象となる場合、APIは、そのユーザーに割り当てられたバリエーション名文字列形式で返します

  • オーディエンスのターゲティング条件やトラフィックの割り当てによりユーザーが対象外となる場合、APIはnullを返します。

安全に代替処理を行えるよう、nullの場合を必ず処理してください。

エッジケース  

状況

結果

テストが見つからない

nullを返す

ユーザーがトラフィックの割り当て対象外

nullを返す

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

nullを返す

SDKが初期化されていない

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

APIの仕組み  

activateExperiment()メソッドを呼び出すと、一連の手順に従って、ユーザーにバリエーションを割り当てるかどうかが判定されます。

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

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

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

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

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

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

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

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

3. MurmurHashによるハッシュ化  

ユーザーIDとテストのキーを組み合わせて一意のキーを生成し、APIがこの一意のキーにMurmurHashアルゴリズムを適用して、0から9,999までの決定論的な数値を生成します。

このハッシュ値に基づいて、テストのトラフィックの割り当て範囲内でのユーザーの位置が決まり、バリエーションが割り当てられます。

  • MurmurHashでは、特定のユーザーIDとテストキーの組み合わせに対して、常に同じハッシュ値が生成されます。

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

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

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

バリエーション

値の範囲

オリジナル

0 – 2,000

バリエーション1

2,001 – 4,000

バリエーション2

4,001 – 6,000

バリエーション3

6,001 – 8,000

 

これらの範囲は互いに重複せず、全体としてテストのトラフィックの割り当て全域を網羅します。

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

  • ユーザーのハッシュ値が、バリエーションに割り当てられたすべての範囲外にある場合、ユーザーにはバリエーションが割り当てられず、テストの対象外となり、バリエーションとして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を複数回呼び出さないようにします。

  • テストの対象外となるユーザーについても、必ず処理を行います。