mcpField
O
objection-pattern-learning

objection-pattern-learning

github.com/louisblytheマーケティング・グロース190412 回インストール40 週間前に更新
リポジトリ

objection-pattern-learning について

営業ボットを開発する人向けの設計スキルです。会話から未知の懸念を検出し、関連パターンを分類して人による確認を促し、対応結果を追跡する方法を扱います。

主な機能

  1. 01既知の反論パターンとの照合
  2. 02未知の反論の検出
  3. 03類似する懸念のクラスタリング
  4. 04新たな傾向を人に通知
  5. 05対応結果と回答案の追跡
  6. 06競合への言及の監視

活用シーン

  1. 01営業会話から新しい反論を発見
  2. 02繰り返されるセキュリティや価格の懸念を分類
  3. 03新しい傾向を確認してから回答を作成
  4. 04回答案ごとの会話への影響を追跡

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/louisblythe/sales-skills --skill objection-pattern-learning

インストール後、Claude Code で/objection-pattern-learningを入力して読み込まれたか確認します。

詳細

反論パターンの学習

会話全体から新たな反論パターンを検出する営業ボットの構築に精通しています。新しい反論を特定し、類似する懸念を分類して、人間によるレビューと対応策の作成に向けて通知するシステムを開発者が構築できるよう支援することが目標です。

パターン学習が重要な理由

発見の課題
Static objection handling:
- Pre-programmed responses only
- New objections go unaddressed
- Market changes undetected
- Competitors evolve unseen

Bot encounters new objection:
→ Falls back to generic response
→ Loses opportunity
→ Pattern never surfaces
学習の利点
Pattern-aware system:
- Detects novel objections automatically
- Clusters similar concerns
- Alerts humans to trends
- Enables rapid response development

New objection emerges:
→ System flags it
→ Human develops response
→ Bot learns new handling
→ Future conversations improved

反論の検出

既知の反論との照合
KNOWN_OBJECTIONS = {
    "pricing": {
        "patterns": [
            r"too expensive",
            r"out of.*budget",
            r"can't afford",
            r"cheaper.*alternative"
        ],
        "response_id": "price_value_response"
    },
    "timing": {
        "patterns": [
            r"not.*right time",
            r"too busy",
            r"check back.*later",
            r"maybe next quarter"
        ],
        "response_id": "timing_response"
    }
    # ... more known objections
}

def detect_known_objection(message):
    for category, config in KNOWN_OBJECTIONS.items():
        for pattern in config["patterns"]:
            if re.search(pattern, message, re.IGNORECASE):
                return category, config["response_id"]
    return None, None
未知の反論の検出
def detect_unknown_objection(message, sentiment):
    # Negative sentiment but no known match?
    known_cat, _ = detect_known_objection(message)

    if known_cat is None and sentiment < -0.3:
        # Likely an objection we don't recognize
        return {
            "is_unknown": True,
            "message": message,
            "sentiment": sentiment,
            "timestamp": now(),
            "prospect_context": get_context()
        }

    return {"is_unknown": False}
反論の兆候
Language patterns suggesting objection:
- "But what about..."
- "My concern is..."
- "I'm worried that..."
- "The problem is..."
- "We've tried this before and..."
- "I don't think..."
- "That won't work because..."
- Negative sentiment + question format

Not all negative sentiment is objection:
- "I hate Mondays" → Not product objection
- "I hate that our current tool can't..." → Pain point, not objection

パターンの分類

類似する反論のグループ化
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.cluster import DBSCAN

def cluster_objections(objection_texts):
    # Convert to vectors
    vectorizer = TfidfVectorizer(stop_words='english')
    vectors = vectorizer.fit_transform(objection_texts)

    # Cluster similar objections
    clustering = DBSCAN(eps=0.5, min_samples=3)
    clusters = clustering.fit_predict(vectors)

    # Group by cluster
    clustered = {}
    for i, cluster_id in enumerate(clusters):
        if cluster_id not in clustered:
            clustered[cluster_id] = []
        clustered[cluster_id].append(objection_texts[i])

    return clustered
意味的類似性
Group objections by meaning, not just keywords:

Cluster: "Security concerns"
- "What about data security?"
- "Is our information safe?"
- "We have strict compliance requirements"
- "How do you handle data privacy?"
- "Can you share your SOC 2 report?"

All different phrasings, same core concern.
System recognizes pattern, creates category.
新たなパターンの検出
def detect_emerging_patterns(time_window_days=7):
    # Get recent unknown objections
    recent = get_unknown_objections(days=time_window_days)

    # Cluster them
    clusters = cluster_objections([o["message"] for o in recent])

    # Find clusters with significant volume
    emerging = []
    for cluster_id, objections in clusters.items():
        if len(objections) >= THRESHOLD:  # e.g., 5+ similar objections
            emerging.append({
                "cluster_id": cluster_id,
                "count": len(objections),
                "examples": objections[:5],
                "suggested_category": generate_category_name(objections)
            })

    return emerging

通知とレビュー

通知のトリガー
Generate alert when:

1. New cluster emerges
   - 5+ similar unknown objections in 7 days
   - → Alert: "Emerging objection pattern detected"

2. Spike in known category
   - 50% increase in objection category
   - → Alert: "Pricing objections up 50% this week"

3. High-value deal objection
   - Unknown objection from enterprise prospect
   - → Alert: "Enterprise deal surfaced new concern"

4. Repeated bot failures
   - Same objection causing fallback 3+ times
   - → Alert: "Bot unable to handle objection pattern"
通知の形式
{
  "alert_type": "emerging_objection",
  "severity": "medium",
  "timestamp": "2024-01-20T10:00:00Z",
  "summary": "New objection pattern: Implementation concerns",
  "details": {
    "occurrence_count": 12,
    "first_seen": "2024-01-15",
    "example_messages": [
      "How long does implementation actually take?",
      "We don't have IT resources for a big rollout",
      "Our last software implementation was a nightmare"
    ],
    "affected_campaigns": ["enterprise_outbound", "smb_trial"],
    "conversion_impact": "15% lower meeting rate when this objection occurs"
  },
  "suggested_actions": [
    "Develop implementation-focused response",
    "Create case study on fast implementations",
    "Add implementation timeline to early messaging"
  ]
}
人間によるレビュー用インターフェース
Dashboard elements:

1. Objection trend graph
   - Known categories over time
   - Unknown/unhandled trend line

2. Emerging patterns queue
   - Clustered new objections
   - Example messages
   - One-click "Create response" action

3. Pattern detail view
   - All messages in cluster
   - Prospect context for each
   - Similar known objections
   - Suggested response drafts

対応策の作成

パターンから対応策へ
Workflow:

1. Pattern detected
   "We tried [competitor] and it didn't work"
   (12 occurrences this week)

2. Human analyzes
   - What's the real concern?
   - What proof addresses it?
   - What's the ideal response?

3. Response crafted
   "I hear that a lot—[competitor] works differently
    than we do. What specifically didn't work for you?
    That'll help me show if we'd have the same issue
    or if we've solved it."

4. Response deployed
   - Added to bot's objection library
   - A/B tested against variations
   - Monitored for effectiveness
対応テンプレート
For each new objection category, capture:

{
  "objection_category": "competitor_failure",
  "trigger_patterns": [
    r"tried.*competitor.*didn't work",
    r"competitor.*failed",
    r"bad experience with.*competitor"
  ],
  "response_variants": [
    {
      "id": "v1",
      "response": "I hear that—what specifically didn't work?",
      "conversion_rate": null,  // To be measured
      "active": true
    }
  ],
  "escalation_threshold": 0.3,  // If confidence < 30%, escalate
  "created_at": "2024-01-20",
  "created_by": "human_review"
}

継続的な学習

フィードバックループ
Cycle:
1. Objection detected
2. Response delivered
3. Outcome tracked
   - Did conversation continue?
   - Did prospect convert?
   - Did they disengage?
4. Response effectiveness scored
5. Poor performers flagged for revision
6. New variants tested

Never "set and forget"—always improving.
対応策のA/Bテスト
def select_response(objection_category):
    responses = get_active_responses(objection_category)

    if len(responses) > 1:
        # A/B test: weight by past performance
        weights = [r["conversion_rate"] or 0.5 for r in responses]
        selected = weighted_random(responses, weights)
    else:
        selected = responses[0]

    # Log for tracking
    log_response_selection(objection_category, selected["id"])

    return selected["response"]
パフォーマンスの追跡
For each response variant, track:

- Times used
- Continuation rate (did convo continue?)
- Meeting conversion rate
- Time to conversion
- Prospect sentiment after response

Weekly review:
- Which responses underperform?
- Which objections have no good response?
- What new patterns need attention?

競合情報

競合他社への言及パターン
Track objections mentioning competitors:

"We're using [Competitor A]"
"[Competitor B] is cheaper"
"[Competitor C] has feature X"

Cluster by competitor:
- Which competitors come up most?
- What do prospects say about them?
- What features do they mention?

Feed into competitive positioning.
市場の変化の検出
Over time, patterns reveal:

Q1: "We don't have budget" (40% of objections)
Q2: "We're evaluating [new competitor]" (35% of objections)

→ New competitor gaining traction
→ Triggers competitive response development
→ Informs product and marketing

Objection patterns = market intelligence.

実装

データモデル
class Objection:
    message: str
    timestamp: datetime
    prospect_id: str
    conversation_id: str
    detected_category: str | None
    confidence: float
    sentiment: float
    response_given: str | None
    outcome: str | None  # continued, converted, disengaged

class ObjectionPattern:
    category: str
    patterns: List[str]
    examples: List[str]
    responses: List[Response]
    first_seen: datetime
    occurrence_count: int
    status: str  # active, review_needed, deprecated

class PatternAlert:
    alert_type: str
    pattern: ObjectionPattern
    trigger_reason: str
    suggested_actions: List[str]
    reviewed: bool
    reviewed_by: str | None
処理パイプライン
For each incoming message:

1. Sentiment analysis
   → Score message sentiment

2. Known objection match
   → Check against existing patterns

3. If no match + negative sentiment:
   → Log as potential new objection
   → Store with context

4. Periodic clustering (daily/weekly)
   → Group unknown objections
   → Identify emerging patterns
   → Generate alerts

5. Human review
   → Validate patterns
   → Create responses
   → Deploy to bot

指標

パターン学習の健全性
Track:
- Unknown objection rate (should decrease over time)
- Time from pattern emergence to response deployment
- Response coverage (% of objections with good response)
- Alert-to-resolution time

Goals:
- <10% unknown objection rate
- <48h from alert to response deployment
- >90% objection coverage
- <24h average alert resolution
ビジネスへの影響
Measure:
- Meeting rate improvement as responses improve
- Reduced escalations to humans
- Faster deal cycles (objections handled smoothly)
- Competitive win rate changes

Objection handling quality directly impacts pipeline.

コメント