방법론15분 읽기
합성패널은 어떻게 만들어지고, 어떻게 답하는가 (쉬운 설명 버전)
실제 사람을 복제하지 않고 만든 통계적 시민 4,433명이, 무엇으로 구성되고 질문에 어떻게 답하며, 그 답이 어떻게 선거 예측이 되는지.
목차
Reble.ai는 현실 사회를 통계적으로 재현하고, 조건이 달라졌을 때 여론이나 선거 결과가 어떻게 움직이는지를 실험하는 사회 시뮬레이션 엔진이다. 이 엔진의 핵심 부품이 바로 합성패널(Synthetic Panel) 이다.
합성패널을 가장 쉽게 설명하면 다음과 같다.
합성패널은 실제 사람을 복제한 가상 인간이 아니라, 현실의 인구구조와 조사 결과를 반영해 만든 '확률을 가진 통계적 시민' 이다.
예를 들어 "대전 동구에 사는 64세 여성, 고졸, 서비스직, 소득 1분위, 기혼, 전남 출신"이라는 사람이 있다고 해보자. 현실에서 이 조건을 가진 특정 개인의 개인정보를 가져온 것이 아니다. 통계청 자료에서 이런 조건을 가진 사람들이 실제로 어느 정도 존재하는지를 확인하고, 그 인구분포를 보존하도록 가상의 시민 한 명을 생성한 것이다.
이제 이 합성패널 한 명이 무엇으로 만들어지고, 질문을 받으면 어떻게 답하며, 수천 명의 답이 어떻게 선거 예측 결과가 되는지 차례대로 살펴보자.
1. 합성패널 한 명은 22개의 정보로 구성된다
합성패널 한 명의 기록에는 모두 22개의 칸이 있다. 예를 들어 KR-V2-281687이라는 합성패널은 다음과 같은 사람이다.
- 대전 동구에 사는 64세 여성이다.
- 고졸이고 서비스직에 종사하며, 소득은 1분위다.
- 기혼이고 전남 출신이다.
- 정치적으로는 진보 성향이며 더불어민주당을 지지하는 것으로 분류됐다.
- 정치에 대한 관심은 낮지만 투표할 의향은 있는 것으로 예측됐다.
겉으로 보면 실제 사람의 프로필처럼 보인다. 하지만 이 22개 정보가 모두 같은 방식으로 만들어진 것은 아니다. 정보의 출처에 따라 세 종류로 나뉜다.
| 등급 | 칸 수 | 어떤 정보인가 | 어디서 왔나 |
|---|---|---|---|
| A | 10 | 거주지·성별·나이·학력·직업·소득·혼인 상태·출신지역 | 통계청 인구총조사 등 공식 통계에서 직접 관측 |
| B | 4 | 이념·지지정당·정치관심도·투표의향 | 사회조사·여론조사를 학습한 모델이 예측 |
| C | 8 | panel_id·권역·이념3·각 예측의 확률·인구 셀 비중·가중치 | 시스템이 계산 |
A등급: 통계에서 직접 가져온 정보. 거주지, 성별, 나이, 학력, 직업, 소득, 혼인 상태, 출신지역 등 10개 정보는 통계청 인구총조사와 같은 공식 통계에서 직접 관측한 분포를 바탕으로 만든다. 이것은 "이 사람이 실제로 존재한다"는 뜻이 아니다. "한국 인구 안에는 이런 조건을 가진 사람들이 이 정도 비율로 존재한다"는 사실을 반영했다는 뜻이다.
B등급: 조사 데이터를 학습해 예측한 정보. 이념, 지지정당, 정치관심도, 투표의향 등 4개 정보는 통계청 자료만으로는 알 수 없다. 그래서 사회조사와 여론조사 데이터를 학습한 모델이 예측한다.
중요한 것은 모델이 이를 확정하지 않는다는 점이다. 예를 들어 이 합성패널의 지지정당은 더불어민주당이지만, 옆에는 _지지정당_proba = 0.565라는 값이 붙어 있다. 이는 다음과 같은 의미다.
"이 사람은 반드시 민주당 지지자다"가 아니라, "현재 관측된 조건을 고려하면 민주당 지지자로 분류될 확률이 56.5%다."
C등급: 시스템이 계산한 정보. 나머지 8개는 panel_id, 권역, 단순화한 이념 구분, 각 예측의 확률, 인구 셀 비중, 가중치처럼 시스템이 계산한 값이다.
따라서 합성패널은 단순한 가상 프로필이 아니다. 관측된 인구 정보와 모델의 예측, 그리고 시뮬레이션을 위한 계산값이 결합된 하나의 통계 단위다.
2. 현실 인구에서 4,433명의 패널을 만든다
합성패널은 처음부터 4,433명으로 만들어진 것이 아니다. 훨씬 큰 합성인구에서 여러 단계를 거쳐 추출된다.
먼저 통계청 인구총조사 등 마이크로데이터를 바탕으로 79만 4,000명의 통계적 시민모델(Reble이 가지고 있는 합성인구)을 만든다. 이들의 지역, 나이, 성별, 학력, 직업, 소득, 혼인 상태 등이 실제 한국 인구분포와 비슷하게 구성되도록 한다.
그다음 사회조사 데이터 1만 1,476명을 학습해 각 사람에게 이념, 지지정당, 정치관심도, 투표의향을 부여한다. 이후 최신 여론조사 결과와 맞도록 전체 분포를 다시 보정한다.
이렇게 만들어진 합성인구에서 지역·성별·연령 구조를 대표하도록 1만 249명의 쿼터 패널(전국을 연령·성별 인구비율에 맞춰 뽑은 대표 표본)을 추출한다. 그중 더불어민주당 지지층으로 분류된 사람이 4,433명(민주당 권리당원 합성패널)이다.
전체 과정을 간단히 표현하면 다음과 같다.
통계청 인구구조
→ 79만 4,000명의 합성인구 (Reble의 통계적 시민모델)
→ 정치 성향 예측 (사회조사 1만 1,476명 학습)
→ 최신 여론조사에 맞춰 재보정
→ 1만 249명의 대표 패널 추출 (전국 인구비)
→ 민주당 권리당원 합성패널 4,433명 선정
3. 4,433명은 모두 같은 사람이 아니다
이 4,433명은 단순히 숫자만 다른 복제품이 아니다.
권역, 연령대, 성별, 이념만으로 나누면 실제로 존재하는 조합은 202개다. 가장 큰 유형은 인천·경기에 사는 40대 진보 성향 여성으로 145명이다. 반대로 단 한 명만 존재하는 희소한 유형도 27개다.
그런데 학력, 직업, 소득, 혼인 상태까지 포함하면 유형은 3,249개로 늘어난다. 한 유형에 평균 1.36명밖에 없기 때문에 세밀하게 보면 사실상 거의 모든 사람이 다르다.
쉽게 말하면 이렇다. 멀리서 보면 202개의 큰 집단으로 보이지만, 가까이에서 보면 4,433명이 거의 모두 다른 조건을 가진 시민이다.
예를 들어 같은 40대 여성이라도 서울의 고소득 전문직과 전남의 저소득 서비스직은 정치 성향과 관심도, 투표 참여 가능성, 후보 선택확률이 다르게 계산된다.
4. 패널 수와 실제 선거인단 수를 연결한다
여기서 중요한 문제가 하나 생긴다. 4,433명은 '민주당 지지층을 대표하는 표본'이지 실제 권리당원 152만 7,261명 전체가 아니다. 더욱이 표본의 지역 분포와 실제 권리당원의 지역 분포도 다르다.
표본에서는 서울·인천·경기 비중이 52.4%지만 실제 권리당원에서는 42.1%다. 반대로 광주·전라는 표본에서 17.0%지만 실제 권리당원에서는 33.0%다.
따라서 원래 표본을 그대로 사용하면 수도권의 목소리는 실제보다 크게 반영되고, 호남의 목소리는 작게 반영된다. 이를 바로잡기 위해 재가중(Reweighting) 을 한다. 예를 들어 광주·전라 패널의 무게는 평균적으로 약 1.94배 높인다. 반대로 수도권 패널의 무게는 낮춘다.
결과적으로 합성패널 한 명이 대표하는 실제 인원은 지역마다 달라진다.
| 권역 | 합성패널 1명이 대표하는 실제 인원 |
|---|---|
| 광주·전라 | 약 670명 |
| 대전·세종·충청 | 약 314명 |
| 제주 | 약 303명 |
| 서울·인천·경기 | 약 277명 |
| 부산·울산·경남 | 약 262명 |
| 강원·대구·경북 | 약 229명 |
| 전체 평균 | 약 344.5명 |
따라서 합성패널 20명이 있다고 해서 실제 사람 20명을 의미하지 않는다. 예를 들어 호남 합성패널 20명은 실제 권리당원 약 1만 3,400명을 대표하지만, 수도권 합성패널 20명은 약 5,540명을 대표한다. 같은 20명이지만 대표하는 규모는 약 2.4배 차이가 난다.
5. 합성패널은 질문에 하나의 답을 하지 않는다
사람에게 "누구를 지지합니까?"라고 물으면 보통 한 명을 선택한다. 그러나 합성패널은 하나의 선택지가 아니라 확률벡터(Probability Vector) 로 답한다.
예를 들어 앞서 살펴본 64세 여성 패널에게 민주당 당대표 선호를 물으면 다음과 같이 답할 수 있다.
| 선택지 | 확률 |
|---|---|
| 김민석 | 30.3% |
| 정청래 | 27.6% |
| 송영길 | 13.0% |
| 유보 | 29.1% |
이것은 이 사람이 네 가지 답을 동시에 했다는 뜻이 아니다. 이 조건을 가진 사람이 같은 상황을 여러 번 경험한다면, 각 선택을 할 가능성이 이 정도라는 뜻이다.
동전을 던질 때 앞면이 나올 확률이 50%라고 해서 동전 한 개가 절반은 앞면이고 절반은 뒷면인 것은 아니다. 한 번 던지면 둘 중 하나가 나오지만, 여러 번 던지면 확률에 가까운 분포가 만들어진다.
합성패널도 마찬가지다. 1만 5,000번의 시뮬레이션 중 어떤 회차에서는 김민석을 선택하고, 다른 회차에서는 정청래나 송영길을 선택한다. 또 어떤 회차에서는 유보 상태로 남는다.
6. 유형에 따라 같은 질문에도 다르게 답한다
합성패널은 현재 네 종류의 질문에 답한다.
같은 질문이라도 패널의 지역과 이념, 나이 등에 따라 답은 크게 달라진다.
광주·전라의 진보 성향 패널. 이 집단은 대통령 국정 평가에서 약 80%가 긍정으로 계산된다. 정당 지지는 민주당 70%, 당대표 후보는 김민석 30%, 정청래 28% 정도로 나타난다. 정치적 판단이 여러 질문에서 비교적 일관되게 한 방향으로 정렬돼 있다.
대구·경북의 보수 성향 패널. 이 집단은 국정 평가에서 약 68%가 부정이고 국민의힘 지지확률은 63%다. 그런데 민주당 당대표 질문에서는 특정 후보보다 유보가 47%로 가장 높다. 이는 단순한 무응답이 아니다. 민주당 경선에 대한 관심이나 판단 근거가 부족해 특정 후보를 선택하지 않을 가능성이 높다는 뜻이다.
인천·경기의 중도 성향 패널. 이 집단의 국정 평가는 긍정 49%, 부정 45%로 팽팽하다. 차기 대선주자 질문에서는 유보가 22%로 가장 높다. 중도층의 불확실성과 유동성이 그대로 확률에 반영된 것이다.
7. 유보를 실제 투표 확률로 바꾼다
민주당 당대표 시뮬레이션은 네 질문 중 q004, 즉 당대표 선호 질문을 사용한다. 하지만 실제 투표지에는 '유보'라는 선택지가 없다. 투표장에 나온 사람은 결국 후보 중 한 명을 선택해야 한다.
따라서 유보 확률을 제거하고 나머지 후보들의 비율에 맞춰 다시 배분한다.
앞서 본 패널의 응답을 그대로 옮겨 보자. 유보를 제외하면 세 후보의 합은 70.9%다. 이를 다시 100%로 환산하면 실제 투표지에서의 후보 선택확률은 다음과 같이 변한다.
| 후보 | 원래 응답 | 유보 재배분 후 (선택확률 b) |
|---|---|---|
| 김민석 | 30.3% | 42.7% |
| 정청래 | 27.6% | 38.9% |
| 송영길 | 13.0% | 18.3% |
| 유보 | 29.1% | — |
계산은 단순하다. 30.3 ÷ 70.9 = 42.7%. 이렇게 바뀐 값이 시뮬레이션에서 사용하는 후보 선택확률 b다.
8. 투표장에 나올 가능성도 확률로 계산한다
후보를 누구로 선택할 것인가만큼 중요한 것이 있다. 이 사람이 실제로 투표하러 나올 것인가? 이를 참여확률 τ(타우) 라고 한다.
참여확률은 주로 권역과 연령의 영향을 받도록 계산한다. 연령별로는 60대의 투표 의향이 가장 높고, 18~29세가 가장 낮게 나타난다. 70세 이상은 정치적 관심과 별개로 거동이나 건강 문제 때문에 60대보다 실제 참여가 낮아지는 현상도 반영된다.
예를 들어 계산 결과는 다음과 같다.
| 합성패널 | 참여확률 τ |
|---|---|
| 대전 동구 64세 여성 | 72.9% |
| 인천 55세 남성 | 66.3% |
| 부산 서구 29세 여성 | 20.0% |
부산은 지역적으로 참여율이 높은 편이지만, 29세라는 연령 조건이 참여 가능성을 크게 낮춘다. 반대로 대전은 지역 조건이 상대적으로 불리해도 64세라는 연령 조건이 참여 가능성을 높인다. 즉 같은 지역에 살아도 나이가 다르면 참여확률이 달라지고, 같은 나이라도 지역이 다르면 결과가 달라진다.
참여확률이 72.9%라는 것은 "이 사람이 반드시 투표한다"는 뜻이 아니다. 시뮬레이션을 100번 실행하면 평균적으로 약 73번 참여하고 27번은 참여하지 않는다는 의미다.
9. 한 명의 확률이 전국 결과가 되는 과정
합성패널 한 명은 최종적으로 세 가지 핵심 값을 가진다.
| 값 | 의미 |
|---|---|
| τ | 투표에 참여할 확률 |
| b | 각 후보를 선택할 확률 |
| w | 실제로 몇 명을 대표하는지 나타내는 가중치 |
예를 들어 어떤 합성패널이 실제 권리당원 500명을 대표하고, 투표에 참여할 확률이 70%이며, 참여했을 때 김민석을 선택할 확률이 40%라고 해보자.
이 패널이 김민석 후보에게 기여하는 기대값은 직관적으로 다음과 같다.
500명 × 70% × 40% = 약 140표
하지만 실제 시뮬레이션에서는 이를 항상 140표로 고정하지 않는다. 매 회차마다 참여 여부와 후보 선택을 확률에 따라 다시 추첨하기 때문에 결과가 조금씩 달라진다.
모든 패널에 대해 이 계산을 수행하고 권역별로 합치면 다음과 같은 기본 예측이 나온다.
Σ (w × τ × b)
ŝ = ─────────────────
Σ (w × τ)
쉽게 말하면 다음과 같다. 더 많은 사람을 대표하고, 실제로 투표할 가능성이 높은 패널의 선택을 더 크게 반영한다.
여기에 인구구성만으로 설명할 수 없는 지역별 차이를 보정하고, 당원투표 70%와 국민여론조사 30%를 합친다. 과반 득표자가 없으면 3위 후보의 표가 누구에게 이동하는지도 계산한다. 이 전체 과정을 1만 5,000번 반복한다.
그래서 최종 결과는 "김민석 52.9%"라는 숫자 하나로만 끝나지 않는다. 다음과 같은 형태로 제시하는 것이 더 정확하다.
- 예상 득표율
- 오차 범위
- 후보별 승리확률
- 결선 또는 표 이양 가능성
- 조건 변화에 따른 결과 분포
합성패널은 미래를 하나로 단정하는 장치가 아니라, 가능한 미래가 어떤 범위로 펼쳐지는지를 보여주는 장치다.
10. 합성패널 한 명은 정확히 무엇인가
합성패널 한 명을 이해할 때 세 가지를 구분해야 한다.
| 오해 | 실제 |
|---|---|
| 실존 인물 한 명이다 | 아니다. 개인과 개인의 대응이 아니라 분포와 분포의 대응이다 |
| 실제 사람 한 명 몫이다 | 아니다. 평균 344.5명, 지역에 따라 229~670명을 대표한다 |
| 한 표를 던진다 | 아니다. 참여도 선택도 확률이며 회차마다 달라진다 |
한 명은 실존 인물 한 명이 아니다. KR-V2-281687이라는 패널과 정확히 일치하는 실제 사람은 존재하지 않는다. 이 패널은 특정 개인을 복제한 것이 아니라 다음과 같은 통계적 조건을 표현한다.
"대전 동구에 거주하는 64세·고졸·서비스직·소득 1분위·기혼 여성과 같은 조건의 사람들이 현실 인구 안에 일정한 비율로 존재한다."
즉 개인과 개인의 대응이 아니라 분포와 분포의 대응이다.
한 명은 실제 여러 사람을 대표한다. 4,433명의 합성패널이 실제 권리당원 152만 7,261명을 대표하므로 한 명이 평균 344.5명을 대표한다. 그러나 지역별 재가중 때문에 실제 대표 인원은 약 229명에서 670명까지 달라진다.
한 명은 한 표도 아니다. 합성패널 한 명은 특정 후보에게 고정된 한 표를 던지지 않는다. 참여할지 말지도 확률이고, 참여했을 때 누구를 선택할지도 확률이다. 시뮬레이션을 실행할 때마다 다른 선택을 할 수 있다.
따라서 합성패널 한 명은 단순한 가상 유권자가 아니다. 여러 실제 사람을 대표하는 무게와, 참여 가능성, 후보 선택 가능성을 함께 가진 확률 묶음이다.
이해를 돕는 비유
한 학교의 학생 1만 명을 조사하고 싶지만 모든 학생을 직접 만날 수 없다고 해보자.
그래서 학년, 성별, 성적, 가정환경, 관심 과목 등을 반영해 100명의 대표 학생 모델을 만든다. 그런데 100명 모두가 똑같은 수의 학생을 대표하지는 않는다. 어떤 유형은 학교에 많기 때문에 150명을 대표하고, 희귀한 유형은 30명만 대표한다.
또 이 대표 학생에게 "수학 특별수업에 참여하겠느냐"고 물었을 때 반드시 예 또는 아니오로 고정하지 않는다.
- 참여 가능성 70%, 불참 가능성 30%
- 참여한다면 어떤 수업을 고를지도 확률로 표현한다 — 문제풀이반 50%, 개념반 35%, 심화반 15%
이를 수천 번 반복하면 한 번의 단순 설문보다 훨씬 풍부한 결과를 얻을 수 있다. 예상 참여자 수뿐 아니라 결과가 흔들릴 수 있는 범위와 어떤 집단이 변화의 핵심인지도 알 수 있다.
Reble.ai의 합성패널도 같은 원리다. 다만 학생 대신 시민을 만들고, 수업 대신 정당·후보·정책·투표 참여에 관해 묻는 것이다.
합성패널의 한계
합성패널은 현실을 통계적으로 재현하지만 현실 그 자체는 아니다.
현재 패널에는 "실제 민주당 권리당원인지"를 직접 확인하는 정보가 없다. 따라서 민주당 지지층의 특성이 권리당원의 특성과 비슷하다는 가정이 일부 포함된다. 이 가정이 잘 맞지 않는 지역에서는 오차가 커질 수 있다.
실제 채점에서 최종 득표율은 1.2%포인트 차이로 근접했지만, 호남 지역 후보 간 격차에서는 12.8%포인트의 편차가 발생했다. (채점 결과 전문)
따라서 Reble.ai가 보여줘야 하는 것은 단순한 예측 숫자만이 아니다.
| 함께 공개해야 하는 것 |
|---|
| 어떤 정보가 실제 관측값인지 |
| 어떤 정보가 모델의 예측인지 |
| 어떤 가정이 사용됐는지 |
| 예측의 불확실성이 어느 정도인지 |
| 실제 결과와 비교했을 때 어디서 틀렸는지 |
이 모든 것을 함께 공개해야 합성패널은 신뢰할 수 있는 사회 시뮬레이션 도구가 된다.
한 문장으로 정리하면
합성패널은 현실 인구의 구조를 닮도록 만든 통계적 시민으로, 실제 여러 사람을 대표하는 가중치를 가지고 참여와 선택을 확률로 답하며, 수천 번의 시뮬레이션을 통해 하나의 예언이 아니라 가능한 결과의 범위를 보여준다.
직접 만져보고 싶다면 민주당 당대표 시뮬레이션에서 조건을 바꿔 볼 수 있다. 공식과 원자료까지 파고든 기술 버전도 함께 두었다.