ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • OLS get_influence 활용 방법
    pandas 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
Designed by Tistory.