ML에서 누락된 데이터를 다루기

2025. 12. 25. 19:30Computer Science/AI(ML, DL, RL, etc)

실제 데이터를 만지다 보면, 뜬금 없는 이유로 샘플에 값이 텅텅 비어 있는 경우가 있습니다. 아니면 인풋으로 1000Row를 고정해 놨는데, 정작 찍힌건 973개 밖에 없다거나 하는 식으로요...(하필 시계열 데이터여서 이걸 어떻게 해야되나 심각하게 고민했었던 기억이 있네요.) 해서 빌어먹을 누락 데이터를 어떻게 다뤄야 할지 논의좀 해보겠습니다.

 


일반적으로 누락된 값은 NaN(Not a Number)나 NULL과 같은 값을 사용합니다. 물론 샘플에 이게 박혀 있으면 끔찍하기 따로 없죠. 그래서 방법은 여러가지가 있는데, 일단 무식하게

 

1. 누락값 샘플 숙청

누락 데이터를 다루는 가장 쉬운 방법입니다. df.dropna와 같은 메서드를 사용하여 쉽게 누락값이 있는 행/열(axix=0/1)을 숙청할 수 있습니다.

soviet.dropna(axis=1)

 

물론 누락값이 다수인 경우에는, 안정적인 분석이 불가능 할 수 있습니다. 당장 누락값을 처리하겠다고 대숙청을 단행한 스탈린이 나중에 수술할 의사가 없어(...) 뇌졸중으로 간 현실 사례처럼, 중요한 정보를 잃을 위험이 있습니다.

 

2. 보간(Interpolation)

 

Ref : Fritz ai, About frame interpolation

보간(Interpolation)은 다른 데이터를 참고해서 결측값을 대체하는 것을 말합니다. 가장 흔한 예시로는 mean/median/most_frequent가 있겠습니다. mean/median은 numerical data를 다룰때, most_frequent는 범주형 특성 값을 대체할 때 상당히 유용합니다. 이는 df.fillna()메서드를 이용해서 쉽게 대체할 수 있읍니다.

 

3. Scikit learn API

Ref : Scikit-learn official documentation

우리의 위대한 Scikit-learn은 API를 제공합니다. SimpleImputer가 대표적으로, 이는 변환기(Transformer, Attention나오는 그 Transformer 아님)의 일부입니다. 자고로 Scikit-learn에는 Estimator(추정기)가 있습니다. 그리고 이 Estimator는 용도에 따라 Predictor/Transformer로 나뉘게 됩니다.

 

여튼 추정기(estimator)를 이용해서 결측값을 땜빵하는 방법도 있겠습니다. fit 메서드로 학습을 돌리고 , predict/transform을 사용하여 결측값에 대한 데이터 예측을 만들어 냅니다. 문제는 이 얘기는 하려면 여러 페이지에 걸쳐서 논해야 하는 관계로, 나중에... 하도록 합시다. 참고로 보통 estimator들은 predict/transform 둘중에 하나만 가지는데, 간혹가다 혼종도 있습니다.