이탈 위험 탐지기 - 떠나기 전에 위험 계정를 찾습니다 — Claude Skill
Claude Code용 Claude 스킬 · 제공: Gooseworks · 실행: /churn-risk-detector (Claude 내)·업데이트: 2026년 6월 14일
지원과 사용량 신호로 고객 계정의 이탈 위험을 점수화합니다
- 지원 티켓, Slack 기록, NPS, 사용량, 청구에서 위험 신호를 스캔합니다
- 모든 account를 critical/high/medium/low signal 기준으로 0-100점 scoring합니다
- account를 Red, Orange, Yellow, Green tier로 나눕니다
- Red와 Orange account별 root-cause hypothesis와 save play를 생성합니다
- week-over-week tier movement를 추적합니다
대상
기능
감에 의존한 CSM round를 scored risk list와 구체적 save play로 대체합니다.
갱신 60일 전에 이탈 조짐이 있는 계정을 모두 찾아 대화가 더 어려워지기 전에 개입합니다.
CS 플랫폼이 없는 초기 단계 팀이 원시 데이터를 매주 실행 가능한 위험 목록으로 바꿉니다.
작동 방식
customer list, support data, usage data, comms history를 입력으로 받습니다
support, communication, usage, commercial dimension 전반에서 risk signal을 추출합니다
weighted model로 모든 account를 score합니다
Red와 Orange tier용 save play를 생성합니다
trend delta가 포함된 weekly health report를 출력합니다
개선되는 지표
지원 도구
이탈 위험 탐지기을(를) 사용해 보시겠어요?
시작 방법을 선택하세요.
이 스킬을 컴퓨터에 로컬로 설치하고 실행합니다.
컴퓨터에서 터미널을 열고 이 명령을 붙여넣으세요:
이 명령은 스킬과 모든 파일을 컴퓨터에 다운로드합니다:
모든 프로젝트에서 사용하려면 끝에 -g를 추가하세요.
Claude Code를 시작한 다음 명령을 입력하세요:
이탈 위험 탐지기
너무 늦기 전에 churn risk가 있는 account를 드러냅니다. support, communication, usage pattern의 signal을 모아 specific save action이 포함된 scored risk report로 만듭니다.
대상: CS platform이 없는 early-stage team(Gainsight, ChurnZero 없음). customer spreadsheet, Slack channel, support inbox가 있는 상태입니다. 이 스킬은 그 raw signal을 actionable churn risk list로 바꿉니다.
언제 사용할지
- "어떤 customer가 churn risk가 있나요?"
- "weekly churn risk scan을 실행해줘"
- "걱정해야 할 account를 flag해줘"
- "한동안 연락 없는 사람은 누구인가요?"
- "customer health report를 만들어줘"
Phase 0: Intake
Account data
- Customer list — CSV 또는 sheet: company name, primary contact email, contract value(MRR/ARR), contract start date, renewal date(알고 있다면)
- Product/service type — 무엇에 비용을 지불하나요? (expected engagement calibration에 도움)
Signal sources(가진 것을 제공)
- Support tickets — Intercom, Zendesk, email export(CSV: customer, date, subject, status, resolution time)
- Slack channel history — customer Slack channel 또는 shared channel message
- NPS/CSAT scores — score와 comment가 있는 최근 survey result
- Usage data — tracking하는 metric: login, API call, feature used, active user(CSV export)
- Email/communication log — account별 last touchpoint(date + context)
- Billing data — payment failure, downgrade, discount request
Calibration
- "healthy"는 어떤 모습인가요? — healthy customer를 설명합니다(예: "매일 login, 3+ feature 사용, email에 24시간 안에 response")
- Known churn reasons — 과거 customer가 왜 churn했나요? (signal weighting에 도움)
Phase 1: Signal extraction
1A: Support signal analysis
Support ticket data에서 account별로 계산합니다:
| Signal | Calculation | Risk Weight |
|---|---|---|
| Ticket volume spike | 지난 30일 동안 자기 평균의 >2x | High |
| Unresolved tickets | 7일 이상 된 open ticket | High |
| Escalation language | keyword: "cancel", "frustrated", "alternative", "not working", "disappointed" | Critical |
| Response time degradation | 이 customer에 대한 평균 response time이 상승 trend | Medium |
| Repeat issues | 같은 problem이 2회 이상 report됨 | High |
1B: Communication signal analysis
Slack/email history에서:
| Signal | Calculation | Risk Weight |
|---|---|---|
| Gone silent | 30+일 message 없음(이전에는 active였음) | High |
| Decreasing frequency | prior 90 days 대비 message frequency가 >50% drop | Medium |
| Negative sentiment shift | tone이 positive에서 neutral/negative로 변함 | Medium |
| Champion disengagement | primary contact가 response를 멈춤 | Critical |
| New stakeholder questions | 새 사람이 "이게 무엇을 하나요?" 같은 basic question을 함 | Medium(potential reorg) |
1C: Usage signal analysis(data가 있으면)
| Signal | Calculation | Risk Weight |
|---|---|---|
| Login drop | active user가 prior month 대비 >30% 감소 | High |
| Feature abandonment | 이전에 regularly 사용하던 key feature 사용 중단 | High |
| Shallow usage | 많은 feature 비용을 내지만 1개 feature만 사용 | Medium |
| No growth | 6+개월 동안 seat/user 수 동일 | Low |
| Export spike | data export가 갑자기 증가 | Critical(이전 가능성) |
1D: Commercial signal analysis
| Signal | Calculation | Risk Weight |
|---|---|---|
| Discount request | pricing reduction 요청 | High |
| Downgrade inquiry | lower tier 문의 | Critical |
| Payment failure | 7+일 안에 해결되지 않은 failed payment | High |
| Contract approaching renewal | renewal까지 <60일인데 renewal discussion 없음 | Medium |
| Competitor mention | 어떤 channel에서든 competitor 언급 | High |
Phase 2: Risk scoring
Scoring model
각 account는 composite risk score(0-100)를 받습니다:
Risk Score = Σ (signal_weight × signal_present)
Weights:
Critical signal = 25 points each
High signal = 15 points each
Medium signal = 8 points each
Low signal = 3 points each
Score cap: 100
Risk tiers
| Tier | Score | Label | Action Urgency |
|---|---|---|---|
| Red | 70-100 | Critical risk — likely to churn | 이번 주 |
| Orange | 40-69 | Elevated risk — needs attention | 2주 안 |
| Yellow | 20-39 | Early warning — monitor closely | 30일 안 |
| Green | 0-19 | Healthy — no action needed | Routine check-in |
Phase 3: Save play generation
각 Red와 Orange account에 specific save play를 생성합니다:
Save play template
ACCOUNT: [Company Name]
RISK TIER: [Red/Orange]
RISK SCORE: [X/100]
MRR/ARR: $[X]
SIGNALS DETECTED:
- [Signal 1] — [Evidence: specific data point]
- [Signal 2] — [Evidence]
- [Signal 3] — [Evidence]
ROOT CAUSE HYPOTHESIS:
[1-2 sentences: What do you think is actually going wrong?
E.g., "Champion left the company and new stakeholder hasn't been onboarded"
or "They hit a technical limitation with [feature] that's blocking their primary use case"]
RECOMMENDED SAVE PLAY:
1. [Immediate action — e.g., "Schedule a call with [contact] this week"]
2. [Follow-up — e.g., "Send a personalized Loom showing how to solve [specific issue]"]
3. [Structural fix — e.g., "Assign a dedicated onboarding session for new stakeholder"]
TALK TRACK:
"[2-3 sentences the CSM/founder can use to open the conversation naturally,
without saying 'we noticed you might be churning']"
ESCALATION TRIGGER:
If [specific condition] by [date], escalate to [founder/CEO call].
Phase 4: 출력 형식
# Churn Risk Report — Week of [DATE]
Total accounts scanned: [N]
Data sources: [list what was available]
---
## Risk Summary
| Tier | Count | Total MRR at Risk |
|------|-------|-------------------|
| 🔴 Red (Critical) | [N] | $[X] |
| 🟠 Orange (Elevated) | [N] | $[X] |
| 🟡 Yellow (Early Warning) | [N] | $[X] |
| 🟢 Green (Healthy) | [N] | $[X] |
**Total MRR at risk (Red + Orange):** $[X] ([Y]% of total MRR)
---
## 🔴 Critical Risk Accounts
### [Company Name 1] — Score: [X]/100 | MRR: $[X]
**Signals:** [bullet list]
**Root cause:** [hypothesis]
**Save play:** [specific actions]
**Owner:** [who should act]
**Deadline:** [date]
### [Company Name 2] — ...
---
## 🟠 Elevated Risk Accounts
### [Company Name] — Score: [X]/100 | MRR: $[X]
**Signals:** [bullet list]
**Recommended action:** [1-2 sentences]
---
## 🟡 Early Warning Accounts
| Account | Score | Key Signal | Suggested Action |
|---------|-------|------------|-----------------|
| [Name] | [X] | [Signal] | [Action] |
| [Name] | [X] | [Signal] | [Action] |
---
## Trends vs Last Week
- Accounts moved Red → Green: [list — wins!]
- Accounts moved Green → Yellow/Orange: [list — new risks]
- Accounts churned since last report: [list]
---
## Signal Distribution
| Signal Type | Accounts Affected |
|------------|-------------------|
| Support ticket spike | [N] |
| Gone silent | [N] |
| Usage decline | [N] |
| Competitor mention | [N] |
| Payment issue | [N] |
| Champion disengagement | [N] |
---
## Recommended Focus This Week
1. **[Account]** — [Why + what to do]
2. **[Account]** — [Why + what to do]
3. **[Account]** — [Why + what to do]
clients/<client-name>/customer-success/churn-risk/risk-report-[YYYY-MM-DD].md에 저장합니다.
Scheduling
매주 실행:
0 8 * * 1 python3 run_skill.py churn-risk-detector --client <client-name>
비용
| Component | Cost |
|---|---|
| All signal analysis | 무료(LLM reasoning) |
| Slack/email parsing | 무료 |
| Total | 무료 |
필요한 도구
- CSV/sheet의 input data(support ticket, usage, NPS)
- Optional: communication signal을 위한 Slack channel reading
- 외부 API 비용 없음. 순수 analysis
트리거 문구
- "어떤 customer가 risk가 있나요?"
- "churn risk scan을 실행해줘"
- "weekly customer health report"
- "at-risk account를 flag해줘"