Auto-Tuner 해부 ①: 엔진 개요와 설계 철학
EXAWin Auto-Tuner의 전체 구조를 해부한다. 6개 학습 대상, 5단계 데이터 성숙도, 그리고 "맞추는 것이 아니라 정확하게 만드는 것"이라는 설계 원칙을 상세히 설명한다.
이 문서 시리즈는 EXAWin의 Auto-Tuner 엔진 내부를 해부한다. 코드 한 줄 한 줄의 의미, 선택한 통계 기법의 이유, 그리고 각 파라미터가 왜 그 범위에 있어야 하는지를 강의하듯 풀어간다.
이 시리즈를 끝까지 읽으면, 당신은 Auto-Tuner의 모든 추천이 왜 그 값인지 설명할 수 있게 된다.
1. Auto-Tuner란 무엇인가
1.1 한 줄 정의
Auto-Tuner = 과거 프로젝트(Won/Lost)의 결과를 바탕으로, 베이지안 엔진의 파라미터를 "정확하게 만드는" 시스템
여기서 핵심은 "정확하게"다. P(Win)을 높이는 것이 아니라, Won 딜의 P(Win)은 높고 Lost 딜의 P(Win)은 낮게 — 즉 현실과 일치시키는 방향으로 파라미터를 조정한다.
1.2 자동차 비유
엔진(베이지안 수식) 자체는 바뀌지 않는다. Auto-Tuner가 하는 일은 연료 배합비를 조절하는 것이다:
| 엔진 부품 | 자동차 비유 | EXAWin 대응 |
|---|---|---|
| 점화 임계값 | 점화 시점 (이그니션 타이밍) | T — 스테이지 임계값 |
| 연료 분사량 | 인젝터 열림 시간 | Impact — 시그널 가중치 |
| 가속 반응 | 스로틀 감도 | k — 기울기(Velocity) |
| 배기 처리 | 촉매 변환기 효율 | Dampening — 중복 시그널 감쇠 |
| 연료 누유 패널티 | 누유 경보 | Silence Penalty — 활동 공백 패널티 |
1.3 설계 5원칙
① 맞추는 것이 아니라 정확하게 만드는 것
② 임피던스 이중구조를 보존
③ 추천 + 판단 근거를 함께 제공
④ 인간 승인 필수 — 자동 적용 없음
⑤ 저장 데이터 불변 — 시뮬레이션은 순수 계산
특히 ⑤는 중요하다. Auto-Tuner는 한 번도 DB를 수정하지 않는다. 분석 버튼을 누르면 메모리에서 시뮬레이션을 돌리고, 관리자가 "적용" 버튼을 눌러야만 비로소 DB가 업데이트된다.
2. 6개 학습 대상
Auto-Tuner가 분석하고 추천하는 파라미터는 정확히 6개다.
① Signal Lift — 판별력 분석
"이 시그널이 나타나면, Won 확률이 실제로 높아지는가?"
각 시그널의 Lift = (Won에서 출현율) / (Lost에서 출현율)을 계산한다. Lift > 1이면 양성 지표, Lift < 1이면 음성 지표다. 현재 분류(Positive/Negative)와 실제 판별력이 일치하는지 검증한다.
📌 상세: ② Signal Lift 해부편
② Impact Score — 최적 가중치
"Game Changer에 5.0이라는 값이 정말 최적인가?"
각 ImpactType의 점수를 ±범위 내에서 변경하면서, 분리도(Won avg P(Win) - Lost avg P(Win))가 가장 높아지는 값을 찾는다. Phase별로 탐색 범위가 확장된다.
📌 상세: ③ Grid Search 엔진 해부편
③ T — 임계값 최적화
"각 스테이지의 문턱값(Threshold)은 어디에 놓아야 Won과 Lost를 가장 잘 구분하는가?"
Youden J 통계량 = Sensitivity + Specificity - 1 을 최대화하는 T 지점을 찾는다. J < 0.20이면 "데이터가 이 스테이지에서 Won/Lost를 구분하지 못한다"는 뜻이므로 추천하지 않는다.
📌 상세: ④ Threshold · k 해부편
④ k — 기울기 (Velocity)
"P(Win)이 T를 넘길 때 얼마나 급격하게 반응해야 하는가?"
기존에는 증거량(α+β)의 비율에 기반한 경험적 공식 1 + ln(ratio)를 사용했으나, Grid Search 기반으로 전환하여 분리도를 직접 최대화하는 k를 찾는다. 상한은 이론서 기준 12이다.
📌 상세: ④ Threshold · k 해부편
⑤ Dampening — 중복 시그널 감쇠
"같은 미팅에서 시그널 3개가 동시에 나왔을 때, 모두 같은 가중치를 줘야 하는가?"
Compound Score = MAX(시그널들) + 나머지 × dampening. dampening이 0이면 가장 강한 시그널만, 1이면 모두 동일 가중치. 현재 기본값 0.25를 Grid Search로 최적화한다.
⑥ Silence Penalty — 활동 공백 패널티
"고객을 만나지 않는 기간이 길어지면, 얼마나 패널티를 줘야 하는가?"
β에 누적되는 패널티 비율을 Grid Search로 최적화한다.
3. 5단계 데이터 성숙도 (Phase)
Auto-Tuner는 데이터가 부족할 때 과적합을 방지하기 위해, Won/Lost 중 적은 쪽(min) 기준으로 5단계 신뢰 등급을 매긴다.
| Phase | 조건 | Emoji | 조정 범위 | 신뢰도 |
|---|---|---|---|---|
| 1 | min < 5 | ❌ | 분석 불가 | none |
| 2 | min 5~9 | 🟠 | 방향성 참조만, 적용 불가 | low |
| 3 | min 10~19 | 🟡 | Impact, T, k | moderate |
| 4 | min 20~49 | 🟢 | Impact, T, k, Dampening, Silence | high |
| 5 | min ≥ 50 | 🔵 | 전체 + MCMC 사후분포 | stable |
왜 min을 기준으로 하는가?
Won이 100건인데 Lost가 3건이면, Lost 3건만으로 "이 파라미터에서 Lost가 잘 구분된다"고 말할 수 없다. 통계적 유의성은 항상 작은 표본에 의해 제한된다.
Phase에 따라 변하는 것들
Phase가 올라가면 Auto-Tuner의 행동이 점진적으로 확장된다:
| 동작 | Phase 2 | Phase 3 | Phase 4 | Phase 5 |
|---|---|---|---|---|
| Signal Lift 최소 출현 | 3회 | 5회 | 8회 | 10회 |
| Grid Search 범위 | ±20% | ±30% | ±40% | ±50% |
| T/k 조정 | ❌ | ✅ | ✅ | ✅ |
| Dampening/Silence 조정 | ❌ | ❌ | ✅ | ✅ |
| MCMC 사후분포 | ❌ | ✅ | ✅ | ✅ |
| Prior α/β 추천 | 수동 | 적률법 | MLE | MLE |
4. 핵심 지표: 분리도 (Separation)
Auto-Tuner의 목적함수(objective function)는 분리도다.
- Separation > 0.40: Excellent (A) — 파라미터가 현실을 잘 반영
- 0.25 ~ 0.40: Good (B) — 개선 여지 있음
- 0.10 ~ 0.25: Needs Improvement (C)
- < 0.10: Urgent (D) — 파라미터 조정 필요
분리도의 한계와 AUC
분리도는 평균의 차이만 측정한다. 분포의 겹침을 고려하지 않는다.
예시:
- 시나리오 A: Won 평균 0.70, Lost 평균 0.30 → Separation 0.40 → Excellent!
- 시나리오 B: Won 범위 [0.20, 0.90], Lost 범위 [0.10, 0.80] → 평균 차이는 같지만 많이 겹침
이를 보완하기 위해 ROC AUC를 도입했다. AUC는 "무작위로 Won 하나, Lost 하나를 뽑았을 때, Won의 P(Win)이 더 높을 확률"이다. 겹침이 많으면 AUC는 낮아진다.
📌 상세: ⑤ 통계 검증 해부편
5. 시뮬레이션 엔진
Auto-Tuner의 핵심은 메모리 기반 시뮬레이션이다. DB에 저장된 실제 BayesianUpdate를 사용하지 않고, 원본 데이터(활동, 시그널, Prior)로부터 처음부터 다시 계산한다.
왜 재계산하는가?
파라미터를 바꿔보려면 "만약 Impact가 3.0이었다면 P(Win)이 어떻게 달라졌을까?"를 계산해야 한다. 이건 DB에 저장된 과거 결과로는 알 수 없다. 가상의 파라미터로 처음부터 시뮬레이션해야만 알 수 있다.
시뮬레이션 1회 흐름:
α, β ← Prior 초기값
for 각 활동 (시간순):
→ 해당 활동의 시그널들로 Compound Score 계산
→ α += SWV × 양성 Compound
→ β += SWV × 음성 Compound
→ β += 침묵 패널티 (활동 공백 시)
P(Win) = α / (α + β)
이 시뮬레이션을 모든 Won/Lost 프로젝트에 대해 반복하면, 그 파라미터에서의 분리도를 알 수 있다.
DB 쿼리 = 0
시뮬레이션 중 DB 쿼리는 단 한 번도 실행되지 않는다. 초기화 시 모든 데이터를 메모리에 프리로딩하고, 그 이후는 순수 계산만 수행한다. 이것이 원칙 ⑤의 구현이다.
6. 문서 시리즈 안내
| 편 | 제목 | 내용 |
|---|---|---|
| ① [현재] | 엔진 개요와 설계 철학 | 전체 구조, 6학습 대상, Phase, 분리도 |
| ② | Signal Lift 해부 | Lift 계산, Laplace smoothing, 분류 검증 |
| ③ | Grid Search 엔진 해부 | Impact 최적화, Phase별 범위, Dampening, Silence |
| ④ | Threshold · k 해부 | Youden J, T 최적화, k Grid Search |
| ⑤ | 통계 검증 해부 | AUC, K-fold CV, Prior 추천 |
| ⑥ | MCMC 사후분포 해부 | Emcee Ensemble MCMC, 모델 정의, HDI, 수렴 진단 |