상세 컨텐츠

본문 제목

장바구니 분석

R

by mignong 2022. 6. 9. 17:26

본문

728x90
반응형

장바구니 분석

소비자들의 구매 데이터를 바탕으로 행해지는 매우 다양한 분석을 포괄

(ex. 마트 POS 데이터, 고객군별 구매 패턴 분석 등)

 

연관규칙

장바구니 분석의 대표적인 방안으로 데이터 분석을 통해 하나의 데이터가 다른 데이터와 얼마나 연관되어 있는지 측정

 

연관규칙 알고리즘

구매 데이터 → 동시발생 테이블 → 연관 상품 찾기

동시발생 테이블을 통해 함께 구매하는 제품 파악 가능

연관규칙 평가 지표

1) 지지도 Support ( A⇒B)

(A와 B가 동시에 구매되는 거래의 수)/(전체 거래의 수)

전체 거래에서 두 제품(A,B)을 함께 구매하는 경우의 확률

 

2) 신뢰도 Confidence ( A⇒B)

(A와 B가 동시에 구매되는 거래의 수)/(A가 구매되는 거래의 수)

A를 구매하는 거래에서 B도 함께 구매하는 경우의 확률

 

3) 향상도 Lift(A⇒B)

(A를 구매했을 때 B를 구매하게 되는 확률)/(B를 구매하는 거래의 비율)

  Lift > 1 : A와 B가 함께 구매되는 경우 > B만 구매되는 경우

  Lift < 1 : B만 구매되는 경우 > A와 B가 구매되는 경우

 

arles 패키지에 구현된 연관규칙 함수 활용
알고리즘 : Apriori
# transactions : 연관규칙을 만들기 위해 적합한 형태
# CSV 파일을 transactions 형태로 읽기 
shopping_tr <- read.transactions("shopping.csv")

# Epub 데이터로 연관규칙 생성
# 1) arles 패키지 설치 및 불러오기
install.packages("arules")
library(arules)

# 2) Epub(전자책 구매 데이터) 불러오기
data(Epub) # arules 패키지에서 제공

# 3) Inspect() 함수로 데이터 보기
# inspect() 함수가 다른 패키지에도 존재하므로 패키지명 지정
arules::inspect(Epub[1:10]) 

# 4) 데이터 → 데이터프레임으로 바꾸어 데이터 보기 (생략)
# 데이터프레임으로 바꾸면 빈 공간이 많아서 데이터 크기가 커질 수 있음
df_basket <- as(Epub,"data.frame")

# Epub으로 data set 검토
# 1) 제품이 거래에서 차지하는 비율
itemFrequency(Epub[,1:10])

# 2) 지정한 수준 값보다 큰 값을 가진 제품 보기
# 지지도 값이 0.01 이상인 제품 보기
itemFrequencyPlot(Epub, support=0.01, main="item frequency plot above support 1%")
# 지지도 값이 가장 큰 30개의 제품 보기
itemFrequencyPlot(Epub, topN = 30, main="support top 30 items")

# 연관규칙 생성 - apriori 함수 활용
# 1) apriori() 함수와 Epub 데이터를 사용하여 규칙을 생성할 transactions 데이터와 생성 규칙의 조건 지정
# support : 최소 지지도 값, confidence : 최소 신뢰도 값, minlen : 최소 n개의 제품 포함
Epub_rule <- apriori(data=Epub, parameter=list(support=0.01, confidence=0.20, minlen=2))
# writing ... [0 rule(s)] done [0.00s]. →최소 지지도, 신뢰도 값이 너무 높아 발견된 규칙 無

# 2) 발견된 규칙이 없을 시 최소 지지도 값을 변경하여 재실행
Epub_rule <- apriori(data=Epub, parameter=list(support=0.001, confidence=0.20, minlen=2))
# writing ... [65 rule(s)] done [0.00s].

# 3) summary() 함수로 생성된 규칙의 분포와 지지도, 신뢰도, 리프트 값의 분포 확인
summary(Epub_rule)
# 길이가 2인 규칙이 62개, 길이가 3인 규칙이 3개인 것을 확인할 수 있다.

# 4) inspect() 함수로 구체적인 데이터 모습 확인
arules::inspect(Epub_rule[1:20])

# 특정 제품이 포함된 규칙 찾기 - subset 함수 활용
# 1) 위치와 무관하게 해당 제품이 포함된 규칙 찾기
rule_interest <- subset(Epub_rule, items %in% c("doc_72f","doc_4ac"))
arules::inspect(rule_interest)

# 2) 특정 제품이 규칙의 왼쪽에 포함된 경우 찾기
rule_interest_lhs <- subset(Epub_rule, lhs %in% c("doc_72f","doc_4ac"))
arules::inspect(rule_interest_lhs)

# 연관규칙의 시각화 - arulesViz 패키지 활용
# 1) arulesViz 패키지 설치 및 불러오기
install.packages("arulesViz")
library(arulesViz)

# 2) plot() 함수로 연관규칙의 지지도와 신뢰도에 따른 산점도 그리기
plot(Epub_rule)
plot(Epub_rule, method = "graph"
    , control = list(type="items")
            , vertex.label.cex=0.7 # 점 크기(기본 :1)
            , edge.arrow.size=0.3 # 화살표의 크기 
            , edge.arrow.width=2) # 화살표의 넓이
plot(sort(Epub_rule, by="support")[1:20], method="grouped")


# 생성된 규칙 저장
write(Epub_rule, file="Epub_rule.csv", sep=",", quote=TRUE, row.names=FALSE)
728x90
반응형

관련글 더보기

댓글 영역