objection-pattern-learning について
営業ボットを開発する人向けの設計スキルです。会話から未知の懸念を検出し、関連パターンを分類して人による確認を促し、対応結果を追跡する方法を扱います。
主な機能
- 01既知の反論パターンとの照合
- 02未知の反論の検出
- 03類似する懸念のクラスタリング
- 04新たな傾向を人に通知
- 05対応結果と回答案の追跡
- 06競合への言及の監視
活用シーン
- 01営業会話から新しい反論を発見
- 02繰り返されるセキュリティや価格の懸念を分類
- 03新しい傾向を確認してから回答を作成
- 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.
コメント
Markdown 対応