1 정의
\(k\) 요인 각 2 수준 (low, high). 총 \(2^k\) 셀, 각 셀에 \(n\) 회 반복.
±1 코딩: low = \(-1\), high = \(+1\).
효과 수: \(2^k - 1\) (주효과 \(k\), 이원 상호작용 \(\binom{k}{2}\), …, 최고차 상호작용 1).
코딩 변수: \[ x_i = \frac{X_i - (\text{high} + \text{low})/2}{(\text{high} - \text{low})/2} \]
\(x_i \in \{-1, +1\}\).
2 ±1 코딩의 통계적 직관
±1 코딩의 이점: 1. 회귀 계수 = 효과의 1/2: $_A = $ A 의 효과 / 2. 2. 직교성: 임의의 두 column 직교 (Hadamard). 3. 분산 최소: 같은 \(N\) 측정에서 \(\hat\beta\) 분산 최소.
이는 G-MON9 (weighing) 의 Hadamard matrix 와 정확히 같은 원리. 정통 DOE 의 정보 효율 원칙.
3 ±1 코딩 표 — \(2^3\)
3 요인 (\(A, B, C\)) 의 8 cells:
| Run | A | B | C |
|---|---|---|---|
| 1 | -1 | -1 | -1 |
| 2 | +1 | -1 | -1 |
| 3 | -1 | +1 | -1 |
| 4 | +1 | +1 | -1 |
| 5 | -1 | -1 | +1 |
| 6 | +1 | -1 | +1 |
| 7 | -1 | +1 | +1 |
| 8 | +1 | +1 | +1 |
상호작용 컬럼은 곱: - \(AB = A \cdot B\) - \(AC = A \cdot C\) - \(BC = B \cdot C\) - \(ABC = A \cdot B \cdot C\)
4 효과 추정 (Yates 의 정리)
각 효과의 추정량: \[ \hat{\text{Effect}} = \frac{\sum_{\text{high}} \bar Y - \sum_{\text{low}} \bar Y}{2^{k-1}} \]
자세히는 contrast vector 와 cell 평균의 내적.
5 SS 계산
\[ SS_{\text{effect}} = \frac{n (\hat\psi)^2}{2^k} \]
자유도 1. \(F = SS_{\text{effect}} / MS_E\).
6 \(2^4 = 16\) 까지의 효과 수
| \(k\) | 셀 | 효과 수 | 주효과 | 이원 | 삼원 | 사원 |
|---|---|---|---|---|---|---|
| 2 | 4 | 3 | 2 | 1 | — | — |
| 3 | 8 | 7 | 3 | 3 | 1 | — |
| 4 | 16 | 15 | 4 | 6 | 4 | 1 |
| 5 | 32 | 31 | 5 | 10 | 10 | 5+1 |
\(2^5 = 32\) 실행은 산업 실험에서 매우 비싸다. 동시에 31 개 효과를 모두 검정하면 다중 비교 부담도 큼. 실무는 4 또는 5 차 상호작용은 0 가정 → fractional factorial 로 절반 또는 1/4 만 실행 (G-MON3-6).
7 가설 데이터 — \(2^3\)
3 요인 (온도 A, 압력 B, 시간 C), 각 2 수준, 각 셀 \(n=4\). 응답 = 수율.
가상 셀 평균:
| Cell | A | B | C | \(\bar Y\) |
|---|---|---|---|---|
| 1 | - | - | - | 50 |
| 2 | + | - | - | 65 |
| 3 | - | + | - | 55 |
| 4 | + | + | - | 75 |
| 5 | - | - | + | 60 |
| 6 | + | - | + | 70 |
| 7 | - | + | + | 65 |
| 8 | + | + | + | 80 |
7.1 효과 (Yates)
- \(\hat A = (65 + 75 + 70 + 80) / 4 - (50 + 55 + 60 + 65) / 4 = 72.5 - 57.5 = 15\)
- \(\hat B = (55 + 75 + 65 + 80) / 4 - (50 + 65 + 60 + 70) / 4 = 68.75 - 61.25 = 7.5\)
- \(\hat C = (60 + 70 + 65 + 80) / 4 - (50 + 65 + 55 + 75) / 4 = 68.75 - 61.25 = 7.5\)
- \(\hat{AB}\): ((50+75+60+80) - (65+55+70+65))/4 = (265-255)/4 = 2.5
- \(\hat{AC}\): 비슷하게 작음
- \(\hat{BC}\): 비슷하게 작음
- \(\hat{ABC}\): 매우 작음
해석: - \(A\) 효과가 가장 큼 (15). - \(B, C\) 중간 (각 7.5). - 상호작용 모두 작음 → 가산 모형.
각 효과의 SS = \(n \times \hat{\text{eff}}^2 / 4 = 4 \times \hat{\text{eff}}^2 / 4 = \hat{\text{eff}}^2\) (간단화).
(공식 정확 적용 필요.)
8 Python 코드
import numpy as np
import pandas as pd
import statsmodels.api as sm
from statsmodels.formula.api import ols
from itertools import product
np.random.seed(2026)
k = 3
n = 4
factors = ["A", "B", "C"]
cell_means = {
(-1,-1,-1): 50, ( 1,-1,-1): 65, (-1, 1,-1): 55, ( 1, 1,-1): 75,
(-1,-1, 1): 60, ( 1,-1, 1): 70, (-1, 1, 1): 65, ( 1, 1, 1): 80,
}
records = []
for cell, mu in cell_means.items():
for _ in range(n):
rec = {f: cell[i] for i, f in enumerate(factors)}
rec["Y"] = np.random.normal(mu, 3)
records.append(rec)
data = pd.DataFrame(records)
# Full factorial ANOVA
model = ols("Y ~ A * B * C", data=data).fit()
anova = sm.stats.anova_lm(model, typ=2)
print("=== 2^3 ANOVA ===")
print(anova.round(3))
# Effect estimates
print("\n=== Effects (Yates) ===")
for col in ["A", "B", "C", "A:B", "A:C", "B:C", "A:B:C"]:
if col in model.params.index:
# 회귀 계수 × 2 (±1 코딩에서 차이는 effect 의 1/2)
print(f" {col}: {2 * model.params[col]:+.2f}")
# Pareto chart of effects
import matplotlib.pyplot as plt
effects = {col: 2 * model.params[col] for col in ["A", "B", "C", "A:B", "A:C", "B:C", "A:B:C"]
if col in model.params.index}
sorted_effects = sorted(effects.items(), key=lambda x: abs(x[1]), reverse=True)
plt.figure(figsize=(8, 4))
plt.barh([k for k, v in sorted_effects], [abs(v) for k, v in sorted_effects])
plt.xlabel("|Effect|")
plt.title("Pareto chart of effects")
plt.tight_layout()9 Pareto Chart 의 사용
A ███████████████████████ 15
B ███████████████ 7.5
C ███████████████ 7.5
AB ████ 2.5
AC ██ 1.0
BC ██ 1.0
ABC █ 0.5
큰 효과가 위쪽. Pareto principle: 큰 효과 몇 개가 대부분의 변동 설명.
10 Fractional Factorial 의 미리보기
\(2^{k-p}\) fraction: - \(p = 1\): 절반 fraction. 효과 수 \(2^{k-1} - 1\). - \(p = 2\): 1/4 fraction. - …
각 효과가 다른 효과와 alias 됨 (별도 추정 불가능). Resolution 결정 (G-MON3-6).
11 가정과 한계
- 양적 요인의 비선형성 못 잡음: 2 수준이라 선형만 추정. 3+ 수준 필요 시 \(3^k\) 또는 response surface (G-MON7).
- 효과 수 폭증: 큰 \(k\) 에 fractional.
- 셀 등표본 가정: 비균등은 회귀 일반.
- 잡음 등분산: ANOVA 표준.
12 ML 매핑
ML 의 \(2^k\) factorial sweep:
A = optimizer (Adam vs SGD)
B = learning rate (1e-4 vs 1e-3)
C = batch size (32 vs 128)
D = dropout (0 vs 0.5)
E = weight decay (0 vs 0.01)
2^5 = 32 runs. 각 run 의 validation accuracy.
분석: 1. 모든 31 효과 추정. 2. Pareto chart 로 큰 효과 식별. 3. 작은 효과는 무시 (sparsity 가정). 4. 큰 효과의 hyperparameter 만 다음 grid 에서 fine-tune.
이는 ML 의 hyperparameter screening 의 통계적 표준. random search 보다 정보 효율 ↑.
13 본 시리즈
G-MON3-0 Factorial 개관
G-MON3-1 2^k Factorial ← 현재 글
G-MON3-2 Finite Fields + Grouping
G-MON3-3 Confounding
G-MON3-4 3^k Factorial
G-MON3-5 General Construction
G-MON3-6 Fractional Factorial
14 관련 주제
선행 지식
후속 주제
다른 카테고리 연결
15 더 읽을 거리
- Yates, F. (1937). “The Design and Analysis of Factorial Experiments.” Imperial Bureau of Soil Science — Yates 알고리즘 원조.
- Box, G. E. P., Hunter, J. S., Hunter, W. G. (2005). “Statistics for Experimenters.” Wiley.
- Montgomery, D. C. (2017). “Design and Analysis of Experiments” (9th ed). Wiley.
- Wu, C. F. J., Hamada, M. S. (2009). “Experiments: Planning, Analysis, and Optimization” (2nd ed). Wiley.