pandas

OLS get_influence 활용 방법

난개발자 2025. 2. 16. 21:40
728x90

statsmodels는 파이썬에서 회귀 분석을 수행할 때 널리 사용되는 라이브러리다. 특히 OLS(Ordinary Least Squares) 회귀 분석을 수행할 때 get_influence() 메서드를 활용하면 데이터 포인트가 회귀 모델에 미치는 영향을 분석할 수 있다. 이번 포스팅에서는 get_influence()의 사용법과 활용 방법을 정리해본다.

1. get_influence()란?

get_influence()statsmodels.regression.linear_model.RegressionResults 객체에서 제공하는 메서드로, 회귀 모델을 학습한 후 각 데이터 포인트가 모델에 얼마나 영향을 주는지 평가하는 데 사용된다. 이 메서드는 잔차 분석, 레버리지 점수, Cook’s Distance 등 다양한 영향 지표를 제공한다.

2. 기본 사용법

먼저 statsmodels를 이용하여 OLS 회귀 분석을 수행한 후, get_influence()를 사용하여 개별 데이터 포인트의 영향을 분석할 수 있다.

import numpy as np
import pandas as pd
import statsmodels.api as sm

# 예제 데이터 생성
np.random.seed(42)
X = np.random.rand(100, 1) * 10  # 독립 변수
y = 3 * X.squeeze() + np.random.randn(100) * 2  # 종속 변수

# 상수항 추가
X = sm.add_constant(X)

# OLS 회귀 모델 적합
model = sm.OLS(y, X).fit()

# 영향 분석
influence = model.get_influence()

3. 주요 영향 지표

3.1. 레버리지 (Hat values)

레버리지는 특정 데이터 포인트가 회귀 모델을 얼마나 강하게 끌어당기는지를 나타내는 지표다. 보통 2p/n(여기서 p는 회귀 계수의 개수, n은 샘플 수)보다 큰 값이면 영향력이 높은 것으로 본다.

leverage = influence.hat_matrix_diag
print(leverage[:10])  # 상위 10개 샘플 출력

3.2. Studentized Residuals

이 값은 표준화된 잔차로, 특정 데이터 포인트가 얼마나 예외적인지를 측정한다. 일반적으로 ±2 이상의 값이면 이상치일 가능성이 크다.

studentized_residuals = influence.resid_studentized_external
print(studentized_residuals[:10])

3.3. Cook’s Distance

Cook’s Distance는 한 개의 데이터 포인트를 제거했을 때 회귀 계수가 얼마나 변화하는지를 나타낸다. 값이 1보다 크면 해당 데이터 포인트가 모델에 큰 영향을 미칠 가능성이 있다.

cooks_d = influence.cooks_distance[0]
print(cooks_d[:10])

4. 시각화 활용

영향력이 높은 데이터를 시각적으로 확인하면 보다 직관적인 분석이 가능하다. Cook’s Distance와 레버리지를 활용하여 영향력 있는 데이터를 탐색해 보자.

import matplotlib.pyplot as plt

# Cook’s Distance 시각화
plt.figure(figsize=(8, 5))
plt.stem(range(len(cooks_d)), cooks_d, markerfmt=",")
plt.xlabel("Index")
plt.ylabel("Cook's Distance")
plt.title("Cook's Distance for Each Data Point")
plt.show()

# 레버리지와 Studentized Residuals의 관계
plt.figure(figsize=(8, 5))
plt.scatter(leverage, studentized_residuals)
plt.axhline(y=2, color='r', linestyle='--')
plt.axhline(y=-2, color='r', linestyle='--')
plt.xlabel("Leverage")
plt.ylabel("Studentized Residuals")
plt.title("Leverage vs Studentized Residuals")
plt.show()

5. 데이터 포인트 제거 및 모델 재적합

영향력이 큰 데이터 포인트를 확인한 후, 해당 포인트를 제거하고 모델을 다시 적합할 수 있다. 예를 들어, Cook’s Distance가 1보다 큰 데이터 포인트를 제거해보자.

# 영향력이 높은 데이터 필터링
influential_points = np.where(cooks_d > 1)[0]
print("Influential points:", influential_points)

# 데이터 제거 후 재적합
X_filtered = np.delete(X, influential_points, axis=0)
y_filtered = np.delete(y, influential_points)

model_filtered = sm.OLS(y_filtered, X_filtered).fit()
print(model_filtered.summary())

6. 결론

statsmodelsget_influence() 메서드를 활용하면 개별 데이터 포인트가 회귀 분석 결과에 미치는 영향을 효과적으로 분석할 수 있다. 레버리지, Cook’s Distance, Studentized Residuals 등을 활용하여 이상치를 탐색하고, 필요에 따라 모델을 개선하는 과정이 중요하다. 이를 통해 더욱 신뢰성 높은 회귀 분석을 수행할 수 있다.

728x90