[파이썬] statsmodels에서 모델 선택

statsmodels logo

statsmodels는 Python에서 통계 분석을 수행하는 강력한 라이브러리입니다. 이 라이브러리는 다양한 통계 모델을 적합하고, 추정하고, 검증하며, 예측하는 데 사용됩니다. 그 중에서도 모델 선택은 머신 러닝 및 통계 모델링 작업에서 매우 중요한 부분입니다.

모델 선택은 주어진 데이터에 가장 적합한 모델을 선택하는 과정을 의미합니다. statsmodels는 많은 모델 선택 기법을 제공하여 이러한 작업을 수행할 수 있게 합니다.

교차 검증을 통한 모델 선택

교차 검증은 일반화 성능을 추정하기 위해 모델을 여러 번 학습 및 평가하는 방법입니다. statsmodels는 여러 가지 방식의 교차 검증 기법을 지원합니다. 예를 들어, k-fold 교차 검증은 데이터를 k개의 부분 집합으로 나누고, 각 부분 집합을 순차적으로 테스트 세트로 사용하여 모델을 평가합니다. 이를 통해 모델이 다른 데이터에도 일반화될 수 있는지 확인할 수 있습니다.

import numpy as np
import statsmodels.api as sm
from sklearn.model_selection import KFold

# 데이터 로드
data = sm.datasets.get_rdataset('mtcars').data

# 특성과 타겟 변수 분리
X = data[['mpg', 'hp', 'wt']]
y = data['qsec']

# k-fold 교차 검증
kf = KFold(n_splits=5, shuffle=True, random_state=42)

for train_index, test_index in kf.split(X):
    X_train, X_test = X.iloc[train_index], X.iloc[test_index]
    y_train, y_test = y.iloc[train_index], y.iloc[test_index]
    
    # 모델 초기화 및 학습
    model = sm.OLS(y_train, sm.add_constant(X_train))
    results = model.fit()
    
    # 모델 평가
    predictions = results.predict(sm.add_constant(X_test))
    mse = np.mean((y_test - predictions) ** 2)
    print(f"Mean Squared Error: {mse}")

위 코드에서는 mtcars 데이터셋을 사용하여 회귀 모델을 적합하기 위해 statsmodelssklearn을 함께 사용했습니다. KFold 클래스를 사용하여 k-fold 교차 검증을 수행하고, 각 폴드에서 모델을 학습하고 평가하는 과정을 반복하였습니다. 평가 지표로는 평균 제곱 오차(Mean Squared Error, MSE)를 사용하였습니다.

정보 기준을 사용한 모델 선택

데이터에 대한 정보 기준을 기반으로하여 모델 선택을 수행할 수도 있습니다. 예를 들어, BIC(Bayesian Information Criterion)는 데이터 적합성을 평가하는 지표로 사용되며, 복잡성에 패널티를 부과하여 모델의 과적합을 방지합니다.

# 데이터 로드
data = sm.datasets.get_rdataset('mtcars').data

# 특성과 타겟 변수 분리
X = data[['mpg', 'hp', 'wt']]
y = data['qsec']

models = []
for feature in X.columns:
    # 모델 초기화 및 학습
    X_temp = X[[feature]]
    model = sm.OLS(y, sm.add_constant(X_temp))
    results = model.fit()
    
    # BIC 계산
    bic = results.bic
    models.append((feature, bic))

# BIC가 가장 작은 모델 선택
best_model = min(models, key=lambda x: x[1])
print(f"Best Model: {best_model[0]}, BIC: {best_model[1]}")

위 코드에서는 mtcars 데이터셋을 사용하여 단일 특성을 사용한 회귀 모델의 BIC 값을 계산하고, 가장 작은 BIC 값을 가진 모델을 선택하였습니다.

statsmodelsOLS 클래스를 사용하여 회귀 모델을 초기화하고 학습한 후, results.bic 속성을 사용하여 BIC 값을 계산할 수 있습니다.

결론

statsmodels는 다양한 모델 선택 기법을 제공하여 데이터에 가장 적합한 모델을 선택하는 데 도움을 줍니다. 교차 검증 및 정보 기준을 사용하여 모델 선택을 수행할 수 있으며, 이를 통해 모델의 일반화 성능을 향상시킬 수 있습니다. 자세한 내용은 statsmodels의 공식 문서를 참조하시기 바랍니다.

Happy coding!