[투자] 강화학습을 위한 자산 격자 생성과 수식 해석

 

💹 강화학습을 위한 자산 격자 생성과 수식 해석 – 통계적 자산 범위까지 완벽 이해

강화학습(Reinforcement Learning)은 점점 더 금융 분야에서 널리 쓰이고 있습니다. 특히 재무 계획, 포트폴리오 최적화, 목표 기반 투자(goals-based investing) 같은 분야에서, 강화학습은 매우 강력한 툴이 될 수 있습니다.
이 글에서는 강화학습을 적용하기 전에 반드시 필요한 단계인 자산 상태 공간(state space) 구성 방법과, 그 핵심인 **자산 격자(wealth grid)**를 수학적으로 어떻게 정의하고 해석할 수 있는지 설명하겠습니다.


🧠 강화학습에서 상태(State)란?

강화학습에서 에이전트(agent)는 매 시간마다 환경(environment)으로부터 상태(state)를 받아 의사결정을 내립니다.

재무 환경에서는 상태가 보통 다음과 같이 구성됩니다:

  • 현재 자산 보유량: WtW_t

  • 현재 시점: tt

그러나 자산 WtW_t연속적이고 확률적인 값이므로, 이를 그대로 사용하기보다는 **이산화(discretization)**하여 다루기 쉽도록 격자 형태로 변환합니다. 이를 **자산 격자(wealth grid)**라고 합니다.


📈 자산은 왜 로그정규분포를 따르는가?

우리는 시간에 따른 자산의 진화를 수학적으로 다음과 같은 **기하 브라운 운동(GBM)**으로 모델링합니다:

Wt=W0exp((μ12σ2)t+σtZ)W_t = W_0 \cdot \exp\left( \left( \mu - \frac{1}{2}\sigma^2 \right)t + \sigma \sqrt{t}Z \right)

여기서:

  • μ\mu: 기대 수익률

  • σ\sigma: 수익률의 변동성

  • ZN(0,1)Z \sim \mathcal{N}(0,1): 표준 정규분포를 따르는 난수

이 식은 양수만 갖는 자산 값을 자연스럽게 설명하고, 확률 분포가 비대칭적으로 퍼지는 lognormal 형태를 재현할 수 있어 널리 쓰입니다.

로그를 취하면 식이 더 단순해집니다:

ln(Wt)=ln(W0)+(μ12σ2)t+σtZ\ln(W_t) = \ln(W_0) + \left( \mu - \frac{1}{2} \sigma^2 \right)t + \sigma\sqrt{t}Z

즉, 로그 자산 ln(Wt)\ln(W_t)정규분포를 따릅니다.


🧮 자산 격자 범위 계산 – 수식 해석

각 시간 tt에서 자산이 가질 수 있는 값들의 범위를 설정하기 위해, 우리는 로그 자산 ln(Wt)\ln(W_t)의 정규분포 특성을 사용합니다.

평균 (기댓값):

E[ln(Wt)]=ln(W0)+(μ12σ2)t\mathbb{E}[\ln(W_t)] = \ln(W_0) + (\mu - \frac{1}{2}\sigma^2)t

표준편차:

std[ln(Wt)]=σt\text{std}[\ln(W_t)] = \sigma \sqrt{t}

이를 바탕으로 다음처럼 상한/하한 범위를 설정합니다:

ln ( W min ) = E [ ln ( W t ) ] 2.5 σ t \ln(W_{\min}) = \mathbb{E}[\ln(W_t)] - 2.5\sigma\sqrt{t} ln ( W max ) = E [ ln ( W t ) ] + 2.5 σ t \ln(W_{\max}) = \mathbb{E}[\ln(W_t)] + 2.5\sigma\sqrt{t}

여기서 ±2.5 표준편차는 약 99.4%의 확률 질량을 포함하는 신뢰 구간입니다. 즉, 자산의 거의 모든 가능한 경우의 수를 포괄하는 범위입니다.


📊 실제 자산 격자 생성 (코드 포함)

import numpy as np import matplotlib.pyplot as plt from math import log, sqrt, exp # 파라미터 설정 W0 = 1_000_000 T = 10 nW = 101 mu_stock = 0.08 sig_stock = 0.20 # 로그 자산 격자 및 실제 자산 격자 생성 lnW = np.zeros((nW, T+1)) W = np.zeros((nW, T+1)) for t in range(T+1): lnW_min = log(W0) + (mu_stock - 0.5 * sig_stock**2)*t - 2.5 * sig_stock * sqrt(t) lnW_max = log(W0) + (mu_stock - 0.5 * sig_stock**2)*t + 2.5 * sig_stock * sqrt(t) lnW[:, t] = np.linspace(lnW_min, lnW_max, nW) W = np.exp(lnW)

📉 시각화

plt.figure(figsize=(10, 6)) plt.subplot(1, 2, 1) for t in range(T+1): plt.scatter(t * np.ones(nW), W[:, t], color='r') plt.xlabel("Time $t$") plt.ylabel("Wealth $W$") plt.subplot(1, 2, 2) for t in range(T+1): plt.scatter(t * np.ones(nW), lnW[:, t], color='r') plt.xlabel("Time $t$") plt.ylabel("Log of Wealth $\\ln(W)$") plt.tight_layout() plt.show()

왼쪽 그래프는 실제 자산 공간에서 시간 흐름에 따른 분산을 보여줍니다. 시간이 지날수록 자산 값의 분포는 점점 퍼지며 깔때기 형태를 띕니다.

오른쪽 그래프는 로그 자산 공간에서 균등한 분포를 보여주며, 수학적으로 더 안정적인 학습에 유리한 구조입니다.



🧠 자산의 상한값/하한값은 무엇을 의미할까?

정리하자면:

  • lnW_min, lnW_max는 시간 t에서 자산의 로그값이 위치할 가능성이 높은 하한과 상한값입니다.

  • 이를 지수화한 exp ( ln ( W min ) ) \exp(\ln(W_{\min})) exp ( ln ( W max ) ) \exp(\ln(W_{\max})) 자산값의 신뢰 구간 내 예상 하한/상한입니다.

  • 예를 들어, 초기 자산이 1,000만 원이고 연 수익률이 8%, 변동성이 20%일 때, 1년 뒤의 자산 분포는 대략 다음 범위 안에 존재할 확률이 99% 이상입니다.

이 범위를 통해 우리는:

  • 극단적 손실/이익 가능성을 시각화할 수 있고,

  • 상태 공간을 효율적으로 설정하며,

  • 학습 시 연산량을 줄이고, 학습 정확도를 높일 수 있습니다.


✅ 요약

항목의미
ln(Wt)\ln(W_t)
로그 자산은 정규분포를 따름
ln(Wmin/max)\ln(W_{\min/\max})
평균 ± 2.5 표준편차: 자산의 로그 하한/상한
W=exp(lnW)W = \exp(\ln W)
실제 자산 격자 (비선형 격자)
시각화로그 공간에서는 균등 분포, 실제 공간에서는 깔때기 형태
활용강화학습의 상태 공간 구성, 자산 리스크 관리, 학습 안정성 확보


학교에서 수학 가르칠 때 이런 주제로 알려주면 얼마나 좋았을까... 실용성이 있어야 재미가 있지!

댓글

이 블로그의 인기 게시물

[PLC] PLC 아날로그 입출력 기본

공압 속도 제어: 미터인 vs 미터아웃

[주식] 한국거래소(KRX) 데이터 API 입문 가이드

전력(kW) 계산하기 (직류, 교류 단상, 교류 삼상)

제너 다이오드에 저항을 연결하는 이유

[농사] 식물의 광합성과 호흡

[PLC] 절연 변압기 (Isolation Transformer)

[PLC] 래더 다이어그램과 PLC

NPN, PNP 트랜지스터 차이점

[PLC] 센서 NPN, PNP 출력 타입별 결선방법 (OMRON E2E-X 시리즈 3선식 배선)