3. Data imputation

데이터 정제하기 - 결측치 처리

3.1. Background of Missing Value

(결측치가 무엇인지 우리가 수집한 데이터를 통해서 설명)

이전 포스팅에서 수집한 데이터의 경우 결측치가 발생할 가능성이 매우 높다. 그 이유는 다양한 국가 거래소에 상장되어 있는 지수와 종목들을 수집하였기 때문이다. 대표적으로 한국과 미국 거래소에서 수집된 종목들을 예로 들 수 있다. 22년 9월 12일의 경우 추석 대체 공휴일로 인해 국내는 휴장하였으나 미국은 장이 운영되었다. 이 경우 코스피 지수는 해당 일자에 결측이 발생하고, 미국의 다우 존스, 나스닥, S&P500은 정상적으로 수집된다.

이러한 결측치는 어떻게 처리하는 것이 가장 효과적일까? 이를 판단하기 위해서는 결측치에 대한 평가를 할 수 있어야 한다. Donald B. Rubin에 따르면 결측치는 크게 3가지로 분류할 수 있다 [1].

  1. MCAR (Missing Completely at Random) : 완전 무작위 결측

  2. MNAR (Missing Not at Random) : 결측치가 특정 의미를 내포하며 그 의미가 결측된 변수를 지칭

  3. MAR (Missing at Random) : 결측치가 특정 의미를 내포하며 그 의미가 데이터 내 다른 변수를 지칭

예를 들어 특정 회사에서 코로나 감염 여부를 예측하기 위해 직원들의 체온을 측정하고, 일주일 내 회식 참석 여부를 조사하였다고 가정하자. 독립변수는 체온, 회식 참석 여부이며 종속변수는 코로나 감염 여부이다. 이 때 체온 변수에 결측이 발생하였다면 위 3가지 가정은 다음의 예로 설명할 수 있다.

각 부서의 데이터를 종합하여 저장하는 와중, 담당자가 실수로 특정 날짜의 데이터를 누락하였다면 이는 MCAR 가정에 해당한다. 이 경우 결측치가 어떠한 의미도 지니고 있지 않기 때문이다. 무작위로 지워진 값이기에 결측이 발생한 샘플들을 분석해도 코로나 감염 여부를 예측하는 데 유의미한 결론을 도출할 수 없을 것이다.

반면 코로나에 걸리거나, 감기에 걸려 고열이 발생한 회사원들이 의도적으로 체온 측정을 기피하였다고 가정하자. 이 경우 체온 변수에 결측이 발생한 샘플은 체온 측정 당시 고열이였을 것이라고 추정할 수 있다. 결측치가 특정 의미를 내포하며(체온 변수의 결측 = 고열) 그 의미가 결측이 발생한 변수(체온)을 지칭하기 때문에 MNAR 가정에 해당한다.

마지막으로 체온 측정을 할 당시에 회식에 참석한 부서가 존재하여 체온 측정을 실시하지 못해 결측이 발생한 경우라면 MAR 가정에 해당한다. 결측치가 특정 의미를 내포하며(체온 변수의 결측 = 회식 참석) 그 의미가 데이터 내 다른 변수(회식 참석 여부)를 지칭하기 때문이다.

(코로나 결측치 3가지 가정 예시, 그림으로 표현)

현명한 분석가들은 이를 염두하여 결측치를 처리한다. 3가지 결측치 가정에 따라 대처해야할 방법이 달라지기 때문이다. 예를 들어 MCAR 가정에 의해 결측치가 존재한다면, 결측치가 어떠한 의미를 갖고 있지 않기에 이를 삭제해도 분석이나 예측에 어떠한 영향을 미치지 않는다.

반면 결측치에 특정 의미가 존재하는 MNAR, MAR 가정의 경우 데이터를 삭제한다면 왜곡된 결론에 도달하거나 분석의 후순위 과정에서 선택의 제약이 생길 수 있다. 가령 체온이 높아 의도적으로 측정을 기피한 샘플들을 모두 제거할 경우 우리가 보유한 데이터에서 코로나 양성 샘플이 모두 제거될 수 있다. 이 경우 우리는 이진 분류(Binary Classification)가 아닌 필연적으로 단항 분류(One-class Classification) 모델을 선택해야만 할 것이다.

따라서 데이터의 도메인 지식에 기반하여 결측치가 어떤 특성을 확인하는지는 매우 중요하며, 만약 도메인 지식이 없다고 한다면 결측이 발생한 샘플들과 그렇지 않은 샘플들의 종속 변수의 분포 확인을 통해 결측치가 예측 대상에 어떤 영향을 끼치는지 확인하는 과정이 필요하다.

그렇다면 우리가 수집한 데이터는 위 3가지 가정 중 어디에 해당할까? 필자가 판단하기로 수집된 데이터는 완전 무작위 결측, MCAR 가정에 해당한다. 먼저 결측치가 발생한 대부분의 경우가 서두에 설명하였듯 거래소 간의 개장 여부 차이가 크다. 이 경우 국가가 전복되어 거래소가 없어진 것이 아닌 이상 결측치는 코스피를 예측함에 있어 그 어떠한 의미를 지니고 있지 않다. 따라서 결측이 발생한 샘플은 삭제해도 무방하며, 추가적인 분석 과정 없이 예측 모델을 통해서 대치를 진행할 수 있다.

3.2. 단순 대치와 다중 대치(Single Imputation & Multiple Imputation)

결측치를 다루는 방법에는 삭제(deletion)와 대치(imputation)가 존재한다. 대부분의 경우 결측치를 보완한다의 의미는 대치(=결측치를 임의의 값으로 대체함)를 뜻하기에 삭제는 핵심적인 내용만 다루도록 하겠다.

삭제란 결측치를 포함하는 샘플을 제거하는 것을 뜻한다. 결측치가 특정 의미를 내포하지 않는 MCAR에 해당하거나 그 비율이 많지 않을 때 사용할 수 있다. 일반적으로 결측 비율이 10%가 넘어가면 삭제는 좋은 선택이 아니다 [2]. 비교적 간단하며 연산 비용(computational cost)에 이점이 있으나, 결측 발생 원인이 MNAR, MAR 가정에 해당한다면 원래 분포를 왜곡할 수 있다는 단점이 존재한다.

대치는 단순 대치(single imputation)와 다중 대치(multiple imputation)로 구분할 수 있다. 이 둘을 구분하는 기준은 결측치의 후보군 개수이다. 만약 결측치를 대체할 수 있는 후보군이 하나라면 단순 대치, 여러개가 존재한다면 다중 대치라고 부른다. 그림 3-2를 통해 쉽게 이해할 수 있다.

일반적으로 단순 대치의 경우 다중 대치에 비해 표준 오차 과소의 문제를 지닌다고 말한다. 이는 무엇이 원본 값인지 불확실한 결측치를 단일 값으로 대체하는 것은 그 추정 값에 대한 과도한 신뢰도를 지닌다는 것을 의미한다. 혹은 무슨 값이 정답인지 모르는데 한 가지 후보만을 제시한다는 것은 대치 값이 실제로는 유의하지 않으나 유의한 것으로 보일 수 있다는 말과 동일하다.

이에 반해 다중 대치의 경우 결측치에 대한 후보군을 여러 개 생성하기 때문에 결측치의 분포 및 최종 대치 값의 신뢰 구간을 추정할 수 있다는 장점이 존재한다. 또한 추정된 분포로부터 최종 대치 값의 발생 확률을 계산할 수 있어 표준 오차 과소 문제로부터 비교적 자유롭다.

그러나 이러한 장점들이 반드시 다중 대치의 성능이 단일 대치의 성능 보다 뛰어남을 의미하는 것은 아니다. 때로는 평균으로 대치 된 데이터 셋이 복잡한 알고리즘으로 대치한 것 보다 원래의 데이터를 잘 근사할 수 있다. 심지어 단순하게 결측 샘플을 제거하는 방법이 가장 우수한 성능을 보이기도 한다. 그렇다면 우리는 어떤 방법으로 결측치를 보완하면 될까?

3.1.에서 설명하였듯, 우리의 데이터는 MCAR 가정에 속하기에 적용 가능한 대치 방법 중에서 최종 예측 성능(코스피 지수 예측)이 가장 우수한 방법을 선택하면 된다. 다만 결측의 수가 많은 독립변수의 경우 후술할 eXplainable Artificial Intelligence (XAI) 기법을 활용한 변수 해석에서 상당한 주의를 요할 가능성(=대치값의 낮은 신뢰성)높아, 독립 변수별 결측 비율에 따라서 대치, 삭제를 적절히 섞어 진행할 것이다.

3.3. 단순 대치 알고리즘

3.3.1. 전일 자 값으로 대치하기 - Forward Filling

시계열 데이터에서 결측이 발생할 경우, 가장 단순하게 결측을 보완할 수 있는 방법은 전일 자 값을 사용하는 것이다. 가령 2014-05-08 일자의 브라질 2년 국채가 수집 되지 않았다면, 2014-05-07 일자의 데이터를 사용하는 것이다. 가장 단순한 대치 방법이지만 이는 사람의 의사 결정 과정과 100% 동일하다. 코드로 구현하면 다음과 같다.

<코드>

3.3.2. 가장 유사한 날짜의 값으로 대치하기 - K-Nearest Neighbors Algorithm (KNN)

현재 결측치가 발생한 날과 시장 상황이 가장 유사한 날짜의 값으로 대치하면 좋지 않을까란 생각이 들 수 있다. 가령 2020년 코스피 급락 시기에는 이와 유사했던 2008년의 데이터를 참고하여 대치를 진행하는 방식이다. 이럴 때 사용 가능한 머신러닝 알고리즘은 최근접이웃, KNN이 존재한다.

(KNN 알고리즘 설명 및 그림 추가)

<코드>

3.3.3. 예측 모델로 대치하기 - Miss Forest [3]

MissForest는 이름에서 유추할 수 있듯, Random Forest 알고리즘의 예측값으로 결측치를 채워 넣는 방법을 말한다. 총 4단계를 거쳐 결측치 보완이 이루어지는데 세부 단계를 살펴보면 다음과 같다.

  • Step1) 임의 대체

결측치를 임의로 대체하는 단계이다. 단순 평균, 최빈값과 같이 통계량을 사용하거나 간단한 다른 대치 방법을 사용한다.

  • Step 2) Random Forest 활용 변수별 결측치 예측

  • Step 3) 위 과정과 같이 결측치가 보완된 데이터를 바탕으로 동일한 과정 진행

결측이 채워진 데이터(Step 2 이후)를 사용하여 변수별 결측치 예측을 다시 진행한다. Step 3에서의 Random Forest 예측값은 Step 2와는 다른 값이 될 것이다. 학습에 사용된 데이터 중 결측치의 값이 변경되었기 때문이다(Step 1 - 평균, Step 2 - 평균을 바탕으로한 Random Forest 예측값). 그림으로 표기하면 그림 3-5와 같으며 결측치의 값이 Step 2와는 다른 것을 확인할 수 있다.

  • Step 4) 종료 조건을 만족할 때까지 Step 3 반복

Step 3의 과정은 종료 조건을 만족할 때까지 반복된다. 여기서 종료 조건이라 함은 1. 사용자가 지정한 반복 횟수 도달, 혹은 2. 결측 대체 값의 변화량이 일정 기준점 이하로 수렴할 때를 말한다. 그림 3-6은 후자의 종료 조건을 만족할 때까지 반복하는 경우이다.

종료 조건을 만족하여 대치가 완료된 데이터(Imputed Data)가 MissForest의 최종 결과이다. 각 결측치에 대해서 대체 후보군이 1개씩 존재하기 때문에 Single Imputation에 해당한다.

MissForest 알고리즘은 missingpy 라이브러리에 존재한다. 따라서 CMD 창에서 이를 설치해준다.

(CMD창 사진)

설치가 완료 되었으면 다음과 같이 MissForest를 활용한 대치를 진행할 수 있다.

<코드>

3.4. 다중 대치 알고리즘

3.4.1. MICE Imputation

3.4.2. Amelia Imputation

3.4.3. MIDA Imputation

3.5. 이동 예측을 위한 결측치 대치 프로세스

(정확한 성능 검증을 위해선 미래 값을 사용해선 안된다). ~해야 한다. 이를 이동 예측(Rolling Forecasting) 방식이라고 한다.

Reference

[1] Rubin, D. B. (1976). Inferce and missing data. Biometrika, 63(3), 581-592.

[2] Hair, J. F., Black, W. C., Babin , B. J., Anderson, R. E., & Tatham, R. L. (2006). Multivariate data analysis (6 th ed.). pp. 49 73. Upper Saddle River, NJ: Pearson Educations, Inc.

[3] Stekhoven, D. J., & Bühlmann, P. (2012). MissForest—non-parametric missing value imputation for mixed-type data. Bioinformatics, 28(1), 112-118.

Last updated