-
[파이썬] Historical Correlation(상관관계 추이) 계산하기기타/가상화폐 2021. 11. 25. 11:10반응형
상관관계는 어느 특정 시점에서 계산하는 것이 일반적이지만
가끔 상관관계가 시간의 변화에 따라 어떻게 달라졌는지 보고 싶을 때가 있다.
그럴 때는 아래와 같이 계산할 수 있다.
두 데이터에서 일정 시간이 지난 뒤부터 데이터가 변할 때마다 새롭게 상관관계를 계산하는 것이다.
1. 최근 n일의 상관관계를 보고 싶은 경우
일반적으로 최근 n일의 상관관계가 시간이 흐름에 따라서 어떻게 변했는지를 보는 것이 유용할 것이다.
데이터가 길어질수록 새로운 데이터가 미치는 영향력이 점점 줄어들기 때문에, 최근의 변화를 반영하기 어렵다.
그리고 상관관계는 수치 자체보다 과거에 비해 증가했냐 감소했냐, 즉 추세가 더 중요하기 때문이다.
또, 데이터의 길이는 상황이나 목적에 따라 달라지기 때문에
n을 직접 설정하기보단, 데이터의 길이에 맞게 달라지도록 짜 봤다.
cut = 5라면 n값은 전체 기간의 1/5이 된다.
def historical_corr(a:pd.Series,b:pd.Series,cut=5) -> pd.Series : # 시작점 맞추기 if a.index[0] <= b.index[0]: #a가 먼저 시작 a = a[b.index[0]:] else: #b가 먼저 시작 b = b[a.index[0]:] i = 0 rolling = len(a)//cut data = [] while i+rolling+1 != len(a): data.append(a[i:i+rolling].corr(b[i:i+rolling:])) i += 1 return pd.Series(data,index=a.index[rolling+1:])
2. 시작점을 고정하는 경우
예를 들어서 두 종목의 1년치 일봉 종가 데이터가 있다면
일정 시간(코드에서는 전체 기간의 1/10)이 지난 시점부터 매일매일 상관관계를 계산한다.
첫날부터 1/10지점까지 계산한 것이 첫 상관관계 데이터가 될 것이다.
첫날부터 1/10지점의 다음날까지 계산한 것이 두 번째 데이터가 된다.
이 방법으로 마지막 데이터까지 상관관계를 구해서 시리즈에 저장한 뒤 리턴한다.
def historical_corr(a,b) -> pd.Series : # 시작점 맞추기 if a.index[0] <= b.index[0]: #a가 먼저 시작 a = a[b.index[0]:] else: #b가 먼저 시작 b = b[a.index[0]:] # 어느정도 지난 시점부터 상관관계 계산 i = len(a)//10 data = [] while i != len(a): data.append(a[:i].corr(b[:i])) i += 1 return pd.Series(data,index=a.index[len(a)//10:])
반응형'기타 > 가상화폐' 카테고리의 다른 글
가상화폐 포트폴리오의 헤지 아이디어 (1) 2021.11.28 [파이썬] 가상화폐 포트폴리오 만들기 (0) 2021.11.28 [파이썬] 업비트 인덱스 UBCI 크롤링하기 (0) 2021.11.23 AWS Lightsail에서 가상화폐 자동매매 봇 돌리기 - 초보자도 이해 가능 (0) 2021.09.19 FTX 거래소 API 이용하기 - 펀딩피 불러오기 (0) 2021.09.13