지난 DBR 235호와 238호를 통해 필자는 오차항에서 비롯되는 두 가지의 중요한 편의(bias)인 누락변수 편의(omitted variable bias)와 선택편의(selection bias)에 대해서 설명했다. 이 두 가지만 제대로 이해하고 있어도 기업실무에서 계량분석 결과물을 받아볼 때에 리뷰어(reviewer)로서 상당한 민감성(sensitivity)을 지닐 수 있다. 즉 잘못된 분석의 오류를 더 잘 발견해낼 수 있다. 이번 글에서는 데이터 분석 과정에서 매우 흔히 마주하게 되는 실질적인 이슈에 대해 다루어보려 한다.
계량 데이터 분석의 첫 번째 과정에서 가장 중요한 것은 가용(可用) 데이터의 크기와 질이다. 양적인 측면에서 수집된 표본 자체의 크기(The number of observations)가 커야 하고, 질적인 측면에서 다양한 변수들을 통해 포괄적인 정보를 제공할 수 있어야 하며, 동시에 데이터의 마모(attrition)가 적어야 한다. 이때 데이터의 마모란 쉽게 말해 데이터 일부를 불가피하게 ‘버려야 하는 상황’을 의미하는데 이는 흔히 두 가지 유형의 문제에서 비롯된다. 첫째, 데이터가 잘못 입력돼 있거나(coding error, 가령, 나이가 999세로 입력돼 있는 등의 상황), 둘째, 일부 데이터가 아예 관측이 되지 않은 경우다. 이 중 두 번째 경우를 흔히 ‘결측치(缺測, missing values) 문제’ 혹은 ‘무응답(non-response) 문제’라고 한다. 통상적으로 현업에서 다루는 대부분의 데이터는 크든 작든 결측치 문제를 지니고 있게 마련이다. 엑셀의 모든 셀이 빈칸 없이 가지런하고 보기 좋게 잘 채워져 있는 경우는 그야말로 매우 드물지 않은가.
하지만 아주 중요한 변수에 대해서 상당한 양의 결측치가 관찰된다면 우리는 이에 매우 민감하게 대응해야 할 필요가 있다. 가장 간단하면서도 쉬운 방법은 결측치들을 모두 배제하고 분석을 강행하는 것이다. 하지만 이는 가장 쉬운 방법임과 동시에 매우 위험한 접근법이다. 보다 쉬운 이해를 위해 다음과 같은 상황을 상정해보자.
사례
세계적인 보험회사 A는 자사 보험 상품의 가격정책 재수립을 위해 5000여 명에 달하는 잠재 고객들을 대상으로 대규모 설문조사를 실시했다. 보험 소비자의 의료비 지출수준에 통계적으로 유의미한 영향을 미치는 주요 변수들을 파악한 후, 고객의 유형을 세분화해 유형별로 최적화된 가격정책을 수립하고자 하는 것이 분석의 목적이었다. 비슷한 성격의 선행분석 결과물을 감안했을 때 나이와 임금 수준 등은 매우 중요한 변수일 것으로 생각됐으나 전체 조사 대상의 20%가 나이에 대해서 응답하지 않았고 40%가 임금 수준에 대해서 응답하지 않았다.1
이러한 상황에서 보험회사 A가 결측치들을 모두 단순 배제하고 분석을 강행한다면 일단 표본의 크기가 심각하게 줄어드는 문제점이 발생한다. 이는 중요한 변수가 결측치일 경우, 해당 표본(응답자 i) 자체가 분석대상 샘플에서 아예 사라지는 ‘목록삭제(listwise deletion)’2
에 의한 결과인데 통상적인 통계 분석 패키지들은 ‘listwise deletion’을 기본 옵션으로 삼고 있기 때문에 주의가 필요하다. 이렇게 표본의 크기가 줄어들면 실제로는 중요한 변수가 마치 중요하지 않은 것처럼 보이는 2종의 오류(Type-II error) 발생 가능성이 높아진다는 점에서 계량 분석의 근본 목적 자체가 위협받게 된다.
더 큰 문제는 결측이 뭔가의 패턴에 의해서 ‘체계적’으로 나타날 때 발생한다. 계량경제학자들은 이를 ‘missing not at random(MNAR)’이라고 부른다. 계량분석에서 ‘체계적’이라는 표현은 통상적으로 ‘이면에 뭔가의 규칙이 존재한다’는 것을 뜻하는데 ‘무작위(random)’와 대척점에 있는 개념이라고 생각하면 이해가 쉽다. 뭔가 규칙이 존재하는데 그 규칙을 우리가 파악할 수 있을 경우 이 규칙을 모델에 포함하면 통제가 가능하므로 문제가 되지 않는다. 하지만 이면에 무작위가 아닌 체계적 규칙이 존재하는데 우리가 그 규칙을 모르는 경우 많은 문제점이 수반된다. 결측치에 의한 문제 역시 마찬가지다. 결측이 무작위로 발생했다면 (missing at random, MAR) 결측치를 단순히 배제하더라도 표본 손실 이상의 문제는 발생하지 않는다. 하지만 결측이 뭔가의 체계적 규칙에 의해 발생했다면 이를 단순 배제할 경우 살아남은 표본이 전체를 공정하게 대표하지 못하게 되므로 분석 결과가 심각한 오류를 피하기 어려워진다.
보험회사 A 사례를 바탕으로 생각해보자. 전체 조사대상의 40%에 달하는 소비자가 임금 수준에 대해서 응답하지 않았다. 이들의 무응답에 뭔가의 규칙이 존재하지는 않을지 반드시 따져봐야 한다. 통상적으로 임금 수준이 아주 낮거나, 반대로 아주 높은 경우 이를 묻는 질문에 응답하지 않는 경향이 있다. 즉, 결측이 무작위가 아니라는 얘기다. 이 경우, 결측치들을 단순히 배제하고 분석을 진행할 경우 살아남은 표본들은 아주 낮은 임금 수준을 가진 응답자들과 아주 높은 임금 수준을 가진 응답자들을 체계적으로 배제시킴으로써 모집단을 대표하지 못하는 심각한 문제를 지니게 된다.
그렇다면 결측치들을 어떻게 처리해야 분석에 수반되는 편의(Bias)를 최소화할 수 있을까. 계량분석 이론과 계산과학 기술의 발달로 다양한 테크닉들이 개발돼 왔지만 가장 널리 쓰이는 방식은 크게 두 가지로 정리할 수 있다. 하나는 다양한 정보를 활용해 결측값들을 추정해내는 결측치 대체(imputation)라는 기법이고
3
다른 하나는 결측치들을 그냥 그대로 남겨둔 채 분석에 포함하는 기법이다. 즉, 전자는 주어진 정보를 기반으로 엑셀의 빈칸을 채워 넣어 분석에 포함히는 것이고 후자는 빈칸은 그냥 빈칸으로 남겨둔 채 분석에 포함하는 것이라고 생각하면 이해가 쉽다. 통상적으로 전자가 보다 세련된 고급 테크닉이라고 생각하는 사람들이 많지만 결측치 대체 기법은 충분한 이론적 이해 없이 잘못 사용할 경우 부작용
4
이 크므로 필자는 통상적으로 기업 실무진에게는 매우 간단한 후자의 방법을 우선적으로 추천한다. 구체적인 적용 방법은 다음과 같다.
첫째, 어떤 변수들에 얼마나 결측이 존재하는지 파악한다. 이때 중요한 것은 ‘0’과 ‘Missing’을 구분하는 것이다. ‘0’은 말 그대로 관측이 됐으나 그 값이 0이라는 뜻이고 ‘Missing’은 관측 자체가 되지 않았다는 것을 의미하므로 이 둘은 전혀 별개의 개념이다. 결측은 통상적으로 ‘.’으로 입력돼야 한다.둘째, 필요하다면 결측이 무작위로 이뤄졌는지 검사를 수행해 볼 수 있다. 대표적인 검사기법으로는 Little이 제안한 방법(Testing the assumption of missing completely at random)5
이 있다. 나이 및 임금 수준처럼 통상적으로 결측이 무작위로 발생하는 것이 아니라고 생각되는 경우 검사를 건너뛰어도 무방하다.셋째, 결측치들을 ‘Missing’이라는 하나의 카테고리로 묶는다. 즉, 임금 수준 Missing, 나이 Missing 등의 더미변수(Dummy variable, 결측치일 경우 1로, 제대로 관측이 된 경우 0으로 입력)를 만들어 이들을 또 다른 독립변수로 삼아 모델에 포함시키는 것이다.위의 방법을 적용해 보험회사 A의 분석모델을 모델 1에서 모델 2로 아래와 같이 확장시키면 결측치들을 버리지 않아도 된다.
MedicalExpenditureⅰ= β0+β₁Wageⅰ+β₃Ageⅰ+...모델 1: 결측치들을 일괄적으로 배제시키는 모델MedicalExpenditureⅰ= β0+[β₁Wageⅰ+ β₂Wage Missingⅰ]+[β₃Ageⅰ+β₄ Age Missingⅰ]+...모델 2: Missing 카테고리를 통해 결측치들을 분석에 포함시키는 확장 모델 이때 임금 수준과 나이가 결측되지 않고 제대로 관측됐을 경우, β₁Wage와 β₃Age에 의해서 종속변수(y)인 의료비 지출 수준에 미치는 영향이 추정되는 반면, 임금 수준과 나이가 결측됐을 경우 (즉 임금 수준과 나이에 대해서 제대로 응답하지 않은 응답자 i) β₂Wage Missing과 β₃ Age Missing에 의해서 그 영향이 통제된다. 매우 간단한 방법이지만 이를 통해 결측으로 인한 데이터 손실을 줄일 수 있기 때문에 기업 실무에서 활용가치가 크다. 물론 위의 모델에서 β₂와 β₄에 대해 유의미한 통계적 해석이 가능한지의 문제는 데이터 애널리스트가 개별적인 맥락을 고려해 다시 따져봐야 할 사항이다.
필자는 평소 기업에서 데이터 애널리스트의 역할은 병원에서 진단전문의(diagnostician)의 역할과 흡사하다고 생각해왔다. 필자가 거주하고 있는 이곳 독일에서는 병상(病狀)이 있으면 일단 주치의(hausarzt)를 방문하고, 주치의는 통상 진단전문의에게 환자를 보낸다. 그리고 진단전문의가 필요한 검사를 통해 정확한 진단을 내린 후에야 적절한 처치를 수행할 수 있는 의사에게 환자를 다시 보내는 식이다. 데이터 애널리스트의 역할도 이와 같다. 질병의 종류가 많아지고 세분화됨에 따라 진단전문의의 역할이 더욱 강조되고 있는 것과 마찬가지로, 데이터의 크기가 늘어나고 그 유형의 복잡성이 커지면서 숙련된 데이터 애널리스트의 중요성 역시 크게 부각되고 있다. 기대되는 역할의 중요성이 커졌다는 얘기는 바꾸어 말하면 작은 실수도 큰 위험을 초래할 수 있다는 뜻이다. 진단전문의가 오진을 내리거나 데이터 애널리스트가 분석 오류를 범한다면 그로 인해 초래되는 위험성은 상상을 초월할 수 있다.
아무리 숙련된 데이터 애널리스트라도 추리통계에 기반한 추정(estimation) 작업의 근원적 특성상 분석 오류로부터 완전히 자유로울 수는 없다. 그렇기 때문에 계량 데이터 분석은 그 과정을 수행하는 사람은 물론이거니와 그 결과물을 받아보는 사람 역시 오류에 대한 민감성을 지니고 ‘철저하게 의심하고 질문하는 습관’을 가졌을 때 비로소 비교적 안전하게 수행될 수 있다. 이 글을 통해 독자들이 “결측치들을 어떻게 처리했는가”라는 질문을 날카롭게 던질 수 있기를 바란다.
신선호 롤랜드버거 시니어 컨설턴트 [email protected] 필자는 서울예고를 차석으로 졸업(피아노 전공)하고 한국고등교육재단의 대학특별장학생으로 서울대를 우등 졸업(경제학 전공)했다. 독일 함부르크의 에어버스(Airbus)와 모니터그룹을 거쳐 독일 뮌헨에 본사를 둔 유럽 최대의 전략 컨설팅 업체인 롤랜드버거에 재직 중이며 현재 독일 연방정부의 국비 장학생으로 프랑크푸르트대에서 강의와 연구를 병행하고 있다. 세부 전공 분야는 계량분석(Quantitative analysis)으로 그동안 정책 효과 분석, 수요 예측, 시장 세분화 등 퀀트 기반의 다양한 프로젝트를 수행해왔다.