고동의 데이터 분석

[분석] 장바구니 분석에 대한 고민들

by 소라고동_

이번 글은 장바구니 분석(=연관성 분석)을 진행하면서 공부하고 고민했던 내용들을 담았습니다.


0. 들어가며

커머스 회사에서 업무를 하다 보면 자주 접하게 되는 개념 중 하나는 '장바구니'입니다.

실제 내 장바구니.. 목적은 간장계란밥..

장바구니는 고객들이 우리 플랫폼에서 어떤 상품을, 얼마나, 자주 담는지를 보여주기 때문인데요.

이번 글에서 이야기할 장바구니 분석은 '고객들이 어떤 상품을 장바구니에 담는지?'에서 한 단계 더 들어가 '고객들이 어떤 상품들을 한 장바구니에 '함께' 담는지?'를 살펴보기 위한 분석을 의미합니다.

장바구니 분석으로 많이 들어보셨을 사례로는 '기저귀를 구매한 고객은 맥주를 함께 구매한다'는 예시가 있죠.

이번 글에서는 이 장바구니 연관 분석을 하며 공부했던 부분과 고민했던 내용들을 담아보려 합니다.

 

 


1. 장바구니 분석(= 연관성 분석)이란?

장바구니 분석이란 위에서 간단하게 이야기했듯 '하나의 장바구니에 어떤 상품을 함께 담는지'에 대한 분석을 이야기합니다.

- 장바구니 분석 (= 연관성 분석)
  : 고객의 구매 데이터를 분석하여 서로 연관성이 높은 상품을 파악하는 분석

이러한 분석은 추천 시스템에서 사용하기도 하고 비즈니스 관점에서 고객들의 패턴을 분석하기 위해서 사용되기도 하는데요.

저는 후자의 경우였고 구체적으로는 '특정 카테고리의 상품을 어떤 상품과 함께 담는지'를 살펴보고 마케팅 전략을 도출하려는 목적으로 분석을 진행하게 되었습니다.

 

1.1. 장바구니 분석의 주요 지표

이렇게 장바구니 분석을 할 경우에는 연관성을 확인할 수 있는 몇 가지 지표를 활용하게 되는데요.

대표적으로는 지금 소개해드리는 3가지 지표를 활용합니다.

아래 지표들에 대해 설명하기 앞서 이해를 돕기 위해 예시 데이터를 먼저 정의하고 시작을 해보겠습니다.

예시 데이터
   - 상품 A를 구매한 주문 건수 = 200건
   - 상품 B 를 구매한 주문 건수 = 400건
   - 상품A와 상품 B 를 함께 구매한 주문 건수 = 100건
   - 전체 주문건수 = 1,000건

 

1) 지지도 (Support)

지지도 (Support)
  = 상품 A와 상품 B가 동시에 주문될(=장바구니에 담길) 확률 
  = 전체 장바구니 중 상품 A, B 가 함께 담겨있는 장바구니 수
  = 상품 A, B 가 함께 담겨있는 장바구니 수 / 전체 장바구니 수
  = P(A∩B) 

지지도의 정의와 계산식을 살펴보면 아시겠지만, 이 값이 높을수록 두 상품을 함께 담은 경우가 많다는 것을 의미합니다.

즉, '지지도가 높을수록 두 상품의 연관도가 높다'라고 해석이 됩니다.

위의 예시 데이터로 지지도를 계산해 보면, 100건 / 1,000건 = 10% 라는 수치가 나오게 됩니다.
상품 A와 B의 지지도 = 10% 라고 정의가 되죠.

 

 

2) 신뢰도 (Confidence)

신뢰도 (Confidence)
  = 상품 A를 구매한 고객이, 상품 B도 구매할 확률
  = 상품 A를 담은 장바구니 중 상품 B도 담은 장바구니 수
  = P(B|A) = P(A∩B) / P(A)
  = A와 B를 모두 포함하는 거래수​ / A를 포함하는 거래수
  = 지지도 / P(A) 

신뢰도는 지지도보다 조금 더 연관성을 보여주는 것처럼 보입니다.

지지도가 단순히 같이 상품이 담긴 경우를 이야기한다면, 신뢰도는 A라는 상품이 담겨있을 때 B 도 함께 담겨있을 확률을 이야기하기 때문인데요.

신뢰도는 상품을 함께 담는 것에 대한 방향성을 보여주기도 합니다.

 

예시 데이터로 신뢰도를 계산해 보면 아래와 같이 계산이 됩니다. 
Confidence (상품 A ~ B) = 100건 /200건 = 50%
Confidence (상품 B ~ A) = 100건 /400건 = 25%

 

지지도와 다르게 신뢰도는 두 가지 값이 나오게 되는데요.

위의 수치를 해석하면 어떻게 될까요?

Confidence (상품A ~ B) = 100건 /200건 = 50%
  = 상품 A를 구매한 사람들의 50%가 상품 B를 함께 구매했다는 의미 
Confidence (상품B ~ A) = 100건 /400건 = 25%
  = 상품 B를 구매한 사람들의 25%가 상품 A를 함께 구매했다는 의미 

 

수치 그대로 해석을 해보면,

= 상품 A 를 구매한 고객이 상품 B를 구매할 가능성은 50%인데, 상품 B를 구매한 고객이 상품 A를 구매할 가능성은 25%이다.

= 상품 A를 구매한 고객들의 상품 B를 구매할 가능성은 높지만, 상품 B를 구매한 고객들이 상품 A를 구매할 가능성은 비교적 낮다.

= 즉, 상품 A와 B의 소비 패턴이 다르다.

 

이 신뢰도는 통계학 시간에 배운 '조건부 확률'과 개념이 같은데요.

신뢰도를 조금 더 잘 이해하기 위해서 조건부 확률에 대해서 한 번 살펴봅니다.

조건부 확률 (Conditional probability)
  - 어떤 사건이 발생했다는 가정 하에 다른 사건이 발생할 확률
  - 두 사건의 인과관계(선후관계)를 이야기하는 것은 아님
    ㄴ 즉, 사건 A가 발생했기 때문에 사건 B가 발생했다고 해석할 수 없음

신뢰도는 A 상품을 구매했을 때 B 상품을 구매할 확률을 보여줘서 활용도가 높은 값이라고 생각을 하는데요.

그렇지만 이 조건부 확률에는 조심할 점이 있습니다.

만약 각각의 상품이 원래도 잘 팔리는 인기 상품이거나, 판매량이 적은 상품일 경우인데요.

예시를 들어서 설명을 하면 아래와 같습니다.

 

상품 A, B 가 인기상품이라서 잘 팔리는 경우를 먼저 예시를 돌어보면요.

상품 A 구매 건수 = 5,000건, 상품 B 구매건수 = 4,000건, 두 상품 함께 구매한 경우 3,000건인 경우,
   Confidence(상품 A ~ B) = 3,000건 / 5,000건 = 60% 
   Confidence(상품 B ~ A) = 3,000건 / 4,000건 = 75% 

위 신뢰도 값은 정말로 두 상품의 관계성이 있어서 높은 조건부 확률 (=신뢰도)이 계산되었다기보다는,

단순히 자주 구매가 되는 상품이기 때문에 동시에 구매한 경우가 많아지고 이에 따라 신뢰도가 높아 보이는 현상이 발생한 것입니다.

이와 반대로 니치한 상품이라 구매가 적은 경우도 동일한 원리로 신뢰도가 낮아 보이는 경우가 발생합니다.

 

그렇기 때문에 이러한 부분을 보완해 줄 다른 지표가 필요한데요.

그 지표가 바로 세 번째로 살펴볼 향상도라는 지표입니다.

 

 

3) 향상도 (Lift)

향상도 (Lift)
  = A를 구매하지 않았을 때 B를 구매할 확률 대비 A를 구매했을 때 B를 구매할 구매 확률의 증가 비율
  = 상품 B 가 상품 A와 함께 구매될 확률이, 상품 B 단독으로 구매될 확률보다 얼마나 높은지?
  = P(A∩B) / P(A) * P(B)
  = (A와 B를 포함하는 거래수 ∗ 전체 거래수) / (A 포함 거래수 ∗ B 포함 거래수)​
  = 신뢰도 / P(B)

향상도는 두 상품이 독립적으로 구매되었을 가능성 대비 실제로 함께 구매된 비율을 나타냅니다.

즉, 두 상품 간의 연관성이 단순히 각 상품의 개별적 인기도 때문인지, 아니면 실질적인 관계가 있는지를 평가한다는 것이죠.

 

예시 데이터로 향상도를 구해보면 아래와 같습니다.

향상도 (Lift)
  Lift (상품 A ~ B) = 0.5 / 0.4 = 1.25
  Lift (상품 A ~ B) = 0.25 / 0.2 = 1.25

 

위와 같이 계산된 향상도는 1을 기준으로 판단하게 되는데요.

- 향상도 > 1이라면, 양의 상관성을 가짐
- 향상도 = 1이라면, 상관성 없음
- 향상도 < 1이라면, 음의 상관성을 가짐

 

이 향상도를 신뢰도와 함께 사용한다면 신뢰도가 가져오는 착각을 어느 정도 보완할 수 있습니다.

A와 B 모두 인기가 많아서 많이 판매된다고 하더라도, Lift가 1에 가깝다면 실제로 두 상품 간에는 연관성이 거의 없다고 판단하는 식이죠.

 

 

1.2. 주요 지표를 함께 해석하기

위에서 살펴봤듯 지표들은 각각이 가지는 의미가 다릅니다.

그렇기 때문에 각 지표들은 그 하나로도 의미가 있지만 함께 살펴봤을 때 더 큰 의미를 가질 수 있는데요.

위 지표들을 바라보는 방법을 간단하게 이야기해 보면 아래와 같이 설명할 수 있습니다.

1) A 상품을 구매할 때 B 상품도 구매하는 경향성을 확인하고 싶다.
    → '신뢰도' 활용

2) 그런데 두 상품을 절대적으로 함께 구매하는 Case 가 많은가? 만약 적다면 신뢰도가 크게 의미가 없을 수 있다.
    → '지지도' 활용 (최저 수준을 정해서 필터링하는 경우가 많음)

3) 만약 신뢰도도 높고 지지도도 높다면 이 상황이 정말 규칙성이 있어서 그런 것인가? 아니면 우연히 발생한 일인가?
    → '향상도'  활용

즉, '신뢰도가 높고, 지지도도 일정 수준 이상이며 향상도가 1보다 큰가?'를 확인해야 함

이 이외에도 다양한 방식으로 지표들을 살펴볼 수 있겠지만 저는 이러한 방식으로 지표를 바라봤습니다.

 

 


2. 장바구니 분석을 하며 느낀 고민들

장바구니 분석에서 사용하는 주요 지표를 살펴봤는데요.

이젠 그 분석을 진행하며 고민했던 부분들을 정리해보려 합니다.

 

2.1. 여러 고민들

- 연관성을 살펴볼 단위를 어떻게 설정해야 할까?

상품을 나누는 단위가 대카테고리 / 중카테고리 / 소카테고리 / 상품 단위로 구분이 된다면, 어느 수준의 단위에서 연관성을 살펴볼지 결정을 해야 했습니다.

무조건 상세하게 살펴보는 것이 좋다는 생각에 상품 단위로 살펴볼 수 있겠지만, 기준이 세세해질수록 지표들의 수치가 작게 계산되기 때문에 오히려 연관성이 잘 보이지 않는 문제가 발생할 수 있었습니다.

그렇기 때문에 적절한 수준이 필요했는데요.

제가 중점으로 살펴볼 카테고리는 중카테고리 단위에서 충분히 상품의 특성을 잘 반영하여 구분할 수 있었고,

여러 단위로 지표들을 러프하게 뽑아본 뒤 지표를 살펴봤을 때에도 중카테고리 단위로 살펴보면 충분하다는 판단이 들어 그렇게 단위를 정했습니다. 

 

이 부분은 장바구니 분석을 하는 목적에 따라 달라질 텐데요.

- 연관 상품을 추천해 주는 식의 상품 단위의 추천이 필요할 경우엔 단위를 개별 상품 단위로 설정
- 한정된 장바구니 크기 안에서 카테고리별 연관성을 살펴볼 경우에는 대카테고리 기준으로 설정

 

만약 너무 세세한 단위를 선정했을 경우에는 '대상 상품의 범위를 좁혀서 진행하는 것이 좋지 않을까?'라는 생각도 들었습니다.

 

 

- 각 지표의 기준을 어떻게 설정해야 할까?

'각각의 지표들을 봤을 때 어느 정도면 높다고 판단, 어느 정도면 낮다고 판단하면 될까?'라는 기준이 필요했는데요.

저의 경우에는 각 코호트별로 차이를 살펴보고자 했던 목적이라 위에서 언급한 주요 지표를 살펴보며 코호트별 지지도, 신뢰도, 향상도의 차이가 큰 조합을 살펴보는 방식으로 살펴봤습니다.

'해당 카테고리를 잘 구매하는 고객들이 담는 상품과 그렇지 않은 고객들이 담는 상품의 차이가 있는지?'에 대한 확인이 필요했었거든요.

 

만약 절대적으로 지표가 높고/낮음의 기준을 세워야 한다면, 

대상이 되는 '전체 장바구니의 수'와 위에서 정한 '상품 분류 수준' 등을 고려해서 분석 목적에 맞는 기준을 정해야 할 것 같다는 생각이 들었습니다.

 

 


3. 끝맺으며

이렇게 이번 포스팅에서는 장바구니 연관성 분석에 대해서 살펴봤는데요.

모든 분석이 그렇겠지만 특히 이번 분석은 지표의 기준을 잡아가는 과정이 중요하면서 어려웠습니다.

이 부분은 분석의 목적에 따라 너무나도 달라질 것 같다는 생각이 들었는데요.

 

저는 이 분석을 진행할 때 '어떤 상품을 함께 담는가?'를 상품 단위로 살펴보고자 했던 것이 아니라,

'이 카테고리를 꾸준히 잘 사는 고객들은 어떤 특성을 가지고 있는지 살펴보고, 그렇지 못한 고객들을 잘 사도록 만들기 위해서 어떤 액션을 해야 하는가?'에 대한 분석 주제의 한 부분으로 장바구니 분석을 선택했었습니다.

그렇기 때문에 코호트별 카테고리 침투율과 해당 카테고리 구매 시 사용한 쿠폰 등을 함께 살펴보며 분석을 진행했었는데요.

 

'장바구니 분석에 사용되는 지표의 개념들을 이해하고 있다면 다양한 분석에 하나의 도구로 사용해 볼 수 있지 않을까?'라는 생각으로 이번 포스팅을 정리해 봤습니다.

 

고객의 장바구니는 다양하기에 확실히 이 부분들을 건드린다는 것이 재미가 있었던 분석이었습니다.

이렇게 바구니에 붕어빵만 담을 수도 있고...

 

읽어주셔서 감사합니다!

블로그의 정보

고동의 데이터 분석

소라고동_

활동하기