Image Exclusive Model 학습에 사용되는 수치형 테이블 데이터에는 일부 결측값이 존재한다.
이에 MICE(Multivariate Imputation by Chained Equations) 기법이 해당 결측값을 얼마나 신뢰성 있게 복원할 수 있는지를 정량적으로 검증해보고자 한다.
즉, MICE가 실제 결측 데이터에 적용되기 전에, 완전한 데이터셋에서 인위적으로 결측을 주입한 뒤 복원 성능을 측정함으로써,이 기법의 타당성을 평가한다.
본 검증에는 Image Exclusive Model 학습용 테이블 데이터를 사용하였다.
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 6058 entries, 0 to 6057
Data columns (total 19 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 ID 6058 non-null object
1 Phase 6058 non-null int64
2 color_Ur 6058 non-null float64
3 color_gr 6058 non-null float64
4 color_gi 6058 non-null float64
5 SFR_200Myr 6057 non-null float64
6 AxisRatio 5462 non-null float64
7 B_T 4482 non-null float64
8 SurfaceBrightness 6058 non-null float64
9 EffectiveRadius 6058 non-null float64
10 AbsMag_U 6058 non-null float64
11 AbsMag_B 6058 non-null float64
12 AbsMag_V 6058 non-null float64
13 AbsMag_g 6058 non-null float64
14 AbsMag_r 6058 non-null float64
15 AbsMag_i 6058 non-null float64
16 StellarMass 6058 non-null float64
17 StellarMetallicity 6058 non-null float64
18 StellarVelDispersion 6058 non-null float64
dtypes: float64(17), int64(1), object(1)
memory usage: 899.4+ KB
None
결측치 갯수
ID 0
Phase 0
color_Ur 0
color_gr 0
color_gi 0
SFR_200Myr 1
AxisRatio 596
B_T 1576
SurfaceBrightness 0
EffectiveRadius 0
AbsMag_U 0
AbsMag_B 0
AbsMag_V 0
AbsMag_g 0
AbsMag_r 0
AbsMag_i 0
StellarMass 0
StellarMetallicity 0
StellarVelDispersion 0
dtype: int64
MICE 타당성 검증을 위해 이미 결측값이 존재하는 피처는 제외하고,
결측이 없는 나머지 피처들에서 인위적으로 결측치를 주입(MCAR) 하여 복원 성능을 측정하고자 한다.
1. 완전한 행(Complete Row) 추출
원본 데이터에서 결측이 전혀 없는 행만 선택하여 검증용 데이터셋(df_full)을 구성하였다.
이 단계는 이후 인위적으로 결측치를 주입했을 때 ground truth와의 직접적인 비교가 가능하도록 하기 위함이다.
df_full = df_all.dropna(axis=0, how='any').copy()
2. 인위적 결측 주입 (MCAR 방식)
각 피처에 대해 전체 샘플 중 일정 비율(MISSING_FRAC = 0.2)의 값을 무작위로 제거하였다.
이 방식은 MCAR (Missing Completely At Random) 가정 하에서 결측치를 생성하는 것으로,
실제 결측이 랜덤하게 발생한다고 가정하여 MICE의 복원 능력을 공정하게 평가하기 위한 목적이다.
def introduce_missing_values(df_in, col, frac=0.2, random_state=42):
"""특정 컬럼에 frac 비율만큼 결측치(MCAR) 주입"""
df_tmp = df_in.copy()
rng = np.random.default_rng(random_state)
n = len(df_tmp)
n_miss = max(1, int(n * frac))
miss_idx = rng.choice(df_tmp.index.values, size=n_miss, replace=False)
df_tmp.loc[miss_idx, col] = np.nan
return df_tmp, miss_idx
3. MICE 복원
IterativeImputer를 이용하여 다변량 회귀 기반의 결측치 복원을 수행하였다.
MICE는 각 피처를 타 피처들의 회귀식으로 반복적으로 예측하여 결측값을 채우는 방식이다.
복원은 여러 피처의 상관관계를 고려해 순차적으로 진행되며, 반복(iteration)을 통해 수렴한다.
매개변수 설정은 다음과 같다.
def run_mice(df_in, random_state=42, max_iter=20):
"""IterativeImputer(MICE)로 결측 보간"""
imputer = IterativeImputer(
random_state=random_state,
max_iter=max_iter,
sample_posterior=False,
skip_complete=True
)
arr_imp = imputer.fit_transform(df_in)
return pd.DataFrame(arr_imp, columns=df_in.columns, index=df_in.index)
4. 성능 평가 지표




colorUr, color_gr, color_gi, AbsMag* 전반, EffectiveRadius


[0,1] 범위 피처 AxisRatio, B_T에 대해 로지트 변환(→MICE→시그모이드 역변환) 적용
적용 대상: AxisRatio, B_T
의도: 선형회귀에 적합하도록 확률공간을 실수선으로 펼친 뒤(MICE), 역변환으로 자동 [0,1] 보장.
개선 효과



비음수 물리량 EffectiveRadius, StellarMass, StellarVelDispersion, StellarMetallicity에 대해 MICE 출력 후 해당 피처들만 clip(0, ∞) 적용
개선 효과



결론