Numba, 몬테카를로 시뮬레이션 속도 향상

오늘의 포스트에서 나는 수치 시뮬레이션의 속도를 높일 수 있는 수치  보여주는 또 다른 예를 제공할 것 입니다. 저는 이 모듈을 주가 랜덤 워크의 몬테카를로 시뮬레이션에 적용합니다. 이것은 인기 있는 몬테카를로 시뮬레이션 예제이며 몇 년 전에 블로그 게시물에서도 이에 대한 예제를 제공했습니다.

Python에서 숫자를 사용한 몬테카를로 시뮬레이션

아래 코드 세그먼트에서 관련 모듈과 모듈의 일부를 가져옵니다. 이전 게시물에서 지적했듯이 numpy 에서는 예를 들어 잘 작동 하지만 pandas 에서는 잘 작동하지 않습니다 . 가격 랜덤 워크 몬테카를로 시뮬레이션의 두 가지 버전을 구현합니다. 두 시뮬레이션 모두 365일 동안 n개의 무작위 걷기를 반복합니다. 매일 가격 변동은 지정된 일일 수익률과 지정된 일간 수익률의 표준 편차를 갖는 무작위 정규 분포에 따라 무작위로 분포됩니다.

import numpy as np
from matplotlib import pyplot as plt
import random
import time
from numba import njit

def random_walker(n: int, length: int) -> np.ndarray:

    arr = np.zeros((n, length), dtype = float)

    for i in range(n):

        idx = 100

        for j in range(length):
            
            idx += idx*random.gauss(0.00015, 0.02)

            arr[i, j] = idx
    
    return arr

@njit
def nb_random_walker(n: int, length: int) -> np.ndarray:

    arr = np.zeros((n, length), dtype = float)

    for i in range(n):

        idx = 100

        for j in range(length):
            
            idx += idx*random.gauss(0.00015, 0.02)

            arr[i, j] = idx
    
    return arr

이제 무작위 시뮬레이션 실행을 차례로 실행하고 두 실행의 시뮬레이션 기간을 계산합니다. 아래 코드에서 이것을 볼 수 있습니다.

# --- monte carlo run without numba ------------------
starttime = time.time()
arr = random_walker(10000, 365)
endtime = time.time()

print("monte carlo random walk without NUMBA: ")
print(endtime-starttime)

# --- monte carlo run with numba --------------------
starttime = time.time()
arr = nb_random_walker(10000, 365)
endtime = time.time()

print("monte carlo random walk with NUMBA: ")
print(endtime-starttime)

출력은 다음과 같습니다.

monte carlo random walk without NUMBA: 
1.9181511402130127
monte carlo random walk with NUMBA: 
0.6535243988037109

이 경우 numa 는 몬테카를로 시뮬레이션 런타임을 거의 3배 향상시켰 습니다. 그건 그렇고, 이것은 랜덤 워크의 모습입니다:

numa는 몬테카를로 시뮬레이션을 더 빠르게 만듭니다.

최종 발언 및 관련 내용

이 기사에서는 Python의 모듈인 numa 가 몬테카를로 시뮬레이션을 훨씬 더 빠르게 만드는 방법을 보여주었습니다. 그러나 이 모듈과 함께 제공되는 제약 조건을 알고 있어야 합니다. 내가 지적했듯이 숫자 프레임워크가 있으면 숫자를 최대한 활용할 수 있습니다. 또한,numa와 잘 작동하는 모듈과 패키지와 그렇지 않은 모듈에 대해 알고 있어야 합니다. 예를 들어 numpy 는numpy 와 잘 작동하지만 pandas 는 그렇지 않습니다.

여기에서 더 읽을 수 있습니다:

여기에서 Python의 또 다른 예를 볼 수도 있습니다.

You May Also Like

Leave a Reply

Leave a Reply

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.