docs: 베이지안 업데이트 로직 개선 작업 요약 추가 (2025-12-23)

- troubleshooting 문서에 베이지안 업데이트 로직 개선 내용 추가
  - 누적 odds 변환 방식으로 변경
  - 그래프 색상 점진적 변화
  - 5회차 피크 값 표시
  - 종합 행 회차별 값 표시
- 플랜 문서에 구현 완료 상태 반영
This commit is contained in:
happybell80 2025-12-17 19:02:08 +09:00
parent 0b53ead850
commit ae20023e79
2 changed files with 46 additions and 0 deletions

View File

@ -77,3 +77,14 @@
- 백엔드: FastAPI
- 엔드포인트: 참가자 등록, 공 꺼내기, IR 정보 업데이트, 결과 조회
## 구현 완료 (2025-12-23)
### BallQuiz 페이지 베이지안 업데이트 로직
- **누적 odds 변환**: 각 회차마다 입력한 확률(%)을 odds로 변환하여 이전 alpha, beta에 누적
- 초기 50% → alpha=1, beta=1 → 1회차 60% → alpha=2.5, beta=2 → 2회차 65% → alpha=4.36, beta=3
- 5회차까지 진행 시 alpha + beta > 10
- **그래프 색상 점진적 변화**: 초기 연보라에서 5회차 진한 보라로 점진적 변화
- **5회차 피크 값 표시**: Beta 분포 피크 공식으로 계산하여 그래프 하단에 표시
- **종합 행 회차별 값 표시**: 각 회차별 참가자들의 평균 확률 계산하여 확률(%)과 odds(x:1) 형식으로 표시
- **상세 내용**: `journey/troubleshooting/251216_bayesian_presentation_ballquiz_redesign.md` 참조

View File

@ -33,6 +33,13 @@
- **입력 중 덮어쓰기**: 입력 중 서버 `state_update`가 오면 아직 저장되지 않은 입력값이 사라짐
- **리셋 버튼 미작동**: 리셋 후에도 테이블의 입력값이 그대로 남아있어 초기화되지 않음
### 6. 베이지안 업데이트 로직 문제 (2025-12-23 추가)
- **독립적 확률 변환**: 각 회차마다 확률(%)을 독립적으로 베타분포로 변환하여 이전 회차 정보가 누적되지 않음
- **그래프 색상 구분 부족**: 초기와 회차별 그래프 색상이 동일하여 변화 추이 파악 어려움
- **피크 값 미표시**: 5회차까지 입력 완료 후 최종 확률 추정값(피크)이 표시되지 않음
- **하이라이트 테두리 과도**: 공을 꺼낸 후 활성화된 셀의 테두리가 과도하게 강조됨
- **종합 행 미표시**: 종합 행의 회차별 값이 "-"로만 표시되어 평균 확률을 확인할 수 없음
---
## 해결 방안
@ -63,6 +70,17 @@
- **자동 저장**: `BallQuizPage.tsx:94-120` - `useEffect` + debounce(300ms)로 입력값 자동 저장
- **리셋 시 로컬 상태 초기화**: `BallQuizPage.tsx:26-29` - `estimates`가 빈 객체일 때 `participantInputs`도 빈 객체로 초기화
### 베이지안 업데이트 로직 개선 (2025-12-23)
- **누적 odds 변환**: 각 회차마다 입력한 확률(%)을 odds로 변환하여 이전 alpha, beta에 누적
- 예: 초기 50% → alpha=1, beta=1 → 1회차 60% → alpha=2.5, beta=2 → 2회차 65% → alpha=4.36, beta=3
- 5회차까지 진행 시 alpha + beta > 10
- **그래프 색상 점진적 변화**: 초기 연보라(`rgba(200, 180, 255, 0.8)`)에서 5회차 진한 보라(`rgba(92, 0, 230, 0.9)`)로 점진적 변화
- **5회차 피크 값 표시**: 5회차까지 입력 완료 시 Beta 분포 피크 공식 `(alpha - 1) / (alpha + beta - 2)`로 계산하여 그래프 하단에 표시
- **하이라이트 테두리 제거**: 활성화된 셀의 테두리 제거, 배경색(`bg-primary/5`)과 그림자(`shadow-sm`)만 유지
- **종합 행 회차별 값 표시**: 각 회차별 참가자들의 평균 확률 계산하여 확률(%)과 odds(x:1) 형식으로 표시
- **초기 그래프 항상 표시**: 초기값이 없어도 기본값 50%로 그래프 표시
- **입력하지 않은 회차 그래프 미표시**: 해당 회차에 입력이 없으면 그래프를 그리지 않음
---
## 구현 완료
@ -76,6 +94,14 @@
- 입력 중 서버 업데이트로 덮어쓰기 방지
- 자동 저장으로 입력값 유실 방지
- 리셋 버튼 정상 작동
- 베이지안 업데이트 로직 개선 완료 (2025-12-23)
- 누적 odds 변환으로 이전 회차 정보 누적
- 그래프 색상 점진적 변화 (연보라 → 진한 보라)
- 5회차 피크 값 표시 (그래프 하단)
- 하이라이트 테두리 제거
- 종합 행 회차별 평균 확률 표시
- 초기 그래프 항상 표시 (기본값 50%)
- 입력하지 않은 회차 그래프 미표시
---
@ -117,3 +143,12 @@
- `useEffect`에서 early return 전에 빈 객체 체크 후 로컬 상태 초기화 로직 추가
- **원칙**: `313_React_구조_원칙.md:100-104` - 프론트엔드/백엔드 상태 동기화
### 베이지안 업데이트는 누적 방식으로 구현
- **원인**: 각 회차마다 확률을 독립적으로 베타분포로 변환하여 이전 회차 정보가 누적되지 않음
- **교훈**:
- 베이지안 업데이트는 이전 정보를 누적하는 방식이므로, 각 회차 입력값을 odds로 변환하여 alpha, beta에 누적
- 확률(%)을 odds로 변환: `odds = prob / (100 - prob)`, `alpha = odds`, `beta = 1`
- 누적: `cumulativeAlpha += odds.alpha`, `cumulativeBeta += odds.beta`
- 5회차까지 진행 시 alpha + beta > 10이 되어 그래프가 더 뾰족해짐
- **원칙**: 베이지안 추론의 본질은 사전 정보와 관찰 정보를 결합하는 것