[WATCH-02] ML: 예측 곡선 API 추가 (GET /predictions/{symbol})

작업 내용 (설계 의도)

변경 사항

기술적 모멘텀(선형회귀 기울기 + momentum_score 가중) 기반으로 단기 가격 방향 참고 시그널을 계산하는 build_prediction 함수와 /predictions/{symbol} 엔드포인트를 추가한다. 반환 구조: 최근 20일 실제 종가(historical) + 향후 5일 예측(predicted, upper/lower 밴드) + 주의 문구. WATCH-01과 파일 충돌 없음(prediction.py 신규 파일).

다이어그램

처리 흐름

sequenceDiagram
    participant FE
    participant ML as ML :8000
    participant TC as TossClient
    FE->>ML: GET /predictions/{symbol}
    ML->>TC: get_closes(symbol, 20)
    ML->>ML: build_prediction(closes, momentum_score)
    ML-->>FE: {historical, predicted, note}

클래스 의존

flowchart LR
    main.py --> prediction.py
    prediction.py --> indicators.py
    prediction.py --> momentum.py

테스트 케이스

  • build_prediction(closes=[...20개...], momentum_score=0.3)이 5일 예측 포인트를 반환한다
  • predicted[0].price > closes[-1]이면 momentum_score > 0이다 (방향 일치)
  • upper[d] > predicted[d].price > lower[d]가 모든 d에 대해 성립한다
  • closes가 5개 미만이면 ValueError를 발생시킨다
  • /predictions/{symbol} 엔드포인트가 unknown symbol에 404를 반환한다
  • 토스 API 5xx 에 502를 반환한다
  • 응답 note 필드에 “투자 판단 근거로 사용하지 마십시오” 문구가 포함된다