연관규칙
Association Rules
비즈니스 애널리틱스 · 9주차
장바구니 분석과 연관규칙
- 장바구니 분석(market basket analysis): 거래 기록에서 함께 구매되는 상품을 찾는 분석
- 연관규칙(association rule): "A를 포함하는 거래는 B도 포함함" 형태의 규칙
- 활용 분야
- 진열: 함께 구매되는 상품의 배치
- 묶음 판매와 쿠폰: 함께 구매되는 상품의 묶음 할인
- 온라인 추천: "이 상품을 구매한 고객이 함께 구매한 상품" 목록
- 우편·문자 마케팅: 지난 구매 기록에 맞춘 권유 상품 선정
- 데이터 분석의 필요성: 상품 100개의 두 상품 조합만 4,950가지
이번 주의 결정 문제
어떤 품목을 산 고객에게 어떤 품목을 함께 권할 것인가
- 교재 자료: 한 식료품점의 30일 치 계산대 영수증 9,835장, 품목 169개
- 랩 자료: 책 동아리 Charles Book Club 고객 4,000명의 분야별 구매 기록
- 필요한 도구
- 함께 구매되는 정도를 숫자로 재는 지표
- 기준을 넘는 조합을 빠짐없이, 빠르게 찾는 방법
강의 구성
- 거래 자료와 기호
- 규칙의 평가 지표: 지지도, 신뢰도, 향상도
- frequent itemset과 Apriori 알고리즘
- frequent itemset에서의 규칙 생성
- 결과 해석 시 주의 사항
- 모든 계산 예제: 식료품점 영수증 9,835장, 교재와 같은 자료
예제 자료: 식료품점 영수증 9,835장
- 출처: Hahsler·Hornik·Reutterer(2006), R
arules패키지의 Groceries - 한 식료품점의 30일 치 실제 계산대 기록
- 행: 영수증 1장 = 거래 1건
- item: 품목 범주 169개
- whole milk 우유, other vegetables 기타 채소, rolls/buns 롤빵, soda 탄산음료, root vegetables 뿌리채소, yogurt 요구르트 등
- 값: 1은 그 영수증에 있음, 수량과 가격은 없음
- 예: 영수증 6은 whole milk와 yogurt를 함께 산 거래
| 영수증 | whole milk | other vegetables | rolls/ buns | soda | root vegetables | yogurt |
|---|---|---|---|---|---|---|
| 1 | 0 | 0 | 0 | 0 | 0 | 0 |
| 2 | 0 | 0 | 0 | 0 | 0 | 1 |
| 3 | 1 | 0 | 0 | 0 | 0 | 0 |
| 4 | 0 | 0 | 0 | 0 | 0 | 1 |
| 5 | 1 | 1 | 0 | 0 | 0 | 0 |
| 6 | 1 | 0 | 0 | 0 | 0 | 1 |
| 7 | 0 | 0 | 1 | 0 | 0 | 0 |
| 8 | 0 | 1 | 1 | 0 | 0 | 0 |
| 9 | 0 | 0 | 0 | 0 | 0 | 0 |
| 10 | 1 | 0 | 0 | 0 | 0 | 0 |
영수증 9,835장 중 앞 10장, 품목 6개만 표시
기본 용어와 기호
| 용어와 기호 | 정의 | 예제의 예 |
|---|---|---|
| item | 분석 대상인 상품 하나 | whole milk, yogurt 등 169개 |
| itemset | item의 집합 | {yogurt, whole milk} |
| 거래(transaction) \(t\) | 영수증 한 장에서 함께 구매한 item의 집합 | 영수증 2의 \(t_2=\{\textsf{tropical fruit},\textsf{yogurt},\textsf{coffee}\}\) |
| \(N\) | 전체 거래의 수 | \(N=9{,}835\) |
| 포함, \(X\subseteq t\) | 거래 \(t\)가 itemset \(X\)의 item을 모두 가짐 | 영수증 6은 {yogurt, whole milk}를 포함함 |
| 사건 \(A\) | 무작위로 고른 거래 하나가 itemset \(A\)를 포함하는 사건 | 고른 영수증에 yogurt가 있음 |
| \(P(A)\) | 사건 \(A\)의 확률, 거래 자료에서는 \(A\)를 포함한 거래의 비율 | \(P(\textsf{yogurt})=1{,}372/9{,}835=0.140\) |
연관규칙의 정의
정의공집합이 아니고 공통 item이 없는 두 itemset \(A\), \(B\)에 대하여 "\(A\)를 포함하는 거래는 \(B\)도 포함함"이라는 규칙을 연관규칙이라 하고 \(A\Rightarrow B\)로 표기함
- \(A\): antecedent, 규칙의 앞부분으로 고객이 이미 고른 itemset
- \(B\): consequent, 규칙의 뒷부분으로 함께 권할 itemset
- 예: {yogurt} ⇒ {whole milk}, {other vegetables, root vegetables} ⇒ {whole milk}
- 방향이 있는 규칙: {yogurt} ⇒ {whole milk}와 {whole milk} ⇒ {yogurt}는 서로 다른 규칙
- 평가 지표: 지지도, 신뢰도, 향상도
지지도의 정의
정의itemset \(X\)의 지지도(support)는 전체 거래 가운데 \(X\)를 포함하는 거래의 비율, 곧 사건 \(X\)의 확률
\[\supp(X)=P(X)\]
- 규칙의 지지도: \(A\)와 \(B\)를 모두 포함한 거래의 비율 \[\supp(A\Rightarrow B)=P(A\cap B)\]
- 거래 자료로 계산: 두 itemset을 모두 포함한 거래 수 ÷ 전체 거래 수
예\(P(\textsf{yogurt}\cap\textsf{whole milk})=551/9{,}835=\mathbf{0.056}\)
- \(P(\textsf{whole milk})=2{,}513/9{,}835=0.256\)
| whole milk 있음 | whole milk 없음 | 합계 | |
|---|---|---|---|
| yogurt 있음 | 551 | 821 | 1,372 |
| yogurt 없음 | 1,962 | 6,501 | 8,463 |
| 합계 | 2,513 | 7,322 | 9,835 |
yogurt와 whole milk를 모두 포함한 영수증
신뢰도의 정의
정의규칙 \(A\Rightarrow B\)의 신뢰도(confidence)는 \(A\)를 포함하는 거래 가운데 \(B\)도 포함하는 거래의 비율
\[\conf(A\Rightarrow B)=P(B\mid A)=\frac{P(A\cap B)}{P(A)}\]
예{yogurt} ⇒ {whole milk}
- yogurt가 있는 영수증: 1,372장
- 그중 whole milk도 있는 영수증: 551장
- \(P(\textsf{whole milk}\mid\textsf{yogurt})=551/1{,}372=\mathbf{0.40}\)
- 의미: yogurt를 산 영수증의 40%에 whole milk도 있음
| whole milk 있음 | whole milk 없음 | 합계 | |
|---|---|---|---|
| yogurt 있음 | 551 | 821 | 1,372 |
| yogurt 없음 | 1,962 | 6,501 | 8,463 |
| 합계 | 2,513 | 7,322 | 9,835 |
사건 \(A\)사건 \(A\cap B\)
신뢰도의 한계
- 규칙 {soda} ⇒ {whole milk}의 신뢰도: \(394/1{,}715=0.23\)
- soda를 산 영수증 1,715장 중 394장에 whole milk
- whole milk의 지지도: \(2{,}513/9{,}835=0.256\)
- soda 구매 여부와 관계없이 영수증 네 장 중 한 장꼴로 whole milk
- 비교: soda 영수증의 whole milk 비율 0.23 < 전체 영수증의 whole milk 비율 0.256
- consequent \(B\)가 흔한 item이면 \(A\)와 관계없이 신뢰도가 높게 나옴
- 필요한 지표: 신뢰도를 consequent \(B\)의 지지도와 비교하는 지표
| whole milk 있음 | whole milk 없음 | 합계 | |
|---|---|---|---|
| soda 있음 | 394 | 1,321 | 1,715 |
| soda 없음 | 2,119 | 6,001 | 8,120 |
| 합계 | 2,513 | 7,322 | 9,835 |
soda 포함soda와 whole milk 포함
향상도의 정의
정의규칙 \(A\Rightarrow B\)의 향상도(lift)는 신뢰도를 consequent \(B\)의 지지도로 나눈 값
\[\lift(A\Rightarrow B)=\frac{P(B\mid A)}{P(B)}=\frac{P(A\cap B)}{P(A)\,P(B)}\]
- 의미: \(A\)를 포함한 거래의 \(B\) 포함 비율이 전체 거래의 \(B\) 포함 비율의 몇 배인지
- \(\lift=1\): \(P(A\cap B)=P(A)\,P(B)\), 곧 사건 \(A\)와 \(B\)가 독립
- \(\lift>1\): \(A\)를 포함한 거래에서 \(B\)가 더 자주 나옴
- \(\lift<1\): \(A\)를 포함한 거래에서 \(B\)가 덜 나옴
향상도의 계산 예
| 규칙 | 신뢰도 \(P(B\mid A)\) | \(P(B)\) | 향상도 |
|---|---|---|---|
| {root vegetables} ⇒ {other vegetables} | \(466/1{,}072=0.435\) | 0.193 | \(0.435/0.193=\mathbf{2.25}\) |
| {yogurt} ⇒ {whole milk} | \(551/1{,}372=0.402\) | 0.256 | \(0.402/0.256=\mathbf{1.57}\) |
| {soda} ⇒ {whole milk} | \(394/1{,}715=0.230\) | 0.256 | \(0.230/0.256=\mathbf{0.90}\) |
- {root vegetables} ⇒ {other vegetables}: other vegetables가 전체 영수증보다 2.25배 자주 나옴
- {soda} ⇒ {whole milk}: 신뢰도는 0.23이지만 whole milk가 전체 영수증보다 덜 나옴
- 신뢰도의 높고 낮음만으로는 규칙의 유용성을 판단할 수 없음
규칙 방향에 따른 지표 변화
| 규칙 | 지지도 | 신뢰도 | 향상도 |
|---|---|---|---|
| {yogurt} ⇒ {whole milk} | 0.056 | \(551/1{,}372=0.402\) | \(\dfrac{551\times9{,}835}{1{,}372\times2{,}513}=1.57\) |
| {whole milk} ⇒ {yogurt} | 0.056 | \(551/2{,}513=0.219\) | \(\dfrac{551\times9{,}835}{2{,}513\times1{,}372}=1.57\) |
- 지지도와 향상도: 식에서 \(A\)와 \(B\)의 자리를 바꿔도 같은 값
- 신뢰도: \(P(B\mid A)\)와 \(P(A\mid B)\)는 분모가 \(P(A)\)와 \(P(B)\)로 달라 방향에 따라 다른 값
- 추천에 쓰는 규칙: 고객이 이미 고른 itemset을 antecedent로 둔 규칙
- yogurt를 담은 고객에게 whole milk를 권하는 근거: {yogurt} ⇒ {whole milk}의 신뢰도 0.40
item 수에 따른 규칙 수
| item 수 \(k\) | itemset 수 \(2^k-1\) | 규칙 수 \(3^k-2^{k+1}+1\) |
|---|---|---|
| 5, 예제의 5품목 | 31 | 180 |
| 20 | 1,048,575 | 3,484,687,250 |
| 169, 식료품점 전체 | 약 \(7.5\times10^{50}\) | 약 \(4.3\times10^{80}\) |
- 규칙 수의 유도
- 각 item을 \(A\)에 넣기, \(B\)에 넣기, 어디에도 넣지 않기 중 하나로 배정: \(3^k\)가지
- \(A=\varnothing\)인 배정 \(2^k\)가지와 \(B=\varnothing\)인 배정 \(2^k\)가지를 뺌
- \(A=B=\varnothing\)인 배정 1가지는 두 번 빠졌으므로 다시 더함
- 모든 규칙의 계산은 불가능하므로 탐색 범위를 줄이는 기준이 필요함
연관규칙 탐색의 큰 그림
거래 자료영수증 9,835장
→
① Apriori지지도로 거름
→
frequent itemset예제 15개
→
② 규칙 생성신뢰도로 거름
→
규칙예제 4개
| ① Apriori | ② 규칙 생성 | |
|---|---|---|
| 답하는 질문 | 무엇이 자주 함께 팔렸나 | 누구에게 무엇을 권할까 |
| 하는 일 | 지지도가 기준 이상인 item 조합을 찾음 | 조합을 이미 고른 쪽과 권할 쪽으로 나누고 신뢰도로 거름 |
| 결과 | frequent itemset, 방향 없음 | 규칙 \(A\Rightarrow B\), 방향 있음 |
| 기준 | 최소 지지도 \(s_{\min}=0.02\) | 최소 신뢰도 \(c_{\min}=0.4\) |
| 예 | {whole milk, other vegetables, root vegetables}: 영수증 228장에서 함께 팔림 | {other vegetables, root vegetables} ⇒ {whole milk}: 두 채소를 담은 고객에게 우유를 권함 |
| 코드 | apriori | association_rules |
- 규칙을 고른 다음: 향상도로 원래 잘 팔리는 상품이라서 신뢰도가 높게 나온 것은 아닌지 확인
frequent itemset의 정의
정의분석가가 정한 최소 지지도 \(s_{\min}\)에 대하여 \(P(X)\ge s_{\min}\)인 itemset \(X\)를 frequent itemset이라 함
- 뜻: 기준 이상으로 자주 함께 팔린 item 조합
- 예: \(s_{\min}=0.02\)이면 영수증 9,835장 중 197장 이상에서 함께 나온 itemset
- 이후 예제: 가장 많이 팔린 품목 5개, \(s_{\min}=0.02\), \(c_{\min}=0.4\)
- whole milk, other vegetables, rolls/buns, soda, root vegetables
- 코드
- ①
itemsets = apriori(df, min_support=0.02, use_colnames=True) - ②
rules = association_rules(itemsets, len(df), metric="confidence", min_threshold=0.4)
- ①
Apriori 원리
성질itemset에 item을 더하면 지지도는 같거나 줄어듦
\(X\subseteq Y\)이면 \(P(Y)\le P(X)\)
\(X\subseteq Y\)이면 \(P(Y)\le P(X)\)
- 근거: \(Y\)를 포함하는 거래는 \(Y\)의 부분집합 \(X\)도 포함하므로 사건 \(Y\)가 일어나면 사건 \(X\)도 일어남, \(P(Y)\le P(X)\)
- 예: {soda} 0.174, {soda, root vegetables} 0.019, {whole milk, soda, root vegetables} 0.008
- 결론: frequent가 아닌 itemset에 item을 더한 itemset도 frequent가 아님
- 활용: frequent가 아닌 itemset을 포함하는 itemset은 지지도를 세지 않음
예\(s_{\min}=0.02\)에서 {soda, root vegetables}의 지지도 0.019
- {whole milk, soda, root vegetables}, {other vegetables, soda, root vegetables} 등은 세지 않음
Apriori 알고리즘의 절차
- 아이디어: 크기 1 itemset부터 크기를 하나씩 늘리며, 앞 단계에서 남은 frequent itemset으로만 다음 크기의 candidate를 만듦
1. candidate 생성크기 \(k-1\) frequent itemset 두 개를 합쳐 item이 \(k\)개인 itemset을 만듦
→
2. prune크기 \(k-1\) 부분집합 중 frequent가 아닌 것이 하나라도 있으면 버림
→
3. 지지도 계산남은 candidate의 지지도를 거래 자료에서 셈
→
4. 선택지지도가 \(s_{\min}\) 이상인 candidate를 크기 \(k\) frequent itemset으로 남김
- 시작: item 하나짜리 itemset의 지지도를 세어 크기 1 frequent itemset을 고름
- 반복: \(k=2,3,\dots\)에 대하여 위 과정을 반복
- 종료: 새로 남은 frequent itemset이 없을 때
- 빠뜨림이 없는 이유: frequent itemset의 부분집합은 Apriori 원리에 의해 모두 frequent이므로 prune에서 버려지지 않음
Apriori 진행 예: 크기 1
조건: 최소 지지도 \(s_{\min}=0.02\), 영수증 197장 이상
- item 하나짜리 itemset 5개의 지지도를 셈
- 크기 1 frequent itemset: 5개 모두
- 가장 적은 root vegetables도 지지도 0.109로 기준의 다섯 배 이상
| 크기 1 itemset | \(n\) | 지지도 | frequent |
|---|---|---|---|
| {whole milk} | 2,513 | 0.256 | ○ |
| {other vegetables} | 1,903 | 0.193 | ○ |
| {rolls/buns} | 1,809 | 0.184 | ○ |
| {soda} | 1,715 | 0.174 | ○ |
| {root vegetables} | 1,072 | 0.109 | ○ |
Apriori 진행 예: 크기 2
- candidate 생성: 크기 1 frequent itemset 5개에서 두 개씩 합친 10개
- prune: 부분집합이 모두 크기 1 frequent itemset이므로 버릴 것 없음
- 지지도 계산: candidate 10개
- 크기 2 frequent itemset: 9개
- {soda, root vegetables}만 0.019로 탈락
| 크기 2 candidate | \(n\) | 지지도 | frequent |
|---|---|---|---|
| {whole milk, other vegetables} | 736 | 0.075 | ○ |
| {whole milk, rolls/buns} | 557 | 0.057 | ○ |
| {whole milk, soda} | 394 | 0.040 | ○ |
| {whole milk, root vegetables} | 481 | 0.049 | ○ |
| {other vegetables, rolls/buns} | 419 | 0.043 | ○ |
| {other vegetables, soda} | 322 | 0.033 | ○ |
| {other vegetables, root vegetables} | 466 | 0.047 | ○ |
| {rolls/buns, soda} | 377 | 0.038 | ○ |
| {rolls/buns, root vegetables} | 239 | 0.024 | ○ |
| {soda, root vegetables} | 183 | 0.019 | × |
Apriori 진행 예: 크기 3
candidate: 크기 2 frequent itemset 두 개를 합친 크기 3 itemset 10개
| candidate | frequent가 아닌 크기 2 부분집합 | prune | \(n\) | 지지도 | frequent |
|---|---|---|---|---|---|
| {whole milk, other vegetables, root vegetables} | 없음 | 통과 | 228 | 0.023 | ○ |
| {whole milk, other vegetables, rolls/buns} | 없음 | 통과 | 176 | 0.018 | × |
| {whole milk, other vegetables, soda} | 없음 | 통과 | 137 | 0.014 | × |
| {whole milk, rolls/buns, root vegetables} | 없음 | 통과 | 125 | 0.013 | × |
| {other vegetables, rolls/buns, root vegetables} | 없음 | 통과 | 120 | 0.012 | × |
| {other vegetables, rolls/buns, soda} | 없음 | 통과 | 97 | 0.010 | × |
| {whole milk, rolls/buns, soda} | 없음 | 통과 | 87 | 0.009 | × |
| {whole milk, soda, root vegetables} | {soda, root vegetables} | 버림 | 세지 않음 | × | |
| {other vegetables, soda, root vegetables} | {soda, root vegetables} | 버림 | 세지 않음 | × | |
| {rolls/buns, soda, root vegetables} | {soda, root vegetables} | 버림 | 세지 않음 | × |
- prune 3개, 지지도 계산 7개, 크기 3 frequent itemset 1개
Apriori 탐색 결과 요약
| 크기 | 만들 수 있는 itemset | 지지도를 센 candidate | frequent itemset |
|---|---|---|---|
| 1 | 5 | 5 | 5 |
| 2 | 10 | 10 | 9 |
| 3 | 10 | 7 | 1 |
| 4 | 5 | 0 | 0 |
| 5 | 1 | 0 | 0 |
| 합계 | 31 | 22 | 15 |
- 크기 4: 크기 3 frequent itemset이 하나뿐이라 두 개를 합친 candidate가 없어 종료
- 지지도를 센 itemset: 가능한 31개 중 22개
frequent itemset에서의 규칙 생성
- frequent itemset: 방향이 없는 사실
- {whole milk, other vegetables, root vegetables}: 세 품목이 영수증 228장에서 함께 팔림
- 무엇을 먼저 골랐고 무엇을 권할지는 알려 주지 않음
- 규칙: frequent itemset을 두 쪽으로 나눠 방향을 붙인 것
- antecedent \(A\): 고객이 이미 고른 쪽
- consequent \(B\): 함께 권할 쪽
antecedent \(A\)other vegetablesroot vegetables
⇒
consequent \(B\)whole milk
두 채소를 담은 고객에게 우유를 권하는 추천
신뢰도\(A\)를 산 거래 가운데 \(B\)까지 산 거래의 비율, 곧 그 추천의 근거가 얼마나 탄탄한지
\[\conf(A\Rightarrow B)=P(B\mid A)=\frac{P(A\cap B)}{P(A)}\]
규칙 생성의 예: 세 품목 itemset
{whole milk, other vegetables, root vegetables}를 두 쪽으로 나누는 방법 6가지 = 추천 상황 6개
| 규칙 | \(A\)를 산 영수증 | 그중 \(B\)도 산 영수증 | 신뢰도 | \(c_{\min}=0.4\) |
|---|---|---|---|---|
| {other vegetables, root vegetables} ⇒ {whole milk} | 466장 | 228장 | \(228/466=0.49\) | 채택 |
| {whole milk, root vegetables} ⇒ {other vegetables} | 481장 | 228장 | \(228/481=0.47\) | 채택 |
| {whole milk, other vegetables} ⇒ {root vegetables} | 736장 | 228장 | \(228/736=0.31\) | 제외 |
| {root vegetables} ⇒ {whole milk, other vegetables} | 1,072장 | 228장 | \(228/1{,}072=0.21\) | 제외 |
| {other vegetables} ⇒ {whole milk, root vegetables} | 1,903장 | 228장 | \(228/1{,}903=0.12\) | 제외 |
| {whole milk} ⇒ {other vegetables, root vegetables} | 2,513장 | 228장 | \(228/2{,}513=0.09\) | 제외 |
- 분자: 세 품목을 모두 산 영수증 228장으로 모든 규칙에 같음, 분모만 \(A\)를 산 영수증 수로 달라짐
- {other vegetables, root vegetables} ⇒ {whole milk}: 두 채소를 산 영수증 466장 중 228장이 우유도 구매
- {whole milk} ⇒ {other vegetables, root vegetables}: 우유를 산 영수증 2,513장 중 228장뿐, 근거가 약해 제외
frequent itemset에서만 규칙을 만드는 이유
- 규칙의 지지도: 양쪽을 모두 산 거래의 비율, 곧 나누기 전 itemset의 지지도
\[\supp(A\Rightarrow B)=P(A\cap B)=P(Z)\]
- \(Z\): \(A\)와 \(B\)의 item을 모두 담은 itemset, 사건 \(A\cap B\)는 고른 거래가 \(Z\)를 포함하는 사건
- 드물게 함께 팔린 조합에서 나온 규칙: 근거가 되는 거래가 처음부터 적음
- frequent itemset에서만 규칙을 만들면 충분히 자주 함께 팔린 조합에서 나온 규칙만 남음
- 계산: 분모 \(P(A)\)는 Apriori 단계에서 이미 셈
- \(A\)는 frequent itemset의 일부이므로 \(A\)도 frequent itemset
- 거래 자료를 다시 읽지 않고 나눗셈만으로 신뢰도 계산
예제 전체의 규칙 수
| frequent itemset의 item 수 | frequent itemset 수 | 하나에서 나오는 규칙 | 규칙 수 | 신뢰도 0.4 이상 |
|---|---|---|---|---|
| 1 | 5 | 0 | 0 | 0 |
| 2 | 9 | 2 | 18 | 2 |
| 3 | 1 | 6 | 6 | 2 |
| 합계 | 15 | 24 | 4 |
- item 1개인 frequent itemset: 두 쪽으로 나눌 수 없어 규칙이 없음
- item이 \(m\)개인 frequent itemset 하나에서 나오는 규칙: \(2^m-2\)개
- 신뢰도 0.4 이상인 크기 2 규칙: {root vegetables} ⇒ {whole milk} 0.45, {root vegetables} ⇒ {other vegetables} 0.43
mlxtend 결과 표의 열과 기호
| 열 이름 | 기호와 식 | {yogurt} ⇒ {whole milk}의 값 |
|---|---|---|
antecedents | \(A\) | {yogurt} |
consequents | \(B\) | {whole milk} |
antecedent support | \(P(A)\) | 0.140 |
consequent support | \(P(B)\) | 0.256 |
support | \(P(A\cap B)\) | 0.056 |
confidence | \(P(B\mid A)\) | 0.402 |
lift | \(P(B\mid A)/P(B)\) | 1.572 |
association_rules의 둘째 인자: 전체 거래 수 \(N\), 예제에서len(df)= 9,835- 나머지 열
leverage,conviction등은 이 과목에서 사용하지 않음
해석 시 주의: 지지도가 낮은 규칙
향상도의 상한신뢰도는 1을 넘지 않음
\[\lift(A\Rightarrow B)=\frac{P(B\mid A)}{P(B)}\le\frac{1}{P(B)}\]
- 드물게 구매되는 item이 consequent인 규칙: 향상도가 매우 크게 나올 수 있음
- 예: {liquor, red/blush wine} ⇒ {bottled beer}의 신뢰도 0.90, 향상도 11.2
- 근거 영수증: antecedent 21장 중 19장
- 소수 거래의 우연으로 생긴 규칙일 수 있으므로 향상도와 지지도를 함께 판단
| consequent \(B\) | 지지도 | 향상도의 상한 |
|---|---|---|
| whole milk | 0.256 | 3.9 |
| bottled beer | 0.081 | 12.4 |
| 지지도 0.01인 item | 0.01 | 100 |
해석 시 주의: 구매 성향이 다른 고객 집단의 혼합
- 가정: 고객 집단 1, 2가 섞여 있고, 각 집단 안에서는 \(A\)의 구매와 \(B\)의 구매가 독립
| 집단 | 고객 비율 | \(P(A)\) | \(P(B)\) |
|---|---|---|---|
| 1 | \(w\) | \(a_1\) | \(b_1\) |
| 2 | \(1-w\) | \(a_2\) | \(b_2\) |
\[\begin{aligned}
P(A)&=w\,a_1+(1-w)\,a_2\\
P(B)&=w\,b_1+(1-w)\,b_2\\
P(A\cap B)&=w\,a_1b_1+(1-w)\,a_2b_2\\
P(A\cap B)-P(A)\,P(B)&=w(1-w)(a_1-a_2)(b_1-b_2)
\end{aligned}\]
- \(a_1>a_2\)이고 \(b_1>b_2\)이면 우변이 양수, 전체 향상도가 1보다 큼
- 각 집단 안의 향상도가 1이어도 두 집단을 합친 자료의 향상도는 1보다 큼
고객 집단 혼합의 계산 예
| 구분 | 고객 비율 | \(P(A)\) | \(P(B)\) | \(P(A\cap B)\) | 향상도 |
|---|---|---|---|---|---|
| 집단 1: 구매량이 많은 고객 | 0.5 | 0.8 | 0.8 | \(0.8\times0.8=0.64\) | 1 |
| 집단 2: 구매량이 적은 고객 | 0.5 | 0.1 | 0.1 | \(0.1\times0.1=0.01\) | 1 |
| 전체 | 1 | 0.45 | 0.45 | 0.325 | 1.60 |
- 전체의 \(P(A)=0.5\times0.8+0.5\times0.1=0.45\), \(P(B)\)도 0.45
- 전체의 \(P(A\cap B)=0.5\times0.64+0.5\times0.01=0.325\)
- 전체 향상도: \(0.325/(0.45\times0.45)=1.60\)
- 식으로 확인: \(w(1-w)(a_1-a_2)(b_1-b_2)=0.25\times0.7\times0.7=0.1225=0.325-0.2025\)
- 모든 규칙의 향상도가 1보다 크면 구매량이 많은 고객의 영향부터 확인
해석 시 주의: 동시 구매와 추천 효과의 구분
- 연관규칙: 과거 거래에서 \(A\)와 \(B\)가 함께 나온 정도의 요약
- 추천 효과: \(A\)를 구매한 고객에게 \(B\)를 권했을 때 늘어나는 \(B\)의 구매
- 연관규칙으로 추천 효과를 알 수 없는 이유
- 규칙에 잡힌 고객은 권하지 않아도 \(B\)를 구매했을 수 있음
- 고객이 스스로 찾아 함께 담는 상품이면 권유의 효과는 더 작음
- 추천 효과의 측정: 무작위 실험
- \(A\)를 구매한 고객을 무작위로 두 집단으로 나눔
- 한 집단에만 \(B\)를 권함
- 두 집단의 \(B\) 구매율을 2표본 비율검정으로 비교함, 1주차 A/B 검정과 같은 방법
정리
| 개념 | 정의 | 예제의 값 |
|---|---|---|
| 지지도 | \(\supp(A\Rightarrow B)=P(A\cap B)\) | {yogurt} ⇒ {whole milk}: 0.056 |
| 신뢰도 | \(\conf(A\Rightarrow B)=P(B\mid A)\) | {yogurt} ⇒ {whole milk}: 0.40 |
| 향상도 | \(\lift(A\Rightarrow B)=P(B\mid A)/P(B)\) | {yogurt} ⇒ {whole milk}: 1.57 |
| frequent itemset | \(P(X)\ge s_{\min}\)인 itemset | 5품목, \(s_{\min}=0.02\)에서 15개 |
| Apriori 원리 | \(X\subseteq Y\)이면 \(P(Y)\le P(X)\) | {soda, root vegetables}를 포함하는 itemset은 세지 않음 |
| 규칙 생성 | frequent itemset을 antecedent와 consequent로 나눠 방향을 붙이고 신뢰도로 거름 | 규칙 24개 중 신뢰도 0.4 이상 4개 |
| 해석 | 낮은 지지도의 규칙은 지지도와 함께 판단, 고객 집단의 혼합 확인, 추천 효과는 무작위 실험으로 측정 | |