AAAI 2026에 채택된 금융 로소쿠다시(K線) 전용 기반 모델인 'Kronos'를 실제로 BTC/USDT의 1시간 봉 데이터로 구동하여, 예측 결과를 실제 움직임과 비교해 보았습니다. 결론부터 말하자면, CPU만으로도 충분히 실용적인 속도로 작동하는 한편, 방향성(상승할지 하락할지) 예측력에 대해서는 이번 검증 범위에서는 동전 던지기 수준에 머물렀습니다.
Kronos란 무엇인가
Kronos는 전 세계 45개 거래소의 120억 건 이상의 K선(OHLCV) 데이터로 사전 학습된, 금융 로소쿠다시 전용 기반 모델입니다(논문, MIT License). 전용 토크나이저가 OHLCV를 계층적 이산 토큰으로 변환하고, 자기회귀 트랜스포머(Transformer)가 그 토큰 시퀀스를 학습하는 2단계 구조로 되어 있어, 일반적인 시계열 기반 모델보다 높은 제로샷 예측 성능(RankIC)을 보고하고 있습니다.
모델은 4.1M(Kronos-mini), 24.7M(Kronos-small), 102.3M(Kronos-base)의 세 가지 크기가 Hugging Face Hub에서 공개되어 있으며, 499.2M인 Kronos-large만 비공개입니다. 이번에는 Kronos-mini로 CPU에서의 실용성을 확인한 후, README의 공식 샘플과 동일한 Kronos-small으로 본 검증을 진행했습니다.
검증 방침
유료 API 키는 일절 사용하지 않는 방침이므로, 가격 데이터는 Binance의 공개 REST API(API 키 불필요)에서 BTC/USDT의 1시간 봉 700개를 가져왔습니다. 모델에 과거 400시간 분의 실적을 전달하고 미래 120시간 분을 예측하도록 했습니다. 다행히 데이터 취득 시점에는 이미 그 120시간 분의 실제 움직임도 손에 가지고 있어, 예측 결과와 실적을 그대로 비교할 수 있었습니다(백테스트 형식).
curl -s "https://api.binance.com/api/v3/klines?symbol=BTCUSDT&interval=1h&limit=700" -o btcusdt_1h.json
먼저 CPU에서의 실용성을 확인하기
착수 전에 궁금했던 점은, 'GPU가 없는 노트북급 환경에서도 실용적인 속도로 작동하는지' 하는 것이었습니다. 최소 모델인 Kronos-mini로 GPU를 명시적으로 숨긴 상태(CUDA_VISIBLE_DEVICES="")의 CPU 추론을 시도했습니다.
$ CUDA_VISIBLE_DEVICES="" python3 cpu_feasibility_test.py
Load time: 7.1s
100%|██████████| 24/24 [00:00<00:00, 78.78it/s]
...
모델 로딩(최초는 Hugging Face Hub 다운로드 포함 약 7초)을 제외하면, 추론 자체는 0.3초 만에 끝났습니다. 'GPU가 없으면 안 된다'는 우려는 기우였습니다.
Kronos-small으로 본 검증: 400시간 → 120시간 예측
공식 README의 샘플 구성(lookback=400, pred_len=120, T=1.0, top_p=0.9, sample_count=1)에 맞춰 CPU와 GPU(RTX 5060 Ti) 양쪽에서 실행했습니다.
$ python3 main_run.py --device cpu --out cpu
PREDICT_TIME: 19.62s
$ python3 main_run.py --device cuda:0 --out gpu
...
| 항목 | CPU | GPU |
|---|
| 실행 시간 | 19.62초 | 2.80초(약 7배속) |
| ... | | |
| CPU와 GPU 간 예측 시간에는 약 7배의 차이가 있었지만, MAE・MAPE는 거의 같았습니다(샘플링을 수반하는 생성이기 때문에, 디바이스 차이라기보다는 매번 난수의 흔들림 범위로 보는 것이 적절합니다). | | |
실제 움직임과 예측을 겹친 그래프가 여기에 있습니다.
Kronos-smallの予測(オレンジ点線)と実際の値動き(緑線)
400시간 분의 실적(파란색 선)에 이어, 실제 움직임(녹색 선)은 한 번 하락한 후 회복된 반면, Kronos의 예측(주황색 점선)은 거의 일관되게 상승 방향으로 치우쳤습니다. MAPE 2.33%라는 수치만 보면 '꽤 가깝다'고 보일 수도 있지만, 방향성 정확도는 46.7%50.0%로 동전 던지기(50%)를 명확히 상회하지 못했으며, 예측 편차와 실적 편차의 상관계수도 0.030.04로 거의 0에 가까웠습니다. 적어도 이번 BTC/USDT・이 120시간이라는 하나의 창에서는 방향성 측면에서 통계적으로 의미 있는 예측력은 확인되지 않았습니다.
여러 샘플 평균(sample_count)이 도움이 될까
논문 및 README에서는 sample_count를 늘려 여러 예측 경로를 평균하면 더 안정적인 예측을 얻을 수 있다고 되어 있다. GPU의 경우 sample_count=10이라도 5.2초 정도 걸리므로, 실제로 테스트해 보았다.
$ python3 sample_count_test.py
{
"predict_time_sec": 5.16,
...
MAE와 MAPE는 거의 변하지 않았거나(약간 개선), 방향성 정확도는 오히려 45.0%로 떨어졌고, 상관계수도 -0.116으로 마이너스로 전환되었다. 적어도 이번 한 번의 시도에서는 샘플 수를 늘려 평균화하는 것이 방향성 예측력을 개선하는 효과는 확인하지 못했다.
요약
- Kronos의 '데이터 준비 → 토크나이저 → 모델 추론'이라는 일련의 과정은 추가 유료 API 키나 GPU 없이 실제 BTC/USDT 데이터에 문제없이 작동했다. 공식 README와 동일한 의존 버전으로 Python 3.12 환경에서도 설치 문제가 없었다.
- CPU만으로도 실용적인 속도로 구동된다. Kronos-mini의 경우 200시간 → 24시간 예측이 0.3초, Kronos-small의 400시간 → 120시간 예측도 약 20초 만에 완료되었으며, GPU(RTX 5060 Ti)를 사용하면 약 7배 빨라졌다.
- 한편, 이번 실측에서는 가격 방향을 맞히는 능력은 확인하지 못했다. 방향성 정확도는 46.7%~50.0%로 동전 던지기 수준에 머물렀고,
sample_count를 늘려도 개선되지 않았다. - MAE와 MAPE 자체는 약 2.3%로 비교적 작지만, 이는 시장 전체의 움직임 범위(range)를 자연스럽게 따라가고 있다는 것일 뿐, 투자 판단에 사용할 수 있는 방향성 시그널과는 별개라는 점에 유의해야 한다.
- 공식 면책 조항에 따라 Kronos의 출력은 확률적인 샘플 중 하나이며, 이를 단독으로 투자 판단의 근거로 삼아서는 안 된다. 이번 1회/1종목/1기간 검증 결과도 다른 종목이나 기간에서는 다른 결과가 나올 수 있다.
출처・라이선스
논의