연관 규칙 분석이란?
데이터 기반 의사 결정 중 기본적 통계와 확률을 이용한 기법인 연관 규칙에 대해 알아보겠습니다. "맥주를 사면 기저귀를 같이 산다"와 같이 데이터를 기반으로한 진열 방식도 기존과는 달라지고 있다. 대형 마트 혹은 업체 간 경쟁이 치열한 상황에서 고객의 구매 이력 데이터를 바탕으로 상품을 진열한다. 그렇다면 연관 규칙은 무엇인지 개요부터 시작하도록 하자.개요
- 기업의 데이터베이스에서 상품의 구매, 서비스 등 일련의 거래 또는 사건들 간의 규칙을 발견하기 위한 분석
- 장바구니 분석(Market Basket Analysis): 장바구니에 무엇이 같이 들어 있는지에 대한 분석ex) 주말을 위해 목요일 기저귀를 사러 온 30대 직장인 고객은 맥주도 함께 사감
- 순차분석(Sequence Analysis): 구매 이력을 분석해서 A품목을 산 후 추가 B품목을 사는지를 분석ex) 휴대폰을 새로 구매한 고객은 한달 내에 휴대폰 케이스를 구매
형태
조건과 반응의 형태 (if - then)의 확률과 같다. 즉 만일 A가 일어나면 B가 일어난다.측도
- 지지도(Support) : 전체 거래 중 항목 A와 항목 B를 동시에 포함하는 거래의 비율로 정\( support(A\to B)=P(A) or P(A, B) \)
- 신뢰도(Confidence) : 항목 A를 포함한 거래 중에서 항목 A와 항목 B가 같이 포함될 확률이며 연관성의 정도를 파악할 수 있다.\( confidence(A\to B)=\frac{P(A\cap B)}{P(A)} \)
- 향상도(Lift) : A가 주어지지 않았을 때의 품목 B의 확률에 비해 A가 주어졌을 때의 품목 B의 확률의 증가 비율. 연관규칙 A → B는 품목 A와 품목 B의 구매가 서로 관련이 없는 경우에 향상도가 1이 된다.\( lift(A\to B)=\frac{P(A\cap B)}{P(A) \times P(B)} \)
만약 시계열 특성을 가지는 데이터는 어떻게 할 수 있을까? 사건 A와 사건 B에 시계열 특성을 부여하면 된다. 예를 들어, 1개월 전 사건 A가 발생할 확률, 당월 사건 A가 발생할 확률 등 데이터를 추가로 가공하여 적용하면 시계열 특성을 고려 할 수 있다.
간단한 Python 패키지 Apriori 활용해서 임의의 dataset에 대한 연관 규칙 분석을 다음과 같이 쉽게 사용할 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 | from mlxtend.frequent_patterns import apriori from mlxtend.frequent_patterns import association_rules # df = dataframe # 지지도 수가 많을 수 있으므로 min_support 로 일정 이상의 지지도만 도출 (default=0.5) datasets = apriori(df, min_support=0.5, use_colnames=True) # 최소 신뢰도 0.5 이상인것만 추출 rules = association_rules(datasets, metric='confidence', min_threshold=0.5) # 최소 신뢰도 0.7 이상인것만 추출 rules = association_rules(datasets, metric="lift", min_threshold=0.7) |
일반적인 절차
- 최소 지지도 선정 (*보통 5%)
- 최소 지지도를 넘는 품목 분류
- 2가지 품목 집합 생성
- 반복 수행으로 빈발품목 집합 선정
장점과 단점을 표로 정리하면 다음과 같다.
아쉬운 점은 사건 A와 사건 B의 1대1 규칙만 가능하다. 다대다는 어렵고 인과관계를 설명하는 것이 아니므로 주의하자.|
장점 |
단점 |
|
탐색적 기법
조건 반응으로 표현되는 연관성 분석 결과를 쉽게 이해할 수 있다 |
상당한 수의 계산 과정 |
|
강력한 비목적성 분석기법 |
적절한 품목의 결정 |
|
사용이 편리한 분석
데이터의 형태 |
품목의 비율 차이 |
|
계산의 용이성 |
|

댓글
댓글 쓰기