과학 이론을 정립하는 과정/방법은 크게 반복되는 관찰을 일반화해서 이론을 만드는 귀납법과 사고실험으로 구축된 이론을 가설검증과 재현실험을 통해서 확인하는 연역법이 있다. 그래서 지난 글에서 과학 또는 과학적 방법은 재현성과 반복성에 있다고 적었다. 오늘은 실험에 대해서 좀더 자세히 적으려 한다. 1
가설검증에서 자주 등장하는 개념이 '통계적 유의성 significant'이다. 이는 관측된 데이터가 어떤 분포를 따른다고 가정했을 때 두 분포가 통계적으로 같지 않음을 확인한다. 흔히 정규분포 (가우시안분포, N)를 따른다고 가정하고 자주 들었던 p-value라는 게 등장한다. 최근 들어 p-value에 대한 회의론이 많기는 하지만 여전히 과학적 방법 또는 통계적 유의성을 판별하는데 p-value는 (강력한) 필요조건이다. P-value 값을 확인하는 분석법을 흔히 ANOVA (Analysis of Variance)라 부르는 분산분석이다. 이는 '둘이 같지 않음'을 보이는 분석이다. 이때 '귀무가설 (null hypothesis, h0)'이라는 개념이 등장하는데, 이는 '두 분포가 (통계적으로) 같다'라는 가설이다. 설명의 앞뒤가 안 맞는 것같지만 계속 읽으면 앞뒤가 맞다. ANOVA에서 실험자가 원하는 수준의 p-value보다 적은 값이 나오면 이때 우리는 '귀무가설을 기각한다 Reject null hypothesis'라고 부른다. 즉, 앞서 '같지 않음을 증명한다'고 했는데 '둘이 같다'가 귀무가설이었으므로 '귀무가설을 기각한다'는 것은 결국 유의 수준 내에서 통계적으로 같지 않다는 걸 뜻한다. (그래서 설명의 앞뒤가 맞다.) 역으로 p-value가 원하는 수준보다 클 때는 '귀무가설을 승인한다 Accept null hypothesis'라고 부르지 않고 '귀무가설을 기각하지 않는다 Do not reject null hypothesis'라고 부른다. 말장난 같지만 중요한 개념이다. 두개의 데이터 분포가 조금 겹쳐서 눈으로 보기에는 차이가 나는 것 같지만 여전히 (증거부족 등으로) 둘이 같을 수도 있기 때문에 가설을 기각할 수 없다는 의미고, 추가 실험/증거가 필요하다고 해석할 수 있다.
* 참고로 논문 등에서 significant라는 용어를 함부로 사용하면 안 된다. Significant, 즉 통계적 유의성은 이런 통계적 가설검증을 통과한 후에 significant를 쓸 수 있다. 단순히 표나 그래프에서 두 값이 차이가 난다고 해서 '이 실험 결과는 유의미하게 (significantly) 차이가 있다'라는 말은 거짓말을 하는 거다. 과학논문에서 significant는 statistical significant과 동의어기 때문에 통계검증을 통과한 후에만 사용한다.
실험을 할 때 실험군 treatment group과 비교군 control group을 두는 것은 대부분 알고 있다. 엄격한 실험이라면 실험군과 대조군은 단지 하나의 요소 factor만 차이가 있어야 한다. 둘 이상에서 차이가 있으면 어느 요소 때문에 또는 둘 이상의 interaction 때문에 결과에 차이를 줄 수 있기 때문에 엄격하게 하나를 제외한 나머지는 모두 통제한다. 그리고 실험은 늘 반복해서 같은 결과가 재현되는지를 확인한다. 이 둘이 결합 (하나의 조건 + 반복실험)되면 실험 비용이 많이 들어가는 단점이 있다. 그래서 (많은) 반복실험이 가능하다면 여러 개의 요소를 동시에 변화시켜서 실험하는 것도 가능하다. 하지만 모든 요소의 개별적 효과를 확인할 수 있도록 균질하게 잘 배분해야 한다. 실험을 어떻게 수행할 것인가에 관한 것은 '실험계획 (Design of experiment, Experimental design)'을 찾아보면 나온다. 하지만 대학에서 실험계획 수업을 들으면 실험환경을 설정하는 것보다 앞서 말한 ANOVA를 어떻게 수행해서 해석하는지에 대한 내용이 대부분이다.
이론적으로는 엄격한 실험 환경 (대조군, 단일 변수, 반복실행)에서 진행하고 해석해야 겠지만, 현실에서는 통계적 유의성보다는 현재보다 조금이라도 더 좋으면 그걸로 충분하다. (그러나 이를 연구논문화할 때는 통계분석이 필요하고 그 후에 significant improvement가 있었다 정도로 적을 수 있다.) 일상적으로 진행하는 A/B 테스트 (또는 bucket 테스트)에도 ANOVA를 통해서 성능향상이 있었습니다라고 말하면 좋겠지만, 많은 분포가 정규분포를 따르는 것도 아니고 통계적으로 유의하지 않더라도 개선효과가 눈에 띄고 그에 따른 매출향상 등이 있다면 새로운 방식을 취하는 것을 미룰 이유가 없다. (연구의 엄격성을 말한 것이지 현실에서의 적용을 말한 것은 아님)
지난 글(미공개)에서 A/B 테스트를 할 때 '랜덤'을 대조군으로 설정하면 안 된다고 적었다. 전혀 안 될 것은 없지만 일반적이지 않다. 만약 지금 실험하는 것이 유사이래로 처음 발견돼서 최초로 시도하는 거라면 부득이하게 랜덤과 비교할 수밖에 없다. 하지만 그런 문제는 있을 수 없다. 가장 현실적으로 대조군은 '현재 시스템에 적용된 방식' 또는 '현재 적용된 것 중에서 가장 좋은 방식'이어야 한다. 즉, 현재보다 더 나은 방식을 찾는 거다. 좀더 엄격하자면 'state of the art'와 비교하는 게 맞다. 그래서 SOTA보다 더 나은 성능을 보인다면 OK. 하지만 SOTA는 보통 잘 통제된 실험실 환경에서 얻어진 결과일 가능성이 높다. 즉 우리 서비스 데이터에 SOTA를 적용하더라도 논문 등에서 제시한 수준의 성능을 보일 수가 없다. 그렇기 때문에 SOTA만큼은 성능을 못 냈지만, (예를 들어) 90% 수준의 결과를 얻었다 정도의 결론은 괜찮은 것 같다. 더 하자면 A라는 (주)지표에서는 SOTA보다 성능이 다소 떨어졌지만 B, C, D 등의 (보조)지표에서는 더 나았다 등의 결과가 나오면 바람직하다. 현재 서빙중인 시스템이 없거나 적당한 SOTA가 없더라도 최소한 greedy (heuristic) 방식과는 비교가 돼야 한다. (물론 greedy가 random보다는 나아야 하겠지만) 요약하자면 비교군은 가장 좋은 방식, 가장 일반적인 방식, 현재 적용된 방식, 아니면 최소 누구나 생각할 수 있는 최소한의 휴리스틱 방식과 비교하는 게 맞다. Random과 비교하더라도 이는 그냥 참고용일 뿐이다.
그리고 스치듯 언급했지만, 문제나 환경에 따라서 시스템이나 알고리즘을 설명하는 하나의 강력한 주지표가 있을 수 있다. 회사 전체의 측면에서 보면 매출이나 영업이익이 그런 지표고, 보통 알고리즘에서는 정확도가 주지표다. 하지만 주지표만으로는 모든 걸 설명할 수 없다. 그래서 실험, 비교를 할 때는 다양한 보조 지표를 참조해야 한다. 새로운 알고리즘을 적용했을 때 정확도 향상은 없지만 (또는 오히려 다소 떨어졌지만) 계산속도가 10% 향상됐다거나 장애률이 5% 떨어졌다거나 등의 보조지표가 좋아졌을 수도 있다. 이런 상황이라면 새로운 방식을 도입하지 않을 이유가 없다. 예시적으로 설명했지만, 실험에서 가장 보고 싶은 지표가 있을 수도 있지만, 그 하나만으로 모든 걸 판단하지 말고 다양한 관점에서 결과를 해석하고 수용해야 한다는 의미다. 단기간의 데이터에서 주지표가 좋은 성과를 보여주더라도 장기적인 관점에서 오히려 해가 되는 경우도 자주 본다. 특히 고객들이 새로운 환경에 익숙해지고 새로 적용한 모델이 aging되면서 짧은 실험에서 보지 못했던 부작용은 (필히) 나타난다. 그래서 다양한 관점에서 실험 결과를 해석해야 그런 실수를 줄일 수 있다.
그리고 논문에 A라는 방식이 좋다고 하더라도 그걸 무조건 믿지는 말기 바란다. 실험실과 production은 엄연히 다르고, 그들의 구현체와 데이터는 우리의 것과 분명 다르다. SOTA를 구현해서 적용하는 것은 필요하지만 자기만의 무엇은 꼭 있어야 한다. SOTA가 우리에게 가장 적합하다면 그걸 수용해야 하지만, 논문에 나온 SOTA를 우리가 구현했다고 그게 우리의 답일 수는 없다. 때론 조금 미흡하더라도 자기만의 무기를 갖는 게 더 나을 수 있다. 논문은 논문일 뿐이다.
- 회사 내부 게시판에 적은 글을 가져와서 '지난 글'은 외부 미공개입니다. 나중에 퇴사/이직 등으로 공개가능해지면 공개할 예정입니다. [본문으로]