Python에서 잔차 플롯을 만드는 방법
잔차 도표는 회귀 모델 의 잔차에 대한 적합치를 표시하는 도표 유형입니다.
이러한 유형의 플롯은 선형 회귀 모델이 주어진 데이터 세트에 적합한지 여부를 평가하고 잔차의 이분산성 을 확인하는 데 자주 사용됩니다.
이 튜토리얼에서는 Python에서 선형 회귀 모델에 대한 잔차 플롯을 만드는 방법을 설명합니다.
예: Python의 잔차 플롯
이 예에서는 농구 선수 10명의 속성을 설명하는 데이터 세트를 사용합니다.
import numpy as np import pandas as pd #create dataset df = pd.DataFrame({'rating': [90, 85, 82, 88, 94, 90, 76, 75, 87, 86], 'points': [25, 20, 14, 16, 27, 20, 12, 15, 14, 19], 'assists': [5, 7, 7, 8, 5, 7, 6, 9, 9, 5], 'rebounds': [11, 8, 10, 6, 6, 9, 6, 10, 10, 7]}) #view dataset df rating points assists rebounds 0 90 25 5 11 1 85 20 7 8 2 82 14 7 10 3 88 16 8 6 4 94 27 5 6 5 90 20 7 9 6 76 12 6 6 7 75 15 9 10 8 87 14 9 10 9 86 19 5 7
단순 선형 회귀를 위한 잔차 도표
점을 예측 변수로 사용하고 등급을 응답 변수로 사용하여 간단한 선형 회귀 모델을 적합하다고 가정합니다.
#import necessary libraries import matplotlib.pyplot as plt import statsmodels.api as sm from statsmodels.formula.api import ols #fit simple linear regression model model = ols('rating ~ points', data=df). fit () #view model summary print(model.summary())
statsmodels 라이브러리의 plot_regress_exog() 함수를 사용하여 잔차 또는 적합 플롯을 생성할 수 있습니다.
#define figure size fig = plt.figure(figsize=(12,8)) #produce regression plots fig = sm.graphics.plot_regress_exog(model, ' points ', fig=fig)
4개의 플롯이 생성됩니다. 오른쪽 상단 모서리에 있는 것은 잔차 그림과 조정된 그림입니다. 이 도표의 x축은 예측 변수 포인트 의 실제 값을 표시하고 y축은 해당 값의 잔차를 표시합니다.
잔차가 0 주위에 무작위로 흩어져 있는 것처럼 보이므로 이는 이분산성이 예측 변수에 문제가 되지 않음을 나타냅니다.
다중 선형 회귀에 대한 잔차 도표
대신 어시스트 와 리바운드를 예측 변수로 사용하고 등급을 응답 변수로 사용하여 다중 선형 회귀 모델을 적합하다고 가정합니다.
#fit multiple linear regression model model = ols('rating ~ assists + rebounds', data=df). fit () #view model summary print(model.summary())
다시 한 번, statsmodels 라이브러리의 plot_regress_exog() 함수를 사용하여 각 개별 예측 변수에 대한 잔차 대 예측 변수 플롯을 만들 수 있습니다.
예를 들어 예측 변수 지원 에 대한 잔차/예측 변수 도표는 다음과 같습니다.
#create residual vs. predictor plot for 'assists' fig = plt.figure(figsize=(12,8)) fig = sm.graphics.plot_regress_exog(model, ' assists ', fig=fig)
그리고 예측 변수 바운스 에 대한 잔차/예측 변수 도표는 다음과 같습니다.
#create residual vs. predictor plot for 'assists' fig = plt.figure(figsize=(12,8)) fig = sm.graphics.plot_regress_exog(model, ' rebounds ', fig=fig)
두 도표 모두에서 잔차가 0 주위에 무작위로 분산되어 있는 것으로 나타납니다. 이는 이분산성이 모델의 예측 변수에 문제가 되지 않음을 나타냅니다.