Blog/FX forecasting

다섯 개 통화쌍으로 랜덤워크에 도전해 봤습니다. 결과는 이렇습니다

5년치 실시간 데이터로 다섯 개 통화쌍에 대해 FX 예측 검증을 실행했습니다. 랜덤워크가 이겼습니다. 더 흥미로운 결과는 몇 가지 그럴듯한 선택만으로도 마치 랜덤워크를 이긴 것처럼 보이게 만들기가 얼마나 쉬운가였습니다.

MMexchangerate.dev·Jul 6, 2026·8분 읽기

저희 튜토리얼의 검증 방식을 그대로 가져와 다섯 개 통화쌍, 5년치 일별 데이터로 실제 실행해 봤습니다. 랜덤워크는 모든 통화쌍에서 버텨냈습니다. 하지만 정직한 결론은 "저희 모델이 졌다"가 아닙니다. 평범하고 그럴듯한 분석 선택 두 가지만으로도 한 통화쌍이 마치 실제로 통계적으로 유의미한 우위가 있는 것처럼 보이게 만들기에 충분했다는 것이며, 이것이 바로 FX 예측 주장을 회의적으로 읽어야 하는 이유입니다.

Key points
사전에 고정해 둔 설정(70/30 분할, 일반 표준오차)에서는 어떤 통화쌍도 통계적으로 유의미하게 랜덤워크를 이기지 못했습니다.
300개 특성을 추가하자 모든 통화쌍에서 표본 밖 정확도가 나빠져 R²가 -20%에서 -25% 사이에 머물렀습니다. 2025년 연준 논문의 발견 그대로, 여기서 복잡도는 신기루입니다.
HAC 표준오차로 바꾸거나 학습/검증 분할 비율을 옮기면 두 통화쌍이 5% 유의성 기준선을 넘어갑니다. 바뀐 것은 분석가의 선택뿐입니다.
다중검정을 보정하면(다섯 통화쌍에 대한 본페로니 보정, t > 2.33), 살아남는 결과는 없습니다. 그것이 실제 결과입니다.
모든 수치는 자매 튜토리얼의 코드로 Free 등급에서 재현할 수 있습니다.

설정

튜토리얼과 동일한 방식을 모든 통화쌍에 똑같이 적용했습니다.

  • 데이터: /v1/range 엔드포인트를 통한 2021년 1월부터 2026년 1월까지의 일별 환율, 주말·공휴일 이월 행은 제외.
  • 분할: 앞 70%로 학습, 마지막 378거래일(다섯 통화쌍 모두 동일한 일수)은 검증용으로 남겨둠. 모델은 검증 구간을 절대 보지 않음.
  • 단순 모델: 저렴한 특성 8개(수익률 시차, 1주·1개월 모멘텀, 10일 실현 변동성)에 대한 Ridge 회귀.
  • 복잡 모델: 동일한 특성을 300개의 무작위 푸리에 특성으로 확장하고, 학습·검증에 하나의 공유된 무작위 기저를 사용.
  • 벤치마크: 드리프트 없는 랜덤워크. 내일 수익률에 대한 예측은 항상 0.
  • 채점: 랜덤워크 대비 표본 밖 R², 그리고 단측 Clark-West 검정. t 통계량이 1.645를 넘으면 5% 기준을 통과.

70/30 분할과 일반 표준오차는 어떤 결과도 보기 *전에* 미리 정했으며, 이는 이어지는 내용에서 중요한 의미를 갖습니다.

결과표

Out-of-sample results, 70/30 split (dir. acc = simple model)copy
pair       OOS R2    CW t   p-value    complex R2   dir. acc
EUR/USD    -0.34%    0.84   0.200      -20.5%       49.5%
GBP/USD    -1.23%    0.17   0.432      -23.8%       51.9%
USD/JPY    -2.29%   -0.33   0.631      -24.9%       53.2%
AUD/USD    -0.52%    1.10   0.136      -24.2%       48.7%
USD/CAD    +0.61%    1.50   0.067      -20.5%       52.1%

사전에 정해둔 설정에서는 아무도 랜덤워크를 이기지 못했습니다. 다섯 통화쌍 중 네 개가 표본 밖 R² 음수를 기록했는데, 이는 학습된 모델이 아예 변화가 없다고 가정하는 것보다도 성능이 나빴다는 뜻입니다. 표에서 가장 높은 Clark-West t 통계량은 1.50(USD/CAD)으로, 5% 우위에 필요한 1.645에 못 미칩니다. USD/CAD의 +0.61% R²만이 유일한 양수 값이지만, p값 0.067은 기준을 넘지 못합니다. 표를 있는 그대로 읽으면 결론은 "우위 없음"입니다.

복잡도는 모든 통화쌍에서 성능을 더 나쁘게 만들었습니다. 300개 특성 모델은 숨겨진 구조를 찾아내지 못했습니다. 특성당 학습 행이 약 세 개에 불과했던 탓에 학습 데이터의 노이즈를 그대로 암기했고, 표본 밖에서는 전반적으로 R² -20%에서 -25% 사이로 무너졌습니다. USD/JPY에서는 Clark-West t 통계량이 -2.05로, 랜덤워크보다 나쁜 정도가 아니라 유의미하게 더 나빴습니다. 표본 안에서는 같은 모델이 아름답게 들어맞았습니다. 본 적 없는 데이터를 만나기 전까지는 훌륭해 보였는데, 이것이 복잡도의 경고성 이야기 전체를 한 통화쌍으로 압축한 것입니다.

방향 예측은 동전 던지기 수준이었습니다. 상승·하락 예측 정확도는 48.7%에서 53.2% 사이에 머물렀습니다. 검증일이 378일이라는 점을 고려하면 대략 45~55% 사이는 모두 통계적 노이즈이며, 모든 통화쌍이 그 범위 안에 있습니다. 동전을 던져도 50%는 나옵니다.

그래도 "이겼다"고 말할 수 있었던 방법

이 부분이 저희 것을 포함해 어떤 FX 예측 결과든 의심해야 하는 이유입니다. "아무도 랜덤워크를 이기지 못했다"는 사전에 고정해 둔 바로 그 설정에서는 사실이었습니다. 각각 개별적으로는 그럴듯한 선택 한두 가지만 바꾸면 그림이 달라집니다.

표준오차를 바꿔봅니다. Clark-West 검정에서 저희는 일반 표준오차를 사용했습니다. 일별 예측 오차에는 약한 자기상관이 있기 때문에, 심사자라면 대신 Newey-West(HAC) 오차를 요구하는 것도 합리적입니다. 이 한 가지만 바꾸면 두 통화쌍이 5% 기준선을 넘어갑니다.

통화쌍Clark-West t (일반)Clark-West t (HAC)
AUD/USD1.101.66 — 유의미
USD/CAD1.501.83 — 유의미

데이터는 전혀 바뀌지 않았습니다. 오차 범위를 계산하는 공식만 바뀌었을 뿐인데, 방금 전까지 하나도 없던 "유의미한" 결과가 이제 두 개나 생겼습니다.

분할 지점을 옮겨봅니다. 저희는 마지막 30%를 검증용으로 남겨두었습니다. 마찬가지로 임의적인 기준인 마지막 40%로 바꿔보면 USD/CAD의 Clark-West t 통계량은 2.26까지 올라갑니다. 저희가 시도한 모든 분할에서 양수로 유지됩니다.

USD/CAD across train/test splitscopy
split          60/40    65/35    70/30    75/25    80/20
OOS R2        +1.25%   +0.33%   +0.61%   +0.87%   +0.71%
Clark-West t    2.26     1.58     1.50     1.43     1.31

두 개의 손잡이(어떤 표준오차, 어떤 분할)와 고를 수 있는 다섯 개 통화쌍만 있으면, 의욕적인 분석가는 "머신러닝이 USD/CAD에서 랜덤워크를 이겼다, 통계적으로 유의미"라는 헤드라인을 만들어낼 수 있습니다. 각 단계는 개별적으로는 모두 그럴듯합니다. 이것들이 쌓이면 허위 결과가 논문에 실리는 방식이 됩니다.

이를 무력화하는 원칙
숫자를 보기 전에 선택을 고정하고, 표본 밖으로 채점하고, 몇 가지를 검정했는지에 대해 보정하세요. 다섯 통화쌍을 5% 수준에서 검정하면 순전히 운으로 최소 하나의 거짓 양성이 나올 확률이 약 23%에 달하므로, 정직한 기준선은 더 높아야 합니다. 다섯 통화쌍에 대한 본페로니 보정을 적용하면 기준선은 대략 t > 2.33까지 올라갑니다. USD/CAD의 최고 기록인 60/40 분할에서의 2.26도 여전히 이 기준에 못 미칩니다. 저희가 실행한 모든 통화쌍, 분할, 표준오차 선택을 통틀어 이 정직한 기준을 넘는 것은 없습니다. 그것이 실제 결과입니다.

이런 일이 계속 일어나는 이유

단기 주요 통화쌍 FX 시장은 시장이 도달할 수 있는 효율성에 가장 가까운 축에 속합니다. 매일 수조 달러가 거래되며, 가격 이력만으로 Ridge 모델이 발견할 수 있을 만큼 단순한 패턴이라면 여러분의 노트북에 도달하기 훨씬 전에 이미 차익거래로 사라져 있습니다. 다음 수익률의 조건부 평균이 사실상 변화 없음이기 때문에, 오늘의 가격이 내일에 대해 구할 수 있는 최선의 점 예측입니다. 모델이 고장 난 것이 아닙니다. 그 효율성 자체가 이 검증의 발견입니다.

다만 *점* 예측이라는 단어에 주목하세요. 조건부 평균을 예측할 수 없다고 해서 분포 전체를 예측할 수 없는 것은 아닙니다. 변동성은 군집을 이루고, 범위는 넓어졌다 좁혀졌다 하며, 이 구조는 실재하면서도 예측 가능합니다. 정직한 가치가 존재하는 곳도 바로 여기입니다.

여기서 얻은 결론

저희는 환율 API를 만드는 회사이니, 굳이 감추지 않고 말씀드리겠습니다. "예측 환율" 엔드포인트는 출시하지 않을 것입니다. 일별 주요 통화쌍에서는 오늘의 환율을 그대로 반환을 정직하게 이길 수 없기 때문입니다. 저희가 할 수 있는 것은 오늘의 환율을 정확하고 빠르게, 그리고 불확실성을 감추는 대신 수치화할 수 있게 해주는 메타데이터(source, 이월 플래그, 변동성)와 함께 제공하는 것입니다.

그래도 직접 시도해 보고 싶다면, 위 내용은 모두 자매 튜토리얼의 코드로 Free 등급에서 재현할 수 있습니다. 저희가 진짜로 인상 깊게 볼 기준은 이렇습니다. 분할 비율과 표준오차를 미리 정하고, 다섯 개 주요 통화쌍 전체에서 표본 밖으로 본페로니 보정된 Clark-West 통계량을 통과하는 것입니다. 이를 해낸다면 문헌이 진짜로 드물다고 말하는 무언가를 해낸 것입니다.

MM
exchangerate.dev
인디케이티브 환율을 다루는 개발자를 위한 FX 데이터 가이드.

Keep reading

TutorialFX 예측에서 랜덤워크 이기기: 코드로 직접Read Guide환율을 예측할 수 있을까? 40년째 무너지지 않는 벽Read Guide한 번의 호출로 얻는 과거 FX 환율과 시계열Read