\(2^k\) Factorial 실험 — 2 수준 요인 설계의 정수

Montgomery Ch.3.1-3.3 Characterization · Factorial · Two-level

\(2^k\) factorial 의 정의, ±1 코딩, 효과의 estimation (Yates 알고리즘), ANOVA 분해를 정리한다. \(k\) 가 커질수록 효과 수가 폭증 (\(2^k - 1\)) 하므로 산업 실험에서 정수형 설계 도구. ML hyperparameter screening 의 직접 응용도 다룬다.

Experimentation
DOE
저자

Kwangmin Kim

공개

2026년 05월 08일

1 정의

정의: \(2^k\) Factorial Design

\(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. 회귀 계수 = 효과의 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
직관: \(k = 5\) 부터 fractional 필요

\(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 hyperparameter screening

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.

Subscribe

Enjoy this blog? Get notified of new posts by email: