지난 1편에서 기준선을 세웠다. AI 봇 6개를 한 달 돌려보니 노트북 무료 Gemma가 1위였지만, 단순 규칙 봇들과 사실상 동급이라 “AI가 낫다”고 말하기엔 일렀다. 그래서 예고한 대로 봇을 하나씩 고쳐가며 확인하는 실험을 시작했고 — 오늘이 그 첫 판정일이다.
결론부터 말하면 실험 두 개 모두 승급이다. 그리고 같은 기간에 재미로 붙인 새 봇 두 개(화제 종목을 찾아 예측하는 트렌딩 봇, 차트에 선을 긋고 근거로 쓰는 차트 봇)는 적중률 41.5%와 30.8%로 참패했다. 잘된 것과 안 된 것을 순서대로 기록한다.
먼저, 점수 표기가 바뀌었다
1편은 “보정 평균”을 메인 지표로 썼다. 그 사이 LDBD 대표 점수 자체를 연율화 수익률(rate)로 재설계했다 — 기존 점수는 실력보다 변동성 큰 자산을 얼마나 자주 예측했는지에 따라 커지는 문제가 있었기 때문이다. 자세한 과정은 개발 일지 #3에 있다. 이번 편부터 모든 표는 연율화 rate 기준이다. 대략 “이 봇의 예측을 따라 투자했으면 연 몇 %였을까”를 표본 수에 따라 보정한 값으로 읽으면 된다 (0이 중립, 표본이 적을수록 0으로 끌려간다).
실험 구조 요약 — 승급제
방식은 단순하다. baseline 봇 6개는 손대지 않고 비교 기준으로 두고, 모델마다 현재 최선 구성을 main으로, 거기에 변경점 하나만 얹은 실험 봇을 exp로 나란히 돌린다. 데이터가 충분히 쌓인 뒤 exp가 main보다 낫다고 판단되면 그 변경을 main에 흡수한다 — 이걸 승급이라고 부르겠다. 지면 그 변경만 버리고 기록으로 남긴다. 이번 회차의 변경은 두 가지였다.
- Gemma 실험 — 지표 압축: 가격 10일 시퀀스 대신 이동평균선(SMA), 과열/과매도 지표(RSI), 추세 지표(MACD), 변동성, 52주 위치, 5일 수익률을 한 줄로 계산해서 넣었다. 작은 모델은 raw 숫자에서 패턴을 못 뽑으니 계산은 파이썬이 하고 모델은 판단만 하게 하자는 가설이다.
- Claude 실험 — 분석 전 선언: 분석을 시작하기 전에 (a) 가격 기준 (b) 자산별 상승 base rate(그 자산이 평소 오르는 주의 비율) 추정 (c) 결손 데이터·가정을 먼저 선언(declare)하게 했다. 결론부터 내고 근거를 짜맞추는 패턴을 막자는 가설이다.
4주 결과
2026-06-05부터 07-04까지, 결과가 확정된 예측 기준이다.
| 봇 | 결과 확정 | 적중률 | 연율화 rate |
|---|---|---|---|
| Gemma main (기존 구성) | 94 | 52.1% | +7.9% |
| Gemma exp (지표 압축) | 69 | 55.1% | −1.7% |
| Claude main (기존 구성) | 81 | 59.3% | +27.5% |
| Claude exp (분석 전 선언) | 86 | 64.0% | +43.2% |
같은 날 같은 자산을 본 케이스만 추려 정면 대결(head-to-head)로 보면 이렇다. 두 봇의 답이 갈린 경우에 누가 맞았는지가 변경의 직접 효과다.
| 대결 | 매칭 | 의견 일치 | 갈렸을 때 exp 승률 |
|---|---|---|---|
| Gemma main vs exp | 68건 | 79% | 64% (9승 5패) |
| Claude main vs exp | 80건 | 81% | 60% (9승 6패) |
판정 1 — Claude 분석 전 선언: 명확한 승급
Claude 쪽은 고민할 게 없었다. 적중률 +4.7%p, 연율화 rate +43.2% 대 +27.5%, 정면 대결 60% — 모든 지표에서 exp가 위다. 특히 6월 30일부터 7월 1일 사이 시장이 꺾일 때 main은 상승을 고집하다 연달아 틀렸고, exp는 하락으로 돌아서서 맞췄다. “분석 전에 가정을 선언하게 하는” 단순한 프롬프트 변경이 고집을 줄인 것으로 보인다.
그래서 승급으로 처리했다. Claude main의 프롬프트에 선언 블록이 흡수되고, 다음 실험은 이 새 main에서 다시 분기한다.
판정 2 — Gemma 지표 압축: 승급, 단 찜찜함이 남는 승급
Gemma 쪽은 신호가 갈렸다. 적중률(+3.0%p)과 정면 대결(64%)은 exp가 이겼고, 특히 비트코인 적중률이 52%에서 80%로 뛰었다— 1편에서 적중률 38.8%로 “항상 상승” 봇한테도 졌던 그 자산이다. RSI 같은 과열/과매도 지표가 들어가니 급락 뒤 반등을 잡기 시작한 것이다.
그런데 연율화 rate는 main이 +7.9%, exp가 −1.7%로 반대다. 원인을 보면 KODEX 200이다. exp는 KODEX에서 14번 중 4번밖에 못 맞췄고(main은 18번 중 7번), 하필 6월 한국 시장이 크게 출렁인 구간에서 틀려서 손실이 컸다. 지표 압축이 미국 자산과 비트코인에는 통했지만 한국 시장의 급변동에는 오히려 역효과였다는 뜻이다.
회차를 시작할 때 정해둔 승급 기준은 세 가지(점수 우위, 정면 대결 55% 이상, 약점 자산 개선) 중 둘 이상 충족이었다. exp는 점수 우위는 못 채웠지만 정면 대결 64%와 1편의 최대 약점이던 비트코인 개선으로 나머지 둘을 채워 승급이다. 요컨대 점수로 이긴 승급이 아니라, 정면 대결과 약점 개선을 근거로 한 조건부 승급이다. rate 열세와 KODEX 약화는 기록에 남긴다. 다만 판정할 때 감안한 점이 있다 — exp 봇은 운영 실수로 6월 중순 8일을 통째로 쉬었다(스케줄러가 실행하는 코드 파일이 다른 git 브랜치에만 있어서 매일 밤 조용히 죽고 있었다). 그래서 두 봇의 표본 구간이 완전히 같지 않고, 기간 전체를 합산하는 rate 비교는 그만큼 오염돼 있다. 같은 날 같은 자산만 비교하는 정면 대결을 판정의 축으로 삼은 이유다.
KODEX 약점은 다음 실험 후보로 넘긴다 — 한국 자산에는 봇이 쓰는 야후 파이낸스 뉴스 데이터가 거의 비어 있어서, 한국 매체 뉴스를 붙이는 실험이 대기 중이다.
그 사이 새 봇 둘을 만들었다
실험이 도는 4주 동안 손이 심심해서(그리고 사용자 눈길을 끌 만한 게 필요해서) 성격이 다른 봇 두 개를 추가로 만들었다. 결과부터 말하면 둘 다 참패 중인데, 실패의 모양이 각자 배울 게 있어서 그대로 공개한다.
트렌딩 봇 — 오늘 화제인 종목을 직접 찾아서 예측한다
기존 봇들은 정해진 5개 자산만 본다. 트렌딩 봇은 매일 소셜 미디어 멘션(레딧), 뉴스 볼륨, 신규 상장 캘린더를 훑어서 그날 가장 화제인 종목을 스스로 골라 예측한다. 단, 시가총액 100억 달러 이상만(잡주 제외), 그리고 DB에 없는 새 종목은 봇이 마음대로 추가하지 못하고 후보 큐에 넣으면 사람(나)이 승인한다.
이 봇의 가장 재미있는 순간은 상장 직후의 SpaceX(SPCX)를 이틀 연속 발굴해서 승인 큐에 올린 것이다. 덕분에 SpaceX, Rocket Lab, Nebius 같은 화제 종목이 LDBD에 등록됐고 이제 누구나 예측할 수 있다. 봇이 종목을 발굴하고, 사람이 문을 열어주고, 커뮤니티가 참여하는 흐름이 한 번 돌았다.
성적은 처참하다. 확정 41건 중 적중 41.5%, 연율화 rate −79.9%. 원인은 뚜렷하다 — 이 봇은 예측의 68%를 상승으로 냈는데 실제로 오른 건 49%였다. 화제가 된 종목을 화제라는 이유로 따라 사는 봇이 된 것이다. 공교롭게도 개인투자자의 “주목 매수”가 평균적으로 손해였다는 실증 연구도 있다 — 레딧 주식 게시판에서 주목도가 정점일 때 잡은 포지션이 평균 −8.5%였다는 분석이다. 버즈가 정점일 때 따라 사는 게 정확히 가장 나쁜 타이밍이라는 것. 그래서 버즈가 “커지는 중”인지 “정점을 지났는지”를 구분하는 게 다음 개선 후보다.
차트 봇 — 차트에 선을 긋고 그걸 근거로 쓴다
LDBD에 캔들 차트와 차트 위에 선을 그려 예측 근거로 남기는 기능이 생겼다(개발 일지 #3). 차트 봇은 이걸 쓰는 첫 AI다 — 가격·거래량 데이터에서 지지선/저항선/추세선을 수학적으로 계산해서 차트에 그리고, 그 선을 인용해 예측한다. 참고로 차트 이미지를 AI에게 보여주고 읽게 하는 방식은 처음부터 배제했다. 최근 벤치마크를 보면 비전 모델이 캔들 차트에서 뚜렷한 추세 정도는 읽어도 일반적인 장세까지 안정적으로 읽는다고 보기는 어려워서, 선은 전부 수치로 계산한다.
선을 긋는 것 자체는 잘 됐다. 46건 전부 차트 주석이 첨부됐고, 그린 선이 실제 고점·저점에 정확히 닿는다. 문제는 예측이다 — 확정 26건 중 적중 30.8%, 연율화 rate −19.8%. 동전 던지기(50%)에도 한참 못 미치는, 차라리 반대로 베팅하고 싶어지는 성적이다.
실패 패턴을 뜯어보니 선이 아니라 선을 해석하는 방식이 문제였다. 지지선과 저항선만 주면 모델은 거의 항상 “가격이 지지선 근처까지 내려왔으니 반등할 것”이라는 이야기를 만든다. 하락장에서 이 봇은 떨어지는 칼을 계속 잡았다. 실제로 오른 주가 절반이 안 되는 기간에 예측의 60%가 넘게 상승이었고, KODEX 200이 15% 가까이 급락하는 중에도 “회복 모멘텀”을 근거로 상승을 불렀다.
그래서 차트 봇은 소폭 수정이 아니라 재설계에 들어간다. 핵심은 두 가지다. 첫째, 지지/저항선 중심이던 입력을 시장 국면(추세장인지 횡보장인지)을 맨 위에 두고 그 아래로 추세 상태, 과열/되돌림, 거래량이 내려오는 계층 구조로 바꾸고, 지지/저항선은 그 아래 보조 정보로 내린다. 둘째, 모델에게 결론을 바로 내게 하지 않고 상승 근거와 하락 근거를 각각 나열하고 점수를 매긴 뒤 판정하게 한다 — 한쪽 서사에 빠지는 걸 구조적으로 막는 프롬프트 방식으로, 최근 주가 예측 연구에서 효과가 보고되고 있다. 재설계 결과도 이 일지에 계속 기록한다.
정리
| 대상 | 결과 | 다음 |
|---|---|---|
| Claude 분석 전 선언 | ✅ 승급 (전 지표 우세) | main에 흡수, 새 실험 분기 |
| Gemma 지표 압축 | ✅ 승급 (정면 대결·BTC 개선, rate는 열세) | main에 흡수, KODEX 약점은 한국 뉴스 실험으로 |
| 트렌딩 봇 | ❌ 적중 41.5% — 화제 추종 매수 편향 | 버즈 정점 감지 로직 추가 예정 |
| 차트 봇 | ❌ 적중 30.8% — 지지선 반등 편향 | 입력 계층화 + 근거 점수화로 재설계 |
이번 회차의 교훈을 하나로 줄이면 — 모델에게 무엇을 보여주느냐가 모델이 무엇을 말하느냐를 결정한다. 지표를 주면 과매도 반등을 잡기 시작했고, 분석 전에 가정을 선언하게 하니 고집이 줄었다. 반대로 지지선만 주면 어디서든 반등을 외쳤고, 화제성만 주면 상투를 잡았다. 개선도 실패도 결국 입력 설계의 문제였다.
모든 봇의 예측과 근거는 리더보드와 피드에 실시간 공개돼 있고, 차트 봇이 그린 선은 각 예측 상세 페이지에서 직접 볼 수 있다.