In [1]시간 분할로 단독 vs 부트스트랩 비교
from sklearn.linear_model import LogisticRegression
from sklearn.utils import resample
cutoff = pd.Timestamp('2025-09-01')
tr_raw = train_df[train_df['snapshot_date'] < cutoff].copy()
val_raw = train_df[train_df['snapshot_date'] >= cutoff].copy()
tr_proc = fill_missing(tr_raw, ref=tr_raw)
val_proc = fill_missing(val_raw, ref=tr_raw)
X_tr = pp.fit_transform(tr_proc[feature_cols])
X_val = pp.transform(val_proc[feature_cols])
single_model = LogisticRegression(C=0.01, class_weight='balanced', max_iter=1000, random_state=42)
single_model.fit(X_tr, y_tr)
single_auc = roc_auc_score(y_val, single_model.predict_proba(X_val)[:, 1])
boot_probas = []
for i in range(10):
X_res, y_res = resample(X_tr, y_tr, random_state=i, replace=True)
m = LogisticRegression(C=0.01, class_weight='balanced', max_iter=1000, random_state=i)
m.fit(X_res, y_res)
boot_probas.append(m.predict_proba(X_val)[:, 1])
boot_auc = roc_auc_score(y_val, np.mean(boot_probas, axis=0))
print(f'(시간분할) LogReg single AUC: {single_auc:.5f}')
print(f'(시간분할) LogReg bootstrap(10) ensemble AUC: {boot_auc:.5f}')