AR (Associated Rule)

연관규칙분석이란?

데이터 속에 숨겨져 있는 패턴, 규칙을 찾아내는 비지도학습 중 하나. (장바구니분석 이라고도 불림) . 상품 추천할때 사용됨

ex) 맥주와 기저귀 사례

상품추천을 위해 사용되는 분석기법들

  • AR (Association Rule): 연관규칙분석
    • 고객의 대규모 거래데이터로부터 함께 구매가 발생하는 규칙을 도출. 고객이 특정 상품 구매시 이와 연관성 높은 상품을 추천
  • Sequence Analysis : 순차분석
    • 시간의 흐름에 따른 구매패턴을 도출
  • Collaborative Filtering
    • 모든 고객의 상품 구매 이력을 수치화하고, 고객간의 상관계수를 비교해서 서로 높은 상관(A,B)이 인정되는 경우 고객 B가 구입 완료한 상품중에 고객 A가 미구입한 상품을 고객 A에게 추천
    • 유사 고객 찾기
  • Content-based recommendation
    • 고객이 과거에 구매했던 상품들의 속성과 유사한 다른 상품 아이템중 미구매 상품을 추천
    • 유사 상품 찾기
  • Who-which model
    • 특정 상품(군)을 추천하는 모형을 개발하여 구매 가능성 높은 고객(군)대상에게 상품 추천

연관규칙분석

규칙

if condition then result

if A -> B

연관규칙

특정 사건이 발생했을때 함께 발생하는 또다른 사건.의 규칙

  • 항목집합 (Item set) : 전체 Item중에서 가능한 부분 집합 (전체 2의 l승 개 , l : item 개수)
  • 항목집합의 집합(The set of item sets) : Item의 부분집합들로 구성된 집합.

연관규칙이란 특정 항목 집합이 발생했을때 또 다른 항목 집합이 발생하는 규칙을 말한다.

ex ) {남성, 금요일, 맥주} -> {기저귀}

img

연관규칙 척도

연관규칙의 흥미를 평가할 수 있는 척도들

  • 지지도
  • 신뢰도
  • 향상도
  • IS측도
  • 교차지지도

연관 규칙 평가 척도가 중요한 이유

연관 규칙 분석을 하게되면 수십, 수백, 수천개의 association rule들이 쏟아지기 때문에 육안으로 일일이 보고 평가하기 어려움

괜찮은 Association rule을 알아내는데 평가 척도들을 사용

가정

X,Y는 서로 공통원소가 없는 항목들의 집합

N : 전체 거래 건수

n(X), n(Y)는 항목집합 X,Y의 거래 건수 (row 개수)

지지도 (Support)

X,Y의 지지도는 전체 거래 건수중에서 항목집합 X,Y를 모두 포함하는 거래 건수의 비율을 말한다. 지지도는 빈도가 높은 규칙을 찾거나, 불필요한 연산을 줄일때(prunning : 가지치기) 사용됩니다

지지도(support) s(X→Y)

= X와 Y를 모두 포함하는 거래 수 / 전체 거래 수 = n(X∪Y) / N

신뢰도 (Confidence)

항목집합 X를 포함하는 거래 중에서 항목 집합 Y도 포함하는 거래비율(조건부확률)을 말한다. 신뢰도가 높을 수록 유용한 규칙일 가능성이 높음

신뢰도(Confidence) c(X→Y) 

= X와 Y를 모두 포함하는 거래 수 / X가 포함된 거래 수 = n(X∪Y) / n(X) 

향상도 (Lift)

X가 주어지지 않았을때의 Y확률 대비, X가 주어졌을 때 Y의 확률 증가 비율을 말함. 향상도가 1보다 크면 +관계, 작으면 -관계. X,Y가 독립이면 Lift = 1(우연적 기회)

향상도(Lift)

= 연관규칙의 신뢰도/지지도 = c(X→Y) / s(Y)

척도들 사용방법

보통 3개의 척도 모두 사용

일반적으로 특정 지지도, 신뢰도 이하의 rule은 거르고, 향상도로 내림차순 sort해서 평가하는 식으로 이용.

분석가의 경우 신뢰도, 향상도가 높은 rule을 중점으로 찾는 경향이 있다. 사업가의 경우에는 그 rule을 적용했을때 기대되는 매출 증가분이 얼마인지에 집중하게 되는데, 이는 지지도가 잘 설명할 수 있다.

그리고 지지도가 매우 낮으면 몇개 소수의 관측치의 치우침만으로도 신뢰도가 향상도가 크게 영향을 받게되어 우연에 의한 규칙이 잘못 선별될 수 있다.

기타 보완 척도들

IS (Interest - Support)측도

IS : 향상도와 지지도의 곱에 제곱근을 취한 값.

IS를 사용하여 지지도나 향상도 둘중 하나라도 낮은 rule을 거를 수 있음

교차지지도(cross support)

최대 지지도에 대한 최소 지지도의 비율

의미없는 연관규칙의 생성을 방지하기 위하여 사용.

지지도의 최소값과 최대값의 차이가 클 수록 교차 지지도는 낮아지게 되며, 이 비율이 매우 작으면 연관규칙이 의미가 없어질 가능성이 높음.

살아남는 rule은?

img

Explainable : 설명이 가능한가?

Actionable : 활용이 가능한가?

연관규칙 탐색 알고리즘

연관규칙 1세대 알고리즘 : Apriori algorithm

img

Apriori algorithm : 모든 항목집합에 대한 지지도를 계산하고, 최소 지지도 이상의 빈발항목집합만을 찾아내서 연관규칙을 계산하자.

  • 한 항목집합이 frequent 하다면, 이 항목집합의 모든 부분집합또한 frequent하다
  • 한 항목집합이 infrequent하다면, 이 항목집합을 포함하는 모든 집합은 infrequent하다.

img

AB가 infrequent하니까 걜 부분집합으로 가지는 애들 다 가지치기 해버리는 예시

img

?

frequent 후보 생성 방법

img

Apriori algorithm

infrequent한 항목에 대해서 최소 지지도 기준 미달 항목 가지치기 하기

frequent 항목 후보 생성

최소 신뢰도 기준 미달하는 rule 제거

위 작업을 반복하여 새로운 연관규칙이 없을때까지 하기

python 코드 사용

https://pypi.org/project/apyori/1.1.1/#description

from apyori import apriori
transactions = [
    ['beer', 'nuts'],
    ['beer', 'cheese'],
]
results = list(apriori(transactions))

result :

[RelationRecord(items=frozenset({'beer'}), support=1.0, ordered_statistics=[OrderedStatistic(items_base=frozenset(), items_add=frozenset({'beer'}), confidence=1.0, lift=1.0)]),
 RelationRecord(items=frozenset({'cheese'}), support=0.5, ordered_statistics=[OrderedStatistic(items_base=frozenset(), items_add=frozenset({'cheese'}), confidence=0.5, lift=1.0)]),
 RelationRecord(items=frozenset({'nuts'}), support=0.5, ordered_statistics=[OrderedStatistic(items_base=frozenset(), items_add=frozenset({'nuts'}), confidence=0.5, lift=1.0)]),
 RelationRecord(items=frozenset({'cheese', 'beer'}), support=0.5, ordered_statistics=[OrderedStatistic(items_base=frozenset({'beer'}), items_add=frozenset({'cheese'}), confidence=0.5, lift=1.0), OrderedStatistic(items_base=frozenset({'cheese'}), items_add=frozenset({'beer'}), confidence=1.0, lift=1.0)]),
 RelationRecord(items=frozenset({'beer', 'nuts'}), support=0.5, ordered_statistics=[OrderedStatistic(items_base=frozenset({'beer'}), items_add=frozenset({'nuts'}), confidence=0.5, lift=1.0), OrderedStatistic(items_base=frozenset({'nuts'}), items_add=frozenset({'beer'}), confidence=1.0, lift=1.0)])]

참고링크

http://rfriend.tistory.com/192?category=706118

Comments