-
데이터 수집과 EDA 전략 시리즈 – 3화. 결측치와 이상치 탐지 전략: 데이터의 허점을 읽어내는 기술기술과 산업/AI 2025. 5. 7. 15:57728x90
데이터 분석에서 ‘보이지 않는 것들’이 가장 위험하다.
우리가 보지 못하거나, 애써 무시한 누락된 정보와 극단적인 값은
모델을 망치고, 분석 결과를 왜곡하며, 나쁜 의사결정으로 이어질 수 있다.
이번 글에서는 데이터 탐색 과정 중 반드시 짚고 넘어가야 할
**결측치(Missing Values)**와 **이상치(Outliers)**에 대해
실무 분석가의 시선으로 심층적으로 정리한다.
1. 결측치와 이상치는 왜 중요한가?
데이터는 언제나 완전하지 않다.
현장에서 수집되는 로그, 설문 응답, 기기 센서 데이터 등은
환경적·기술적·인적 요인에 따라 손상되거나 누락되기 쉽다.
📌 결측치(Missing Values)
결측치는 말 그대로 어떤 값이 ‘비어 있는 상태’를 의미한다.
주로 다음과 같은 원인으로 발생한다:
- 사용자 입력 누락 (예: 나이 미기입)
- 수집 실패 (예: 서버 장애로 로그 미기록)
- 의도적 생략 (예: 민감정보 제외)
- 데이터 전처리 중 삭제 또는 병합 과정에서의 손실
📌 이상치(Outliers)
이상치는 데이터의 분포에서 일반적인 범위를 벗어난 극단적인 값이다.
예를 들어, 대부분의 제품 가격이 1~10만원인데
어떤 하나가 500만원이라면 이는 이상치일 가능성이 높다.
이상치는 다음과 같은 상황에서 발생한다:
- 입력 오류 (0을 하나 더 적음, 단위 혼동 등)
- 실제 극단 상황 (VIP 고객, 사고 발생 등)
- 비즈니스적 예외 (신제품 출시, 마케팅 이벤트 등)
중요한 점: 모든 이상치가 제거 대상은 아니다.
분석 목적에 따라, 때로는 ‘이상치야말로 중요한 인사이트’가 될 수 있다.
2. 결측치 탐지 실전 전략
결측치는 우선 전체 데이터셋의 어디에, 얼마나 존재하는지 파악하는 것이 중요하다.
🔹 기본 확인
import pandas as pd df = pd.read_csv('data.csv') df.isnull().sum().sort_values(ascending=False)
→ 결측치가 많은 열부터 정렬
🔹 전체 비율 확인
(df.isnull().sum() / len(df)).sort_values(ascending=False)
→ 30% 이상 결측치가 있는 열은 제거 대상 고려
📊 시각화로 한눈에 보기
import seaborn as sns import matplotlib.pyplot as plt sns.heatmap(df.isnull(), cbar=False, cmap='viridis') plt.title('결측치 분포 Heatmap') plt.show()
열 단위뿐 아니라 행 단위 패턴까지 시각적으로 파악 가능
3. 결측치 처리 전략
전략설명적용 예시
삭제 결측이 많은 열/행 제거 전체 열의 70% 이상 결측 대체(평균/중앙값) 수치형 평균 또는 중앙값으로 채움 나이, 소득 등 범주 대체 범주형은 최빈값 또는 ‘Missing’으로 처리 지역, 성별 모델 기반 예측 다른 변수로 결측값을 예측해 채움 KNN, 회귀 기반 보간 다중 대체(MICE) 통계적으로 여러 번 예측 → 평균화 고급 통계기법, 비용 ↑ ✅ 실무 팁: 테스트 데이터에는 절대 평균으로 결측치를 대체하지 않는다.
학습 데이터에서 계산한 값을 기준으로 일관성 있게 처리해야 함.
4. 이상치 탐지 실전 전략
이상치는 분석 목적에 따라 제거 또는 강조해야 할 대상이다.
탐지 방식은 수치형 데이터 기준으로 다음과 같다.
(1) 사분위수(IQR) 기반 탐지
Q1 = df['feature'].quantile(0.25) Q3 = df['feature'].quantile(0.75) IQR = Q3 - Q1 outliers = df[(df['feature'] < Q1 - 1.5 * IQR) | (df['feature'] > Q3 + 1.5 * IQR)]
→ 박스플롯(boxplot) 기반 이상치 정의
(2) Z-score 기반 탐지
from scipy import stats z = stats.zscore(df['feature']) df[abs(z) > 3]
→ 정규분포를 전제한 경우, z > 3은 극단값으로 간주
(3) 시각화 기반 탐지
sns.boxplot(x=df['feature']) plt.title('Boxplot으로 보는 이상치') plt.show()
또는 2D 이상치 탐색:
sns.scatterplot(x='price', y='volume', data=df) plt.title('이상치 시각 탐색')
5. 이상치 처리 전략
전략설명주의사항
제거 극단치 행 제거 이유가 확실할 때만 로그 변환 왜도(Skew)를 줄이기 위한 처리 양수만 가능 클리핑 상한/하한값 설정 극단 영향 완화 비즈니스 룰 기반 라벨링 예: VIP 고객, 이상거래 플래그 마케팅·보안 분야 활용 ⚠ 이상치는 때로 ‘문제’가 아니라 ‘인사이트’이다.
예: 금융 사기 탐지에서 이상치는 곧 타겟(Target)이다.
6. 실전 예제: EDA + 결측치 + 이상치 통합 적용
# 결측치 대체 df['Age'].fillna(df['Age'].median(), inplace=True) # 이상치 제거 (Fare 기준) Q1 = df['Fare'].quantile(0.25) Q3 = df['Fare'].quantile(0.75) IQR = Q3 - Q1 df = df[(df['Fare'] >= Q1 - 1.5 * IQR) & (df['Fare'] <= Q3 + 1.5 * IQR)]
이렇게 EDA → 결측 탐색 → 이상치 제거를 거친 후
모델링 단계로 진입하면 데이터 신뢰도는 훨씬 높아진다.
7. 결론: 데이터의 허점을 읽어내는 것이 진짜 실력이다
많은 분석가가 복잡한 모델을 만들려고 하지만,
실제로 모델의 성능을 결정짓는 건 데이터의 품질이다.
이 품질은 결측과 이상치 처리에서 갈린다.
결측과 이상치는 단순한 오류가 아니라, 분석의 잠재적 리스크다.
이 허점을 먼저 찾아내고 조치할 수 있어야
분석가로서의 신뢰를 얻을 수 있다.
“결측과 이상치를 읽어내는 눈이 없다면,
당신은 절대로 좋은 예측을 하지 못할 것이다.”
다음 편 예고
데이터 수집과 EDA 전략 시리즈 – 4화. 변수의 유형과 분석 전략: 수치형과 범주형, 처리 방식이 다르다
변수는 모두 같지 않다. 숫자처럼 보이지만 범주인 경우도, 범주처럼 보여도 순위가 존재하는 경우도 있다.
EDA에서 변수의 타입을 올바르게 분류하고 처리하는 전략을 정리한다.
728x90'기술과 산업 > AI' 카테고리의 다른 글
Apache NiFi 시리즈 1회 - Apache NiFi란 무엇인가 (0) 2025.05.07 분야별 데이터 수집 전략 가이드 시리즈 - 3화. 서울 열린데이터광장 실전 활용법: 위치 기반 데이터로 인사이트 만들기 (0) 2025.05.07 AI/ML 기반 데이터 분석 시리즈 6화 - 피처 엔지니어링과 스케일링 전략: 데이터의 본질을 꿰뚫는 변환 기법 (0) 2025.05.07 AI 모델 만들기 시리즈 6화 – Scikit-learn으로 첫 번째 분류 모델 만들기 (1) 2025.05.07 Whisper 시리즈 11화 – 팟캐스트를 텍스트로, Whisper 실전 변환 프로젝트 사례 (1) 2025.05.07