기본 콘텐츠로 건너뛰기

라벨이 오차인 게시물 표시

[matplotlib]quiver()함수

[data analysis] 회귀모형에서 이상치(outlier) 파악

회귀모형에서 이상치(outlier) 파악 관련된 내용 Hat 행렬 레버리지(Leverage) 스튜던트 잔차(rstudent) Cook's Distance(D) 회귀계수의 검정에서 사용한 f분포는 기본적으로 검정대상이 정규분포에 부합한다는 가정하에 실시합니다. 이점은 회귀분석의 기본가정인 정규성에 대한 이유가 되며 이것을 확인하기 위해 모델에 의해 생성되는 확률변수인 잔차의 정규성을 검정합니다. 정규성을 시각적으로 판단하기 위해 그림 1과 같은 q-q plot을 사용하며 정량적인 검정을 위해 Shapiro-wilk 또는 Anderson-Darling 검정방법을 적용할 수 있습니다. 그림 1은 stats.probplot() 에 의한 qq plot으로 양끝에서 정규성에 이탈하는 모양을 나타냅니다. 이에 대한 정량적인 검정은 stats.shapiro() 함수에 의해 실행합니다. 그림 1은 다음 코드로 생성되는 특정한 기간의 코스피 주가의 Open과 Close에 대한 회귀모델에서의 오차(error)에 대한 것입니다. 이 과정에서 원시데이터는 표준화하였습니다. import numpy as np import pandas as pd from sklearn.preprocessing import StandardScaler from sklearn.linear_model import LinearRegression from scipy import stats import matplotlib.pyplot as plt import FinanceDataReader as fdr st=pd.Timestamp(2021,1, 1) et=pd.Timestamp(2024, 5, 10) kos=fdr.DataReader('KS11',st, et)[["Open","Close"]] kos.index=range(len(kos)) X=kos.values[:,0].reshape(-1,1) y=k...

[data analysis] 오차의 분산

오차의 분산 관련된 내용 회귀모델의 오차에 대해 자기상관분석(Autocorrelation Analysis) 오차의 분산 각 샘플의 추정치 또는 오차의 분포는 회귀계수에만 의존하므로 모든 샘플들에서 발생하는 분포의 분산은 동일하다고 가정합니다( 표 1 참조 ). 그러나 다중회귀모델의 경우 여러 설명변수들 사이에 상관성(공분산의 존재)등으로 인해 이 가정을 만족시키지 못하는 경우가 대부분입니다. 공분산의 존재는 등분산 가정을 충족시키지 못하는 것으로 OLS에서 일반적으로 사용되는 통계적 추론 절차에 문제를 일으킵니다. 즉, 샘플링 분산을 추정하고 가설을 테스트하는 표준 방법이 편향된다는 것입니다. 그 결과 OLS에 의해 추정되는 회귀계수의 편향으로 예측의 신뢰가 감소될 수 있습니다. 등분산 가정이 충족되지 않는 경우 다음과 같이 방법으로 이 문제를 감소시킬 수 있습니다. 데이터 변환(예: 반응 변수 및/또는 설명 변수의 로그 취함)으로 일정한 분산을 달성 다중 설명변수들 중에 주요한 변수만을 선택 설명변수들 간에 정규화 회귀분석의 등분산성 가정을 수식으로 표현하면 식 1과 같습니다. \begin{align}\text{Var}(e|X)& = E(ee^T)\\& = \sigma_e^2 \cdot I \end{align} (식 1) 식 1에서 I는 항등행렬을 나타내는 것으로 σ e 2 I는 각 샘플에서 발생하는 오차의 분산이 같다는 것을 의미합니다(식 2). $$\sigma_e^2 \cdot I = \sigma_e^2\begin{bmatrix}1&0&\cdots&0\\0&1&\cdots&0\\ \vdots& \vdots& \ddots& \vdots\\ 0&0&\cdots&1\end{bmatrix}$$ (식 2) 회귀모형을 행렬시스템으로 나타내면 식 3와 같습니다. \begin{align}y&=X\b...

[data analysis] 회귀계수의 평가

회귀계수의 평가 다음은 일정기간의 kospi의 Open과 Close에 대한 자료이고 각각을 설명변수와 반응변수로 지정하여 회귀모델을 구축한 것입니다. st=pd.Timestamp(2021,1, 1) et=pd.Timestamp(2024, 5, 10) kos=fdr.DataReader('KS11',st, et)[["Open","Close"]] kos.index=range(len(kos)) kos.head(3).round(2) X=kos.values[:,0].reshape(-1,1) y=kos.values[:,1].reshape(-1,1) from sklearn.preprocessing import StandardScaler #독립변수 정규화(표준화) xScaler=StandardScaler().fit(X) X_n=xScaler.transform(X) #반응변수 정규화(표준화) yScaler=StandardScaler().fit(y) y_n=yScaler.transform(y) from statsmodels.api import add_constant, OLS X_n0=add_constant(X_n) reg=OLS(y_n, X_n0).fit() print(f'회귀계수(b0, b1) :{np.around(reg.params,3)}\nR2:{np.around(reg.rsquared,3)}') 회귀계수(b0, b1) :[0. 0.997] R2:0.994 위에서 생성된 회귀모델 reg의 메서드 summary()는 모델의 결과를 요약한 3개의 표들 을 반환합니다. 다음 코드는결과 중 두 번째 표를 나타낸 것으로 t 검정 결과를 나타내고 있습니다. 이것은 생성된 모델의 회귀계수에 대해 다음 귀무가설(H0)을 검정합니다. H0: 계수에 의해 유의한 차이를 보이지 않음 re=reg.summary() re.tables[1] coef std err t ...

[data analysis] 회귀모델의 오차에 대해

회귀모델의 오차(Error, Residual)에 대해 관련된 내용 자기상관분석(Autocorrelation Analysis) 오차제곱평균(Mean of Square Error) 오차의 분산 생성된 회귀모형은 통계적으로 검정(test)할 필요가 있으며 검정의 주요한 객체는 식 1과 같이 계산되는 관찰치와 추정치의 차이인 오차(error)가 됩니다. \begin{align} e & = y − (b_0+ b_1x)\\ &=y − \hat{y}\\& e: \text{오차 또는 잔차}\\ &\hat{y}: \text{추정치}\end{align} (식 1) 회귀모형의 오차는 다음의 전제조건을 갖습니다. 정규분포를 따르는 확률변수 오차항의 등분산성(homoscedastic) 시점이 다른 오차들 사이에 자기상관 (autocorrelation) 없음 설명변수들은 정규 분포를 따르는 확률변수이므로 그 반응변수와 추정치 사이에서 발생되는 오차 역시 정규분포를 따르는 확률 변수가 됩니다. 이것은 오차를 인위적으로 조정할 수 없다는 의미입니다. 동일한 자료에서 다양한 회귀모형이 가능합니다. 즉, 다양한 회귀계수들이 존재하므로 표 1에서 나타낸 것과 같이 1개의 샘플(설명변수와 반응변수의 1쌍)에서 생성되는 다양한 추정치들에 대한 분포를 생성할 수 있습니다. 표 1 다양한 회귀계수들의 영향 설명변수 반응변수 추정치 오차들 분포 x 1 y 1 p 11 , p 12 , … e 11 (= y 1 -p 11 ), e 12 , … e 1,bar , σ e1 x 2 y 2 p 21 , p 22 , … e 21 , e 22 , … e 2,bar , σ e2 ⋮ ⋮ ⋮ ⋮ ⋮ 표 1에서 나타낸 것과 같이 샘플당 다양한 추정치에 의한 오차분포를 형성하며 그 분포의 분산은 회귀계수에 의해 결정됩니다. 회귀계수는 모든 샘플들에 동일하게 적용되므로 모든 샘플의 오차분포들은 동일한 분산을 가질 것입니다. 그러므로 회귀...

[data analysis] 회귀계수의 추정: 최소제곱법(Least Square method)

최소자승법(Least Square method) 식 1의 형태인 회귀선(회귀방정식)은 설명변수에 대응하는 반응변수의 관계를 설명하기 위해 통계적으로 추정된 방정식입니다. 이 모형으로부터의 예측값 역시 통계적으로 추정된 값으로 실제로 관측된 값과는 차이가 존재합니다. 그러므로 추정값과 관측값과의 차이를 평가하여 모형의 적합성 여부를 결정할 필요가 있습니다. y = β 0 + β 1 x + ε (식 1) x: 설명변수 y: 반응변수 β 0 : 편차 β 1 : 회귀계수(가중치) ε : 오차 모형의 구성요소인 편차 β 0 와 회귀계수 β 1 은 모집단의 회귀모형에 대한 것으로 미지의 값(unknown value)인 모수이므로 표본의 통계량으로부터 추정되어야 합니다. 이를 구분하기 위해 표본집단의 편차와 회귀계수를 각각 b 0 와 b 1 로 나타내며 모수를 추정하기 위한 불편추정치(unbiased estimator) 로 사용합니다. 이 추정치들 중 관측치와 실측치의 차이인 오차(error, e) 또는 잔차(residual) 는 식 2와 같이 계산됩니다. \begin{align} e & = y − (b_0+ b_1x)\\ &=y − \hat{y}\\& e: \text{오차 또는 잔차}\\ &\hat{y}: \text{추정치}\end{align} (식 2) 자료에서 발생하는 각 샘플의 오차는 음수와 양수 모두 가능하므로 그들의 합은 0에 근접하기 때문에 회귀모형의 적합성을 위한 판단근거로 사용할 수 없습니다. 대신에 각 오차의 절대값이나 제곱값들의 합을 사용합니다. 절대값을 사용하는 경우는 1차 식이되며 제곱을 적용한 경우는 2차 식이 됩니다. 회귀모형을 나타내는 회귀선(기울기와 편차)은 다양하게 나타낼 수 있습니다( 회귀분석의 정의와 가정의 그림 2 참조 ). 오차는 회귀식과 설명변수에 반응하는 결과로서 궁극적으로 최소의 오차를 생성하는 회귀식이 최적의 모형이 됩니다. b 0 와 b 1 을 미지수로 하...

[data analysis] 회귀분석(Regression analysis)의 정의와 가정

회귀분석(Regression analysis)의 정의와 가정 회귀분석(Regression analysis) 은 변수들간의 관계에 대한 모형을 설정하고 그 모형을 통해 새로운 값을 추정하는 통계적 방법입니다. 그림 1은 일정한 높이(x)에 대응되는 힘(y)에 대한 그래프로서 x가 증가할수록 y가 증가하는 정확한 정비례 관계를 보여줍니다. 이 관계는 일반적인 물리법칙을 적용한 것으로 높이에 따라 작용되는 힘을 정확하게 결정할 수 있습니다. 그림 1. 높이에 따른 힘의 변화. h=np.linspace(0, 5) f=0.1*9.8*h plt.figure(figsize=(4,3)) plt.plot(h, f, color="g", label="F=mgh\nm:0.1 kg") plt.xlabel("h(m)") plt.ylabel("F(N)") plt.legend(loc="best") plt.show() 그림 2는 x가 증가하면서 y의 증가를 보이지만 그림 1과 같이 완전한 선으로 미지의 값에 대한 적확한 예측을 하는 것은 어렵습니다. 그림에서 나타낸 것과 같이 각 x 점에 대응하는 y 값들의 관계식은 다양하게 존재할 것입니다. 이 상황에서 새로운 x에 대한 y를 추정하기 위한 가장 적합한 식(회귀모델)을 추론하는 것이 회귀분석의 최종적인 목적입니다. 이와 같이 두 변수 사이의 관계 모형을 확정하기 어려운 경우에서의 모델 구축은 확률적으로 이루어 집니다. 다시말하면 회귀분석은 확률론적 시각으로 데이터의 특성을 이해하고 미지의 값을 추론하는 주요한 통계적 방법입니다. 그림 2 X에 대한 Y의 관계. np.random.seed(3) x=np.linspace(-1, 5, 100) y=0.3*x+np.random.rand(100) y1=0.56+0.4*x y2=0.45+0.32*x y3=0.2+0.44*x y4=0.7+0.2*x col=["brown...