Skip to content

Posts A-B Testing의 단점과 개선안 #
Find similar titles

A-B testing의 단점과 이에 대한 개선안으로 볼 수 있는 Multi-armed bandit 알고리즘을 간단히 소개하는 글이다.

A/B Testing의 단점 #

세상에 대한 두 가지 믿음에서 내가(그리고 도요타 방식, 애자일 방법론, 린 스타트업 등을 실천하는 사람들이) 믿고 있는 두 가지에 대해 언급한 바 있다:

  • 우리는 세상에 대해서 모른다
  • 세상은 계속 변한다

A/B Testing은 이 중 첫번째에 대한 보완책으로 적당하다. 세상에 대해 모르니 통제된 실험을 통해 알아보자는 것이다.

하지만 문제는 세상이 계속 변한다는 점이다. 예를 들어 A/B Testing을 통해 A,B,C 안 중 B 안이 가장 성과가 좋음을 알았다고 했을 때, 이 사실은 언제까지 사실인 것으로 간주하는 것이 좋은가? 3개월 후에는 B 안이 더이상 최적이 아니라면 그걸 어떻게 인지할 수 있나?

실험을 최대한 오래하거나, 동일한 실험을 일정 주기로 반복해서 하거나 하는 식으로 보완할 수 있겠으나 아무래도 비효율적이다.

탐험하기(exploration)와 뽑아먹기(exploitation) #

실험을 오래/많이하면 세상에 대해 더 많이 알 수 있다. 즉 A, B, C 안을 놓고 한 달을 테스트한 결과 B 안이 최적이라는 사실을 알았다고 하더라도 실험을 멈추지 말고 계속 A, C 안을 동시에 노출해보면 세상의 변화를 놓치지 않고 알 수 있다. 최적안을 두고도 다른 안을 계속 실험하는 것들 두고 탐험하기(exploration)이라고 부른다.

반면, 최적안이 나왔으면 되도록 최적안으로 사용자를 몰아주어야 이익(그게 뭐든 간에)을 극대화할 수 있다. 실험을 오래할수록, 많이할수록 최적안이 아닌 안에 노출되는 사용자가 많아지므로 이익이 줄어든다. 최적안이 나왔을 때 최적안에 사용자를 몰아주는 것을 두고 뽑아먹기(exploitation)라고 한다.

이 두가지 입장 사이의 충돌을 exploration-exploitation 딜레마라고 한다.

Multi-armed bandit 문제 #

탐험과 뽑아먹기 사이의 분배 문제를 Multi-armed bandit(이하 MAB) 문제라고 부른다. 왜 이런 이름으로 불리는지 간단히 설명하자면 이렇다.

팔(arm)이 여러 개 있는 슬롯머신을 가정해보자. 각 팔마다 보상 확률이 다르고 플레이어는 어떤 팔의 수익성이 가장 높은지 알지 못한다. 이 상황에서 플레이어가 어떤 순서로 어떤 팔을 얼마나 당겨야 돈을 가장 많이 딸 수 있는지 찾아내는 것이 MAB 문제이다.

MAB 문제에는 여러 변형이 있는데, 예를 들어 시도 횟수가 정해져있는 경우와 그렇지 않은 경우 써야할 전략이 다르다(시도 횟수가 정해져있다면 후반에는 탐험을 적게하고 뽑아먹기에 치중할 필요가 있다).

Multi-armed bandit 알고리즘 #

MAB 문제를 푸는 알고리즘 혹은 휴리스틱들을 몽땅 묶어서 MAB 알고리즘이라고 부른다.

탐험과 뽑아먹기의 비율을 언제 어떤 식으로 조정할 것인지에 따라 여러가지 전략이 나올 수 있을 것이다. 전통적인 A/B Testing을 MAB 문제 관점에서 서술하면 "짧게 탐험하고 평생 뽑아먹기" 전략이라고 볼 수 있는데, 세상이 변하지 않는다고 가정할 수 있어야 적합한 전략이다. 과학에서의 통제 실험은 보통 실험 조건이 같으면 언제 어디서나 재현할 수 있음(universality, reproducability)을 가정하는데, 비즈니스 환경에서는 대체로 이러한 가정을 하기 어렵다.

최근에 이 알고리즘을 구현할 일이 있어서 통계학을 전공한 친구(일명 빡빡이)와 함께 공부(라고 쓰고 지도편달이라고 읽는다)를 조금 했는데, 소개하자면 아래와 같이 다양한 변형들이 있다(꼬진 것에서 좋은 것 순):

  • 사용자 중 일부는 현재까지 알려진 최적안으로 보내서 뽑아먹기를 하고, 나머지 일부에 대해서는 다시 분기를 하여 전통적인 A/B Testing을 수행하여 새로운 최적안이 나왔는지 알아보는 방식으로 개선한 알고리즘(epsilon-Greedy). 이 방식은 단점이 많아 아래와 같은 개선이 필요하다.
  • 지금까지 알려진 성과를 기반으로 성과가 좋은 쪽에 사용자를 좀 더 몰아주는 알고리즘(Softmax)
  • 성과가 좋은 쪽에 사용자를 얼마나 더 몰아줄 것인지("온도")를 조절할 수 있게 하는 방식(Softmax + Temperature)
  • 시간이 지남에 따라 점진적으로 "온도"를 낮춰서 탐험 비율을 낮추는 방식(Softmax + Temperature + Annealing)
  • 지금까지 알려진 성과 뿐 아니라, 그 성과가 얼마나 많은 실험을 통해 알려진 결과인지(즉 얼마나 확실한지)도 함께 따져서, 덜 확실한 쪽에 더 많은 탐험을 하는 방식(UCB1)

한 1년 전 쯤 Google Analytics의 A/B Testing 서비스인 "Content experiments"에 MAB 알고리즘이 적용되었다는 소개글이 올라왔었더랬다. 처음에는 그냥 A/B Testing을 좀 더 효율적으로 하는 방법 정도로만 생각했는데 보면 볼수록 철학적 차이 같은 것이 느껴진다.

결국 이러한 전략을 통해 더 오래, 더 다양한 테스트를 연속적으로 수행하면서도 비용과 시간을 아낄 수 있는 가능성이 열린다. 하나의 테스트를 끝내고 다른 테스트를 시작하는 대신, 테스트를 항시 하면서 새로운 안을 추가하거나 기존 안을 빼거나 하는 식으로 운영하는 것도 가능하다(혹은 장려된다). 이러한 방식은 세상에 대한 두 가지 믿음과 더 일치한다. 지금 유행하는 Lean Startup에도 더 잘 맞는 옷일 뿐 아니라, 전통적인 A/B Testing와 비교할 때 효율 차이도 명백하다.

아마도 조만간 이 방식이 A/B Testing을 거의 완전히 대체하지 않을까 싶다.

Suggested Pages #

Other Posts #

0.0.1_20140628_0