데이터를 사용하기 전에, 데이터를 이해 하는 시간

데이터 분석을 시작할 때 많은 사람들이 바로 모델부터 떠올린다.

하지만 경험상, 모델 성능의 70%는 EDA에서 이미 결정된다.

EDA는 “이 데이터가 어떤 성격인지, 믿을 수 있는지, 어떤 질문을 던질 수 있는지를 파악하는 과정”이다.


EDA는 왜 필요한가?

EDA 없이 분석을 시작하면 보통 이런 문제가 생긴다.

  • 데이터에 결측치가 많은데 모르고 모델 학습
  • 특정 컬럼이 상수값인데 피처로 사용
  • 데이터 분포가 왜곡되어 있는데 그대로 학습

EDA는 이런 실수를 초기에 차단한다.

EDA는 “분석”이 아니라 데이터와 대화하는 단계에 가깝다.


EDA의 핵심 질문들

EDA를 할 때 나는 항상 아래 질문부터 던진다.

1. 이 데이터는 어떻게 생겼나?

  • 행(row)은 무엇을 의미하는가?
  • 컬럼(column)은 어떤 의미를 가지는가?
  • 시간 개념이 있는가? (event time, snapshot time)
예:
- row = 고객 1명
- column = 고객의 행동/속성


2. 데이터는 충분한가?

  • 전체 샘플 수는?
  • 클래스별 분포는?
  • 특정 기간에 데이터가 몰려 있지는 않은가?
df.shape
df['label'].value_counts(normalize=True)

데이터가 적지는 않은지, 불균형이 심하지는 않은지를 여기서 판단한다.


3. 결측치와 이상치는?

EDA에서 가장 먼저 확인해야 할 부분이다.

df.isnull().mean().sort_values(ascending=False)
  • 결측치가 많은 컬럼은 왜 비어 있을까?
  • “의미 있는 0” 인가, “없는 값” 인가?
  • 특정 구간에서만 결측이 발생하는가?

결측치는 단순한 문제가 아니라 데이터 생성 과정의 힌트다.


4. 분포는 정상적인가?

수치형 데이터라면 분포를 반드시 본다.

df['price'].hist(bins=50)

체크 포인트:

  • 모델보다 먼저 분포를 신뢰할 수 있어야 한다.


5. 변수 간 관계는?

EDA의 꽃은 관계 탐색이다.

  • 피처 ↔ 타겟 관계
  • 피처 ↔ 피처 상관관계
df.corr(numeric_only=True)

여기서 얻는 인사이트:

  • 쓸모없는 변수 제거
  • 중복 피처 발견
  • 단순 규칙으로도 설명 가능한 신호 발견


시각화는 EDA의 언어다

EDA는 숫자보다 그림이 더 많은 단계다.

자주 쓰는 시각화:

  • 히스토그램 (분포)
  • 박스플롯 (이상치)
  • 산점도 (관계)
  • 시간 흐름 라인 차트

EDA 결과를 말로 설명하기 어렵다면 아직 충분히 이해하지 못한 것일 가능성이 높다.


실무에서의 EDA 체크리스트

아래는 실무에서 거의 항상 사용하는 EDA 체크리스트다.

  • 데이터 스키마 이해
  • row/column 의미 명확화
  • 결측치 비율 확인
  • 이상치 확인
  • 타겟 분포 확인
  • 주요 피처 분포 시각화
  • 피처-타겟 관계 탐색
  • 데이터 누수 가능성 점검
  • 시간 축 기준 분리 가능 여부 확인


EDA는 한 번으로 끝나지 않는다

중요한 점 하나.

EDA는 모델 학습 전 한 번 하고 끝나는 작업이 아니다.
  • 새로운 피처를 만들면 다시 EDA
  • 성능이 안 나오면 다시 EDA
  • 데이터가 바뀌면 다시 EDA

EDA ↔ 모델링 ↔ EDA

이 사이클이 반복될수록 분석은 좋아진다.


마무리

EDA는 가장 많은 사고를 막아주는 단계다.

모델이 잘 나오지 않는다면,

하이퍼파라미터보다 먼저 이렇게 물어보자.

“내가 이 데이터를 정말 이해하고 있는가?” EDA는 그 질문에 답을 주는 과정이다.


Why EDA(Exporatory Data Analsis)?