본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.
Data Cleansing; 데이터 정제
결측값·노이즈·이상값 같은 오류를 찾아 삭제·대체·변환해 데이터 품질을 높이는 작업

정제는 데이터 전처리의 첫 단계이다. 잘못된 값이 섞인 채 분석하면 모형이 아무리 좋아도 결과가 틀린다.

  1. 데이터 오류 원인 분석 : 결측값, 노이즈, 이상값 중 무엇이 왜 생겼는지 확인한다
  2. 데이터 정제 대상 선정 : 모든 데이터를 대상으로 하되, 품질 저하가 큰 외부·비정형 데이터를 우선한다
  3. 데이터 정제 방법 결정 : 오류 유형과 분석 목적에 따라 삭제, 대체, 예측값 삽입 등을 정한다
원인 설명
결측값(Missing Value) 값이 비어 있다. 결측치 참고
노이즈(Noise) 입력·측정 과정에서 무작위로 섞인 잘못된 값
이상값(Outlier) 다른 값과 크게 동떨어진 값. 오류일 수도, 의미 있는 값일 수도 있다. 이상치 참고
  • 삭제 : 오류가 있는 행·열 전체 또는 일부를 지운다
  • 대체 : 평균, 중앙값, 최빈값 등으로 바꾼다
  • 예측값 삽입 : 회귀·분류 모형으로 예측한 값을 넣는다
  • 변환(Transform) : 코드·형식·단위를 일관되게 바꾼다
  • 파싱(Parsing) : 정제 규칙을 적용하기 위해 데이터를 의미 단위로 나눈다
  • 보강(Enhancement) : 변환·파싱·수정 과정에서 추가 정보를 더한다
유형 설명 예
MCAR(완전 무작위 결측) 결측이 어떤 변수와도 무관하게 무작위로 생긴다 설문지가 우편 과정에서 분실됐다
MAR(무작위 결측) 결측이 관측된 다른 변수와 관련 있지만, 결측된 값 자체와는 무관하다 남성이 우울증 문항에 덜 응답한다(성별은 관측됨)
MNAR(비무작위 결측) 결측이 결측된 값 자체와 관련 있다 소득이 높은 사람이 소득 문항을 비운다
  • 단순 삭제 : 결측이 있는 행을 지운다(완전 분석, listwise). MCAR이 아니면 편향이 생기고 표본이 줄어든다
  • 평균·중앙값 대치 : 관측값의 평균이나 중앙값으로 채운다. 간단하지만 분산이 과소 추정된다
  • 단순 확률 대치 : 확률적 방법으로 뽑은 값으로 채워 평균 대치의 분산 과소 문제를 줄인다
    • Hot-deck : 같은 자료 안에서 비슷한 응답자의 값으로 채운다
    • Cold-deck : 외부 출처나 이전 조사의 비슷한 값으로 채운다
    • 혼합 방법 : 여러 방법을 섞는다
  • 다중 대치(Multiple Imputation) : 대치 → 분석 → 결합의 3단계로, 여러 번 대치한 데이터셋 각각을 분석하고 결과를 합친다. 다중 대체법 참고
방법 기준
ESD(Extreme Studentized Deviation) 평균 ± 3σ 밖의 값
기하평균 활용 기하평균 ± 2.5σ 밖의 값
사분위수(IQR) Q1−1.5×IQR보다 작거나 Q3+1.5×IQR보다 큰 값 (IQR=Q3−Q1). 박스 플롯으로 확인한다
Z-score |z|=|(x−μ)/σ|가 기준(보통 3)을 넘는 값
마할라노비스 거리 변수 간 공분산을 고려한 다변량 거리가 큰 관측값
LOF(Local Outlier Factor) 이웃과 비교한 국소 밀도가 낮은 점
iForest(Isolation Forest) 무작위 분할에서 적은 횟수로 고립되는 점
DBSCAN 어떤 군집에도 속하지 않는 잡음(noise) 점
  • 삭제 : 오류로 판단되는 이상값을 지운다
  • 대체 : 평균, 중앙값, 상·하한값 등으로 바꾼다
  • 변환 : 로그·제곱근 변환으로 극단값의 영향을 줄인다(변수 변환)
  • 절단(Trimming) : 기준 밖의 값을 제거한다. 표본 수가 줄어든다
  • 조정(Winsorizing) : 기준 밖의 값을 기준 경계값으로 바꾼다. 표본 수는 유지된다
import pandas as pd

df = pd.DataFrame({"x": [10, 12, 11, 13, 12, None, 95]})
df["x"] = df["x"].fillna(df["x"].median())          # 결측값 중앙값 대치

q1, q3 = df["x"].quantile([0.25, 0.75])
iqr = q3 - q1
lo, hi = q1 - 1.5 * iqr, q3 + 1.5 * iqr
outliers = df[(df["x"] < lo) | (df["x"] > hi)]       # IQR 기준 이상값
df["x_win"] = df["x"].clip(lower=lo, upper=hi)       # 조정(winsorizing)
  • MCAR·MAR·MNAR을 사례로 구분하는 문제
  • Hot-deck과 Cold-deck의 차이, 다중 대치의 3단계
  • IQR 기준 이상값 경계 계산, 절단과 조정의 차이
  • 실기 작업형에서 결측값 대치 후 통계량 계산

정제와 변환의 구분

편집 원본 편집
  • 데이터 정제는 결측값 대체, 이상값 제거, 노이즈 교정처럼 데이터의 오류를 바로잡는 일이다.
  • 분석하기 쉬운 형태로 바꾸는 정규화·스케일링·형식 변환은 데이터 변환이다. "데이터를 사용하기 쉽게 변환하는 것" 은 정제가 아니다.
  • 품질 저하 위험은 비정형·반정형 데이터가 정형 데이터보다 크다. 그래서 정제는 외부·비정형 데이터를 우선한다.