일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- LDA
- python
- ADP
- 리액트
- bigquery
- Kubernetes
- 대감집 체험기
- frontend
- 파이썬
- 쿠버네티스
- 클러스터링
- 구글
- docker
- 타입스크립트
- 차원 축소
- ADP 실기
- 빅쿼리
- 프론트엔드
- do it
- Machine Learning
- 머신러닝
- 심층신경망
- React
- TooBigToInnovate
- r
- 대감집
- Kaggle
- 최적화
- DBSCAN
- 캐글
- Today
- Total
No Story, No Ecstasy
[ADP 실기 with R] 9. 연관분석: Apriori, FP-Growth 본문
0. 연관분석
- 트랜잭션 데이터로부터 항목 간 연관 관계를 발견하는 분석 기법
- 데이터의 발생빈도와 조건부 확률을 활용하여 특정 항목 X와 Y가 서로 얼마나 큰 영향을 미치는지 분석
- 결과 해석이 용이하고 사용이 편리하나, 항목 수가 증가함에 따라 계산 수가 기하급수적으로 늘어나는 것이 단점
- 계산 속도를 줄이기 위한 알고리즘들이 개발되고 있다.
- 지지도: 전체 거래 중 A가 포함된 비율
- 신뢰도: A가 포함된 거래 중 A, B가 동시에 포함된 비율
- 향상도: (A 포함 X and B) 대비 (A 포함 O and B) 확률 증가 비 (Lift = 1: A와 B가 서로 독립)
1. Apriori
- 특정 집합의 지지도가 낮다면(infrequent), 그 집합을 포함하는 모든 집합들(superset)의 지지도 또한 낮다.
(superset의 지지도는 subset보다 클 수 없다)
- 이를 이용하여 최소 지지도 이하의 집합을 발견하면, 동 집합의 superset에 대한 연산을 모두 skip > 속도 향상
- R 코드 예제
# 0. package import
library(reshape2)
library(arules)
# 1. Transaction 데이터 생성
melted.data = melt(data, id.vars = "id", na.rm = T, value.name = "value")
data = split(melted.data$value, melted.data$id)
data = as(data, "transactions")
inspect(data[1:5]) #생성된 tx 확인
itemFrequencyPlot(data, topN = 10, type = "absolute") #barplot 필요 없이 바로 그려줌
# + 굳이 ggplot을 쓰고 싶다면..
library(ggplot2)
data_2 = data %>% group_by(value) %>% summarise(count=n())
data_2 = arrange(data_2, desc(count)) %>% mutate(value = factor(value, levels=value))
data_top10 = data_2[1:10,]
ggplot(data_top10, aes(x = value, y = count)) + geom_bar(stat = "identity")
# 2. Apriori 알고리즘 적용
apriori.rules = apriori(data, parameter = list(supp = 0.002, conf = 0.8, minlen = 2, maxlen = 5))
apriori.rules = sort(apriori.rules, by = "lift", decreasing = T)
# 3. Rule 해석
summary(apriori.rules)
2.FP-growth
- 매 iter마다 database를 스캔해야 하는 Apriori와 달리, 오직 2번만 Database Scan한다. (속도 향상)
- FP-tree를 만듦으로써, 연관 관계를 찾아낼 수 있는 기법이다.
(1) 첫 번째 스캔 시, single item frequent pattern을 만들어, 내림차순으로 정렬한다.
(2) 한번 더 database를 스캔하며, FP-tree를 완성하고, tree를 활용하여 연관관계를 분석한다.
- R 코드 예제
# 0. package import
library(rJAVA)
library(rCBA)
data("iris")
fp.data = sapply(iris,as.factor)
fp.data = data.frame(fp.data, check.names=FALSE)
txs <- as(fp.data,"transactions")
inspect(txs[1:2])
rules = fpgrowth(txs, support=0.001, confidence=0.03, maxLength=2, consequent = "Species", parallel=FALSE)
inspect(rules[1:2])
* 활용법 제대로 알아봐야 함.. consequent = NULL 시 에러가 발생한다.
'Data Science Series' 카테고리의 다른 글
[ADP 실기 with R] 11. 텍스트마이닝: 문자열 전처리, 한국어(KoNLP), 영어(SnowballC), SNA (0) | 2020.12.12 |
---|---|
[ADP 실기 with R] 10. 시계열 분석 (Time Series Analysis) (0) | 2020.12.12 |
[ADP 실기 with R] 8. 성과 분석: Confusion Matrix, ROC Curve, AUROC (0) | 2020.12.12 |
[ADP 실기 with R] 7. Neural Networks (0) | 2020.12.12 |
[ADP 실기 with R] 6. 분류 분석 (2): Ensemble (Bagging, Boosting, Random Forest) (0) | 2020.12.12 |