들어가는 글: 역학과 동물병원?
저는 수의 역학을 연구하는 Veterinary epidemiologist입니다.
수의 역학이란 “질병과 같이 나쁜 것이든 복지와 같이 좋은 것이든, 동물 집단(Population)의 상태를 분석하고, 상태가 변했다면 변화를 야기한 원인을 파악해, 이를 토대로 차후 예방을 도모하는 학문”입니다. 역학 분석을 위해 저희는 통계와 수학이라는 도구를 이용합니다. 다양한 타입의 데이터로 대변되는 다양한 현상을 여러 통계 및 수학적 방법으로 풀어내어 재구성합니다.
일반적으로는 주로 산업동물 관련 데이터를 분석하긴 하지만, 그런 일만 하는 것은 아닙니다. 이 글을 쓰게 된 계기는 작은 호기심 때문이었습니다.
제 주변의 또래 수의사들이 이제 막 동물병원을 개업하거나 준비하는 시기입니다. ‘서울은 더 이상 동물병원을 열 곳이 없다’, ‘서울은 포화상태다’라는 말들을 하곤 합니다. 저야 개원할 임상수의사도 아니라 이런 말을 들어도 별 감흥은 없습니다만, Epidemiologist로서 분석하고 싶은 욕구는 강하게 생깁니다.
그래서 이런 저런 변수들을 조합해 서울의 동물병원 수를 설명하는 구조, 즉 역학 모델을 만들었습니다. 이 모델을 통해 서울시내 어느 지역에 동물병원이 많고, 어느 지역에는 상대적으로 적은지 알아보면 재미있지 않을까요?
분석방법
모델을 본격적으로 다루기 앞서 일단 ‘동물병원이 많다, 적다’의 개념부터 정리해봅시다. 설명을 위해 서울시의 전체 면적이 1,000㎢이고 ‘적정’ 동물병원 수를 100개소라고 가정하겠습니다.
이들이 고루 분포되려면 매 10㎢마다 하나씩 있어야 합니다. 서울시내 어느 지역에도 ‘많지도 적지도 않게’ 동물병원이 위치한 셈이 되겠지요. 이 때 ‘매 10㎢마다 동물병원이 한 곳 있는 값’을 동물병원이 무작위로 분포하기 위한 기대값(Expected value)이라고 합니다.
하지만 그 100개소가 특정 지점에는 몰려있고, 다른 지점에는 없을 수도 있겠지요? 이처럼 서울시내 어느 지역의 동물병원 숫자(측정값, Observed value)가 기대값보다 크다면, 그 곳은 동물병원이 밀집되어 있다고 볼 수 있습니다.
물론 이는 여타 동물병원의 입지 조건을 전혀 고려하지 않은 경우입니다. 그냥 바둑판 위에 바둑돌을 올려 놓는 거나 다름없지요. 따라서 보다 현실과 가깝게 동물병원 분포를 반영하는 모델을 만들려면 다른 입지조건을 수학공식의 변수로 만들어 모델에 집어넣어야 합니다.
그렇다면 어떤 변수들이 필요할까요? 저는 아래와 같이 아주 보편적이고 당연한 가정들을 해보았습니다.
가정1 : (행정)동의 인구가 많아질수록 동 안의 동물병원 수는 많아질 것이다.
가정2 : (행정)동의 평균 집값이 높아질수록 동 안의 동물병원 수는 많아질 것이다.”
가정1은 동물병원 수의료 서비스의 잠정 소비자 수를 반영한 가정입니다. 인구수가 많아야 잠정 고객이 많아진다는 점은 설명할 필요도 없겠죠?
가정2는 그 잠정 소비자 중 실제 병원에 내원하는 정도를 반영하기 위해 설정했습니다. 아무래도 반려동물을 키우고 동물병원에 실재 내원하는 정도는 사람들의 소득수준과 밀접한 관련이 있겠지요. 그 소득수준은 그 사람들이 거주하는 집의 가격과 높은 연관성(Correlation)을 보일 테고요. 즉 특정 지역의 동물병원 내원 정도는 해당 지역의 평균 집값을 통해 유추할 수 있겠습니다.
일단 ‘지역’을 구분할 기준은 행정동으로 잡았습니다. 여기에 1)행정동 별 평균 인구수와 2)행정동 별 평균 집값을 변수로 집어넣어 Zero-inflated Poisson regression 이라는 모델을 만들었습니다.
이 모델을 최대한 간단하게 도식화하면 아래와 같습니다만, 수의역학 전공자가 아니면 이해하기 어려우니 일단 넘어갑시다.
모델을 만들었으니, 모델을 돌리기 위한 기초 데이터(Raw data)가 필요하겠네요.
서울시내 동별 대지면적과 인구수는 ‘서울시 열린 데이터센터’에서, 동별 평균 아파트 매매가는 ‘국토교통부 실거래가 공개시스템’에서 제공하는 것을 사용했습니다. 서울시내 동물병원 리스트는 대한수의사회 홈페이지에서 검색이 가능하네요. 분석을 위해 활용해도 좋다는 대한수의사회의 허락도 맡았습니다.
서울시에는 25개 자치구와 424개 행정동이 있습니다. 분석을 위해 424개 행정동을 208개 동으로 합쳤습니다. 본동, 1동, 2동 등으로 나뉜 경우는 하나의 동으로 취합했고, 제가 가진 지도파일에 따라 합쳐진 경우도 있었습니다.
사실 이들 기초 데이터를 모델에 쓸 수 있게 엮는 준비단계가 상당히 번거롭습니다. 동물병원의 주소를 Geocoding하여 좌표로 바꾸고, 그 좌표를 서울시 지도 파일에 맞춰 데카르트 좌표(Cartesian)로 변환하여 컴퓨터가 동별 동물병원수를 측정할 수 있게 만들어야 하죠. 인구수, 집값, 면적 등 다른 변수들도 마찬가지 작업을 거쳐야 합니다.
‘208개동이면 수작업으로 입력해도 되지 않느냐’는 생각을 하실 수도 있지만, 역학 분석에는 수백, 수천만개의 데이터를 다루는 일이 허다합니다. 이를 수식화해 코딩하는 역학 연구자들이 Data Scientist로 불리는 이유이기도 하죠.
결과
대한수의사회 홈페이지에 따르면 서울 시내에는 총 925개의 동물병원이 있습니다. 그림 1은 서울시 동별 동물병원 수를 도식화한 것입니다.
208개 중, 34개 동에서 동물병원이 전혀 없는 것으로 나타났습니다. 동물병원이 가장 많은 곳은 송파구 잠실동과 강서구 화곡동으로 각각 19개소였습니다. 동당 평균 동물병원수는 3.8개네요.
다음으로 인구수를 그림 2에 도식화 하였습니다. 2016년 1분기 주민등록인구 기준입니다. 동별 평균 인구수는 49,282.6명으로 중구 을지로동(1,868명)이 최소인구를, 관악구 신림동(272,908명)이 최다인구를 기록했네요.
마지막으로 평균 집값입니다. 집값도 인구수와 마찬가지로 2016년 1분기의 자료를 이용했습니다.
아파트 매매 거래의 1㎡당 평균 가격을 대표값으로 적용했습니다. 2016년 1분기에 아파트 매매 거래가 없었던 동은 2014년도부터 2015년 사이 거래 가격의 평균을 활용했습니다. 이마저도 없으면 속해 있는 구의 평균가격을 적용하였습니다. 평균 집값의 분포는 그림 3에 나타나 있습니다.
이제 위의 데이터들을 모델에 넣고 돌린 결과를 공개하겠습니다. 통계 및 수학적인 내용들을 최대한 배제한 결과가 아래 표1과 같습니다.
이를 있는 그대로 해석하면,
라는 뜻입니다. 인구수와 집값 변수 모두 동별 동물병원의 수와 통계적으로 유의한 관계를 가진다는 결과인데요, 이 해석을 역학 전공자가 아닌 수의사분들께 쉽게 설명할 방법이 떠오르지 않네요. 일단 그렇다는 것만 알고 원래 질문으로 돌아갑시다.
이 모델이 ‘서울의 어느 지역에 동물병원이 더 많고, 어디는 더 적은지’ 알려줄 수 있을까요? 네, 그렇습니다. 그 답을 아래 그림 4에서 확인해봅시다.
본격적으로 그림4를 살펴보기 전에 먼저 짚고 넘어가야 할 점이 있습니다. 모델은 현실을 최대한 간단하게 재현할 뿐 모델링의 결과와 현실이 100% 일치할 수는 없다는 것입니다.
따라서 우리는 모델이 얼마나 제대로 현실을 설명했는지 알아보기 위해, 모델이 예측한 값(Predicted or fitted value)과 실제 측정값 사이의 차이(Residual)를 이용합니다. 그 차이가 ‘특정 범위’ 안에서 랜덤하게 분포한다면, 그 모델은 현실을 잘 설명한다고 볼 수 있거든요.
여기서 말하는 ‘특정 범위’란 표준화된 차이(Standardised residual)를 기준으로 -2부터 2 사이입니다. 만약 어느 측정값과 예측값의 차이가 -2보다 작거나 2보다 크다면, 해당 측정값이 모델에 의해 설명될 수 있는 범위 밖에 있다(Outlier)는 뜻입니다.
좀더 쉽게 풀어보겠습니다. 서울시내 특정 행정동에서 모델이 예측한 동물병원 수와 실제 동물병원 수의 차이값이 2보다 크다면? 이는 해당 동의 대지면적과 인구수, 거주자의 평균 소득수준(집값)을 고려했을 때 예상되는 동물병원 수보다 더 많은 동물병원이 위치한다는 뜻입니다. 즉 적정 숫자 이상의 동물병원이 몰려 있다는 겁니다.
반대로 그 차이가 -2보다 작다면 대지면적과 인구수, 소득수준을 고려했을 때 적정한 숫자에 비해 동물병원이 아직 적다는 의미가 됩니다.
그럼 이제 그림 4를 살펴봅시다. 그림 4에서 하얗게 나온 동은 표준화된 차이값이 -2보다 낮은 곳이고 짙은 빨강색으로 나온 곳이 2보다 큰 곳입니다.
차이값이 -2보다 낮은 곳은 2개 동으로, 성북구 평창동과 강남구 개포동이었습니다.
차이값이 2보다 크게 나온 동은 11 곳으로 강동구 성내동, 도봉구 방학동, 서초구 방배동, 양천구 목동, 광진구 자양동, 송파구 송파동 및 삼전동, 노원구 중계동, 강남구 논현동, 강동구 명일동, 마포구 서교동이었습니다.
위 13개 행정동에서의 동물병원 수 측정값과 모델 예측값이 아래 표 2 에 정리되어 있습니다.
고찰
제 모델이 맞는 것 같으신가요? 다시 한 번 말씀드리지만 저는 임상수의사도 아니고 인터넷커뮤니티 [대한민국수의사(DVM)]에도 가입하지 않았기 때문에 서울 어느 동이 체감상 동물병원이 많고 적은지에 대한 정보를 접할 일이 없습니다.
서울에서 근무하시는 어느 수의사분들에게는 제 모델의 결과가 순 엉터리일 수 있고, 몇몇 분들은 고개를 끄덕이실 수도 있다고 생각합니다. 물론 이 모델이 갖는 한계점도 있습니다.
첫 번째 가능성은 기초 데이터 오류입니다. 가령 대한수의사회 홈페이지에서 얻은 동물병원 목록이 현재의 동물병원 현황과 큰 차이가 있다면, 모델의 결과가 현실과 더 차이를 보이겠지요.
다만, 대수 홈페이지 목록과 실제 현황 사이에 차이가 있더라도 그 양상이 어떠한가에 따라 모델에 미치는 영향이 다릅니다.
가령 모든 오차가 한 행정동에 몰려있다고 해봅시다. 그럼 모델이 잘못된 결과를 냈을 가능성이 높습니다.
하지만 오차가 서울시내 전 지역에 고루 분포한다면 어떨까요? 숫자적인 차이는 있더라도 동물병원이 동별로 어떻게 분포하는지의 양상은 비슷할 겁니다. 앞서 보여드린 그림1(서울시 208개 행정동별 동물병원 분포)의 색깔분포는 그대로 유지된다는 이야기죠. 그렇다면 그 차이가 모델의 정확도(Accuracy)에 미치는 영향은 비교적 미약할 겁니다.
두 번째는 통계 기술적인 문제입니다. 통계분석은 기본적으로 ‘모든 관측값들이 서로 영향을 미치지 않는다(Independent)’는 가정에서 출발합니다. 하지만 이 글에서 다룬 것과 같은 지역 관련 데이터는 관측값끼리 영향을 주기 쉽습니다.
A동이 인구도 많고 집값도 높다면, 그 영향은 A동 안에만 국한되지 않고 인접한 지역에까지 미치겠지요. 때문에 A동이나 바로 옆 동이나 동물병원 수의 관측값은 유사한 양상을 보이기 마련입니다.
원래는 이러한 의존성(Dependency)을 보정하기 위해 특별한 장치를 추가해야 하지만, 분석과정이 너무 복잡해져서 이 글에서는 생략했습니다.
또 다른 문제는 주변효과(Edge effect)입니다. 가령 서울시 외곽에 자리한 B동의 동물병원 개원은 인접한 경기도 C시의 인구나 집값에 영향을 받겠죠. 하지만 이 모델은 서울의 데이터만 활용했기 때문에 주변효과를 보정하지 못했습니다.
마지막으로 가장 중요한 점은 이 모델에 사용된 전체 동물병원 수가 서울시내에 위치해야 할 적정 동물병원의 수가 아닐 수 있다는 것입니다.
이 글 도입부에 ‘기대값’ 개념을 설명하면서 서울시내 적정 동물병원수를 100개로 가정했던 것을 기억하시나요? 만약 현재 서울시내 동물병원 숫자(925개)가 적정수준을 너머 이미 절대적인 과포화상태에 이른 것이라면 모델의 해석이 달라져야 합니다.
모델 상 동물병원수가 적다고 나타난 2개동이라 하더라도 “동물병원 수가 적정 수 이하다”라는 뜻이 아니라 “아직 과포화상태에 미치지 않았다”고 해석해야 한다는 것이지요. 과포화되진 않았더라도 적정수준은 한참 넘어섰을 수 있으니까요. 반면 위에서 표준화된 차이값이 2보다 컸던 11개동은 ‘굉장히’ 과포화된 곳으로 볼 수 있겠습니다.
참고로 서울시의 현재 동물병원 수가 절대적으로 포화인지, 적정한 동물병원 숫자가 과연 어느 정도인지를 알아보기 위해서는 다른 변수들이 필요합니다. 가령 동물병원별 적정 고객 수나 병원의 타입(e.g 1차, 1.5차, 2차 등)과 같은 지표가 필요하겠네요.
‘위와 같은 한계점들 때문에 이 모델이 전혀 엉뚱한 결과를 낸 것이냐’라고 물으신다면 저는 그래도 그렇지는 않다고 대답하겠습니다. 이 정도의 데이터 설명능력을 갖는 모델이면 제가 지금껏 만들어본 Poisson distribution 관련 모델 중에서는 제법 괜찮은 편에 속하니까요. 제가 설정한 가정도 다 통계적으로 유의했고, 모델링의 미덕이라 할 수 있는 심플함까지 갖췄습니다.
마치며
사실 제가 이 글을 통해 전달하고자 하는 궁극적인 메시지는 어디의 동물병원이 많고 적다가 아닙니다.
지난 몇 년간 데일리벳을 통해 국내 임상수의학이 조금씩 발전하는 모습을 보았습니다. 제가 아무리 Epidemiologist라고 해도, 결국 수의학의 큰 줄기는 예나 지금이나 그리고 앞으로도 임상이어야 한다고 굳게 믿고 있습니다.
하지만 수의 임상이 발전하기 위해서는 역학이 함께해야 합니다. 이 글은 서울의 동물병원 수를 다뤘지만 ‘서울소재 반려견의 특정 질병 분포도’라면 어떨까요? 아니면 동물병원 노령화질병 케이스 수를 분석해 국내 반려동물의 노령화질병 트렌드나 노령화로의 전환속도를 언급한 글이라던지요?
저희는 통계와 수학, 수의학적 지식을 밑거름 삼아 동물 집단과 관련된 현상을 분석하고 미래를 예측하는 사람들입니다. 역학은 FMD나 HPAI 와 같은 산업동물 질병에 국한된 학문이 아닙니다. 역학적 분석을 통해 임상과 관련한 풍부한 자료를 만들어야 반려동물 임상이 더욱 발전할 수 있습니다.
갑자기 역학의 중요성을 강조하는 글이 되어서 살짝 민망하긴 합니다만, 기왕 이렇게 된 거 ‘국내 수의 시장의 발전을 위해 역학이 중요하다’는 점을 임상 일선에 계시더라도 가끔씩 기억해주시면 감사하겠습니다. 긴 글 읽어주신 분들께 감사의 말씀을 전하며 이만 마치겠습니다. 감사합니다.
PS. 모델을 더 완성시키기 위해서 일선에 계시는 임상수의사분들이 생각하시기에 더 좋은 변수나 가정이 있다면 댓글로 제안해주시면 감사하겠습니다. 관련 데이터를 구할 수 있다면, 변수를 추가하여 모델을 돌려보겠습니다. 그리고 중간에 영어만으로 설명을 넣은 부분들에 대해서는 정말 죄송스럽게 생각합니다. 하지만 제 능력으로는 전문 통계 용어들을 도저히 우리말로 간단히 설명해 낼 수가 없었습니다