Alpha-gfn: 생성적 흐름 네트워크를 이용한 공식화된 알파 요인 마이닝
요약
이 논문은 생성적 흐름 네트워크(GFlowNet)를 활용하여 공식화된 알파 요인을 마이닝하는 방법을 제시합니다. 계량 투자에서 사용되는 이 알파 요인은 시장 데이터의 패턴을 포착하여 투자 신호를 생성하며, GFlowNet과 심층 강화학습 프레임워크를 결합해 이를 탐색합니다.
핵심 포인트
- 공식화된 알파 요인은 금융 데이터를 기반으로 투자 신호를 생성하는 수학적 공식입니다.
- GFlowNet은 복잡한 시장 데이터에서 패턴을 추출하고 알파 요인을 마이닝하는 데 사용됩니다.
- 본 프로젝트는 심층 강화학습 프레임워크를 활용하여 알파 요인 탐색 애플리케이션을 구축했습니다.
Alpha-gfn: 생성적 흐름 네트워크를 활용하여 공식화된 알파 요인을 마이닝
본 저장소의 아이디어를 채택한 저희의 새로운 논문을 확인해 주세요:
- :star2::star2::star2: Chen, B., Ding, H., Shen, N., Huang, J., Guo, T., Liu, L., & Zhang, M. (2025). AlphaSAGE: GFlowNet을 이용한 구조 인식 알파 마이닝을 통한 강력한 탐색.
본 저장소에서 제공된 코드를 사용하실 경우 인용해 주십시오.:
- APA 스타일: Shen, N. (2024). Alpha-gfn: Mining formulaic alpha factors with generative flow networks. https://github.com/nshen7/alpha-gfn
- BibTeX 스타일:
@software{shen2024, author = {Shen, Ning}, title = {Alpha-gfn: Mining formulaic alpha factors with generative flow networks},
...
----
이 저장소에서는 생성적 흐름 네트워크 모델(즉, GFlowNet)을 사용하여 공식화된 알파 요인을 마이닝하기 위해 심층 강화학습 (deep reinforcement learning) 프레임워크를 활용하는 애플리케이션을 구축했습니다. 산업 NDA 문제로 인해 이 저장소는 시연 목적으로만 사용되며, 따라서 소량의 훈련 데이터만을 사용하는 간단한 예제만 포함하고 있습니다.
저희는 다음 질문에 답함으로써 프로젝트의 기본적인 구성 요소에 대해 간략하게 소개합니다.
- 공식화된 알파 요인이란 무엇이며 왜 이를 탐색해야 하나요?
- 강화학습 (reinforcement learning)의 기본 구성 요소는 무엇인가요?
- GFlowNet 모델이란 무엇인가요?
- 왜 GFlowNet을 사용하나요?
### 공식화된 알파 요인이란 무엇이며 왜 이를 탐색해야 하나요?
계량 투자(quantitative investment)에서, 공식화된 알파 요인(formulaic alpha factors)은 금융 데이터(예: 이 데모의 미국 주식) 내의 패턴이나 신호를 식별하고 잠재적으로 활용하는 데 사용되는 수학적 표현 또는 공식입니다. 이러한 요인들은 일반적으로 과거 시장 데이터에서 파생되며 거래 전략을 위한 투자 신호 생성에 사용됩니다. 공식화된 알파 요인의 일반적인 특징은 다음과 같습니다:
1. **정량적 공식화(Quantitative Formulation):** 알파 요인(Alpha factors)은 주가, 거래량, 재무 비율 또는 기타 시장 지표와 같은 입력 특징 데이터(input feature data)를 기반으로 수치 값을 계산하는 공식이나 알고리즘 형태로 표현됩니다.
1. **신호 생성(Signal Generation):** 알파 요인은 미래 가격 움직임이나 다른 시장 역학을 예측한다고 여겨지는 시장 데이터의 신호 또는 패턴을 포착하도록 설계됩니다. 이러한 신호는 증권을 매수, 매도하거나 보유할 기회를 나타낼 수 있습니다.
1. **백테스팅 및 검증(Backtesting and Validation):** 공식적인 알파 요인은 일반적으로 과거 데이터를 사용하여 긍정적인 수익을 창출하거나 시장을 초과하는 성과를 내는지 평가하기 위해 테스트되고 검증됩니다.
1. **거래 전략 통합(Integration into Trading Strategies):** 알파 요인은 종종 정량적 거래 전략에 통합되며, 포트폴리오 구성(portfolio construction), 포지션 규모 결정(position sizing), 위험 관리(risk management), 거래 실행(trade execution)과 같은 의사결정 프로세스의 입력으로 사용됩니다.
**본 프로젝트에서는 주가 추세를 예측하는 데 우수한 성능을 보이는 다양한 알파 요인을 생성하는 알고리즘을 개발하고자 합니다. 가장 이상적인 경우, 이는 알파 요인 연구자들에게 영감을 제공하거나 심지어 거래 전략 자체의 일부가 될 수 있을 것입니다.**
우리는 알파 요인 $f$를 트레이딩일의 모든 주식 특징 벡터(feature vectors) $X_t$를 알파 값 $z_t = f(X_t)$로 매핑하는 함수로 정의합니다. 공식적인 알파 요인의 예시로는 이동 평균(moving averages), 모멘텀 지표(momentum indicators), 상대 강도 지수(relative strength indexes), 주가 수익 비율(price-to-earnings ratios) 및 다양한 기술적/기초 지표 등이 있습니다. 하지만, 본 데모에서는 <ins>기술적 지표만을 고려하며 검색 공간은 개장가와 종가 등 일일 빈도의 시장 데이터로만 구성됩니다</ins>(자세한 내용은 [Methodology](#methodology) 참조).
알파 요인의 효과를 측정하는 일반적인 방법은 해당 알파 요인이 예측하고자 하는 주가 추세 $y_t$와 요인 값 $f(X_t)$ 사이의 (절대) 정보 상관관계 (IC)이며, 이는 보통 $y_t$와 $f(X_t)$의 *스피어만 상관계수*로 정의됩니다.
### 강화학습의 기본 구성 요소?
다음은 프로젝트에 사용되며 본 소개에서 다룰 중요한 개념들의 비포괄적 목록입니다.
1. **Agent (행위자)**: 환경과 상호작용하는 학습자 또는 의사결정자입니다. 행동을 취하고 그 행동에 기반하여 보상을 받습니다. 저희의 경우, GFlowNet으로 모델링된 '알파 생성기'가 이에 해당합니다.
2. **Environment (환경)**: 행위자가 상호작용하는 외부 시스템입니다. 행위자로부터 행동을 받고 관측값과 보상을 반환합니다. 저희의 경우, 주식 시장이 이에 해당합니다.
3. **State (상태)**: 특정 시점의 환경 스냅샷입니다. 의사결정에 필요한 모든 관련 정보를 포함합니다. 시간 $t$에서의 상태는 보통 $s_t$로 표기됩니다. 저희의 경우, 알파 요인의 수학적 표현을 구성하는 행동 토큰의 순서열입니다 (자세한 내용은 [상태 공간](#state) 참조).
4. **Action (행동)**: 환경의 상태에 영향을 미치는 행위자가 내린 결정입니다. 가능한 모든 행동의 집합을 행동 공간이라고 합니다. 시간 $t$에서의 행동은 보통 $a_t$로 표기됩니다. 저희의 경우, 행동 공간은 수학적 연산자와 시장 데이터 특징으로 구성됩니다 (자세한 내용은 [행동 공간](#action) 참조).
5. **Reward (보상)**: 환경으로부터 행위자가 받는 스칼라 피드백 신호입니다. 행위자가 취한 행동이 얼마나 좋았거나 나빴는지를 나타냅니다. 상태 $s_t$의 보상은 보통 $R(s_t)$로 표기됩니다. 저희의 경우, 생성된 알파 요인에서 누락 데이터 비율로 페널티가 적용된 정보 상관관계 (IC)의 제곱으로 정의됩니다 (자세한 내용은 [보상](#reward) 참조).
**정책 (Policy)**: 에이전트가 상태를 기반으로 행동을 선택하는 전략 또는 규칙입니다. 이는 상태에서 행동으로의 매핑을 정의합니다. 정책을 설명하는 확률 함수는 보통 $\pi(a_t|s_t)$로 표기됩니다. (자세한 내용은 [Policy](#policy)를 참조하세요.)
### GFlowNet 모델이란 무엇인가요?
GFlowNet은 훈련된 확률적 정책 또는 생성 모델이며, 비음의 적분 가능한 함수 $R(x)$에 비례하는 확률로 일련의 구성 단계(즉, 행동)를 통해 객체 $x$를 샘플링하도록 훈련됩니다. 적절한 훈련 세션 후, GFlowNet은 높은 $R(x)$ 값을 가진 다양한 해답 $x$를 샘플링할 수 있을 것으로 기대됩니다. [[1]](references)
여기서 'flow'라는 단어는 실제로 상태가 주어졌을 때 행동의 비정규화된 확률을 의미합니다. 제안된 접근 방식은 상태가 주어졌을 때 특정 행동에 할당되는 확률을, 노드가 상태인 네트워크에서 해당 노드에서 나가는 간선이 행동에 의해 결정론적으로 구동되는 흐름(flow)과 관련된 것으로 간주합니다. 네트워크로 들어오는 총 흐름은 터미널 상태에서의 보상 합계(즉, 분할 함수)이며, 이는 루트 노드(또는 시작 상태)의 흐름과 같다는 것이 입증될 수 있습니다. 제안된 알고리즘은 벨만 업데이트(Bellman updates)에서 영감을 받았으며, 각 상태로 들어오고 나가는 흐름이 일치할 때 수렴합니다. [[4]](references)
<div align="center">
<img src="https://raw.githubusercontent.com/nshen7/alpha-gfn/HEAD/misc/figures/gflownet_anim.gif" alt="예시 이미지" width=500>
<figcaption>출처: [1] </figcaption>
</div>
이러한 순방향 구성 행동 각각을 샘플링하기 위해 신경망(neural net)을 사용할 수 있습니다. 객체 $x$는 특별한 '종료(exit)' 행동이나 상태의 결정론적 기준(예: $x$가 정확히 $n$개의 요소를 가짐)이 트리거되었을 때, 즉 우리가 터미널 상태 $x$에 도달했을 때 구성이 완료되며, 그 후에 우리는 보상 $R(x)$를 얻을 수 있습니다.
PS: 보상(Reward)은 궤적(trajectory)의 터미널 상태에 도달한 후에만 얻을 수 있는데, 이것이 RL의 소위 *에피소드 설정(episodic setting)*입니다.
<div align="center">
<img src="https://raw.githubusercontent.com/nshen7/alpha-gfn/HEAD/misc/figures/gfn-action.png" alt="예시 이미지">
<figcaption>출처: [1] </figcaption>
</div>
### GFlowNet을 사용해야 하는 이유?
GFlowNet은 오라클(oracle) 자체가 불확실한 경우, 생성된 후보들의 **다양성(diversity)**이 특히 중요할 때 동기 부여됩니다. '오라클'이란 일반적으로 환경에 대한 완벽한 지식을 가지고 있어 최적의 행동이나 해답을 제공할 수 있는 이상적인 에이전트 또는 시스템을 의미합니다. 전통적인 강화학습(RL) 알고리즘은 가장 높은 보상 순서의 단일 행동 시퀀스를 생성하려고 노력하는 반면, GFlowNet은 주어진 양의 리턴 또는 보상 함수에 비례하는 확률을 가진 궤적 분포를 샘플링합니다 [4,5]。
공식화된 알파 요인(formulaic alpha factors)을 검색하는 작업에서 중요한 것은 알파 요인의 예측 성능뿐만 아니라, 주식 시장의 방대한 정도(stochasticity) 때문에 검색 알고리즘의 **탐색(exploration)** 능력도 중요합니다. 우리는 IC를 예측 성능 지표로 사용할 수 있지만, 맹목적으로 높은 절대 IC를 추구하는 것은 과적합(overfitting)과 요인 간의 허위 상관관계(spurious correlation)를 유발할 수 있습니다. 따라서 GFlowNet은 샘플링된 알파 요인들이 다양성을 갖기를 원하는 저희 연구 문제에 유리합니다.
## 데이터셋
계산 부담을 줄이기 위해, 본 데모에서는 2018년부터 2019년까지 S&P 500 지수 주식의 과거 시장 데이터를 훈련 목적으로 사용했습니다. 특징(Features)에는 다음이 포함됩니다:
- **Open**: 시가(opening price)
- **High**: 당일 최고가(maximum price during the day)
- **Low**: 당일 최저가(minimum price during the day)
- **Close**: 분할 조정된 종가(close price adjusted for splits)
- **Volume**: 주어진 날짜 동안 거래된 주식 수(the number of shares that changed hands during a given day)
데이터 소스:
- S&P500의 주식 티크(stock ticks) 세트는 https://github.com/datasets/s-and-p-500-companies/blob/main/data/constituents.csv에서 추출되었습니다.
- 미국 주식 시장 데이터는 https://www.kaggle.com/datasets/jacksoncrow/stock-market-dataset에서 다운로드했습니다.
사전 처리 단계는 `notebooks/preprocess.ipynb`에서 확인할 수 있습니다.
## 방법론 (Methodology)
본 방법론은 [[6]](references)에서 제안된 프레임워크에서 영감을 받았습니다. 방법론의 구현은 `src/` 폴더에서 찾을 수 있으며, 예시 훈련 세션과 간단한 분석은 `notebooks/train.ipynb`에서 확인할 수 있습니다.
### 액션 공간 (Action space)
액션(action)은 연산자(operator) 또는 피처(feature)가 될 수 있는 토큰을 생성하는 것으로 정의됩니다. 시연 목적을 위해 여기서는 단항 및 이항 연산자의 작은 세트만 포함했습니다. 사용된 모든 토큰 목록은 다음과 같습니다:
| 카테고리 | 예시 |
| :--- | :--- |
| 단항 연산자 (Unary operators) | abs($ ext{cdot}$), ops_log($ ext{cdot}$), ops_roll_std($ ext{cdot}$) |
| 이항 연산자 (Binary operator) | ops_add($ ext{cdot}$, $ ext{cdot}$), ops_subtract($ ext{cdot}$, $ ext{cdot}$), ops_multiply($ ext{cdot}$, $ ext{cdot}$), ops_divide($ ext{cdot}$, $ ext{cdot}$), ops_roll_corr($ ext{cdot}$, $ ext{cdot}$) |
| 피처 (Features) | $open, $close, $high, $low, $volume |
연산자의 상세 정의는 `src/alphaclass`의 `step` 함수에서 확인할 수 있습니다.
### 상태 공간 (State space)
상태(state)는 모델이 수행한 액션에 의해 생성된 토큰 시퀀스입니다. [[6]](references)와 유사하게, 알파 요인(alpha factor)의 수학적 표현을 선형 토큰 시퀀스로 변환하기 위해 역폴란드 표기법(reverse Polish notation)을 채택했습니다. 예를 들어, 표현식 `ops_roll_std(ops_add(ops_abs($high),$volume))`은 리스트 `['BEG', '$high', 'ops_abs', '$volume', 'ops_add', 'ops_roll_std', 'SEP']`로 표현됩니다. 이는 피연산자 스택 데이터 구조를 사용하여 구현되었습니다.
### 보상 (Reward)
보상은 다음날 포워드 수익률과 알파 값 간의 제곱 정보 상관관계(IC)로 정의되며, 이 보상에는 시간 기간 내 모든 날짜에 걸친 알파 요인 테이블의 결측 비율이 페널티로 적용됩니다 (즉, 2018-2019). 구체적으로, 현재일의 알파 값을 주어졌을 때, 다음날 포워드 수익률 $y_t$는 다음 거래일과 그다음 두 번째 거래일 사이의 주가 상승 또는 하락 비율로 정의됩니다.
다시 말씀드리자면, 예측하고자 하는 주식 추세 $y_t$와 요인 값 $f(X_t)$ 간의 $ ext{IC}$는 $y_t$와 $f(X_t)$의 *스피어만 상관계수(Spearman correlation)*로 정의됩니다. 따라서, 생성된 알파 요인에 대해 주어지는 보상은 다음과 같습니다:
$$R(X) = rac{1}{T}\sum_{t=1}^{T} Corr_{ ext{spearman}}(f(X_t), y_t)^2 \times (1- ext{NaN}\%)$$
### 손실 함수
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub AI Research의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기