본문으로 건너뛰기

© 2026 Molayo

Dev.to헤드라인2026. 06. 24. 04:29

축구 경기를 보지 않는 봇을 만들었습니다. 월드컵 리그에서 2위입니다.

요약

축구 경기를 전혀 시청하지 않고도 Claude를 활용해 월드컵 경기 결과를 예측하는 AI 에이전트 구축 사례를 소개합니다. 스쿼드 가치, 클래스 격차, 페이스 불일치라는 세 가지 구조적 규칙을 프롬프트에 적용하여 인간 전문가들과 경쟁하는 성과를 거두었습니다.

핵심 포인트

  • Claude를 활용한 구조화된 프롬프트 설계로 경기 예측 수행
  • 스쿼드 가치 등 3가지 핵심 대리 변수(Proxy)를 통한 데이터 기반 의사결정
  • 250줄 미만의 간결한 코드로 API 인증 및 자동 베팅 시스템 구현
  • 축구 지식 없이도 논리적 규칙만으로 인간 팬들과 대등하게 경쟁

이 봇은 총 14명 중 2위를 차지하고 있습니다. 선두에게는 3점 차이가 납니다.

이 리그에 참여한 13명의 인간들은 저보다 훨씬 많은 축구 경기를 시청하며, 선두 주자는 그들 대부분보다 더 많은 축구를 시청합니다. 이 봇은 단 한 번도 경기를 본 적이 없습니다.

설정

친구들만 참여할 수 있는 예측 리그인 월드컵 2026입니다. 참가자는 인간 13명과 봇 1개입니다. 이 리그는 비공개라 링크를 공유하지 않겠습니다. 순위표에서 봇의 이름은 저와 같은 'mike'이며, 다른 사람들은 제가보다 이것을 더 재미있어 합니다.

저는 두 개의 파일을 작성했습니다. client.py는 리그 API에 대해 세션 쿠키 인증(session-cookie auth)을 수행하고 matches(), me(), 그리고 put_bet(match_id, home, away)를 노출합니다. revise.py는 15분마다 cron으로 실행되며, 경기 시작까지 90분에서 200분 사이의 예정된 경기를 살펴보고, Claude에게 판결을 요청한 다음, 무언가 변경되었다면 베팅을 작성합니다. 상태 보호(state guard)는 동일한 매치에 대해 같은 사전 창(pre-window) 내에서 재검토되지 않도록 합니다. 모든 결정과 그 이유를 담은 경기별 JSON 기록이 있습니다. 전체 코드는 250줄 미만입니다.

세 가지 규칙

Claude에게 전달하는 프롬프트는 구조화되어 있고 간결합니다. 이 프롬프트는 홈 팀 골, 원정 팀 골, 확신도 수준(confidence level), 그리고 반드시 세 가지 규칙 중 하나를 인용해야 하는 한 문장의 이유를 요청합니다.

  1. 스쿼드 가치 비율 (Squad-value ratio). 각 스쿼드의 추정 시장 가치를 기반으로 합니다. 어느 한쪽 팀이 다른 쪽보다 명확하게 더 비싸다면, 그 팀이 더 많은 골을 넣습니다.
  2. 클래스 격차 (Class gap). 이 두 팀 중 한 팀이 데뷔팀이나 약한 연맹 소속이고, 다른 팀이 최근 성적을 기준으로 상위 8개국일 경우입니다. 그렇다면 모달 스코어(modal score)가 더 강하게 반영됩니다.
  3. 페이스 불일치 (Pace mismatch). 어느 한쪽 팀의 공격 속도 스타일이 상대방의 수비 형태를 명백히 괴롭힐 때입니다.

이것이 전체 규칙서입니다. '팀 케미스트리' 같은 것은 없습니다. '감독이 압박을 받고 있다'는 것도 없고, '지난 조별 경기에서의 모멘텀' 같은 것도 없습니다. '브라질이 포인트를 놓치기 쉬운 토너먼트' 같은 이야기도 없습니다. 이 세 가지 거친 구조적 대리 변수(structural proxies)가 어느 한쪽 팀이 명백히 더 우위에 있는지를 나타내며, 확신도 수준은 모달 스코어가 얼마나 공격적으로 될지 결정합니다.

순위표

오늘 아침 기준 전체 순위표입니다. 다른 플레이어들은 익명 처리(단일 알파벳)되었으며, 봇의 행은 굵게 표시했습니다:

순위플레이어점수 (Pts)정확한 스코어 (Exact)차이 (Diff)결과 (Result)베팅 (Bets)
1A71652772
...
순위표 상단을 글로 풀어서 설명하면 다음과 같습니다: 플레이어 A는 71점을 기록 중이며, 6개의 정확한 스코어를 맞혔고, 토너먼트의 모든 경기에서 예측을 수행했습니다. 우리 그룹의 이전 대화 내용으로 미루어 볼 때, 이 사람은 세 개의 리그에 걸친 클럽들을 챙겨보고, 선수 로테이션을 파악하며, 이적 뉴스를 팔로우하는 등 끊임없이 축구를 시청하는 사람입니다. 진정한 팬이죠. 봇은 3개의 정확한 스코어를 기록하며 3점 차로 뒤처져 있습니다. 3위인 플레이어 B 역시 진정한 팬이며, 봇보다 1점 더 뒤에 있습니다.

봇은 축구의 실제 팬 바로 한 줄 아래에 자리 잡고 있습니다. 더 똑똑해서도, 축구를 잘 알아서도 아닙니다. 평소라면 세네갈이 어느 조에 속해 있는지조차 알려줘야 하는 사람이 운영하는, 작고 구조화된 시스템(structured system)이기 때문입니다.

이 부분이 흥미로운 이유

이 리그의 대부분의 사람들은 진지한 축구 팬들입니다. 그들은 경기를 시청합니다. 직관(intuition)을 형성합니다. 어떤 팀이 선수단 가치에 비해 성적이 저조한지, 어느 팀이 후반전에 힘이 빠지는지, 어떤 감독이 빠른 윙어를 보유한 팀을 상대로 잘못된 교체 카드를 쓰는지에 대한 의견을 가지고 있습니다. 그러한 지식은 실재하며, 쉽게 대체될 수 없습니다.

그럼에도 불구하고, 단 세 개의 규칙과 cron job(예약 작업)으로 구성된 250줄짜리 스크립트가 그들 중 12명을 앞서고 있습니다.

봇이 1위(leader)를 이기는 것은 아닙니다. 순위표 상단에 있는 실제 축구 직관을 능가하는 것도 아닙니다. 봇이 하는 일은, 그들이 가진 입력값(inputs)이 전혀 없음에도 불구하고 거의 다른 모든 사람을 이기는 것입니다. 도메인 지식이 풍부한 직관(domain-rich intuition)과 새로운 도메인에서의 작고 규율 있는 시스템(small disciplined system) 사이의 그 격차 — 이것은 제가 다른 작업에서도 계속 주목하고 있는 부분이며, 예측 리그에서 이토록 명확하게 드러날 줄은 예상치 못했습니다.

이 규율(discipline)은 축구에만 국한된 것이 아닙니다. 그것은 다음과 같습니다: 작고 구조화된 프롬프트(prompt)를 정의하고, 크론(cron)에 따라 실행하며, 경기별 기록을 작성하고, 모델 워커(model worker)가 워커의 일을 수행하게 하며, 모델 주변의 구조가 _언제 행동할지, 그리고 언제 이전의 베팅을 유지할지_를 결정하게 하는 것입니다. 그 구조가 모델보다 더 많은 일을 수행하고 있습니다.

몇 가지 솔직한 주의사항

이 봇이 토너먼트 전체 기간 동안 2위를 유지하지는 못할 것입니다. 토너먼트의 결선 라운드(knockout rounds)는 더 복잡해집니다. 토너먼트 축구에서는 변동성(variance)이 높기 때문에 스쿼드 가치 비율(squad-value ratios)의 신뢰도가 떨어지며, 세 가지 투박한 규칙으로는 상위권 인간 전문가가 치열한 8강전에서 포착하는 종류의 미묘한 차이(nuance)를 놓치게 될 것입니다. 리그의 나머지 팀들과 봇 사이의 격차는 현재 실재합니다. 이 격차가 유지될지는 별개의 문제입니다.

또한, 봇은 예측 자체를 똑똑하게 수행하는 것이 아닙니다. Claude가 내부적으로 베이지안 모델(Bayesian model)을 실행하고 있는 것이 아닙니다. 그것은 세 가지 규칙이 담긴 작고 구조화된 프롬프트(prompt)를 바탕으로 패턴 매칭(pattern-matching)을 하는 것입니다. 소위 말하는 영리함은 모델 주변의 아키텍처(architecture) — 즉, 크론(cron)의 주기, 상태 가드(state guard), 구조화된 규칙 세트, 경기별 JSON 로그 — 에 있습니다. 모델은 일꾼(worker)일 뿐입니다. 구조가 일꾼이 언제 결과물을 보낼지 결정합니다.

이 구분이 이 글의 핵심입니다. 봇이 축구 팬들을 이기는 이유는 모델이 똑똑해서가 아닙니다. 모델 주변의 시스템이 작고, 구조화되어 있으며, 일관적이기 때문에 대부분의 팬을 이기는 것입니다. 대부분의 가벼운 예측은 그렇지 않기 때문입니다.

푸터 (Footer)

만약 이것이 vibe-coding-is-not-a-level 프레임워크처럼 들린다면, 맞습니다. 새로운 도메인에서 작고 규율 있는 시스템은 도메인 직관(domain intuition)에 놀라울 정도로 근접할 수 있으며, 때로는 느슨하게 적용된 직관을 완전히 압도할 수도 있습니다. 저는 지난주에 소프트웨어 분야에서 이 내용을 쓰고 있었습니다. 이번 주에는 축구 분야에서 쓰고 있는 것입니다. 그 형태(shape)는 자신이 어떤 도메인에 존재하는지는 상관하지 않습니다.

봇의 예측은 조별 리그(group stage) 동안 계속 이어질 것입니다. 순위는 변동될 것입니다. 순위가 변하면 후속 글을 작성하겠습니다.

AI 자동 생성 콘텐츠

본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0