お好みの設計を設定する

このドキュメントでは、Meridian GeoX ライブラリを使用してテスト設計を構成するプロセスについて説明します。データの準備、主要なテスト パラメータの設定、高度な構成の利用、設計の実現可能性の評価、選択した設計の可視化とエクスポートの方法について詳しく解説します。

まとめとデータの準備

まず、Meridian GeoX ライブラリをインポートし、テスト前のデータセットを準備します。データを収集して準備するで説明されているように、このデータセットは GeoX 調査を設計するための前提条件です。

データセットは Pandas DataFrame である必要があります。必要な列は次のとおりです。

  • date: 例: 日単位
  • location: 例: 異なる市場エリア
  • conversions: レスポンス データは通常、コンバージョン数または収益データの未加工データです。これは一般的に広告主の CRM から取得されます。
  • spend: 調査対象のキャンペーンの費用データ。これは省略可能な列です。マルチセル テスト構成の場合は、spend_cell_1spend_cell_2 などの個別の列ラベルを使用します。

1. テストの設計

これは、今後のテストのパラメータを定義するコア インタラクションです。この手順を段階的に説明するために、時間ベースの回帰(TBR)と層化サンプリングを用いた 28 日間のヘビーアップ テストの設計例を使用できます。

  • DesignConfig: テストの基盤を設定するために使用されます。
    • experiment_duration: テストの期間(クールダウン期間を除く)。通常、この期間には商品の購入サイクルが少なくとも 1 回含まれます。
    • cell_count: テスト内の介入群セルの数。デフォルトは 1 です。つまり、テストでは 1 つの介入群が 1 つの対照群とペアになります。値が 1 より大きい場合は、複数の介入群セルを含むマルチセル調査を設計します。
    • experiment_types: テストの性質(ホールドバック、ゴーダーク、ヘビーアップなど)を定義します。詳細については、テストの種類をご覧ください。マルチセル テストでは、セルごとに異なる種類のテストを設定できます。たとえば、{'cell_1': ExperimentType.GO_DARK, 'cell_2': ExperimentType.HEAVY_UP} は、ある介入群セルでゴーダークを実施し、別の介入群セルでヘビーアップを実施することを示します。これは、予算中立のマルチセル テストで非常によく使用される設定です。
    • methodology: 設計の選択に使用される分析方法(時間ベースの回帰、合成コントロール、合成差分の差分など)。
    • geo_assignment_rule: ランダム サンプリングと層化サンプリングの両方がサポートされています。
    • design_output_count: 出力に含める、ランク付けされた推奨設計の合計数。

手法と割り当てルール オプションの詳細については、手法の比較をご覧ください。

import datetime
import meridian_geox as geox

# Example: Specify a 28-day 'heavy-up' (increased spend) experiment using TBR
# and stratified sampling.
design_config = geox.DesignConfig(
    experiment_duration=datetime.timedelta(days=28),
    experiment_types=geox.ExperimentType.HEAVY_UP,
    methodology=geox.Methodology.TBR,
    geo_assignment_rule=geox.GeoAssignmentRule.STRATIFIED_SAMPLING,
    design_output_count=5
)
  • constraints: 最大予算やその他の設計関連の制約を指定できます。特定の地域を含める、除外する、コンバージョンのしきい値を設定するなど、より高度なユースケースに使用されます。最大予算のみを含む基本的な制約の設定は次のとおりです。より高度な制約については、次のセクションで説明します。
# Limit the max experiment budget to be 100000.
constraints = geox.Constraints(
    budget_constraint=geox.Budget(budget=100000)
)
  • geox.run_design(): このコア関数は、テスト前データセット、構成、制約を受け取り、MDE でランク付けされた一連の潜在的なテスト設計を生成します。
# Generate Design
# 'design_data' should be your pre-test pandas dataframe.
design_set = geox.run_design(
    design_data,
    design_config,
    constraints
)

# Select the top-ranked design
selected_id = next(iter(design_set.designs))
selected_design = design_set.designs[selected_id]

DesignConfig には、設計に合わせて微調整できるパラメータも含まれていますが、デフォルト値があるため、空白のままでも問題ありません。

  • alpha(省略可): テストの有意水準。デフォルト値は 0.10(10%)です。これは、信頼区間の期待されるカバレッジ確率は 1 - アルファ = 90% であることも意味します。
  • power(省略可): 実際の効果を検出する確率。デフォルト値は 80% です。
  • cost_per_incremental_conversion(CpIC、省略可): ホールドバック テストでのみ使用されます。ホールドバック テストでは、CpIC を使用して最小予算(新しく有効にしたキャンペーンに費やす金額)を推定します。デフォルト値は 1 ですが、CpIC を 1/iCPD(または 1/iROAS)として推定する方が実用的です。ここで、iCPD(または iROAS)の推定値は、既存のメリディアン MMM モデルまたは過去のインクリメンタリティ調査(GeoX や Google のコンバージョン リフトなど)から取得されます。CpIC はホールドバック テストでのみ有効であるため、既存のライブ キャンペーンを測定するゴーダークおよびヘビーアップ テスト(またはセル)では無視され、過去の費用データを使用してテスト予算が予測されます。
  • min_r2(省略可): 設計フェーズで候補設計に必要となる、サンプル外の決定係数(適合度)スコアの最小しきい値。デフォルト値は 0.8(80%)に設定されており、テスト前モデルの適合度がこのしきい値を下回る候補設計は除外されます。

2. 制約による追加の設計構成

このセクションでは、前のセクションで説明した最大予算の指定に加えて、設計の制約をより多く渡すことで、設計を柔軟に構成する方法について説明します。これらの制約はすべて省略可能です。設計にいくつかの制約を追加する例を次に示します。

  • excluded_geos: テスト設計から除外する地域。通常、これらの地域は、Meridian GeoX 調査に含めたくない大都市圏であり、メディアに大きな混乱をもたらす可能性があります。
  • excluded_dates: テスト設計から除外する日付。
  • budget_percent: テスト設計の最大予算変更率。これは、費用データがセルごとに提供されている場合にのみ使用できます。
  • budget_constraint: テスト設計の予算制約(セルごと)。合計予算額または予算の変更率を指定できます。
  • max_conversions_percent: 介入群の最大コンバージョン数。デフォルト値は 30% に設定されています。通常の GeoX では、メディアの 30% を超える影響は発生しないためです。
# 1. Define specific dates to exclude
dates_to_exclude = {
    pd.to_datetime('2024-12-31'),
    pd.to_datetime('2025-01-01'),
}

# 2. Add them to your Constraints object which specifies
# excluded geos, excluded dates, maximum conversion percentages
custom_constraints = geox.Constraints(
    excluded_geos={'loc1', 'loc2', 'loc3'},
    excluded_dates=dates_to_exclude,
    max_conversions_percent=0.2,
    budget_constraint=geox.Budget(budget=150000)
)

# 3. Use these constraints in a new design
custom_design_set = geox.run_design(
    design_data,
    design_config,
    custom_constraints
)

print("Design generated with date exclusions.")

3. 評価、可視化、エクスポート

geox.run_design() を実行すると、出力に候補設計のリストが含まれます。サマリー テーブルの主要な指標(決定係数(\( R^2 \))、MDE、A/A テストの p 値など)を調べることで、これらの設計を評価できます。サマリー テーブル内のすべての設計候補は、MDE の昇順でランク付けされます。

design_id cell design_methodology r2 mde mde_abs p_value (AA) budget design_implied_cpic treatment_conversions_pct treatment_geo_count
52456ea8 cell_1 STRATIFIED_SAMPLING-TBR 0.913 0.013 7085.925 0.394 7085.925 1 30.073 27
d42f5f69 cell_1 STRATIFIED_SAMPLING-TBR 0.917 0.014 7610.810 0.920 7610.810 1 29.820 29
6f8dc0bc cell_1 STRATIFIED_SAMPLING-TBR 0.897 0.014 7610.809 0.371 7610.809 1 29.325 29
06c83b68 cell_1 STRATIFIED_SAMPLING-TBR 0.945 0.015 7873.250 0.497 7873.250 1 30.064 30
cb3f10cd cell_1 STRATIFIED_SAMPLING-TBR 0.915 0.015 7873.249 0.169 7873.249 1 30.039 30

設計の実現可能性を評価する

Meridian GeoX の導入を進めるために適切な設計を選択するには、次の基準に照らして候補を評価します。

  1. 決定係数(\( R^2 \))のしきい値:\( R^2 \ge 0.8 \) の設計を選択することをおすすめします。 \( R^2 < 0.5 \) は、対照群の地域が介入群の地域の予測因子として不適切であることを示します。これにより、特定のシナリオで、テスト後の分析の信頼性が低下する可能性があります。

  2. A/A テストの検証: 選択した設計が A/A テストに合格することを確認します。A/A テストの p 値は、選択した有意水準(\( \alpha \))よりも大きくして、有意な既存のバイアスが存在しないようにする必要があります。また、候補設計の A/A テストの不合格率が高い場合は、通常、テスト前のデータ品質が低い(極端な外れ値、突然の地域の変更、高いボラティリティなど)か、モデルの適合性が低いことを示します。このようなデータを使用してテストを実行すると、誤検出(存在しないリフトの検出)のリスクが高くなるため、テスト後の分析の信頼性が低下します。

決定係数の調整

必要な最小 \( R^2 \) は、geox.DesignConfigmin_r2 パラメータによって制御されます。デフォルトでは、必要な最小 \( R^2 \) 値は 0.8 です。設計検索で 0.8 の有効な候補が返されない場合は、しきい値を 0.75 や 0.70 に調整するなど、柔軟に緩和できます。

design_config = geox.DesignConfig(
    experiment_duration=datetime.timedelta(days=28),
    experiment_types=geox.ExperimentType.HEAVY_UP,
    methodology=geox.Methodology.TBR,
    min_r2=0.7,  # Adjust threshold if 0.8 yields no candidate designs
)

A/A テストのトラブルシューティング

  1. データの異常を確認する: テスト前のデータに、データ入力エラー、欠落している日、特定の地域での極端な 1 回限りの急増がないか確認します。Constraints(excluded_dates=...excluded_geos=...) を使用して、これらの異常な日付と地域を除外します。

  2. テスト前の履歴を増やす: テスト前の履歴を増やす(たとえば、 \( 3N \) から \( 6N \) 以上にする)ことで、モデルに提供するデータを増やし、安定した関係を学習できるようにします。

  3. MDE の実現可能性: 設計の MDE をビジネスの期待値と比較します。MDE は、テストで検出できる最小のリフトです。キャンペーンで 5% のリフトしか見込めないのに、選択した設計の MDE が 12% の場合、調査の検出力が不足しているため、介入群のサイズや期間を増やさずに続行することはできません。

設計を可視化する

geox.plot_design() を使用して、介入群と反事実の視覚的表現を生成します。

観測された合計コンバージョン数と反事実的な合計コンバージョン数のデータの例

設計をエクスポートする

最後に、選択した設計を .export_to_json() を使用して JSON にエクスポートし、後で .load_from_json() を使用して再読み込みすることで、設計フェーズと分析フェーズの一貫性を確保できます。

4. マルチセル設計

Meridian GeoX は、さまざまなマルチセル テストをネイティブにサポートしています。たとえば、予算中立テストと呼ばれる一般的なオプションでは、すべての地域にわたる合計予算を中立に保ちながら、同じ市場で同時に、ゴーダーク(予算の削減)とヘビーアップ(予算の増加)の効果をテストできます。予算に影響しないテストを設計するには、cell_count を 2 に設定し、2 つの介入群セルのテストタイプを GO_DARKHEAVY_UP に設定します。

import datetime
import meridian_geox as geox

# Example design configuration for multi-cell budget neutral test.
multi_cell_design_config = geox.DesignConfig(
    cell_count=2,
    experiment_duration=datetime.timedelta(days=28),
    experiment_types={
        'cell_1': ExperimentType.GO_DARK,
        'cell_2': ExperimentType.HEAVY_UP,
    },
    methodology=geox.Methodology.TBR,
    geo_assignment_rule=geox.GeoAssignmentRule.STRATIFIED_SAMPLING,
    design_output_count=5,
)

マルチセル テストの制約を設定すると、geox.run_design() 関数はリクエストされたマルチセル設計を返します。単一セルのシナリオと同様に、候補設計を適宜取得できます。

# Constraints for multi-cell test.
multi_cell_constraints = geox.Constraints(
      budget_constraint={
        'cell_1': geox.Budget(budget_pct=-1.0),
        'cell_2': geox.Budget(budget_pct=1.0),
    },
)
multi_cell_design_set = geox.run_design(
    design_data,
    multi_cell_design_config,
    multi_cell_constraints,
)

# Generates the candidate multi-cell designs.
print(f'Experiment design generated:')
multi_cell_selected_design_id = next(iter(multi_cell_design_set.designs))
pprint(multi_cell_design_set.designs[multi_cell_selected_design_id])