Notice
Recent Posts
Recent Comments
Link
관리 메뉴

뛰는 놈 위에 나는 공대생

[데이터과학] 결측치 Missing Data 처리 본문

연구 Research/데이터과학 Data Science

[데이터과학] 결측치 Missing Data 처리

보통의공대생 2021. 5. 25. 21:15

결측치에도 종류가 있기 때문에 각 결측치의 특성에 따라서 처리하는 방법이 달라질 수 있습니다.

 

1. 결측치 Missing data 종류

1) Missing completely at random (MCAR)

완전히 무작위로 Missing value가 있는 경우입니다.

관찰 가능한 변수에도 영향을 받지 않고, 관찰 불가능한 (우리가 관심있어하는) 변수에도 무관합니다.

 

예를 들면, 설문조사를 하는 데 성별이나, 나이에 관계없이 일정하게 결측치가 존재한다면 결측치가 설문의 결과를 편향되도록 만들지 않을 것입니다.

 

즉 이 데이터에 대한 분석은 unbiased되었다고 볼 수 있습니다.

 

 

2) Missing at random (MAR)

 

관찰된 데이터의 변수에 따라 결측치 경향성이 있을 뿐, 결측치 자체에는 그 경향성이 관계 없는 경우

 

예를 들면, 남성은 우울증 설문조사에 빈 칸을 두는 경향성이 높을 수 있지만, 그 결측치가 그들의 우울증 정도와는 전혀 연관이 없는 경우입니다.

(만약 우울증이 있는 사람일 수록 우울증 설문조사에 빈 칸을 둔다면, 그 결측치를 모두 제거할 경우 분석 결과가 편향되게 나올 수 있습니다. 이 경우는 MAR이라고 볼 수 없습니다.)

 

3) Missing not at Random (MNAR)

 

MCAR도 MAR도 아닌 경우

결측치가 된 이유가 결측된 값과 연관이 되어있는 경우입니다.

 

예를 들어 높은 연봉을가진 사람들은 자신의 연봉을 조사에서 말하기를 꺼려서 대답하지 않는다면 그 결측치(연봉)은 직접적으로 분석 결과에 영향을 미치게 됩니다.

 

2. 결측치 Missing data 처리

 

결측치를 처리하는 방식에는 크게 두 가지가 있습니다.

1) 결측치를 제거하거나

2) 결측치를 채우는 방식

 

각각에 대해서 자세히 보도록 하겠습니다.

 

1) Elimination (Filtering out)

 

결측치를 제거할 때는 결측치가 속한 rows를 제거할 수도 있고

결측치가 속한 columns을 제거할 수도 있습니다.

 

1-1) Listwise deletion (complete-case analysis, casewise deletion)

어떤 결측치가 하나라도 속하는 row를 삭제하는 방법입니다.

 

MCAR일 경우에 row를 지워도 데이터 분포에 영향이 없기 때문에 이 방법을 쓸 수 있습니다.

 

 

1-2) Pairwise deletion

 

관심있는 변수가 존재하는 rows에 대해서 분석합니다. 즉, 다른 feature에 결측치가 있어도 내가 필요한 변수가 채워져있다면 분석에 사용하는 방법입니다.

 

이렇게 하면 listwise에 비해 많은 rows를 가지고 분석할 수 있습니다.

 

1-3) Dropping columns

 

row를 삭제하는 것이 아니라 columns을 삭제하는 방식도 있는데,

예를 들어 한 변수에 결측치가 너무 많이 포함되어있다면 이 결측치 때문에 다른 rows들이 삭제될 수가 있어서, 차라리 이 column을 삭제하는 편이 더 낫습니다. 보통 데이터 샘플 수의 60퍼센트 이상이 없는 feature는 중요하지 않다고 판단하고 삭제합니다. (이 feature를 가지고 가기 위해 row 60퍼센트를 삭제할 수는 없으니까요)

 

 

2) Imputation (Filling in)

 

imputation은 결측치를 다른 값으로 대체하는 것을 의미합니다.

결측치 때문에 row를 삭제하다보면 데이터 샘플 개수가 충분하지 않을 수 있고, column을 삭제하다보면 feature가 가지고 있는 중요한 정보를 잃게 될 수도 있기 때문에 imputation을 상황에 따라 사용할 수 있습니다.

 

imputation 방법을 분류해보면,

 

Univariate imputation missing value가 속한 feature에 있는 값을 사용해서 missing value를 채우는 방식
Multivariate imputation missing value가 속한 feature가 아닌 다른 모든 feature들을 사용해서 missing value를 채우는 방식

 

Single imputation single value만 써서 missing value를 채우는 방식
(hot-deck, cold-deck, mean substitution, regression)
Multiple imputation imputation으로 인해 증가하는 noise를 방지하기 위한 방식으로, 여러 개의 impute된 결과를 평균내서 최종 missing value를 결정함

 

 

구체적인 방법으로 보면

 

1) Last observation carried forward (LOCF) & Next observation carried backward (NOCB)

feature의 앞이나 뒤의 값을 그대로 가져다쓰는 방식입니다.

LOCF는 이전 값을 가져가고, NOCB는 이후 값을 가져가서 결측치를 채워넣습니다.

 

시간에 따른 데이터 값이나 경향성이 있는 값에 적합한 방법입니다. 예를 들면 시간 별 온도 데이터일 때 결측치가 발생하면 그 전 시간이나 이후 시간의 온도를 사용하는 것이 합리적입니다.

 

2) Mean, Median, Mode

 

대표적으로 많이 쓰이는 방법인데, feature의 전체 mean이나, median, mode(가장 빈번한 값)를 사용합니다.

time series 데이터에는 좋지 않습니다.

 

3) Regression

missing value을 predict하는 regression model을 만들어서 적용합니다.

 

4) KNN

missing data의 다른 feature들을 보고 유사성이 높은 데이터를 knn 방법으로 찾아서 missing value를 채워넣습니다.

유사성을 볼 떄는 유클리디안 거리로 할 수 있고 다른 방식으로 구할 수도 있습니다. 몇 개의 neighbor를 사용할 지 정해야합니다.

 


이런 결측치를 직접 프로그래밍으로 다루는 것은 pandas에 있는 많은 기능이 제공해주고 있습니다.

Comments