| name | election-forecaster |
| version | 2.3 |
| description | 선거 승률 정량 예측. 베이지안+Silver가중평균+6축삼각측량+MC10000+RedTeam+Brier검증. 한국5종(대선·총선·광역·기초·재보궐)·글로벌옵션. research-skill·fact-checker·risk-radar 자동연동. 1명·N명 동시. v2.3 강제 골격형. 트리거: 승률예측, election forecaster, 당선확률, 선거예측, 선거예측리포트, 내러티브리포트, 11섹션, 강제골격, 금지어, 합쇼체, 베이지안선거, 몬테카를로선거, Silver모델, 여론조사메타분석, House Effect, 삼각측량6축, Red Team Premortem. NOT: 정책기획(→policy-planning), 캠프전략(→policy-planning), 인물프로파일(→profiler-skill), 리서치만(→research-skill), 사업전략(→biz-skill), 재무모델(→financial-model).
|
election-forecaster v2.3
선거 승률을 정량 수렴시키는 엔진. 내부 모델은 수치, 외부 출력은 리포트. 모델은 베이지안 + 몬테카를로 + Silver 가중평균 + 6축 삼각측량 + Red Team으로 정량 수렴하되, 형에게 전달되는 산출물은 일반 의사결정자가 읽을 수 있는 리포트 문서입니다. v2.3: 체크리스트형 게이트 → 강제 골격형으로 전환. 11섹션 한국어 정식 제목·금지어 14종·줄글 상한·표 비율을 SKILL.md 본문에 직접 박제. 적발된 실패 사례(2026 서울시장 리포트: 임원 요약·캘리브레이션·프리모르템·VII 몬테카를로·VIII Red Team·X Brier·줄글 4문단·캠프 권고)를 정면 차단.
Skill Boundaries
- 하는 것 — 선거 승률 정량 예측.
- 안 하는 것 — 영토(캠프 권고) 강제. P1 승률예측, election forecaster, 당선확률, 선거예측, 선거예측리포트, 내러티브리포트, 11섹션, 강제골격, 금지어, 합쇼체, 베이지안선거, 몬테카를로선거, Silver모델, 여론조사메타분석, House Effect, 삼각측량6축, Red Team Premortem, Brier Score, 6.3지선, 지방선거, 대선예측, 총선예측, 광역단체장, 기초단체장, 재보궐, 허니문선거, 텃밭지수, Shy Tory, Tornado, P10P50P90. P2 예측해줘, 승률 산출해줘, 당선 확률 알려줘, forecast election, predict win rate. P3 election forecasting, Bayesian probability, Monte Carlo, poll aggregation, house effect, triangulation, pre-mortem, Brier calibration. P4 출마직후·D-90~D-7 갱신·신규폴 발표·공천확정·이슈폭발. P5 .md로, 리포트로, 옵시디언으로, 합쇼체로. 풀박제·1pager는 명시 요청 시만. NOT 정책기획(→policy-planning), 캠프전략(→policy-planning), 인물프로파일(→profiler-skill), 리서치만(→research-skill), 사업전략(→biz-skill), 재무모델(→financial-model).
When to Use
- 사용자가 "예측해줘", "승률 산출해줘", "당선 확률 알려줘", "forecast election", "predict win rate." 같은 표현으로 발동
- 출마직후·D-90~D-7 갱신·신규폴 발표·공천확정·이슈폭발.
- 안 쓸 때 — 영토(캠프 권고) 강제. P1 승률예측, election forecaster, 당선확률, 선거예측, 선거예측리포트, 내러티브리포트, 11섹션, 강제골격, 금지어, 합쇼체, 베이지안선거, 몬테카를로선거, Silver모델, 여론조사메타분석, House Effect, 삼각측량6축, Red Team Premortem, Brier Score, 6.3지선, 지방선거, 대선예측, 총선예측, 광역단체장, 기초단체장, 재보궐, 허니문선거, 텃밭지수, Shy Tory, Tornado, P10P50P90. P2 예측해줘, 승률 산출해줘, 당선 확률 알려줘, forecast election, predict win rate. P3 election forecasting, Bayesian probability, Monte Carlo, poll aggregation, house effect, triangulation, pre-mortem, Brier calibration. P4 출마직후·D-90~D-7 갱신·신규폴 발표·공천확정·이슈폭발. P5 .md로, 리포트로, 옵시디언으로, 합쇼체로. 풀박제·1pager는 명시 요청 시만. NOT 정책기획(→policy-planning), 캠프전략(→policy-planning), 인물프로파일(→profiler-skill), 리서치만(→research-skill), 사업전략(→biz-skill), 재무모델(→financial-model).
Prerequisites
| # | 체크 | 미충족 시 |
|---|
| 1 | 대상·입력 명확 (스킬 발동 의도 확인) | 1줄 확인 후 진입 |
| 2 | references/ 폴더 접근 가능 | inline fallback |
| 3 | scripts/ 실행 권한 | 권한 보정 후 재시도 |
본질 (WHY)
기존 스킬로 안 되는 이유:
- biz-skill: 18축 패턴은 사업이지 선거 아님 (허니문·텃밭·여론조사 편향 ✗)
- research-skill: 리서치만, 확률수렴 ✗
- data-analytics: 통계 일반, 선거 도메인 변수 ✗
- policy-planning: 캠프전략은 처방, 승률예측은 진단
→ 선거 도메인 특화 확률엔진. 본 스킬은 승률 산출만. 전략수립·캠프운영은 NOT.
9단계 파이프라인
| # | 단계 | 핵심 | 도구 |
|---|
| ① | 거시환경·기저율 | 정권사이클·정당지지도·여당프리미엄 사전확률 | bayesian_updater.py + structural-factors-kr.md |
| ② | 선거구 구조 | 텃밭지수·역대결과·세대별 지지 | kr-electoral-history.md |
| ③ | 공천구도 | 단수/경선·상대분열·현직프리미엄 | research-skill DEEP 자동발동 |
| ④ | 여론조사 메타분석 | Silver식 가중평균·House Effect·모드보정 | poll_aggregator.py + pollster-ratings-kr.md + polling-bias-correction.md |
| ⑤ | 강점·약점 정량화 | 자산/리스크 점수표·이슈리스크 매트릭스 | fact-checker·risk-radar 자동연동 |
| ⑥ | 확산리서치 + Red Team | 5유형(구조·숨은주체·지표·인과·경계) + 패배경로 7+ | red_team.py + red-team-playbook.md |
| ⑦ | 6축 삼각측량 | 여론조사·구조·역사·예측시장·펀더멘털·현장지표 | triangulation.py + triangulation-6axes.md |
| ⑧ | 몬테카를로 시뮬 | 변수별 분포 → 10,000회 → P10/P50/P90 + σ | monte_carlo.py |
| ⑨ | 시나리오 5종 + 갱신플랜 | Best·Base·Worst·Black Swan·Bandwagon + D-N 체크포인트 | time-protocol.md + output-templates/ |
트리거 발동 시 즉시 실행 — 강제 순서
- 인물·선거 식별: 후보명·선거구·선거일 추출. 부재 시 1회만 질문.
- 도메인 분기: references/domains/{kr-presidential|kr-general|kr-local-metro|kr-local-basic|kr-byelection|global-us-jp}.md 1개 선택.
- 시점 식별: D-N 계산. D-90·D-60·D-30·D-14·D-7 체크포인트 매핑.
- 출력 모드 결정: 형의 요청에 "풀박제·박제·근거자료·model dump·내부자료" 명시 → 풀박제 추가 / "1pager·한장·압축" 명시 → 1pager / "갱신·업데이트·D-N 변화" 명시 → 갱신. 그 외 전부 = 내러티브 리포트 단독 (디폴트).
- research-skill 강제발동 — Skill tool로
anthropic-skills:research-skill 명시 호출. ③·④·⑥ 단계 데이터 수집. research_prompts.md의 R-1·R-2·R-3 프롬프트 verbatim 사용. 내부 발동기록 보관.
- fact-checker 강제발동 — Skill tool로
anthropic-skills:fact-checker 호출. 모든 수치·인용 신뢰도 등급 내부 라벨링.
- risk-radar 강제발동 — Skill tool로
anthropic-skills:risk-radar 호출. ⑤ 리스크 매트릭스 산출 → §7 리스크 시나리오로 평문 변환.
- 출력 생성: 내러티브 리포트 11섹션 작성 → 출력 톤 게이트 7개 자가 체크 → 통과 시 제공.
STOP 게이트: 5~7 중 하나라도 미발동 = 출력 차단. 출력 톤 게이트 7개 중 하나라도 미충족 = 재작성 후 제공. 내러티브 리포트 모드에서는 발동기록 footer를 본문에 노출하지 않습니다 (풀박제 모드에만 노출).
확률엔진 (T1)
베이지안 사전확률 (Prior): 역대 동일조건 기저율
- 예: 허니문 × 광역단체장 × 여당후보 × 비텃밭 = 78%
우도 (Likelihood): P(데이터|승) / P(데이터|패)
사후 (Posterior): Prior × LR / 정규화
몬테카를로:
- 여론조사 격차: 정규(μ, σ)
- 텃밭효과: 베타(α, β)
- Black Swan: 이항(p=0.05, impact=±15%p)
- 10,000회 → 당선 횟수/10,000 = 확률
- 출력: P10·P50·P90 + σ
여론조사 메타분석 (T2 — Silver식)
w = recency × √sample_size × pollster_rating × mode_adjustment
recency = exp(-days_ago / 14) # 14일 반감기
pollster_rating = A=1.0, B=0.7, C=0.4
mode_adjustment = ARS −2%p / 전화면접 0 / 웹패널 −1%p
House Effect = 기관별 누적편향 보정
Shy Tory / Bradley: 한국은 양방향 가능. polling-bias-correction.md 참조.
6축 삼각측량 (T3)
| 축 | 가중 | 출처 |
|---|
| ①여론조사 가중평균 | 0.30 | poll_aggregator |
| ②구조요인 | 0.20 | structural-factors-kr |
| ③역사패턴 | 0.15 | kr-electoral-history |
| ④예측시장 | 0.10 | 폴리마켓·Manifold·메타큘러스 |
| ⑤펀더멘털 | 0.15 | 경제·지지율·재임년차 |
| ⑥현장지표 | 0.10 | 후원금·SNS언급·유세참여 |
수렴 판정: 6축 중 5+ 동일=★★★★★ / 4=★★★★ / 3=★★★(초박빙) / 분열=★★
Red Team Pre-mortem (T4)
"이 후보가 진다면 왜?" → 최소 7개 패배경로 도출 → 확률 합산 = 패배확률 하한.
카탈로그(red-team-playbook.md 26종): 막판 보수회귀·진보결집실패·후보스캔들·투표율급락·외부쇼크·국제이슈·경제충격·재난·말실수·네거티브폭발·내부분열·전과재부각·세대단절·중도이탈·접전지편향·여론조사함정·기타.
시계열 갱신 (T5)
| 시점 | 절차 |
|---|
| D-90 | 베이스라인. 모든 변수 분포 초기화 |
| D-60 | 1차. 공천확정·1차 토론 반영 |
| D-30 | 2차. 본격 캠페인기 |
| D-14 | 3차. 막판 σ 1.3× |
| D-7 | 라스트콜. 출구·사전투표 반영 |
각 단계: Δ 기록 → momentum 자동산출.
자가검증 (T6 — Brier Score)
- backtest_runner.py → 2010~2024 한국선거 50건 백테스트
- Brier = Σ(예측확률 − 실제)² / N
- 목표: Brier < 0.15 (Silver의 538 기준)
- Calibration plot: 예측 70%일 때 실제 65~75%인지
- 측정만 (통과는 권장). 미달 시 SKILL.md에 경고.
도메인 (T7)
| 도메인 | 파일 |
|---|
| 한국 대선 | domains/kr-presidential.md |
| 한국 총선 (지역구) | domains/kr-general.md |
| 한국 광역단체장 | domains/kr-local-metro.md ← 6.3 지선 |
| 한국 기초단체장 | domains/kr-local-basic.md |
| 한국 재보궐 | domains/kr-byelection.md |
| 글로벌 (옵션) | domains/global-us-jp.md (미 대선·총선, 일 중참의원) |
연동 자동화 (T8)
| 스킬 | 발동 시점 | 받는 결과 |
|---|
| research-skill DEEP | ③·④·⑥ | 공천·여론·확산 데이터 |
| fact-checker | 출력 직전 | 수치·인용 신뢰도(상중하) |
| risk-radar | ⑤ | 리스크 매트릭스 |
발동 명령: 자연어 명시 호출. 결과 미반영 = 출력 ✗.
출력 모드
| 모드 | 용도 | 템플릿 | 발동 조건 |
|---|
| 🌟 내러티브 리포트 (디폴트) | 형·의사결정자가 읽는 본 산출물. 11섹션·합쇼체·내부 토큰 비노출 | output-templates/narrative-report.md | 별도 요청 없을 시 자동 |
| 풀박제 | 분석 정본·아카이브·내부 검증용 | output-templates/multi-candidate.md | "풀박제·박제·근거자료·model dump·내부자료" 명시 시 |
| 1pager | 압축 브리핑 1장 | output-templates/single-candidate.md | "1pager·한장·압축" 명시 시 |
| 갱신 | D-N 변화량 추적 | output-templates/tracker-update.md | "갱신·업데이트·D-N 변화" 명시 시 |
디폴트 = 내러티브 리포트 단독. 풀박제는 형이 명시적으로 호출했을 때만 추가. 명시 없으면 풀박제 ✗.
왜 디폴트가 리포트인가: 의사결정자는 P10/P50/P90·6축 점수표·Brier Score를 보고 판단하지 않습니다. "누가 우세하고, 왜 그렇고, 무엇이 바뀌면 뒤집히는가"를 평문으로 읽습니다. 내부 모델은 그 평문 뒤에서 작동하고, 출력은 평문으로 나갑니다.
핵심 룰 (v2.2 — 8개)
- 불확실성 명시 — 내부 모델은 P10·P50·P90 + σ 산출. 외부 리포트에는 P10/P50/P90을 §2 표로 노출하되 §2 용어 설명 표에서 평문 풀이를 동봉합니다. 단일 점추정만 노출 ✗.
- 출처 등급 — 모든 수치에 [신뢰도 상/중/하] 내부 라벨링 후, 리포트 본문에는 "신뢰도 상/중/하" 또는 "출처: ..." 형식으로 자연스럽게 반영. 미라벨 = fact-checker 재발동.
- 편향 방어 — cognitive-bias-guard.md 16종 출력 직전 grep. 본문에는 토큰 노출 ✗·내부 검증만.
- 갱신 의무 — D-N 표기. §10 갱신 기준 표 + §10-2 갱신 원칙(정량 규칙) 의무. "시점 무관" ✗.
- NOT 영토 차단 — 캠프전략·공약기획 요청 시 policy-planning 라우팅.
- 🔒 3종 강제 게이트 — research-skill · fact-checker · risk-radar 내부 발동. footer 발동기록은 풀박제 모드에만 노출. 내러티브 리포트 본문에는 노출 ✗ (의사결정자 시야 방해). output_guard.py로 내부 자가검증 1회 강제. 부족 시 미발동 스킬 재호출 후 재생성.
- 🔒 verbatim 프롬프트 — research-skill 발동 시
references/research_prompts.md의 R-1(④여론조사)·R-2(③공천)·R-3(⑥확산) 프롬프트 그대로 사용. 임의 변경 ✗.
- 🔒 출력 강제 골격 (v2.3 — 체크리스트형 폐기·본문 박제형 신설)
8-A. 11섹션 한국어 정식 제목 verbatim (변경·삭제·추가·영문부제 ✗):
# 1. 내용 요약
# 2. 예측 결과
# 3. 판세의 핵심 구조
# 4. 후보별 경쟁력 평가
# 5. 여론조사 해석
# 6. 주요 변수
# 7. 리스크 시나리오
# 8. 시나리오별 전망
# 9. 최종 판단
# 10. 향후 갱신 기준
# 11. 조사기관식 최종 코멘트
별도 섹션으로 노출 금지 (적발 사례): "임원 요약 / Executive Summary" → §1로 / "몬테카를로 시뮬레이션 결과" → §2 표로 흡수 / "Red Team 프리모르템" → §7로 / "Brier Score 자가 캘리브레이션" → §2 신뢰도로 / "핵심 일정과 갱신 트리거" → §10으로 / "결론과 권고" → §9·§11 분리·캠프 권고는 NOT.
8-B. 본문 단독 노출 금지어 14종 (적발 시 즉시 재작성):
| 금지 | 대체 |
|---|
| 임원 요약 / Executive Summary | §1 "내용 요약" |
| 캘리브레이션 / Calibration | "신뢰도 검증" |
| 프리모르템 / Pre-mortem | §7 "리스크 시나리오" |
| 몬테카를로 / Monte Carlo / MC 10,000회 | §2 예측 결과 표로 흡수 |
| 베이지안 / Bayesian | §2 용어 표 풀이만 허용 |
| Prior / Posterior / LR | §2 용어 표 풀이만 허용 |
| House Effect / 하우스 이펙트 | "조사기관별 편향 보정" |
| 삼각측량 6축 / 6축 삼각측량 | §3 + §6 평문 분산 |
| Brier Score / Brier 스코어 | "예측 정확도" |
| Tornado / 토네이도 다이어그램 | §6 표로 흡수 |
| Shy Conservative / Shy Tory | §7 표 안 "응답 회피층" |
| 외삽 | "단순 연장" |
| 디펜시브 전략·모멘텀 카드·캠프는 | 캠프 권고 자체가 NOT — 제거 |
| n/a (영문) | "—" 또는 "표본 미공개" |
§2 "용어 설명" 표 안에서 P10·P50·P90·Posterior·Prior·현직 프리미엄·정당 베이스 평문 풀이는 허용. 그 외 본문 산문에서는 모두 ✗.
8-C. 줄글 상한 (각 섹션 산문 문단 수):
| 섹션 | 산문 상한 | 표 의무 | 추가 의무 |
|---|
| §1 | 2 문단 | 종합 판세 표 6행 | "한 줄 판단" 1줄 |
| §2 | 0 문단 | 당선확률 표 + 용어 설명 표 (7행+) | — |
| §3 | 3 문단 | 선거구·지표 표 1개+ | "해석" 1 문단 |
| §4 | 후보당 2 문단 | 후보당 구분/내용 표 1개 | "쉽게 풀이" 1 문단 의무 |
| §5 | 2 문단 | 조사·해석 표 1개 | "판단" 1 문단 |
| §6 | 0 문단 | 후보별 유리 변수 표 2개 | — |
| §7 | 0 문단 | 패배 경로 표 (5행+·위험도 컬럼) | — |
| §8 | 0 문단 | 시나리오 표 (4행+·발생가능성 합 100%) | — |
| §9 | 3 문단 | 번호 블릿 3개+ | "현재 판세"·"결론" 분리 |
| §10 | 0 문단 | 시점·자료·영향 표 + 갱신 원칙 정량 블릿 (4개+) | — |
| §11 | 3 문단 | — | "조사기관식" 톤 |
1문단 = 3~5문장. 5문장 초과 = 분리 또는 표 전환. 4문단 이상 줄글은 자동 실패.
8-D. 합쇼체 + 인사말 차단: 모든 문장 "~입니다". "~다·~죠·~거든요·영문 문장" 적발 = 재작성. "도움이 되길 바랍니다·감사합니다" 류 ✗.
8-E. NOT 영토 차단: 캠프 전략·디펜시브 전략·모멘텀 카드·"~해야 합니다(권고)" 적발 = 해당 문단 제거 + policy-planning 라우팅 안내.
8-F. 출력 직전 자가 grep (Skill 본문에서 직접 수행·references 인용 의존 ✗):
- 8-B 금지어 14종 본문 단독 노출 검출 → hit ≥1 = 재작성
- 8-A 11섹션 한국어 정식 제목 정확 일치 검증 → 불일치 = 재작성
- 8-A 별도 금지 섹션명 검출 → hit ≥1 = 재작성
- 8-C 줄글 상한 위반 검출 (각 섹션 산문 문단 카운트) → 초과 = 표 전환 후 재출력
- 8-D 비합쇼체 문장 검출 → hit ≥1 = 합쇼체 변환
- 8-E NOT 영토 표현 검출 → hit ≥1 = 제거 + 라우팅 안내
WRONG / CORRECT
Case 1 — 모델 계산 (내부)
❌ WRONG (v1 단순합산):
요인A +12%p + 요인B −3%p + 요인C +5%p = +14%p → 70~75%
✅ CORRECT (v2 베이지안 + MC):
Prior 0.62 × LR 1.8 → Posterior 0.73
MC 10,000회 → P50 0.73, P10 0.58, P90 0.84, σ=8%p
6축 수렴 5/6 → 신뢰도 ★★★★★
Case 2 — 출력 톤 (외부 리포트)
❌ WRONG-A (내부 모델 토큰 노출):
"베이지안 사전확률 Prior 0.62에 여론조사 우도 LR 1.8을 곱하여 Posterior 0.73이 산출됩니다.
몬테카를로 10,000회 시뮬레이션 결과 P50 73%, σ 8%p로 수렴하였으며,
Brier Score 검증에서 모델 신뢰도가 확인되었습니다."
❌ WRONG-B (2026 서울시장 D-19 적발 실사례 — 다중 위반):
## I. 임원 요약 (Executive Summary) ← 8-A 위반: §1 한국어 정식명 아님 + Executive Summary 금지어
서울시장 선거는 더불어민주당 정원오 후보(전 성동구청장 3선)와 ... ← 8-C §1 산문 4문단 (상한 2)
한 달 전 +10%p 안팎의 두 자릿수 우세에서 절반 수준으로 ...
## III. 여론조사 메타분석 ← 8-A 위반: §5 "여론조사 해석"이 정식명
House Effect는 명백합니다. 여론조사공정 계열은 ... ← 8-B 금지어 "House Effect"
이 추세를 D-Day까지 단순 외삽하면 격차는 0~+2%p ... ← 8-B 금지어 "외삽"
## IV. 6축 삼각측량 ← 8-A 위반: 별도 섹션 ✗·§3+§6 분산
**축 1. 정당지지율.** 3월 전국 기준 민주당 46%, 국민의힘 21% ...
## VII. 몬테카를로 시뮬레이션 결과 ← 8-A 위반: 별도 섹션 ✗·§2 표 흡수
베이지안 사전분포 + House Effect 보정 + ... ← 8-B 금지어 3종
## VIII. Red Team 프리모르템 ← 8-A 위반: §7 "리스크 시나리오"가 정식명
**시나리오 1 — Shy Conservative 효과.** ... ← 8-B 금지어 "Shy Conservative"
## X. Brier Score 자가 캘리브레이션 ← 8-A 위반: 별도 섹션 ✗
평균 Brier Score는 0.18 수준입니다 ... ← 8-B 금지어 2종
## XI. 결론과 권고 ← 8-A 위반: §9·§11 분리·"권고"는 NOT
정원오 캠프는 사전투표 동원과 동북권 결집을 ... 디펜시브 전략 ... ← 8-E NOT 영토
오세훈 캠프는 ... 단일 모멘텀 카드 ... ← 8-E NOT 영토
→ 8-A·8-B·8-C·8-E 동시 위반. v2.2 체크리스트 게이트가 작동 안 한 이유 = LLM이 작성 직후 자가 grep을 형식적으로만 수행. v2.3은 본문에 골격을 박제하여 작성 단계에서 강제.
✅ CORRECT (내러티브 리포트 톤 — 남양주 D-20 정본):
# 1. 내용 요약
## 종합 판세
현재 모델 기준으로는 {후보A}가 {후보B}보다 우위에 있는 것으로 평가됩니다.
다만 이 우위는 "안전권"이라기보다는 "우세하지만 흔들릴 수 있는 구간"입니다.
| 항목 | 평가 |
|---|---|
| 현재 예측 | {후보A} 우세 |
| 추정 당선확률 | {후보A} 62% / {후보B} 38% |
| 판세 성격 | 우위, 그러나 박빙 전환 가능 |
| 핵심 불확실성 | 공천 후 양자대결 여론조사 부재 |
| 신뢰도 | 중상 |
| 가장 중요한 갱신 시점 | D-14, D-7 신규 여론조사 발표 시점 |
## 한 줄 판단
{후보A}는 정당 지형과 최근 선거 흐름에서 우위가 있으나, {후보B}는 현직 프리미엄과 기존 인지도를 보유하고 있어 최종 국면에서는 접전 가능성이 남아 있습니다.
→ §1 한국어 정식명 / 산문 2문단 / 6행 표 / "한 줄 판단" 1줄 / 합쇼체 / 금지어 0 / NOT 영토 침범 ✗.
Case 3 — 출처
❌ WRONG (출처 없음): "여론조사 평균 +8%p"
✅ CORRECT (리포트 톤):
3월 조사에서는 {후보B}가 앞서는 것으로 나타났습니다.
하지만 이 조사는 공천 확정 전 조사입니다.
즉, {후보A}가 민주당 최종 후보로 확정되기 전의 인지도 조사 성격이 강합니다.
→ 출처·시점·한계를 평문 한 문단으로. "신뢰도 [중]" 같은 모델 라벨은 본문에 ✗·내부 보관.
Output Path
| 산출물 | 경로 |
|---|
| 주 산출물 | mnt/outputs/election-forecaster_{topic}_{YYYY-MM-DD}.md |
| 형식 | .md로, 리포트로, 옵시디언으로, 합쇼체로. 풀박제·1pager는 명시 요청 시만. |
| 리서치 결과 (해당 시) | {VAULT}/_skills research/election-forecaster/{YYYY-MM-DD}_{topic}.md |
Reference Index
| 파일 | 내용 | 언제 |
|---|
references/backtest-50cases.md | backtest 50cases | 해당 단계 진입 시 |
references/cognitive-bias-guard.md | cognitive bias guard | 해당 단계 진입 시 |
references/kr-electoral-history.md | kr electoral history | 해당 단계 진입 시 |
references/polling-bias-correction.md | polling bias correction | 해당 단계 진입 시 |
references/pollster-ratings-kr.md | pollster ratings kr | 해당 단계 진입 시 |
references/red-team-playbook.md | red team playbook | 해당 단계 진입 시 |
references/research_prompts.md | research prompts | 해당 단계 진입 시 |
references/structural-factors-kr.md | structural factors kr | 해당 단계 진입 시 |
references/time-protocol.md | time protocol | 해당 단계 진입 시 |
references/triangulation-6axes.md | triangulation 6axes | 해당 단계 진입 시 |
Next Phase
본 스킬 작업 후 자연스럽게 이어지는 흐름:
- 후속 작업 →
policy-planning
- 후속 작업 →
policy-planning
- 후속 작업 →
profiler-skill
- 후속 작업 →
research-skill
- 후속 작업 →
biz-skill
Failure Modes (Gotchas)
| 함정 | 대응 |
|---|
| ARS만 보고 우세 결론 | 친진보 +2~4%p 보정. 전화면접 가중 ↑ |
| 단일 조사기관 의존 | 최소 3개 / 2주 이내 / 표본 1000+ 가중평균 |
| 텃밭 100% 단정 | 정당지지도 갭 변화 추적. PK 5%p 갭은 약화 신호 |
| 현직 = 자동 우세 | 시정 부정평가 > 긍정이면 디버프 |
| 막판 보수회귀 절대화 | 2025 대선 부산 40% 돌파 = 패턴 균열. 패턴은 prior, 데이터 우선 |
| D-90 = 최종답 | D-7까지 5회 갱신 의무 |
| Red Team 생략 | 패배경로 7+ 의무. 부재 = 확증편향 |
| Brier 측정 안 함 | backtest_runner.py 누적 |
| 캠프전략 요청 흡수 | NOT 영토. policy-planning 라우팅 |
| 외부 폴 1건으로 갱신 | 단일 폴 = 노이즈. 최소 표본·기관·기간 검증 |
| 내부 모델 토큰 본문 노출 | 베이지안·Bayesian·몬테카를로·Brier·MC10000·LR·Posterior·Tornado·House Effect·삼각측량 6축·Shy Tory·외삽·프리모르템·캘리브레이션 단독 노출 ✗. §2 용어 설명 표 안 풀이는 허용 |
| 풀박제 톤으로 본문 작성 | 디폴트는 내러티브 리포트. 형이 "풀박제·박제·내부자료" 명시 안 하면 11섹션 평문만 |
| 합쇼체 깨짐 | "~다·~죠·~거든요·영문 문장" 검출 = 재작성. "~입니다" 일관 |
| 11섹션 누락·순서 변경·영문 부제 | "I. 임원 요약 (Executive Summary)" 같은 영문부제·로마숫자·괄호 보조 ✗. "# 1. 내용 요약" 한국어 정식명 verbatim |
| §2 용어 설명 표 누락 | P10·P50·P90 본문에 쓰면 §2 풀이 표 의무. 표 부재 = 강제 골격 실패 |
| 별도 섹션으로 몬테카를로·Red Team·Brier 노출 | 8-A 위반. §2·§7·§2 신뢰도로 흡수. 별도 헤더 ✗ |
| 줄글 4문단 이상 산문 | 8-C 위반. 표 전환 또는 분리. 형이 "줄글이 너무 심하다"고 명시 적발한 본질 함정 |
| §10 갱신 원칙 정성 서술 | "잘 보겠습니다" ✗. "{후보}가 N%p 이상 앞서면 ...로 재분류" 정량 규칙 ○ |
| 발동기록 footer 본문 노출 | 내러티브 리포트 본문에 "🔒 발동기록·output_guard.py ✓" 노출 ✗. 풀박제 모드에만 |
| 인사말·아부 | "도움이 되길 바랍니다·감사합니다" ✗ — UP 금기와 동일 |
| 캠프 권고·전략 권고 | "캠프는 ~해야 합니다·디펜시브 전략·모멘텀 카드" ✗ — NOT 영토. policy-planning 라우팅 |
| 체크리스트형 게이트 의존 | v2.2 실패 본질. 작성 후 자가 grep만으로는 미작동. v2.3은 작성 중 본문 박제로 강제. 8-A~8-F를 발동마다 본문에서 직접 grep |
예시 발동
입력: "정원오·김경수·전재수 6.3 지선 승률 예측해줘"
처리:
- 후보 3명 × 광역단체장 × D-83 식별
- domains/kr-local-metro.md 로드
- 출력 모드 결정: 명시 없음 → 내러티브 리포트 디폴트
- research-skill DEEP → 공천·여론·확산 (내부 발동)
- ① Prior (허니문×광역×여당×선거구등급) — 내부
- ④ Silver 가중평균 — 내부
- ⑥ Red Team 패배경로 7+ — 내부
- ⑦ 6축 수렴 — 내부
- ⑧ MC 10,000회 → P10P50P90 — 내부
- ⑨ 시나리오 5종 + D-60·D-30·D-14·D-7 갱신플랜 — 내부
- fact-checker·risk-radar 내부 반영
- 내러티브 리포트 11섹션 작성 → §2 용어 설명·§4 쉽게 풀이·§7 리스크 ≥5·§10 정량 갱신 원칙·§11 코멘트
- 출력 톤 게이트 7개 자가 체크 → 통과 시 제공
입력 변형: "...풀박제로 줘" → 12단계 출력 후 풀박제 multi-candidate.md 추가 첨부.
참고 파일
- references/structural-factors-kr.md
- references/kr-electoral-history.md
- references/pollster-ratings-kr.md
- references/polling-bias-correction.md
- references/triangulation-6axes.md
- references/red-team-playbook.md
- references/cognitive-bias-guard.md
- references/time-protocol.md
- references/backtest-50cases.md
- references/domains/{6종}
- references/output-templates/narrative-report.md (v2.3 — 강제 골격형·한국어 정식 11섹션·금지어 14종·줄글 상한·표 비율·자가 grep 11개)
- references/output-templates/multi-candidate.md (풀박제·내부 자료·명시 요청 시)
- references/output-templates/single-candidate.md (1pager·명시 요청 시)
- references/output-templates/tracker-update.md (D-N 갱신·명시 요청 시)
- references/research_prompts.md (v2.1 — research-skill 발동 프롬프트 R-1·R-2·R-3)
- scripts/bayesian_updater.py
- scripts/poll_aggregator.py
- scripts/triangulation.py
- scripts/monte_carlo.py
- scripts/red_team.py
- scripts/backtest_runner.py
- scripts/brier_calibration.py
- scripts/output_guard.py (v2.1 — 3종 발동기록 자가검증)