programming/파이썬으로 배우는 통계학

[파이썬/통계] Python 통계 : 일반선형모델 평가(잔차제곱합 구하는 이유)

Jofresh 2023. 5. 28. 15:03
728x90
반응형

정규선형모델에서 배운것 처럼(아래 이전 포스팅 참조) 모델을 평가할 때는 잔차를 필수로 체크해야합니다.

다만, 모집단분포가 정규분포 이외의 분포가 되면 잔차의 취급이 크게 바뀌게 됩니다. 이번에는 일반선형모델에서의 잔차 취급을 알아보겠습니다. 잔차는 데이터와 모델의 괴리를 표현하는 중요한 지표입니다.

 

 

[파이썬/통계] Python 통계 : 정규 선형모델 /연속형 독립변수가 하나인 모델(단순회귀)

필요한 라이브러리 임포트 # 수치 계산에 사용하는 라이브러리 import numpy as np import pandas as pd import scipy as sp from scipy import stats # 그래프를 그리는 라이브러리 from matplotlib import pyplot as plt import seabo

jofresh.tistory.com


필요한 라이브러리 임포트

# 수치 계산에 사용하는 라이브러리
import numpy as np
import pandas as pd
import scipy as sp
from scipy import stats

# 그래프를 그리는 라이브러리
from matplotlib import pyplot as plt
import seaborn as sns
sns.set()

# 통계 모델을 추정하는 라이브러리(워크닝이 나올 수도 있습니다)
import statsmodels.formula.api as smf
import statsmodels.api as sm

# 표시 자릿수 지정
%precision 3
# 그래프를 jupyter Notebook 내에 표시하도록 하기 위한 지정
%matplotlib inline

 

 

데이터가져오기

- 이전 강의와 동일한 데이터를 사용하겠습니다.

- 모델링 설명: 

아래 코드는 statsmodels.formula.api 모듈의 glm 함수를 사용하여 이항 범주형(GLM) 모델입니다. 이 GLM은 "test_result" 데이터셋에서 "result" 변수를 예측하기 위해 "hours" 예측 변수를 사용합니다.

 

- 각 구성 요소를 살펴보겠습니다:

1. import statsmodels.formula.api as smf: 이 줄은 statsmodels 라이브러리를 가져오고, 통계 모델을 적합하기 위한 고수준 인터페이스를 제공하는 formula.api 모듈을 특정하게 가져옵니다.

 

2. mod_glm = smf.glm("result ~ hours", data=test_result, family=sm.families.Binomial()): 이 줄은 모델 공식을 지정하고 GLM 객체를 생성합니다. "result ~ hours"라는 공식은 "result"가 종속 변수이고 "hours"가 독립 변수임을 나타냅니다. data 매개변수는 모델을 적합할 "test_result" 데이터셋을 지정합니다. family 매개변수는 GLM에 이항 범주형을 지정하기 위해 sm.families.Binomial()로 설정됩니다.

 

3. .fit(): 이 메서드는 데이터에 GLM을 적합하고 적합된 모델 객체를 반환합니다. 적합된 모델 객체는 mod_glm 변수에 할당됩니다.

 

 코드를 실행한 후에는 mod_glm 변수가 적합된 GLM 모델을 포함하게 되며, 해당 모델을 사용하여 예측을 수행하거나 모델 통계를 얻거나 적합된 모델과 관련된 다른 분석을 수행할 수 있습니다.

 

 

6-3-1-logistic-regression.csv
0.00MB

 


피어슨 잔차

- 이항분포에서 피어슨 잔차는 mod_glm.predic()로 계산한 예측치입니다.

※ 코드 상세 해석 보기 ▼

더보기

 위 코드에서는 다음과 같은 단계로 deviance 잔차를 계산합니다:

예측된 성공 확률 계산:
모델 객체인 mod_glm의 predict() 메서드를 사용하여 관측 데이터에 대한 예측된 성공 확률을 계산합니다. 이 값은 pred 변수에 저장됩니다.

응답 변수(테스트 합격 여부) 준비:
test_result 데이터셋에서 합격 여부를 나타내는 응답 변수인 result를 y 변수에 저장합니다.

로그 우도와의 차이 계산:
예측된 성공 확률 pred를 사용하여 실제 관측값 y와 비교하여 로그 우도와의 차이를 계산합니다. 이 값은 resid_tmp 변수에 저장됩니다.

Deviance 잔차 계산:
resid_tmp 값을 사용하여 Deviance 잔차를 계산합니다. deviance_resid 변수에 저장됩니다. 계산에는 제곱근 및 부호 함수가 사용되며, 실제 관측값과 예측값의 차이를 표준화합니다.

결과 확인:
deviance_resid의 처음 3개 값을 출력하여 계산된 Deviance 잔차를 확인합니다.

- 위와 같이 피어슨 잔차를 계산할 수도 있지만, 아래처럼 피어슨 잔차 모델에서 직접 얻는 방법도 있습니다 (더 간편함).

 

- 피어슨 잔차제곱합은 피어슨 카이제곱통계량이 됩니다.

이 결과는 summary함수에도 출력됩니다. 

※ 잔차제곱합을 구하는 이유(복습) 더보기 클릭▼

통계학에서 잔차제곱합을 계산하는 이유는 다음과 같습니다:

1. 모델의 적합도 평가: 잔차제곱합은 모델이 주어진 데이터에 얼마나 잘 적합되었는지를 평가하는 척도로 사용됩니다. 모델이 데이터를 얼마나 설명하는지, 즉 잔차(실제 값과 예측 값 사이의 차이)가 얼마나 작은지를 측정하는 지표입니다. 잔차제곱합이 작을수록 모델이 데이터에 잘 적합되었다고 판단할 수 있습니다.

2. 변수 선택과 모델 비교: 잔차제곱합은 다른 모델들 간의 비교에 사용될 수 있습니다. 예를 들어, 여러 개의 독립 변수를 포함하는 모델들이 있을 때, 잔차제곱합이 가장 작은 모델이 가장 좋은 모델로 간주될 수 있습니다. 잔차제곱합을 비교하여 변수 선택이나 모델 선택에 도움을 줄 수 있습니다.

3. 오차 분석: 잔차제곱합을 통해 잔차의 크기와 분포를 분석할 수 있습니다. 잔차가 일정한 분포를 가진다면 모델이 데이터에 적합하다는 가정을 확인할 수 있습니다. 또한, 잔차의 패턴이나 비정상적인 특성을 확인하여 모델의 가정을 검토하고 개선할 수 있습니다.

 

 

DEVIANCE(디비언스)

디비언스는 모델의 적합도를 평가하는  지표입니다. 디비언스가 크면 모델이 맞지 않느다고 평가할 수 있습니다.

 

디비언스의 해석:

디비언스는 잔차제곱합을 우도처럼 표현한 것입니다. 즉, 최대우도법의 결과와 디비언스라는 손실을 최소화하도록 파라미터를 추정한 결과는 일치합니다. 

 

이항분포에서 디비언스 잔차는 디비언스 잔차제곱합이 디비언스가 된다는 사실로 계산합니다. 계산식은 복잡하니 파이썬 함수로 확인해보겠습니다. 

디비언스는 합격여부를 완전히 예측할 수 있을 때의 로그우도와 차이였다는 점에 주목합니다. 성공확률 100%일 때의 합격할 확률은 1입니다. 성공확률 0%일 때의 실패할 확률도 1입니다. 그래서 합격여부를 완전히 예측할 수 있을 때 로그우도는 log(1)이 되기 때문에 항상 0이됩니다. 그러므로 resid_tmp처럼 먼저 계산합니다.

resid_tmp를 2배로 하고 루트값을 얻으면 디비언스 잔차가 됩니다.이렇게 하면 제곱이 디비언스와 일치합니다. np.sign 함수는 플러스마이너스 기호를 돌려주는 함수입니다. y-pred값이 0보다 크면 플러스, 작으면 마이너스가 붙습니다. 정의상 resid_tmp는 언제나 플러스가 되기 때문에 이렇게 했습니다.

 

디비언스 잔차는 모델에서 직접 얻을 수도 있습니다.

 

디비언스 잔차제곱합은 디비언스가 됩니다. 이 값은 summary 함수에도 출력됩니다.

 

 

728x90
반응형