-
통계청 MDIS 마이크로데이터를 기반으로 한국 사회의 인구통계, 가구 형태, 소득, 자산, 부채, 직업군 분포를 반영한 AI 페르소나 여론 시뮬레이션 서비스
-
사용자가 궁금한 질문을 입력하면, 조건에 맞는 AI 시민들을 선택해 응답을 생성하고, 결과를 찬반/선택지/연령대/성별/소득분위/직업군 등으로 분석
-
2025년 가계금융복지조사 MDIS 원시 CSV를 가구마스터 34,880건, 가구원 69,929건 단위로 파싱하고 조인하여 서비스용 한국 페르소나 약 4.1만 명을 구성
-
Gemini를 활용해 통계청 코드만으로는 부족한 직업명, 성격, 취미, 고향, 1인칭 자기소개를 생성하되, 연소득·자산·부채와 직업·서사가 모순되지 않도록 제약 조건을 넣어 보정
-
단순히 "한국 사람 100명에게 물어본다면?"을 LLM에게 한 번 묻는 방식이 아니라, 실제 분포 기반 페르소나들이 각자 다른 배경과 말투로 답변하고, 통계 가중치를 적용해 결과를 집계
기존 LLM 여론 시뮬레이션의 문제점
LLM에게 바로 "한국 시민 100명의 의견을 시뮬레이션해줘"라고 물으면 결과가 지나치게 평균적이거나, 모델이 익숙한 몇 가지 직업·지역·성향으로 쏠리는 문제가 있음
-
한국 사회의 실제 가구 구조, 소득 분위, 직업군, 수도권/비수도권 차이, 무직/은퇴/학생/전업주부 같은 상태가 충분히 반영되지 않음
-
특히 여론·정책·상품 반응처럼 집단별 차이가 중요한 질문에서는 "그럴듯한 단일 답변"보다 "누가 왜 다르게 생각하는가"가 더 중요함
-
예를 들어 같은 부동산 정책 질문이라도 20대 비수도권 무주택자, 수도권 자가 보유 50대, 은퇴 후 임대소득이 있는 70대는 전혀 다른 근거로 판단할 수 있음
-
ManyPerson은 이런 차이를 페르소나의 배경 데이터로 먼저 만들고, 그 위에서 응답을 생성하는 방식으로 접근
데이터 소스 및 제작 방식
-
통계청 MDIS의 2025년 가계금융복지조사 데이터를 기반으로 페르소나 생성 파이프라인 구성
-
가구마스터 CSV와 가구원 CSV를 가구고유번호 기준으로 조인하여 개인 단위 페르소나 생성
-
성별, 연령, 가구 내 관계, 혼인상태, 최종학력, 종사상지위, 직업대분류, 산업대분류, 수도권 여부, 주거 형태, 가구원 수, 소득 5분위 등을 코드북 기반으로 사람이 읽을 수 있는 값으로 변환
-
가구 총소득, 처분가능소득, 소비지출, 식료품비, 주거비, 교육비, 의료비, 총자산, 부채, 순자산도 페르소나 속성으로 보존
-
가구 단위 소득을 그대로 개인 소득으로 쓰지 않고, 가구주/배우자/자녀/무직/은퇴 여부에 따라 개인 추정 연소득을 휴리스틱으로 배분
-
통계청 가중값을 weight로 저장하여, 단순 응답 수뿐 아니라 인구 비례 가중 통계도 계산 가능
페르소나 디테일 생성
-
MDIS 원자료만으로는 "이 사람답게 말하는 이유"를 만들기 부족하므로, Gemini를 이용해 서비스용 디테일을 추가 생성
-
생성 필드에는 구체 직업명, MBTI, 성격, 취미, 고향, 짧은 자기소개가 포함
-
직업명과 자기소개는 연소득, 가구 총소득, 순자산, 부채, 직업대분류, 종사상지위와 함께 생성하여 현실성을 보정
-
연소득 1억 이상이면 임원, 고소득 전문직, 성공한 자영업자 등이 나오도록 하고, 연소득 0원 또는 무직/은퇴/자녀인 경우에는 억지 직장인을 만들지 않도록 제약
-
가구 소득·자산은 높지만 개인 소득이 낮은 경우에는 고소득 배우자를 둔 전업주부, 자산가 부모를 둔 대학생, 임대소득으로 생활하는 은퇴자 같은 맥락을 자연스럽게 반영
-
부채가 큰 경우에는 자기소개나 성격에 재정적 압박이 드러나도록 설계
-
초기 생성 과정에서 "저소득층인데 로펌 과장", "고소득층인데 아르바이트생"처럼 재무 데이터와 서사가 어긋나는 문제가 있어, 별도 Phase 2 재생성 파이프라인으로 약 4.1만 명의 occupation/bio를 다시 보정
-
생성 결과는 한 번에 메모리에 들고 있다가 저장하지 않고, 페르소나별 생성 직후 PostgreSQL JSONB에 개별 업데이트하는 스트리밍 구조로 처리
-
중간에 Pod가 죽어도 이미 반영된 데이터는 남고, migrationPhase2 마커로 이어서 실행 가능
서비스 사용 흐름
-
사용자는 자연어로 질문을 입력
-
Gemini + 검색 Grounding으로 질문을 정리하고, 필요한 경우 배경 상황 요약과 필터 조건을 추천
-
성별, 연령대, 지역, 소득분위, 학력, 직업군, 가구원 수, 혼인상태 등으로 대상 페르소나를 필터링
-
최종 선택된 AI 시민들이 각자의 페르소나 스냅샷을 기반으로 응답
-
응답은 즉시 DB에 저장되어 진행 화면에서 실시간으로 일부 답변을 볼 수 있음
-
완료 후에는 긍정/중립/부정 또는 객관식 선택지 분포를 계산하고, 통계청 가중값을 적용한 가중 결과도 함께 표시
-
연령대, 성별, 소득분위, 학력, 직업군 등 인구통계 축별 교차분석을 제공
-
최종 결과는 공유 가능한 페이지로 생성되며, 개별 페르소나의 답변 카드와 전체 통계 차트를 함께 확인 가능
활용 예시
-
신규 서비스나 상품 아이디어에 대해 "20~30대 수도권 직장인들은 어떻게 반응할까?"를 빠르게 가늠
-
정책·사회 이슈에 대해 연령대, 소득분위, 직업군별로 어떤 근거가 갈리는지 탐색
-
광고 카피, 가격 정책, 앱 기능 우선순위, 채용 공고, 자기소개서 등에 대해 다양한 배경의 AI 시민 평가를 받아보기
-
실제 설문을 돌리기 전, 어떤 질문이 애매한지 또는 어느 집단에서 반응이 갈릴지 사전 탐색
Nemotron-Personas-Korea와 다른 점
-
Nemotron-Personas-Korea가 대규모 한국어 합성 페르소나 데이터셋이라면, ManyPerson은 그 아이디어를 "바로 질문하고 결과를 보는 웹 서비스"로 만든 쪽에 가까움
-
ManyPerson은 현재 공개 데이터셋 배포보다는, 통계 기반 페르소나 풀을 내부적으로 구성하고 사용자의 질문에 맞춰 샘플링·응답 생성·통계 분석까지 이어지는 제품 경험에 초점
-
데이터 구성도 단순 인구 프로필을 넘어, 가계금융복지조사의 소득·자산·부채·소비지출 정보를 페르소나 생성과 결과 해석에 적극 활용
기술 스택
-
Node.js, Express, EJS 기반 웹 서버 ( 빠른 개발을 위해, 일부 모듈은 간단히 go 로 작성 )
-
PostgreSQL/Cloud SQL에 페르소나, 시뮬레이션, 응답, 결제/크레딧 데이터 저장
-
페르소나의 확장 속성은 PostgreSQL JSONB로 저장하여 직업, 학력, 소득분위, 고향, 성격, 자기소개 등을 유연하게 관리
-
Valkey를 사용해 큐와 캐시 처리
-
GKE Autopilot 위에서 서버/워커 분리 운영
-
Gemini 3 계열 모델과 Vertex AI Flex API를 사용해 페르소나 디테일 생성 및 시뮬레이션 응답 생성
-
SSE로 시뮬레이션 진행률과 최근 응답을 실시간 스트리밍
한계 및 주의점
-
ManyPerson의 결과는 실제 여론조사가 아니라 AI 페르소나 기반 가상 시뮬레이션
-
통계청 MDIS의 공개 범위와 코드 수준에 의존하므로, 세부 지역·정치성향·실시간 이슈 인지도 같은 변수는 별도 추정 또는 입력이 필요
-
LLM 생성 디테일은 현실성을 높이기 위한 합성 정보이며, 실존 인물과의 유사성은 의도하지 않음
-
표본 수가 작거나 필터가 좁을수록 결과는 탐색적 참고 자료로 보는 것이 적절
-
그래도 "LLM 하나에게 한국인의 평균 의견을 상상하게 하는 방식"보다는, 실제 인구통계와 가계 데이터에 기반한 다양한 AI 시민을 먼저 만들고 응답을 모으는 편이 더 쓸모 있는 출발점이라고 생각

3 hours ago
2




![전처 살해 후 시신 유기 시도한 60대 구속…法 "도망 염려" [종합]](https://img.hankyung.com/photo/202604/ZN.43811686.1.jpg)


English (US) ·