이상치(outliers)는 통계 데이터 분석에서 심각한 문제가 될 수 있습니다. 이상치는 데이터 세트의 다른 점들과 동떨어진 값을 나타내며, 모델의 정확도를 저하시킬 수 있습니다. 이상치를 처리하는 방법 중 하나는 Statsmodels 패키지를 사용하는 것입니다. Statsmodels는 파이썬 통계 모델링을 위한 강력한 라이브러리로, 통계적 추론, 회귀분석, 시계열 분석 등의 기능을 제공합니다.
이 블로그 포스트에서는 Statsmodels를 사용하여 이상치를 처리하는 여러 방법에 대해 알아보겠습니다.
1. 이상치 탐지
먼저, 이상치를 식별하기 위해 데이터를 탐지해야 합니다. Statsmodels는 이를 위해 다양한 방법을 제공합니다.
1.1. 표준화 잔차
가장 일반적인 이상치 탐지 방법 중 하나는 표준화 잔차를 사용하는 것입니다. 표준화 잔차는 모델에서 예측한 값과 실제 관측값 사이의 차이를 나타내며, 잔차의 표준 편차로 나누어 정규화합니다. 표준화 잔차가 일정 임계 값을 초과하는 경우, 해당 데이터 포인트를 이상치로 간주할 수 있습니다.
import numpy as np
import statsmodels.api as sm
# 데이터 생성
x = np.random.randn(100)
y = 2 * x + np.random.randn(100)
# 모델 피팅
X = sm.add_constant(x)
model = sm.OLS(y, X)
results = model.fit()
# 표준화 잔차 계산
residuals = results.resid
std_residuals = (residuals - np.mean(residuals)) / np.std(residuals)
1.2. Cook’s Distance
Cook’s Distance는 레버리지와 표준화 잔차의 결합 척도로, 이상치를 식별하는 데 사용됩니다. 이상치는 Cook’s Distance 값이 임계값 이상인 데이터 포인트로 간주할 수 있습니다.
import statsmodels.stats.outliers_influence as oi
# Cook's Distance 계산
influence = results.get_influence()
cd = influence.cooks_distance
# 이상치 식별
outliers = np.where(cd > 0.05)[0]
2. 이상치 처리
탐지된 이상치를 처리하는 방법에는 여러 가지가 있습니다. 어떤 방법을 선택할지는 데이터와 모델에 따라 달라집니다. 여기에서는 대표적인 두 가지 방법을 살펴보겠습니다.
2.1. 이상치 제거
가장 간단한 방법은 이상치를 제거하는 것입니다. 이를 위해 탐지된 이상치를 데이터에서 제외하고 모델을 다시 피팅합니다.
# 이상치 제거
clean_x = np.delete(x, outliers)
clean_y = np.delete(y, outliers)
# 모델 재피팅
clean_X = sm.add_constant(clean_x)
clean_model = sm.OLS(clean_y, clean_X)
clean_results = clean_model.fit()
2.2. 이상치 대체
이상치를 감지한 후, 이를 다른 값으로 대체하는 방법도 있습니다. 대체값은 데이터의 분포, 통계적 속성 등을 고려하여 결정해야 합니다.
# 이상치 대체
replaced_y = y.copy()
replaced_y[outliers] = np.mean(y)
# 모델 피팅
replaced_X = sm.add_constant(x)
replaced_model = sm.OLS(replaced_y, replaced_X)
replaced_results = replaced_model.fit()
결론
Statsmodels를 사용하여 이상치를 처리하는 방법에 대해 알아보았습니다. 이상치는 통계적 모델을 구성할 때 고려해야 하는 중요한 요소이며, 적절한 처리 방법을 통해 모델의 정확도를 향상시킬 수 있습니다. Statsmodels의 다양한 기능을 활용하여 이상치 처리를 진행해보세요.