06-consolidation-experiment-guide

Dec 7, 2025

Consolidation Experiment Guide

Phase 3.3 검증을 위한 실험 프레임워크

Overview

이 문서는 Decision Tree Logic이 올바르게 작동하는지 검증하기 위한 실험 방법론을 정의합니다.

핵심 아이디어: 정답이 정해진 테스트 케이스로 시스템을 검증

1. 실험 목표

검증하려는 것

  1. 결정 정확도: SKIP/UPDATE/CREATE 결정이 올바른가?

  2. Threshold 적절성: 0.95/0.80/0.50 기준값이 적절한가?

  3. Factor 가중치: content 50%, people 15% 등이 적절한가?

  4. 경계 안정성: 경계 근처(예: 0.79 vs 0.81)에서 합리적인가?

2. 데이터셋 구조

2.1 파일 구조

.data/experiments/
├── datasets/
└── v1/
├── manifest.json          # 메타정보
└── cases/
├── SKIP_001.json
├── UPDATE_001.json
└── ...
├── runs/
└── run_{timestamp}/
├── config.json            # 실험 설정
└── results.json           # 결과
└── reports/
    └── comparison.json            # 버전간 비교

2.2 테스트 케이스 스키마

{
  "id": "SKIP_001",
  "category": "SKIP",
  "difficulty": "easy",
  "scenario": {
    "name": "forwarded_email",
    "description": "포워드된 동일 이메일"
  },

  "existing_memory": {
    "id": "mem_existing",
    "content": "Q1 마케팅 예산은 5000만원입니다.",
    "threadId": "thread_001",
    "people": ["alice@co.com"],
    "entities": ["Q1 마케팅"]
  },

  "new_email": {
    "subject": "Fwd: Q1 마케팅 예산",
    "body": "FYI\n------\nQ1 마케팅 예산은 5000만원입니다.",
    "from": "bob@co.com",
    "threadId": "thread_002"
  },

  "expected": {
    "decision": "SKIP",
    "reason": "내용 동일, 새 정보 없음"
  }
}

2.3 케이스 분포

Category

Easy

Medium

Hard

Edge

Total

SKIP

5

5

5

5

20

UPDATE

5

5

5

5

20

CREATE

5

5

5

5

20

CREATE+LINK

5

5

5

5

20

Total

20

20

20

20

80

3. 테스트 시나리오

3.1 SKIP 시나리오

ID

시나리오

특징

난이도

SKIP_001

포워드 이메일

threadId 다름

Easy

SKIP_002

CC 추가 포워드

수신자 추가됨

Easy

SKIP_003

인용 회신 ("네 알겠습니다")

원본 인용 포함

Medium

SKIP_004

같은 내용 다른 말투

패러프레이징

Hard

SKIP_005

경계 케이스 (0.96)

SKIP 경계

Edge

3.2 UPDATE 시나리오

ID

시나리오

특징

난이도

UPDATE_001

예산 변경

금액만 변경

Easy

UPDATE_002

미팅 시간 변경

시간만 변경

Easy

UPDATE_003

프로젝트 범위 확대

부분 변경

Medium

UPDATE_004

여러 필드 동시 변경

복합 변경

Hard

UPDATE_005

경계 케이스 (0.81)

UPDATE 경계

Edge

3.3 CREATE 시나리오

ID

시나리오

특징

난이도

CREATE_001

완전히 새로운 주제

유사 메모리 없음

Easy

CREATE_002

동명이인

같은 이름 다른 사람

Medium

CREATE_003

같은 키워드 다른 맥락

키워드 겹침

Hard

CREATE_004

프로젝트명 충돌

같은 프로젝트명

Hard

3.4 CREATE+LINK 시나리오

ID

시나리오

특징

난이도

LINK_001

Q1 → Q2 연결

분기별 프로젝트

Easy

LINK_002

후속 결정

이전 결정 참조

Medium

LINK_003

경계 케이스 (0.51)

RELATED 경계

Edge

4. 실험 설정

4.1 고정 변수 (Constants)

embedding_model: "text-embedding-3-small"
embedding_dimensions: 1536

4.2 조작 변수 (Variables)

# Thresholds 실험
thresholds:
  default: { duplicate: 0.95, update: 0.80, related: 0.50 }
  loose:   { duplicate: 0.93, update: 0.78, related: 0.48 }
  strict:  { duplicate: 0.97, update: 0.82, related: 0.52 }

# Weights 실험
weights:
  default:        { content: 0.50, people: 0.15, threadId: 0.15, subject: 0.10, entities: 0.10 }
  content_heavy:  { content: 0.60, people: 0.10, threadId: 0.15, subject: 0.08, entities: 0.07 }
  context_heavy:  { content: 0.40, people: 0.20, threadId: 0.20, subject: 0.10, entities: 0.10 }

5. 실험 프로토콜

5.1 실행 단계

1. 설정 선택
   - Dataset 버전 선택
   - Threshold 설정 선택
   - Weight 설정 선택

2. 실험 실행
   - 케이스에 대해:
     a.  메모리 embedding 생성
     b. 기존 메모리와 유사도 계산
     c. Decision Tree 실행
     d. 결과 저장

3. 결과 분석
   - 정확도 계산
   - Confusion Matrix 생성
   - 실패 케이스 분석

4. 리포트 생성

5.2 실험 config 예시

{
  "experiment_id": "exp_001",
  "dataset_version": "v1",
  "config": {
    "thresholds": {
      "duplicate": 0.95,
      "update": 0.80,
      "related": 0.50
    },
    "weights": {
      "content": 0.50,
      "people": 0.15,
      "threadId": 0.15,
      "subject": 0.10,
      "entities": 0.10
    }
  }
}

6. 평가 지표

6.1 1차 지표: 결정 정확도

Overall Accuracy = 정답  / 전체 케이스 

Category별:
- SKIP Precision = TP_skip / (TP_skip + FP_skip)
- SKIP Recall = TP_skip / (TP_skip + FN_skip)
- F1 Score = 2 * (Precision * Recall) / (Precision + Recall)

6.2 2차 지표: 경계 안정성

경계 ±0.02 범위에서의 일관성:
- 0.78, 0.79, 0.80, 0.81, 0.82 에서 결정 분포

6.3 3차 지표: Factor 영향도

Factor를 제외했을 정확도 변화:
- content만 사용 정확도
- threadId 제외 정확도 변화

7. 결과 시각화

7.1 정확도 대시보드

Overall: 85% (68/80)

By Category:
SKIP     ████████████████████████████████  90%
UPDATE   ████████████████████████░░░░░░░░  75%
CREATE   ████████████████████████████░░░░  85%
LINK     ████████████████████████████████  90%

By Difficulty:
Easy     ████████████████████████████████████  95%
Medium   ████████████████████████████████░░░░  90%
Hard     ██████████████████████████░░░░░░░░░░  75%
Edge     ██████████████████████░░░░░░░░░░░░░░  60

7.2 Confusion Matrix

                    Predicted
              SKIP  UPDATE  CREATE  LINK
Actual SKIP    18      1       1      0
       UPDATE   2     15       2      1
       CREATE   0      1      17      2
       LINK     0      2       0     18

7.3 실패 케이스 분석

Case: UPDATE_007
Expected: UPDATE | Actual: CREATE
Score: 0.775 (just below 0.80)

Factors:
- content:  0.82 × 0.50 = 0.41
- people:   0.67 × 0.15 = 0.10
- threadId: 1.00 × 0.15 = 0.15  Same thread
- subject:  0.85 × 0.10 = 0.085
- entities: 0.50 × 0.10 = 0.05
Total: 0.775

Analysis: threadId가 같음에도 UPDATE .
Suggestion: threadId weight 증가 또는 threshold 0.78조정

8. UI 페이지 구조

/dashboard/exp

/dashboard/exp/
├── /                     # 메인 대시보드
├── /datasets             # 데이터셋 관리
├── /runs                 # 실험 실행 목록
└── /[runId]          # 실험 결과 상세
├── /compare              # 실험 비교
└── /playground           # 단일 케이스 테스트

페이지별 기능

페이지

기능

메인

최근 실험 현황, Quick Actions

Datasets

데이터셋 버전 관리, 케이스 조회

Runs

실험 실행, 설정 조절

결과 상세

정확도, Confusion Matrix, 실패 분석

Compare

설정 변경 효과 비교

Playground

단일 케이스 즉석 테스트

9. 다음 단계

Phase 1: 데이터셋 생성

  • v1 데이터셋 80개 케이스 작성

  • 각 케이스 embedding 생성

Phase 2: 실험 인프라

  • 실험 러너 스크립트

  • 결과 저장/분석 로직

Phase 3: UI 구현

  • /exp 메인 대시보드

  • Playground 페이지

Phase 4: 반복 실험

  • Baseline 실험 실행

  • Threshold/Weight 튜닝

  • 최적 설정 도출

참고