결측치와 이상치
1. 결측치 (Missing Value)
1) 정의
- 데이터가 존재해야 할 위치에 값이 없는 경우를 말합니다.
2) 원인
- 데이터 수집 과정에서 누락
- 입력 실수
- 특정 조건에서 값이 정의되지 않음
3) 예시
user_id | movie_id | rating |
---|---|---|
1 | 101 | 4 |
2 | NaN | 5 |
3 | 103 | NaN |
4) 처리 방법
- 데이터를 이해하고 분석 목적에 맞게 결측치 처리 방법을 선택하거나 조합하여 사용하는 것이 중요합니다.
- 삭제: 결측치가 적고 분석에 큰 영향을 주지 않는 경우 해당 행 또는 열을 삭제
- 대체: 평균, 중앙값, 최빈값 등으로 채우거나 예측 모델을 활용
- 분석 제외: 결측치가 포함된 데이터를 특정 분석에서 제외
5) 처리 방법 선택 기준
기준 | 처리 방법 | 설명 |
---|---|---|
결측치 비율 | 삭제 | 데이터 전체 중 결측치가 5% 이하인 경우 적합 |
데이터 중요도 | 대체 | 중요한 열의 결측치는 평균이나 예측 모델로 대체 |
결측치가 많은 경우 | 분석 제외 | 결측치가 30% 이상인 열은 분석에서 제외 가능 |
# 결측치 확인
print(movies.isnull().sum()) # 각 컬럼의 결측치 개수 확인
# 결측치 대체 (평균값으로 대체)
movies['rating'].fillna(movies['rating'].mean(), inplace=True)
# 결측치 삭제
movies.dropna(subset=['movie_id'], inplace=True)
2. 이상치 (Outlier)
1) 정의
- 데이터 분포에서 극단적으로 벗어난 값을 말하며, 통계적으로 유의미하지 않거나 오류일 가능성이 있습니다.
2) 원인
- 데이터 입력 실수
- 측정 오류
- 극단적 사건 발생
3) 예시
user_id | movie_id | rating |
---|---|---|
1 | 101 | 4 |
2 | 102 | 100 |
3 | 103 | -3 |
4) 탐지 방법
1) IQR (Interquartile Range) 방식
- Q1 (1사분위수)와 Q3 (3사분위수)를 계산
- IQR = Q3 - Q1
- 이상치 조건: x가 Q1 - 1.5 * IQR보다 작거나 Q3 + 1.5 * IQR보다 큰 경우
참고
- IQR은 데이터의 중앙 50%를 나타냅니다.
- 1.5배는 데이터 분포의 범위를 넓히는 기준으로, 대부분의 정상적인 데이터(약 99.3%)를 포함하도록 설정된 통계적 규칙입니다.
q1 = users['rate'].quantile(0.25) # 1사분위수
q3 = users['rate'].quantile(0.75) # 3사분위수
iqr = q3 - q1 # IQR 계산
lower_bound = q1 - 1.5 * iqr
upper_bound = q3 + 1.5 * iqr
# 이상치 데이터 탐색
outliers = users[(users['rate'] < lower_bound) | (users['rate'] > upper_bound)]
print(outliers)
2) 기술통계 기반 탐지
- 평균 ± 3표준편차를 기준으로 이상치를 탐지
3) 시각화 기반 탐지
- 박스플롯: IQR을 사용해 이상치를 시각적으로 확인
- 히스토그램: 데이터 분포를 확인해 극단적인 값을 탐지
3. 결측치와 이상치 차이
구분 | 결측치 | 이상치 |
---|---|---|
정의 | 데이터가 비어 있는 경우 | 데이터가 극단적으로 벗어난 경우 |
원인 | 누락, 입력 실수 | 입력 실수, 극단적 상황 |
처리 방법 | 삭제, 대체, 분석 제외 | 삭제, 조정, 모델링 고려 |