선형보간법 연습 : 파이썬 구현(라이브러리 이용)
선형 보간법 연습
선형 보간법 연습이란 글을 통해서 개념을 먼저 학습한 다음 파이썬 실습을 해보면 더 좋다.
라이브러리 소개
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) 클릭 ) 라이브러리를 직접 검색해서 설치할 수도 있다.
SciPy와 Matplotlib을 이용한 선형 보간 연습
기초 데이터
다음은 2022년 4월 26일 원/달러 스왑포인트 데이터이다. ( 스왑포인트에 대한 자세한 개념은 이 블로그의 선물환 가격 결정 방법 : 스왑포인트의 이해를 참고하면 된다. ) 아래 그림에서 확인할 수 있듯이 스왑포인트는 1개월(30일), 2개월(60일), 3개월(90일), 6개월(180일), 1년(360일) 데이터밖에 없다. 그런데 내가 50일짜리 선물환 거래를 하고 싶다고 하면 어떤 가격을 써야 할까?
선형 보간 코딩하기
먼저 기일물을 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 정도가 나온다. 이 과정을 라이브러리를 사용하지 않고 직접 코딩할 수도 있는데 이는 선형 보간법 연습: 파이썬 구현 을 참고하면 된다.