결측치는 그냥 0으로 채우면 되는 거 아닌가요? (Why Not to Use Zero Imputation?)

결측치는 그냥 0으로 채우면 되는 거 아닌가요? (Why Not to Use Zero Imputation?)

결측치, 그냥 0 넣으면 안 되나요?

머신러닝을 하다 보면 피할 수 없는 손님이 하나 있습니다. 바로 결측치입니다. 어떤 사용자는 나이를 입력 안 했고, 어떤 센서는 값을 못 읽었고, 어떤 피처는 애초에 절반이 비어 있습니다. 이럴 때 제일 만만한 해법은 뭘까요? “그냥 0 넣지 뭐”입니다. 실제로 딥러닝 실무에서 가장 널리 쓰이는 방법이기도 하고요.

그런데 저희가 이 논문(ICLR 2020)에서 밝힌 사실은, 이 아무 생각 없는 0 채우기(zero imputation)가 신경망을 은근히, 그리고 꽤 심각하게 망가뜨린다는 것이었습니다.

신경망은 왜 0을 싫어할까 — Variable Sparsity Problem

문제의 핵심은 이겁니다. 어떤 입력 벡터에 결측치가 많으면(=0이 많으면) 그 벡터는 원점(0벡터)에 가까워집니다. 신경망은 선형 변환과 활성화 함수를 겹겹이 쌓은 함수이기 때문에, 입력이 원점에 가까워질수록 출력도 (레이어를 아무리 깊게 쌓아도) 특정 지점으로 쏠리는 경향이 생깁니다.

즉, 똑같은 정보량을 가진 두 샘플이라도 결측치 비율(sparsity)이 다르면 모델의 출력이 그 비율 때문에 체계적으로 달라져 버립니다. 저희는 이 현상에 이름을 붙였습니다 — 가변 희소성 문제 (Variable Sparsity Problem, VSP). 모델이 “이 사람이 어떤 사람인가”를 보고 예측해야 하는데, 실제로는 “이 사람의 입력값 중 몇 퍼센트가 비어 있는가”에 예측이 오염되는 겁니다. 데이터 자체의 신호가 아니라 결측치의 양이 노이즈처럼 예측에 섞여 들어가는 셈이죠.

이론적으로 저희는 이 편향(bias)이 왜, 그리고 얼마나 발생하는지를 수식으로 증명했습니다. 그냥 “감으로 보니 안 좋더라”가 아니라, 신경망 레이어를 통과할 때 입력의 희소성이 출력 분포를 어떻게 왜곡시키는지를 직접 유도한 것이 이 논문의 이론적 기여입니다.

해법은 허무할 정도로 간단합니다 — Sparsity Normalization

그럼 답은 뭘까요? 놀랍게도 아주 거창한 새 아키텍처가 아니라, 입력값에 살짝 손을 대는 정규화 기법 하나였습니다. 이름하여 Sparsity Normalization (SN).

핵심 아이디어는 단순합니다. VSP가 “결측치 비율에 따라 출력이 체계적으로 쏠리는” 문제라면, 애초에 입력 단계에서 그 희소성의 영향을 상쇄시켜주면 됩니다. SN은 각 샘플의 결측치 비율(=희소성 정도)을 계산해서, 그 정보를 이용해 입력값의 스케일을 보정합니다. 결과적으로 모델은 “이 값이 왜 0인지”(진짜 0인지, 원래 없어서 0인지) 헷갈리지 않게 되고, 결측치 비율이 서로 다른 샘플들 사이에서도 출력이 공정하게 나오도록 편향을 제거해줍니다.

기존에 흔히 쓰이던 Batch Normalization이나 Layer Normalization은 이 문제를 해결해주지 못합니다. 이들은 “피처의 분포”를 정규화할 뿐, “샘플마다 다른 결측 비율” 자체를 교정해주는 장치가 없기 때문입니다. SN은 정확히 이 빈틈을 겨냥한 정규화입니다.

그래서 얼마나 좋아졌나요?

다양한 벤치마크에서 실험한 결과, SN을 적용하면 (1) 예측 성능이 향상되고 (2) 학습 과정 자체가 더 안정적으로 수렴한다는 것을 확인했습니다. 특히 결측치 비율의 편차가 큰 데이터셋일수록 효과가 두드러졌습니다. 화려한 트릭 없이, “왜 문제가 생기는지”를 정확히 짚어내고 그 원인만 정밀하게 제거한 결과였습니다.

이 연구는 이후 KAIST 기계학습 연구실 세미나에서 발표한 토크로도 정리해두었으니, 슬라이드로 더 편하게 보고 싶으시다면 함께 참고하시면 좋습니다. 논문 원문은 위 카드를 클릭하면 arXiv에서 바로 확인하실 수 있습니다.