ab-message-testing について
自動化されたセールスボットの A/B メッセージテストを設計する開発者向けのスキルです。テスト設計、統計分析、継続的な改善を扱います。
主な機能
- 01メッセージと会話フローのテスト
- 02テスト案のランダム割り当て
- 03サンプル数と有意性の分析
- 04テストライフサイクルの管理
- 05セグメント分析と多腕バンディット
活用シーン
- 01営業の導入文や CTA の比較
- 02質問順序の評価
- 03顧客セグメント別の文面展開
- 04結果の有意性の判定
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ louisblythe/ sales-skills --skill ab-message-testingインストール後、Claude Code で/ab-message-testingを入力して読み込まれたか確認します。
詳細
営業ボット向けA/Bメッセージテスト
営業ボット向けの自動テストシステム構築の専門家です。コンバージョン率を最適化するために、メッセージのバリエーションを自動でテストするシステムの設計を支援します。
初期評価
ガイダンスを提供する前に、以下を確認してください。
-
コンテキスト
- ボットはどの程度の会話量を処理していますか?
- どのような成果の最適化を目指していますか?
- 現在、パフォーマンスが低いメッセージはどれですか?
-
現状
- 現在、何らかのテストを実施していますか?
- 送信するメッセージはどのように決めていますか?
- メッセージのパフォーマンスについて、どのようなデータがありますか?
-
目標
- より優れたテストによって、何を達成できますか?
- 最も重視する指標は何ですか?
基本原則
1. 重要なものはすべてテストする
- 小さな変更が大きな影響をもたらすことがあります
- 何が効果的かを知っていると思い込まないでください
- データに判断を委ねてください
2. 統計的な厳密さ
- 十分なサンプルサイズを確保する
- 十分な期間を設ける
- 適切にランダム化する
3. 一度に変更する変数は1つ
- 何を変更したかを切り分ける
- そうしないと、何が効果的だったのかわかりません
- 同時ではなく、順番にテストする
4. 継続的な最適化
- テストは継続的に行います
- 勝者を新たなベースラインにします
- 常に何かをテストしてください
テスト対象
メッセージの内容
最初のメッセージ:
- 挨拶のスタイル
- 価値提案
- 質問形式か、断定形式か
- パーソナライズの度合い
応答メッセージ:
- トーンと話し方
- 長さ
- 構成
- CTA
反論への応答:
- 受け止め方
- 別の視点を示す方法
- 裏付けとなる情報
- フォローアップの質問
メッセージの構成
長さ:
- 短文か詳細な文か
- 1つのメッセージか、複数に分けるか
- 文の数
形式:
- 箇条書きありか、なし
- 絵文字ありか、なし
- 最後に質問するか、しないか
トーン:
- フォーマルか、カジュアルか
- 熱意があるか、落ち着いているか
- 直接的か、控えめか
会話の流れ
質問の順序:
- 適格性確認の順序
- 簡単な質問から始めるか、難しい質問から始めるか
- 段階的に進めるか、直接尋ねるか
分岐:
- 異なる経路
- スキップロジック
- 段階的な情報開示
テストアーキテクチャ
基本的なA/Bテスト
Contact arrives
↓
Random assignment (50/50)
↓
┌──────┴──────┐
↓ ↓
Variant A Variant B
↓ ↓
Track Track
↓ ↓
Analyze results
↓
Implement winner
複数バリエーションのテスト
使用する場面:
- ボリュームが大きい
- 複数のアイデアをテストする
- より早く学習したい
構成:
- コントロール:40%
- バリエーションA:20%
- バリエーションB:20%
- バリエーションC:20%
順次テスト
使用する場面:
- ボリュームが少ない
- より早く決断する必要がある
- より大きなリスクを許容できる
構成:
- 継続的にモニタリングする
- 明確な勝者が現れたら停止する
- 適応型アルゴリズムを使用する
実装
ランダム化
function assignVariant(contact_id, test_id, variants) {
// Consistent assignment (same contact always gets same variant)
hash = md5(contact_id + test_id)
bucket = hash % 100
cumulative = 0
for (variant in variants) {
cumulative += variant.percentage
if (bucket < cumulative) {
return variant.name
}
}
}
メッセージの選択
function getMessage(context, message_key) {
// Check for active test
test = getActiveTest(message_key)
if (!test) {
return getDefaultMessage(message_key)
}
// Get variant assignment
variant = assignVariant(context.contact_id, test.id, test.variants)
// Return variant message
return test.variants[variant].message
}
結果の追跡
function trackResult(contact_id, test_id, variant, outcome) {
result = {
contact_id: contact_id,
test_id: test_id,
variant: variant,
outcome: outcome, // responded, converted, dropped, etc.
timestamp: now()
}
store(result)
updateTestStats(test_id, variant, outcome)
}
統計分析
サンプルサイズの計算
必要な入力:
- ベースラインのコンバージョン率
- 最小検出可能効果(MDE)
- 統計的有意水準(通常95%)
- 統計的検出力(通常80%)
早見表:
| ベースライン率 | 10%の向上 | 20%の向上 | 50%の向上 |
|---|---|---|---|
| 5% | 30,000/バリエーション | 7,500/バリエーション | 1,200/バリエーション |
| 10% | 14,000/バリエーション | 3,500/バリエーション | 560/バリエーション |
| 20% | 6,400/バリエーション | 1,600/バリエーション | 260/バリエーション |
有意性検定
function isSignificant(variant_a, variant_b, confidence=0.95) {
// Calculate z-score
p_a = variant_a.conversions / variant_a.impressions
p_b = variant_b.conversions / variant_b.impressions
p_pooled = (variant_a.conversions + variant_b.conversions) /
(variant_a.impressions + variant_b.impressions)
se = sqrt(p_pooled * (1 - p_pooled) *
(1/variant_a.impressions + 1/variant_b.impressions))
z = (p_b - p_a) / se
// Check against critical value
z_critical = 1.96 // for 95% confidence
return abs(z) > z_critical
}
テストの終了判断
早期に終了しないでください:
- 初期結果にはばらつきがあります
- 新奇性効果が生じることがあります
- サンプルサイズが満たされるまで待ってください
以下の場合に終了します:
- サンプルサイズに達した
- 統計的有意性が得られた
- 事前に定めた期間が経過した
考慮事項:
- 待つことによるビジネスへの影響
- 誤った判断のコスト
- 機会費用
テスト管理
テストのライフサイクル
1. 仮説: 何を、なぜテストするのかを記録します。 「[理由]により、[変更]によって[指標]が改善すると考えます。」
2. 設計:
- バリエーションを定義する
- サンプルサイズと期間を設定する
- 指標を選択する
3. 開始:
- バリエーションを実装する
- 追跡を開始する
- 問題がないかモニタリングする
4. 分析:
- 有意性が得られるまで待つ
- 副次指標を確認する
- セグメントごとの効果を調べる
5. 決定:
- 勝者を実装する
- 得られた知見を記録する
- 次のテストを計画する
テストのドキュメント化
Test Name: Opening Message Greeting Style
Test ID: T-2024-001
Status: Running
Hypothesis:
A casual greeting will increase response rate because
it feels more human and less corporate.
Variants:
- Control (50%): "Hello! Thanks for reaching out..."
- Variant A (50%): "Hey there! Great to hear from you..."
Primary Metric: Response rate
Secondary Metrics: Sentiment, conversion rate
Sample Size Target: 1,000 per variant
Duration: 2 weeks or until significant
Results:
[To be completed]
テストカレンダー
常に用意しておくもの:
- 実施中のテスト
- 次に予定しているテスト
- アイデアのバックログ
避けること:
- 一度に多くの項目をテストしすぎる
- 同じメッセージでテストを重複させる
- 異常な状況下でテストする
高度なテスト
多腕バンディット
コンセプト: 成果の良いバリアントに、より多くのトラフィックを動的に割り当てます。
メリット:
- 最適化を迅速に進められる
- 無駄が少ない(成果の低いバリアントに表示される回数が減る)
- 継続的に最適化できる
トレードオフ:
- 統計的な厳密さが低下する
- 分析が難しくなる
- 長期的な効果を見落とす可能性がある
次の場合に使用します:
- トラフィック量が多い
- スピードが重要
- コンバージョンの指標が明確
パーソナライズドテスト
コンセプト: セグメントごとに効果的なメッセージは異なります。
実施方法:
- セグメント内でテストする
- セグメントごとの相互作用を分析する
- セグメント別の勝ちパターンを導入する
例:
- エンタープライズではメッセージ A が優勢
- SMB ではメッセージ B が優勢
- 適切な対象に絞って両方を導入する
シーケンシャルテスト
コンセプト: 段階的にテストし、成果の低いものを早期に除外します。
手順:
- 4 つのバリアントをそれぞれ 25% でテストする
- 下位 2 つを除外する
- 残った 2 つをそれぞれ 50% でテストする
- 勝者を導入する
成功の測定
主要指標
応答率: 返信があったメッセージの割合
コンバージョン率: 目標とするアクション(面談の予約、条件への適合など)を完了した割合
エンゲージメント率: 会話の継続率と離脱率
副次指標
感情: 肯定的/否定的な反応
会話の長さ: エンゲージメントの深さ
コンバージョンまでの時間: ファネルを進む速さ
ガードレール指標
配信停止率: 相手に迷惑をかけていないか
苦情率: 否定的なフィードバック
ブランドイメージ: ブランドを損なっていないか
よくあるテストの失敗
1. 早期に終了する
問題: 統計的有意性に達する前に勝者を決めてしまう
対策: 開始前にサンプルサイズを決めておく
2. 変数をテストしすぎる
問題: 何が変化の原因だったのか特定できない
対策: 1 回のテストにつき変数は 1 つにする
3. 仮説がない
問題: 学びのないまま、行き当たりばったりにテストしてしまう
対策: 仮説とその根拠を記録する
4. セグメントを無視する
問題: 平均値によってセグメントごとの差が隠れてしまう
対策: セグメント別に分析する
5. 勝者を導入しない
問題: テストを実施しても、結果に基づいて行動しない
対策: テスト前に導入計画を立てておく
6. 新奇性効果
問題: 新しいものが当初は優勢でも、その後効果が薄れる
対策: 十分な期間テストし、導入後もモニタリングする
セールスボットのテストアイデア
最初のメッセージ
- フォーマルな挨拶とカジュアルな挨拶
- 質問形式と断定形式の冒頭
- パーソナライズした紹介と一般的な紹介
- 短い紹介と詳細な紹介
条件確認の質問
- 直接的な質問と控えめな質問
- 単一選択と複数選択
- 質問の順序
- 質問の数
価値提案
- メリット重視と機能重視
- 具体的な数値と定性的な表現
- ソーシャルプルーフを含めるかどうか
- 顧客のコメント
CTA
- 「電話を予約する」と「詳細を見る」
- 時間を具体的に指定するか、自由に選べるようにするか
- CTA を 1 つにするか、選択肢を設けるか
- 緊急性を持たせるかどうか
確認すべき質問
さらに詳しい情報が必要な場合:
- テストに利用できる会話量はどのくらいですか?
- 成果が低いと思われるメッセージは何ですか?
- どの指標を改善しようとしていますか?
- これまでにどのようなテストを実施しましたか?
- テストに利用できるツールやインフラはありますか?
関連スキル
- conversational-flow-management:テストする内容
- performance-analytics:結果の測定
- personalization-at-scale:セグメント別のテスト
- ab-test-setup:A/B テストの一般原則