2017년 대선 지지율 예측

네이버에서 여론조사 데이터를 긁어오는 스크립트를 짜면서  ‘당선 가능성’이라는 것이 여론조사에 항목에 있다는 걸 알게 되었다. 여론조사가 말하는 ‘당선 가능성’은 그저 “어느 후보가 가장 당선 가능성이 높다고 생각하십니까?”라는 질문에 대한 시민들의 응답을 기록한 것이었다.

가장 잘 생긴 사람을 뽑는 대회와 다른 사람들이 가장 잘 생겼을 것이라고 생각할 사람을 뽑는 대회는 사뭇 다르다. 여론조사의 ‘당선 가능성’을 후자에 빗댄다면 통계적 예측을 통한 확률로서의 당선 가능성을 전자라 할 수 있을 것이다.

진짜 확률로서의 당선가능성을 뽑아낼 방법이 없을까 하는 물음에서 2017 대선후보 중 주요 후보 다섯 명(기호 순 문재인, 홍준표, 안철수, 유승민, 심상정)의 지지율 추세를 시계열(time series)로 보고 시계열 분석을 시작해봤다. 대중에게 여론조사가 공표될 수 없는 내일 이후 6일간의 기간동안 지지율 추세의 대략적인 지표가 될 수도 있으리라 본다.

분석에 사용한 데이터와 가정은 다음과 같다:

  1. 각 후보의 지지율 추세는 (독립적인) 확률과정이다.
    1. 실제 지지율과는 매우 동떨어진 가정이다. 한 후보의 지지율은 결국 비율이기 때문에 내재적으로 다른 후보의 지지율에 의존할 수밖에 없다.
  2. 외인 변수는 고려하지 않는다. 즉, 여기서 예측하는 지지율은 앞으로 큰 변동/사건이 일어나지 않는다고 할 때 가능한 지지율 추세이다.
  3. 지지율 시계열은 0차 이상의 차분을 통해 stationary process로 표현할 수 있다.
  4. 다섯 후보 모두의 지지율이 계속해서 집계되기 시작한 3월 28일자부터 5월 3일까지 공표된 여론조사 데이터를 사용했다. (5월 3일 새로 공표된 여론조사 반영하여 수정함)

 

ARIMA 모형 차수 설정

분석 과정에서 문제가 있지는 않았나 싶어 과정을 공개하고자 한다. 무시하고 바로 결과로 건너뛰어도 된다.

stationary process 검정 (Dickey-Füller test) 등 보다 자세한 과정 및 수정 내역은 이 노트북에서 확인할 수 있다. RNN을 이용하려했던 흔적도 찾을 수 있다.

output_6_0

지지율 시계열

output_11_0

1차 차분한 시계열

output_14_0

2차 차분한 시계열

Dikey-fuller 검정 결과 stationary process를 만족하는 최소 차분수 시계열을 바탕으로 각각 ARIMA 모형을 피팅했다. AR, MA 모형 차수를 설정하기 위해 아래와 같이 ACF(autocorrelation function)와 PACF(partial autocorrelation function)를 확인했다.

output_16_0

문재인 시계열 – 차분 안 함 – ACF, PACF

문재인 후보 시계열의 모형으로 ARMA(1,2)를 선택했다.

output_17_0

심상정, 유승민, 홍준표 시계열 – 1차 차분 – ACF, PACF

심상정, 유승민, 홍준표 후보 모형으로 ARIMA(1,1,1)을 선택했다.

output_18_0

안철수 시계열 – 2차 차분

안철수 후보 시계열의 모형으로 ARIMA(1,2,2)를 선택했다.

 

지지율 예측 결과

미래 시점의 예상 지지율 기댓값을 실선과 원으로 (-o-의 모양새), 95% 신뢰구간을 그림자로 나타냈다. 시계열만으로 예측하는 것이기에 95% 신뢰구간이 크게 나타나는 것에 유의. 시계열 분석은 미래를 확정적으로 예측하는 마법같은 도구가 아니다.

쉽게 표현하자면 실선으로 표시된 부분은 그나마 가장 가능성이 높아뵈는 시나리오 정도로 받아들이면 된다. 실제로는 어디에든 지지율 포인트가 찍힐 수 있다. 빈도주의 관점에서 본다면 평행우주(?)에서 100번 대선을 실시하면 95번 정도는 그림자 안에 지지율이 찍힐게다. 달리 말하자면 신뢰구간의 폭이 넓을수록 예측이 어렵다는 이야기가 된다.

output_24_0

대선 지지율 추세 예측

실제로 일어날 법한 지지율 추세가 나온다. 특히 안철수 후보의 지지율의 경우 넓은 지지율 변동폭을 반영해 높은 예측 불가능성(매우 넓은 신뢰구간)을 보여준다. 이 외에도 현재의 지지율 값이 과대평가된 값인지, 혹은 과소평가된 값인지를 시계열 기댓값 예측값으로 판단할 수 있다.

 


시계열 분석은 미래를 확정적으로 예측하는 방법이 아니다. 데이터에 대한 여러 가정을 세우고 그 모든 가정을 충족시킨다 할 때 현재까지의 추세를 바탕으로 가장 그럴듯한 예측치를 보여주는 것 뿐이다.

가정이 하나라도 크게 어긋난다면 그리 좋은 예측이 되지 못한다. 가정이 모두 충족되더라도 하나의 확실한 예측값을 보여주지는 못한다. 데이터 자체의 속성과 미래를 예측하고자 하는 데에 따르는 (때로는 거대한) 불확실성을 항상 염두에 두어야 한다는 이야기이다.

그러나 그리 세밀한 예측치가 아니더라도 충분할 때가 있다. 여론조사 공표가 금지되는 다음 일주일, 더 나아가 각 후보의 당선 가능성을 가늠하는 데에 지금까지의 추세를 반영한 시계열 예측이 한 번 참고해 볼 수준은 될 수 있을 게다.

One comment

답글 남기기

댓글을 게시하려면 다음의 방법 중 하나를 사용하여 로그인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google photo

Google의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중

This site uses Akismet to reduce spam. Learn how your comment data is processed.