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

선형보간법 연습 : 파이썬 구현

문송한투자자 2022. 5. 5. 16:01
반응형

선형 보간법 연습

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

선형 보간법 파이썬으로 구현하기

우리는 다른 글에서 파이썬 라이브러리를 이용해서 선형보간법을 구현해봤다.( 선형 보간법 연습: 파이썬 구현(라이브러리 이용) ) 라이브러리의 도움 없이 직접 선형 보간법을 구현하는 방법은 없을까? 

기초 데이터

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

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

기초 지식

파이썬에서 list 라는 데이터의 성질을 통해 위 문제를 풀어보려고 한다. ( 01 파이썬 데이터형식(&Pandas 데이터) 참조 ) 자세한 내용은 링크된 글을 참조하면 되고 우리가 사용할 성질은 파이썬에 tuple이라는 형식으로 데이터를 만들면 데이터에 번호가 매겨진다는 점이다. 예를 들면, 위 기일물을 30일, 60일, 90일, 180일, 360일로 나눌 때 tuple이라는 데이터 형식으로 다음과 같이 저장할 수 있다. 

x = [30, 60, 90, 180, 360]

여기에서 첫번째 데이터인 30 은 파이썬에서는 0번째 데이터라고 보고 x [0]과 같이 표현한다.

선형 보간 코딩하기

선형보간법의 핵심은 내가 구하고자 하는 변수가 어느 구간에 해당하는지를 아는 것이다. 어떤 구간인지 판단이 되면 구간의 시작점과 끝점을 이용한 비례식을 통해서 값을 구할 수 있다.


x_new = 50

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

if x_new < 30 :
    node = 0
elif x_new >= 30 and x_new < 60 :
    node = 1
elif x_new >= 60 and x_new < 90 :
    node = 2
elif x_new >= 90 and x_new < 180 :
    node = 3
elif x_new >= 180 and x_new < 360 :
    node = 4
elif x_new >= 360 :
    node = 5

y_new = ( x_new - x[node]) / (x[node+1]-x[node]) * (y[node+1]-y[node]) + y[node]

print(y_new)

 

위 코드에서 x_new 값인 50 일물은 30일보다는 크고 60일 보다는 작은 값으로 node라는 변수에 1을 부여할 것이다. 그렇다면 구간의 시작점은 x[1] = 30, y[1] = -130 구간의 끝점은 x[2] = 60, y[2] = -240 이 된다. 그러면 위 식에서도 볼 수 있듯이 x_new = 50에 대한 선형 보간법의 결과인 y_new 값은 대략 -203 정도가 나온다. ( 위 코드를 파이썬에서 그대로 실행해 보면 된다. ) 이는 정확히 SciPy 라이브러리를 이용하여 구현한 값과 같다. ( 선형 보간법 연습 : 파이썬 구현(라이브러리 이용) 참조 )

반응형