[분류] Apriori 라이브러리를 이용한 장바구니 분석 하기
2020. 11. 16. 06:51ㆍ노트/R : 통계
데이터
패키지 설치
install.packages("arules")
library(arules)
데이터 읽어오기
# read.csv로 읽어오면 안됌
# groceries <- read.csv("C:\\Users\\diane\\OneDrive\\바탕 화면\\Diane\\groceries.csv",sep = ",")
groceries <- read.transactions("C:\\Users\\diane\\OneDrive\\바탕 화면\\Diane\\groceries.csv",sep = ",")
str(groceries)
summary(groceries)
데이터 조사하기
# 169: 거래내역에서 전체 상품의 종류의 갯수,
# 1~ 32 : 거래당 구매 상품의 갯수
inspect(groceries[1:5])
item 빈도 산출
itemFrequency((groceries[,150:169]))
itemFrequencyPlot(groceries, support = 0.1) # 지지도가 0.1 이상인 것들만 출력
itemFrequencyPlot(groceries, topN =20) # 상위 20개만 출력
image(groceries[1:5])
image(sample(groceries,100))
apriori 라이브러리 사용
apriori(groceries)
groceryRules <- apriori(groceries, parameter = list(support = 0.006, confidence = 0.25, minlen = 2))
# min=2 : 2 개 미만의 아이템을 갖는 규칙은 제거
inspect(groceryRules[1:3])
inspect(sort(groceryRules, by="lift")[1:5])
# 3.956477의 의미는 대략 4
# 허브를 산 사람들이 채소를 살 가능성이 채소를 산 일반 고객보다 4배 더 높다.
berryRules <- subset(groceryRules, items %in% c("berries","yogurt"))
inspect(berryRules)
Epub data 로 장바구니 분석하기
data(Epub)
summary(Epub)
inspect(Epub[1:10])
# 각각 item별로 비중에 대한 비율 출력
itemFrequency(Epub[,1:10])
# 지지도가 0.01 이상인 항목에 대해서만 비율 그림 출력
itemFrequencyPlot(Epub, supprot=0.01 , main = 'item Frequency')
# 상위 30 이상인 항목에 대해서만 출력
itemFrequencyPlot(Epub, topN=30, main = 'item Frequency' )
image(sample(Epub,500))
연관 규칙 분석
epub_rule <- apriori(data= Epub, parameter = list(support=0.001, confidence = 0.2, minlen = 2))
summary(epub_rule)
inspect(epub_rule)
inspect(sort(epub_rule, by="lift")[1:20])
inspect(sort(epub_rule, by="support")[1:20])
rule_ins <- subset(epub_rule, items %in% c("doc_72f", "doc_4ac"))
inspect(rule_ins)
# %in% 는 적어도 하나의 제품이 존재하면 해당 규칙을 가져 옴
rule_ins <- subset(epub_rule, items %pin% c("60e"))
inspect(rule_ins)
# %pin% 은 왼쪽 오른쪽 상관없이 60e 규칙이 들어가 있으면 출력하라
inspect(rule_ins)
# %ain%은 온전히 일치해야함
rule_ins <-subset(epub_rule, items %pin% c("60e") & confidence > 0.25)
inspect(rule_ins)
연관규칙 시각화를 위한 tool 설치
install.packages("arulesViz")
library(arulesViz)
plot(epub_rule)
plot(sort(epub_rule,by="support")[1:20], method="grouped")
plot(epub_rule, method = "graph", control = list(type="items"))
plot(epub_rule, method="graph",
control = list(type ="items",
vertex.label.cex = 0.7, # 점 크기(기본 :1)
edge.arrow.size = 0.3, # 화살표의 크기
edge.arrow.width = 2)) # 화살표의 넓이
# 원의 크기는 지지도에 비례하여 커짐
# 원의 색깔은 향상도(lift)에 비례하여 진해짐
'노트 > R : 통계' 카테고리의 다른 글
[분류] C50, rpart 라이브러리를 활용한 의사결정 (0) | 2020.11.22 |
---|---|
[분류] k-means clustering(군집화, 클러스터링) (0) | 2020.11.16 |
[분류] KNN 알고리즘을 이용한 데이터 분류하기 (0) | 2020.10.24 |
[R 기초] 데이터 다루기(2) - apply 함수 (0) | 2020.10.24 |
[R 기초] ggiraphExtra 패키지를 이용한 인터렉티브 시각화 (0) | 2020.10.24 |