Skip to main content

결측치 처리

결측치 Missing Values

  • 데이터셋에서 누락된 값 또는 값이 기록되지 않은 경우
  • 원인
    • 데이터 수집 오류: 데이터 입력 실수, 기기 오작동이나 데이터 전송 오류
    • 의도적 미응답: 설문 등에서 민감한 질문이나 답변하기 까다로운 질문
    • 데이터 손실: 데이터베이스 손상, 파일 손실, 시스템 충돌, 네트워크 문제
    • 불완전한 데이터 소스: 데이터가 일부만 제공되거나 누락된 경우

결측치의 종류

  • MCAR (Missing Completely at Random)
    • 결측치가 완전히 무작위로 발생하며, 다른 변수들과 상관관계가 없음
    • 예: 설문 조사에서 무작위로 몇 명이 응답하지 않은 경우
    • 큰 문제 안되지만 MCAR은 드묾
  • MAR (Missing at Random)
    • 결측치가 다른 관측 가능한 변수와 관련이 있지만, 해당 변수와는 무관
    • 예: 남성 응답자들이 특정 질문에 응답하지 않은 경우, 그러나 성별은 관찰됨
    • 어느 정도 대응 가능하며, 일반적으로 결측치에 대해 MAR을 가정하고 대응
  • MNAR (Missing Not at Random)
    • 결측치가 해당 변수와 관련이 있으며, 무작위로 발생하지 않음
    • 예: 소득이 낮은 사람들이 소득 질문에 응답하지 않는 경우
    • 대응이 까다로움

결측치 대응 방법

  • 삭제 (Deletion): 결측치가 있는 데이터를 삭제하고 분석
  • 대체 (Imputation): 결측치를 다른 값으로 대체함
  • 모형 기반 접근: 결측치에 영향을 받지 않는 모형을 사용
  • 결측치 자체를 하나의 특징으로 사용: 특수한 경우에 사용

삭제의 방법

  • 리스트와이즈 삭제 (Listwise Deletion)
    • 결측치가 있는 전체 행을 삭제
    • 간단하고 구현이 용이하지만, 많은 데이터 손실
    • MCAR일 때만 유효.
  • 페어와이즈 삭제 (Pairwise Deletion)
    • 분석에 필요한 변수에만 결측치가 있는 행을 삭제
    • 데이터 손실 최소화
    • 각각의 분석이 서로 다른 부분집합에 대해 이뤄지기 때문에, 결과 일관성에 문제가 생길 수 있음
      • 예: 상관행렬이 양의 정부호(positive definite)가 아닐 수 있음

결측치 보기

  • 실습 데이터 열기
import pandas as pd
df = pd.read_excel('car') # 원본 데이터
dm = pd.read_excel('car_miss.xlsx') # 결측치 있는 데이터
  • 결측치 있는 행 보기
dm.query('mileage.isnull()')
  • 결측치 없는 행 보기
dm.query('mileage.notnull()')

결측치 삭제

  • 결측치가 하나라도 있는 '행' 제거
dm.dropna()
  • 결측치가 하나라도 있는 '열' 제거
dm.dropna(axis=1)
  • how='all': 모든 값이 결측치인 행/열만 제거
dm.dropna(how='all')
  • subset=['컬럼명']: 특정 컬럼에 결측치가 있는 경우에만 행 제거
df.dropna(subset=['price', 'mileage'])

평균

  • 원 데이터의 평균
df['mileage'].mean()
  • 결측치가 있는 데이터의 평균
dm['mileage'].mean()
  • 기본적으로 결측치는 삭제하고 평균냄(skipna=True)
dm['mileage'].mean(skipna=False)

표준편차

  • 원 데이터의 표준편차
df['mileage'].std()
  • 결측치가 있는 데이터의 표준편차
dm['mileage'].std()

분포 시각화

import seaborn as sns
import matplotlib.pyplot as plt
sns.kdeplot(df['mileage'], label='original')
sns.kdeplot(dm['mileage'], label='missing')
plt.legend()

퀴즈

사용자 정보 입력
퀴즈를 시작하기 전에 이름과 소속을 입력해주세요.

Q&A