본문 바로가기
공부/데이터

[데이터분석] 장바구니 분석(apriori 알고리즘) 사용 및 해석하기

by demonic_ 2019. 12. 4.
반응형

apriori 알고리즘을 사용하기 위해서는 다음과 같은 구조로 데이터셋이 되어야 한다.

dataset = [
	['아메리카노', '카페라떼'],
	['카페라떼', '아메리카노', '카푸치노'],
	['바닐라라떼', '아메리카노'],
	...
]

 

DBMS에 이런식으로 데이터가 저장되어 있을리가 만무하다. 전처리를 위해 어떻게 처리하면 좋을지 이전 포스팅에 추가해두었다.

 

https://blog.naver.com/varkiry05/221724021065

 

[데이터정제] apriori 알고리즘을 실행할 수 있게 데이터 변형하기

DBMS에서 바로 데이터를 뽑으면 다음과 같은 행태일 것이다.​하지만 Apriori 알고리즘을 실행하려면 ...

blog.naver.com

 

 

여기서는 샘플을 만들어 진행하고자 한다.

 

데이터셋 샘플 만들기

dataset = [
	['아메리카노', '카페라떼'],
	['카페라떼', '아메리카노', '카푸치노'],
	['바닐라라떼', '아메리카노'],
	['녹차라떼', '카페라떼', '아메리카노'],
	['카페모카', '아메리카노'],
	['아메리카노', '카페라떼'],
	['초콜릿', '아메리카노'],
	['아메리카노'],
	['카페모카', '카페라떼']
]

 

pandas, mlxtend 패키지를 로드한다

from mlxtend.preprocessing import TransactionEncoder
from mlxtend.frequent_patterns import apriori

 

학습 시작

te = TransactionEncoder()
te_result = te.fit(dataset).transform(dataset)

 

te_result 결과를 보면 다음과 같다.

 

이것을 보기 좋게 데이터프레임으로 넣는다

 

데이터를 보면 모든 상품이 컬럼명으로 들어가있고, 각 row마다 포함된 상품에 True 를 반환한다.

인덱스 0(첫번째)줄을 보면 아메리카노와 카페라떼를 구매했기 때문에 두개의 컬럼에만 True 되어있다.

 

이제 apriori 알고리즘을 사용해보자

itemset = apriori(df, use_colnames=True)
itemset

 

특별히 옵션을 주지 않으면 기본 지지도(support)는 0.5로 설정된다. 이번에는 옵션을 넣어 지지도를 좀더 낮춰본다.

itemset = apriori(df, min_support=0.1, use_colnames=True)
itemset

 

아메리카노를 제외하면 지지도가 대부분 낮다.

실제 데이터를 돌렸을땐 이보다 더 낮은 지지도를 형성하는 경우가 많았다.

심할때는 옵션에 support 를 0.001 을 주기도 했다.

 

이제 신뢰도를 확인하자

min_threshold 의 기본값은 0.8 이다.

그런데 위에서 지지도가 낮은것을 억지로 보이게 했으니 신뢰도도 상대적으로 낮게 설정해야 목록이 좀 보인다.

from mlxtend.frequent_patterns import association_rules
association_rules(itemset, metric="confidence", min_threshold=0.1) 

min_threshold 를 0.1 로 설정한 경우

 

min_threshold 를 기본값(0.8)으로 둘 경우

 

 

lift(향상도) 수치가 1보다 큰것들이 있는데, 1보다 클수록 우연히 일어나지 않았다는 표시다. 아무런 관계가 없다면 1로 표시된다.

위의 표를 해석해보자면 아메리카노를 구매할 때 초콜릿이나 바닐라라떼, 카페모카 등을 구매하는 경우가 있고 셋의 신뢰도(confidence)가 0.1818로 같다.

- 아메리카노 - 바닐라라떼: 0.1818

- 아메리카노- 초콜릿: 0.1818

- 아메리카노 - 카페모카: 0.1818

 

이중 바닐라라떼의 향상도가 1보다 커 가장 높은 인기를 가진다는 의미다.

 


 

이쯤에서 각 용어들에 대해 조금 알아두면 좋을 듯 하다.

 

- support(지지도)

전체 거래에서 특정 물품 A와 B가 동시에 거래되는 비중

해당 규칙이 얼마나 의미있는지 보여줌.

 

지지도 = P(A∩B)

:A와 B가 동시에 일어난 횟수 / 전체 거래 횟수

 

 

- confiddence(신뢰도)

A를 포함하는 거래 중 A와 B가 동시에 거래되는 비중

 

신뢰도 = P(A∩B) / P(A)

:A와 B가 동시에 일어난 횟수 / A가 일어난 횟수

 

 

- lift(향상도)

A라는 상품에서 신뢰도가 동일한 상품 B와 C가 존재할 때, 어떤 상품을 더 추천해야 좋을지 판단.

A와 B가 동시에 거래된 비중을 A와 B가 서로 독립된 사건일 때 동시에 거래된 비중으로 나눈 값

 

향상도 = P(A∩B) / P(A)*P(B) = P (B|A) / P (B)

: A와 B가 동시에 일어난 횟수 / A, B가 독립된 사건일 때 A,B가 동시에 일어날 확률

 

 

끝.

 

 

 

참조:

https://needjarvis.tistory.com/59

 

추천을 위한 연관성 규칙(Association Rules)의 지지도, 신뢰도, 향상도

A상품을 구매할 경우 어떤 상품을 추천해야 좋을까? 라는 질문은 수많은 현업, 통계학자, 데이터 분석 전문가들의 고민거리이다. 여러가지 방식의 추천시스템들이 존재한다. 1. 사용자의 프로파일링 기반 2. 상품..

needjarvis.tistory.com

http://www.dodomira.com/2016/02/15/r%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%9C-%EC%97%B0%EA%B4%80%EC%84%B1-%EB%B6%84%EC%84%9D-association-rules-in-r/

 

연관성 분석 in R (association rules in R)

  연관성 분석이란? 연관성 분석을 소개하기 전에,  너무 자주 인용되어 식상하기까지 한 월마트의 유명한 빅데이터 분석 결과를 잠깐 살펴 볼까요? 바로 맥주를 사는 사람은 기저귀를 살 확률이 다른 사람 보다 매우 높다는 것인데요,  월마트가 조사해 본 결과 아내의 부탁으로 기저귀를 사러 온 남성들이 맥주도 같이 구매해가기 때문이었다고 하네요. 이렇게 장바구니 분석으로 더 잘 알려져 있는 … R을 사용한 연관성 분석 (association rules in

www.dodomira.com

http://blog.naver.com/PostView.nhn?blogId=eqfq1&logNo=221444712369&parentCategoryNo=&categoryNo=45&viewDate=&isShowPopularPosts=true&from=search

 

파이썬 Apriori 알고리즘(장바구니분석, 연관분석)

​일단 필요한 패키지 로드데이터셋 생성(사과,치즈.생수)(생수,호두,치즈,고등어)(수박,사과,생수)(생수,...

blog.naver.com

 

 

반응형

댓글