1. 왜 분해가 필요한가 — Non-identifiability 문제¶
작성 중
이 페이지는 현재 작성 중입니다.
ML 모형의 예측을 "이 변수가 얼마나 기여했는가?"로 쪼개는 것은 모형 해석의 기본이다. "이 고객의 부도 확률이 높은 이유는 소득이 낮아서 +0.3, 부채가 많아서 +0.5" 같은 진술을 하려면, 전체 예측을 변수별 기여로 분해해야 한다. 이런 분해에는 크게 두 가지 수학적 프레임워크가 있다:
- SHAP (SHapley Additive exPlanations): 게임이론의 Shapley Value 기반. 각 변수의 한계 기여도(marginal contribution)를 공정하게 분배
- Functional ANOVA (fANOVA): 함수 분해 이론 기반. 전체 함수를 주효과(main effect)와 교호작용(interaction effect)으로 직교 분해
둘 다 "변수별 기여"를 구한다는 점에서 비슷해 보이지만, 묻는 질문 자체가 다르다. 그 차이를 이해하려면, 먼저 "분해"가 왜 어려운지를 알아야 한다. 핵심 문제는 이것이다: 같은 예측을 하는 모형인데도, 분해 방식에 따라 해석이 정반대가 될 수 있다. 이 절에서는 그 문제를 대수식과 구체적인 숫자로 확인한다.
같은 예측, 다른 해석¶
교호작용을 포함하는 모형에서 이 문제가 왜 발생하는지, 대수식으로 원리를 먼저 확인하자. 이 원리를 이해하면, 뒤에 나올 숫자 예시가 "운이 나쁜 특수 케이스"가 아니라 구조적으로 피할 수 없는 문제라는 것을 알게 된다.
GA2M (또는 depth-2 이상의 트리)처럼 교호작용을 포함하는 모형을 생각하자.
이 모형은 "변수별 효과를 분리해서 보여준다"는 점에서 해석 가능한 것처럼 보인다. 그런데 근본적인 문제가 있다: \(f_{12}\)에 담긴 효과 일부를 \(f_1\)이나 \(f_2\)로 옮겨도 예측값은 변하지 않는다.
가장 단순한 곱셈 교호작용 모형으로 확인해보자.
핵심 트릭은 이것이다: 교호작용 항 \(X_1 X_2\)를 \((X_1 - \alpha)(X_2 - \beta)\)로 다시 쓰면, 전개 과정에서 \(\beta X_1\)과 \(\alpha X_2\)가 생기면서 main effect 계수가 변한다. 임의의 상수 \(\alpha, \beta\)에 대해:
전개하면 원래 식과 완전히 동일하다. 그런데 \(\alpha, \beta\)를 어떻게 잡느냐에 따라:
- \(\alpha = 0, \beta = 0\) → main effect 계수는 원래의 \(b, c\)
- \(\alpha = 0, \beta = -b/d\) → \(f_1'\)의 계수가 \(b + d \cdot (-b/d) = b - b = 0\)이 되어, main effect가 아예 소멸한다!
같은 예측을 하는 모형인데, 해석이 완전히 달라진다. 이것이 non-identifiability(비식별성)이다. \(\alpha, \beta\)는 아무 실수나 넣을 수 있으므로, 가능한 분해는 무한히 많다.
Boolean 예시 — 숫자로 확인하기¶
위의 대수식은 "자유 파라미터 \(\alpha, \beta\)에 따라 분해가 무한히 달라진다"는 원리를 보여주었다. 그렇다면 이것이 해석을 실제로 얼마나 뒤흔드는지, 구체적인 함수 하나를 네 가지 방식으로 분해해보면서 확인하자 (Lengerich et al., 2020, Fig.1).
\(X_1, X_2 \in \{0, 1\}\)인 Boolean 함수를 쓰는 이유는 간단하다: 가능한 입력이 4개뿐이라 검산이 쉽고, 교호작용의 효과가 극적으로 드러나기 때문이다. 대상 함수는 XOR(배타적 논리합)다:
대상 함수¶
| \(X_1\) | \(X_2\) | \(Y\) |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
이 4개 출력값은 고정이다. 이제 이 함수를 \(f_0 + f_1(X_1) + f_2(X_2) + f_{12}(X_1, X_2)\)로 분해해볼 건데, 네 가지 서로 다른 분해를 만든 뒤 비교할 것이다. 미리 말하면, 네 분해 모두 예측은 완벽하지만 main effect의 부호가 양이 될 수도, 음이 될 수도, 0이 될 수도 있다 — 같은 함수인데 말이다.
분해 ① — 모든 효과를 교호작용에 몰아넣기¶
가장 직관적인 시도: main effect를 전부 0으로 놓고, 출력 테이블 자체를 그대로 교호작용 \(f_{12}\)로 쓴다.
| \(f_{12}\) | \(X_2=0\) | \(X_2=1\) |
|---|---|---|
| \(X_1=0\) | 0 | 1 |
| \(X_1=1\) | 1 | 0 |
main effect가 전부 0이니까, \(f_{12}\)가 곧 \(Y\)다. 검산할 것도 없이 4개 입력 모두 정확히 맞는다.
이 분해의 해석: "\(X_1\)도 \(X_2\)도 개별 효과는 0. 오직 두 변수의 조합만 중요하다."
①은 가능한 분해 중 가장 단순한 것이다. 그런데 main effect를 0이 아닌 값으로 잡아도 같은 \(Y\)를 만들 수 있을까? 가능하다면, "개별 효과 없음"이라는 해석이 뒤집힌다는 뜻이다.
분해 ② — main effect를 부여한 분해¶
이번에는 "\(X = 1\)이면 위험이 올라간다"는 방향으로 main effect를 직접 설정해본다:
이 값들이 갑자기 튀어나온 것처럼 보일 수 있는데, 원리는 이렇다: \(f_0\)과 main effect(\(f_1, f_2\))를 먼저 원하는 값으로 정한 다음, \(f_{12}\)는 "\(Y\)에서 나머지를 빼고 남은 것"으로 역산한다. \(f_0 + f_1 + f_2 + f_{12} = Y\)만 성립하면 유효한 분해이므로, 앞의 세 값은 자유롭게 정할 수 있다:
| 입력 | \(Y\) | \(f_0 + f_1 + f_2\) | \(f_{12}\) (= \(Y\) - 나머지) |
|---|---|---|---|
| (0, 0) | 0 | \(0.25 + (-0.25) + (-0.25) = -0.25\) | \(0 - (-0.25) = \mathbf{+0.25}\) |
| (0, 1) | 1 | \(0.25 + (-0.25) + 0.25 = 0.25\) | \(1 - 0.25 = \mathbf{+0.75}\) |
| (1, 0) | 1 | \(0.25 + 0.25 + (-0.25) = 0.25\) | \(1 - 0.25 = \mathbf{+0.75}\) |
| (1, 1) | 0 | \(0.25 + 0.25 + 0.25 = 0.75\) | \(0 - 0.75 = \mathbf{-0.75}\) |
\(f_{12}\) 테이블:
| \(f_{12}\) | \(X_2=0\) | \(X_2=1\) |
|---|---|---|
| \(X_1=0\) | +0.25 | +0.75 |
| \(X_1=1\) | +0.75 | -0.75 |
(1, 1)만 유일하게 음수(-0.75)다 — 두 변수가 모두 1일 때만 교호작용이 반대 방향으로 작동하는 AND 패턴이다.
정말로 원래와 같은 \(Y\)를 산출하는지 검산해보자:
| 입력 | \(f_0 + f_1 + f_2 + f_{12}\) | \(Y\) |
|---|---|---|
| (0, 0) | \(0.25 + (-0.25) + (-0.25) + 0.25 = \mathbf{0}\) | 0 ✓ |
| (0, 1) | \(0.25 + (-0.25) + 0.25 + 0.75 = \mathbf{1}\) | 1 ✓ |
| (1, 0) | \(0.25 + 0.25 + (-0.25) + 0.75 = \mathbf{1}\) | 1 ✓ |
| (1, 1) | \(0.25 + 0.25 + 0.25 + (-0.75) = \mathbf{0}\) | 0 ✓ |
4개 입력 모두 정확히 일치한다. ①과 같은 \(Y\)인데, 이번에는 main effect가 있다: "\(X_1 = 1\)이면 위험 증가(+0.25)." ①에서는 "개별 효과 없음"이었으니, 분해만 바꿨을 뿐인데 해석이 달라졌다.
하지만 아직 "정반대"까지는 아니다. 만약 같은 \(Y\)에 대해 main effect의 부호 자체가 뒤집히는 분해를 만들 수 있다면, 문제의 심각성이 훨씬 분명해진다.
분해 ③ — main effect 방향이 반대인 분해¶
②에서는 \(X_1 = 1\)이 위험 증가(+0.25)였다. 이번에는 정반대로, \(X_1 = 1\)이 위험 감소(-0.25)인 분해를 만들어본다. 같은 함수에 대해 부호가 뒤집히는 분해가 존재한다면, "이 변수가 위험을 높이는지 낮추는지"조차 분해 방식에 따라 달라진다는 뜻이다:
②와 같은 방식으로 \(f_{12}\)를 역산한다:
| 입력 | \(Y\) | \(f_0 + f_1 + f_2\) | \(f_{12}\) (= \(Y\) - 나머지) |
|---|---|---|---|
| (0, 0) | 0 | \(-0.75 + 0.25 + 0.25 = -0.25\) | \(0 - (-0.25) = \mathbf{+0.25}\) |
| (0, 1) | 1 | \(-0.75 + 0.25 + (-0.25) = -0.75\) | \(1 - (-0.75) = \mathbf{+1.75}\) |
| (1, 0) | 1 | \(-0.75 + (-0.25) + 0.25 = -0.75\) | \(1 - (-0.75) = \mathbf{+1.75}\) |
| (1, 1) | 0 | \(-0.75 + (-0.25) + (-0.25) = -1.25\) | \(0 - (-1.25) = \mathbf{+1.25}\) |
\(f_{12}\) 테이블:
| \(f_{12}\) | \(X_2=0\) | \(X_2=1\) |
|---|---|---|
| \(X_1=0\) | +0.25 | +1.75 |
| \(X_1=1\) | +1.75 | +1.25 |
(0, 0)만 +0.25로 확연히 낮고, 나머지 세 셀(+1.25 ~ +1.75)은 모두 높다 — 변수 하나라도 1이면 교호작용이 강하게 작동하는 OR 패턴이다.
검산해보면, 역시 4개 입력 모두에서 같은 \(Y\)를 산출한다:
| 입력 | \(f_0 + f_1 + f_2 + f_{12}\) | \(Y\) |
|---|---|---|
| (0, 0) | \(-0.75 + 0.25 + 0.25 + 0.25 = \mathbf{0}\) | 0 ✓ |
| (0, 1) | \(-0.75 + 0.25 + (-0.25) + 1.75 = \mathbf{1}\) | 1 ✓ |
| (1, 0) | \(-0.75 + (-0.25) + 0.25 + 1.75 = \mathbf{1}\) | 1 ✓ |
| (1, 1) | \(-0.75 + (-0.25) + (-0.25) + 1.25 = \mathbf{0}\) | 0 ✓ |
②와 비교하면 핵심이 드러난다: ②에서는 \(X_1 = 1\)이 위험 증가(+0.25), ③에서는 위험 감소(-0.25). 같은 함수인데 main effect의 부호가 반대다.
분해 ④ — intercept만 다른 분해¶
지금까지 main effect의 크기와 부호가 분해마다 달라지는 것을 확인했다. 마지막으로 하나 더 — 전체 평균(intercept)을 어디에 담느냐도 자유롭다. ①처럼 main effect를 0으로 놓되, intercept를 다르게 잡아보자:
\(f_{12}\)는 \(Y - f_0 - f_1 - f_2 = Y - (-0.25) = Y + 0.25\)로 구해진다:
| \(f_{12}\) | \(X_2=0\) | \(X_2=1\) |
|---|---|---|
| \(X_1=0\) | \(0 + 0.25 = \mathbf{+0.25}\) | \(1 + 0.25 = \mathbf{+1.25}\) |
| \(X_1=1\) | \(1 + 0.25 = \mathbf{+1.25}\) | \(0 + 0.25 = \mathbf{+0.25}\) |
대각선 원소(0.25)와 반대각선 원소(1.25)가 각각 같다. ①의 XOR 테이블([0, 1; 1, 0])과 패턴은 동일하지만 값이 다르다 — intercept \(f_0 = -0.25\)만큼 전체가 밀려난 것이다.
검산:
| 입력 | \(f_0 + f_1 + f_2 + f_{12}\) | \(Y\) |
|---|---|---|
| (0, 0) | \(-0.25 + 0 + 0 + 0.25 = \mathbf{0}\) | 0 ✓ |
| (0, 1) | \(-0.25 + 0 + 0 + 1.25 = \mathbf{1}\) | 1 ✓ |
| (1, 0) | \(-0.25 + 0 + 0 + 1.25 = \mathbf{1}\) | 1 ✓ |
| (1, 1) | \(-0.25 + 0 + 0 + 0.25 = \mathbf{0}\) | 0 ✓ |
①과 ④는 main effect가 둘 다 0이라는 점에서 같지만, \(f_0\)과 \(f_{12}\)의 값이 다르다. 이것은 전체 평균을 intercept에 담을 것인가, 교호작용에 담을 것인가의 차이다 — 2절에서 다룰 fANOVA의 Zero Means 제약이 바로 이 문제를 해결한다.
같은 함수, 네 가지 해석¶
네 가지 분해를 나란히 놓으면, non-identifiability의 본질이 한눈에 보인다:
| 분해 | \(f_0\) | \(X_1\)의 main effect | \(X_2\)의 main effect | 해석 | 원논문 |
|---|---|---|---|---|---|
| ① | 0 | 0 | 0 | "개별 효과 없음, 순수 교호작용" | Fig.1(d) |
| ② | 0.25 | \(f_1(1) = +0.25\) | \(f_2(1) = +0.25\) | "\(X = 1\)이면 위험 증가" | Fig.1(a) |
| ③ | -0.75 | \(f_1(1) = -0.25\) | \(f_2(1) = -0.25\) | "\(X = 1\)이면 위험 감소" | Fig.1(b) |
| ④ | -0.25 | 0 | 0 | "개별 효과 없음, intercept만 다름" | Fig.1(c) |
네 가지 모두 같은 \(Y\)를 산출한다. 그런데 main effect의 부호가 양(②)일 수도, 음(③)일 수도, 0(①④)일 수도 있다. 이것이 non-identifiability의 핵심이다: 제약 조건 없이는 "이 변수의 효과가 양(+)이다/음(-)이다"조차 말할 수 없다. 그리고 이것은 XOR이라는 특수한 함수에서만 벌어지는 일이 아니다 — 위의 대수식이 보여주듯, 교호작용을 포함하는 모든 모형에서 \(\alpha, \beta\) 선택에 따라 main effect가 달라진다. XOR은 그 효과가 가장 극적으로 드러나는 사례일 뿐이다.
실무에서 이것이 왜 위험한가¶
신용평가 맥락으로 바꿔보자. XGBoost depth-2 모형에서 DTI(부채비율)와 소득의 교호작용이 있다고 하자. 위에서 본 것과 정확히 같은 원리로, 분해 방식에 따라 세 가지 상충하는 해석이 가능하다:
- 해석 A: "DTI가 높을수록 위험하다" (main effect가 양)
- 해석 B: "DTI의 main effect는 거의 없고, 소득과의 교호작용에서만 위험도가 결정된다"
- 해석 C: "DTI가 높을수록 오히려 안전하다" (main effect가 음, 교호작용이 이를 상쇄)
세 가지 해석 모두 동일한 예측값을 산출한다. Lengerich의 COMPAS(재범 예측) 실험에서 실제로 이런 일이 발생했다: XGB depth-2의 main effect가 purification 전후로 부호까지 뒤바뀌었다. 만약 이것이 신용평가 모형이었다면, 알고리즘 공정성 감사에서 치명적이다.
어떤 제약이 필요한가¶
문제의 본질은 main effect와 교호작용 사이에 효과를 자유롭게 이동시킬 수 있다는 것이다. 이를 막으려면 "각 component에 무엇이 담겨야 하는가"를 수학적으로 고정해야 한다. 직관적으로 세 가지 원칙이 필요하다:
-
"교호작용에는 교호작용만 담아라" — \(f_{12}\)에 \(X_1\) 하나만으로도 설명할 수 있는 효과가 섞여 있으면 안 된다. 예를 들어, \(f_{12}\) 테이블에서 "\(X_1 = 0\)인 행"과 "\(X_1 = 1\)인 행"의 평균이 다르다면, 그 차이는 \(X_1\)의 개별 효과이지 교호작용이 아니다. 이런 부분은 반드시 하위 component(\(f_1\))로 내려보내야 한다.
-
"main effect에는 전체 평균을 담지 마라" — 분해 ①과 ④의 차이가 바로 이것이다. \(f_{12}\)의 전체 평균이 0이 아니라면, 그 평균값은 \(f_0\)(intercept)에 담겨야 한다. 마찬가지로 \(f_1\)의 평균이 0이 아니라면, 그 평균도 \(f_0\)의 몫이다.
-
"component 간에 정보가 겹치지 않아야 한다" — \(f_1\)에 이미 담긴 효과가 \(f_{12}\)에도 중복으로 담기면, "소득의 기여"와 "소득×부채 교호작용의 기여"를 더했을 때 소득 효과가 이중 계상된다.
이 세 가지 직관을 수학적으로 표현한 것이 Functional ANOVA의 제약 조건이다. 다음 절에서 이 제약이 구체적으로 어떤 수식인지, 그리고 그것이 분해를 유일하게 결정하는지를 확인한다. → 2절. Functional ANOVA — 함수의 직교 분해
참고문헌¶
| 문헌 | 내용 |
|---|---|
| Lengerich, Tan, Chang, Hooker, Caruana (2020) | Purification 알고리즘 (AISTATS) — Fig.1 Boolean 예시 |