ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 선형보간법 연습 : 파이썬 구현(라이브러리 이용)
    금융퀀트/자산평가&프로그램매매 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 정도가 나온다. 이 과정을 라이브러리를 사용하지 않고 직접 코딩할 수도 있는데 이는 선형 보간법 연습: 파이썬 구현 을 참고하면 된다. 

    반응형
Designed by Tistory.