代表的な面接トピック

シンプソンのパラドックスを検出し、A/Bテストのリリース可否をどのように判断するか?

データ難しい
Offer.cc 編集チーム公開日 更新日

質問

新しいオンボーディングフローが、新規ユーザーとリピートユーザーの両方で優勢であるにもかかわらず、全体のコンバージョン率では劣勢となっています。検証可能なシンプソンのパラドックスの例を構築し、構成比を診断し、層別推定量を事前登録し、異質性を検定し、全体ロールアウト、層別ロールアウト、または追加実験のいずれかを選択してください。

1. 問題

新しいオンボーディングフローがA/Bテスト中です。ユーザータイプ別に分割すると、トリートメント群は新規ユーザーとリピートユーザーの両方で高いコンバージョン率を示しますが、層を統合すると、トリートメント群の全体のコンバージョン率は低くなります。プロダクトオーナーは本日中にリリースの決定を求めています。

この逆転がどのように発生するかを示す具体的な数値例を構築し、生の分母とランダム化のバランスから層別推定量および交互作用の検定に至る分析フローを提示してください。最後に、全体ロールアウト、層別ロールアウト、実験の一時停止、または追加データの収集に必要な証拠を述べてください。

2. 制約と明確化事項

  • これはランダム化されたオンライン実験であり、「新規」と「リピート」は実験開始前に定義された層です。
  • 主要評価指標は、各ユーザーが一定の期間内にコアコンバージョンを完了したかどうかです。同一ユーザーによる重複イベントは独立したサンプルではありません。
  • 問題文中の数値は練習用データであり、実際の企業の結果や普遍的なローンチ基準ではありません。
  • まず観察期間、重複排除、曝露の定義、データウォーターマークを揃えてください。ある層がトリートメントによって影響を受ける場合、それを因果関係に基づくサブグループ分割に直接使用してはなりません。

3. コアとなる論理:分母の構成比が結果を逆転させ得る

全体のコンバージョン率は、層ごとのコンバージョン率をサンプルサイズで重み付けした平均です。群間で層の割合が異なる場合、トリートメント群がすべての層で優れていても、集計結果が逆転することがあります。

極端ですが分かりやすい例を考えてみましょう。ベースラインが高い層では、コントロール群が 990/1000 = 99% でトリートメント群が 100/100 = 100% です。ベースラインが低い層では、コントロール群が 1/100 = 1% でトリートメント群が 20/1000 = 2% です。トリートメント群は両方の層で1パーセントポイント改善していますが、集計されたコントロール群は 991/1100 = 90.1% であり、集計されたトリートメント群は 120/1100 = 10.9% となります。この差は、観察対象の大部分が異なるベースラインの層に割り振られたことによるものであり、トリートメント群がいずれかの層を悪化させたことによるものではありません。

実際の実験において、これほど大きな構成比の差が生じる場合、通常はランダム化、曝露、サンプリング、または期間の問題を示唆しています。すべての全体平均が間違っていることを証明するわけではありません。設計によって層の割合がバランスされている場合、または事前に規定された母集団の標準化が使用されている場合、全体の推定量は依然として対象母集団の平均処置効果(ATE)を表すことができます。

4. 診断と参考疑似コード

群、層、およびコンバージョンフラグごとに、ユーザーレベルの分母と分子を集計します。層の割合、効果、および信頼区間を比較してください。好都合な全体のパーセンテージから始めて、説明がつくまで任意の切り口を試すようなことは避けてください。

text
for arm in [control, treatment]:
  for stratum in [new, returning]:
    n[arm, stratum] = count_distinct_users(arm, stratum)
    y[arm, stratum] = count_users_with_conversion(arm, stratum)
    rate[arm, stratum] = y[arm, stratum] / n[arm, stratum]
    share[arm, stratum] = n[arm, stratum] / sum_s(n[arm, s])

check_exposure_and_assignment_balance()
check_missing_users_duplicates_and_window()
report_stratum_effects_and_confidence_intervals()

weights = preregistered_target_population_shares()
standardized_effect = sum_s(weights[s] * (rate[treatment, s] - rate[control, s]))
test_arm_by_stratum_interaction()

ランダム化の前に層が利用可能な場合は、層別ランダム化を行うか、少なくとも各層内の割り当てを監視してください。結果によってどのスライスを選択するかが左右されないよう、分析計画では主要な層、母集団の重み、主要評価指標、および停止ルールを事前に登録しておく必要があります。

5. 正確性、統計、およびリリース判断

層別推定量は各層の効果を同じ母集団の重みに戻すため、サンプルの構成比の差が処置効果と誤認されることはありません。重みは、観測された結果から推測するのではなく、実験前の母集団の定義またはランダム化設計から導き出す必要があります。

効果の差がサンプリングノイズを超えているかどうかを判断するために、トリートメントと層の間の交互作用を検定します。交互作用が実質的かつ安定している場合、新規ユーザーとリピートユーザーに対して異なるロールアウトを行うことが正当化されます。実質的でない場合は、最も見栄えの良い層を選択するのではなく、事前に規定された全体推定量を選択してください。

統計的有意性だけではリリースの正当化にはなりません。許容可能な最小効果、ガードレール指標、実験期間、サンプルサイズ、遅延コンバージョン、およびデータの完全性を組み合わせて判断してください。曝露ログ、群間の交絡、ランダム化、または期間の成熟度に問題がある場合は、スライスを増やして問題を隠すのではなく、決定を一時停止してデータを修復してください。

6. フォローアップと落とし穴

  • どのような場合に層が因果関係の問題を引き起こすか? 曝露後に層が生成される場合、その層を条件付けると合流点バイアス(collider bias)が発生する可能性があります。代わりに曝露前の変数または事前に規定されたメカニズム分析を使用してください。
  • なぜ無制限にスライスしてはいけないのか? 事前登録されていないスライスは、偶然による有意な結果の機会を増やします。多重性を制御し、探索的な発見は仮説として位置付けてください。
  • すべての集計差はシンプソンのパラドックスなのか? いいえ。まず分母、曝露資格、期間、重複排除、欠損値を確認し、その上で層内で方向が真に逆転していることを確認してください。
  • トリートメント群の層構成比が異なる場合はどうするか? まずランダム化とルーティングを調査してください。母集団の重みが既知である場合は、事前に規定された標準化推定量を使用してください。結果を見た後に重みを選択してはなりません。

7. 参考資料

  • Google for Developers の Good Data Analysis および Analysis traps ガイド。
  • Optimizely によるシンプソンのパラドックスおよびセグメント別実験結果の解説。
  • A/Bテストにおける逆転現象を扱う公開データサイエンス面接問題。

8. 面接の採点ポイント

分母と重みを計算できること

候補者は、カウントを用いて「すべての層で勝ち、全体で負ける」ことを示し、不均等な層の割合を重要な手がかりとして特定できる必要があります。

診断と判断を切り離せること

推定量、交互作用、およびロールアウトルールについて議論する前に、ランダム化、曝露、期間、およびデータ品質を確認する必要があります。

因果関係の境界を説明できること

すべてのスライスを独立した結論として扱うのではなく、曝露後の層、合流点バイアス、および多重性のリスクを特定できる必要があります。

実行可能な計画を提示できること

単に「追加データを収集する」と言うだけでなく、層別ランダム化、事前登録された重み、ガードレール、および層別ロールアウトまたは継続テストの条件を提案できる必要があります。

公開情報ソース

関連する質問