결측 데이터 다루기

PySpark로 하는 Feature Engineering

John Hogue

Lead Data Scientist, General Mills

디지털 시대에 데이터가 결측되는 이유

데이터 수집

  • 센서 오작동

데이터 저장 규칙

  • 2017-01-01 vs 2017년 1월 1일

이기종 데이터 결합

  • 월별 → 주별

의도적 결측

  • 개인정보 보호

결측

PySpark로 하는 Feature Engineering

결측 유형

완전 무작위 결측(MCAR)

  • 결측 데이터가 완전히 무작위인 부분 집합

무작위 결측(MAR)

  • 다른 관측값에 조건부로 무작위 결측

비무작위 결측(MNAR)

  • 수집 방식으로 인해 데이터가 결측
PySpark로 하는 Feature Engineering

결측값 파악

결측 데이터가 있는 행을 언제 삭제할까요?

  • 결측값이 드문 경우
  • 완전 무작위 결측(MCAR)인 경우

isNull()

  • 현재 표현식이 null이면 True 반환
df.where(df['ROOF'].isNull()).count()
765
PySpark로 하는 Feature Engineering

결측값 시각화

# Import library
import seaborn as sns

# subset the dataframe sub_df = df.select(['ROOMAREA1'])
# sample the dataframe sample_df = sub_df.sample(False, .5, 4)
# Convert to Pandas DataFrame pandas_df = sample_df.toPandas()
# Plot it sns.heatmap(data=pandas_df.isnull())
PySpark로 하는 Feature Engineering

결측값 히트맵

결측 데이터 히트맵

PySpark로 하는 Feature Engineering

결측값 대체(Imputation)

결측값을 대체하는 과정

규칙 기반

  • 비즈니스 로직에 따른 값

통계 기반

  • 평균, 중앙값 등 활용

모델 기반

  • 모델로 값 예측
PySpark로 하는 Feature Engineering

결측값 대체(Imputation)

** fillna(value, subset=None)

  • value 결측값을 대체할 값
  • subset 대체할 열 이름 목록
# Replacing missing values with zero
df.fillna(0, subset=['DAYSONMARKET'])
# Replacing with the mean value for that column
col_mean = df.agg({'DAYSONMARKET': 'mean'}).collect()[0][0]
df.fillna(col_mean, subset=['DAYSONMARKET'])
PySpark로 하는 Feature Engineering

연습해 봅시다!

PySpark로 하는 Feature Engineering

Preparing Video For Download...