CRM Engagement Analyst 개념적 이해 가이드
들어가며
CRM Engagement Analyst는 전화 상담 후 남겨진 텍스트 기록(통화 요약, 상담 메모, 팔로우업 로그)을 분석해 SOL(수면잠복기)을 더 정교하게 예측하도록 돕는 전문가입니다. 이 문서는 기술 용어를 최소화해, CRM Agent의 역할과 데이터를 어떻게 해석하는지 쉽게 설명합니다.
1. CRM Agent는 무엇을 하는가?
한 줄 요약
“상담사와 사용자가 남긴 전화 통화 텍스트 기록을 모아, 치료 순응도·정서·이슈 영향을 읽고 오늘 밤 잠들기 시간을 더 정확히 예측합니다.”
기록 큐레이터 비유
🗂️ 텍스트 기록 큐레이터
├─ 오래된 텍스트 기록까지 꺼내 보기 (Full-To-Date)
├─ 중요한 문장/인용구 뽑기 (Evidence Snippets)
├─ 최근성·유형·빈도 가늠하기
└─ 오늘의 판단 근거로 편집하기
😴 SOL 예측에 기여(텍스트 기반)
├─ 주관적 SOL 단서 추출 ("어제 잠들기 1시간…")
├─ 감정·스트레스 맥락 반영
├─ 치료 순응도/상담 참여도 반영
└─ 앱 이슈로 인한 데이터 공백 보정
2. CRM Agent가 보는 데이터
2.1 핵심 소스: user_follow_up_log (텍스트 기반)
필드 (핵심):
- id: 로그 ID
- userId / userCycleId: 사용자/주기 식별자
- type: LOG | FOLLOW_UP_STATUS_CHANGE | CALL_SCHEDULE_CHANGE | PATIENT_ISSUE | EMERGENCY 등
- log: 상담/메모 원문 (전화 통화 내용을 요약·정리한 텍스트)
- meta: 추가 정보(JSON)
- createdAt: 작성 시각
2.2 Evidence Bundle (요약 + 원문)
요약 메타
- totalCount: 누적 상호작용 수 (Full-To-Date)
- countsByType: 유형별 분포
- lastInteractionAt / daysSinceLast: 최근성 지표
- hasRecentEmergency: 응급 관련 신호
원문 스니펫(텍스트, 최근순, 길이 제한)
- [#id @YYYY-MM-DD TYPE d+N] 텍스트…
- 최대 12개, 각 600자 내 트리밍 (토큰 예산 보호)
2.3 시간 처리 원칙 (TimeMachine & Backtesting)
Full-To-Date (미래누출 방지)
- startDate: 1970-01-01
- endDate: targetDate의 EOD (해당 일차 종료 시점)
- 즉, “해당 일차까지” 누적 기록만 사용 (미래 데이터 제외)
userCycleId가 있으면 같은 주기 범위에서 우선 해석
없으면 사용자 전체 기록에서 해석
### 2.4 분석 범위와 제약(중요)
오디오/음성 파일 자체는 분석하지 않습니다.
- 현재 범위는 상담사가 남긴 텍스트 기록(통화 요약/메모/팔로우업 로그)에 한정됩니다.
- STT(음성→텍스트) 전처리를 시스템 외부에서 수행했다면, CRM에는 최종 텍스트만 저장/분석합니다.
3. 무엇을 분석하나?
3.1 주관적 SOL 신호 추출
직접 보고: “어제 잠들기까지 1시간…”
간접 신호: “걱정돼서 뒤척였다”, “약을 먹으니 빨리 잠들었다”
맥락 보강: 같은 표현의 반복/변화 추세
3.2 치료 순응도·참여도
상담 빈도/길이/구체성 → engagementScore 가늠
상담 일정 변경 패턴 → scheduleAdherence 평가
상담 완료 이력 → completionRate 계산
3.3 앱 이슈 영향·데이터 공백 보정
PATIENT_ISSUE, CRASH, LOGIN 등 이슈 로그 → 해당 구간 데이터 신뢰도 하향
이슈 해소 후 회복 여부 추적
수면 데이터 공백이 있을 때 상담 로그의 주관적 보고로 보강
3.4 정서·위험 신호
감정/부정 키워드: 불안, 스트레스, 걱정, 힘듦
응급/Emergency 플래그: hasRecentEmergency = true이면 가중치 상향
4. 분석 프로세스
4.1 수집 → 정제 → 증거화
1) 수집: Full-To-Date(해당 일차 EOD까지) CRM 로그 조회
2) 정제: PII/민감표현 마스킹(필요 시), 길이 트리밍
3) 증거화: 최근순 스니펫 + 요약 메타 (countsByType, recency 등)
4.2 LLM 분석
입력 컨텍스트
- crmWindow, crmTotal, crmCountsByType, crmLastInteractionAt, crmDaysSinceLast, crmHasEmergency
- crmEvidence (스니펫 라인들)
출력(JSON)
- solScore: 분 단위 예측 (0-120)
- confidenceScore: 0.0-1.0
- keyFactors: 상위 근거 요인들
- analysis: 간결한 추론
- riskFactors: 순응·이슈·정서 기반 위험
- recommendations: 케어 연속성 관점의 행동 제안
4.3 신뢰도 판단 로직(개념)
데이터 양: totalCount↑ → 신뢰도↑ (단, 너무 오래된 기록 편향 방지)
최근성: daysSinceLast↓ → 신뢰도↑
다양성: countsByType 다양 → 해석 폭↑ (일관성 ±)
이슈: hasRecentEmergency/Issue → 리스크 고려, 스코어 조정
5. 사례로 이해하기
사례 1: 상담은 드물지만 강한 신호
상황
- 3주 동안 상담 2회, 둘 다 긴 텍스트
- “요즘 스트레스 심해 잠들기 어렵다” 반복
해석
- 빈도는 낮아도 신호 강도 높음
- stress-driven SOL 악화 가능성 큼 → SOL 상향 보정
권고
- 스트레스 완화 루틴 제안, 심리 전문가 협업 강조
사례 2: 앱 이슈 후 회복 패턴
``+ 상황
- 1주간 PATIENT_ISSUE(로그인 문제) 다수, 수면 데이터 공백
- 이슈 해결 이후 “다시 정상 사용, 빨리 잠들었다” 보고
해석
- 공백 기간 신뢰도 하향, 이후 보고에 무게
- 최근성 높은 긍정 신호 반영 → SOL 하향 보정
권고
- 데이터 품질 회복 모니터링, 환경 전문가와 재발 방지 점검
### 사례 3: 응급 신호 감지
상황
- EMERGENCY 타입 발생 + 불안 표현 증가
해석
- 단기적으로 SOL 변동성 확대 가능
- 심리/CBT-I 전문가와 즉시 협업 필요
권고
- 단기적 안전·안정화 프로토콜 안내, 상담 빈도 조정 검토
## 6. 다른 전문가와의 협업
Sleep Pattern Analyst
- 수면 데이터의 리듬·트렌드 → CRM의 주관적 보고로 검증/보강
Psychological State Analyst
- 불안/우울 지표와 CRM 정서 신호 정합성 확인
CBT-I Sleep Behavior Expert
- 순응도/루틴 준수 여부를 상담 기록에서 점검 → 개입 타이밍 최적화
Digital Sleep Environment Expert
- 앱 이슈·디지털 사용 습관 변화 → CRM 로그로 실시간 감지
Melatonin System Analyst
- 일조/리듬 관리 권고와 사용자의 실제 반응(상담 보고) 연결
## 7. 베스트 프랙티스
-
미래누출 금지
- 항상 targetDate의 EOD 이하 데이터만 사용 (Full-To-Date)
-
토큰·성능 관리
- 스니펫 12개 내, 각 600자 내 트리밍
- 유형 균형 샘플링(LOG/ISSUE/EMERGENCY 등) 고려
-
PII/민감정보 처리
- 필요 시 마스킹 규칙 적용(전화/이메일/주소 등)
-
근거 인용 습관화
- [#id @날짜 TYPE] 포맷으로 LLM 응답에도 출처 남기기
## 8. 구현 메모 (엔지니어용 요약)
데이터 제공자
- ICrmDataProvider.getCrmEngagementEvidence(userId, targetDate, dayIndex?, userCycleId?, tz?, maxItems?) → startDate=1970-01-01, endDate=toUtcEndOfDay(targetDate, tz) → Evidence Bundle: 요약 메타 + 스니펫[]
프롬프트 변수 (예)
- crmWindow, crmTotal, crmCountsByType, crmLastInteractionAt, crmDaysSinceLast, crmHasEmergency, crmEvidence
출력(JSON 스키마)
- solScore, confidenceScore, keyFactors[], analysis, riskFactors[], recommendations[]
## 9. 핵심 메시지
> “상담 기록은 숫자 사이 빈칸을 채워줍니다.
>
> 데이터가 적더라도, 올바른 한 줄이 큰 판단을 바꿉니다.
>
> CRM Agent는 그 한 줄의 무게를 SOL 예측에 정확히 반영합니다.”
## 부록 A. 프롬프트 예시
ID: crm_engagement_analysis
System/Instruction (요약)
- 너는 Patient Engagement & Care Continuity Expert다.
- 아래 evidence window와 스니펫을 바탕으로 SOL, 신뢰도, 근거 요인을 JSON으로 산출하라.
Context Vars
- userId: U-10293
- userCycleId: C-2025-07-01
- crmWindow: 2025-07-01~2025-07-21 (Europe/Berlin)
- crmTotal: 7
- crmCountsByType: LOG:5, PATIENT_ISSUE:1, FOLLOW_UP_STATUS_CHANGE:1
- crmLastInteractionAt: 2025-07-21T18:23:00.000Z
- crmDaysSinceLast: 0
- crmHasEmergency: false
Evidence Snippets (recent first) [#341 @2025-07-21 LOG d+0] 어제는 약 먹고 20분만에 잠들었어요. 걱정 덜해서 그런지 뒤척임이 줄었어요. [#327 @2025-07-15 PATIENT_ISSUE d+6] 앱 업데이트 후 로그인 이슈가 있어 데이터 못 남겼습니다. [#310 @2025-07-10 LOG d+11] 요즘 스트레스 덜해서 예전보단 빨리 잠듭니다.
## 부록 B. 샘플 응답(JSON)
```json
{
"solScore": 22,
"confidenceScore": 0.78,
"keyFactors": [
"최근 보고: 약물 복용 시 SOL 단축",
"스트레스 감소 보고로 뒤척임 감소",
"중간의 앱 이슈로 데이터 공백 있으나 이후 회복"
],
"analysis": "상담 로그에서 스트레스 감소 및 약물 효과 보고가 반복되어 단기적으로 SOL이 20분대에 머무를 가능성이 큼. 앱 이슈로 일시 공백 있으나 최신 로그에서 회복 확인.",
"riskFactors": [
"앱 이슈 재발 시 데이터 공백 가능",
"약물 의존 패턴의 잠재 위험"
],
"recommendations": [
"스트레스 완화 루틴 지속",
"약물 복용 가이드 준수 및 점진적 의존 방지 계획",
"다음 상담 시 수면 전 루틴 구체화"
]
}