본문 바로가기
컴퓨터/수학이랑

주성분 분석으로 알아 보는 도시 통계

by adnoctum 2018. 5. 15.



   이 글은 주성분 분석의 예제를 위한 글이다. 주성분 분석이 무엇인지 설명하기 위해 도시에 관한 통계를 이용하여 도시의 특성을 살펴 본 글이다. 주성분 분석의 수학적 원리 및 그것을 C++로 구현한 것은 전의 글을 참고한다. 


   주성분 분석은 분석하는 대상의 차이점을 가장 잘 드러내 주는 변수 조합을 찾는 방법이다. 예를 들면, 한국의 각 도시 간의 차이를 가장 잘 나타내 주는 통계는 무엇일까? 인구, 교원 1인당 학생 수, 도시 면적, 사망자 수, 상수도 보급률 등등의 통계 중에서 도시 간의 차이를 가장 잘 나타내어 줄 수 있는 변수의 조합을 찾을 수 있고, 혹은 각 변수가 도시 간의 차이에 대해 어느 정도의 기여를 하는지 등을 찾는 방법이 주성분 분석이다. 

   우선 이 글은 통계청 누리집에서 받은 한국의 도시에 관한 여러 통계 값을 사용했다. 총 변수는 71개로 인구수, 도시 면적 등이 포함된다. 도시는 서울시 등의 광역시는 구 단위로 나눴다. 제주도는 서귀포시와 제주시로 나누어서 했다. 창원시와 마산시처럼 통합이 되는 등의 변화로 인해 통계치가 많이 없는 경우가 있기 때문에  사용할 수 있는 전체 변수들 중 여러 도시에 공통으로 존재하는 변수들을 고르다 보니 총 71개의 변수가 남게 되었다. 이 글에 사용한 통계 파일은 다음에 올려 놓는다. 

SKoreaConsusFullRank.txt


주성분 분석을 해보면 다음과 같이 각 변수에 대한 계수가 계산이 된다. 살펴 보면 각 도시 간의 차이는 인구에 대한 변수로 대부분 설명이 되는 것을 알 수 있다. 주민등록인구 (2017~2015) 이 세 변수의 합이 0.97로, 각 도시 간의 차이의 97%가 인구수로 설명이 된다는 의미이다. 그 다음 중요한 것이 전입인구 수, 사업체 수 등의 순서임을 알 수 있다. 



주성분 분석의 원리에 관한 글에서 설명하였듯이 계수의 제곱의 합이 1.0 이 됨을 위에서 볼 수 있다. 

주민등록인구수가 너무 많은 변량을 설명하므로 이 세 변수를 제외하고 다시 주성분 분석을 해보자. 물론, 그렇게 하면 주민등록인구에 의한 변량을 제외한 값에서 각 변수가 차지하는 비율이 다시 나오긴 한다. 



이 경우 전입인구수가 대부분의 차이를 설명하는 변수임을 알 수 있다. 즉, 2015~2017년의 전입인구 수가 총 85% 의 도시간 차이를 설명하는 변수임을 알 수 있다 ((coeff_pc1)^2). 만약 이 세 변수를 제하고 다시 주성분 분석을 하여 각 변수의 영향력을 살펴 보면 녹색으로 표시한 것과 같이 나온다. 즉, 주민등록인구수와 전입인구수에 관한 통계를 제외하면 각 도시 간의 차이를 가장 잘 반영하는 변수는 사업체 수와 토지거래 현황 (필지수, 2017년) 임을 알 수 있다. 

   도시 간 차이에 대한 기여율이 매우 낮기는 하지만 유치원 원아수, 출생아수 가 그 다음으로 나온다. 즉, 도시는 그 도시에 살고 있는 사람의 수, 그 도시로 들어 오고 나가는 인구 수가 도시의 가장 큰 특징이 되며, 그 다음으로 사업체 수, 토지 거래 현황, 유치원/출생아 수, 사망자 수 등에 의해 도시의 특징이 결정되는 것을 알 수 있다. 출산률, 지가변동률, 자동차 천대당 교통사고 발생 건수, 1인 가구 비율 등은 도시 간의 차이를 설명하기에는 매우 미약한 변수들임을 알 수 있다. 

   전문가가 아니라 정확한 분석은 아니겠지만, 주성분 분석만으로 위 결과를 이해해 보자면 이렇다. 도시 간의 차이는 우선 인구에 의해 가장 많이 좌우된다. 살고 있는 인구 수 자체가 전입인구에 의해 결정되므로 인구 수는 곧 전입인구수에도 반영이 된다. 또한, 도시의 발달을 생각해 보면 사업체 수가 전입인구와 연관된 주요한 변수임을 알 수 있다. 사업체의 증감에 따라 전입인구의 증감 역시 나타날 것이기 때문이다. 흥미로운 점은 그 다음으로 나오는 것이 유치원 원아수, 출생아수가 도시 간의 차이를 설명하는 변수라는 것이다. 아무래도 인구의 일정 부분이 유치원생과 출생아수이기 때문에 인구수에 따라 나타난 통계값이 아닌가 생각된다. 또한, 도시의 발달에 주요한 필요 조건 중 하나가 유치원과 같은 시설이 아닌가, 한다. 교원 1인당 학생수나 인구 천명당 사설학원 수 모두 유치원 및 유치원생에 관한 통계보다 도시간 차이에 기여하는 비율이 적은 것으로 나온다. 

   이제 주성분 분석의 제1주성분과 제2주성분을 이용하여 각 도시를 2차원 상에 표시해 보자. 


원점에서 가장 먼 곳에 위치하는 도시는 화성시/용인시/청주시 등임을 알 수 있다. 제2주성분의 주요한 변수는 토지거래 면적 및 필지수, 사업체 수, 전입인구, 유치원수, 도시 면적 순임을 감안할 때 원점에서 가장 먼 곳은 인구도 많고 도시 면적도 큰 도시들임을 유추할 수 있다. 실제로 용인시/창원시/고양시/수원시 는 광역시가 아닌 도시들 중에 인구가 가장 많은 도시들이다. 또한 화성시는 인구는 비록 60만 정도(8위)이나 전입인구가 10만(6위)이 넘는 도시로, 동탄 제1신도시 이후 한창 진행 중인 동탄 제2신도시 개발에 따른 통계값들이 반영된 것으로 보인다. 


   y 축으로 표현된 제2주성분의 값은 다소 '도시화'와 연관된 것으로 보인다. 제1주성분이 어느 정도 크고 (즉, 인구 수가 어느 정도 크고) 제2 주성분 역시 큰 곳들은 대부분 서울시 혹은 광역시의 여러 구인 것으로 나타났다. 


중간중간 울릉군이나 계룡시가 끼어 있는데, 매우 작은 도시가 끼어 들어 간 것으로 보이고, 실제로 제2주성분 값은 면적은 크지 않지만 인구는 많고 사업체가 많은, 쉽게 말해 우리가 일반적으로 생각하는 도시에 얼마나 가까운가를 반영하는 값으로 보인다. 


   이상으로 주성분 분석을 이용하여 도시에 대한 통계를 살펴 보았다. 상수도 보급률과 같은 것은 대부분의 도시가 비슷한 값을 갖기 때문에 도시를 구분하기에 좋은 변수가 아니다. 반면, 인구가 각 도시를 구분할 수 있는 압도적인 변수임을 알았다. 그 뒤로 전입인구, 사업체수, 유치원수 등이 도시 간의 차이를 나태내어 주는 변수임을 알았다. 도시 면적 역시 도시 간의 차이에 기여하는 정도가 앞에 열거한 변수들보다 적은 것을 알 수 있었다. 주성분 분석에 의해 제1주성분과 제2주성분을 각각 x축, y축으로 한 후 각 도시를 그려 보면 인구수가 충분히 많은 도시들, 가령 수원시/화성시/고양시/용인시 같은 도시들이 원점에서 먼 도시로 나타난다. 그 이외의 도시들은 원점에 몰려 있다. 즉, 경기도(고양시/수원시/용인시/화성시), 충청도(청주시), 경상도(창원시) 처럼 광역시는 아니지만 인구가 충분히 많고 그만큼 사업체 등이 발달된 도시들이 다른 도시들과 많이 구분되고, 그것을 주성분분석 2차원에서 확인할 수 있었다. 물론, 서울시/광역시들이 더더욱 뚜렷하게 나타났겠지만 이들은 구 단위로 분석을 해서 현재는 그것이 두드러지게 표시되진 않았다. 또한, 원점에 가까이 몰려 있는 도시들 중 인구가 적고 사업체가 적은, 예를 들면 우리의 일반적 인식 속에 있는 '시골'에 가까운 도시들, 가령 영양군/울릉군/장수군/무주군 등도 알 수 있었다. 




   여기서부터는 개인적인 이야기들. 내 고향은 용인이고, 여전히 용인에 부모님이 살고 계신다. 용인이 꽤 넓은 지역이라 지역 간 개발 정도가 많이 차이가 난다. 그래서 그런지 용인이 고향이라고 하면 사람들은 전부 도시라고 생각하지만, 내가 태어나고 자란 곳은 5년여 전만 해도 반딧불이가 날아 다녔고, 으름이나 다래가 있고, 논과 산에는 족제비/너구리/고라니 등이 뛰어 다니는 곳이다. 나는 중학교 때까지 장작을 때는 온돌방이 있는 집에서 살았었다. 얼마 전까지만 해도 눈이 오면 우리 동네는 버스가 오질 못했다, 고개 하나를 넘을 수 없어서. 그래서 중학교 때 눈이 오면 학교에 지각을 하곤 했었다. 여전히 기억나는, "과학실로", 라고 누군가가 나를 위해 칠판에 써 놓았던 글자, ㅋㅋㅋ. 용인에서 살다 고등학교를 수원에서 다녔고, 이후 서울로 대학을 가서 대전에 내려오기 전까지 서울/수원/용인에서 주로 돌아 다녔기 때문에 여전히 용인을 시골로 생각하고 있었는데... 얼마 전 용인 인구가 100만을 넘었다는 소식을 들었다. 용인 지역 내에서 개발 편차가 클 뿐 용인은, 특히 분당과 수원에 인접한 곳들은 시골이 아니었어, >.<"";;; 

   공교롭게도 이번 분석에서 가장 튀게 나온 경기도권 도시들, 고양시/용인시/평택시/화성시/수원시 는 익숙한 도시들이다. 지금 큰누나가 살고 있는 곳이 화성시이기도 하고, 우리 동네의 산골짜기로 가서 산을 하나 넘으면 화성시 동탄이다. 언제인지 기억은 안 나는데 겨우 산 하나 넘은 것인데 얼마나 머랴, 하고 산 하나 넘어서 동탄면(신리)로 가서 집으로 돌아 오느라 5시간을 걸었던 적도 있다. 평택도 근처 도시이기도 하며 심리적으로 가깝게 느껴지기도 하고. 생각해 보면 서울과 광역시를 제외하면 이런 도시들이 인구도 많고, 뭔가 이런 도시에 익숙해져있다 보니 전국의 많은 곳을 가도 약간 시골스럽다는 느낌이 들기는 했다. 보통 서울 출신들이 그런다는데 나는 용인이기는 해도 시골에서 자랐는데 왜 그런 느낌이 드나, 했는데, 이번 분석에 의하면 내가 지내 온 도시들이 서울을 비롯해 인구수나 도시 특성으로 보았을 때 저렇게 특징적인 도시였기 때문일 수도 있겠다, 하는 생각이 들었다. 용인/수원에서 받은 가장 큰 느낌은 사람이 많다는 것과 공장이 많다는 것이었으니까. 전국 어디를 가나 그 정도 사람과 공장/회사가 있는 곳은 서울과 광역시들을 제외하면 많진 않겠지, 그것이 이번 분석으로도 나타났고. 심지어 대전도 약간 시골처럼 느껴질 때가 많고, 실제로 대구나 부산, 창원에서 온 사람들 역시 그런 말을 많이 한다.