susinlee 님의 블로그

결측치 본문

학습/머신러닝

결측치

susinlee 2025. 1. 30. 16:26

요약 및 결론

  • 결측치는 데이터 셋에서 누락된 값을 의미
  • 결측치에는 세 가지 유형이 있음 (MACR, MAR, MNAR)
  • 결측치의 유형에 따라 처리 방법을 다르게 선택해야 함
  • 다순한 평균/중앙값 대체는 편리하지만, 데이터의 불확실성을 반영하지 못함
  • 변수 간 상관관계가 높다면 다중 대체법이나 예측 모델 기반 대체를 사용하는 것이 더 적합
  • 결측 여부 자체가 중요한 정보라면, 이를 새로운 변수로 활용하는 것도 효과적

결측치(Missing Value)란?

결측치는 데이터 분석에서 자주 발생하는 문제로, 데이터 셋에서 값이 누락된 경우를 의미함. 이는 데이터 입력 과정에서의 실수, 수집 과정에서의 한계 또는 응답자의 응답 거부 등 다양한 이유를 발생함. 이를 적절히 처리하지 않으면 모델의 성능과 해석에 큰 영향을 미칠 수 있음.

 

예시 데이터 : 부동산 매물 정보와 허위매물여부를 나타내는 2차원 형태의 데이터

 

결측치의 유형

  1. MACR (Missing Completely at Random)
    • 결측값이 완전히 무작위로 발생하며, 다른 변수나 관측치와 연관되지 않은 경우
    • 예: 데이터 입력 오류로 인해 임의의 행에서 전용면적이 누락된 경우
  2. MAR (Missing at Random)
    • 결측값이 무작위가 아니며, 다른 관측된 변수와 관련이 있는 경우
    • 예: 방향의 결측값 발생이 관리비와 관련이 있고, 방향 자체는 허위매물 여부(타겟 변수)와는 관련이 없음
  3. MNAR (Missing Not at Random)
    • 결측값이 무작위가 아니며, 결측 자체가 타겟 변수와 연관이 있는 경우
    • 예: 방향의 결측이 허위매물 여부와 직접적으로 관련이 있는 경우. 허위 매물일 가능성이 높을수록 "방향" 정보가 의도적으로 누락되었을 때

 

결측치 처리 방법

결측치를 처리하는 방법은 데이터의 특성과 결측치의 유형에 따라 다름

  1. 결측치 제거
    • 결측치가 데이터의 극히 일부이고, 삭제해도 분석에 영향을 주지 않을 때 적합
    • 매물 정보가 매우 중요한 보증금, 월세 등의 변수에 결측치가 있는 경우
  2. 단순 대체
    1. 평균 또는 중앙값 대체
      • 수치형 변수에서 많이 사용되며, 데이터 분포가 크게 왜곡되지 않을 때 적합
      • 예: 관리비 변수의 결측치를 중앙값으로 대체
    2. 최빈값 대체
      • 범주형 변수에 적합
      • 예: 방향의 결측치를 최빈값으로 대체
  3. 다중 대체
    • 변수 간 상관관계를 활용해 결측치를 예측하여 대체
    • 보증금, 월세, 관리비 등 상관관계가 높은 변수가 결측될 경우 사용
    • 예: 보증금 결측치를 월세 및 전용면적 데이터를 기반으로 추정
    • sklearn의 IterativeImputer
  4. 예측 모델 기반 대체
    • 머신러닝 모델을 사용해 결측값을 예측
    • 예: 관리비 결측치를 보증금, 월세, 전용면적을 입력값으로 하는 회귀 모델을 예측
    •  
  5. 결측치 자체를 정보로 활용
    • 결측 여부 자체가 중요한 특징일 수 있음
    • 예: 보증금이 결측인 경우 해당 매물이 허위일 가능성을 높게 판단

단순 대체

from sklearn.impute import SimpleImputer

# 평균으로 결측값 대체
imputer = SimpleImputer(strategy='mean')
df_imputed = pd.DataFrame(imputer.fit_transform(df), columns=df.columns)

 

 

다중 대체 활용법 (MICE 사용)

from sklearn.impute import IterativeImputer

imputer = IterativeImputer(random_state=42)
df[['보증금', '월세', '관리비']] = imputer.fit_transform(df[['보증금', '월세', '관리비']])

 

 

예측 모델 기반 대체

from sklearn.ensemble import RandomForestRegressor

# 결측치가 없는 데이터로 모델 학습
train = df[df['관리비'].notnull()]
test = df[df['관리비'].isnull()]
model = RandomForestRegressor(random_state=42)
model.fit(train[['보증금', '월세', '전용면적']], train['관리비'])

# 결측치 예측 및 대체
df.loc[df['관리비'].isnull(), '관리비'] = model.predict(test[['보증금', '월세', '전용면적']])

'학습 > 머신러닝' 카테고리의 다른 글

앙상블  (0) 2025.02.02
분류  (0) 2025.01.29
군집  (0) 2025.01.26