본문 바로가기

Statistics

Modeling Buying Behavior with Negative Binomial Distribution in Stan/ 감마분포와 포아송분포를 통한 음이항 분포의 도출

http://www.marketingdistillery.com/2015/01/10/modeling-buying-behavior-with-negative-binomial-distribution-in-stan/


Stan(패키지 이름)에서 음이항분포로 구매습관 모델링하기



소비자 행동 모델들은 e-commerce시장에서 성공적인 CRM 캠페인에 집중됐습니다.

한가지 쉬운 질문인 "이 고객이 얼마나 많은 주문을 할 것인가?"를 봅시다. 기초적인 토대부터 시작해보겠습니다.


지속적인 구매행위


우리의 모델은 고객들이 어느시간에나 자유롭게 구매할수 있게 지속적인 설정을 할 것입니다. e-commerce나 소매부분에서 표준적 시나리오들은  식료품, 서적, 영화, 호텔숙박 등, 이같은 상품에 대한 시나리오들입니다. 


당신이 당신의 구매이력 데이터베이스를 볼때, 고객들이 임의적으로 아무것이나 사는것처럼 보일지도 모릅니다. 한층 더 깊은 분석은  개별 고객들에게만 특정된 일정평균 구매비율을 보통 나타낼 것입니다. 예를 들어 책 한권은 매 20일 마다, 영화 한편은 매주 주말마다, 식료품은 5~8일 마다 구매를 한다는 것입니다. 만약 모든 구매들이 독립적이고 일정한 평균 비율을 따른다면, 소비자의 소비행위는 Poisson Process 로 모델링 할 수 있다. 이것은 사건들의 수와 그 사건들 사이의 지나간 시간을 셉니다(우리가 결국 원하는 답(지속적 구매행위)을 보여주는 분포임, 고객이 지나간 시간마다 얼마나 많은 구매(사건)를 하는지 보여주기 때문).


6개월동안 관찰된 한 소비자 집단(관찰집단)을 상상해 봅시다. 그들은 모두 6개월의 기간동안 소비를 한다는 가정하에서, 한 소비자에 의해 만들어진 주문들의 수는 파라미터 에 대한 포아송분포를 따릅니다. 는 각 소비자 마다 unique한 정확한 평균 구매 비율입니다. 만약 우리가 를 1개의 시간 단위(월, 6개월, 1년등)에서 i 번째 고객에 의해 생성된 주문들의 숫자를 나타내는데 사용한다면, 





ㅇㅇㅇ

로 나타낼 수 있습니다. 

예를 들어  =4.2 일때 한 기(a unit of time)에서 나온 구매의 수에 대한 포아송 분포는 다음 밀도 그래프를 가집니다.


한 기에서 단 1개의 주문이 있을 확률은 0.06이고, 2개는 0.13 등등 입니다.

대부분의 케이스에서, 당신의 고객층은 약간 더 큰 그룹의 한 부분이 될 것입니다. 평균 구매율(람다인듯)들이 완전히 독립적이고 (균등분포된) 랜덤하다고 가정하는 것은 비현실적 입니다. 사회적 그리고 경제적 유사성들은 기반구조와 행동패턴들을 생성할 것입니다. 예를 들어, 모든 고객들은 일반적으로 일주일에 한번 식료품을 일반적으로 주문할 지도 모릅니다.


이 효과를 잡기위해서, 우리는 개개인의 고객의 을 일반적인 집단수준의 분포로 부터 도출하는 것으로 가정하여, 우리의 모델에 추가적인 하나의 층이 필요합니다(뒤에 보면 이래서 two-level hierearchical model이라는 말이 나옴). 다르게 말하면, 우리는 개별 고객 구매율들을 뽑은 단 한개의 모집단 분포를 사용합니다. 풀어서 설명을 하자면 평균 고객 구매율들이 다 독립적이고(균등분포된) 랜덤하다는 것이 음이항 분포의 가정인데 이것이 비현실 적이기 때문에 이 가정을 보완해 주기위해 먼저 개별 고객 구매율을 뽑아 이것에 맞는 분포를 찾자는 말입니다. 모집단수준의 분포에 대한 하나의 좋은 후보는 감마 분포입니다. 이것은 양의 값들에서만 정의가 됩니다. (구매율은 오직 양수만 될 수 있으므로) 그리고 유연한(flexible) 형태를 가집니다. 더 전문적인 독자들은 포아송분포에 대한 켤레 사전분포임을 알것입니다. 감마분포의 밀도그래프에 대한 수치를 보십시오.




주문들의 수에 대한  한 고객 수준의 포아송 분포와 구매율에 대한 모집단 수준의 감마분포를 묶어, 우리는 two-level hierearchical model을 얻었습니다.



이 모델로부터 관찰치들을 실험하기 위해, 여러분은 감마 분포로 부터 구매율인 람다를 먼저 도출하고 ,그 다음에 이 람다에 대한 포아송 분포로 부터 주문들의 숫자를 도출합니다. 이 모델이 바로 음이항 분포(Negative Binomial Distribution, NBD)라고 불립니다.


Modeling Negative Binomial Distribution In Stan


운좋게도 음이항분포 모델 이면에 있는 이론은 전반적으로 복잡하지 않습니다. 이제, 구매이력데이터에 음이항분포모델을 적용해 봅시다.



모든 고객들이 그 기간동안 활동을 했고, 복잡한 프로세스를 모델링 하지 않았음을 알려드립니다.(적어도 이 포스트 에서는)


우리는 모델을 적합하기 위해 Rstan을 사용할 것입니다. 그러나 더 빠르게 작동하는 이용가능한 패키지들이 있습니다. Stan(RStan의 기반이 되는 툴)은 강력한 소프트 웨어고 , 심지어는 너무 강력해서 간단한 작업들을 할수 없을지도 모릅니다. Stan의 메뉴얼을 읽는다면, 여러분들은 음이항분포를 쉽게 구현할 수 있음을 알 수 있을것입니다. 이것은 단지 당신에게 모집단수준의 파라미터들을 줄것입니다. 그러나 이것이 바로 당신이 처음에 필요한 것입니다. 모델을 R에서 이렇게 정의하세요.






이 R 코드는 자동적으로 Stan model을 C++프로그램으로 변환시키고, 컴파일하여 실행할 것입니다. (윈도우에서 이 작업을 하기 위해서는 당신은 몇몇 추가적인 툴을 설치해야 합니다. - Stan의 메뉴얼을 확인하세요) 모델의 요약을 보기위해, 당신은 밑에것을 호출합니다.



와  파라미터들은 데이터를 생성할때 우리가 사용했던 것과 굉장이 유사합니다.


더 복잡한 시나리오에서, 당신은 개별 고객들의 구매율의 분포를 얻기를 또한 원할 것입니다. 이것은 당신이 명확하게 Stan에서 모델을 설명할 것을 요구합니다. 이것은 수천개의 파라미터들을 가질것이라는걸 명심하십시오(모집단범위의 와  에 한 고객당 한개의 파라미터가 더해집니다.) 더많은 데이터가 필요할  것입니다. 각 고객당 다수의 관찰치들을 가지기 위해, 데이터 코드를 수정합시다.



모델을 적합시키는것은 이제 상당한 시간이 걸릴 것입니다.



모집단 파라미터들과 첫 3개의 구매율들 조사하기 위해서는



우리가 데이터 샘플을 생성하기위해 사용했던 값들과 비교해보세요.    


짜잔~~


후에 켤레사전분포에 관해서 살펴 보겠습니다.