🏡 Housing EBM + DoWhy 리포트

California Housing — EBM 회귀 모델 + DoWhy 인과추론 통합 분석
EBM Regressor R²=0.8474 DoWhy Backdoor 18,350 rows

데이터 준비

California Housing 원본 20,640개 레코드에서 이상치 제거 후 18,350개 블록을 분석에 사용한다.

ℹ️ IQR 이상치 제거 범위: AveRooms, AveOccup, Population 3개 피처에만 적용. MedHouseVal(결과 변수)은 제거 대상에서 제외 — 5.0 천장값(1,071 rows = 5.2%)은 데이터 수집 제한으로 유지.
20,640
원본 레코드
18,350
이상치 제거 후
5.2%
집값 천장값 비율
from sklearn.datasets import fetch_california_housing
import pandas as pd

data = fetch_california_housing(as_frame=True)
housing = data.frame  # 20,640 rows

# IQR 이상치 제거 (결과 변수 제외)
outlier_cols = ['AveRooms', 'AveOccup', 'Population']
mask = pd.Series(True, index=housing.index)
for col in outlier_cols:
    Q1, Q3 = housing[col].quantile([0.25, 0.75])
    IQR = Q3 - Q1
    mask &= (housing[col] >= Q1 - 1.5*IQR) & (housing[col] <= Q3 + 1.5*IQR)
housing_clean = housing[mask]  # 18,350 rows

EDA 핵심 인사이트

상관관계

MedInc ↔ MedHouseVal

피어슨 상관 r = 0.688 — 피처 중 집값과 가장 강한 선형 상관을 보이는 변수. EBM이 이를 인과 분석의 처치 변수로 지목.

분포 특성

집값 천장값 (Ceiling)

MedHouseVal = 5.0 (즉 $500,000)에 1,071건(5.2%) 집중. 1990년 데이터 수집 제한으로 발생. EBM이 비선형 포화 효과를 포착.

지리적 클러스터

LA / SF 이중 봉우리 분포

Latitude·Longitude 산점도에서 로스앤젤레스(34°N)와 샌프란시스코(37.5°N) 두 클러스터가 명확히 분리된다. 두 도시의 집값 구조가 다르므로 지리 좌표가 EBM 피처 중요도 1·2위를 차지.

EBM 회귀 모델 결과

from interpret.glassbox import ExplainableBoostingRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score
import numpy as np

X = housing_clean.drop(columns=['MedHouseVal'])
y = housing_clean['MedHouseVal']

X_temp, X_test, y_temp, y_test = train_test_split(
    X, y, test_size=0.1, random_state=42)
X_train, X_val, y_train, y_val = train_test_split(
    X_temp, y_temp, test_size=0.1111, random_state=42)

ebm = ExplainableBoostingRegressor(
    max_bins=256,
    interactions=5,
    random_state=42
)
ebm.fit(X_train, y_train)

val_pred = ebm.predict(X_val)
print(f"Val RMSE: {np.sqrt(mean_squared_error(y_val, val_pred)):.4f}")
print(f"Val R²:   {r2_score(y_val, val_pred):.4f}")
print(f"Test R²:  {r2_score(y_test, ebm.predict(X_test)):.4f}")
0.4599
Val RMSE
0.8474
Val R²
0.8377
Test R²
✅ R² 0.8474 — EBM이 Black-box 수준의 예측 성능을 내면서 각 피처 기여도를 Shape Function으로 완전히 설명. Val → Test 성능 차이(0.0097)가 작아 과적합 없음.

EBM 피처 중요도

지리 좌표(위도·경도)가 1·2위를 차지하는 것은 LA/SF 이중 클러스터 구조 때문이다. 소득(MedInc)은 3위로, 강한 인과 후보 피처임을 확인.

1위 · Latitude (위도)
중요도 ~0.95 — LA(34°N) vs SF(37.5°N) 이중 봉우리 분리
2위 · Longitude (경도)
중요도 ~0.83 — 해안 근접도 및 도시 위치 반영
3위 · MedInc (중위 소득)
중요도 ~0.45 — 인과분석의 처치 변수, 강한 단조 증가 shape
4위 · AveOccup (평균 가구원)
중요도 ~0.28 — 과밀 주거 시 집값 하락 패턴
5위 · AveRooms (평균 방 수)
중요도 ~0.20 — 방 수 많을수록 집값 상승, 비선형 포화
피처중요도역할
Latitude~0.95지역 위치 (EBM 예측용)
Longitude~0.83지역 위치 (EBM 예측용)
MedInc~0.45처치 변수 (DoWhy 인과분석)
AveOccup~0.28교란 변수 (DoWhy DAG)
AveRooms~0.20교란 변수 (DoWhy DAG)
HouseAge~0.15교란 변수 (DoWhy DAG)

DoWhy 인과분석 — MedInc → MedHouseVal

EBM이 MedInc를 3위 중요 피처로 지목하면, DoWhy가 이것이 실제 인과 효과인지 검증한다. 지리 좌표(Latitude, Longitude)를 추가 교란 변수로 통제.

from dowhy import CausalModel

model = CausalModel(
    data=housing_clean,
    treatment='MedInc',
    outcome='MedHouseVal',
    graph="""
        digraph {
            Latitude -> MedInc; Latitude -> MedHouseVal;
            Longitude -> MedInc; Longitude -> MedHouseVal;
            AveRooms -> MedInc; AveRooms -> MedHouseVal;
            AveOccup -> MedInc; AveOccup -> MedHouseVal;
            MedInc -> MedHouseVal;
        }
    """
)

identified = model.identify_effect(proceed_when_unidentifiable=True)
estimate = model.estimate_effect(
    identified,
    method_name="backdoor.linear_regression"
)
print(f"ATE: {estimate.value:.4f}")  # 단위: $100,000
⚠️ Housing EBM+DoWhy에서 Latitude/Longitude를 교란 변수로 추가하는 이유: 지리적 위치가 소득 구조(MedInc)와 집값(MedHouseVal) 모두에 영향을 미치는 교란이기 때문이다.
+$35,390
MedInc $10K 상승 시 ATE
(Latitude/Longitude 통제 후)
4개
통제 교란 변수
(Lat/Lon/AveRooms/AveOccup)

종합 인사이트

EBM이 밝힌 것

집값의 지리 의존성

위도·경도가 1·2위 — California 집값은 "어디에 있는가"가 "어떤 집인가"보다 중요하다. LA/SF 이중 시장 구조를 EBM Shape Function이 비선형으로 포착.

DoWhy가 밝힌 것

소득의 순수 인과 효과

지역 특성을 모두 통제해도 소득 $10K 상승 → 집값 +$35,390의 인과 효과가 남는다. 부유층 유입이 실제로 집값을 밀어올린다는 인과적 증거.

"EBM은 '어디서 얼마짜리 집인지' 예측하고, DoWhy는 '소득이 오르면 집값이 얼마나 오르는지' 인과적으로 측정한다. 두 방법의 조합이 데이터 과학의 전체 그림이다."