reble.ai/survey 가 어떻게 만들어졌고, 무엇을 계산하며, 어디까지 믿을 수 있는지에 대한 전체 기록 · 문서 기준일 2026-08-11
중앙선거여론조사심의위원회(여심위)에 등록·공표된 전국 정례조사 전수를 하나의 베이지안 모델로 통합해, ① 현재 시점의 잠재 지지율(나우캐스트)을 추정하고 ② 최근 추세를 반영해 데이터 기준일로부터 7일 후(T+7)의 지지율을 확률 분포로 예측합니다.
다루는 주제는 4가지입니다: 대통령 국정수행 평가 · 정당 지지도 · 차기 대선주자 선호도 · 민주당 당대표 선호도.
원천: 여심위 등록 정례조사 PDF 원본을 파싱한 데이터셋 (2026-05-29 ~ 07-02 조사 종료일 기준 38건, 17개 기관). 기관은 품질 등급 A/B/C로 분류됩니다 (A: 한국갤럽·NBS·한국리서치 / B: 리얼미터·조원씨앤아이·KSOI / C: 그 외).
| 이슈 | 처리 |
|---|---|
후보 코드 불일치 — 오세훈이 osh/ojh, 강훈식이 ghs/khs, 추미애가 cma/chuma/chm으로 혼재, 일부는 한글 원문(장동혁·이진숙) | 빌드 시 코드 병합 테이블로 통일 |
| 갤럽 6/11 차기주자 조사가 자유응답(주관식) 방식 — 명단 제시 조사와 구조가 달라 모든 후보 수치가 절반 이하 | 모델에서 제외, 원시 데이터 탭에 회색으로 표시 |
| 같은 조사에서 유보 항목 중복 집계 (모름 52% = 없음 39% + 응답거절 13%) | 세부 분해 제거, 유보 총량만 사용 |
| 여론조사꽃 4건이 PDF 폰트 손상으로 OCR 추출 — 값 신뢰도 낮음 (예: 6/6 긍정 69.3%는 시계열 최대 이상치) | OCR 플래그 표시 + 기관 보정 패널에서 제외 옵션 |
| 리얼미터 일부 조사는 국정평가 topline이 없어 정당지지 크로스탭에서 역산 | 역산 플래그 표시 |
| 기관 레지스트리에 리서치웰(research_well)과 리서치뷰(researchview)가 같은 한글명으로 등록 | 원본 등록번호 대조 → 서로 다른 기관으로 확인, 분리 유지 |
| 유보 항목을 발표하지 않은 조사 (후보 합계 84.4% 등) | 잔여분(100−합계)을 유보로 귀속 |
모든 조사를 동등하게 평균 내지 않고, 최근 조사일수록·표본이 클수록·품질 등급이 높을수록 더 무겁게 반영해 "지금 이 순간의 잠재 지지율"의 확률 분포(사후분포)를 만듭니다.
이 문항은 조사마다 제시된 후보 명단이 다릅니다 (13개 조사에서 후보별 관측 7~13회). 명단이 다른 조사를 하나의 Dirichlet에 그대로 누적하면 명단에 자주 빠진 후보가 체계적으로 과소평가됩니다. 그래서 후보별로 그 후보를 실제로 조사한 폴만 사용해 독립 Beta 사후분포를 만들고, 몬테카를로 추첨 때 후보들과 유보 버킷을 함께 뽑아 합이 100%가 되도록 정규화합니다. 관측이 적은 후보는 신뢰구간이 정직하게 넓어지고, 각 후보 옆에 "n/13폴" 커버리지 배지를 표시합니다. 표시 대상은 관측 5회 이상 9명이며 나머지는 "기타 후보"로 합산됩니다.
나우캐스트 위에 예측층을 쌓습니다. 몬테카를로 반복(기본 5,000회, 최대 50,000회)마다:
h는 기본 7일(슬라이더로 0~14일 조정 가능)이고, 항목별 분산이 h에 비례해 커지므로 예측 부채꼴이 미래로 갈수록 벌어집니다. 1위 확률은 "몬테카를로 추첨 중 해당 항목이 1위인 비율"이며, 국정평가는 P(긍정 > 부정) 우세 확률로 표시합니다.
| 페이지 | 문항 | 조사 수 | 모델 | 카테고리 | 특이사항 |
|---|---|---|---|---|---|
| president.html | 대통령 국정수행 | 35 | 3-cat Dirichlet | 긍정 / 부정 / 유보 | 헤드라인 = P(긍정>부정) + 순지지 |
| party.html | 정당 지지도 | 38 | 7-cat Dirichlet | 민주 / 국힘 / 조국혁신 / 개혁신당 / 기타정당 / 무당층 / 유보 | "무당층 포함 ↔ 지지층만" 토글 |
| next-leader.html | 차기 대선주자 | 13 | 후보별 독립 Beta + 정규화 | 후보 9명 + 기타 + 유보 | 커버리지 배지, 자유응답 1건 제외 |
| dp-chair.html | 민주당 당대표 | 14 | 4-cat Dirichlet | 정청래 / 김민석 / 송영길 / 유보·기타 | 전당대회 시즌 한시 문항 |
같은 시점의 조사도 기관과 방식에 따라 체계적으로 다른 값을 냅니다. 이 격차를 계층적으로 분해해 이중 보정 없이 걷어냅니다 (기관 보정 토글 ON 시 적용, 기본 OFF).
이 분해가 실측에서 드러낸 사실 (문서 기준일 데이터):
각 페이지 House Effect 탭에서 항목별 기관 편향과 방식 효과 수치를 직접 볼 수 있습니다.
"이 모델이 실제로 7일 후를 맞혀 왔는가"를 페이지 안에서 상시 검증합니다. 원리는 단순합니다:
사후분포의 평균·분산이 닫힌 형태로 계산되므로(Dirichlet 주변분포 = Beta) 몬테카를로 없이 오리진 전체를 즉시 계산합니다. 이 엔진은 Python 독립 재구현과 소수점 10자리까지 일치함을 확인했습니다.
각 페이지 "T+7 검증" 탭에서 ① 예측 궤적 vs 실측 차트 ② 항목별 스코어카드 ③ 구간별 상세 표 ("5/29~6/6 데이터 → 6/13 예측 63.7% vs 실측 48.9% = 편차 −14.7 ✗" 식의 행 단위 기록)를 제공합니다.
검증 오차를 그냥 보여주는 데서 끝나지 않고, 오차에서 체계적 성분만 추출해 현재 예측을 보정합니다. 하루치 편차를 그대로 따라가면 조사 노이즈를 학습하게 되므로(과적합), 모든 루프에 shrinkage와 캡을 겁니다.
| 루프 | 학습 대상 | 방법 | 안전장치 |
|---|---|---|---|
| ③ λ 자동 선택 | 시간감쇠(기억 길이) | λ ∈ {5,7,9,12,16,21} 각각으로 전 구간 walk-forward → 역사적 MAE 최소 λ를 페이지 기본값으로 | 검증 표본 5건 미만이면 수동 기본값 유지 |
| ① 수준 편향 | 지속적 과대/과소 예측 | 항목별 평균 오차 ē_c × m/(m+5) 를 예측에 가산 (m = 채점 건수) | ±1.5%p 캡 |
| ② CI 배율 | 신뢰구간의 정직성 | 표준화 오차 |z|의 95분위 ÷ 1.96 을 부채꼴 폭에 곱함 | [0.7, 2.0] 범위 제한 |
보정은 파라미터를 바꿀 때마다(λ 슬라이더, 기관 보정 토글 등) 현재 설정 기준으로 재도출되며, "자동 보정 상태" 카드에 적용값이 항상 공개됩니다.
| 주제 | 기본 상태 (보정 적용) | 보정 해제 시 | h=13 CI 적중 | 1위 | 발표 기준 | ||
|---|---|---|---|---|---|---|---|
| MAE | CI 적중 | MAE | CI 적중 | OFF → ON | 적중 | ||
| 대통령 국정수행 73폴 · λ*=5 | 2.047 | 0.991 | 3.609 | 0.839 | 0.71 → 0.98 | 0.679 | 충족 |
| 정당 지지도 84폴 · λ*=16 | 1.146 | 0.965 | 1.505 | 0.868 | 0.77 → 0.858 | 0.842 | 충족 |
| 차기 대선주자 22폴 · λ*=21 | 3.151 | 0.716 | 3.06 | 0.663 | 0.673 → 0.73 | 0.645 | 참고 |
| 민주당 당대표 29폴 · λ*=16 | 3.306 | 0.815 | 3.578 | 0.704 | 0.717 → 0.768 | 0.758 | 참고 |
측정 방법 — 각 날짜를 오리진으로 잡아 그 시점까지의 데이터만으로 T+h를 예측하고, 대상일 ±1일의 실제 조사(표본 가중 평균)와 대조하는 walk-forward입니다. 표의 수치는 이 페이지들의 검증 탭과 같은 코드를 빌드 시점에 실행해 얻은 값입니다 (산출 2026-08-11 19:30).
읽는 법 — ① CI 적중이 0.95를 크게 넘는 것은 잘 맞혔다는 뜻이 아니라 구간이 넓다는 뜻입니다(보수적). ② 기관·조사방식 보정은 2026-08-10부터 기본 적용입니다. 위 성적이 그 근거입니다 — 보정을 끄면 오차가 커지고, 특히 h=13(8월 17일 민주당 전당대회까지의 지평)에서는 구간 자체가 무너집니다(대통령 0.73 → 보정 시 0.98). 각 페이지 상단 버튼으로 언제든 끄고 원자료 기준을 볼 수 있습니다. ③ 발표 기준은 대통령·정당에만 적용합니다(MAE≤3.0%p, CI≥0.80). 차기주자·당대표는 관측이 희소하고 국면 변동이 커 같은 잣대를 대면 왜곡이라 참고 지표로 둡니다. 미달 항목도 그대로 싣습니다.
페이지는 외부 API 없이 자기완결형 정적 HTML이며(차트 라이브러리 제외), 모든 시뮬레이션·검증·보정은 브라우저 안에서 실시간 계산됩니다.
| 날짜 | 내용 |
|---|---|
| 2026-07-04 | v1 공개: 4개 주제 페이지 + 허브. 시간감쇠 베이지안 나우캐스트 + T+7 예측층 + 백테스트 재생 + 기관(tier·HE) 보정 |
| 2026-07-04 | 조사방식(ARS/면접) 효과 보정 추가 — 방식→기관 계층 분해로 이중 보정 방지 |
| 2026-07-04 | 예측 앵커를 데이터 기준일+7로 고정(채점 가능한 예측) · 롤링 T+7 검증 탭 · 3중 자동 보정 루프(λ 자동 선택 / 수준 편향 / CI 배율) |
| 2026-07-04 | 구간별 예측 vs 실측 상세 표 추가 (오리진 단위 편차 전수 공개) |
| 2026-07-05 | 본 개발 문서 공개 |
| 2026-07-05 | 합성패널(10k 쿼터 패널) 나우캐스트 탭 추가 — 세그먼트 T+7은 부가가치 게이트 미통과로 보류 |
| 2026-07-15 | /survey2 공존 배포: 신규 13폴(~7/11) 반영, v2 자동수집 파이프라인 1차 병합. /survey 원본은 7/5 상태로 동결(트랙레코드 보존) |
| 2026-07-29 | 16폴 추가(~7/25, 총 67폴): PDF 뒤늦게 게시된 4폴 부활, 파서 오독 수동 교정(여론조사꽃 신형 결과표·리서치웰·갤럽), 지역조사 오등록 1건 차단. 당대표 수동 추출 3건 |
| 2026-07-29 | M7 실전 채점 1회차(7/15 예측 vs 7/18 실측): 95% CI 적중 5/5 · MAE 2.33%p — CI 배율 자동 보정이 실전 검증됨 |
| 2026-07-29 | 운영 자동화: 여심위 수집 일 2회 자동화 + 원커맨드 갱신 스크립트(export→검증→빌드→배포) 도입, 재실행 안전(멱등) 검증 |
| 2026-07-29 | 합성패널 주간 갱신 재가동(컷오프 7/25, 타깃 8/1) · 운영 현황 페이지(pipeline.html) 공개 |
| 2026-07-29 | 당대표 로스터 5명 확장(고민정·김보미 분리 표기 — 조사기관 5인 보기 체제 반영) · 합성패널 탭에 쿼터 구성표 추가 · 패널 크로스탭 공급 재개 |
| 2026-07-29 | 당대표 사퇴 시나리오 시뮬레이터 공개 — 7/23 컷오프(고민정·김보미 탈락) 기본 반영, 후보별 사퇴 시 표 이동을 실측 2순위 조사(미디어토마토 193차 교차표5·6) 기반 전이 행렬로 재추첨(전이율 불확실성 Dirichlet 전파) |
| 2026-08-10 | 상류 파서 근본 수정 — 결과표 PDF가 등록 며칠 뒤 올라오는 조사(여심위의 정상 절차)가 영구히 파싱되지 않던 버그를 고쳤습니다. 7·8월에 세 번 재발했고 그때마다 DB를 손으로 되돌렸을 뿐 원인은 남아 있었습니다. 이제 PDF가 확보되면 스스로 파싱 대기로 복귀합니다 |
| 2026-08-10 | 15폴 추가 (67→82폴, 기준일 7/25→8/4) — 위 버그로 12일간 멈춰 있던 7/27~8/4 조사를 전부 반영했습니다 |
| 2026-08-10 | PDF 원문 전수 대조 — 파서 오류 11건 교정. 여론조사꽃 ARS·CATI는 당대표 문항(민주지지층 한정)을 정당지지도로 오독, 조원씨앤아이는 지역 소계 행(민주 72.0%)을 전국으로 오독, 리서치웰·한길리서치는 정당지지도 표 자체를 누락, 피앰아이는 진보당↔개혁신당 컬럼이 뒤바뀜. 다단 헤더는 표 격자와 지지정당 교차표의 표본수로 컬럼을 교차 확정했습니다 |
| 2026-08-10 | 당대표 19→29폴 — 10개 조사에서 전체 표본 문항만 골라 수동 추출(하위표본 한정 표는 규칙대로 제외). 8/17 전당대회까지 예측이 가능해졌습니다. 민주당 당원 대상 실측(조원 7/27, n=499)도 확보 — 전체 성인에서는 정청래 우위인데 민주+무당층에서는 김민석이 앞서고 당원 표본에서는 41.9 대 41.5로 사실상 동률입니다. 모집단에 따라 결론이 갈리는 문항입니다 |
| 2026-08-10 | 웹조사(WEB) 방식 분리 — 웹조사가 ARS로 잘못 기록돼 조사방식 보정이 왜곡되던 문제를 고쳤습니다. 미등록 기관·조사방식은 조용히 넘어가지 않고 반영을 중단시킵니다 |
| 2026-08-10 | 예측 성적 자동 산출·공개 (§9) — 각 페이지의 검증 탭과 같은 코드를 빌드 시점에 실행해 MAE·95% CI 적중·1위 적중·Brier를 뽑아 문서에 박제합니다. 손으로 적은 수치가 굳어 있던 이전 방식을 대체했습니다 |
| 2026-08-10 | 지평 확장 (h=13) — 8/17 전당대회까지의 지평에서도 성적을 재도록 백테스트를 확장했습니다. 보정 없이는 구간이 무너지고(대통령 0.73) 기관·방식 보정을 켜야 유지됩니다(0.98) — 장기 예측은 보정을 전제로 읽어야 한다는 뜻입니다 |
| 2026-08-10 | 전면 공개 — 접속 코드를 없애고 링크 미리보기(OG 카드)를 추가했습니다. 카드의 숫자는 빌드 데이터에서 자동으로 구워집니다 |
| 2026-08-10 | 상시 무인 갱신 — 하루 두 번(09:00·19:30) 자동 반영합니다. 이상 수치나 신규 기관이 나오면 반영을 멈추고 기록만 남깁니다 |
| 2026-08-10 | 기관·조사방식 보정을 기본 적용으로 전환 — 지금까지는 꺼져 있어 방문자가 보는 예측이 성적이 나쁜 쪽이었습니다. 백테스트가 근거입니다: 대통령 MAE 3.48→2.02, 95% CI 적중 0.858→0.991. 8월 17일 지평(h=13)에서는 보정 없이 구간이 무너지므로(0.734→0.979) 장기 예측에는 사실상 필수입니다. 페이지 상단 버튼으로 언제든 꺼서 원자료 기준을 볼 수 있습니다 |
| 2026-08-10 | 허브 카드와 주제 페이지 수치 통일 — 허브는 λ=10 고정·무보정으로 따로 계산해 왔고 페이지는 자동 선택된 λ와 보정을 썼습니다. 실측 결과 정당 지지도에서 허브 43.5% vs 페이지 45.5%로 2%p 어긋나 있었습니다. 이제 허브도 페이지가 실제로 내는 수치를 그대로 싣습니다 |
| 2026-08-10 | 당대표: 모집단별 대조 공개 — 이 페이지의 예측은 전체 성인 여론입니다. 정작 당대표를 뽑는 사람은 당원·대의원이라, 같은 조사(조원씨앤아이 7/25~27) 안에서 층위를 나눠 물은 결과를 나란히 실었습니다. 전체 성인에서는 정청래(31.3 대 25.1)가, 민주당 지지층+무당층에서는 김민석(36.6 대 34.3)이 앞서고, 당원 표본에서는 41.9 대 41.5로 사실상 동률입니다. 전체 여론 예측을 전당대회 결과 예측으로 읽으면 안 됩니다 |