Data Science - 결측 데이터 처리

cosmosJ·2024년 2월 6일

데이터 분석

목록 보기
8/26
post-thumbnail

결측 데이터

결측 데이터(= 결측치)란, 데이터가 수집되지 않거나, 누락되어 정보(값)이 존재하지않음을 의미한다.

결측치가 포함된 데이터는 모델 학습이 불가능하여, 모델 학습을 위한 데이터를 생성시에는 결측시를 반드시 처리해주어야 한다.

일반적으로 python에서 결측치는 NaN으로 표기된다. (null, NA, NaN 등으로 보통 결측치를 표현한다.)

결측치 발생 원인

결측치는 일반적으로 수집 혹인 관리 과정에서의 실수로 발생한다.

  • 미수집 : 미입력 데이터 수집 및 저장 (수집 단계부터 누락)
    ex. 여론조사 시, 일부 항목 미 작성
  • 시스템 오류 : 오류로 인한 데이터 누락
    ex. 센서 혹은 시스템 자체의 오류로 데이터 누락
  • 신규 항목 : 새롭게 수집 및 저장되는 항목이 추가됨.
    ex. 기존에는 수집하지 않다가, 새롭게 수집되며, 기존 데이터와 관리되며 결측치 발생
    ex. 관리 시스템에서 변경 규칙이 반영되지 않는 경우

결측치 처리 방안

결측치를 처리하는 방법은 크게 2가지로 나눌 수 있다.

  • 제거하기 (결측 데이터 제거)
    • 가장 쉬운 처리 방안
    • 데이터 손실 발생
  • 대체하기 (결측 데이터를 여라가지 기준, 정의, 수리적 연산으로 대체)
    • 최대한 많은 데이터 활용
    • 편향(bias) 발생 가능
      - 어떤 방향으로 대체하냐에 따라 영향을 받는다.

항상 결측치를 처리함에 앞서, 왜 결측치가 발생했는지를 파악하는 것이 좋다.
(결측치의 발생 원인을 알면, 결측치를 어떠한 방식으로 처리할지 결정하는데 도움을 받고, 보다 질 좋은 데이터를 만들 수 있다.)

결측치 제거하기

결측치를 제거하는 방식에는 2가지가 존재한다.

  • Listwise deletion

    • 결측치가 하나라도 존재하는 행 삭제 df.dropna()
  • Pairwise deletion

    • 모든 변수(컬럼)가 결측치로 존재하는 행만 삭제 df.dropna(how='all')

당연하게도 Listwise 방식이 Pariwise 방식보다 더 많은 데이터를 제거하게 된다. 이는 정확성 측면에서 온전한 데이터를 활용하려면 고려해볼 수 있는 부분이다.

즉, Listwise 방식을 사용하고자 한다면, 데이터에 결측치가 얼마나 존재하는지 파악하고, 삭제되는 데이터 양을 확인하여, 감수 가능할 때 하는 것이 좋다.

결측치 대체하기

결측치 대체 방식은 정보의 손실은 방지하나, 정보의 왜곡(변수의 특성에 영향 - ex. 평균, 상관관계 등)이 발생할 수 있다.

이러한 결측치 대체 방식에도 2가지가 존재한다.

  • 일정 값 대체
    • 결측치를 기준으로 해당 컬럼의 평균값(중간값)으로 대체
    • 범주형 데이터의 경우 결측치를 최빈값 혹은 지정된 값으로 대체 가능
    • df['col1'].replace(np.nan, df['col1'].mean())
    • 지정된 값으로 대체하므로, 데이터의 특성을 파악하는 것이 중요
  • 선형 값 대체
    • 선형 함수 기반 앞 뒤 관측치 활용 대체 (보간)
    • 앞 뒤 데이터를 활용하므로 시계열 데이터의 대체에 용이
    • df.interpolate()

데이터 대체는 데이터의 특성에 영향을 주므로, 기존 데이터가 어떠한 특성을 가지고 있는지를 잘 파악하는 것이 중요하다.

실습 코드

profile
백엔드, Data Science, AI 분야 학습 내용을 정리하는 블로그입니다.

0개의 댓글