실험 설계
23.4장에서 연구 질문과 가설, 성공 기준을 정했다. 이제 그 가설을 시험할 실험을 고른다. 여기서 흔히 생기는 일은 "제안 방법을 돌리고, baseline을 돌리고, 표를 만든다"로 끝나는 것이다. 그렇게 만든 표는 결과가 좋으면 무엇이 좋게 만들었는지 말하지 못하고, 결과가 나빠도 가설이 틀렸는지 실험이 약했는지 구별하지 못한다. 두 방법이 서로 다른 데이터 판, 다른 탐색 예산, 다른 학습 recipe로 돌았다면 표의 차이는 방법의 차이가 아니다.
이 장은 가설을 반증할 수 있는 실험을 설계하는 방법을 다룬다. 대조군과 통제 변수, 실험의 종류(주 비교·ablation·민감도·강건성·스케일링), 비교의 공정성, 효과의 분리, 편향 통제, 그리고 이 모든 결정을 실행 전에 문서로 남기는 실험 계획서다. 비교 결과의 통계(seed·분할 변동, 짝지은 비교)는 12.5장에서, 분할과 누수는 15.4장에서 다루었으므로 여기서는 그 도구들을 설계 단계에서 쓰는 법에 집중한다. 어떤 시뮬레이션이나 실험 조건을 다음에 고를지 순차적으로 정하는 능동적 실험 설계는 25.3장에서 다룬다.
학습 목표
- 가설을 반증할 수 있는 실험을 설계한다
- 공정한 비교 조건을 만든다
- ablation과 민감도 분석을 설계한다
반증 가능한 실험
왜 필요한가. 실험은 가설이 틀렸을 때 그것을 드러낼 수 있어야 의미가 있다. 어떤 결과가 나와도 "가설과 맞다"고 해석할 수 있는 실험은 아무것도 시험하지 않는다. 23.4장의 질문 문서에 쓴 반증 조건("셀 단위 분할에서 개선의 상한이 보다 작으면 가설 B를 버린다")이 실제로 나올 수 있는 실험이어야 한다.
대조군. 효과를 재려면 비교 대상이 필요하다. 대조군(control)은 시험하려는 요인 하나만 빠진 조건이다. "제안 방법"의 대조군은 "아무 방법"이 아니라, 제안 방법에서 가설이 말하는 요인만 뺀 것이다. 에너지 보존 제약 항이 외삽을 개선한다는 가설이라면, 대조군은 같은 구조·같은 데이터·같은 학습 예산에서 그 항만 뺀 모델이다. 분야의 표준 baseline과의 비교는 별도로 필요하지만, 그것은 가설의 대조군이 아니다.
통제 변수. 대조군과 처리군(제안 방법) 사이에서 시험하려는 요인 외에는 모든 것이 같아야 한다. 같게 유지해야 하는 것을 통제 변수(controlled variable)라 한다. ML 실험에서 자주 놓치는 통제 변수는 다음과 같다.
- 데이터 판, 분할, 전처리, 평가 코드
- 학습 예산(단계 수, epoch, 조기 종료 기준)과 하이퍼파라미터 탐색 예산
- seed와 분할의 조합(짝지은 비교를 위해 두 방법이 같은 분할·seed를 공유)
- 소프트웨어 환경과 하드웨어(특히 수치 정밀도, 22.2장)
다른 논문의 표에서 baseline 숫자를 가져와 내 결과와 비교하면 이 목록의 거의 모든 항목이 통제되지 않는다. 가능하면 baseline을 같은 조건에서 직접 돌린다.
검정력: 효과가 있다면 볼 수 있는가. 반증할 수 있다는 것은 양쪽으로 성립해야 한다. 가설이 틀렸다면 실험이 그것을 보여야 하고, 가설이 맞다면 실험이 그것을 볼 수 있어야 한다. 효과가 있는데도 실험이 작아서 대부분 "유의하지 않음"이 나온다면, 그 실험의 부정적 결과는 가설을 반증하지 못한다(23.4장의 "보류"). 실험이 크기 의 효과를 검출할 확률을 검정력(power)이라 하고, 12.4장에서 정의와 정규 근사 공식을 다루었다. 짝지은 비교에서 필요한 실행 수는 대략
이다. 는 짝지은 차이의 표준편차, 는 원하는 검정력이다. 행동과학에서 이 계산을 표준화한 고전적인 참고서가 Cohen(1988)이다.
블록화. 를 줄이는 가장 강력한 설계 도구가 블록화(blocking)다. 결과에 영향을 주지만 관심 대상은 아닌 변동(어떤 분할, 어떤 데이터셋, 어떤 날의 장비 상태)을 블록으로 묶고, 블록마다 두 방법을 모두 실행해 블록 안에서 비교한다. ML 실험에서는 "같은 분할·같은 seed에서 두 방법을 모두 돌리고 차이를 낸다"가 블록화다(12.5장의 짝지은 비교). 두 방법의 점수가 같은 분할에서 상관 로 함께 흔들리면, 짝지은 차이의 표준편차는 실행 간 표준편차 의 배가 된다.
실행 간 표준편차 0.02, 같은 분할에서 두 방법 점수의 상관 0.8일 때, 0.01의 개선을 검출할 검정력을 계산한다. 짝지은 검정의 검정력은 비중심 분포(noncentral t distribution)로 정확히 계산할 수 있다.
import numpy as np
from scipy import stats
delta = 0.01 # 검출하고 싶은 최소 개선 (정확도)
sd_run, rho = 0.02, 0.8 # 실행 간 표준편차, 같은 분할에서 두 방법 점수의 상관
def power(n, paired):
if paired: # 같은 분할·seed에서 짝지은 차이: sd = sd_run * sqrt(2(1 - rho))
sd_d, df = sd_run * np.sqrt(2 * (1 - rho)), n - 1
nc = delta / (sd_d / np.sqrt(n))
else: # 방법마다 따로 n번: 차이의 표준오차 = sd_run * sqrt(2/n)
df, nc = 2 * n - 2, delta / (sd_run * np.sqrt(2 / n))
t = stats.t.ppf(0.975, df)
return stats.nct.sf(t, df, nc) + stats.nct.cdf(-t, df, nc) # 양측 검정의 검정력
for n in (5, 10, 20, 40, 70):
print(f"실행 {n:>2}개/방법 짝짓지 않음 {power(n, False):.2f} 짝지음 {power(n, True):.2f}")
rng = np.random.default_rng(0) # 시뮬레이션으로 확인: n = 10, 짝지음
split = rng.normal(0, sd_run * np.sqrt(rho), size=(20000, 10)) # 분할(블록) 효과
a = split + rng.normal(0, sd_run * np.sqrt(1 - rho), size=(20000, 10))
b = split + delta + rng.normal(0, sd_run * np.sqrt(1 - rho), size=(20000, 10))
print(f"시뮬레이션 (n = 10, 짝지음): {np.mean(stats.ttest_rel(b, a, axis=1).pvalue < 0.05):.2f}")실행 5개/방법 짝짓지 않음 0.11 짝지음 0.28 실행 10개/방법 짝짓지 않음 0.19 짝지음 0.61 실행 20개/방법 짝짓지 않음 0.34 짝지음 0.92 실행 40개/방법 짝짓지 않음 0.60 짝지음 1.00 실행 70개/방법 짝짓지 않음 0.84 짝지음 1.00 시뮬레이션 (n = 10, 짝지음): 0.61
같은 실행 수에서 짝지은 설계의 검정력이 훨씬 높다. 검정력 80%에 짝지은 설계는 20개 안쪽이면 되지만, 짝짓지 않은 설계는 방법당 60개가 넘게 필요하다. 시뮬레이션(0.61)이 계산과 맞는다. 흔히 쓰는 seed 3–5개로는 짝지어도 이 크기의 개선을 네 번 중 한 번 남짓 검출한다. 이런 실험에서 "유의한 차이 없음"은 아무것도 반증하지 못한다.
실험의 종류
왜 여러 종류가 필요한가. 표 하나로는 가설의 한 면만 시험한다. 주 비교가 "더 좋은가"에 답한다면, "왜 좋은가", "얼마나 믿을 만한가", "어디까지 통하는가"는 다른 실험이 답한다. 논문의 주장 하나하나가 어느 실험에 기대는지는 23.2장의 주장–근거 표와 같다. 실험 계획서에는 주장마다 그것을 뒷받침할 실험의 종류를 미리 적는다.
| 종류 | 답하는 질문 | 바꾸는 것 | 흔한 실수 |
|---|---|---|---|
| 주 비교 | 제안 방법이 baseline보다 나은가 | 방법 | baseline을 다른 조건에서 돌리거나 덜 튜닝함 |
| ablation | 어느 구성요소가 효과를 내는가 | 구성요소를 하나씩(또는 조합으로) 제거 | 구성요소를 뺀 뒤 다시 튜닝하지 않음, 교호작용 무시 |
| 민감도 분석 | 결과가 설정에 얼마나 기대는가 | 하이퍼파라미터·설계 선택을 넓은 범위에서 | 제안 방법만 분석하고 baseline은 고정 |
| 강건성 | 조건이 바뀌어도 유지되는가 | 분포 이동, 잡음, 결측, 다른 데이터셋 | 학습 범위 안의 조건만 시험 |
| 스케일링 | 데이터·모델·계산이 커지면 어떻게 되는가 | 크기를 여러 단계로 | 두 점만 보고 경향을 주장 |
ablation. ablation은 제안 방법에서 구성요소를 제거해 그 기여를 재는 실험이다. 구성요소가 서로 독립적으로 작용한다면 하나씩 빼는 것으로 충분하지만, 하나의 효과가 다른 것에 기대는 경우(교호작용)가 흔하다. 23.3장에서 불일치를 분리할 때 쓴 요인 설계가 여기서도 쓰인다. 구성요소를 뺄 때 남은 모델의 하이퍼파라미터를 다시 튜닝할지도 정해야 한다. 튜닝하지 않으면 "그 구성요소에 맞춘 설정"을 빼앗긴 모델과 비교하는 셈이다.
민감도 분석. 핵심 하이퍼파라미터를 넓은 범위에서 바꾸며 제안 방법과 baseline의 성능을 함께 그린다. 개선이 넓은 범위에서 유지되면 결과가 특정 설정에 기대지 않는다는 근거가 되고, 새 데이터에서 다시 튜닝할 필요가 적다는 단서도 된다. 개선이 좁은 범위에서만 나타나면, 그 범위를 찾은 탐색 비용까지 방법의 비용으로 보고해야 한다. 민감도 분석은 방법이 왜 작동하는지는 보여 주지 않는다. 그것은 ablation과 통제된 분석 실험의 몫이다.
공정성
왜 공정성인가. 두 방법의 차이는 방법의 차이와 조건의 차이의 합이다. 조건의 차이가 제안 방법 쪽으로 기울어 있으면, 방법이 같아도 제안 방법이 이긴다. 이 기울기는 대개 의도 없이 생긴다. 연구자는 자기 방법에 더 많은 시간을 쓰고, 더 많은 설정을 시도하고, 버그를 더 열심히 고치기 때문이다.
맞춰야 할 네 가지.
- 파라미터 수: 모델이 크면 표현력이 크다. 구조의 효과를 주장한다면 비슷한 파라미터 수에서 비교하거나, 파라미터 수를 바꿔 가며 두 방법의 곡선을 비교한다.
- 계산량: 학습·추론 FLOPs, GPU 시간. 같은 파라미터 수라도 계산량이 열 배 다를 수 있다. 시스템 기여라면 계산량이 주 지표다.
- 데이터: 같은 학습 데이터. 사전학습 데이터나 추가 데이터를 쓴 방법은 따로 표시한다. 사전학습 데이터와 test 데이터의 중복도 확인한다(15.4장).
- 탐색 예산: 하이퍼파라미터 탐색의 시도 횟수, 탐색 범위, 탐색 절차. 가장 자주 무너지는 조건이다.
탐색 예산이 만드는 차이. 탐색 예산만 다르고 방법은 똑같은 두 경우를 시뮬레이션한다. 설정마다 참 성능이 다르고(표준편차 0.02), validation 점수에는 잡음(0.01)이 섞여 있다. 각 방법은 예산만큼 설정을 시도해 validation 점수가 가장 높은 설정을 고르고, 그 설정의 test 점수를 보고한다.
def tuned_test_score(budget, rng):
quality = rng.normal(0.80, 0.02, size=budget) # 설정마다 다른 참 성능, (budget,)
val = quality + rng.normal(0, 0.01, size=budget) # validation 점수 (잡음 포함)
best = np.argmax(val)
return quality[best] + rng.normal(0, 0.01) # 고른 설정의 test 점수
rng = np.random.default_rng(1)
for b_base, b_prop in [(5, 5), (5, 50), (50, 50)]:
gap = [tuned_test_score(b_prop, rng) - tuned_test_score(b_base, rng) for _ in range(4000)]
print(f"탐색 예산 baseline {b_base:>2}회, 제안 {b_prop:>2}회 → 평균 test 차이 {np.mean(gap):+.4f} (두 방법은 동일)")탐색 예산 baseline 5회, 제안 5회 → 평균 test 차이 +0.0002 (두 방법은 동일) 탐색 예산 baseline 5회, 제안 50회 → 평균 test 차이 +0.0194 (두 방법은 동일) 탐색 예산 baseline 50회, 제안 50회 → 평균 test 차이 +0.0002 (두 방법은 동일)
예산이 같으면 차이는 0이다. 제안 방법에만 열 배의 예산을 주면, 같은 방법이 test에서 평균 0.019 앞선다. 이 크기는 많은 논문이 보고하는 개선과 비슷하다. 언어 모델 분야에서는 표준 LSTM을 대규모 하이퍼파라미터 탐색으로 다시 튜닝하자 더 최근에 제안된 구조들보다 좋은 결과가 나왔다는 보고가 있다(Melis et al., 2018). 공정한 비교의 기본은 같은 탐색 절차와 같은 예산이다. 예산을 보고하고, 가능하면 예산에 따른 성능 곡선(시도 횟수 대 최고 validation 점수)을 두 방법에 대해 함께 보인다.
효과의 분리
왜 분리하는가. 새 방법을 만들 때는 대개 여러 가지를 한꺼번에 바꾼다. 새 구조를 제안하면서 학습률 스케줄을 바꾸고, 학습을 더 길게 하고, 데이터 증강을 더한다. 이 묶음 전체가 baseline보다 좋으면, 그 개선을 "새 구조" 덕으로 보고하기 쉽다. 그러나 개선의 대부분이 학습 recipe에서 왔다면, 기여는 구조가 아니라 recipe이고, 옛 구조에 새 recipe만 적용해도 같은 개선을 얻을 수 있다.
요인 설계. 바꾼 것들을 요인으로 두고, 요인 개의 끄고 켠 조합 개를 모두 실행한다. 각 요인의 주효과는 그 요인이 켜진 조합들의 평균에서 꺼진 조합들의 평균을 뺀 값이고, 두 요인의 교호작용은 한 요인을 켰을 때 다른 요인의 효과가 달라지는 정도의 절반이다. 부호 로 쓰면
모든 조합을 쓰므로 각 효과는 실행 전체를 사용해 추정되고, 하나씩 바꾸는 설계(one-factor-at-a-time)보다 같은 실행 수로 더 정밀하며 교호작용도 추정할 수 있다. 요인 설계의 체계적인 설명은 Box, Hunter, Hunter(2005)에 있다.
구조·학습 recipe·데이터 증강 세 요인의 가상 실험으로 계산한다. 가상의 참 효과는 구조 +0.002, recipe +0.020, 증강 +0.006이고, 새 구조는 새 recipe와 함께일 때 +0.010을 더 얻는다(교호작용). 조합마다 seed 3개를 평균한다.
import itertools
levels = np.array(list(itertools.product([0, 1], repeat=3))) # (8, 3): 구조, recipe, 증강
def run(arch, recipe, aug, rng): # 가상의 실험 결과 (정확도)
return (0.80 + 0.002 * arch + 0.020 * recipe + 0.006 * aug
+ 0.010 * arch * recipe + rng.normal(0, 0.004))
rng = np.random.default_rng(2)
reps = 3 # 조합마다 seed 3개
y = np.array([[run(*lv, rng) for _ in range(reps)] for lv in levels]).mean(1) # (8,)
S = 2 * levels - 1 # -1/+1 부호, (8, 3)
for j, name in enumerate(["구조", "recipe", "증강"]):
print(f"{name:<6} 주효과 {y @ S[:, j] / 4:+.4f}")
print(f"구조×recipe 교호작용 {y @ (S[:, 0] * S[:, 1]) / 4:+.4f}")
new, old = y[(levels == [1, 1, 0]).all(1)][0], y[(levels == [0, 0, 0]).all(1)][0]
print(f"'새 구조 + 새 recipe' vs '옛 구조 + 옛 recipe': {new - old:+.4f} ← 전부 구조 덕으로 보고하기 쉽다")
print(f"옛 recipe에서 구조만 바꾼 효과: {y[(levels == [1, 0, 0]).all(1)][0] - old:+.4f}")구조 주효과 +0.0069 recipe 주효과 +0.0260 증강 주효과 +0.0067 구조×recipe 교호작용 +0.0052 '새 구조 + 새 recipe' vs '옛 구조 + 옛 recipe': +0.0331 ← 전부 구조 덕으로 보고하기 쉽다 옛 recipe에서 구조만 바꾼 효과: +0.0021
묶음 전체의 개선은 0.033이지만, recipe의 주효과가 0.026으로 가장 크다. 옛 recipe에서 구조만 바꾸면 개선은 0.002에 그친다. 구조의 효과는 새 recipe와 함께일 때만 나타나고(교호작용 +0.005), 이것은 "새 구조는 이 recipe에서 학습될 때 효과가 있다"는 조건부 주장으로 보고해야 한다. 주효과의 정의( 부호의 평균 차이)에 따르면 0/1 부호로 쓴 교호작용 계수 0.010은 교호작용 효과 0.005에 해당하고, 추정값 0.0052가 이와 맞는다.
가 크면 개가 부담스럽다. 그때는 영향이 클 것으로 추정되는 요인만 요인 설계에 넣고, 나머지는 하나씩 확인하거나, 일부 조합만 실행하는 부분 요인 설계(fractional factorial design)를 쓴다. 부분 요인 설계는 어떤 교호작용을 포기하는지 알고 써야 한다.
편향 통제
왜 따로 다루는가. 공정성이 "두 방법에 같은 조건을 주는 것"이라면, 편향 통제는 "연구자의 선택이 결과 쪽으로 기울지 않게 하는 것"이다. 실험에는 수많은 선택이 있다. 어떤 데이터셋을 쓸지, 어떤 모델을 baseline으로 둘지, 어떤 설정을 보고할지. 결과를 보면서 이 선택을 하면, 선택마다 조금씩 유리한 쪽으로 기울고, 그 누적이 결과가 된다(12.4장의 갈림길의 정원).
선택 편향의 세 갈래.
- 데이터 선택: 제안 방법이 잘 되는 데이터셋만 보고하는 것. 사용할 데이터셋과 그 선정 기준을 실험 전에 정하고, 시도한 모든 데이터셋의 결과를 보고한다.
- 모델 선택: 약한 baseline만 고르는 것. 분야의 표준 방법, 잘 튜닝한 단순 모델, 최신의 강한 방법을 포함하고 선정 이유를 쓴다.
- 설정 선택: 여러 seed·설정 중 좋은 것만 보고하는 것. 시도한 모든 실행을 기록하고, 보고하는 숫자가 어떤 규칙으로 고른 것인지 쓴다(22.1장의 실험 추적).
leakage audit. 실험 전에 누수 감사 체크리스트(15.4장)를 실행한다. 분할 단위의 교집합이 비어 있는지, 전처리·특징 선택이 학습 데이터에서만 fit되었는지, 사전학습 데이터와 test 데이터가 겹치지 않는지, 입력에 예측 시점에 없는 정보가 없는지(1.3장). 감사 결과를 계획서에 첨부한다.
test set 사용 기록. test set은 모든 선택이 끝난 뒤 한 번 쓴다(15.4장). 실제로는 여러 번 보게 되는 경우가 생긴다. 그때를 위해 test set을 평가할 때마다 날짜, 평가한 모델, 이유, 결과를 기록한다. 기록이 있으면 최종 숫자가 몇 번째 평가인지 보고할 수 있고, 여러 번 봤다면 그 사실을 밝힐 수 있다. 기록이 없으면 그 숫자가 몇 번의 시도 중 가장 좋은 것인지 아무도 모른다.
# test_set_log.md
2026-05-10 모델 v3 (계획서의 최종 설정) 첫 평가, 계획대로 RMSE 0.412
2026-05-14 모델 v3 + 버그 수정(평가 코드) 평가 코드 버그 발견 후 재평가 RMSE 0.437 ← 보고값, 사유 기록
실험 계획서
왜 실행 전에 쓰는가. 23.4장의 질문 문서가 "무엇을 알고 싶은가"라면, 실험 계획서는 "그것을 어떻게 측정하고, 결과를 어떻게 판단할 것인가"다. 실행 전에 써야 하는 이유는 23.4장과 같다. 결과를 본 뒤에는 판단 기준이 결과 쪽으로 움직인다. 계획서는 결과를 보기 전의 자신이 결과를 본 뒤의 자신에게 보내는 약속이다.
계획서에 들어가는 것.
# 실험 계획서: <연구 질문 문서 제목> 작성일, 버전, 커밋
## 가설과 반증 조건 (연구 질문 문서에서)
## 주장–실험 대응
| 주장 | 실험 종류 | 처리군 | 대조군 | 통제 변수 | 주 지표 |
## 데이터와 분할 판, 분할 단위와 방식, 분할 seed, leakage audit 결과
## 비교 대상 baseline 목록과 선정 이유
## 공정성 파라미터 수·계산량·데이터·탐색 예산(시도 횟수, 범위, 절차)
## 반복과 검정력 seed·분할 수, 블록(짝짓기) 방식, 검정력 계산, 독립 단위
## 분석 계획 주 지표, 보조 지표, 판정 규칙(23.4장), 다중 비교 처리
## 결과별 결론 성공 / 작은 개선 / 중단 / 보류 각각의 결론 (실행 전에 작성)
## test set 사용 계획 언제, 몇 번, 기록 위치
## 변경 기록 계획을 바꾼 날짜, 이유, 변경 전후
주 지표는 하나로 정한다. 보조 지표를 함께 보는 것은 좋지만, 판정은 주 지표로 한다. 결과를 본 뒤 주 지표를 바꾸면 여러 지표 중 유리한 것을 고른 셈이다. 사전에 정하지 않은 지표의 결과는 탐색적 결과로 구분해 보고한다.
실습
23.4장에서 쓴 연구 질문 문서의 가설에 대해 실험 계획서를 작성한다.
- 주장–실험 대응표. 논문에서 하고 싶은 주장을 모두 쓰고, 주장마다 실험 종류·처리군·대조군·통제 변수·주 지표를 채운다. 대조군이 가설의 요인 하나만 뺀 조건인지 확인한다.
- 검정력. 예비 실행(같은 설정 seed 3–5개)으로 짝지은 차이의 표준편차를 추정하고, 질문 문서의 를 검정력 80%로 검출하는 데 필요한 seed·분할 수를 계산한다. 감당할 수 없으면 나 설계(블록화, 분할 수)를 다시 본다.
- 효과의 분리. 제안 방법이 baseline과 다른 점을 모두 나열하고, 영향이 클 것으로 추정되는 2–3개로 요인 설계를 짠다. 핵심 하이퍼파라미터 하나를 골라 민감도 분석의 범위(예: 학습률을 기본값의 1/10–10배, 로그 간격 5점)를 정하고, 제안 방법과 baseline을 같은 범위에서 돌리도록 적는다.
- 결과별 결론. 네 판정(성공·작은 개선·중단·보류) 각각에 대해 결론과 다음 단계를 실행 전에 쓴다.
- 리뷰. 동료에게 계획서를 보여 주고 "이 설계에서 제안 방법에 유리한 조건이 있는가", "어떤 결과가 나오면 가설이 틀렸다고 판단하는가"를 묻는다. 지적받은 점과 반영 여부를 변경 기록에 쓴다.
요인 설계의 주효과와 교호작용을 계산하는 함수를 직접 구현한다.
실패 사례
- 결과를 본 뒤 평가 방식을 바꾸는 것. 주 지표, 분할, test set, 집계 방식(평균·중앙값, 샘플·그룹 단위)을 결과에 맞춰 바꾸면 판정이 무의미해진다. 바꿔야 한다면 계획서의 변경 기록에 이유와 시점을 쓰고, 원래 방식의 결과도 함께 보고한다.
- 제안 방법에만 유리한 조건. 제안 방법만 더 많이 탐색하고, 더 오래 학습하고, 새 데이터 판을 쓰는 것. 이 장의 시뮬레이션에서 탐색 예산만 열 배 다르게 줘도 같은 방법이 0.019 앞섰다. 네 가지(파라미터 수·계산량·데이터·탐색 예산)를 맞추고 보고한다.
- 여러 변경을 묶어 하나의 효과로 보고하는 것. 구조와 recipe를 함께 바꾸고 개선을 구조 덕으로 돌리면, 이 장의 예처럼 개선의 대부분이 recipe에서 왔을 수 있다. 요인 설계로 분리한다.
- 검정력이 낮은 실험의 부정적 결과로 가설을 버리는 것. seed 3개로 "유의한 차이 없음"을 얻었다면 그것은 보류다. 필요한 실행 수를 미리 계산한다.
- 다른 논문의 숫자를 baseline으로 옮겨 오는 것. 데이터 판, 분할, 예산, 환경이 통제되지 않는다. 같은 조건에서 직접 돌린다.
통과 기준
- 자신의 가설에 대한 실험 계획서를 작성한다. 계획서에는 주장–실험 대응표, 검정력 계산과 그 근거가 된 예비 실행, 공정성 네 항목, 요인 설계(또는 하나씩 바꾸기를 택한 이유), 두 방법에 같은 범위를 쓰는 민감도 분석 계획, 네 판정 각각의 결론이 실행 전 날짜와 함께 들어 있다.
- 동료 리뷰에서 "제안 방법에 유리한 조건"과 "반증 조건"에 대한 지적을 받고, 반영 여부를 변경 기록에 남긴다.
- 연습문제
factorial-effects의 테스트를 통과한다.
참고 문헌
- Box, Hunter, Hunter (2005). Statistics for Experimenters: Design, Innovation, and Discovery (2nd ed.). Wiley. — 블록화, 요인 설계와 부분 요인 설계
- Cohen (1988). Statistical Power Analysis for the Behavioral Sciences (2nd ed.). Lawrence Erlbaum Associates. — 효과 크기와 검정력 분석
- Hurlbert (1984). Pseudoreplication and the design of ecological field experiments. Ecological Monographs, 54(2), 187–211. — 독립 반복이 아닌 측정을 반복으로 다루는 오류
- Melis, Dyer, Blunsom (2018). On the state of the art of evaluation in neural language models. International Conference on Learning Representations (ICLR). — 탐색 예산을 맞춘 재비교