정량화에 대한 3분 소개(7): 회귀 분석

안녕하세요 에다마메입니다. 이 시리즈는 가장 간소화된 코드와 사례를 사용하여 정량화를 빠르게 시작할 수 있도록 하며 가장 건조한 제품에 대해서만 이야기합니다.정량화를 배우고 싶지만 시작하는 방법을 모르는 친구들은 서둘러 읽어보세요!

이전 검토:

수량화에 대한 3분 소개(1): 시장 데이터 획득 및 캔들스틱 차트 그리기

정량화에 대한 3분 소개(2): Tushare Pro 데이터 인터페이스 소개

정량화에 대한 3분 소개(3): 수익률 계산

수량화에 대한 3분 소개(4): 시장 데이터의 통계 분석

정량화에 대한 3분 소개(5): 수율의 추론 통계

정량화에 대한 3분 소개(6): 상관관계 분석

이번 호에서는 Python을 사용하여 회귀 분석을 수행하는 방법을 소개합니다. 회귀 분석은 둘 이상의 변수 간의 정량적 관계를 결정하기 위한 통계 분석 방법을 말합니다. 회귀분석은 관여변수의 수에 따라 단순회귀분석과 다중회귀분석으로, 종속변수의 수에 따라 단순회귀분석과 다중회귀분석으로, 독립변수 간의 관계에 따라 회귀분석을 구분할 수 있다. 종속변수에 따라 선형회귀분석, 회귀분석, 비선형회귀분석으로 나눌 수 있습니다.

회귀 분석을 위해 Python을 사용하는 방법을 살펴보겠습니다. Maodou는 주말마다 이 시리즈를 업데이트할 예정이므로 쉽게 학습할 수 있도록 수집하는 것이 좋습니다.

지수 반환 모델

먼저 관련 패키지를 가져오고 Tushare Pro 계정을 인증하십시오.

import tushare as ts
import numpy as np
import matplotlib.pyplot as plt
import statsmodels.api as sm
import scipy.stats as stats
​
pro = ts.pro_api('your token')
 
 

올해부터 Shanghai Composite Index 데이터를 얻고 수익률을 계산합니다.

df1=ts.get_k_data('sh',start='2023-01-01',end='2023-06-02')#上证指数
df1['lagclose']=df1.close.shift(1)
df1['SHRet']=(df1['close']-df1['lagclose'])/df1['lagclose']
df1.tail()

다음과 같이 반환합니다.

올해부터 Shenzhen Component Index의 데이터를 얻고 수익률을 계산하십시오.

df2=ts.get_k_data('sz',start='2023-01-01',end='2023-06-02')#深证成指
df2['lagclose']=df2.close.shift(1)
df2['SZRet']=(df2['close']-df2['lagclose'])/df2['lagclose']
df2.tail()

다음과 같이 반환합니다.

두 변수에 누락된 값이 있고 길이가 같은지 확인합니다.

SHRet=df1.SHRet.dropna()
SZRet=df2.SZRet.dropna()
print(len(SHRet),len(SZRet))

Python의 통계 분석 패키지 statsmodels에서 OLS 클래스를 사용하여 회귀 모델의 구성을 완료합니다.

fit() 메서드를 사용하여 모델을 피팅합니다.

model=sm.OLS(SHRet,sm.add_constant(SZRet)).fit()

모델 결과를 보려면 summary() 메서드를 사용하십시오.

#查看回归模型结果
print(model.summary())

다음과 같이 인쇄하십시오.

절편 항은 0.0004이고 기울기 항은 0.6843이므로 모델을 다음과 같이 얻을 수 있습니다.

SHRet=0.0004+0.6843*SZRet+ε

적합도는 66.6%로, 모델이 Shanghai Composite Index 분산의 66.6%를 설명할 수 있음을 나타냅니다.

다음은 표의 지표에 대한 설명입니다. 먼저 첫 번째 테이블을 살펴보겠습니다.

Dep.Variable : 이 모델에서 종속 변수는 Shanghai Composite Index의 수익률입니다.

모델: 모델 피팅 방법, OLS는 일반적인 최소 제곱법입니다.

방법: 최적화 방법, 최소 제곱법

No.Observations: 관찰 샘플 크기, 이 예에서는 99(데이터의 99일)가 있습니다.

DF 잔차 : 잔차 자유도(97) = 관측된 표본 크기(99) - 변수 수(2)

DF 모델: 매개변수 수

R-제곱: 적합도

Adj.R-제곱: 조정된 R-제곱

F-통계량: F 통계량

확률(F-통계): F 통계 p-값

대수 우도: 대수 우도

AIC: 아카이케 계수

BIC: 베이즈 계수

두 번째 테이블을 다시 살펴보십시오.

계수: 절편과 기울기를 포함한 계수

std 오류: 표준편차

t: t 테스트 값, 불명확한 경우 이전 게시물 참조

P > |t|: t-테스트 p-값

[0.025, 0.975]: 97.5% 신뢰 구간

적합치 대 잔차의 산점도를 그립니다.

#解决中文乱码
plt.rcParams['font.sans-serif']=['Arial Unicode MS']#用于mac
#plt.rcParams['font.sans-serif']=['SimHei']#用于windows
plt.rcParams['axes.unicode_minus'] = False
​
# 绘制拟合值和残差的散点图
plt.scatter(model.fittedvalues,model.resid)
plt.xlabel('拟合值')
plt.ylabel('残差')
plt.gca().set_aspect(1)
plt.savefig('fig1.png',dpi=400,bbox_inches='tight')

다음과 같이 반환합니다.

잔차는 종속변수 중 독립변수로 설명되지 않는 부분으로, 선형가정이 만족된다면 잔차와 적합치 사이에 추세관계가 없어야 하며 산포점은 y=0.

일반 QQ 플롯 그리기:

sm.qqplot(model.resid_pearson,stats.norm,line='45')
plt.gca().set_aspect(1)
plt.savefig('fig2.png',dpi=400,bbox_inches='tight')

다음과 같이 반환합니다.

QQ 그래프는 데이터 시퀀스가 ​​일정한 확률 분포를 만족하는지 확인할 수 있으며, 해당 분포의 확률 분위수를 가로 좌표로, 데이터 시퀀스의 분위수를 세로 좌표로 사용하여 산점도를 만듭니다. 확률분포, 그러면 흩어진 점들의 경향은 기본적으로 어떤 직선과 일치해야 합니다. 일반 QQ 플롯은 표준화된 잔차가 N(0,1) 을 따르는지 여부를 테스트합니다.

위 내용은 오늘 건어물의 모든 내용입니다.Maodou는 주말마다 이 시리즈를 업데이트하고 매 거래일마다 Whirlwind Charge 양적 전략의 실제 상황을 계속 공유할 것입니다.여러분의 좋아요와 팔로우를 환영합니다.

추천

출처blog.csdn.net/weixin_37475278/article/details/131152296