AI로 420개의 예측 소스를 추적합니다. 여기 오픈소스 프레임워크가 있습니다.
Source: Dev.to
(번역할 텍스트를 제공해 주시면 한국어로 번역해 드리겠습니다.)
문제
예측 추적을 위한 표준 인프라가 없습니다.
| 기존 생태계 | 무엇을 하는가 |
|---|---|
| LangChain | 에이전트 |
| HuggingFace | 모델 |
| Supabase | 백엔드 |
하지만 다음 질문에 답하는 것은 없습니다:
“누가 무엇을 언제 예측했으며, 그 예측이 맞았는가?”
Signal Tracker가 이를 해결합니다.
설치
pip install signal-tracker
Zero dependencies – stdlib only.
Python 3.10+.
5‑분 워크스루
출처와 주장 추적
from signal_tracker import SignalTracker
from datetime import date
tracker = SignalTracker()
# Add sources
elon = tracker.add_source("Elon Musk", source_type="person", category="tech")
cramer = tracker.add_source("Jim Cramer", source_type="person", category="finance")
imf = tracker.add_source("IMF", source_type="institution", category="economics")
# Add predictions
tracker.add_claim(
source=elon,
text="Tesla will achieve full self‑driving by end of 2025",
target_date=date(2025, 12, 31),
)
tracker.add_claim(
source=cramer,
text="Netflix will hit $800 by Q2 2025",
target_date=date(2025, 6, 30),
)
tracker.add_claim(
source=imf,
text="Global GDP growth will reach 3.2 % in 2025",
target_date=date(2025, 12, 31),
)
결과 검증
tracker.verify(claim1, outcome="wrong", reasoning="FSD not achieved by deadline")
tracker.verify(claim2, outcome="correct", reasoning="Netflix reached $820 in May")
tracker.verify(claim3, outcome="partial", reasoning="GDP grew 2.9 %, close but below target")
리더보드 구축
board = tracker.leaderboard(min_claims=3)
for entry in board.top_accurate:
print(f"{entry.rank}. {entry.source.name}: {entry.score.accuracy_score}%")
다른 유용한 보기:
board.worst_accurate– 하위 성과자board.biggest_risers– 급상승 중인 사람board.biggest_fallers– 성과가 악화된 사람board.notable_wrongs– 고프로필 실수
점수 체계
정확도 점수
- 단순 백분율 기반 정확도, 뉘앙스 포함:
- 부분 정확도 가중치 – 설정 가능 (기본값 0.5, 즉 부분 정답은 절반으로 계산)
- 최소 주장 임계값 – 의미 있는 점수를 위해 소스는 최소 3개의 해결된 주장이 필요
- 시간 창 점수 – 30 d, 90 d, 12 mo, 그리고 전체 기간에 대한 정확도를 별도로 계산
windows = tracker.accuracy_scorer.score_windowed(claims, source_id=source.id)
for period, snapshot in windows.items():
print(f" {period}: {snapshot.accuracy_score}%")
최신성 가중 점수
최근 예측일수록 더 큰 영향을 미칩니다. 설정 가능한 반감기를 갖는 지수 감쇠를 사용합니다:
from signal_tracker.scoring import AccuracyConfig
config = AccuracyConfig(recency_half_life_days=90)
tracker = SignalTracker(accuracy_config=config)
지난 주의 예측은 1년 전 예측보다 약 8× 더 큰 영향을 미칩니다. 이는 과거에 좋았지만 최근에 성과가 떨어진 소스를 부각시킵니다.
주장 품질 점수
모든 예측이 동등하게 만들어지는 것은 아닙니다. “언젠가 상황이 나아질 것이다”는 “비트코인이 2025년 4분기에 $150k에 이를 것이다”와 동일하지 않습니다.
품질 스코어러는 아래 표를 기준으로 각 주장을 0‑100 점수로 평가합니다.
| 요소 | 가중치 | 확인 항목 |
|---|---|---|
| 시간‑제한 | 30 % | 특정 기한이 있나요? |
| 측정 가능 | 30 % | 수치 목표가 있나요? |
| 반증 가능 | 20 % | 성공/실패 기준이 명확한가요? |
| 최신성 | 20 % | 주장이 얼마나 최신인가요? |
from signal_tracker import QualityScorer
scorer = QualityScorer()
score = scorer.score(claim) # e.g., 87.5 — highly trackable
high_quality = [c for c in claims if scorer.is_high_quality(c)]
스코어러는 정규식 패턴을 사용해 예측 문구, 금액, 백분율, 날짜 언급 및 회피 어휘를 감지합니다. 모호한 표현(“might”, “could”, “eventually”)은 벌점이 부과됩니다.
텍스트에서 예측 추출
규칙 기반 (빠름, API 호출 없음)
text = """
In his latest interview, the CEO predicted that revenue would
exceed $10 billion by Q2 2025. He also forecast that the company
would reach 100 million users within 18 months.
"""
claims = tracker.extract_claims(text, source=ceo)
for claim in claims:
print(f" {claim.text}")
print(f" Target: {claim.target_date}")
print(f" Category: {claim.category}")
print(f" Quality: {claim.quality_score}")
LLM‑기반 (보다 정확함)
자신만의 LLM 함수를 제공하세요 (str → str 형태의 호출 가능한 객체라면 모두 사용 가능).
import anthropic
client = anthropic.Anthropic()
def my_llm(prompt: str) -> str:
response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1000,
messages=[{"role": "user", "content": prompt}],
)
return response.content[0].text
tracker = SignalTracker(llm_fn=my_llm)
claims = tracker.extract_claims(transcript, source=analyst, use_llm=True)
이 통합은 모델에 구애받지 않음 – OpenAI, Anthropic, Gemini, 로컬 모델 등 어떤 모델도 사용할 수 있습니다.
다중 모델 합의 검증
In production at Crene we don’t trust a single model. We run several and take a weighted vote.
tracker.verify_with_consensus(
claim,
[
{"outcome": "correct", "verifier": "ai:claude", "confidence": 0.90},
{"outcome": "correct", "verifier": "ai:gpt-4", "confidence": 0.85},
{"outcome": "wrong", "verifier": "ai:gemini","confidence": 0.60},
],
)
결과: "correct" – 가중 합의가 승리합니다.
결과는 신뢰도 점수에 따라 가중치가 부여됩니다; 높은 신뢰도의 동의가 다수일 경우 낮은 신뢰도의 반대를 무시합니다.
변조 감지
모든 청구는 생성 시 SHA‑256 해시를 부여받습니다:
claim = tracker.add_claim(source, "Bitcoin to $200k by 2025")
print(claim.content_hash) # a1b2c3d4...
이후, 변경되지 않았는지 확인합니다:
claim.verify_integrity() # True
누군가 텍스트를 수정하면…
claim.text = "I never said that"
claim.verify_integrity() # False — hash mismatch
지속성
JSON (간단)
tracker.save("my_tracker.json")
tracker = SignalTracker.load("my_tracker.json")
SQLite (대규모 데이터셋용)
from signal_tracker.storage import SQLiteBackend
backend = SQLiteBackend("tracker.db")
backend.save_source(source)
backend.save_claim(claim)
쿼리
all_claims = backend.list_claims(source_id="elon-musk")
아키텍처
signal-tracker/
├── tracker.py # SignalTracker — main interface
├── models.py # Source, Claim, Verification, ScoreSnapshot
├── scoring.py # AccuracyScorer, QualityScorer
├── extractors.py # ClaimExtractor (rules + LLM)
├── leaderboard.py # Leaderboard engine
└── storage.py # SQLiteBackend
디자인 원칙
- Zero required dependencies – stdlib only for core
- Bring your own LLM – any provider works
- Pluggable storage – JSON, SQLite, or build your own
- Plain dataclasses – no ORM dependency anywhere
다음 단계
로드맵은 커뮤니티가 원하는 것에 따라 달라집니다:
| 버전 | 기능 |
|---|---|
| v0.2 | REST API 서버 (FastAPI) |
| v0.3 | RSS, Twitter, YouTube 전사본 자동 수집 |
| v0.4 | 대시보드 UI (React) |
| v0.5 | 예측 시장 통합 (Polymarket, Kalshi) |
| v0.6 | 변조 방지 기록을 위한 블록체인 앵커링 |
시도해 보기
pip install signal-tracker
- GitHub: https://github.com/Creneinc/signal-tracker
- PyPI: https://pypi.org/project/signal-tracker
- Production version: https://crene.com (see the Signals tab)
40개의 테스트가 통과되었습니다. MIT 라이선스. 기여를 환영합니다.
이 프레임워크는 무료입니다. 데이터가 방어벽입니다.