탐색적 데이터 분석

엔드 투 엔드 Machine Learning

Joshua Stapleton

Machine Learning Engineer

EDA 프로세스

  • 데이터셋 조사·분석
  • 데이터셋 이해
  • 데이터셋 시각화
  • 데이터셋 특성화/분류

환자 심장병 데이터셋에 적용된 EDA 구성 요소 다이어그램

엔드 투 엔드 Machine Learning

데이터 이해하기

df.head()

  • 데이터셋의 처음 행 표시
  • 구조를 빠르게 파악
# Print the first 5 rows
print(heart_disease_df.head())

df.head() 실행 결과: 심장병 DataFrame의 처음 5행.

df.info()

  • 피처 요약
  • 결측 여부와 피처 타입 표시
# Print out details
print(heart_disease_df.info())

df.info() 실행 결과: 심장병 DataFrame 요약 정보.

엔드 투 엔드 Machine Learning

클래스 (불)균형

df.value_counts()

  • 각 클래스의 고유 발생 수 집계
  • 클래스: 심장병 이진 표시(1/0)
  • 모델링에 중요
# print the class balance
print(heart_disease_df['target'].value_counts(normalize=True))

target 열의 클래스 분포: .value_counts() 결과.

엔드 투 엔드 Machine Learning

결측값

  • 오류 유발 가능
  • 대표성 부족, 편향된 결과

df.isnull() 사용

  • null/빈/결측값 확인
  • 열 또는 여러 열에 적용

사용 예

# 열의 모든 값이 null인지 확인
print(heart_disease_df['oldpeak'].isnull().all())
True
엔드 투 엔드 Machine Learning

이상값

  • 이상값

    • 측정 오류
    • 데이터 입력 오류
    • 희귀 사건
  • 모델 성능 왜곡 가능

    • 극단값에 학습 편중
    • 전체 경향을 포착 못함
  • 때로 유용함:

    • 희귀 값
    • 탐지: 박스플롯, IQR 사용

이상값을 보여주는 시각화.

엔드 투 엔드 Machine Learning

데이터 시각화

시각화로 확인:

  • 전체 경향
  • 결측치와 이상값

기타 시각화:

  • 커널 밀도 추정(KDE)
  • 경험적 누적분포(Empirical CDF)
  • 이변량 분포
df['age'].plot(kind='hist')
plt.xlabel('Age')
plt.ylabel('Frequency')
plt.show()

데이터셋의 연령 분포 시각화.

1 https://seaborn.pydata.org/tutorial/distributions.html, https://app.datacamp.com/learn/courses/intermediate-data-visualization-with-seaborn
엔드 투 엔드 Machine Learning

EDA 목표

데이터 이해

  • 패턴이 있는가?
  • 예: 남성이 심장병 비율이 더 높은가?

이상값 탐지

  • 허용 범위를 벗어난 값이 있는가?
  • 오류나 결측치가 있는가?

가설 수립

  • 데이터에서 무엇을 예상하는가?

가정 검토

  • 예상과 실제가 일치하는가?
엔드 투 엔드 Machine Learning

연습해 봅시다!

엔드 투 엔드 Machine Learning

Preparing Video For Download...