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. 결측치와 이상치 차이

구분 결측치 이상치
정의 데이터가 비어 있는 경우 데이터가 극단적으로 벗어난 경우
원인 누락, 입력 실수 입력 실수, 극단적 상황
처리 방법 삭제, 대체, 분석 제외 삭제, 조정, 모델링 고려