본문 바로가기
AI 공부

결측치 채우는 방법

by AI Sonny 2022. 11. 24.
728x90

결측치의 종류

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

 

결측치가 다른 변수들과 아무런 상관이 없는 경우를 말한다.

 

보통 대부분의 결측치 처리 패키지가 MCAR을 가정하고 있다.

 

결측치가 존재할 때 결측치가 존재하는 데이터를 삭제하거나

 

결측치가 속해있는 원본 대규모 데이터셋에서 단순무작위표본추출로 대체한다.

 

예를 들면, 데이터를 입력하는 사람이 깜빡하고 특정 항목의 데이터를 입력하지 않았다거나

 

전산 오류로 인한 누락 등이 대표적인 경우에 해당한다.

 

2. MAR(Missing At Random) : 무작위 결측

 

누락된 자료가 특정 변수와 연관되어 발생하지만 변수의 결과와는 관계가 없는 경우를 말한다.

 

결측치가 전체 정보를 갖고 있는 변수에 의해 설명이 가능하다. 

 

예를 들면, "남성이 우울증 설문조사를 기입 확률은

 

낮지만 우울함의 정도와는 상관이 없을 때"와 같은 예시를 들 수 있다.

 

3. MNAR(Missing Not At Random) : 비무작위 결측

 

1,2번 이외의 경우를 말하며 결측치의 값이 다른 변수와 연관이 있는 경우를 말한다.

 


결측치를 채우는 방법

 

1. 행 또는 열 삭제 : 가장 단순한 방식이다. 결측치가 존재하는 행 또는 열(feature)을 삭제하는 방식이다.

 

2. 중앙값, 평균값으로 대체 : 빈 결측치에 해당하는 Feature의 평균값이나 중앙값으로 대체한다.

 

3. 최빈값으로 대체 : 하지만 이 방법은 주로 Nominal feature(범주형 feature)일 때가 그나마 용이하다.

 

4. XGboost나 LightGBM의 use_missing=False 인자를 첨가하면 알고리즘이 알아서 Training loss에 기반해 결측치를 채우게 된다. 

 

5. K-NN알고리즘을 사용 : 결측치의 값을 가장 가까운 즉, feature similarity를 적용하면서 대체한다. 하지만 이상치(outlier)에 민감하다는 단점이 존재한다.

 

6. MICE(Multivariate Imputation by Chained Equation) : 결측치를 한 번 대체하는 게 아니라 여러번(multi) 대체해보면서 결측치의 불확실성(uncertainty)을 체크하면서 결측치를 대체한다. 이는 이산, 연속 변수에도 flexible하게 사용되는 장점이 있다.

 

7. 딥러닝 이용 : XGboost나 LightGBM 처럼 알아서 결측치를 채워주고, Categorical feature에 유용하며 다른 방법들에 비해 꽤 정확하다. 하지만 딥러닝을 사용하다보니 대용량의 데이터에는 속도가 느리다. 또한 만약 결측치가 존재하는 feature가 여러개라면 여러개를 동시에 적용은 못하고, 하나씩만 impute할 수 있다. 또한 결측치가 존재하는 칼럼들의 정보를 갖고 있는 다른 칼럼들을 사용자가 직접 지정해주어야 한다는 단점이 있다. 즉, 하이퍼파라미터 튜닝이 필요하다.

 


이번에 데이콘 대회를 하고 있는데  결측치를 통계적인 기법으로 내가 하나씩 보면서 처리 하였다.

 

그러다가 머신러닝으로 결측치를 채워넣어봤는데 점수가 잘나왔다.

 

결국에는 내가 직접 처리한 결측치가 완벽하지 못하다는 생각이 들었다...

 

결측치를 5번 K-NN알고리즘까지는 사용해봤다. 그 중에서 XGboost나 LightGBM로 전처리하는 것이 점수가 제일 높았다.

 

전처리를 하는데에 정답은 없다. 왜냐하면 task마다 결측치가 다르기 때문에 다양한 실험을 해봐야한다.

728x90

'AI 공부' 카테고리의 다른 글

MLflow  (0) 2022.12.19
크롤링 (HTML, CSS, User Agent, Selenium)  (0) 2022.08.22

댓글