Login
Back to Blog
Claude Code로 월드컵 배당 변동 모니터 만들기: claude-fable-5 실전 JSON 분석

Claude Code로 월드컵 배당 변동 모니터 만들기: claude-fable-5 실전 JSON 분석

C
Crazyrouter Team
June 13, 2026
0 views한국어Tutorial
Share:

Claude Code로 월드컵 배당 변동 모니터 만들기: claude-fable-5 실전 JSON 분석#

이번 글은 Claude Code로 작은 데이터 파이프라인을 끝까지 만들어 보는 개발자 튜토리얼입니다. 주제는 월드컵 경기의 배당 변동을 감지하고, 감지된 이벤트를 claude-fable-5가 구조화된 JSON으로 요약하게 만드는 것입니다.

중요한 전제부터 명확히 하겠습니다.

이 글은 베팅 조언이 아닙니다. 특정 팀, 경기, 시장에 대해 베팅을 추천하지 않습니다. 여기서 다루는 것은 배당 데이터를 예제로 사용한 시계열 모니터링, 임계값 알림, LLM 출력 검증, 운영 로그 설계입니다.

테스트한 API 환경은 다음과 같습니다.

text
Base URL: https://cn.crazyrouter.com/v1
Model: claude-fable-5
Goal: 배당 변동 알림을 베팅 조언 없이 유효한 JSON으로 요약하기

왜 배당 변동 모니터가 Claude Code 예제로 좋은가#

배당이라는 단어 때문에 스포츠 베팅을 먼저 떠올릴 수 있지만, 개발 관점에서 보면 이 문제는 꽤 전형적인 모니터링 시스템입니다.

입력 데이터가 있고, 이전 값과 현재 값이 있으며, 파생 지표를 계산하고, 임계값을 넘으면 알림을 만들고, 사람이 읽을 수 있는 리포트를 생성합니다.

즉 다음과 같은 구성요소가 필요합니다.

  • CSV 또는 API에서 들어오는 숫자 데이터
  • opening 값과 latest 값 비교
  • decimal odds를 implied probability로 변환
  • percentage point 단위 변화량 계산
  • 임계값 기반 alert 생성
  • LLM을 통한 요약
  • JSON 파싱 및 스키마 검증
  • “베팅 조언 금지” 같은 안전 경계

Claude Code에게 “누가 이길까?”를 묻는 것보다, 이런 식으로 반복 가능한 데이터 처리 프로젝트를 만들게 하는 것이 훨씬 좋은 사용법입니다.


전체 아키텍처#

이번 데모 파이프라인은 일부러 작게 만들었습니다.

text
sample_odds_movements.csv
  ↓
Python parser
  ↓
decimal odds → implied probability
  ↓
opening/latest 변화량 계산
  ↓
threshold 기반 alert 생성
  ↓
Crazyrouter로 claude-fable-5 호출
  ↓
JSON validation
  ↓
차트와 블로그용 산출물 생성

프로젝트 디렉터리는 이런 형태입니다.

text
generated/claude_code_odds_monitor_fable_20260613/
├── build_odds_monitor.py
├── sample_odds_movements.csv
├── odds_monitor_output.json
├── odds_movement_chart.svg
├── crazyrouter_raw_claude-fable-5.json
├── claude_fable_5_test_result.json
└── claude_fable_5_final_test_result.json

핵심 역할 분리는 단순합니다.

text
Python은 숫자를 계산한다.
claude-fable-5는 알림을 설명한다.
검증 코드는 LLM 출력이 실제로 쓸 수 있는지 판단한다.

이 분리가 중요합니다. 숫자 판단 자체를 LLM에게 맡기지 않고, LLM은 이미 계산된 alert를 운영자가 이해하기 쉬운 JSON 설명으로 바꾸는 역할만 합니다.


샘플 데이터 준비#

재현 가능한 튜토리얼을 위해 실제 sportsbook feed가 아니라 합성 샘플 데이터를 사용했습니다.

csv
match,market,opening_decimal,latest_decimal,timestamp
USA vs Paraguay,USA win,2.20,2.08,2026-06-12T08:00:00Z
USA vs Paraguay,Draw,3.55,3.65,2026-06-12T08:00:00Z
USA vs Paraguay,Paraguay win,3.10,3.25,2026-06-12T08:00:00Z
Brazil vs Morocco,Brazil win,1.78,1.72,2026-06-13T08:00:00Z
Qatar vs Canada,Canada win,2.08,1.92,2026-06-13T08:00:00Z
Germany vs Curaçao,Germany win,1.20,1.16,2026-06-14T08:00:00Z

운영 환경이라면 여기서 해야 할 일이 더 많습니다. 여러 bookmaker의 스냅샷을 같은 타임라인에 맞추고, 중복 알림을 줄이고, 데이터 지연이나 누락을 체크해야 합니다. 하지만 Claude Code 프로젝트 예제로는 작은 CSV가 더 좋습니다. 입력이 고정되어야 결과를 반복 검증할 수 있기 때문입니다.


decimal odds를 implied probability로 바꾸기#

decimal odds는 아주 간단하게 암시 확률로 변환할 수 있습니다.

python
def implied_prob(decimal_odds):
    return 1.0 / decimal_odds

그리고 opening 값과 latest 값을 비교합니다.

python
open_p = implied_prob(opening)
latest_p = implied_prob(latest)
delta_pp = (latest_p - open_p) * 100

여기서 delta_pp는 percentage point 변화량입니다. 예를 들어 45.45%에서 48.08%로 움직였다면 변화량은 약 2.63pp입니다.

임계값을 넘으면 alert를 만듭니다.

python
if abs(delta_pp) >= 2.5:
    alerts.append({
        "match": match,
        "market": market,
        "direction": movement_direction,
        "delta_pp": round(delta_pp, 2),
        "note": "Large implied-probability movement; review news, lineup, liquidity, and data quality."
    })

이 구조의 장점은 명확합니다. alert는 LLM의 감이 아니라 재현 가능한 계산에서 나옵니다.


생성된 alert 예시#

스크립트는 네 개의 유의미한 변동을 감지했습니다.

json
[
  {
    "match": "USA vs Paraguay",
    "market": "USA win",
    "direction": "shortened",
    "delta_pp": 2.62
  },
  {
    "match": "Qatar vs Canada",
    "market": "Qatar win",
    "direction": "drifted",
    "delta_pp": -3.18
  },
  {
    "match": "Qatar vs Canada",
    "market": "Canada win",
    "direction": "shortened",
    "delta_pp": 4.01
  },
  {
    "match": "Germany vs Curaçao",
    "market": "Germany win",
    "direction": "shortened",
    "delta_pp": 2.87
  }
]

가장 큰 변화는 Qatar vs Canada 경기의 Canada win 시장이었습니다. 암시 확률이 4.01pp 증가했습니다.

다시 강조하지만, 이것은 베팅 신호가 아닙니다. 시스템 관점에서는 “데이터가 충분히 움직였으니 로그를 남기고, 뉴스·라인업·유동성·데이터 품질을 확인하자”라는 모니터링 이벤트입니다.

World Cup odds movement monitor sample chart


Crazyrouter로 claude-fable-5 호출하기#

다음 단계는 alert 목록을 claude-fable-5에 보내고, 사람이 읽을 수 있는 운영 리포트용 JSON을 받는 것입니다.

Crazyrouter는 OpenAI 호환 API 형태로 사용할 수 있습니다.

python
from openai import OpenAI

client = OpenAI(
    api_key="YOUR_CRAZYROUTER_API_KEY",
    base_url="https://cn.crazyrouter.com/v1",
)

요청의 핵심은 모델명과 메시지입니다.

json
{
  "model": "claude-fable-5",
  "messages": [
    {
      "role": "user",
      "content": "Return raw JSON only. Analyze these odds movement alerts for an engineering demo..."
    }
  ],
  "max_tokens": 1200
}

프롬프트에는 두 가지 조건을 명시했습니다.

text
No betting advice.
Output raw JSON only.

LLM을 운영 파이프라인에 넣을 때는 이런 제약이 매우 중요합니다. 특히 후속 코드가 JSON 파싱을 해야 한다면, “설명은 좋지만 파싱이 안 되는 답변”은 실패로 처리해야 합니다.


claude-fable-5 테스트 결과#

최종 테스트에서는 claude-fable-5가 유효한 JSON을 반환했습니다.

ModelHTTPLatencyPrompt tokensCompletion tokensTotal tokensValid JSON
claude-fable-520012.14s8335991432True

반환된 JSON은 이런 형태였습니다.

json
{
  "summary": "4 significant odds movements detected across 3 matches. The Qatar vs Canada match shows the largest activity, with Canada win shortening by 4.01pp while Qatar win drifted by -3.18pp, indicating a consistent directional shift within the same market pair. USA win and Germany win both shortened moderately (2.62pp and 2.87pp respectively).",
  "alerts_count": 4,
  "top_movement": {
    "match": "Qatar vs Canada",
    "market": "Canada win",
    "direction": "shortened",
    "delta_pp": 4.01
  },
  "checks": [
    "Verify lineup announcements and injury news for all flagged matches, especially Qatar vs Canada",
    "Confirm market liquidity at the time of movement to rule out thin-market noise",
    "Validate data feed integrity and timestamp consistency across sources",
    "Cross-check movements against multiple bookmakers to confirm market-wide vs single-source shifts",
    "Check whether Qatar/Canada movements are mirrored (overround-consistent) or indicate a data anomaly"
  ],
  "recommendations": [
    "Treat the paired Qatar vs Canada movements as a single correlated event in downstream analytics",
    "Add automated correlation detection for opposing markets in the same match",
    "Log raw odds snapshots around alert timestamps for audit and replay",
    "Set per-market thresholds since a 4pp move may be normal in volatile markets but anomalous in stable ones",
    "Flag movements lacking corresponding news events for manual data-quality review"
  ],
  "disclaimer": "This analysis is for engineering and data-quality demonstration purposes only. It does not constitute betting advice, predictions, or recommendations to wager. Odds movements reflect market activity and data signals, not outcome probabilities endorsed by this system."
}

좋은 점은 이 출력이 베팅 추천으로 흐르지 않았다는 것입니다. 대신 운영자가 확인해야 할 데이터 품질 체크리스트와 후속 개선 항목으로 정리되었습니다.


실제 연동에서 배운 점: payload shape가 중요하다#

테스트 과정에서 한 번 실패가 있었습니다.

처음 보낸 요청은 다음과 같은 오류를 반환했습니다.

text
HTTP 400
Invalid request

모델명이 틀린 것은 아니었습니다. /v1/models에서는 claude-fable-5를 확인할 수 있었습니다.

문제는 요청 payload 형태였습니다. 일부 파라미터를 줄이고, 입력을 더 작게 만들고, max_tokens 중심으로 단순화한 뒤에는 정상 응답을 받았습니다.

최종적으로 안정적이었던 패턴은 다음과 같습니다.

  • model: claude-fable-5를 명시한다.
  • 입력 alert를 너무 길게 만들지 않는다.
  • 지원 여부가 애매한 파라미터를 넣지 않는다.
  • “raw JSON only”를 명확히 요구한다.
  • 그래도 반드시 JSON validation을 한다.

LLM 품질은 단순히 “똑똑한 답변”만이 아닙니다. API 호환성, 출력 형식 준수, 지연 시간, 재시도 비용, 실패 시 복구 가능성까지 모두 포함됩니다.


Crazyrouter를 쓰는 이유#

이 예제에서 Crazyrouter의 장점은 모델 호출부를 단순하게 유지할 수 있다는 점입니다.

배당 변동 모니터는 실제로 여러 종류의 모델 작업을 포함할 수 있습니다.

  1. 큰 alert 목록 요약
  2. 데이터 품질 점검 항목 생성
  3. 같은 경기 안에서 반대 시장의 움직임 해석
  4. 운영자용 리포트 작성
  5. 베팅 조언으로 이어지지 않도록 안전 경계 유지

모델을 바꿔 비교하고 싶을 때, 애플리케이션 코드를 매번 뜯어고치면 유지보수가 어려워집니다.

Crazyrouter를 사용하면 통합 방식은 단순합니다.

text
하나의 API key
하나의 OpenAI-compatible base URL
여러 모델 route
동일한 validation layer

이번 글에서는 claude-fable-5를 테스트했지만, 같은 구조로 GPT, Gemini, Qwen 계열 모델을 비교하는 실험도 쉽게 확장할 수 있습니다.


Claude Code에게 맡기기 좋은 작업 단위#

이 프로젝트에서 Claude Code가 해야 할 일은 단순히 Python 파일 하나를 만드는 것이 아닙니다.

좋은 산출물은 다음처럼 운영에 필요한 파일을 함께 포함해야 합니다.

  1. sample_odds_movements.csv — 재현 가능한 입력
  2. odds_monitor_output.json — deterministic alert 결과
  3. odds_movement_chart.svg — 시각화
  4. crazyrouter_raw_claude-fable-5.json — 원본 API 응답 로그
  5. claude_fable_5_final_test_result.json — 검증 결과
  6. 게시 가능한 기술 문서

이런 흐름이 AI 코딩 에이전트를 잘 쓰는 방식입니다. “답을 말해줘”가 아니라, 파일·로그·테스트·문서가 남는 작은 프로젝트를 완성하게 하는 것입니다.


한계와 운영 환경에서 추가할 것들#

이번 데모는 합성 데이터를 사용합니다. 실제 운영용 배당 모니터라면 훨씬 더 많은 장치가 필요합니다.

  • 실제 odds API 또는 sportsbook feed 연동
  • 여러 bookmaker 비교
  • overround normalization
  • 시장 유동성 추정
  • timestamp alignment
  • 라인업·부상·뉴스 데이터 연결
  • alert deduplication
  • 히스토리 기반 threshold 조정
  • 규제 및 컴플라이언스 검토

따라서 이 글의 결론은 “이 데이터로 베팅하자”가 아닙니다. 결론은 “LLM을 숫자 계산기가 아니라 검증 가능한 모니터링 파이프라인의 설명 계층으로 쓰자”입니다.


다음 개선 아이디어#

이 예제를 더 발전시키려면 다음 기능을 붙일 수 있습니다.

  1. 정기 odds snapshot 수집
  2. 여러 데이터 제공자 연결
  3. overround-adjusted implied probability 계산
  4. 같은 경기 내 상관된 시장 움직임 자동 탐지
  5. 뉴스·라인업 이벤트와 alert 매칭
  6. claude-fable-5, GPT, Gemini, Qwen route 비교
  7. valid JSON report 1개당 실제 비용 계산
  8. 작은 웹 대시보드 구축

특히 운영 지표는 단순한 token cost보다 다음에 가까워야 합니다.

text
cost per valid alert report

여기에는 실패 요청, 재시도, malformed JSON, 디버깅 시간까지 포함됩니다.


마무리#

Claude Code로 배당 변동 모니터를 만드는 것은 좋은 실전형 예제입니다. 단, 프레이밍이 중요합니다.

좋은 구조는 다음과 같습니다.

text
Python이 implied probability movement를 계산한다.
Claude Code가 파이프라인과 산출물을 만든다.
claude-fable-5가 Crazyrouter를 통해 alert를 요약한다.
JSON validation이 결과를 사용할 수 있는지 판단한다.

이 패턴은 스포츠 데이터뿐 아니라 가격 모니터링, 금융 데이터 대시보드, API observability, 운영 알림 시스템에도 그대로 응용할 수 있습니다.

claude-fable-5나 다른 모델을 OpenAI 호환 API로 테스트하고 싶다면 Crazyrouter에서 같은 방식으로 시작할 수 있습니다.

https://crazyrouter.com?utm_source=crazyrouter_blog&utm_medium=article&utm_campaign=ko_claude_code_odds_monitor_fable

Implementation Guides

Topics

Tutorial

Related Posts

Claude Code 설치 및 사용 가이드 - AI 프로그래밍 어시스턴트 설정Tutorial

Claude Code 설치 및 사용 가이드 - AI 프로그래밍 어시스턴트 설정

AI 프로그래밍 어시스턴트인 Claude Code를 설치하고 설정하는 완전한 가이드입니다. Node.js 설치, API 토큰 설정, 터미널에서 AI와 함께 코딩을 시작하는 방법을 배울 수 있습니다.

Jan 24
Doubao Seed Code: 바이트댄스 AI 코드 생성 모델 - 완전한 API 가이드Tutorial

Doubao Seed Code: 바이트댄스 AI 코드 생성 모델 - 완전한 API 가이드

Doubao Seed Code, 바이트댄스의 강력한 AI 코드 생성 모델 사용법을 알아보세요. Python, Node.js 예제와 요금 비교를 포함한 완전한 API 튜토리얼.

Jan 26
Sora란 무엇인가 - OpenAI 영상 생성 AI 완전 가이드Tutorial

Sora란 무엇인가 - OpenAI 영상 생성 AI 완전 가이드

OpenAI Sora 영상 생성 AI에 대해 기능 특징, 사용 방법, API 연동 튜토리얼 및 가격 비교를 상세히 소개합니다. Crazyrouter API를 통해 손쉽게 Sora를 사용하여 고품질 AI 영상을 생성하는 방법을 알아봅니다.

Jan 26
GPT-image-2로 AI 미래 아기 예측 — 우리 아이는 어떤 모습일까?Tutorial

GPT-image-2로 AI 미래 아기 예측 — 우리 아이는 어떤 모습일까?

Crazyrouter API를 통해 GPT-image-2로 미래 아기의 모습을 사실적으로 예측합니다. Python, curl, Node.js 전체 코드 포함.

May 2
GPT-image-2 실전 가이드:AI 손금 분석 — 손바닥 사진 한 장으로 전문 손금 인포그래픽 생성하기Tutorial

GPT-image-2 실전 가이드:AI 손금 분석 — 손바닥 사진 한 장으로 전문 손금 인포그래픽 생성하기

Crazyrouter API를 통해 GPT-image-2로 전문적인 손금 분석 인포그래픽을 생성하는 방법을 소개합니다. Python, curl, Node.js 전체 코드 포함.

May 2
GPT-image-2로 AI 밈 생성기 & 컬러링북 만들기 — 재미있고 수익도 되는 프로젝트Tutorial

GPT-image-2로 AI 밈 생성기 & 컬러링북 만들기 — 재미있고 수익도 되는 프로젝트

GPT-image-2와 Crazyrouter API로 AI 밈 생성기와 컬러링북 페이지 제작기를 만듭니다. 재미있고 수익화 가능한 두 가지 프로젝트의 전체 코드를 제공합니다.

May 2