<!doctype html>
2026년 6월 23일 | 개발 공부
Glass's Delta는 두 설정의 평균 차이를 볼 때, 그 차이를 기준군의 표준편차로 나누어 읽는 효과 크기다. 이름은 익숙하지 않은데, 실제로는 실험 로그를 해석하다 보면 꽤 자주 필요한 모양이다. 새 모델이 평균 점수를 조금 올렸다고 해도 그 차이가 원래 흔들림의 몇 칸인지 알아야 하고, 특히 개입 뒤에 분산까지 같이 바뀌면 pooled standard deviation 하나로 덮는 해석이 조금 찜찜해진다.
나는 평가표를 볼 때 p-value보다 먼저 “이 차이가 어느 기준으로 몇 칸인가”를 묻는 편이다. 평균 차이만 있으면 단위가 그대로 남고, 순위 기반 효과 크기만 있으면 실제 점수 간격이 흐려진다. Glass's Delta는 그 사이에서 기준군을 자로 고정해 준다. 말하자면 “처치 전의 자연스러운 흔들림으로 보면 이 개선은 몇 표준편차짜리인가”를 묻는 방식이다.
평균 차이를 그대로 두면 놓치는 것
예를 들어 같은 검색 평가에서 nDCG가 0.041 올랐다고 적혀 있다고 해 보자. 숫자만 보면 작은 개선처럼 보이지만, 기준 실험의 run별 표준편차가 0.015라면 이야기가 달라진다. 기준군이 원래 0.015 정도만 흔들리는 환경에서 0.041이 올라간 것이므로, 차이는 기준군 표준편차의 약 2.7칸이다. 반대로 표준편차가 0.08이면 같은 평균 차이도 반 칸짜리 움직임에 가깝다.
그래서 Glass's Delta의 첫 장점은 단순하다. 평균 차이를 원래 변동성의 언어로 바꾼다. raw metric을 버리는 게 아니라, raw metric 옆에 해석 단위를 하나 더 붙이는 셈이다. 개발 실험에서는 이 단위가 꽤 쓸모 있다. 모델 A가 평균적으로 나아졌는지보다, 내가 다음 주에도 같은 방향을 기대해도 되는 크기인지가 더 중요할 때가 많기 때문이다.
왜 pooled SD가 아니라 기준군 SD인가
Cohen's d나 Hedges' g처럼 두 그룹의 분산을 합쳐 쓰는 효과 크기는 두 그룹이 비슷한 변동성을 가진다는 감각에 더 잘 맞는다. 그런데 개입 자체가 변동성을 바꾸는 경우가 있다. 새 reranker를 붙였더니 평균은 조금 오르지만 어려운 query에서 폭이 넓어질 수도 있고, calibration을 넣었더니 평균은 비슷한데 seed별 흔들림이 확 줄 수도 있다.
이럴 때 pooled SD는 “개입 뒤에 생긴 흔들림”까지 분모에 섞는다. 그게 항상 틀렸다는 뜻은 아니다. 다만 내가 묻고 싶은 질문이 “기준 운영 상태에서 보면 이 변화가 얼마나 큰가”라면, 분모는 기준군에 남겨 두는 편이 더 정직하다. Glass's Delta는 이 질문에 맞춰져 있다. 기준선을 자로 쓰고, 실험군을 그 자 위에 올려 보는 방식이다.
계산 전에 먼저 고정할 세 가지
첫째, 기준군이 무엇인지 먼저 정해야 한다. 보통 control, baseline, 이전 배포판, 기존 retrieval profile이 기준군이 된다. 비교 방향을 나중에 바꾸면 숫자의 부호도 같이 흔들리기 때문에, 표에는 “baseline SD 기준”이라고 적어 두는 게 좋다.
둘째, 낮을수록 좋은 metric인지 확인해야 한다. latency, error rate, cost처럼 작은 값이 좋은 지표에서는 평균 차이를 그대로 빼면 개선이 음수로 나올 수 있다. 이 자체는 문제가 아니지만, 보고 문장에서는 “감소 방향이 좋은 metric이라 Glass's Delta가 음수”라고 적어야 한다. 숫자만 남기면 다음 사람이 부호를 성능 저하로 오해하기 쉽다.
셋째, 기준군 표준편차가 너무 작을 때를 조심해야 한다. baseline이 거의 흔들리지 않는 로그에서는 아주 작은 평균 차이도 큰 효과 크기로 부풀 수 있다. 이때는 원자료 plot, bootstrap confidence interval, seed 수를 같이 둬야 한다. 나는 이런 경우 효과 크기 하나로 결론을 쓰지 않고, “분모가 작아서 크게 보이는지”를 별도 확인 항목으로 남긴다.
평가 로그에 적는 방식
내가 보고서에 남긴다면 길게 쓰지 않는다. “평균 차이 0.041, 기준군 SD 0.015, Glass's Delta 2.73”처럼 세 숫자를 붙여 둔다. 그다음 한 문장으로 “기준 run 흔들림의 약 2.7칸에 해당한다”라고 적는다. 이 문장이 있어야 숫자가 평가자 머릿속에서 단위로 바뀐다.
여기서 중요한 건 Glass's Delta를 p-value의 대체물로 쓰지 않는 것이다. p-value는 우연으로 보기 어려운지 묻고, Glass's Delta는 차이가 얼마나 큰지 묻는다. 두 질문은 붙어 있지만 같지 않다. 표본 수가 커지면 아주 작은 차이도 유의해질 수 있고, 표본 수가 작으면 꽤 큰 차이도 불확실할 수 있다. 그래서 나는 효과 크기, confidence interval, 대표 실패 케이스를 한 묶음으로 본다.
내가 쓸 때의 판단 기준
Glass's Delta는 평균 차이가 중심인 실험에서 특히 편하다. 두 모델의 점수 분포를 순위 승률로 보고 싶으면 Cliff's Delta나 Vargha-Delaney A12가 더 자연스럽고, 같은 query를 두 설정이 함께 지난 paired 구조라면 paired permutation test나 Wilcoxon signed-rank test 쪽이 먼저다. 반대로 기준 운영 상태를 명확히 두고, “그 기준의 흔들림으로 보면 평균 개선이 몇 칸인가”를 말하고 싶다면 Glass's Delta가 깔끔하다.
다만 기준군을 잘못 잡으면 숫자도 바로 흔들린다. 예전 배포판을 기준으로 삼을지, 같은 주의 재실험 baseline을 기준으로 삼을지에 따라 분모가 달라질 수 있다. 그래서 나는 실험 노트에 baseline 이름, seed 수, 기준군 SD를 함께 적어 둔다. 나중에 결과만 다시 볼 때 “왜 이 효과 크기가 이렇게 컸지” 하고 헤매는 일을 줄여 주기 때문이다. 작은 숫자 하나라도 기준선이 남아 있으면 회의에서 다시 설명하기가 훨씬 편하다. 재현 실험의 출발점도 덜 흔들린다. 이런 메모가 다음 비교표의 기준 열이 된다. 꽤 현실적인 안전장치다.
내가 이 숫자를 좋아하는 지점은 결론을 과장하지 않게 해 준다는 데 있다. 평균 차이가 좋아 보일 때도 기준군 흔들림에 비하면 작은 움직임일 수 있고, 반대로 작아 보이는 차이가 기준선에서는 꽤 큰 이동일 수 있다. 결국 효과 크기는 멋진 통계 장식이 아니라, 다음 실험을 계속 밀지 멈출지 정하는 작은 판단 단위에 가깝다.
'[개발 공부]' 카테고리의 다른 글
| TOST 등가성 검정과 허용 폭 (0) | 2026.06.25 |
|---|---|
| Hedges' g: 작은 표본 보정이 붙은 효과 크기 (0) | 2026.06.24 |
| Vargha-Delaney A12: 두 독립 표본의 승률 효과 크기 (0) | 2026.06.22 |
| Brunner-Munzel 검정: 분포 모양이 다른 두 표본 비교 (0) | 2026.06.21 |
| HTTP 204 응답: 성공인데 본문이 없는 상태 (0) | 2026.06.19 |