本文へ移動
Telemetry
ドキュメントを見る

ガイド更新日: 2026年7月27日2 最小読み取り時間

コーディング エージェントでこのドキュメントを使用してください

Claude Code、Codex、Cursor、または別のコーディング エージェント用の集中プロンプト パックを開き、それをここで説明するワークフローに適応させます。

このページの内容
  1. 1. 実験を定義する
  2. 2. Telemetryの初期化
  3. 3. ログの割り当てと公開
  4. 4. 完了した収益を記録する
  5. 5. 実験結果の比較
  6. 6. 不確実性の評価
  7. 次のステップ

収益 A/B テスト

収益合計だけを考えれば、より多くのトラフィックを受信したバリアントが有利になる可能性があります。割り当て、露出、完了した収益をログに記録することで、露出した訪問者ごとの収益を比較し、不確実性を評価できます。

推定上昇率と信頼区間を含む訪問者あたりのコントロールと治療収益のバー

治療が意味のある上昇をもたらしたかどうかを判断する前に、曝露による収益を正規化します。

1. 実験を定義する

発送前に次のことを書き留めてください。

  • 安定した実験識別子。
  • 対照および治療のバリアント。
  • 訪問者、ユーザー、チームなどの割り当て単位。
  • プライマリ メトリックとガードレール メトリック。
  • 最小サンプル サイズ、テスト期間、停止ルール。

1 人の被験者は、実験が終了するまで 1 つのバリエーションにとどまらなければなりません。

2. Telemetryの初期化

npm install telemetry-sh
import telemetry from "telemetry-sh";

telemetry.init(process.env.TELEMETRY_API_KEY);

3. ログの割り当てと公開

被験者が実際に治療を経験できる場合にのみ曝露を記録します。

const logExperimentExposure = ({ visitorId, variant }) => {
  telemetry.log("experiment_events", {
    event_name: "experiment_exposed",
    experiment_id: "checkout_copy_v2",
    visitor_id: visitorId,
    variant, // "control" or "treatment"
  });
};

電子メール、Cookie 値、またはその他の個人データの代わりに内部識別子を使用します。

4. 完了した収益を記録する

完了した非テスト購入を同じテーブルに記録します。後で変更される可能性があるフィールドから検索するのではなく、元の割り当てを保存します。

const logPurchase = ({ visitorId, variant, orderId, revenueUsd }) => {
  telemetry.log("experiment_events", {
    event_name: "purchase_completed",
    experiment_id: "checkout_copy_v2",
    visitor_id: visitorId,
    variant,
    order_id: orderId,
    revenue_usd: revenueUsd,
  });
};

払い戻し、チャージバック、サブスクリプション、通貨、繰り返しの注文が指標にどのような影響を与えるかを事前に決定します。

5. 実験結果の比較

公開された訪問者あたりの収益により、不平等なトラフィックが結果を決定することがなくなります。このクエリは、各バリアントを集計する前に、訪問者ごとに 1 行を作成します。

WITH per_visitor AS (
  SELECT
    visitor_id,
    variant,
    MAX(CASE WHEN event_name = 'experiment_exposed' THEN 1 ELSE 0 END)
      AS was_exposed,
    SUM(CASE WHEN event_name = 'purchase_completed' THEN revenue_usd ELSE 0 END)
      AS visitor_revenue_usd
  FROM experiment_events
  WHERE experiment_id = 'checkout_copy_v2'
    AND timestamp_utc >= now() - INTERVAL '30 days'
  GROUP BY visitor_id, variant
)
SELECT
  variant,
  SUM(CASE WHEN was_exposed = 1 THEN 1 ELSE 0 END) AS exposed_visitors,
  SUM(CASE
    WHEN was_exposed = 1 AND visitor_revenue_usd > 0 THEN 1 ELSE 0
  END) AS buyers,
  ROUND(SUM(visitor_revenue_usd), 2) AS total_revenue_usd,
  ROUND(
    SUM(visitor_revenue_usd) /
    NULLIF(SUM(CASE WHEN was_exposed = 1 THEN 1 ELSE 0 END), 0),
    2
  ) AS revenue_per_exposed_visitor_usd,
  ROUND(
    100.0 * SUM(CASE
      WHEN was_exposed = 1 AND visitor_revenue_usd > 0 THEN 1 ELSE 0
    END) /
    NULLIF(SUM(CASE WHEN was_exposed = 1 THEN 1 ELSE 0 END), 0),
    2
  ) AS purchase_conversion_pct
FROM per_visitor
WHERE was_exposed = 1
GROUP BY variant
ORDER BY variant;

6. 不確実性の評価

予想ポイントだけで勝者を宣言しないでください。通常、収益分布には偏りがあるため、適切な信頼区間または統計モデルの訪問者レベルの結果をエクスポートします。事前に指定した決定ルールを分析とともに保持します。

結果を信頼する前に、次の点を確認してください。

  • サンプル比の不一致。
  • 訪問者は複数のバリエーションに割り当てられます。
  • 重複した注文イベント。
  • トランザクション、返金、混合通貨のテスト。
  • 両方のバリアントの変換時間が同じかどうか。
  • エラー率や遅延などのガードレール指標の動き。

次のステップ

グラフが分母から離れることがないように、レビューしたクエリと実験定義を一緒に保存します。を使用します。 サインアップアクティベーションファネルのレシピ 以前の製品マイルストーンと アップグレード前の機能導入 非実験的な展開ビューの場合。

関連機能

安定したイベント名、型指定されたフィールド、プライバシーがレビューされたコンテキストをキャプチャします。

ページの著者と参考資料

Telemetry 編集チームがこの説明を所有しています。製品チームは動作、例、境界をレビューします。

ドキュメントのレビュー方法