강화학습과 과최적화(Overfitting)

트레이딩에 강화학습을 적용하는 경우, 잘 작동할 때 정말 강력한 도구로 활용될 수 있습니다. 하지만 주의해야 할 점들도 많은데, 가장 대표적인 것이 과최적화의 위험입니다. 최적화란 무엇인지, 과최적화를 피하려면 어떻게 해야하는지 알아보겠습니다.
Mar 22, 2025
강화학습과 과최적화(Overfitting)

최적화와 과최적화

최적화라고 하면 특정한 제약 조건을 만족하는 범위 내에서 목적함수를 최대화(또는 최소화)하는 과정을 말합니다.

저렴하지만 단단한 물컵을 설계하는 경우를 예로 들어 보겠습니다. 컵의 강도가 특정 값 이상이 되도록 제약 조건을 설정한다면, 컵의 크기와 두께, 소재 등이 조정 가능한 변수가 될 것입니다. 제약 조건을 만족하는 범위 내에서, 컵의 원가가 최소가 되도록 하는 목적을 달성할 수 있도록, 이 변수들을 잘 조정하여 컵을 설계하는 것이 최적으로 컵을 설계하는 과정이 될 것입니다.

만일 저렴한 것에만 초점을 맞춘다면 어떻게 될까요? 깨지기 쉽지만 가격은 싼 소재를 쓴다면, 단단한 정도를 맞추기 위해 어쩌면 컵의 두께가 비정상적으로 두꺼워져야 할 수도 있겠습니다. 그렇게 몇 번의 시행착오를 거치다 보면 적절한 소재를 적절하게 사용해서 충분히 단단하지만 적절히 저렴한 최적의 컵을 만들 수 있게 됩니다.

시행착오를 거치며 경험적으로 최적화를 수행해 나갈 수도 있겠지만, 현대에는 수학에 기반을 두고 진행되고 있습니다. 제약 조건 및 목적함수를 수학적으로 명확히 정의한 후, 간단한 경우 방정식의 해를 직접 구해 풀거나 미적분학 및 여러 알고리즘을 이용해 근사치를 구하는 형태입니다.

관련된 변수가 너무 많아서 사람이 직접 분석해 결정하기 힘든 문제일수록 최적화는 더 효과적일 수 있습니다. 하지만 최적화는 입력 변수와 출력값, 그 과정과 구조에 대해 충분히 이해하고 조심해서 사용해야 합니다. 그렇지 않으면 현실적이지 못한 극단적인 결과를 받아보게 될 것입니다. 너무나 약한 소재를 비정상적으로 두껍게 설계한 컵처럼 말이죠. 이를 과최적화라고 합니다.

트레이딩 분야에서는 어떨까요? 최적화는 여러 문제에서 다양하게 사용될 수 있습니다. 포트폴리오의 자산 배분 문제에서 각 자산의 비율을 구하기 위해 사용될 수도 있고, 알고리즘 트레이딩에서 거래 시점을 결정하기 위한 파라미터의 값을 조정하기 위해서도 사용될 수 있습니다. 이런 문제를 최적화로 풀 때도 마찬가지로 입력 변수와 출력값, 그 과정과 구조에 대해 깊게 이해하고 최적화를 사용해야 합니다. 그렇지 않으면 과최적화의 오류에 빠질 수 있습니다.

강화학습이란?

Reinforcement Learning, Environment, Agent, State, Action, Reward
강화학습의 구조

강화학습(Reinforcement Learning, RL)은 에이전트(agent)가 환경(environment)과의 상호작용을 통해 스스로 학습하며 최적의 행동을 찾아내는 인공지능 기법입니다. 강화학습의 핵심 요소는 상태(state), 행동(action), 보상(reward)이며, 에이전트는 시행착오를 반복하며 보상을 극대화하기 위한 행동 정책(policy)을 학습합니다. 강화학습은 과거의 행동 결과를 토대로 미래의 행동을 조정함으로써 시간이 지날수록 더 나은 결정을 내릴 수 있게 됩니다.

강화학습은 명확한 수식적 해를 찾기보다는 경험적으로 최적의 행동을 발견하게 됩니다. 따라서 강화학습은 트레이딩과 같은 복잡하고 확률적인 환경에서 전통적인 최적화 도구보다 더 효과적일 수 있습니다. 전통적 방법으로는 파악하기 어려운 미묘한 시장 패턴과 변화하는 조건들을 과거 데이터들 속에서 스스로 학습하고 적응하기 때문입니다.

그러나 강화학습의 유연성은 동시에 과거 데이터에 지나치게 맞추어지는 과최적화(overfitting)의 위험성을 높일 수도 있습니다.

강화학습은 과최적화 머신 - 시뮬레이션 실험

한번 강화학습을 이용해 극단적으로 과최적화를 시키면 어떻게 될지 시뮬레이션 실험을 해 보겠습니다. 2023년 8월부터 2025년 1월까지 1년 6개월 동안의 BTC/USDT 15분봉 가격 데이터를 이용해 LONG/SHORT 양방향 매매하는 강화학습 에이전트를 학습시켜 보았습니다.

강화학습 모델 학습 결과

아래 이미지는 그 학습된 결과 모델을 학습 데이터에 적용한 백테스트 그래프 입니다. 1년 6개월동안 원금 대비 수만배까지 자산이 늘어나는 모습을 볼 수 있습니다. 강화학습 모델을 학습시킨 과거 데이터에 그 모델을 그대로 적용한 결과라고 해도, 어떻게 이런 그래프가 나올 수 있을까요?

backtest, reinforcement learning, trading
In Sample Result

원인 1) - 제약 조건의 오류

거래 수수료를 반영해주긴 했지만, 이외 일반적인 트레이딩의 제약조건들을 고려하지 않았습니다. 매 거래마다 규모에 상관없이 전액을 현재 가격에 100% 체결확률로 거래한다는 비현실적인 가정이 들어간 채 강화학습 에이전트를 학습시켰고, 백테스트 시뮬레이션도 같은 가정으로 수행했습니다.

이런 잘못된 가정들이 긴 시간 복리로 적용되어 백테스트 되니 비정상적인 수익률 곡선이 나오게 되었습니다. 제약조건을 잘못 설정한 과최적화의 예시로 볼 수 있겠습니다.

하지만 이것은 시간을 들여 시뮬레이터를 정교하게 만들어 나가면 차차 개선을 할 수 있는 문제로 생각되는 내용들입니다. 혹시 이외 다른 문제들은 없을까요?

원인 2) - 과거 데이터에 과최적화

위 제약 조건의 오류로 인한 왜곡이 복리로 적용되기 힘든 짧은 구간에서, 시장 가격의 변화에 강화학습 에이전트가 어떻게 행동하는지를 확인해 보겠습니다. 특히, 실거래를 한다면 학습 데이터로 사용하지 않은 새로운 데이터에서 강화학습 에이전트가 어떻게 행동하는지 확인하는 것이 반드시 필요합니다.

먼저, 학습데이터 직후의 4일치 데이터에 강화학습 모델을 적용시켜 보겠습니다.

backtest, reinforcement learning, trading
Out-of-Sample Result (1)

첫 4일간 대략 13% 정도의 수익을 기록했습니다. 이정도면 제약 조건의 오류들을 개선 적용하여 수익률이 좀 떨어질 수 있더라도 꽤 괜찮은 수익을 기대할 수 있지 않을까요?

그 이후 4일도 추가로 확인해보겠습니다.

Out-of-Sample Result (2)

이번에는 대략 2% 의 손실을 기록했습니다. 큰 손실을 보지않아 다행으로 생각해야 하는 걸까요?

이후 4일 구간 추가로 확인해보겠습니다.

Out-of-Sample Result (3)

이번에는 1% 조금 안되는 수준의 수익이 났습니다. 학습에 사용된 과거 데이터 구간에서는 1년 6개월만에 수만배 수익도 내던 모델이었지만, 처음 보는 데이터에서는 수익을 내는 것이 영 힘들어 보입니다.

학습에 사용하지 않은 한 달 정도의 기간동안 백테스트를 진행해보겠습니다.

Out-of-Sample Result (4)

초기 4일간 큰 수익을 낸 이후, 변동성이 없어서인지 계속 횡보하다가, 다시 변동성이 생기는 구간에서 손실을 보기 시작하는 모습입니다.

실험 결과 정리

학습에 사용한 과거 데이터 구간 내에서는 정말 믿기 힘든 수익을 보여주는 강화학습 트레이딩 에이전트를 얼마든지 만들 수 있습니다.

하지만, 처음보는 데이터에서는 수익이 날 수도 있고 손실이 날 수도 있습니다. 학습에 사용한 과거 데이터 구간에서 아무리 지속적으로 큰 수익을 내었더라도 처음 보는 데이터에서 손실이 날 수 있다는 것은, 강화학습 에이전트가 과거 데이터에 과최적화 되었다는 뜻일 것입니다. 강화학습 에이전트를 실거래에 사용하려면, 과최적화를 해결하는 것이 정말 중요한 숙제입니다.

본 실험에서 그나마 긍정적인 것은 학습 데이터 직후에서는 수익이 날 수도 있다는 시뮬레이션 결과라고 할 수 있겠습니다. 인간이 인식하기 힘든 미세한 시장 가격의 패턴이 있을텐데, 강화학습 에이전트는 그 패턴을 인식하여 거래 기회들을 포착할 수 있습니다. 그런 미세 패턴들이 계속 바뀌게 되는데, 학습 데이터 직후 일정 기간은 그 패턴이 유지가 되는 듯 합니다.

강화학습에서 중요한 구조

전통적 의미의 최적화 문제는 수학적으로 명확히 정의된 목적함수를 제약 조건 하에서 최대화 또는 최소화하는 과정을 의미합니다. 이러한 과정에서 입력 변수와 출력값, 문제의 구조를 충분히 이해하고 적용하는 것이 과최적화를 피하기 위해 매우 중요합니다.

강화학습은 복잡하고 확률적인 환경에서 명확한 수식적 해가 아닌, 시행착오를 통한 경험적 접근으로 최적의 행동을 학습합니다. 그렇다면 강화학습에서는 과최적화를 피하기 위해 어떻게 해야 할까요? 강화학습의 구성 요소인 상태(state), 행동(action), 보상(reward)의 구조를 명확하게 이해하고 설계 및 적용하는 것이 필요합니다.

트레이딩에 강화학습을 사용할 때에도 마찬가지로 현실적인 제약 조건을 명확히 설정하고, 과최적화를 방지하기 위해 지속적으로 강화학습 모델 및 구조를 점검하며 개선하는 노력이 필수적입니다. 

QMELLION 소개

QMELLION은 강화학습 기반의 트레이딩 알고리즘을 집중적으로 연구하고 있습니다. 관련 연구 내용과 성과는 본 블로그를 통해 공유드리겠습니다.

Share article