[파이썬] statsmodels에서 잔차 분석

잔차 분석은 회귀 분석에서 모델의 적합성을 평가하는 중요한 단계입니다. 이는 예측값과 실제값 사이의 차이인 잔차(residual)를 살펴봄으로써 모델이 데이터를 얼마나 잘 설명하는지를 알 수 있습니다. 이번 포스트에서는 Python의 Statsmodels 라이브러리를 사용하여 잔차 분석을 수행하는 방법에 대해 알아보겠습니다.

Statsmodels는 회귀 분석, 시계열 분석, 비모수 추정 등 다양한 통계적 모델링을 위한 파이썬 라이브러리입니다. 잔차 분석을 수행하기 위해서는 먼저 Statsmodels를 설치해야 합니다. 다음 명령어를 사용하여 Statsmodels를 설치할 수 있습니다.

pip install statsmodels

잔차 분석을 위해 사용할 예제 데이터를 준비해 봅시다. 여기서는 농축수산물 가격과 기후요인 간의 관계를 분석하는 예제로 사용할 생각입니다.

import pandas as pd

data = {'Price': [15, 18, 20, 22, 25],
        'Temperature': [10, 13, 15, 17, 20],
        'Humidity': [30, 40, 50, 60, 70]}

df = pd.DataFrame(data)

Statsmodels를 사용하여 회귀 모델을 학습시키고 예측값과 잔차를 구해봅시다.

import statsmodels.api as sm

X = df[['Temperature', 'Humidity']]
y = df['Price']

X = sm.add_constant(X)  # 상수항을 추가합니다.

model = sm.OLS(y, X)
results = model.fit()

predictions = results.predict(X)
residuals = y - predictions

위 코드에서는 OLS 클래스를 이용하여 최소자승법(Ordinary Least Squares)을 이용한 선형 회귀 모델을 학습시킵니다. predict 메소드를 통해 예측값을 구하고, 실제값에서 예측값을 빼서 잔차를 구합니다.

이제 잔차를 분석하기 위해 다양한 통계적 척도를 계산할 수 있습니다. 예를 들어, 잔차의 평균, 표준편차, 최소값, 최대값 등을 살펴볼 수 있습니다.

mean_residuals = residuals.mean()
std_residuals = residuals.std()
min_residuals = residuals.min()
max_residuals = residuals.max()

print("Mean of residuals:", mean_residuals)
print("Standard deviation of residuals:", std_residuals)
print("Minimum residuals:", min_residuals)
print("Maximum residuals:", max_residuals)

Statsmodels는 또한 그래프를 통해 잔차를 시각화할 수도 있습니다. 예를 들어, 잔차의 분포를 히스토그램으로 확인할 수 있습니다.

import matplotlib.pyplot as plt

plt.hist(residuals, bins=10)
plt.xlabel("Residuals")
plt.ylabel("Frequency")
plt.title("Residuals Histogram")
plt.show()

위 예제 코드를 실행하면 잔차 분석을 위한 다양한 통계적 척도와 그래프를 얻을 수 있습니다. 이를 통해 모델이 데이터를 얼마나 잘 설명하는지를 확인하고, 모델 개선을 위한 방법을 찾을 수 있습니다.

잔차 분석은 회귀 분석 결과를 평가하는 중요한 과정이므로 꼭 수행해야 합니다. Statsmodels를 사용하여 잔차 분석을 쉽게 수행할 수 있으니, 회귀 분석을 할 때는 꼭 사용해보시기 바랍니다.