외부 평가자·기여자가 시스템을 읽기 전에 이 문서를 먼저 읽기 권장. 모든 보고된 수치·시뮬·rationale의 신뢰도 경계가 명시됨.
docs/layer1.md 안 LAYER1 적중률 표:
| 검증 | 적중률 |
|---|---|
| 등급 적중 | 73% |
| 방향 적중 | 87% |
| 순위 적중 | 100% |
| 종합 | 87% |
누락:
현재 상태: 이전 세션 측정값 인용, 메타데이터 미명시. 위 수치는 절대 마케팅 자료로 사용 금지. 신규 측정 필요.
개선 후보: 21-case harness(법률봇 패턴) + 3-repetition averaging + baseline(random affinity 분포) 동시 측정.
PoC 단계에서 일부 변수는 실데이터 wire-up 안 됨:
| 위치 | Mock 변수 | 영향 |
|---|---|---|
| L2 slow_variables (16/16) | mock 2 | 14/16 실데이터 (87.5%) |
| L4 외인 매매 | pykrx 차단 → Naver 크롤링 우회 (5/3) | watchlist 종목만, universe sector_top은 부재 |
| L4 한국 정치·사경 뉴스 | n8n news_kr_daily (5/2 수정 후 운영) | 일부 누락 케이스 가능 |
| L1 add-on lens baseline 22 값 | 정성 추정 (외부 source 4종 wire-up으로 대체 진행 중) | 외부 source 활성 시 derived |
시뮬레이션 v5 “L4 풀 가동” 표현의 한계: LAYER1 다차원 + crisis_mode + L4 SYSTEM_PROMPT 동적 가중까지 활성화된 상태이지만, 외인 매매 데이터가 watchlist 한정이라 universe 종목 분석에선 그 데이터 없이 LLM이 추정. “풀 가동”은 LAYER1·LAYER4 분석 메커니즘 풀 가동일 뿐, 입력 데이터 풀 가용은 아님.
사용자 지적 정정: 임계값 박는 것 자체가 목적이 아니다. 본질은:
구현 (5/3 적용):
_eval_market()에 abs_diff per ticker 박음 — pred_midpoint(라벨→%) vs actual_pct 절대 차이avg_abs_diff + max_abs_diff 메트릭 — 교정 baselinecompare_cohorts(log_path, cohort_field, market) — 누적 _log.jsonl에서 cohort tag별 평균 abs_diff 비교 + delta 계산 + regression 알림 (after > before면 회귀)LABEL_MIDPOINT dict — 강한호재 +5%, 호재 +1.75%, 중립 0%, 악재 -1.75%, 강한악재 -5% (typical 중간값)측정 사이클:
prompt_version/schema_version/model/git_sha 등 — 후속)_log.jsonl에 sector별 abs_diff 누적compare_cohorts() 로 교정 전후 평균 abs_diff 차이 측정MERGE_THRESHOLDS는 trigger: 직관적 합격선 (방향 70%/강도 60%/avg_abs_diff <2%p 등). 단 본질은 추적·축적·정량 교정 효과.
5/3 추가 적용:
generate_forecast.py에 build_cohort_tag() — forecast JSON에 cohort 자동 부착:
prompt_sha (LAYER3·4 SYSTEM_PROMPT sha, 8자리) — prompt 변경 시 자동 cohort 분기git_sha (current commit short SHA) — 코드 변경 추적schema_l3/schema_l4 — 호환 깨질 변경 추적tagged_at (UTC ISO)compare_cohorts(cohort_field="cohort.prompt_sha") 같이 호출 가능21-case harness 폐기 (5/3):
LAYER3·LAYER4·LAYER5 모두 Claude Opus 4.5 zero-shot 호출:
영향:
개선 후보:
--temperature 옵션 미지원 (검증 끝남: claude -p --help 결과 --model만). SDK 직접 호출이 아니라 CLI 사용 한 LAYER3·4·5는 temperature 강제 불가DETERMINISTIC_NOTE 상수 — SYSTEM_PROMPT에 “결정론적 출력 강제” 자연어 박음. 효과 약하지만 비용 0n_calls/determinism_note 필드 이미 추가 완료temperature=0 (CLI subscription → API 비용 모델 변경 큰 작업)현재 dataclass:
@dataclass
class Layer2Output:
asof: str
layer1_context: dict
slow_variables: list[VariableState]
# ... schema_version 필드 없음
위험:
개선 후보 (5분 작업):
schema_version: str = "1.0" 추가assert l2.schema_version == "1.0")LAYER5 입력은 시계가 다른 데이터의 혼합:
위험: prompt에 시점 라벨 없으면 LLM이 분기 데이터를 실시간으로 오인. 1Q 결과를 4Q 시장 분석에 쓰는 위험.
5/3 적용:
StockFundamentals에 as_of_period 필드 (예: “2025.12”) + fetched_at (UTC ISO)(2025.12) 패턴 추출_stock_to_dict/_stock_to_dict_brief 둘 다 prompt payload에 박음LAYER5 출력의 portfolio_weight: 0~1을 LLM이 통째로 결정하던 위험:
5/3 적용:
normalize_portfolio_weights(stocks, holdings_map, cash_buffer=0.10) 후처리 함수raw = max(0, SIGNAL_SCORE) × CONFIDENCE_WEIGHT (long-only)
weight = raw / sum(raw) × (1 - cash_buffer) (현금 buffer 10%)검증: 4 stock (강매수+높음/매수+중간/중립/매도) → 0.667/0.233/0/0 합계 0.900 정상.
LAYER5가 매수·매도 신호 직접 생성 → 자본시장법상 유사투자자문업 해석 여지. 자기 사용 한정이라도 명시 안전.
5/3 적용:
.gitignore 강제 (개인 보유 정보 절대 공개 X) — 양 repo 모두| 보완 | 즉시 위험 | 중기 위험 |
|---|---|---|
| 1. 검증 메타데이터 | 외부 신뢰도 X | 채용·OSS 평가 시 부정 평가 |
| 2. Mock 잔존 | 시뮬 결과 oversell 위험 | 실 시장 적용 시 정확도 갭 |
| 3. 평가 임계 | 5/8 머지 결정 자의적 | 시스템 수명 단축 |
| 4. LLM 비결정성 | 매일 결과 신뢰도 모호 | 백테스트 무의미 |
| 5. Schema 버전 | 다음 schema 변경 시 silent break | 디버깅 비용 누적 |
schema_version + run_layer3/4/5 진입 시 호환 검증as_of_period “2025.12” 추출 + prompt 박음normalize_portfolio_weights confidence-weighted long-only + cash buffer 10%이 문서는 시스템의 한계를 가리지 않기 위해 존재. 누락·새로 발견된 한계는 PR로 추가.