기본 콘텐츠로 건너뛰기

라벨이 OLS인 게시물 표시

[matplotlib]quiver()함수

Statistical analysis results graph code

The following graphs are the codes for the figures included in Chapters 6 and 7 of the e-book Statistics with Python . import numpy as np import pandas as pd from scipy import stats from sklearn.preprocessing import StandardScaler import FinanceDataReader as fdr import yfinance as yf import statsmodels.api as sm from statsmodels.formula.api import ols from sklearn.linear_model import LinearRegression import matplotlib.pyplot as plt import seaborn as sns sns.set_style("darkgrid") #fig 611 st=pd.Timestamp(2024,1, 1) et=pd.Timestamp(2024, 5, 30) code=["^KS11", "^KQ11", "^DJI", "KRW=X"] nme=['kos','kq','dj','WonDol'] da=pd.DataFrame() for i in code: x=yf.download(i,st, et)['Close'] x1=x.pct_change() da=pd.concat([da, x1], axis=1) da.columns=nme da1=da.dropna() da1.index=range(len(da1)) da2=pd.melt(da1, value_vars=['kos', 'kq', 'dj', 'WonDol'], var_name=...

통계분석 결과 그래프

다음 그래프들은 전자책 파이썬과 함께하는 통계이야기 6 장과 7장에 수록된 그림들의 코드들입니다. import numpy as np import pandas as pd from scipy import stats from sklearn.preprocessing import StandardScaler import FinanceDataReader as fdr import yfinance as yf import statsmodels.api as sm from statsmodels.formula.api import ols from sklearn.linear_model import LinearRegression import matplotlib.pyplot as plt import seaborn as sns sns.set_style("darkgrid") #fig 611 st=pd.Timestamp(2024,1, 1) et=pd.Timestamp(2024, 5, 30) code=["^KS11", "^KQ11", "^DJI", "KRW=X"] nme=['kos','kq','dj','WonDol'] da=pd.DataFrame() for i in code: x=yf.download(i,st, et)['Close'] x1=x.pct_change() da=pd.concat([da, x1], axis=1) da.columns=nme da1=da.dropna() da1.index=range(len(da1)) da2=pd.melt(da1, value_vars=['kos', 'kq', 'dj', 'WonDol'], var_name="idx", value_name="val") model=ols("val~...

[data analysis] Elasticnet 모델

Elasticnet 모델 Ridge 와 Lasso 회귀모델 의 차이는 패널티항으로 각각 L2norm과 L1norm을 적용한다는 점입니다( 정규화 참조 ). 이 차이를 결합한 모형을 Elastcnet 모델이라하며 MSE 는 식 1과 같이 계산됩니다. 이 식의 미분에 의해 회귀계수 β를 결정할 수 있습니다. \begin{align}\tag{식 1}\text{MSE}&=(y-X\beta)^T(y-X\beta)+\alpha \left(\lambda \Vert{\beta}\Vert+\frac{1-\lambda}{2}\Vert{\beta}\Vert^2\right)\\ &\alpha:\,\text{소멸계수} \\ &\lambda:\,\text{L1 또는 L2 norm 조정계수}\begin{cases}1&\text{Lasso 모델}\\0&\text{Ridge 모델} \end{cases}\end{align} sklearn.linear_model.ElasticNet() 클래스를 사용하여 모델을 생성할 수 있습니다. 또한 교차검정으로 적정한 α와 L1ration(λ)를 결정하여 모델을 생성하는 ElasticNetCV() 를 사용할 수 있습니다. 예 1) 코스피지수(kos), 코스탁지수(kq), kodex 레버리지(kl), kodex 인버스(ki), 그리고 원달러환율(WonDol)의 일일 시가, 고가, 저가, 종가(o,h,p,c)들을 설명변수로 사용하여 삼성전자(sam)의 일일 종가를 추정하는 Elastic 회귀모델을 생성합니다. import numpy as np import pandas as pd from sklearn.linear_model import ElasticNet, ElasticNetCV from sklearn.datasets import make_regression import yfinance as yf import matplotlib.pyplot as plt st=pd.Timestamp(2023,1, 10) ...

[data analysis] 다중 회귀모형의 진단

다중 회귀모형의 진단 내용 정규성(normality) 과 이상치(outlier) 평가 독립성 선형성과 자기상관 등분산성 단순회귀모형과 같이 회귀분석은 몇 가지 가정 을 전제한 상태에서 모형을 구축합니다. 그러므로 그 가정의 충족되지 않은 자료들에서 생성된 모형의 경우 적용과 적합성에 문제가 발생됩니다. 예를 들어 데이터가 정규분포를 따르지 않는 상태에서 구축된 회귀모형의 예측 범위는 매우 넓어질 수 있으므로 그 자체의 의미가 감소됩니다. 또한 변수들의 독립성에 문제가 있는 경우 반응변수에 대한 설명변수들의 선택에서 발생하는 오류는 실제와 다른 결과를 가져올 수 있습니다. 이 원인들은 모두 회귀모형의 신뢰도를 악화시키며 예측정도를 빈약하게 만들 수 있습니다. 정규성(normality) 과 이상치(outlier) 평가 예 1) 다음 코드에 의해 생성된 자료 코스피지수(kos), 코스탁지수(kq), kodex 레버리지(kl), kodex 인버스(ki), 그리고 원달러환율(WonDol)의 일일 종가들을 설명변수로 사용하여 삼성전자(sam)의 일일 종가를 추정하는 회귀모델을 구축해 봅니다. (이 자료에서 설명변수는 반응변수보다 1일 앞선 데이터 입니다.) import numpy as np import pandas as pd import yfinance as yf st=pd.Timestamp(2023,1, 10) et=pd.Timestamp(2024, 5, 30) code=["^KS11", "^KQ11", "122630.KS", "114800.KS","KRW=X","005930.KS"] nme=["kos","kq","kl", "ki", "WonDol","sam" ] da={} for i, j in zip(nme,c...

[data analysis] Hat 행렬

Hat 행렬 관련된 내용 회귀모형에서 이상치(outlier) 파악 레버리지(Leverage) 스튜던트 잔차(rstudent) Cook's Distance(D) hat 행렬(H) 은 회귀모델을 적용하여 $\hat{y}$을 추정하는 과정에서 설명변수의 영향을 나타내기 위해 작성합니다. 식 1과 같이 최소제곱 방법에 의한 회귀계수를 적용한 추정치의 추정 과정에서 설명변수만으로 구성된 부분을 hat 행렬(P)이라 합니다. \begin{align}\hat{y} & = Xb\\&=X(X^TX)^{-1}X^Ty\\& = Py\\ H&= X(X^TX)^{-1}X^T\\& = P\end{align} (식 1) 이상치는 그 데이터가 보이는 일반적인 경향을 따르지 않는 값(들)을 의미합니다. 회귀분석시 일반적으로 이상치는 반응변수 값의 측면에서 고려되지만 설명변수 측면에서 극단의 값(x값)을 가진다면 그 데이터 지점은 높은 레버리지(leverage) 를 가진다고 말합니다. 이 레버리지 즉, 각 샘플의 설명변수의 영향은 hat 행렬의 대각요소 의 값으로 나타낼 수 있습니다. hat 행렬은 이상치를 판단하기 위한 기본 값들로 이를 기준으로 여러 지표를 계산할 수 있습니다. statsmodel.api.OLS()에 의해 생성되는 모델의 get_influence() 메소드는 이상치 판단을 위한 여러 지표들의 결과를 나타냅니다. 이 결과는 .summary_frame() 메소드로 확인할 수 있습니다. 기사 회귀모형에서 이상치(outlier) 파악 편에서 구축한 회귀모델 reg에 대해 이 메소드들을 실행하면 다음과 같습니다. import numpy as np import pandas as pd from sklearn.preprocessing import StandardScaler import matplotlib.pyplot as plt import FinanceDataReader ...

[data analysis] 다중회귀모델의 생성

회귀모델 생성 1개 이상의 설명변수들과 1개의 반응변수를 가진 선형모델 역시 statsmodels.api.OLS() 클래스와 sklearn.linear_model() 클래스를 적용하여 구축할 수 있습니다. 이 모델의 구축과정과 평가방법은 단순회귀분석(Simple regression) 과 같습니다. 예 1) 코스피지수(kos), 코스탁지수(kq), kodex 레버리지(kl), kodex 인버스(ki), 그리고 원달러환율(WonDol)의 일일 종가들을 설명변수로 사용하여 삼성전자(sam)의 일일 종가를 추정하는 회귀모델을 구축해 봅니다. (이 자료에서 설명변수는 반응변수보다 1일 앞선 데이터 입니다.) kos kq kl ki WonDol sam Date 2023-01-10 2351.0 696.0 14440.0 4885.0 1239.0 60400.0 2023-01-11 2360.0 710.0 14525.0 4875.0 1240.0 60500.0 2023-01-12 2365.0 711.0 14580.0 4860.0 1242.0 60500.0 ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ 다음은 위 자료들을 호출하고 분석에 적합하게 조절하기 위한 코드들입니다. import numpy as np import pandas as p...

[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] 단순회귀분석(Simple regression)

단순회귀분석(Simple regression) 전형적인 회귀 모형은 y = ax + b와 같은 형태이며 변수 x를 y로 선형변환 하는 것으로 정의할 수 있습니다. 선형변환은 x의 변화 정도에 따라 y의 변화 정도가 같습니다. x를 설명변수 또는 독립변수 , y를 반응변수 또는 종속변수 라고 하며 x는 1개 이상일 수 있으며 단변수일 경우를 단순회귀 모형이라고 합니다. 위 식과 같이 x를 y로 이동시키는 과정에서 가장 적합한 a와 b를 결정하는 것이 회귀분석의 목적이 됩니다. 예 1) kospi 지수의 일일 주가 자료중 시가(Open)을 설명변수로 하여 종가(Close)를 추정하는 회귀모델을 작성합니다. Open Close 0 2874.50 2944.45 1 2943.67 2990.57 2 2993.34 2968.21 ⋮ ⋮ ⋮ 다음 코드는 분석을 위한 자료를 호출하기 위한 것입니다. 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) Open Close 0 2201.21 2175.17 1 2192.58 2176.46 2 2154.97 2155.07 통계분석을 위해 다음의 이유로 자료의 표준화(Standardization) 가 필요합니다. 데이터의 규모(scale) 축소 여러변수가 사용될 경우 변수간 발생되는 데이터의 규모를 일정하게 조정 반응변수의 표준화는 필수적이지...

[data analysis] 이원분산분석(two-way ANOVA)

이원분산분석(two-way ANOVA) 관련된 내용 분산분석 (Analysis of variance)의 개요 일원분산분석(One-way ANOVA) 사후분석(Post-hoc test) 이원분산분석(two-way ANOVA) 일원분산분석(one-way anova)의 경우 명목형인 설명변수(요인)의 각 효과와 연속형 반응변수의 관계를 추정하는 방법입니다. 요인이 2개 이상일 경우 고려해야 할 변동이 증가합니다. 이러한 다요인 분산분석에서 2개의 요인을 포함하는 자료의 분석을 이원분산분석(two-way anova) 라고 하며 데이터 구조는 표 1과 같습니다. 표 1 이원분산분석의 데이터 구조 요인1(α) 요인2(β) 합 평균 처리1 처리2 … 처리k 1 y 11 y 12 … y 1k T 1. y 1. 2 y 21 y 22 … y 2k T 2. y 2. ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ n y n1 y n2 … y nk T n. y n. 합 T .1 T .2 … T .k T 평균 y .1 y .2 … y .k y 표 1은 다음과 같이 구성되어있습니다. 요인(α, β, 설명변수): 2 반응변수(y) 수준(처리): 인자 1의 n(α), 인자 2의 k(β) 표 1의 각 값은 식 1과 같이 나타낼 수 있습니다. y ijl = μ + α i + β j + α i β j + e ijl (식 1) i: 요인 1의 인덱스, 1, 2, ..., n j: 요인 2의 인덱스, 1, 2, ..., k l: i, j에 대응하는 반응변수의 인덱스 위 모형은 n개 수준의 α와 k개 수준의 β에 의한 효과인 주효과(main effect) 와 두 요인에 의한 교호 효과(interaction effect) 는 αβ, 그리고 각 관찰치와의 오차항으로 구성됩니다. 식 1의 모형은 식 2와 같이...