변수 선택으로 예측 모델의 복잡도와 해석력 조절하기

전진 선택, 후진 제거, 단계적 선택과 Lasso·Ridge·Elastic Net을 비교해 변수 선택 전략과 검증 방법을 정리합니다.

2026-08-14 · 최초 발행 2024-04-29

후보 변수에서 모델에 남길 신호를 고르는 일

변수 선택은 후보 설명변수 가운데 목표 변수 예측에 의미 있는 부분집합을 정하는 절차다. 불필요한 변수를 줄이면 과적합을 완화하고 모델을 단순하게 만들 수 있으며, 해석과 운영 비용 측면에서도 이점이 생긴다.

접근 방식은 크게 두 갈래다. 전진 선택·후진 제거·단계적 선택처럼 변수를 추가하거나 제거하며 탐색하는 단계형 방법이 있고, Lasso·Ridge·Elastic Net처럼 패널티를 적용하는 규제 기반 방법이 있다.

변수를 추가·제거하며 탐색하는 방법

전진 선택은 공변량이 없는 상태에서 시작한다. AIC/BIC, CV 점수, p-값 같은 성능 지표를 가장 크게 개선하는 변수를 한 개씩 넣는다. 더 이상 유의한 개선이 없거나, 사전에 정한 변수 수에 도달했거나, 정보 기준의 최소값에 이르면 멈춘다. 계산 효율은 양호하고 p << n 환경에 유리하지만, 강한 상관관계를 가진 변수가 많으면 잘못된 선택으로 이어질 수 있다.

후진 제거는 전체 변수 모델에서 출발해 통계적 유의성이 낮은 변수부터 단계적으로 뺀다. p < n 조건이 권장되며 다중공선성이 있으면 결과가 불안정해질 수 있다. 상호작용을 포함한 모델에서 시작할 수 있다는 유연성은 있지만, 초기 모델의 과적합과 계산량은 부담이 된다.

단계적 선택은 전진 방식과 후진 방식을 섞는다. 매 단계에서 변수의 추가와 제거를 다시 평가하며, p-값 임계값이나 AIC/BIC, CV 기반 개선 폭을 기준으로 삼는다. 탐색 효율을 높일 수 있지만 다중검정으로 인해 결과를 과신할 위험이 있고, 선택의 일관성이 떨어질 수 있다.

패널티로 계수와 변수 집합을 다루는 방법

Lasso는 가중치에 절대값 패널티를 부과한다. 계수가 희소해지면서 변수 개수가 자동으로 줄어들지만, λ(규제 강도)는 반드시 튜닝해야 한다.

Ridge는 계수를 축소해 분산을 낮추고 다중공선성을 완화한다. 변수를 제거하지는 않지만 안정적인 예측을 제공한다.

Elastic Net은 L1과 L2 패널티를 함께 사용한다. 상관된 변수 그룹의 선택을 안정화하며, p >> n 환경이나 고차원 희소 데이터에서 우수하다.

선택 결과를 확정하기 전에 확인할 것

회귀에서는 RMSE/MAE와 AIC/BIC를, 분류에서는 AUC/LogLoss와 AIC/BIC를 평가 지표로 쓸 수 있다. 업무 KPI도 판단 기준에 포함한다. one-standard-error 규칙, 정보 기준의 최소값, 유효한 CV 개선의 종료 여부가 정지 규칙이 된다.

선택 결과 자체의 안정성도 별도로 봐야 한다. 부트스트랩이나 재표본 기반 안정성 선택을 적용하고, 상관 변수 그룹에는 Elastic Net 또는 Group Lasso를 고려한다.

아니오아니오아니오경고통과입력: 데이터셋 X, y전처리 정책, 평가 지표,예산/제약데이터 분할:Train/Valid/Testk-fold 설정p n ?L1/Elastic Net 우선 고려순차 선택 또는 규제 기반 모두후보전처리: 스케일링/인코딩/결측처리파이프라인 캡슐화방법 선택Forward/Backward/Stepwise/Lasso/Ridge모델 적합 + 내부 CVλ 또는 특징 탐색개선 유의? (AIC/BIC, CV,p-값)선택 종료: 후보 변수 세트 확정안정성 체크: 재표본·fold간합의율안정성 기준 충족?최종 학습: Train∪Valid로재학습기준 완화/Elastic Net전환/그룹화출력: 선택 변수, 계수,성능(Valid/Test)품질 게이트: 누수/공선성/편향점검특징 공학/도메인 검토재시도배포 산출: 피처목록·스키마·파이프라인

데이터 누수가 감지되면 스케일러와 인코더의 학습 범위를 검증해야 한다. 파이프라인 없이 처리했다면 중단하는 편이 낫다. VIF나 조건수가 임계를 넘는 다중공선성 경고가 있으면 Ridge나 Elastic Net을 검토한다. fold 간 선택 일치율이 낮다면 안정성 선택 또는 그룹화가 필요하다.

데이터 특성에 따른 방법의 차이

방법 성능(예측) 확장성(고차원) 일관성(선택 안정성) 안정성(바이아스·분산) 운영 편의
전진 선택 중하 분산↑, 바이아스↓ 구현 용이, 속도 양호
후진 제거 낮음(p<n 권장) 중하 분산↑ 초기 계산량 큼
단계적 선택 중상 균형적 탐색 효율↑, 과신 위험
Lasso 중상 높음(p>>n) 중(희소/상관 시 변동) 바이아스↑, 분산↓ 자동화 용이
Ridge 상(예측) 높음 높음(계수 안정) 바이아스↑, 분산↓↓ 자동화 용이
Elastic Net 높음 중상(그룹 선택) 균형적 권장 기본값 대안

성능과 안정성은 데이터 특성에 따라 달라진다. 교차 검증과 튜닝이 전제다.

현장에서 만나는 변수 선택 문제

신용평가와 사기탐지에서는 수백 특성 가운데 핵심 변수를 식별하고, Lasso나 Elastic Net으로 희소 모델을 구성할 수 있다. 운영 규정을 충족하려면 해석 가능한 피처 세트도 유지해야 한다.

의료·생존 분석에서는 단계적 선택과 AIC/BIC로 임상지표를 고른 뒤, Ridge로 공선성을 완화할 수 있다. 마케팅 반응 예측은 전진 선택으로 캠페인과 고객 속성의 핵심 변수를 추려 테스트 비용을 줄이는 방식으로 접근한다.

제조 공정 모니터링에서는 Elastic Net이 센서 간 다중공선성 처리와 이상 탐지 모델의 안정화에 쓰인다. 텍스트나 고차원 유전체처럼 p>>n인 환경에서는 Lasso와 Elastic Net으로 차원 축소와 변수 선택을 함께 수행할 수 있다.

Python에서 파이프라인으로 묶기

Python 3.10+, scikit-learn 1.4+, statsmodels 0.14+, mlxtend 0.23+ 환경을 전제로 한다. 회귀와 분류 모두 데이터 분할, 전처리, 모형을 하나의 Pipeline으로 묶어 누수를 막는 패턴을 적용한다.

Train/Valid/Test 분할 또는 nested CV를 구성한 뒤, 그리드나 랜덤 서치로 λ 또는 특징 수를 탐색한다. 재표본을 반복하며 선택 빈도를 기록하고, 확정한 변수로 재학습한 뒤 Test에서 평가한다.

# Python 3.10, scikit-learn 1.4
from sklearn.model_selection import train_test_split, KFold, GridSearchCV
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import Lasso, Ridge
from sklearn.pipeline import Pipeline
from sklearn.metrics import mean_squared_error
import numpy as np

X, y = ...  # 입력: ndarray 또는 DataFrame
X_tr, X_te, y_tr, y_te = train_test_split(X, y, test_size=0.2, random_state=42)

cv = KFold(n_splits=5, shuffle=True, random_state=42)

pipe = Pipeline([
    ("scaler", StandardScaler(with_mean=True)),
    ("model", Lasso(max_iter=10000, random_state=42))
])

param_grid = {
    "model": [Lasso(max_iter=10000, random_state=42), Ridge(random_state=42)],
    "model__alpha": np.logspace(-3, 2, 12)  # λ 탐색
}

g = GridSearchCV(pipe, param_grid, cv=cv, scoring="neg_root_mean_squared_error", n_jobs=-1)
g.fit(X_tr, y_tr)

print("Best model:", type(g.best_estimator_.named_steps["model"]).__name__)
print("Best alpha:", g.best_estimator_.named_steps["model"].alpha)
rmse = mean_squared_error(y_te, g.predict(X_te), squared=False)
print("Test RMSE:", rmse)

순차 선택에는 SequentialFeatureSelector를 사용할 수 있다. 부유형 선택은 floating=True로 설정한다.

# Python 3.10, scikit-learn 1.4, mlxtend 0.23
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import roc_auc_score
from mlxtend.feature_selection import SequentialFeatureSelector as SFS
from sklearn.model_selection import StratifiedKFold
import numpy as np

X, y = ...  # 분류 데이터
base = Pipeline([
    ("scaler", StandardScaler()),
    ("clf", LogisticRegression(penalty="l2", solver="lbfgs", max_iter=200))
])

cv = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)

# 전진 선택
sfs_fwd = SFS(base, k_features=(1, 25), forward=True, floating=False,
              scoring="roc_auc", cv=cv, n_jobs=-1)
sfs_fwd = sfs_fwd.fit(X, y)
print("Forward selected idx:", sfs_fwd.k_feature_idx_)

# 단계적 선택(부유형: floating=True)
sfs_step = SFS(base, k_features="best", forward=True, floating=True,
               scoring="roc_auc", cv=cv, n_jobs=-1)
sfs_step = sfs_step.fit(X, y)
print("Stepwise(best k):", len(sfs_step.k_feature_idx_))

SFS 내부에서도 파이프라인을 사용해 스케일러의 학습 범위를 제한한다. 상관계수와 VIF를 확인하고 Ridge나 Elastic Net 적용을 검토한다. Lasso로 변수를 고른 뒤 OLS 또는 Logit 무패널티 모델로 재적합하면 해석성을 높일 수 있지만, CV 재검증이 필요하다. 불균형 분류에서는 Stratified CV와 AUC-PR 같은 적합한 지표를 사용한다.

성능만으로 선택을 끝내지 않는 이유

nested CV는 선택 편향을 줄이는 데 도움이 되며, one-standard-error 규칙은 더 간명한 모델을 고르는 기준이 된다. 상관 변수 군집이 있으면 Elastic Net 또는 Group Lasso를 적용하고, bootstrap 기반 선택 빈도 ≥ 일정 임계를 만족하는 안정성 선택을 채택할 수 있다.

단계형 선택 뒤의 p-값은 선택 편향 때문에 보수적으로 해석해야 한다. 사후 추론(Post-selection inference)이나 데이터 분할 기반 유의성 검증을 고려한다.

운영 단계에서는 피처 카탈로그와 스키마를 버전 관리하고 데이터 드리프트를 모니터링한다. 비용 제약이 있다면 측정 비용이 높은 피처에 가중 패널티를 적용하는 Feature cost-aware selection도 검토 대상이다.

Lasso는 희소성과 단순성을 얻는 대신 약간의 편향을 수용한다. Ridge는 예측 안정성을 높이지만 해석을 위해 변수를 제거할 수는 없다. 단계형 방법은 해석에 유리한 반면 다중검정 리스크와 불안정성을 감수해야 한다.

피처를 100→15개로 축소하면 학습·추론 시간은 6080% 단축되고 메모리 사용량은 5070% 감소한다. 교차 검증 AUC/RMSE가 2~5%p 개선된 사례도 다수이며, 특히 p>>n·공선성 환경에서 효과적이다. 해석 가능성이 높아지면 도메인 의사결정 속도가 증가하고, 운영이 단순해져 배포 안정성·재현성 및 규제·감사 대응도 개선된다.

p>>n이고 공선성이 높다면 Elastic Net 또는 Lasso를 우선 검토할 수 있다. 변수 수가 적고 해석이 중요하다면 단계형 선택과 정보 기준을 함께 사용한다. 어떤 방법이든 검증 일관성, 안정성 선택, 누수 방지 같은 절차적 통제가 선택 결과만큼 중요하다.

변수 선택머신러닝통계 모델링정규화교차 검증