파이썬으로 A/B 테스트 분석하기

요즘 A/B 테스트가 유행이긴한가보다. 마케팅에서 시작된 거긴 하지만 사실 아무데나 다 쓸 수 있다. 파이썬으로 A/B 테스트를 수행하는 연습을 약식으로 해보았는데, 간단히 소개해본다.

들어가기에 앞서 만약 A/B 테스트에 대한 이해가 필요하다면 위키피디아를 참고하자. (더 이상의 자세한 설명은 생략한다.)

파이썬으로 A/B 테스트 분석

0. 준비

분석에는 파이썬 라이브러리 pandasscipy를 활용한다. (scipy는 기본으로 설치되어 있는 거고, 만약 pandas 설치가 안 되어 있다면 cmd에 pip install pandas라고 쳐서 설치하자.)

그리고 분석할 실제 데이터를 pandas 데이터프레임으로 준비해야 한다.

여기서는 ‘data.csv’라는 csv 파일을 pandas에서 불러왔다.

import pandas as pd

df = pd.read_csv('data.csv')

df는 이렇게 생겼다.

  • user_id 열은 사용자 한 명을 의미하며
  • group 열은 각 user들이 총 A, B, C 세 개 그룹 중 하나에 속해있는 것을 알려준다.
    (3개의 테스트 중 한 가지 테스트를 수행했다는 의미다.)
  • is_purchased 열에는 테스트 그 결과로 상품을 구매했는지 그렇지 않았는지 표시해놓았다.

이제 간단하게 분석을 해보자.

1. 그룹 분석 (피벗 테이블 만들기)

이걸 일단 group, is_purchased 열을 기준으로 pandas의 groupby를 통해 숫자를 카운트한다.

import pandas as pd

purchase_counts = df.groupby(['group', 'is_purchase']).user_id.count().reset_index()

그러면 아래와 같은 모양으로 테이블이 생성될 거다. A, B, C 중 어떤 테스트를 수행했을 때 구매 여부를 구분하여 숫자를 세 놓은 거다.

2. 통계 분석하기

이제 통계적 가설 검정 방법을 선택해야 하는데, 이러한 A/B 테스트의 측정 값은 범주형(샀거나 안 샀거나)이기 때문에 여기서는 카이제곱(Chi Square) 검정을 활용해야 한다.

아래와 같이 간단히 수행할 수 있다.

'''
contingency = [[A_purchase , A_no_purchase ],
               [B_purchase , B_no_purchase ],
               [C_purchase , C_no_purchase ]]
'''

contingency = [[316, 1350],
               [183 , 1483],
               [83 , 1583]]


from scipy.stats import chi2_contingency

chi2, pval, dof, expected = chi2_contingency(contingency)

print(pval)

chi2_contingency는 총 네 개의 결과 값을 돌려주는데, 이 중 두 번째가 p-value다. 확인해서 만약 0.05 보다 작으면 집단 간 유의한 차이가 있다는 결론을 내릴 수 있다.

이게 끝이다.


너무 간단한 예를 써놨나…

추천 글

댓글 남기기