[개발 공부] / MDE: 실험표가 잡아낼 수 있는 최소 차이.md

MDE: 실험표가 잡아낼 수 있는 최소 차이

조회

2026년 6월 25일 | 개발 공부


MDE는 Minimum Detectable Effect, 보통 “최소 검출 가능 효과”라고 부르는 값이다. 말은 조금 딱딱하지만 내가 실험표에서 자주 놓치는 질문은 단순하다. 지금 만든 평가 설계가 어느 정도 차이부터 안정적으로 잡아낼 수 있는가. 평균 점수표를 놓고 후보 모델이 0.3%p 좋아졌다거나 latency가 8ms 줄었다고 말할 때, 그 숫자가 업무상 의미 있는지와 별개로 현재 샘플 수와 분산으로 그 차이를 볼 수 있었는지도 같이 물어야 한다.

MDE와 업무상 의미 있는 차이를 같은 축에 놓은 도식
Figure 1. MDE는 효과 크기의 매력도를 말하는 숫자가 아니라, 현재 실험 설계가 잡아낼 수 있는 차이의 바닥선을 알려 주는 숫자에 가깝다.

작은 차이를 못 봤다는 말

평가 결과가 비슷하게 나왔을 때 나는 예전에는 “거의 차이 없음”이라고 빨리 접는 편이었다. 그런데 표본 수가 작거나 query별 점수 흔들림이 크면, 실제로는 차이가 있어도 평가표가 그 차이를 못 볼 수 있다. 이때 필요한 문장은 “차이가 없다”가 아니라 “이 설계로는 그 정도 차이를 안정적으로 잡기 어렵다”에 가깝다. MDE는 바로 이 경계선을 숫자로 적어 두는 도구다.

예를 들어 추천 모델 A와 B를 같은 200개 query로 비교했는데 평균 nDCG 차이가 0.004라고 하자. 이 숫자가 작아 보인다는 느낌만으로 결론을 내리면 위험하다. 현재 query별 분산이 크다면 0.004는 그냥 흔들림일 수 있고, 반대로 product decision에서는 0.004도 충분히 의미 있는 차이일 수 있다. 그래서 나는 먼저 업무상 의미 있는 최소 차이를 적고, 그 다음 현재 평가셋이 그 차이를 볼 수 있는지 따로 본다.

이때 MDE가 업무상 의미 있는 차이보다 크면, 결론은 꽤 단순해진다. 이번 실험은 의사결정에 필요한 작은 차이를 볼 만큼 촘촘하지 않았다는 뜻이다. 반대로 MDE가 관심 차이보다 충분히 작다면, 비슷한 결과를 조금 더 안심하고 해석할 수 있다. 숫자가 좋아 보이는지보다, 실험의 해상도가 질문에 맞았는지를 먼저 확인하는 셈이다.

MDE는 power analysis의 반대쪽 질문

power analysis를 할 때는 보통 “이 정도 효과를 보고 싶다면 샘플이 얼마나 필요한가”를 묻는다. MDE는 같은 재료를 반대로 읽는다. 이미 표본 수, 유의수준, 검정력 목표, 분산 추정치가 어느 정도 정해졌다면 “지금 조건에서 볼 수 있는 최소 효과가 얼마인가”를 묻는다. 같은 t-test나 비율 비교라도 질문 방향이 달라지는 셈이다.

from statsmodels.stats.power import TTestPower

analysis = TTestPower()
effect_size = analysis.solve_power(
    nobs=80,
    alpha=0.05,
    power=0.8,
    alternative="two-sided",
)

이런 계산에서 나오는 effect size는 보통 표준화된 차이다. 그래서 실험 노트에는 표준화된 값만 남기지 않고 원래 metric 단위로 되돌린 설명을 붙이는 편이 낫다. “MDE 0.35”보다 “현재 분산 기준으로 약 12ms 차이부터 볼 수 있음”이 훨씬 다시 읽기 쉽다. metric 단위로 돌아오지 못한 숫자는 다음 회의에서 거의 장식처럼 떠다닌다.

여기서 effect size와 MDE를 섞지 않는 것도 중요하다. Hedges' g나 Cliff's delta는 관측된 차이를 어떻게 요약할지에 가깝고, MDE는 현재 설계가 어느 정도 차이를 볼 수 있는지에 가깝다. 하나는 결과의 크기를 읽는 자이고, 다른 하나는 실험 설계의 해상도를 읽는 자다. 둘 다 같은 표에 들어갈 수 있지만, 같은 문장으로 합치면 “크다”와 “볼 수 있다”가 뒤섞인다.

평균표 옆에 붙일 세 가지

MDE를 쓸 때 내가 같이 붙이고 싶은 값은 세 가지다. 첫째, 업무상 의미 있는 최소 차이다. 이 값은 통계 패키지가 정해 주는 것이 아니라 운영 기준에서 나온다. 둘째, 현재 설계의 MDE다. 표본 수와 흔들림을 반영한 탐지 한계다. 셋째, 실제 관측 차이다. 이 세 값이 같은 축에 있어야 “작지만 의미 있는 개선을 놓친 것인지”, “의미 없는 작은 흔들림을 크게 본 것인지”를 나눌 수 있다.

나는 여기에 표본 단위도 같이 적는 편이 좋다고 본다. query를 단위로 본 값인지, 사용자 세션을 단위로 본 값인지, seed별 평균을 단위로 본 값인지에 따라 MDE의 의미가 달라진다. 단위가 빠진 MDE는 숫자만 남고, 다음 실험에서 비교 가능한 기준이 되기 어렵다. 같은 80개라도 query 80개와 사용자 80명은 전혀 다른 실험이기 때문이다.

이 구분은 등가성 검정과도 이어진다. TOST에서 허용 폭을 먼저 정해야 “같다고 말할 수 있는가”를 판단하듯, MDE에서도 먼저 관심 있는 차이를 정해야 “현재 설계가 그 차이를 볼 수 있는가”를 판단할 수 있다. 차이 검정, 등가성 검정, MDE가 모두 p-value 주변에 있지만 묻는 질문은 다르다. 하나는 우연으로 보기 어려운지, 하나는 허용 폭 안이라고 말할 수 있는지, 하나는 애초에 볼 수 있는 크기였는지를 묻는다. 이 셋을 나눠 적으면 결론 문장이 훨씬 덜 흔들린다.

실험이 작을수록 더 필요하다

개인 프로젝트나 초기 연구 실험에서는 샘플을 크게 늘리기 어렵다. 그래서 오히려 MDE를 적어 두면 마음이 편해진다. 작은 실험의 한계를 숨기지 않고, “이 정도 이상 차이가 났다면 볼 수 있었고, 그보다 작은 차이는 아직 결론을 미루겠다”라고 말할 수 있기 때문이다. 실패한 실험을 억지로 성공처럼 꾸미는 것보다, 현재 설계의 시야를 좁게 적는 편이 다음 실험을 더 잘 만든다. 작게 시작하는 실험일수록 이런 제한 문장이 필요하다.

보고서 문장도 조금 달라진다. “후보 B는 유의하게 좋지 않았다”보다 “현재 80개 query 설계의 MDE보다 작은 차이만 관측돼, 이 실험만으로는 작은 개선을 판정하기 어렵다”가 낫다. MDE는 결론을 보수적으로 만들기 위한 장치라기보다, 평가표의 시력 검사를 먼저 하게 만드는 장치다. 다음부터 작은 delta를 볼 때는 평균 차이 옆에 이 실험이 볼 수 있었던 최소 차이를 같이 적어 두려고 한다.

특히 모델 비교가 여러 번 이어지는 프로젝트에서는 이 숫자가 누적 기록으로 쓸모가 있다. 샘플을 늘렸는데 MDE가 얼마나 내려갔는지, metric을 바꿨을 때 탐지 가능한 차이가 어떻게 달라졌는지 보면 평가 설계가 실제로 좋아졌는지도 볼 수 있다. 나는 앞으로 평균 점수, 신뢰구간, 효과 크기 옆에 MDE를 작은 칸으로 붙여 두고, “아직 못 본 차이”를 결론 밖에 남기는 쪽으로 실험표를 정리하려고 한다. 그래야 다음 비교도 같은 눈금에서 시작된다.

댓글

홈으로 돌아가기

검색 결과

"" 검색 결과입니다.