배우기 / 논문 리뷰 / 핵심 아키텍처·알고리즘 / CPAL2026 / AlphaFormer: End-to-End Symbolic Regression of Alpha Factors with Transformers

AlphaFormer: End-to-End Symbolic Regression of Alpha Factors with Transformers

금융·퀀트 현장에서 알파 팩터는 여전히 수작업 공식 + 블랙박스 모델 사이에서 갈팡질팡합니다. AlphaFormer는 트랜스포머를 합성 시계열 데이터로 사전학습해, 새 시장 데이터가 들어오면 해석 가능한 심볼릭 공식을 엔드투엔드로 빠르게 뱉어내는 파이프라인을 제안합니다. 이 글에서는 선형 풀 결합, IC 기반 평가, PPO로 정책을 안정화하는 수식을 한 줄씩 해부합니다.
PDF원문 논문 PDF 보기
[초록 & 서론] 3줄 요약 + 문제 제기
3줄 요약
- ① 기존 기술의 치명적 한계: 유전 프로그래밍(GP)이나 강화학습(RL) 기반 심볼릭 회귀는 새 데이터셋마다 탐색을 처음부터 다시 해야 해서, 과거에 쌓인 "공식 문법"을 거의 재사용하지 못합니다. 같은 요리를 매일 처음부터 발명하는 셈입니다.
- ② 고전적 방식의 단점: LightGBM·LSTM 등은 예측은 잘해도 내부가 블랙박스이고, 전문가가 손으로 공식을 짜는 방식은 탐색 공간이 너무 커서 확장이 어렵습니다.
- ③ 논문의 핵심 해결책: AlphaFormer는 트랜스포머를 다양한 합성 주가 데이터로 사전학습한 뒤, 실제 시장 XtX_t만 주면 RPN 형태의 알파 공식을 즉시 생성합니다. 한 번 시장의 문법을 몸에 익힌 뒤, 새 주방에서도 재료만 보면 요리를 내는 셰프에 가깝습니다.
맞춤 비유: 매번 레시피를 발명하는 로봇 vs 만능 레시피를 외운 마스터 셰프
기존 GP/RL 심볼릭 회귀는 새 시장(새 주방)에 갈 때마다 소금·설탕 비율을 무작위로 섞으며 맨땅에서 레시피를 찾는 로봇입니다. AlphaFormer는 수많은 가짜 주방(합성 데이터)에서 연습해 재료 조합의 문법을 익힌 뒤, 실전 재료 XtX_t만 보고 즉석에서 공식(알파 팩터)을 완성합니다. 블랙박스에 기대지 않으면서도, 탐색 비용은 크게 줄이는 방향입니다.
[배경 지식] 꼭 필요한 기초 개념
이후 수식과 파이프라인을 읽을 때 "왜 이런 장치가 필요한가"를 바로 떠올리게 하려면, 아래 다섯 가지를 정의 → 직관 → 이 논문에서의 역할 순으로 머릿속에 깔아 두는 것이 좋습니다.
- 알파 팩터 (Alpha factor)
정의(쉬운 말 먼저): 어떤 하루(한 시점) tt에 관심 있는 종목이 SS개 있다고 칩시다. 각 종목마다 숫자 dd(예: 종가, 거래량, 최근 수익률 등)가 있고, 모델이 그걸 한꺼번에 읽어 종목마다 “앞으로 상대적으로 얼마나 유리할까?” 점수를 하나씩 내 주는 규칙·함수가 알파 팩터입니다. 점수 SS개를 모은 벡터가 ztz_t입니다.
표로 상상하기: 표는 SS개(종목 한 줄이 한 행) × dd개(지표 한 종류가 한 열)입니다. 이 전체 입력을 XtX_t라 부르면 XtRS×dX_t \in \mathbb{R}^{S \times d}이고, SS×dd는 “그날 종목 수 × 종목당 지표 수”입니다. 출력 ztRSz_t \in \mathbb{R}^Sii번째 숫자 = ii번째 종목 점수입니다.
직관: 한 종목만 시간 순으로 쭉 따라가는 그림이 아니라, 같은 날 여러 종목을 나란히 놓고 “오늘 기준 누가 더 위인가”를 매기는 쪽입니다(이걸 횡단면·cross-section이라고 부릅니다). 롱숏·랭킹 포트폴리오는 이 점수 순서를 보고 살 쪽·팔 쪽·비중을 정합니다.
이 논문: 생성기의 출력이 결국 해석 가능한 심볼릭 공식으로 구현된 알파 팩터라는 점에서, 이 정의가 전체 스토리의 출발점입니다.
- 심볼릭 회귀 (Symbolic regression)
정의: 수치 가중치만 맞추는 것이 아니라, `mean(close, 20d)`처럼 연산과 창 길이가 드러나는 공식(연산 트리) 자체를 탐색합니다.
직관: 블랙박스가 "내부적으로 뭘 하는지" 대신, 사람이 읽을 수 있는 레시피를 찾는 문제입니다. 탐색 공간은 거대하지만, 한 번 좋은 구조를 찾으면 감사·감리·리스크 설명에 재사용하기 쉽습니다.
이 논문: GP·RL 심볼릭 탐색이 데이터셋마다 처음부터 넓게 헤매는 한계를, 트랜스포머가 토큰으로 공식을 생성하는 방식으로 바꾸는 대비 축이 됩니다.
- RPN (Reverse Polish Notation, 후위 표기법)
정의: 익숙한 중위(infix) 예시는 `mean(close, 20d)`(종가의 20일 평균)입니다. 모델이 왼쪽에서 오른쪽으로 생성하는 것은 같은 의미의 토큰 나열입니다: `close` → `20d` → `mean` → `end`. 각각은 어휘 안의 한 토큰이고, `end`는 “이 한 덩어리 부분식이 여기서 끝난다”는 구분용 특수 토큰입니다. `[volume, 20d, mean, end]`처럼 대괄호로 묶으면 프로그래밍의 배열과 헷갈리기 쉬우니, 순서만 있는 토큰 스트림으로 이해하면 됩니다. 괄호 대신 스택으로 연산 순서를 고정합니다.
직관: 트랜스포머는 본질적으로 "왼쪽에서 오른쪽으로 토큰을 한 개씩 뱉는" 모델이라, RPN은 그 생성 방향과 잘 맞습니다.
이 논문: 알파 공식을 자연어가 아니라 RPN 토큰열로 생성·학습한다는 설정을 이해하려면 이 표기가 필수입니다.
- IC (Information coefficient)
정의: 보통 일(日) 단위로, 예측 점수 벡터와 실현 라벨(다음 기간 수익 등) 사이의 피어슨 상관을 말합니다. 값이 클수록 예측 순위가 수익 순위와 같이 움직였다는 뜻입니다.
직관: "그날 모델이 매긴 순위가 실제로 얼마나 맞았는가"를 한 숫자로 요약한 일일 성적표입니다. 극단값 한두 종목에 끌려가기 싫으면 Rank IC(순위 상관)를 함께 봅니다.
이 논문: 풀 학습·(필요 시) RL 보상에서 품질 지표로 IC가 등장하므로, "무엇을 최적화하는가"를 이해하는 열쇠입니다.
- 합성 데이터 생성 (Synthetic data)
정의: 실제 시장 대신, GRU·트랜스포머·디퓨전 등 생성 모델이 만든 시계열로 사전학습합니다. 논문은 여러 생성기를 앙상블해 다양한 시간 의존 패턴을 노출합니다.
직관: 라벨이 시끄럽고 표본이 부족한 실전 데이터만으로는 "연산 조합의 문법"을 익히기 어렵습니다. 합성 데이터는 연습장 역할을 해, 나중에 실제 XtX_t가 와도 공식 생성이 덜 헤매게 합니다.
이 논문: AlphaFormer가 문법 사전학습 → 소량 실데이터 적응 흐름을 갖도록 만드는 전제입니다.
[제안 방법] 핵심 제안 및 수식 완벽 해부
1) Alpha Pool — 여러 공식을 한 방에 섞기
생성기가 mm개의 후보 팩터 fkf_k를 만들면, 최종 점수는 선형 결합으로 모읍니다.
zt=g(Xt)=k=1mwkfk(Xt)z_t = g(X_t) = \sum_{k=1}^{m} w_k\, f_k(X_t)
- 직관: fkf_k는 "각각 다른 관점의 셰프"이고, wkw_k의견 비중입니다. gg는 풀 전체를 하나의 예측기로 묶는 앙상블 헤드입니다.
2) 풀 가중치 학습 — 가속 페달과 L1 브레이크
가중치 ww는 아래를 최소화해 구합니다.
L(w)=1STt=1Tg(Xt)yt22+λw1\mathcal{L}(w) = \frac{1}{ST} \sum_{t=1}^{T} \big\| g(X_t) - y_t \big\|_2^2 + \lambda \|w\|_1
- 첫 항 (가속 페달): yty_t는 시점 tt실제 미래 수익(라벨 벡터)입니다. 예측 g(Xt)g(X_t)와의 평균 제곱 오차를 줄여 "맞추기" 압력을 줍니다. STST로 나누는 것은 전체 표본 수(종목×시간)에 대한 평균입니다.
- λw1\lambda\|w\|_1 (브레이크·가위): L1은 일부 wkw_k를 정확히 0으로 밀어 쓸모없는 팩터를 제거합니다. 과적합을 줄이고 해석 가능한 슬림한 풀을 남깁니다.
3) IC로 "맛 보기" — 일별 상관의 평균
σˉ(g(X),y)=1Tt=1Tσ(g(Xt),yt)\bar{\sigma}(g(X), y) = \frac{1}{T} \sum_{t=1}^{T} \sigma\big(g(X_t), y_t\big)
σˉrank(g(X),y)=1Tt=1Tσrank(g(Xt),yt)\bar{\sigma}_{\mathrm{rank}}(g(X), y) = \frac{1}{T} \sum_{t=1}^{T} \sigma_{\mathrm{rank}}\big(g(X_t), y_t\big)
- σ\sigma는 Pearson 상관, σrank\sigma_{\mathrm{rank}}순위 상관입니다. 값 자체보다 종목 간 순서가 중요한 포트폴리오 구성에는 Rank IC가 잘 맞습니다.
4) PPO로 생성 정책 안정화 — 클리핑과 가치 헤드
팩터 토큰을 뽑는 정책 πθ\pi_\theta를 강화학습으로 다듬을 때, 논문은 PPO 계열 손실을 사용합니다.
L(θ,ϕ)=LCLIP(θ)+ηLvalue(ϕ)\mathcal{L}(\theta, \phi) = \mathcal{L}^{\mathrm{CLIP}}(\theta) + \eta\, \mathcal{L}^{\mathrm{value}}(\phi)
LCLIP(θ)=E^[min(rt(θ)A^t, clip(rt(θ),1ϵ,1+ϵ)A^t)]\mathcal{L}^{\mathrm{CLIP}}(\theta) = -\, \hat{\mathbb{E}}\Big[ \min\big( r_t(\theta)\,\hat{A}_t,\ \mathrm{clip}(r_t(\theta), 1-\epsilon, 1+\epsilon)\,\hat{A}_t \big) \Big]
Lvalue(ϕ)=Vϕ(D,P)r22\mathcal{L}^{\mathrm{value}}(\phi) = \big\| V_\phi(\mathcal{D}, \mathcal{P}) - r \big\|_2^2
- rt(θ)r_t(\theta) (ratio): 새 정책과 행동 직전 정책의 확률비입니다. 너무 급격한 정책 변화를 막기 위해 1±ϵ1\pm\epsilon 안으로 잘라냅니다 — 이게 안전 벨트 역할입니다.
- A^t\hat{A}_t (advantage): "이 행동이 평균보다 얼마나 좋았는가"입니다. 논문 맥락에서는 풀을 업데이트한 뒤의 IC 기반 보상과 가치 추정 차이로 잡을 수 있습니다.
- VϕV_\phi: 상태(데이터·현재 풀)의 기대 보상을 예측하는 가치 네트워크. Lvalue\mathcal{L}^{\mathrm{value}}예측값과 실제 보상 rr을 맞춥니다.
- η\eta: 정책 손실 대비 가치 손실 비중입니다.
수식 읽기 — 기호를 이 순서로 천천히
같은 「제안 방법」 안에서만, 위 네 수식에 등장하는 기호를 뜻 → 역할 순으로 정리합니다. (별도 표나 카드로 빼지 않습니다.)
- XtX_t, SS, dd: XtX_t는 날짜 tt입력 특징입니다. XtRS×dX_t\in\mathbb{R}^{S\times d}로 두면 SS는 그날 유니버스 종목 수, dd는 종목마다 붙는 피처 차원입니다.
- ztz_t: RS\mathbb{R}^S 벡터로, ii번째 성분이 ii번째 종목 알파 점수입니다.
- fkf_k, mm, wkw_k, gg: fk(Xt)f_k(X_t)는 생성기가 만든 kk번째 후보 공식의 점수 벡터입니다. mm은 풀 안 후보 개수, wkw_k믿음/비중, g(Xt)g(X_t)는 이들을 선형 결합한 최종 예측입니다.
- yty_t, TT, STST, 22\|\cdot\|_2^2: yty_t는 시점 tt라벨(예: 다음 기간 수익) 벡터입니다. TT는 학습에 넣은 거래일 수, SS는 종목 수, STST종목×날짜 총 셀 수이므로 손실 앞 1STt\frac{1}{ST}\sum_t는 모든 표본에 대한 평균입니다. v22\|v\|_2^2는 벡터 vv각 성분을 제곱해 더한 값입니다.
- λ\lambda, w1\|w\|_1: w1=k=1mwk\|w\|_1=\sum_{k=1}^m|w_k|입니다. λ\lambda가 클수록 더 많은 wkw_k정확히 0으로 밀려 팩터가 삭제됩니다(Lasso).
- σ\sigma, σrank\sigma_{\mathrm{rank}}, σˉ\bar{\sigma}, σˉrank\bar{\sigma}_{\mathrm{rank}}: 하루에서 예측 g(Xt)g(X_t)와 라벨 yty_t 사이의 피어슨 상관σ\sigma, 순위만으로 맞추는 상관σrank\sigma_{\mathrm{rank}}입니다. 막대 ˉ\bar{\cdot}TT일을 평균한 값이라 하루짜리 노이즈에 덜 흔들립니다.
- θ\theta, ϕ\phi 및 PPO: θ\theta는 토큰 시퀀스(공식)를 샘플링하는 정책(트랜스포머) 파라미터, ϕ\phi가치망 파라미터입니다. rt(θ)r_t(\theta)새 정책과 직전 정책의 행동 확률 비율이고, clip(,1ϵ,1+ϵ)\mathrm{clip}(\cdot,1-\epsilon,1+\epsilon)한 스텝에 바뀔 수 있는 폭을 제한합니다. A^t\hat{A}_t어드밴티지(이 행동이 평균보다 얼마나 나았는지). Vϕ(D,P)V_\phi(\mathcal{D},\mathcal{P})는 데이터 D\mathcal{D}와 풀 상태 P\mathcal{P}를 본 뒤의 기대 보상 추정, Lvalue\mathcal{L}^{\mathrm{value}}는 그 추정과 실제 보상 rr의 차이를 줄입니다. η\eta가치 손실의 가중치입니다.
수식을 한 문장으로
"합성 데이터로 문법을 익힌 트랜스포머가 RPN 공식을 짜고, 선형 풀과 L1으로 건조하게 섞은 뒤, IC로 평가하고, PPO로 생성 정책만 안전하게 업데이트한다"로 기억하면 됩니다.
[수식 작동 시뮬레이션] Toy Data Walkthrough
위 절의 식이 코드의 어느 부분에 해당하는지 따라가기 쉽도록, 종목이 딱 세 개뿐인 머릿속 미니 시장을 상상해 봅니다. 숫자는 설명용 가정입니다.
가정: 하루 tt에 종목 A·B·C만 있고, 생성기가 이미 뽑아 둔 후보 공식이 m=3m=3개(f1,f2,f3f_1,f_2,f_3)입니다. 각 fkf_k는 그날 종목별 알파 점수 벡터 (R3)(\mathbb{R}^3) 하나를 줍니다. 예를 들어
f1=(1,0,1),f2=(0.5,1,0),f3=(0.2,0.3,0.1)f_1=(1,\,0,\,{-}1),\quad f_2=(0.5,\,1,\,0),\quad f_3=(0.2,\,{-}0.3,\,0.1)
라고 합시다 (첫째 성분=A, 둘째=B, 셋째=C).
1) 선형 풀 — 세 공식을 비율대로 섞기
가중치 w=(0.5,0.3,0.2)w=(0.5,\,0.3,\,0.2)이면 최종 점수는 zt=0.5f1+0.3f2+0.2f3z_t=0.5f_1+0.3f_2+0.2f_3입니다. 종목 A만 따로 쓰면
zt,A=0.51+0.30.5+0.20.2=0.69.z_{t,A}=0.5\cdot 1+0.3\cdot 0.5+0.2\cdot 0.2=0.69.
같은 방식으로 zt,B=0.24z_{t,B}=0.24, zt,C=0.48z_{t,C}={-}0.48이 됩니다. 즉 한 종목 점수 = 세 후보 점수의 가중합이고, 벡터 ztz_t 전체가 그날 롱·숏·랭킹의 순위표 재료가 됩니다.
2) 라벨 yty_t와 MSE, 그리고 L1이 하는 일
yty_t를 “정해진 창의 실제 수익률” 벡터라고 하면, 손실의 첫 항은 대략 ztz_tyty_t 사이 거리(제곱 오차)를 여러 날·여러 종목에 걸쳐 평균낸 것과 같습니다. 예측이 자꾸 빗나가면 옵티마이저가 ww를 조금씩 바꿉니다.
그 위에 λw1\lambda\|w\|_1가 붙으면, 기여가 약하거나 중복인 wkw_k먼저 0으로 밀려 해당 fkf_k가 풀에서 통째로 빠질 수 있습니다. 쉽게 말해 “믹서에 넣었던 소스 중 검증해 보니 빼도 되는 건 치운다”는 효과입니다.
3) IC — 하루짜리 ‘순위 맞추기’ 성적표
그날 ztz_t로 종목 순위를 매기고, yty_t로도 순위를 매겼을 때 두 순위가 비슷하면 피어슨 상관 σ(g(Xt),yt)\sigma(g(X_t),y_t)는 양수로 올라갑니다. 예를 들어 0.08이면 “그날은 제법 맞았다” 정도의 느낌입니다. 여러 날 평균 σˉ\bar{\sigma}가 0.02 부근보다 0.06 부근이면, 소음을 조금 걷어 낸 뒤에도 평균적으로 훨씬 건강한 풀이라고 보면 됩니다.
4) PPO — 한 스텝만 직관으로
생성기가 토큰을 몇 개 바꾼 새 공식을 제안하면 풀과 IC가 달라지고, 그걸 보상 rr로 삼을 수 있습니다. 비율 rt(θ)r_t(\theta)는 “새 정책이 곧바로 전 정책보다 그 행동을 얼마나 과감하게 바꿨는지”를 나타내고, 클립은 그 비율이 한 번에 너무 커지지 못하게 서행 구간을 둡니다. 그래서 RL로 정책을 고쳐도 학습이 덜 출렁이고 망가지기 어렵습니다.
5) 배포 시(추론) 그림
사전학습과 (있다면) 짧은 RL까지 끝나면, 새 XtX_t가 올 때마다 거대 GP 심볼릭 탐색을 매번 처음부터 돌리기보다, 순전파로 공식을 뽑아 풀에 태우는 쪽에 가깝습니다. 사용자 입장에서는 응답 지연(latency)이 줄어드는 그림이 됩니다.
한 줄 요약: 풀은 여러 후보를 한 번에 섞는 믹서, L1은 안 쓰는 소스를 치우는 통, IC는 손님 반응(순위) 점검, PPO는 레시피를 하루아침에 확 뒤집지 못하게 하는 안전벨트.
[실험 및 결과]
논문이 강조하는 포인트를 실무 언어로 옮기면 다음과 같습니다.
- 탐색 효율: 강한 베이스라인 대비 훨씬 적은 수의 후보 팩터(예: 대략 3분의 1 수준의 생성 부담)로도 CSI300·CSI500에서 IC·Rank IC를 앞서거나 최고권에 들어갑니다. 즉 "바늘구멍을 더 넓게" 만든 게 아니라 바늘을 들고 있는 손이 더 정확해진 겁니다.
- 추론 효율: 추론 시 추가적인 대규모 파라미터 업데이트 없이 공식 생성·평가 파이프라인이 돌아간다는 점은, 실시간·준실시간 시그널 환경에서 중요합니다.
- 일반화: 합성 데이터를 단일 생성기가 아니라 여러 아키텍처로 앙상블할 때 IC가 크게 오릅니다. 더 흥미로운 것은 중국 시장으로 사전학습한 모델을 미국 S&P500에 zero-shot으로 옮겨도 경쟁력이 있다는 점 — 특정 거래소의 잡음만 외운 게 아니라 연산·시계열 문법을 어느 정도 일반화했다는 신호로 읽을 수 있습니다.
실무 해석: 팩터 마이닝 비용(GPU 시간·실험 횟수)을 줄이면서도 설명 가능한 공식을 얻고 싶은 팀에게, "사전학습 + 제한된 RL 미세조정"은 MLOps 관점에서 매력적인 타협점입니다.
[결론 및 한계점]
최종 의의 및 실무 활용 가치 (3가지 이내)
1. 자동화된 화이트박스 시그널: 출력이 RPN/연산 트리이므로 리스크·컴플라이언스 팀과 공식 문자열 그대로 소통하기 쉽습니다.
2. 탐색 예산 절감: 사전학습이 "시장 문법"을 압축해 두어, 새 데이터에서 처음부터 GP를 풀가동하지 않아도 됩니다.
3. 엔드투엔드 파이프라인: 생성–선형결합–IC 평가–(필요 시) PPO가 한 흐름으로 묶여, 실험 재현성과 배포 스크립트가 단순해집니다.
한계점 (Future Work)
- 하드웨어 의존: 논문 설정처럼 GPU 중심 학습·추론이 전제라, CPU-only 레거시 환경에는 맞지 않을 수 있습니다.
- 시장 레짐: Zero-shot이 인상적이지만, 극단적 구조 변화(규제·거래 정지·유동성 붕괴)에서는 재학습·도메인 적응이 여전히 필요할 수 있습니다.
- 라벨·누수 설계: IC는 라벨 정의(미래 수익 창, 공정한 시점 정렬)에 민감합니다. 좋은 생성기보다 깨끗한 라벨 파이프라인이 없으면 성능이 허상이 됩니다.

도식화 기획: 통제 불능 탐색 vs 정밀 생성

왼쪽은 공식 탐색 공간에 찍힌 무수한 시도(점)와 목표(IC)에 닿지 못하는 들쭉날쭉한 궤적으로 GP/RL의 맨땅 헤딩을 표현합니다. 오른쪽은 합성 시계열 → 사전학습 → 토큰 시퀀스 생성 → IC/풀로 이어지는 한 줄 파이프라인으로 AlphaFormer의 엔드투엔드 흐름을 보여 줍니다.

기존: GP / RL 심볼릭 탐색

데이터셋이 바뀔 때마다 처음부터 넓게 찍어보고, 후보 팩터 수가 많아도 IC는 들쭉날쭉합니다.

누적 효율IC시도 1시도 N무작위 탐색과다 탐색

제안: AlphaFormer

합성 시계열로 문법을 익힌 뒤 적은 생성으로 IC 궤적이 안정적으로 올라가고, zero-shot 전이도 가능해집니다.

적은 팩터·높은 IC누적 효율IC사전학습 생성시도 1시도 N
AlphaFormer는 "매 시장마다 처음부터 심볼릭 탐색"을 "문법 사전학습 + 안전한 RL 미세조정"으로 바꿉니다. 선형 풀·L1·IC·PPO는 각각 믹서, 가위, 심사위원, 안전벨트처럼 역할이 나뉘어 있어, 수식이 길어도 한 장의 플로우로 기억할 수 있습니다. GPU 의존과 라벨 품질이라는 현실 제약은 염두에 두고, PoC부터 점진적으로 도입하는 것이 좋습니다.