리스크 기반 주식 포트폴리오 옵티마이저를 만들었습니다 (그리고 배운 점)

발행: (2025년 12월 25일 오전 10:07 GMT+9)
6 분 소요
원문: Dev.to

Source: Dev.to

많은 개발자들처럼, 나는 모호한 AI 주장이나 블랙‑박스 최적화를 내세우며 초과 수익을 약속하는 “포트폴리오 빌더” 도구들을 많이 보았다.

나는 다른 관점을 탐구하고 싶었다: 위험‑제어된 포트폴리오 구조—단순히 어떤 주식이 “위험”하다고 라벨링되는 것만이 아니라—가 최적화기를 이끌어낸다면?

👉 Live demo:

StockRisker screenshot

The Core Idea

대부분의 개인 투자 도구는 위험을 부수적인 효과로 취급한다:

  • 위험이 높음 → “더 위험한 주식”
  • 위험이 낮음 → “더 안전한 주식”

실제로 포트폴리오는 그렇게 움직이지 않는다. 위험 허용도는 보통 다음에 영향을 미친다:

  • 얼마나 집중적으로 투자할 의향이 있는지
  • 얼마나 많은 섹터 노출을 허용하는지
  • 할당이 얼마나 비대칭적일 수 있는지

StockRisker에서는 위험이 포트폴리오 제약을 직접 제어한다:

  • 위험이 높음 = 페널티 감소, 높은 집중 한도
  • 위험이 낮음 = 더 엄격한 분산 규칙

위험은 단순한 라벨이 아니라 구조적인 입력이다.

How the Optimizer Works (High Level)

최적화기는 세 가지 레이어를 중심으로 구축된다:

Risk Mapping

사용자는 위험 수준(1–10)을 선택한다. 그 값은 동적으로 다음을 제어한다:

  • 주식당 최대 할당 비율
  • 섹터당 최대 할당 비율
  • 분산 페널티의 강도

높은 위험 수준에서는, 사용자 의도와 맞지 않는 “안전한” 포트폴리오를 강제하기보다 페널티가 완화된다.

Constraint‑Driven Portfolio Generation

포트폴리오는 다음을 기준으로 평가된다:

  • 하드 제약 (절대로 위배될 수 없음)
  • 소프트 제약 (점수 페널티로 적용)

이는 최적화가 기술적으로 성공했지만 비현실적인 포트폴리오를 생성하는 일반적인 실패 모드를 방지한다.

Explainable Scoring

각 포트폴리오는 다음을 균형 있게 고려하는 가중 함수로 점수가 매겨진다:

  • 예상 수익 추정치
  • 변동성 및 분산
  • 집중도 및 섹터 노출

결과가 의심스러워 보이면(예: 매우 높은 수익 대비 상대적으로 낮은 변동성), UI는 위험을 숨기지 않고 상황에 맞는 경고를 표시한다. “보장된 초과 수익”이라는 메시지는 없다.

What I Optimized Against

가장 흥미로운 도전 과제 중 하나는 수학이 아니라 기대 관리였다. 내가 의도적으로 피한 것들:

  • S&P 500을 능가한다는 약속 없음
  • 불투명한 AI 모델 없음
  • 단일 “정답” 포트폴리오 없음

대신, 이 도구는 사용자가 트레이드‑오프를 고민하도록 돕는다:

  • 집중 vs. 분산
  • 위험 선호도 vs. 변동성
  • 단순성 vs. 최적화

Tech Stack

  • Backend: TypeScript + Node.js
    • 모듈식 최적화기 설계 (위험 매핑 → 제약 → 점수화)
    • 성능 및 안정성을 위한 캐시된 주식 유니버스
  • Frontend: 명확성과 설명 가능성에 초점을 맞춘 깔끔하고 최소한의 UI

아키텍처는 다음과 같은 향후 확장을 지원하도록 설계되었다:

  • 백테스팅
  • 위험 조정 지표(샤프, 손실폭)
  • 시나리오 시뮬레이션

What I Learned

  • 위험은 UX 문제이며, 단순히 수학 문제만은 아니다 – 사용자는 포트폴리오가 왜 그런 형태인지 이해할 필요가 있다.
  • 제약이 알고리즘보다 중요하다 – 좋은 제약을 가진 간단한 최적화기가 제약이 없는 복잡한 최적화기보다 우수하다.
  • 투명성은 성과 주장보다 신뢰를 빠르게 구축한다 – 제한 사항을 드러내는 것이 실제로 신뢰를 높인다.
Back to Blog

관련 글

더 보기 »