ML 겉햙기[결측값 처리]
경진대회에서나 현실에서 우리가 다루는 자료들도 종종 결함이 존재한다. 이에 우리는 결측값을 채워서 데이터를 무결점하게 만들어야 하는게 데이터를 다루는사람이 가장 중요하게 생각하는 일중 하나이다.
이때 결측값을 제외하고 데이터를 돌려봐서 현재 데이터의 수준을 파악해야하는데 이때 베이스모델이 필요하다.
베이스모델같은 경우 우리는 가장먼저 GBDT를 떠오를수있다. 그 이유는 GBDT가 베이스 데이터를 넣었을때 가장 에러가 않나오고, 가장 베이스모델결과가 좋기 때문이다.
베이스모델인 GBDT는 결측값을 채우지 않아도 그대로 쓸수 있다. GBDT는 범주형 변수는 True/False 로 구분하고
수치형 변수인경우 특정값보다 큰지 작은지를 비교하는 대소관계에 의존하여 모델을 구축하기 때문이다.
GBDT 는 결측값, 수치의 크기(범위)에 영향을 안미치기 때문에 우리가 베이스 데이터를 가지고 빠르게 결과를 확인할수있고 이 베이스 모델 결과를 바탕으로 데이터를 평가할수 있기 때문이다.
결측값 을 다루는 방법은 크게 3가지를 볼수 있습니다.
1. 결측값인 채 처리하기
2. 대푯값으로 채우기
3. 다른 변수로부터 결측값 예측
4. 결측값으로 새로운 특징 만들기
5. 데이터의 결측값 인식하기
1. 결측값인 채 처리하기
결측값인 채 처리는 결측값이 존재한다면 결측값인지 아닌지에 따라 데이터를 나누거나 단순 채우기 방식을 쓰면된다.
이때 대표적인 방식은 dropna이다.
dropna : 내가 처음으로 모델을 구성하고 baseline 을 구성할때 하는일은 이 Null 값을 지우는 일이다.
그 이유는 NA가 되는 모델이 있고 안되는 모델이 있고 설사 된다고 하더라도 결측값을 채우거나 지웠을때를 비교하였을때 loss 값의 변화가 생길수 있습니다 https://github.com/microsoft/LightGBM/issues/2921
지우는 방법은 두가지로 1. 행을 지우는 방법, 2. 열을 지우는 방법이 있다.
이 방법은 간단해서 missingna 라이브러리를 통한 확인 또는 info() function 을 통한 대략적인 확인으로 판
단하여 지울수 있다.
2. 대푯값으로 채우기
결측값을 채우는 간단한 방법중 하나는 해당 변수의 대푯값으로 채우는 것입니다.
이는 결측값이 랜덤하게 발생한다면 그중 가장 자주 나올만한 값으로 채운다는 생각을 기반으로 둔 방법입니다.
반대로 결측값이 랜덤하지 않는다면 그다지 적절한 방법은 아닙니다
수치형 변수의 가장 일반적인 대푯값으로는 평균값이고, 값의 분포가 치우처져 있을경우 중앙값을 선택하는 방법도 있습니다. 또는 로그 변환을 통해 치우침의 정도가 적은 분포로 만든뒤 평균을 구하는 방법도 있습니다
그 외에 평균값을 취할때 전체 데이터의 평균이 아닌, 별도의 범주형 변수값으로 그룹을 생성하여 그룹별 평균을 대입하는 방식도 있습니다. 이는 결측변수의 분포가 그룹에 따라 크게 바뀔것으로 예상될경우 적용하기 좋은 방식입니다.
그러나 범주형 변수의 값에 따라 그룹별로 평균을 구할경우 데이터 샘플수가 극단적으로 적은 범주가 있을수 있어 이 그룹의 평균은 믿음이 가지 않습니다. 이러한 경우 다음 수식처럼 분자와 분모에 정수항을 더하여 계산하는 베이즈 평균 이라는 방법이 있습니다.
이 방법은 미리 데이터를 n 개 측정하여 평균 (예시는 3)에 추가합니다
3. 다른 변수로부터 결측값 예측
이 방식은 domain 지식과 연관성이 깊기 때문에 이것을 어떻게 처리하였냐에 따라
고수, 중수, 초보 로 나뉠수 있습니다.
캐글 Airbnb New User Bookings 대회의 2위 솔루션에서는 나이를 비롯해 최초 예약일과 계정 생성일의 차이를 구간분할하여 범주형 변수로 삼았고 이 데이터를 바탕으로 결측값을 예측하였습니다
저는 보통 가장먼저 시간, index reference
그 다음으로 categorical feature, numeric feature 을 구별해서 생각해 본 후에
그 예로 자료1. 에서 보이는것처럼 연속형 자료일때 선형적인지 비선형적인지 생각합니다.
그밖에도 행 데이터마다 결측값이 있는 변수의 수를 카운팅 한다던가,
여러개의 변수에서 결측값의 조합을 조사하여 패턴으로 분류할수있다면, 어느 패턴인지를 또 특징으로 삼습니다