결측값

아따맘마·2020년 11월 15일
0

데이터 전처리

목록 보기
2/5

결측값??

결측값은 다양하게 표현이 된다.

  • NA
  • 99999999
  • (공백)
  • NAN
  • Unknown
  • Not Answer

등으로 표현이 된다. 이번 Kaggle 4회차 대회에서처럼 '?'로도 표시가 되기도 한다. 데이터 수집가가 임의로 정해도 되는듯 하다. 그래도 R은 기본적으로 NA이고 파이썬에서는 NAN이다.
결측값을 완벽하게 처리하는 것은 불가능할뿐더러 비효율적이다. 그래서 분석가가 임의로 최빈값을 넣어주거나 다른 조건을 이용하여 결측값을 빠르게 처리한다.
그렇다고 무조건 결측값을 제거하기엔 결측값 자체가 의미가 있는 경우도 있다.
예를 들자면... 아주 유명한 연예인이나 부자가 개인 신상을 적기 꺼려해서 결측값으로 남는다거나, 쇼핑몰에서 장바구니 분석의 경우가 있다. 소비자가 A, B, C를 장바구니에 찜해두고 A, C만 구입하는 경우말이다.

결측값 처리시 주의점

결측값을 처리한다고 0 이라는 숫자로 대체하면 안된다. 0도 엄연히 한 숫자의 일종이다. 만약 수치형 변수에서 결측값을 0으로 처리한다면??
전체 데이터 합은 같아지는데 개수는 증가한다. 그러면 표준오차가 증가한다.
그렇다고 결측값을 처리 안한다??
그러면 또 함수라던가 단순 계산에 오류가 발생한다. 그래서 분석가의 경험을 토대로 임의로 처리하는 것이 가장 베스트이다.

결측값 처리 방법

결측값 처리는 전체 작업속도에 영향을 준다. 결측값 처리에 많은 시간을 쏟아부으면 그만큼 다른 작업을 하는데 빠듯해진다는 소리다. 그래서 이런 경우엔 아예 레코드를 삭제하기도 한다. 전체 데이터중에 결측값으로 표현된 데이터가 엄청 많은 경우이다. 그리고 애초에 데이터 자체가 양이 방대해서 다른 데이터로도 충분히 분석이 가능하면 재거한다.

레코드는 행(row)이다. RDB에서는 행을 레코드(record) 또는 튜플(tuple)이라고 부른다.

단순 대치법

말 그대로 진짜 단순하다. 결측값이 존재하는 레코드를 삭제한다.

문제점

레코드 삭제시 데이터 수가 줄어들어 활용가능한 변수도 적어진다. 그러면 데이터 활용의 효율성이 떨어진다. 그래서 데이터 양이 많은 경우엔 효율적인 방법이다.

평균 대치법

관측 또는 실험을 통해 얻어진 데이터의 평균으로 대치

  • 비조건부 : 관측데이터의 평균으로 대치
  • 조건부 : 회귀분석을 통해 대치
    -> 예를 들어 키, 몸무게, 식사량 속성이 서로 인과관계가 있다면? 회귀분석을 통해 서로의 결측값을 처리

단순확률 대치법

평균대치법에서 추정량 표준 오차의 과소 추정문제를 보완.

  • Hot-deck 방법
  • Nearest neighbor 방법

등이 존재

Hot-deck

속성 내에서 대체값을 확률추출에 의해 랜덤으로 추출하여 결측값을 대체. 최빈값을 넣는다고 봐도 무방

Nearest neighbor

속성 Y1과 Y2를 가지고 거리가 가장 가까운 레코드를 찾는다. 그리고 그 레코드의 명목형 변수의 값을 그대로 넣는다.

Y1Y2Y3
13a
102b
42?
-422c

Y3에서 세번째 레코드에 결측값이 있다. Nearest neighbor 방법을 이용하여 Y1, Y2가 첫번째와 세번째가 비슷한 것을 알 수 있으니 a로 채워넣는다.

다중 대치법

단순 대치법을 한번만 사용하지 않고 n번의 대치를 통해 n개의 가상의 완전 자료를 만드는 방법이다.

  • 1단계 : 대치
  • 2단계 : 분석
  • 3단게 : 결합
profile
늦게 출발했지만 꾸준히 달려서 도착지점에 무사히 도달하자

0개의 댓글