DOCS/plans/251016_bayesian_startup_valuation.md
Claude-51124 cb7861cddb Remove Seed hardcoding, support all stages
Seed 고정 제거, 모든 투자 단계 지원:
- 섹션 2: "Seed 단계" → "입력 변수 및 사례" (seed, series A 예시)
- Stage별 μ_posterior 테이블 추가 (seed: 2.08억/명, series A: 5.0억/명)
- Stage별 프리미엄 테이블 추가 (seed: 0.86배 → series B+: 1.5~2.0배)
- 시각화, 사례, 검증 모두 stage 변수화
- 검증 사례: seed만 완료, series A+ 추가 필요 명시

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-16 23:52:01 +09:00

404 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 베이지안 스타트업 가치평가 프레임워크
**날짜**: 2025-10-16
**작성자**: Claude Code
**관련 파일**:
- `/tmp/find_similar_neo4j.py`
- `/tmp/valuation_bayesian_mcmc.py`
- `/tmp/bayesian_premium_updater.py`
---
## 1. 개요
Neo4j 그래프 분석과 베이지안 MCMC를 결합한 스타트업 가치평가 프레임워크. 동적 프리미엄 학습으로 하드코딩 제거 및 시장 변화 자동 반영.
**데이터 소스**:
- K-Startup 스타트업 데이터 12,703개
- 경로: `/mnt/51123data/DATA/startup/data/startup_data_20251016.json`
**프레임워크 구성**:
1. Neo4j 그래프 기반 유사 기업 탐색
2. Bayesian MCMC 확률적 가치평가
3. 동적 프리미엄 온라인 학습 (PostgreSQL)
---
## 2. 입력 변수 및 사례
**입력 변수**:
```
기업: {company_name}
산업: {industry_tags} # 예: 협업툴, SaaS, 그룹웨어
투자단계: {stage} # seed | pre-A | series A | series B | series C | series D
직원 수: {N}명
투자금액: {disclosed / 비공개}
```
**사례 1: Seed 단계** (리버스마운틴):
```
기업: 리버스마운틴 (티키타카)
산업: 협업툴/그룹웨어, SaaS/엔터프라이즈
투자단계: seed
직원: 9명
투자: 비공개
```
**사례 2: Series A** (가상 예시):
```
기업: Example Corp
산업: AI/ML, SaaS
투자단계: series A
직원: 25명
투자: 30억원
```
---
## 3. 유사 기업 분석 (Neo4j)
### 3.1 Neo4j 구축
**설치**: neo4j Python driver 6.0.2
```bash
pip3 install neo4j --break-system-packages
docker run -d --name neo4j -p 7474:7474 -p 7687:7687 neo4j:latest
```
**데이터 로드**: find_similar_neo4j.py:21-67
- 필터링: {industry_keywords} 기반
- 대상: M개 기업 (전체 12,703개 중)
- 예시 키워드: 조직관리, 인사솔루션, 협업툴, 그룹웨어
**관계 생성**: find_similar_neo4j.py:73-81
- SIMILAR_TO 관계: 공통 태그 K개 이상 (K=3)
- 비교 기준: tagNamesKr 필드
### 3.2 유사 기업 검색
**Cypher 쿼리**:
```cypher
MATCH (target:Startup {name: {company_name}})-[r:SIMILAR_TO]-(similar:Startup)
RETURN similar.name, similar.intro, similar.stage, similar.employees,
similar.investment, r.commonTags
ORDER BY r.commonTags DESC
LIMIT {top_k}
```
**결과 형식**:
```
1. {company_1}
- 공통 태그: K개
- 투자단계: {stage}
- 직원: N명
- 투자: X억원
- 설명: {description}
```
**사례 (리버스마운틴)**: 291개 필터링, Top 5
- 1위: 마드라스체크 (5개 공통태그, Series B, 109명, 70억)
- 2위: 콜라비팀 (4개, Series A, 30.2억)
- 3위: 디웨일 (4개, Series B, 72명, 140억)
**시장 포지셔닝**:
- {industry} 시장 분석
- {stage} 단계 경쟁 강도
- 후발주자 vs 선도기업 판단
---
## 4. 가치평가 (Bayesian MCMC)
### 4.1 방법론
**파일**: valuation_bayesian_mcmc.py:28-56
**Bayesian 추론**:
```
Posterior(가치/명) = Prior(전체 유사 기업) × Likelihood(동일 stage)
```
**MCMC (Metropolis-Hastings)**:
- 반복: n_iter회 (기본 50,000)
- Burn-in: n_iter × 0.1
- Acceptance ratio 기반 샘플링
### 4.2 데이터 전처리
**유사 기업 수집**:
- 조건: {stage_range} & {industry_tags}
- 이상치 제거: IQR 기반 (Q1-3×IQR ~ Q3+3×IQR)
- 결과: L개 유효 데이터
### 4.3 Prior Distribution
**정의**: 유사 기업 전체의 직원당 가치
- 분포: N(μ_prior, σ_prior)
- 의미: {industry} 시장 평균
### 4.4 Likelihood Distribution
**정의**: {stage} 단계만의 직원당 가치
- 분포: N(μ_likelihood, σ_likelihood)
- 의미: 타겟 기업과 동일 단계 실제 가치
### 4.5 Posterior Distribution
**MCMC 결과**:
- 분포: N(μ_posterior, σ_posterior)
- 해석: Prior와 Likelihood의 베이지안 결합
### 4.6 기본 가치평가 (프리미엄 前)
**공식**:
```
기본 가치 = {N}명 × μ_posterior억/명
```
**Stage별 평가 예시**:
| Stage | μ_posterior | 사례 | 기업 수 |
|-------|-------------|------|---------|
| seed | 1.5~2.5억/명 | 리버스마운틴: 2.08억/명 | 115개 |
| pre-A | 2.5~4.0억/명 | - | - |
| series A | 4.0~7.0억/명 | - | - |
| series B | 7.0~12억/명 | - | - |
**사례 1 (seed - 리버스마운틴)**:
- Prior: N(4.01, 8.43) - 442개 기업
- Likelihood: N(1.74, 3.34) - 115개 seed
- Posterior: N(2.08, 3.08)
- 기본: 9명 × 2.08억 = 18.7억원
- 신뢰구간: [-48억, 101억] (95% CI)
**하드코딩 프리미엄 문제**:
- 특정 기능 프리미엄 (AI +20% 등)
- 실제 데이터 미반영
- ❌ 검증 필요 → 4.7로 해결
### 4.7 동적 베이지안 프리미엄 학습
**파일**: /tmp/bayesian_premium_updater.py
**문제 인식**:
- 하드코딩 프리미엄 근거 부족
- 실제 데이터 검증 필요
**온라인 베이지안 학습**:
```
Prior_premium(t) = Posterior_premium(t-1)
새 투자 데이터 → Update → Posterior_premium(t)
```
**프리미엄 계산**:
```
premium_ratio = 실제_투자금액 / 모델_기본_평가
```
**Sequential Update**:
```
1. 초기: μ=1.0, σ=1.0 (uninformative prior)
2. 데이터 수집: {industry} & {stage} 투자 공개 기업
3. Bayesian Update: μ_t, σ_t (정확도 ↑, 불확실성 ↓)
4. PostgreSQL 저장: premium_state 테이블
```
**상태 저장 스키마**:
```sql
CREATE TABLE premium_state (
industry VARCHAR,
stage VARCHAR,
mu FLOAT,
sigma FLOAT,
n_updates INT,
updated_at TIMESTAMP
);
```
**최종 가치평가**:
```
최종 가치 = 기본_가치 × μ_premium
신뢰구간 = 기본_가치 × [μ - 1.96σ, μ + 1.96σ]
```
**사례 비교** (seed 단계):
| 방법 | 프리미엄 | 평가 (9명) | 근거 |
|------|---------|-----------|------|
| 하드코딩 | 1.38배 | 25.9억 | AI+통합 가정 |
| 동적 학습 (seed) | 0.86배 | 16.0억 | 95개 seed 데이터 |
| 차이 | -38% | -9.9억 | 과대평가 방지 |
**Stage별 프리미엄**:
| Stage | μ_premium | σ | 데이터 수 |
|-------|-----------|---|----------|
| seed | 0.86배 | 0.13 | 95개 |
| pre-A | 1.0~1.2배 | - | - |
| series A | 1.2~1.5배 | - | - |
| series B+ | 1.5~2.0배 | - | - |
**검증 사례**:
- 애디터 (seed, 5명, 32.5억 실제)
- 모델: 10.3억 → 프리미엄 후 12.4억
- 비율: 2.6배 (상위 5% outlier, seed는 변동성 큼)
**장점**:
- 데이터 기반 프리미엄
- 자동 시장 반영
- 투자 뉴스 → 자동 업데이트
---
## 5. 시각화
**그래프 구성**:
1. MCMC Trace Plot: 수렴 확인 (Burn-in 이후)
2. Posterior Distribution: KDE, μ_posterior 표시
3. Prior vs Posterior: 분포 변화 (학습 효과)
4. Total Valuation: 박스플롯 (중앙값, 평균, CI)
**사례별 결과**:
| Stage | μ_posterior | 중앙값 (9명 기준) | 95% CI |
|-------|-------------|------------------|--------|
| seed | 2.08억/명 | 24.1억 | [-48, 101]억 |
| series A | 5.0억/명 (추정) | 45억 | [20, 70]억 (추정) |
---
## 6. 로빙 시스템 구현 가능성
### 6.1 현재 시스템 분석
**파일**: /home/admin/ivada_project/rb8001/main.py
**기존 구조**:
- FastAPI 기반 스킬 시스템
- 엔드포인트: /api/message, /complete, /api/slack/events
- 스킬 예시: startup_news_skill.py, news_posting_skill.py, dm_skill.py
### 6.2 구현 계획
**새 스킬**: app/skills/startup_analysis_skill.py
**새 엔드포인트**: main.py에 /api/analyze/startup/{company_name} 추가
**워크플로우 관리**: LangGraph
- 유사 기업 검색 → 가치평가 → 결과 생성의 순차적 흐름 관리
- 조건부 분기: 데이터 부족 시 대안 방법 자동 선택
- 상태 관리: 분석 진행 상황 추적 및 사용자 피드백
- 에러 처리: 각 단계별 실패 시 재시도 로직
### 6.3 기술적 고려사항
**장점**:
- 데이터 접근 가능: /mnt/51123data/DATA/
- Python 라이브러리: numpy, scipy 설치 가능
- 비동기 처리: FastAPI async 지원
- 캐싱: 반복 쿼리 최적화 가능
**제약사항**:
- 메모리: 256MB 제한 (MCMC 50,000회는 가능)
- Neo4j: 별도 컨테이너 필요 (또는 networkx로 대체)
- 응답 시간: MCMC 10-30초 소요 ("분석 중..." 메시지 필요)
- 계산 집약: MCMC 대신 사전 계산 결과 사용 고려
**구현 접근**:
- 경량화: networkx 그래프 (Neo4j 없이)
- 사전 계산: 주요 기업 가치평가 미리 저장
- 근사: MCMC 대신 Gaussian approximation
- 워크플로우: LangGraph로 복잡한 분석 흐름 관리
### 6.4 사용자 경험
**대화 플로우**:
```
User: "{company_name}과 유사한 기업 찾아줘"
Robeing: [t초] "Neo4j 그래프 분석 중..."
Robeing: [t+5초] "{company_1}이 가장 유사합니다.
공통 태그 {K}개, {stage} 단계, {N}명입니다."
User: "{company_name} 가치평가해줘"
Robeing: [t초] "베이지안 MCMC 분석 중..."
Robeing: [t+30초] "약 {V}억원 (95% CI: {L}~{U}억)으로 평가됩니다.
{stage} 단계 특성상 불확실성 {σ}입니다."
User: "프리미엄 근거는?"
Robeing: "동적 학습 결과 {μ_premium:.2f}배입니다.
{industry} & {stage} 기업 {n}개 데이터 기반입니다."
```
**실제 사례**:
| 사례 | Stage | 유사 기업 | 평가 | 프리미엄 |
|------|-------|----------|------|---------|
| 리버스마운틴 | seed | 마드라스체크 (5개 태그) | 16.0억 (CI: 12.5~21.4) | 0.86배 (95개 seed) |
| Example Corp | series A | - | - | 1.2배 (추정) |
---
## 7. 교훈
### 7.1 데이터 품질의 중요성
- K-Startup 데이터: 투자금액 "비공개" 다수
- 결측치 처리: 442개 중 실제 사용 가능한 데이터는 더 적음
- 교훈: 가치평가는 데이터 품질에 크게 의존
### 7.2 초기 단계의 불확실성
- 95% CI 넓음: {stage} 특성상 변동성 큼
- 음수 하한 가능: 일부 기업 투자 실패
- 교훈: 확률 분포와 신뢰구간 제시 필수
### 7.3 Neo4j vs 단순 필터링
- Neo4j 장점: 관계 중심 탐색, 확장성
- 단순 필터링: 빠르고 간단
- 교훈: 소규모(수백 개)는 필터링, 대규모(수만 개)는 그래프 DB
### 7.4 MCMC의 실용성
- 계산 시간: 50,000회 약 2-3초
- 수렴 확인: Trace plot으로 검증 필수
- 교훈: 비동기 처리와 진행 상황 UI 필요
### 7.5 하드코딩의 위험성
- 가정 기반 프리미엄 → 실제 데이터와 괴리
- 과대/과소평가 가능성
- 검증 없는 파라미터는 위험
- 교훈: 모든 가정은 데이터 검증, 동적 업데이트 필수
### 7.6 온라인 학습의 중요성
- Sequential Bayesian Update로 지속 개선
- PostgreSQL 상태 저장으로 누적 학습
- 투자 뉴스 크롤링 → 자동 프리미엄 업데이트
- 교훈: 정적 모델보다 동적 학습이 시장 반영
---
## 8. 참고 자료
### 8.1 관련 연구
- research/bayesian_theory/ - 베이지안 추론 이론
- research/knowledge_graph/ - Neo4j 그래프 DB
### 8.2 데이터 소스
- K-Startup 공공데이터: https://www.k-startup.go.kr
- 스타트업 투자 데이터: 12,703개 기업 (2025-10-16 기준)
### 8.3 기술 스택
- Neo4j 2025.09.0: 그래프 데이터베이스
- Python neo4j driver 6.0.2
- NumPy, SciPy: 통계 계산
- Matplotlib: 시각화
- LangGraph: 워크플로우 관리 및 상태 추적
- PostgreSQL: 동적 프리미엄 상태 저장 및 온라인 학습
---
**작성 완료**: 2025-10-16
**프레임워크 버전**: 1.0
**검증 사례**:
- seed: 리버스마운틴 (9명, 협업툴), 애디터 (5명)
- series A+: 추가 검증 필요