Home 서비스 분석에서의 대표성
Post
Cancel

서비스 분석에서의 대표성

샘플 수가 문제가 아니다.

신문 기사의 설문 통계 기사에서는 표본들을 자세히 보지 않으면 속는다는 이야기를 한다 (실생활에서의 통계 관련 고전 도서인 [새빨간 거짓말, 통계(How to lie with statistics)]에서 가장 먼저 등장하는 사례가 이 예제다(1)).
일반적으로 흔히 이야기하는 부분은 이런 것이다.

‘아니 겨우 몇 백명에게 물어본 결과를 가지고 무슨 기사를 써?’

이 말을 듣는 사람들은, 보통 ‘몇 천만명 중에 겨우 몇 백명 가지고…’ 라고 하지만, 사실 여기서 보통 문제가 되는 점은 대표성 이다. 해당 설문을 한 몇 백명의 사람들을 어떻게 선정했는지에 따라, 우리 나라 전체 사람들의 특성을 그대로 가지고 있다고 볼 수 없는 경우가 다수 존재한다.

(숫자는 문제가 안 되느냐, 하면 모든 경우는 아니지만, 샘플링 관련 통계는 눈부시게 발전해 왔고, 다양한 경우에서 매우 적은 수로 매우 많은 양의 모집단을 대표할 수 있다. 간단한 사례로는 선거 방송을 예로 들 수 있다. 이에 대해서는 표본 통계 관련 서적(2)을 참고하면 된다.)

대표성 문제

서비스에 대한 데이터 분석을 하는 경우에는, 이런 경향- 마찬가지로 데이터 수만 중요하게 생각하고 그 이상은 자각을 하지 못하는 경우-이 더욱 더 두드러진다. 많은 경우에 있어서, 이에 대한 가장 큰 원인은 문제와 그에 따른 가설 정의와 관련되어 있다.

일반적으로 서비스에서의 분석이란 서비스를 사용하는 고객과 관련된 분석을 하게 된다.
고객의 서비스 사용 특성이라든가, 많은 고객이 사용하는 기능이라든가 등등. 여기서 첫 번째 문제가 발생한다.

모든 범위의 고객

아무래도 서비스라는 것은 고객과 뗄래야 뗄 수 없는 특성을 가지고 있다. 따라서 이에 대한 분석을 할 때 고객을 직간접적으로 문제에 포함하게 된다.

여기에서 문제가 발생한다. 바로 해당 문제 및 가설에서 알고자 하는 정확한 전체 대상(모집단)이 누구인가, 에 대한 것이다. 하지만 많은 경우 문제나 가설을 모호하게 설정하게 되고, 그 사이에서 그 ‘대상’은 더욱 더 모호하게 설정하고 넘어간다(3).

대부분의 경우는 어떤 ‘일반화된 결과’를 필요로 한다. 이런 ‘일반화된 결과’란 즉, 고객이 될 수 있는 모든 용자에게 해당되는 결과다.
하지만 안타깝게도 우리가 가지고 있는 데이터에는 한계가 있다. 데이터가 누락된 때의 고객, 이미 탈퇴한 고객, 가입한 지 얼마 안되는 고객 등.
우리네 서비스는 서비스마다 특수한 성격을 가지고 있고, 심지어 그 서비스가 세상에 하나가 아닌 경우도 허다하며, 회원 가입/탈퇴가 빠르게 일어나는 등 모집단 자체가 능동적으로 변하기 때문에, 가능한 선에서의 ‘전수 조사’를 하는 경우에도 그러하다.

여러 서비스 데이터에서 고객 및 서비스에 대한 기본 정보를 제외하고 일반적으로 가지고 있는 것은 서비스에 관련된 트랜잭션(4)이나 특정 기능 사용에 대한 로그일 것이다. 그리고 이를 사용해서 사용자들의 패턴 파악, 기능이나 아이템 및 이벤트 비교 및 평가, 예측 모델링 등을 수행한다.

이런 분석 내용 중에서는 순수하게 서비스 이상의 가정을 할 필요가 없는 (운이 좋은) 경우들도 있지만, 그렇지 않은 경우도 상당수다. 세상에서는 ‘빅데이터’ 니 ‘데이터를 다 넣으면 된다 ‘ 이런 이야기들이 왕왕 나오지만, 실제로 그 ‘모든 데이터’에 접근할 수 있는 사람은 거의 없다. 대부분의 서비스는 세상 모든 사람, 혹은 어느 지역의 모든 사람이 사용하는 것이 아니다. 대부분의 서비스를 사용하는 사람들이 세상 사람들에 대한 대표성이 있다고 말하기도 어렵다. 내가 책을 ‘알라딘’에서도 사지만 ‘교보문고’나 ‘영풍문고’, ‘반디앤루니스’에서도 사고 심지어는 작은 서점이나 북 페스티벌들에서도 산다. 어느 서점에서도 나의 모든 책 구매 데이터를 넣을 수는 없다.

모든 시간의 고객

더불어, 우리는 모든 고객의, 모든 시점에서의 행동을 다 볼 수는 없다. 결국은 어떤 기간을 샘플링해야 한다. 이 때 그 기간이, 해당 서비스의 모든 시점을, 최소한 현재의 시점을 대표한다고 볼 수 있을까?

서비스는 계속 변하고, 고객의 행태는 더더욱 계속 변한다. 심지어 잦은 가입/탈퇴/휴지 등으로 매 시점에 존재하는 고객 자체도 각각 다르고, 그 고객의 가입 형태 또한 다양하다(프로모션이나 이벤트, 새로운 기능 런칭, 사회적 이슈 등의 여러 가지 상황이 있다). 각 서비스는 고객의 삶에서 특정한, 극도의 적은 부분에 대해서만 스냅샷을 뜰 수 있다.

답은 데이터다.

서비스 분석에서는 정말 다양한 경우가 존재한다. 또한 쉽게 문제 정의를 하지만, 대부분의 경우 해당 문제들은 서비스 내에서는 당연하지만, 많은 사람들의 일반적인 시간선을 생각해 보았을 때는 전혀 당연하지 않은 경우들이 많다. 따라서 그 문제를 상세하게 다듬고 제약 사항을 잘 정리해서, 문제의 범위를 줄이고, 데이터를 여러 관점에서 고려해서 최대한 적당한 형태의 데이터를 골라내야 한다.

무엇보다, 문제에서 이야기하는 모집단을 정확히 정의하고 이를 명시해야 한다. 최대한 ‘이 서비스를 사용하는 고객’ 이상으로 넘어가는 범위는 파악하기 어렵다. 일반적으로는 ‘어떤 시점’에 ‘무엇을 사용한’ 고객 정도로 정의함이 적절하다. 혹은 어느 정도 예외 상황을 고려하는 것도 답이다. ‘이 서비스를 사용하는 고객’이지만 ‘어느 시점에 사용한 경우는 제외로 하는’ 등이다. 물론 이 때 원래의 문제의 목적을 같이 고려해야 한다. ‘일반적인 사용자 파악’을 위한 것인데 ‘어느 이벤트로 가입한 사용자의 경우’에 한해서만 분석을 한다면 애초에 시작을 안 하는 것이 나을 것이니까. 시간의 경우에도 마찬가지다. 그래서 해당 서비스에 무슨 일이 있었는지, 간단한 역사(?)를 정리해 두고 알아두면 많은 도움이 된다. 데이터를 보면서 ‘매우 신기하고 놀라운 결과가 나왔다’고 하는 것의 50% 이상은 해당 시점에 있었던 일을 누락하고 만들어낸 결과다(40%는 데이터 및 분석 상의 오류다). 이런 시점의 데이터는 서비스의 전체 시계열에서 대표성을 띄지 못한다.

따라서 데이터를 분석하는 사람은, 문제의 목적을 명확하게 파악하고 문제를 적시한 후, 현재 보유한 데이터의 한계점과 데이터의 혈통과 역사를 명확하게 알고, 이런 것을 적절히 피하고, 피할 수 없는 경우는 문제에 명시하되, 문제 해결에 가장 근접한 데이터를 만드는 것부터 시작하는 것이 중요하다. 숫자, 시간, 그 외 모든 범위 모두 마찬가지다.

많은 경우, 명확한 문제와 명확하게 정돈된 실험실의 데이터를 만지는 사람들의 경우 이를 놓치는 경우가 많다. 그리고 역시나 많은 경우, 데이터 분석의 신뢰성이 떨어지는 경우는 이런 상황에서 나타난다. 많은 분석가들은 이런 부분에서 실제 서비스에서의 데이터 분석이 이론적이지 않다고 무시하거나, 실망하거나, 재미없어 하지만, 이는 역설적으로 실제 서비스의 데이터 분석을 근본적인 이론에 가깝게 실행하기 위한 것이다.

Epilogue

원하는 문제에 대한 최대한의 대표성을 가지는 분석을 진행해야 한다. 어떤 방법이 생각나지 않거나, 혹은 처음 접하는 문제거나 할 때에도 사실 ‘이 데이터가 이 문제 해결에 대표성을 띄고 있는가, 대표성이 없다면 어떻게 해야 대표성을 띄면서 상대방이 원하는 답에 가장 가깝게 만들 수 있을까’를 고민해 보는 것이 분석 시에 가장 우선적으로 가져야 할 생각이라고 본다.

대표성이 없는 분석은 결국 표본 조사가 엉망인 통계 자료와 다를 게 전혀 없는 신세가 될 뿐이다.

Reference

  1. [새빨간 거짓말, 통계], 대럴 허프 지음, 박영훈 옮김, 더불어책, 2004
  2. 표본 조사 관련 도서는 여러 가지가 있고, 최근 내가 보고 있는 책은 <[표본 조사론],김재광, 자유아카데미>이다.
  3. https://cojette.github.io/datasupport/ 의 [가설 설정] 항목에서 가설의 모호함에 대해 이야기하고 있다.
  4. https://en.wikipedia.org/wiki/Financial_transaction
    This post is licensed under CC BY 4.0 by the author.

    머신 러닝에서 알고리즘 공부를 말할 때 내가 하고 싶은 이야기

    Business Analyst와 데이터 추출