금융퀀트/자산평가&프로그램매매

선형보간법 연습 : 파이썬 구현(라이브러리 이용)

문송한투자자 2022. 5. 5. 15:09
반응형

선형 보간법 연습

선형 보간법 연습이란 글을 통해서 개념을 먼저 학습한 다음 파이썬 실습을 해보면 더 좋다.

라이브러리 소개

SciPy

SciPy(사이파이)는 공학 계산을 위한 파이썬 라이브러리로 Numpy, Matplotlib 등과 같이 쓰인다. 대수적인 계산이나 보간 등을 할 때 쓰이는데, 그냥 일반 계산기 대신에 공학 계산기를 쓴다고 생각하면 된다.

Matplotlib

Matplotlib 는 데이터를 시각화하는데 많이 쓰인다. 쉽게 생각해서 그래프를 쉽게 그려주는 도구라고 생각하면 된다. 

보통 위 두 라이브러리는 anaconda에서 파이썬을 설치하면 자동으로 세팅되어 있다. anaconda prompt에서 아래 명령어를 치면 내가 가진 라이브러리를 전부 볼 수 있으니 확인해보면 된다.

conda list

 

혹시나 라이브러리가 없는 경우 anaconda prompt 에서 SciPy는 첫 번째, Matplotlib는 두 번째 명령어를 치면 된다. 

pip install scipy
pip install matplotlib

 

물론  anaconda navigator에서 아래와 같이 Environments 텝에서 내가 원하는 환경을 클릭해서 ( 보통 기본 환경이니까 base(root) 클릭 ) 라이브러리를 직접 검색해서 설치할 수도 있다.

그림1: 라이브러리 설치

SciPy와 Matplotlib을 이용한 선형 보간 연습

기초 데이터

다음은 2022년 4월 26일 원/달러 스왑포인트 데이터이다. ( 스왑포인트에 대한 자세한 개념은 이 블로그의 선물환 가격 결정 방법 : 스왑포인트의 이해를 참고하면 된다. ) 아래 그림에서 확인할 수 있듯이 스왑포인트는 1개월(30일), 2개월(60일), 3개월(90일), 6개월(180일), 1년(360일) 데이터밖에 없다. 그런데 내가 50일짜리 선물환 거래를 하고 싶다고 하면 어떤 가격을 써야 할까?

그림2: 기일물별 스왑포인트 데이터

선형 보간 코딩하기

먼저 기일물을 x 축 변수로 잡고 스왑포인트를 y 축에 놓고 그래프를 구현해 보자.  위에서 소개한 라이브러리의 함수에 변수만 잘 갖다 넣으면 아래 코드를 이용해서 그림2 의 데이터를 선형 보간한 그래프를 확인할 수 있다.

#Scipy 와 Matplotlib 라이브러리 사용 
from scipy import interpolate
import matplotlib.pyplot as plt 

#그림2의 데이터 정의 ( x가 개월물, y가 스왑포인트)
x = [30, 60, 90, 180, 360]
y = [-130, -240, -355, -940, -2370]

#SciPy의 interploate 모듈의 interp1d 함수를 사용해서 선형보간 함수를 생성 
linear_func = interpolate.interp1d(x, y, kind='linear')

#선형보간 함수에 x를 넣어서 선형보간된 값인 y_linear를 구함
y_linear = linear_func(x)

#maplotlib 를 이용해서 x 값, y 값 으로 점 "o" 를 찍어주고
#x 값 y_linear 값 으로 "-" 표시로 점 사이를 채워줌
plt.plot(x,y,"o", x, y_linear, "-")

#maplotlib 를 이용해서 그래프를 보여줌
plt.show()

 

그렇다면 50 일물 즉 기일물이 1M과 2M 사이의 어딘가의 스왑포인트를 알고 싶으면 어떻게 해야 할까? 아래와 같이 x_new라는 변수를 잡고 위에서 만든 linear_func라는 함수에 넣어주면 값을 구할 수 있다.

from scipy import interpolate
import matplotlib.pyplot as plt 

x = [30, 60, 90, 180, 360]
y = [-130, -240, -355, -940, -2370]

linear_func = interpolate.interp1d(x, y, kind='linear')

y_linear = linear_func(x)

##위와 같음
#x_new라는 변수에 내가 스왑포인트를 알고싶은 기간물을 설정(여기선 50일짜리 스왑포인트)
x_new = 50
#linear_func에 x_new 라는 변수를 입력
y_new = linear_func(x_new)
#결과값 확인을 위해서 y_new를 출력
print(y_new)

 

정답은 대략 -203 정도가 나온다. 이 과정을 라이브러리를 사용하지 않고 직접 코딩할 수도 있는데 이는 선형 보간법 연습: 파이썬 구현 을 참고하면 된다. 

반응형