728x90
728x90

Imputation이란:
Data Science와 ML에서 "impute"는
- 누락된 데이터(missing data)를 (합리적인) 대체값으로 채우는 과정을 의미
- 이는 '대체', '귀속', 또는 '채워넣기'로 번역될 수 있음.
Dataset을 다룰 때,
- 누락된 데이터가 있는 전체 행이나 열을 제거하는 대신,
- imputation은 다른 가용한 features 나 선행정보(prior)를 바탕으로 missing values를 추정하여 채워넣는 방법.
Imputation에서는
Training set 만을 사용하여
채워넣을 값을 구함.
종류
주요 imputation은 다음과 같음:
- mean/median imputation:
- 해당 특성의 mean이나 median으로 missing values을 대체
- mode(최빈값) imputation:
- 가장 빈번한 값을 사용하여 누락된 데이터를 채움
- regression imputation:
- 다른 변수들을 기반으로 누락된 값을 예측
- regression model들이 사용됨.
- multiple imputation:
- 여러 개의 타당한 대체 데이터셋을 생성하고
- 각각에서 얻은 결과를 적절히 결합
Multiple Imputation의 간단한 예
더보기
100명의 학생들의 수학 시험 점수 데이터가 있다고 가정.
그 중 10명의 학생들의 점수가 누락된 경우 multiple imputation을 사용하면 다음과 같은 과정을 거침:
1. 여러 개의 대체 데이터셋 생성:
예를 들어, 5개의 서로 다른 완전한 데이터셋을 생성.
각 데이터셋에서 누락된 10개의 점수는 다른 학생들의 점수, 학년, 이전 성적 등을 고려하여 서로 다르게 추정.
2. 각 데이터셋 분석:
5개의 각 데이터셋에 대해 원하는 분석(예: 평균 점수 계산)을 수행.
3. 결과 종합:
5개의 분석 결과를 결합하여 최종 결과를 얻음.
예를 들어, 5개의 평균 점수의 평균을 계산하고, 분산을 고려하여 신뢰 구간을 계산 등등.
이 방법을 통해,
- 단순히 하나의 값(예: 전체 평균)으로 누락된 점수를 대체하는 것보다
- 더 정확하고 신뢰할 수 있는 결과를 얻을 수 있음.
- 또한, 결과의 불확실성도 함께 제시할 수 있다는 장점도 가짐.
sklearn.impute.SimpleImputer
SimpleImputer를 활용한 간단한 예제
import numpy as np
import pandas as pd
from sklearn.impute import SimpleImputer
# 샘플 데이터 (NaN 포함)
data = {
"age": [25, np.nan, 28, 35, np.nan],
"salary": [50000, 54000, np.nan, 58000, 62000]
}
df = pd.DataFrame(data)
print("원본 데이터:")
print(df)
# 평균(mean)으로 결측값 대체
imputer = SimpleImputer(strategy="mean")
df_imputed = pd.DataFrame(imputer.fit_transform(df), columns=df.columns)
print("\n결측값 대체 후:")
print(df_imputed)
- mean 이나 median과 같은 strategy는 numeric data에만 적용 가능함
- 해당 columns로만 구성된 데이터에만 fit 가능.
- 사용가능한 strategy는 다음과 같음:
- "mean" : 각 column의 평균값으로 NaN 대체
- "median" : median으로 대체
- "most_frequent" : numeric data가 아닌 categorical data column에도 적용가능함.
- "constant" : fill_value 파라미터에 채울 상수를 지정해야 함 (기본은 0). numeric data가 아닌 categorical data에도 적용가능.
- 많이 애용되는 attributes는 다음과 같음:
- statistics_ : 계산된 통계치들. column의 수만큼의 요소를 가지는 ndarray 객체임.
- strategy : 사용된 imputation 방식.
- feature_names_in_ : fit에 주어진 데이터의 column들의 라벨 (DataFrame객체에 대해 fit한 경우 설정됨)
underscore( _ , 밑줄)로 끝나는 attribute는
fit() 이후에 생기는 학습 결과(추정된 값, learned parameter) 를 의미
728x90
'Programming > ML' 카테고리의 다른 글
| [ML] Yeast Dataset (0) | 2024.10.05 |
|---|---|
| [ML] kNN Classifier (k-Nearest Neighbors Classifier) (0) | 2024.10.05 |
| [ML] scikit-learn: FunctionTransformer (0) | 2024.10.03 |
| [ML] scikit-learn: Pipeline 사용법 (0) | 2024.10.03 |
| [ML] scikit-learn: ColumnTransformer (0) | 2024.10.03 |