R을 사용한 연관성 분석 (association rules in R)

 

연관성 분석이란?

연관성 분석을 소개하기 전에,  너무 자주 인용되어 식상하기까지 한 월마트의 유명한 빅데이터 분석 결과를 잠깐 살펴 볼까요?

바로 맥주를 사는 사람은 기저귀를 살 확률이 다른 사람 보다 매우 높다는 것인데요,  월마트가 조사해 본 결과 아내의 부탁으로 기저귀를 사러 온 남성들이 맥주도 같이 구매해가기 때문이었다고 하네요.

이렇게 장바구니 분석으로 더 잘 알려져 있는 연관성 분석은 여러 번 발생한 거래, 사건 내에서 일정한 규칙을 찾아내는 분석입니다. 함께 잘 팔리는 상품을 알수 있다면 크로스 셀링(cross-selling)이나 업셀링(up-selling), 혹은 상품 진열 전략을 세우는데 보다 유리하겠죠.

맥주와 기저귀
출처: lifeindigital.org

 

R을 사용한 연관성 분석 예제 (arules in R)

 

연관성 분석을 위해 가상의 리그오브레전드 플레이어의 챔피언 플레이 데이터를 준비했습니다. (다운로드:  sample-data )플레이어들의 어떤 챔피언을 주로 플레이 하는지, 플레이 스타일 간에는 어떤 관계가 있는지 살펴 볼까요?

데이터 셋 로드

연관성 분석은 R의 arules패키지를 사용합니다.
arules 패키지를 로드하고, 첨부 파일을 로드해서 자료의 구조를 확인해 볼까요?

id와 names 두개의 컬럼으로 이루어져 있는 데이터 프레임이네요.
총 몇명의 id가 입력되어 있는지 확인해 보겠습니다.

총 18명의 챔피언 플레이 정보가 들어 있네요.

데이터 변환

연관성 분석을 위해서는 데이터를 “transaction” 타입으로 변경해 주어야 합니다.
현재는 “data.frame” 형식이니까 데이터 변환 작업이 필요하겠네요.

data.frame을 id별 list로 쪼갠 뒤 transaction 타입으로 변환해 주면 됩니다.
총 18건의 거래(챔피언을 플레이한 플레이어) 정보가 정상적으로 변환되었네요.

연관성 규칙 생성

연관성 규칙을 생성 하기 전에 연관성 규칙을 평가하는 3가지 척도를 간단히 살펴보겠습니다.

A. 지지도(SUPPORT)

전체 거래에서 특정 물품 A와 B가 동시에 거래되는 비중으로,
해당 규칙이 얼마나 의미가 있는 규칙인지를 보여줍니다.

지지도 = P(A∩B)  :  A와 B가 동시에 일어난 횟수 / 전체 거래 횟수

B. 신뢰도(CONFIDENCE)

A를 포함하는 거래 중 A와 B가 동시에 거래되는 비중으로,
A라는 사건이 발생했을 때 B가 발생할 확률이 얼마나 높은지를 말해줍니다.

신뢰도 =  P(A∩B) / P(A)  :  A와 B가 동시에 일어난 횟수 / A가 일어난 횟수

C. 향상도(LIFT)

A와 B가 동시에 거래된 비중을 A와B가 서로 독립된 사건일때 동시에 거래된 비중으로 나눈 값입니다.  즉, A와 B가 우연에 의해서 같이 거래된 확률보다 A와 B 사이의 관계가 얼마나 더 끈끈한지(?)를 보는 지표입니다.

향상도 = P(A∩B) / P(A)*P(B)  = P (B|A) / P (B)
:  A와 B가 동시에 일어난 횟수 / A, B가 독립된 사건일 때 A,B가 동시에 일어날 확률

품목 A와 B사이에 아무런 관계가 상호 관계가 없다면 향상도는 1이 됩니다.  향상도가 1보다 높아질 수록 이 규칙은 우연히 일어나지 않았다는 강한 표시가 될 수 있겠죠.

(위 예시는 “A를 구매하는 고객은 B도 구매한다”라는 규칙에 대한 지지도, 신뢰도, 향상도에 대한 설명입니다. 보다 자세한 설명은 링크를 참조해 주세요. )

그럼, 규칙을 생성해 보겠습니다.

총 33개의 규칙이 생성되었네요. 규칙을 상세히 보려면 inspect 함수를 사용하면 됩니다. 향상도 순으로 정렬해서 보니 알리스타와 나미, 한타형 정글러와 케이틀린, 아무무, 자이라와 나서스의 관계가 눈에 띄네요.
(플레이어들 중 초식형 플레이어들은 초식형 챔피언들만 플레이 하는 것 같군요.)

연관성 규칙 리스트가 너무 길어질 경우 계산에 시간이 많이 소요될 수도 있는데요, 그럴때는 apriori 함수에 parameter 를 넣어서 지지도, 신뢰도가 일정 수준 이상인 규칙을 필터링 할 수 있습니다.

 

참고 자료
1) Wikipedia, Association rule learning
2) RDataMining,  Association Rules examples