데이터를 사용하기 전에, 데이터를 이해 하는 시간
데이터 분석을 시작할 때 많은 사람들이 바로 모델부터 떠올린다.
하지만 경험상, 모델 성능의 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는 그 질문에 답을 주는 과정이다.