-
OLS get_influence 활용 방법pandas 2025. 2. 16. 21:40728x90
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. 결론
statsmodels의 get_influence() 메서드를 활용하면 개별 데이터 포인트가 회귀 분석 결과에 미치는 영향을 효과적으로 분석할 수 있다. 레버리지, Cook’s Distance, Studentized Residuals 등을 활용하여 이상치를 탐색하고, 필요에 따라 모델을 개선하는 과정이 중요하다. 이를 통해 더욱 신뢰성 높은 회귀 분석을 수행할 수 있다.
728x90'pandas' 카테고리의 다른 글
Scikit-Learn의 GridSearchCV 사용법 (0) 2025.02.17 편향 표준편차와 불편 표준편차 그리고 Pandas/Numpy의 `std` 차이점 (0) 2025.02.11 다양한 머신러닝 알고리즘 비교 및 하이퍼파라미터 튜닝 (0) 2025.01.31 Pandas와 Scikit-Learn을 활용한 머신러닝 모델 만들기 (0) 2025.01.30 Pandas를 활용한 실전 데이터 분석 예제 (0) 2025.01.30