본문 바로가기
공부/기초통계

오차, 잔차, 편차의 차이 (기초통계) python

by signature95 2022. 3. 19.
728x90
반응형

흔히 통계에서는 오차, 잔차, 편차에 대해 얘기하곤 합니다. 

 

그렇다면 이 3가지의 차이는 어떻게 정의되는 것인지 살펴보도록 하겠습니다.

 

먼저 들어가기 앞서 데이터를 불러옵니다. (삼성전자 주가, 코스피 지수)

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import yfinance as yf
# 한글폰트 출력 가능 코드
from matplotlib import rc
rc('font', family='AppleGothic') # Mac Os
#rc('font', family='NanumGothic') # Windows Os
plt.rcParams['axes.unicode_minus'] = False


# 삼성전자, KOSPI 데이터 불러오기
stock_price = yf.download({'005930.KS','^KS11'}, '2021-12-01', '2022-01-21')

# 수정종가 불러오기
stock_price['Adj Close']

>>>


		005930.KS	^KS11
Date		
2021-12-01	74065.523438	2899.719971
2021-12-02	75459.234375	2945.270020
2021-12-03	75260.132812	2968.330078
2021-12-06	75956.984375	2973.250000
2021-12-07	77052.039062	2991.719971
2021-12-08	77052.039062	3001.800049
2021-12-09	77848.445312	3029.570068
2021-12-10	76554.289062	3010.229980
2021-12-13	76454.734375	3001.659912
2021-12-14	76653.835938	2987.949951
2021-12-15	77251.140625	2989.389893
2021-12-16	77450.242188	3006.409912
2021-12-17	77649.343750	3017.729980
2021-12-20	76753.390625	2963.000000
2021-12-21	77748.890625	2975.030029
2021-12-22	79043.046875	2984.479980
2021-12-23	79540.796875	2998.169922
2021-12-24	80138.101562	3012.429932
2021-12-27	79839.453125	2999.550049
2021-12-28	79939.000000	3020.239990
2021-12-29	78800.000000	2993.290039
2021-12-30	78300.000000	2977.649902
2022-01-04	78700.000000	2989.239990
2022-01-05	77400.000000	2953.969971
2022-01-06	76900.000000	2920.530029
2022-01-07	78300.000000	2954.889893
2022-01-10	78000.000000	2926.719971
2022-01-11	78900.000000	2927.379883
2022-01-12	78900.000000	2972.479980
2022-01-13	77900.000000	2962.090088
2022-01-14	77300.000000	2921.919922
2022-01-17	77500.000000	2890.100098
2022-01-18	77000.000000	2864.239990
2022-01-19	76300.000000	2842.280029
2022-01-20	76500.000000	2862.679932

 

그리고 바로 삼성전자를 feature로 하고 KOSPI를 target으로 하는 단순회귀식을 구해봅니다.

 

# 필요한 라이브러리
import statsmodels.api as sm

# target은 종속변수, feature는 독립변수와 같다.
target = stock_price['Adj Close']['^KS11']
feature = stock_price['Adj Close']['005930.KS']

# 상수항을 더해줘서 회귀식을 더 잘 적합할 수 있도록 만들어 준다.
feature_add = sm.add_constant(feature, has_constant='add')
# 상수항 더한 것 확인
# feature_add

# sm OLS 적합
model = sm.OLS(target, feature_add)
fitted_model = model.fit()

# 통계치 출력
print(f'R-squared : {fitted_model.rsquared : .5f}')
print(f'constant coef p 값 : {fitted_model.pvalues[0] : .5f}')
print(f'feature coef p 값 : {fitted_model.pvalues[1] : .5f}')
print(f'MSE : {fitted_model.mse_resid : .5f}')

# 회귀선 도출
target_pred1 = fitted_model.predict()

# 통계치 출력
print(f'결정계수 R-squared : {fitted_model.rsquared : .5f}')
print(f'constant coef(계수)에 대한 p 값 : {fitted_model.pvalues[0] : .5f}')
print(f'feature coef(계수)에 대한 p 값 : {fitted_model.pvalues[1] : .5f}')
print(f'잔차의 제곱합 MSE : {fitted_model.mse_resid : .5f}')

# 회귀선 도출
target_pred1 = fitted_model.predict()

plt.scatter(feature, target, marker='+', label='$Y_i$ 실제 관측치')
plt.plot(feature, target_pred1, color = 'g', label='$\hat{Y}_i$ 회귀선')
plt.hlines(target.mean(), feature.min(), feature.max(), color = 'r', label='$Y_i$ 평균선')
plt.legend()
plt.xlabel('Samsung Price')
plt.ylabel('KOSPI')
plt.show()

>>>

R-squared :  0.17145
constant coef p 값 :  0.00014
feature coef p 값 :  0.01341
MSE :  1954.64720

이 그림을 토대로 설명해 보겠습니다.

 

 


 

오차 (Error)

오차는 모집단의 회귀식관측치 (개별값)의 차이를 의미합니다.

그림에서 이해해보면, 녹색 회귀식파란색 십자가(관측치, 개별값)차이를 의미하는 것이죠.

 

여기서 표준오차 (Standard Error)의 개념이 나옵니다.

각 표본의 평균이 전체의 평균과 얼마나 차이가 있는지 알려주는 지표로서 표본평균과 모평균의 차이를 의미합니다.

실제 모집단과 각 표본평균이 얼마만큼의 편차를 가지고 있는지 알려주기에 평균의 정확도를 추정할 때 사용하며 표준오차가 적을수록 표본의 대표성이 높다고 판단하게 됩니다.

물론 일반적으로 표본 추출은 1회 실시합니다. 따라서 표준오차에 대해 계산할 수 없습니다. 그러나 이론적으로는 계산이 가능합니다.

표본분산을 표본수의 제곱근으로 나눈 값으로 각 표본의 평균이 전체 평균에 대해 얼마나 떨어져 있는지 이론적으로 확인이 가능합니다.

 

참고로 표본오차 (Sampling Error)는 모평균의 추정구간 중심으로 부터 허용할 최대 허용오차로

로 표시할 수 있고 모평균 추정치의 표본오차를 의미합니다.


잔차 (Residual)

잔차는 표본의 회귀식관측치 (개별값)의 차이를 의미합니다.

그림에서 이해해보면, 녹색 회귀식 파란색 십자가(관측치, 개별값) 차이를 의미하는 것이죠...

사실 오차와 잔차는 간단하게만 보면 큰 차이가 없습니다.

하지만, 데이터를 추출한 집단이 모집단을 의미하는지 혹은 표본을 의미하는지에 따라 다르게 부르게 됩니다.

 

이를 식으로 표현하면 다음과 같습니다.

http://www.ssacstat.com/base/component/board/board_12/u_image/38/20150404144731_1082502368.jpg

물론, 대부분의 통계분석은 모집단이 아닌 표본 데이터를 활용하기 때문에 잔차를 활용하여 최적의 coef를 추정하게 됩니다. (잔차제곱합을 최소로 만들어주는 최소제곱법 사용)

따라서, OLS의 모형 검정에 대해서는 오차분석이 아닌 잔차분석이라는 용어를 사용하는 것이 일반적이죠.

 


 

편차 (Deviation)

편차는 평균값과 관측치 (개별값)의 차이를 의미합니다. 

여기서 보면, 빨간 평균선 파란색 십자가(관측치, 개별값) 차이를 의미하는 것입니다. 

따라서 정규분포에서 편차의 합은 0이 되는 것입니다.

 

 

728x90

댓글