# CHO-FAM 4주차 · Experiment Design

> **현재 위치:** 1개월차 4주차  
> **핵심 연구질문:** CHO-FAM의 변경이 실제 개선인지 우연·표본 편향·측정 누수인지 구분할 수 있도록, 비교 가능하고 재현 가능한 실험을 어떻게 설계할 것인가?

[전체 커리큘럼](https://cho-fam.com/docs/cho-fam-ai-curriculum.html) · [1개월차 상세](https://cho-fam.com/docs/curriculum/month-01.html) · [3주차](https://cho-fam.com/docs/curriculum/week-03.html) · [4주차 HTML](https://cho-fam.com/docs/curriculum/week-04.html) · [Markdown 원문](https://cho-fam.com/docs/curriculum/week-04.md)

## 학습 결과 · 2026-10-12

대화형 학습의 설계 판단이며 실제 벤치마크 성과와 구분합니다.

- [4주차 학습 리포트](reports/week-04-study-report.html)
- [1개월차 통합 회고](reports/month-01-review.html)
- [개선 제안 목록](reports/week-04-improvements.html)

## 목차

1. [이전 주 연결](#1-이전-주-연결)
2. [이번 주 목표](#2-이번-주-목표)
3. [시간표](#3-시간표--기본-10시간)
4. [교재와 읽을 자료](#4-교재와-읽을-자료)
5. [구현 과제](#5-구현-과제--reproducible-experiment-kit-v01)
6. [실험·평가](#6-실험평가)
7. [주간 산출물](#7-주간-산출물)
8. [완료 기준](#8-완료-기준과-회고-질문)
9. [12개월·48주 탐색](#9-12개월48주-탐색)

## 1. 이전 주 연결

1–3주차의 정규 학습성과는 완료된 선수 지식으로 간주한다. 3주차에서 정한 관찰 단위, 지표 레지스트리, 신뢰구간, 비용·지연 측정 규칙과 measurement harness는 이번 주 실험의 **고정 입력**으로 사용한다.

**운영 원칙:** 앞서 확인한 개념은 4주차의 새로운 구현과 실험에서 계산·판정에 필요한 만큼만 호출한다. 이를 복습·재학습·보충 과제로 편성하지 않으며, 이전 주 미진행분을 시간표·과제·산출물에 이월하지 않는다. 이번 주의 새 학습 대상은 가설 사전등록, 대조군, 무작위화·블록화, 표본·반복, 중단 규칙, 누수 방지와 재현성이다.

## 2. 이번 주 목표

- 변경 전 baseline과 변경 후 candidate를 한 번에 비교하는 **paired experiment**를 설계한다.
- 독립변수·종속변수·통제변수·교란요인을 명시한 `experiment.yaml` 계약을 만든다.
- 평가 케이스를 난이도·작업 유형으로 블록화하고, 순서 효과를 줄이는 결정적 무작위 배정표를 생성한다.
- 실행 전에 가설·효과 방향·성공 기준·중단 규칙을 고정한다.
- frozen holdout을 분석 중 보지 않는 누수 방지 절차와 재현 명령을 만든다.
- CHO-FAM 평가 세트 v1과 Experiment Protocol v0.1을 완성한다.

## 3. 시간표 · 기본 10시간

| 블록 | 시간 | 활동 | 종료 조건 |
|---|---:|---|---|
| A. T1 정독 | 2시간 | T1 Ch.4의 평가 기준, 모델 선택, 평가 파이프라인 절 | 실험 설계 결정 5개를 독서 노트에 기록 |
| B. T5·확장 독서 | 1시간 | T5 Ch.10 §10.2와 S5 Ch.3의 관련 절 | 데이터셋·루브릭·유의성 위험을 각 1개 기록 |
| C. 논문·공식문서 세미나 | 1시간 | NIST 실험설계 절차와 온라인 통제실험 원칙 비교 | CHO-FAM 적용 규칙 4개 도출 |
| D. 프로토콜 구현 | 2시간 30분 | 스키마, 검증기, 배정표 생성기, 실행 manifest | 잘못된 설계가 검증 단계에서 실패 |
| E. 파일럿 실험 | 2시간 | baseline/candidate paired run, 결과 분석 | 동일 seed 재실행 결과와 manifest 일치 |
| F. 평가·연구노트 | 1시간 30분 | 결과 판정, 위협요인, 의사결정, 월말 회고 | 산출물 체크리스트와 월간 리뷰 완료 |

> 시간이 부족해도 이전 주 과제를 끌어오지 않는다. 4주차 범위 안에서 파일럿 케이스 수를 줄이되 프로토콜·검증·기록의 완결성을 유지한다.

## 4. 교재와 읽을 자료

### 4.1 Primary · O’Reilly 주교재

#### T1 · *AI Engineering* — Chapter 4, “Evaluate AI Systems”

- [O’Reilly 도서 및 공개 목차](https://www.oreilly.com/library/view/ai-engineering/9781098166298/)
- **필수 절:** Evaluation Criteria → Domain-Specific Capability, Generation Capability, Instruction-Following Capability, Cost and Latency
- **필수 절:** Model Selection → Model Selection Workflow, Build Versus Buy, Navigate Public Benchmarks
- **필수 절:** Design Your Evaluation Pipeline → Evaluate All Components, Create an Evaluation Guideline, Define Evaluation Methods and Data
- **읽기 질문:** 단일 종합점수 대신 어떤 hard gate와 trade-off를 사전에 고정해야 하는가?

### 4.2 Manning · Agent·LLM 심화 참고

#### T5 · *Build an AI Agent (From Scratch)* — Chapter 10 §10.2

- [O’Reilly에서 읽기 · Manning 도서](https://www.oreilly.com/library/view/build-an-ai/9781633434615/Text/title.html)
- **범위:** §10.2.1 What should we evaluate? · §10.2.2 Creating a dataset · §10.2.3 Analyzing errors · §10.2.4 Designing rubrics and metrics
- **읽기 질문:** task outcome과 trajectory/process를 같은 실험에서 어떻게 분리해 기록할 것인가?

### 4.3 확장 독서 · 주차별 교재 뒤 선택

#### S5 · *Practical Statistics for Data Scientists, 2e* — Chapter 3

- [O’Reilly 도서](https://www.oreilly.com/library/view/practical-statistics-for/9781492072935/)
- **선택 범위:** A/B testing, hypothesis tests, resampling, statistical significance의 관련 절
- **독서 질문:** 작은 파일럿에서 “차이가 없음”과 “증거가 부족함”을 어떻게 구분할 것인가?
- **운영:** 60분을 넘기지 않는다. 시간이 부족하면 T5 심화 참고와 교체하며 구현 시간을 침범하지 않는다.

### 4.4 논문·공식문서 세미나

- [NIST/SEMATECH e-Handbook · Process Improvement / Experimental Design](https://www.itl.nist.gov/div898/handbook/pri/pri.htm): 목표 설정, 변수·수준 선택, 완전 무작위·블록 설계, 분석·확인 절차를 읽는다.
- [Kohavi et al. · Controlled experiments on the web: survey and practical guide (Data Mining and Knowledge Discovery)](https://doi.org/10.1007/s10618-008-0114-1): 대조실험의 신뢰성, 실험 인프라, 함정을 중심으로 읽는다.
- **세미나 질문:** LLM 출력 변동, 케이스 난이도, 실행 순서, 외부 도구 상태 중 무엇을 블록화·고정·관찰해야 하는가?

## 5. 구현 과제 · Reproducible Experiment Kit v0.1

### 5.1 실험 계약

`experiments/week04/experiment.yaml`을 만들고 아래 필드를 검증한다.

```yaml
experiment_id: week04-baseline-vs-candidate
hypothesis: "candidate는 품질 hard gate를 유지하며 task_success를 개선한다"
unit: evaluation_case
arms: [baseline, candidate]
independent_variable: policy_version
dependent_metrics: [task_success, critical_error_rate, latency_p95_ms, cost_per_run]
hard_gates:
  critical_error_rate_max: 0.00
  latency_p95_regression_max_pct: 10
blocks: [task_type, difficulty]
seeds: [104, 208, 416]
stopping_rule: "manifest에 고정한 모든 case × arm × seed 실행 후 종료"
decision_rule: "hard gate 통과 후 paired task_success 개선과 비용 trade-off를 함께 검토"
```

검증기는 필수 필드 누락, baseline/candidate 혼동, 결과를 본 뒤 바뀐 임계치, 중복 case ID, holdout label 노출을 실패 처리한다.

### 5.2 평가 세트 v1

- 3주차에서 정의한 30개 관찰 케이스를 **완료된 입력 자산**으로 받아 `dev 20 / holdout 10`으로 고정한다.
- `task_type × difficulty` 블록별 비율을 기록하고, 케이스 ID·입력 hash·기대 제약·허용 도구만 manifest에 둔다.
- holdout 정답·루브릭 세부값은 실행 전 분석 코드와 분리한다.
- 데이터 변경은 새 버전과 새 hash로만 허용하고 이전 결과를 덮어쓰지 않는다.

### 5.3 실행·분석 도구

- `scripts/validate_experiment.*`: YAML·데이터·hard gate·중단 규칙 정적 검증
- `scripts/make_assignment.*`: seed를 받아 블록 내 arm 순서를 무작위화하고 CSV 생성
- `scripts/run_experiment.*`: arm, case, seed, model/tool version, timestamp, latency, cost를 JSONL로 저장
- `scripts/analyze_experiment.*`: paired delta, bootstrap 95% CI, hard gate, 블록별 오류표 생성
- `tests/experiment_contract.*`: 동일 seed 결정성, 누락 필드 거부, holdout 누수 방지 테스트

### 5.4 재현 명령

```bash
make validate-experiment EXP=experiments/week04/experiment.yaml
make run-experiment EXP=experiments/week04/experiment.yaml
make analyze-experiment EXP=experiments/week04/experiment.yaml
```

## 6. 실험·평가

### 6.1 파일럿 설계

| 항목 | 설계 |
|---|---|
| 비교 | 동일 케이스에 baseline과 candidate를 적용하는 paired comparison |
| 블록 | task type과 difficulty; 블록 안에서 arm 실행 순서를 seed로 무작위화 |
| 반복 | 각 case·arm에 3개 seed; timeout·infra error는 별도 상태로 보존 |
| 주지표 | task success의 paired delta와 bootstrap 95% CI |
| 보호지표 | critical error rate, latency p95, cost per run |
| 누수 방지 | dev로 코드 점검 후 1회 frozen holdout 실행; 결과 확인 뒤 임계치 변경 금지 |
| 중단 | 사전등록된 전체 조합 완료 또는 명시된 안전 중단 사유 발생 |

### 6.2 판정 규칙

1. 데이터 hash, 코드 commit, 환경·모델·도구 버전, seed가 모두 기록되지 않으면 **무효**다.
2. critical error hard gate를 넘으면 평균 품질이 높아도 **채택하지 않는다**.
3. 품질 개선의 95% CI가 0을 포함하면 “개선 입증”이 아니라 **불확실**로 기록한다.
4. 파일럿 표본으로 일반화를 주장하지 않는다. 효과크기·구간·사례별 오류를 함께 보고한다.
5. 결과 확인 뒤 가설·지표·제외 규칙을 바꾸면 새 `experiment_id`로 다시 사전등록한다.

### 6.3 품질 점검

- 재현성: 같은 commit·dataset hash·seed에서 assignment manifest가 byte-identical인가?
- 균형: 블록별 baseline/candidate 실행 수와 순서가 치우치지 않았는가?
- 완전성: 모든 실행이 `success / model_error / tool_error / timeout / invalid` 중 하나로 종결되는가?
- 추적성: 요약표의 각 숫자를 원시 JSONL 행까지 역추적할 수 있는가?
- 해석성: 채택·보류·기각 결정이 사전등록 규칙으로 재계산되는가?

## 7. 주간 산출물

- `docs/research/week-04-experiment-design.md` — 가설, 변수, 교란요인, 설계 선택 근거
- `experiments/week04/experiment.yaml` — 사전등록 실험 계약
- `experiments/week04/dataset-manifest.json` — split, block, hash, version
- `experiments/week04/assignment.csv` — 결정적 무작위 배정표
- `experiments/week04/results/raw/*.jsonl` — 원시 실행 기록
- `experiments/week04/results/summary.csv` — paired delta, CI, 비용·지연·hard gate
- `experiments/week04/experiment-report.md` — 결과, 위협요인, 채택/보류/기각 결정
- `tests/experiment_contract.*` — 계약·재현성·누수 방지 테스트
- `docs/research/month-01-review.md` — 1개월차 질문·측정·실험설계 통합 회고

## 8. 완료 기준과 회고 질문

### 완료 기준

- [ ] 실험 실행 전에 가설, 독립·종속·통제변수, hard gate와 중단 규칙이 고정됐다.
- [ ] 평가 세트 v1의 dev/holdout, block, version, hash가 기록됐다.
- [ ] baseline/candidate가 동일한 케이스·seed 조건으로 실행됐다.
- [ ] 동일 seed의 배정표가 재현되고 잘못된 계약이 자동 거부된다.
- [ ] 모든 요약 수치가 원시 기록으로 추적된다.
- [ ] 결과를 효과크기·95% CI·보호지표·오류 사례와 함께 해석했다.
- [ ] 이전 주 미진행분이나 별도 복습 과제가 포함되지 않았다.

### 회고 질문

1. 가장 큰 교란요인은 무엇이며 설계에서 통제·블록화·관찰 중 무엇으로 처리했는가?
2. 현재 표본이 포착하지 못하는 CHO-FAM 실제 사용 조건은 무엇인가?
3. candidate가 이겼다는 결론을 뒤집을 수 있는 hard gate 또는 실패 사례는 무엇인가?
4. 결과를 보기 전에 써 둔 판정과 결과를 본 뒤 떠오른 해석을 분리했는가?
5. 4개월차 아키텍처 실험에서도 그대로 재사용할 실험 계약은 무엇인가?

## 9. 12개월·48주 탐색

- [전체 12개월 커리큘럼](https://cho-fam.com/docs/cho-fam-ai-curriculum.html)
- [1개월차 월별 계획](https://cho-fam.com/docs/curriculum/month-01.html)
- [1주차 상세](https://cho-fam.com/docs/curriculum/week-01.html) · [2주차 상세](https://cho-fam.com/docs/curriculum/week-02.html) · [3주차 상세](https://cho-fam.com/docs/curriculum/week-03.html) · **4주차 현재**
- [2개월차 월별 계획](https://cho-fam.com/docs/curriculum/month-02.html) — 5–8주차 상세는 해당 주차에 생성
- [3개월차](https://cho-fam.com/docs/curriculum/month-03.html) · [4개월차](https://cho-fam.com/docs/curriculum/month-04.html) · [5개월차](https://cho-fam.com/docs/curriculum/month-05.html) · [6개월차](https://cho-fam.com/docs/curriculum/month-06.html)
- [7개월차](https://cho-fam.com/docs/curriculum/month-07.html) · [8개월차](https://cho-fam.com/docs/curriculum/month-08.html) · [9개월차](https://cho-fam.com/docs/curriculum/month-09.html)
- [10개월차](https://cho-fam.com/docs/curriculum/month-10.html) · [11개월차](https://cho-fam.com/docs/curriculum/month-11.html) · [12개월차](https://cho-fam.com/docs/curriculum/month-12.html)

다음 주차 상세 파일은 미리 만들지 않는다.
