연관분석
- 비지도학습
- 장바구니 분석 = 서열 분석
- 각 장바구니 상품 간의 연관 규칙을 발견하는 모델링 기법
- 조건과 반응의 관계를 확률적으로 설명하는 기법
- 활용: 번들 상품, 진열 변경, 할인 쿠폰 발급, 추천 상품 노출
연관분석 데이터 셋(변경 전)
구매번호 상품명 수량
1 맥주
1 오징어
1 치즈
2 소주
2 맥주
2 라면
↓ 코드로
연관분석 데이터 셋(변경 후)
vlist = [['맥주', '오징어', '치즈'],
['소주', '맥주', '라면'],
['맥주', '오징어'],
['라면', '김치', '계란'],
['맥주', '소세지']]
평가 지표
1. 지지도(support)
- 추천 연관 강도를 얼마나 지지할 수 있는 지에 대한 척도
- 너무 소수를 위한 추천 정책은 하지 않을 때 적절히 조절하여 기준값으로 사용(특정 지지도 이상일 경우만 출력되도록)
** Support = P(A∩B)
= A와 B를 동시 구매 건수 / 전체 구매 건수
예) 맥주와 오징어의 지지도: 2/5 = 0.4
2. 신뢰도(Confidence)
- 두 상품의 연관 강도
- 조건부 확률로 계산(A라는 상품 구매 중 B상품 구매 비율)
** Confidence = P(B|A)
= P(A∩B) / P(A)
예) 맥주 → 오징어 신뢰도: 2/4 = 0.5
3. 향상도(Lift)
- 두 상품의 연관 강도가 우연히 강해지는 경우를 제외한 확률(우연에 의한 해석을 배제한 확률)
- 신뢰도를 반응 상품 확률로 나눈 값으로 정의
** Lift = Confidence / P(B)
(단, A 상품 구매 후 B 상품 구매 가정)
** 해석
Lift > 1 : 우연에 의한 구매 증가가 아님(강한 연관성)
Lift = 1 : 두 상품의 구매가 독립적
Lift < 1 : 우연에 의한 구매일 확률이 높음(실제 연관성이 강하다라고 보기 어려움)
예) 맥주 → 오징어 향상도: (2/4) / (2/5) = 1.25
추천 강도가 높으면서도, 우연에 의한 구매가 아님. 충분히 추천을 할 만한 가치가 있음.
지지도가 0.4면 꽤 높은 편. 실제로 0.1 이상을 찾기가 어려움. 상품이 다양하기 때문에.
예제
A 편의점의 최근 1년 장바구니는 총 500개로 확인되었다.
그 중 각각의 구매 횟수가 다음과 같다고 가정하자
군고구마 구매 횟수 : 50
군고구마 우유 구매 횟수: 25
우유 구매 횟수: 50
삼각김밥 구매 횟수: 100
삼각김밥, 컵라면 구매 횟수: 80
컵라면 구매 횟수: 90
불닭볶음면 구매 횟수: 5
불밝볶음면, 스트링 치즈 구매 횟수: 4
스트링 치즈 구매 횟수: 10
1. 군고구마 ⇒ 우유 추천
- 지지도: 25 / 125 = 0.2
- 신뢰도: 25 / 75 = 0.333
- 향상도: 0.333 / (75/125) = 0.555
2. 삼각김밥 ⇒ 컵라면 추천
- 지지도: 80 / 270 = 0.296
- 신뢰도: 80 / 180 = 0.444
- 향상도: 0.444 / (170/270) = 0.705
3. 불닭볶음면 ⇒ 스트링치즈 추천
- 지지도: 4 / 19 = 0.21
- 신뢰도: 4 / 9 = 0.444
- 향상도: 0.444 / (14/19) = 0.60
예제 - 마트 장바구니 연관 분석
1. 데이터 로딩
2. 연관 분석 모듈 설치 및 로딩
pip install mlxtend
3. 장바구니별 상품 결합 ***
(이미 되어 있으므로 생략)
4. 트랜잭션 데이터 *** (연관분석 fitting용 데이터)
5. 연관분석 수행
출력 결과 는 차례로, 조건변수, 반응변수, 조건과 반응 모두에 대한 support, confidence, lift
'배우기 > 복습노트[Python과 분석]' 카테고리의 다른 글
[복습] Python | 분석 | 회귀분석(2) - (전통)회귀분석 총정리 + 하루끝(20240215) (0) | 2024.03.04 |
---|---|
[복습] Python | 분석 | 연관분석(2) (0) | 2024.03.04 |
[복습] Python | 분석 | 상호작용(=교호작용, interaction effect) + 하루끝(20240213) (0) | 2024.02.13 |
[복습] Python | 분석 | 데이터 불균형(클래스 불균형) (0) | 2024.02.13 |
[복습] Python | 분석 | 결측치 처리 (0) | 2024.02.12 |