● 결측값 처리
결측값은 피할 수 없기 때문에 이 결측값을 어떻게 처리해야 하는지에 대한 고민은 깊어갑니다. 데이터 셋의 결측값을 무시하는 것은 배의 바닥에 난 구멍을 방치하는 것과 같습니다. 시간이 지나면 결국 가라앉고 말죠.
결측값을 처리하는 방법은 여러 가지가 있습니다.
- 첫 번째, 버림
결측값이 거의 없거나 불규칙하게 발생하는 경우에는 결측값이 있는 행을 삭제하는 것이 가장 쉬운 방법입니다. 대부분 칼럼 값이 결측이거나 결측값이 불규칙하게 발생하는 경우 행 전체를 삭제하는 것이 일반적인 방법입니다. 이런 경우 오히려 결측값을 대체값으로 수정하면 예상하지 못한 결과나 편향된 결괏값이 나올 수 있습니다.
- 두 번째, 대체값으로 수정
가른 칼럼의 값이나 다른 데이터로 결측값을 계산하여 수정합니다. 일반적으로 널리 사용되는 방법입니다.
-- 1. 평균이나 평균에 준하는 통계 값을 사용합니다. 그러나 결측값이 많은 경우에는 잘못된 값으로 대체될 수 있습니다. 데이터 분포가 기울어지지 않은 경우 평균값은 가장 유용하지만, 데이터 분포가 한쪽으로 치우쳐 있거나 분석 모델이 아웃라이어에 민감할 경우 중간값을 사용합니다.
정규분포에서는 대부분의 값은 2 * 표준편차 안에 존재합니다. 그런 다음 (평균-2*표준편차)와 (평균+2*표준편차) 범위 안에서 랜덤하게 값을 선택하여 결측값을 대체합니다.
rand = np.random.randint(average_age - 2*std_age, average_age + 2*std_age, size = count_nan_age)
dataframe["age"][np.isnan(dataframe["age"])] = rand
-- 2. 선형 회귀 함수를 모델링 한 다음 결측값을 계산해 낼 수 있습니다. 예를 들어 주택 가격과 주택 면적의 데이터로 회귀 분석식을 모델링 한 다음 회기 분석식에 값을 입력하여 결측치를 계산해 냅니다. 한 가지 주의할 점은 선형 회귀 모델은 아웃라이어에 많은 영향을 받기 때문에 아웃라이어 처리가 먼저 선행되어야 합니다.
-- 3. 그 외의 방법: 결측값이 있는 행과 가장 유사한 행의 값으로 대체합니다. 데이터 셋이 충분히 클 경우에 사용하는 방법이며 범주형, 연속형 모두 적용 가능합니다.
또 다른 방법은 랜덤 값을 이용해 결측값을 대체하는 것입니다. 이 방법을 기본으로 한 더 나은 방법은 미리 정한 기준을 바탕으로 하나의 데이터 셋을 두 그룹으로 나누고 (예를 들어 성별), 각각의 그룹에서 랜덤하게 결측값을 채워나가도록 하는 것입니다.
또 다른 방법은, 다른 변수의 값에 따라 결측값이 있는 데이터 칼럼 값을 정렬한 다음 결측값을 앞뒤 데이터로부터 계산해 대체해 나가는 방법이 있습니다.
또한 데이터를 분류하여 그룹핑 해주는 알고리즘인 k- 최근접 이웃(𝑘 nearest neighbour) 알고리즘을 사용하기도 합니다. 결측값에서 가장 가까운 데이터를 k- 최근접 이웃 알고리즘으로 찾아내어 대체값을 계산해 낼 수 있습니다. 대체값을 계산해 내기 위해 평균 등의 통계 값을 사용하기도 합니다.
- 세 번째, 플래그
결측치에 어떤 값을 대체하더라고 이미 정보는 손실되었다고 주장하는 사람도 있습니다. 결측값이 있는 것 자체도 정보이기 때문에 알고리즘에 그대로 적용해야 한다고 합니다. 결측값을 대체하는 것이 이미 존재하는 규칙과 패턴을 강화시키는 결과를 가져온다고 주장합니다.
결측값이 규칙적으로 발생하거나 랜덤하게 발생하지 않을 경우 더 생각해 보아야 합니다. 어떤 특정 그룹이 대답할 수 없는 질문에 대한 대답 데이터를 이런 경우의 한 예로 들 수 있습니다. 누락된 데이터는 0으로 대체될 수 있지만 이렇게 수정된 데이터는 통계분석이나 시각화 작업에서 제외되어야 합니다. 범주형 데이터서는 '누락'으로 처리할 수 있습니다. '누락' 데이터는 결측치를 의미합니다.
- 주의사항
결측값과 디폴트 값은 다른 의미입니다. 예를 들어, 0은 결측 또는 디폴트이지만 결측이면서 디폴트 값으로 정의하면 안 됩니다. 결측값이 '알 수 없음'을 의미하는 것은 아닙니다. 학교 폭력 설문 조사 데이터를 분석할 때를 예로 들면, 괴롭힘을 당했는지에 대한 답변을 기억이 없을 경우 '알 수 없음'이라고 답변할 수 있기 때문입니다. 결측값을 채우지 못하거나 대체할 때마다 정보가 손실됩니다. 그래서 '플래그'가 중요한 이유입니다.
● 아웃라이어
다른 데이터들과 크게 다른 값을 가질 경우 아웃라이어라고 말합니다. Q1 및 Q3 사분위수에서 (1.5 * IQR) 이상인 데이터 값은 아웃라이어로 간주합니다. 타당한 이유가 있지 않는 한 아웃라이어를 제거하지 않아야 하며 발생하지 않을 법한 이상하고 의심스러운 값을 찾아내어 제거해야 합니다. 아웃라이어를 제거하기 전에는 여러 가지 확인을 해야 합니다. 선형회귀 분석 법 등 몇몇 모델은 아웃라이어에 매우 민감하다는 것을 알아야 합니다. 다시 말해, 이러한 분석 모델을 적용할 경우에는 아웃라이어를 먼저 제거하는 것이 중요합니다.
데이터 내의 오류
데이터 내의 오류란 각각의 데이터 셋 또는 한 데이터 셋 안에 열의 값이 논리적으로 모순되는 값이 존재하는 것을 말합니다. 예를 들어 각 도시별 생활비 데이터 셋이 있다면, 합계 열 데이터는 각 열의 합과 일치해야 합니다.
city rent transportation food total
libson 500 20 40 560
paris 750 40 60 850
이와 유사하게, 미성년은 결혼할 수 없고, 근로자의 근로세는 임금을 초과할 수 없습니다. 이러한 논리 관계가 데이터 셋의 곳곳에 있습니다.
검증
앞서 설명한 데이터 사전 처리가 완료되면, 데이터를 다시 검사하고 규칙과 제약사항이 잘 유지되었는지 확인하여 데이터의 정확성을 높여야 합니다. 예를 들어, 결측값을 채우고 나면 다시 규칙 및 제약사항을 어기는 데이터가 발생할 수 있습니다. 이런 경우 수동으로 데이터를 수정해야 할 것입니다.
보고
데이터 정제만큼이나 데이터의 상태에 대한 보고서를 작성하는 것은 중요합니다. 데이터의 규칙이 위반된 사례를 시록하고 오류의 원인을 생각해 보아야 합니다.
마치는 말
강력한 검증 또는 데이터 정제 프로세스가 실행되더라도 새로운 규칙 위반 데이터는 발생할 것입니다. 질병을 치료하려고 노력하는 것보다 질병에 걸리지 않게 조심하는 것이 더 중요하듯이 결측치나 논리 오류 데이터가 생기지 않도록 계획을 잘 하는 것이 중요합니다.
다음에 제기하는 몇몇 질문들에 대한 답을 생각해 보면 고품질 데이터 생성에 도움이 될 것입니다.
: 데이터가 수집되는 조건은 어떠합니까? 데이터가 수집되는 환경도 중요합니다. 설문 조사의 경우 장소, 시간, 날씨도 영향을 미칠 수 있습니다. 집에 있는 사람에게 질문하는 것과 출근하는 사람들에게 질문하는 것은 다른 상황이죠. 태블릿으로 조사 결과를 작성할 경우 기기 작동에 어려움이 있다면 결측치가 발생할 수 있습니다.
: 데이터가 의미하는 바가 무엇입니까? 모든 일반인을 대상으로 합니까? 아니면 도시 근로자만? 어떤 특정 대상 군을 대상으로 하는 조사라면 그 질문에 대한 강력한 의견이나 의사가 있는 집단을 대상으로 해야 합니다.
: 데이터 정제에 사용한 방법과 그 이유는? 상황과 데이터 유형에 따라 데이터 정제에 다른 방법이 사용될 수 있습니다.
: 프로세스를 개선하기 위해 시간과 예산을 투자하고 있습니까? 사람과 프로세스에 대한 투자는 기술에 대한 투자만큼이나 중요합니다.
이번 포스팅을 마지막으로 데이터 정제에 관한 긴 글을 마무리 하였습니다. 웹데이터수집과 정제에 관해 더 궁금한 점이 있으면 유펜솔루션에 문의해 주세요.
Comentarios