# 연관규칙
데이터 내부에 존재하는 항목간의 상호관계 혹은 종속관계를 찾아내는 분석기법
데이터 간의 관계에서 조건과 반응을 연결하는 분석으로 장바구니 분석 또는 서열 분석이라고 함
# Apriori 알고리즘
간단한 성능 측정치를 이용해서 거대한 데이터에서 데이터간의 연관성을 찾는 알고리즘
# Apriori 알고리즘은 어떤 데이터의 패턴을 찾을 때 유용한가?
1. 암 데이터에서 빈번히 발생하는 DNA 패턴과 단백질의 서열을 검사할 때
2. 사기성 신용카드 및 사기성 보험료 청구시에 패턴 발견
3. 유통업에서는 장바구니 분석을 통해 상품 추천 뿐만 아니라 상품진열, 홈쇼핑의 경우에는 방송순서 등
# 연관규칙에 관련한 중요 용어 3가지
1. 지지도 : 전체 거래중 항목 A 와 B 를 동시에 포함하는 거래의 비율
1.1 X 아이템의 지지도
n(X) <----- 아이템 X 의 거래건수
표기식: support(X) = ---------------
N <----- 전체거래건수
↑
아이템 X 의 지지도
1.2 두 아이템 X 와 Y 의 지지도 ?
n(X ∩ Y) <------ 아이템 X 와 Y를 포함하는 거래건수
표기식: support(X, Y) = -----------------------
N <------ 전체거래건수
2. 신뢰도 : A 상품을 샀을때 B 상품을 살 조건부 확률에 대한 척도
" 두 아이템의 연관규칙이 유용한 규칙일 가능성의 척도 "
n(X ∩ Y) <--- 아이템 X 와 Y 가 동시에 발생하는 건수
표기식: confidence( X → Y ) = ---------------------------------
n(X) <---- 전체건수에서 아이템 X 의 건수
아이템 X 를 포함하는 거래중에서 아이템 Y 도 포함하는 거래비율(조건부 확률) 을 말한다.
신뢰도가 높을 수록 유용한 규칙일 가능성이 높다고 할 수 있다.
3. 향상도 : 규칙이 우연에 의해 발생한것인지를 판단하기 위해 연관성 정도를 측정하는 척도
" 두 아이템의 연관규칙이 우연인지 아닌지를 나타내는 척도 "
c(X → Y)
표기식: lift(X → Y) = --------------
s(Y)
P(B | A) P( A ∩ B )
향상도:lift(A → B) = -------------- = ---------------
P(B) P(A)*P(B)
A 와 B 를 포함하는 거래건수
= ----------------------------------------------------------------------------
A 를 포함하는 거래건수 x B 를 포함하는 거래건수
아이템 X 가 주어지지 않았을 때의 아이템 Y 의 확률대비
아이템 X 가 주어졌을때의 아이템 Y의 확률증가 비율을 나타낸다.
향상도 설명 예시
향상도 = 1 서로 독립적 관계 과자와 후추
향상도 > 1 양(+) 의 상관관계 빵과 버터
향상도 < 1 음(-) 의 상관관계 설사약과 변비약
# 지지도, 신뢰도, 향상도 구하기
1. 지지도
거래번호 거래 아이템 지지도(우유 → 시리얼) ?
1 우유, 버터, 시리얼
2 우유, 시리얼 우유와 시리얼을 동시에 구매할 확률
3 우유, 빵 (결합확률)
4 버터, 맥주, 오징어
n( 우유 ∩ 시리얼) 2
지지도(우유 → 시리얼) ? ----------------------- = -------- = 50%
전체건수 4
2. 우유를 구매할 때 시리얼도 구매할 신뢰도 (조건부 확률)
거래번호 거래 아이템 신뢰도(우유 → 시리얼) ?
1 우유, 버터, 시리얼
2 우유, 시리얼 우유를 샀을때 시리얼도 구매할 확률?
3 우유, 빵 (조건부 확률)
4 버터, 맥주, 오징어
n(X ∩ Y ) 2
표기식 : cofidence( X → Y ) = ----------------- = ---------- = 66 %
n(X) 3
3. 우유를 구매할 때 시리얼도 구매할 향상도
거래번호 거래 아이템 향상도(우유 → 시리얼) ?
1 우유, 버터, 시리얼
2 우유, 시리얼 우유를 샀을때 시리얼을 산다는게 우연인지
3 우유, 빵 아닌지를 알아보는 확률
4 버터, 맥주, 오징어
confidence(X → Y) (2/3) 4
표기식 : lift(X → Y) = ------------------------- = --------------------- = ------- = 1.33
support(Y) (2/4) 3
P(B | A ) P(A ∩ B) A 와 B 를 포함하는 거래건수 x 전체거래건수
향상도 lift(A → B) = ---------- = ------------ = ------------------------------------------------
P(B) P(A) P(B) A를 포함하는 거래건수 x B 를 포함하는 거래건수
향상도가 1보다 크므로, 우유와 시리얼은 양의 상관 관계이다.
- 이렇게 직접 구할 수 있지만, 아이템의 개수가 k라 할 때, 2의 k 승개의 아이템 집합을 분석해야하므로,
컴퓨터를 사용하는 것.
# R 연관규칙 실습
1. 데이터를 로드
build <- read.csv("building.csv" , header = T)
View(build)
2. na 를 0 으로 변경
build[is.na(build)] <- 0
build
3. 필요한 변수만 선별
build <- build[-1] # 건물번호를 제외
build
4. 연관규칙 패키지를 다운로드
install.packages("arules")
library(arules)
5. 연관규칙 모델을 생성
trans <- as.matrix(build , "Transaction") # 행렬로 변환
View(trans)
rules1 <- apriori(trans , parameter = list(supp=0.2 , conf = 0.6 , target = "rules"))
#설명: 지지도 0.2 이상이고 신뢰도 0.6 이상인 규칙을 만들어라~
rules1
참고 : transaction?
transactions class : 1과 0으로 이루어져 있는 데이터에서 0이 훨씬많을 때 사용
(spase format - 희소 형태의 데이터).
즉, 의미 없는 정보가 많고 크기가 커서 데이터를 처리하기 힘들 때
transactions class로 처리한다고 한다.
6. 연관규칙을 확인
inspect(sort(rules1))
# 여러 규칙들 중에서 보습학원 부분만 따로 검색
rules2 <- subset(rules1 , subset = lhs %pin% '보습학원' & confidence > 0.7)
# 설명: subset 함수는 전체 규칙에서 일부 규칙만 검색하는 함수
inspect(sort(rules2))
7. 시각화
b2 <- t(as.matrix(build)) %*% as.matrix(build) # 희소행렬로 변경
install.packages("sna")
install.packages("rgl")
library(sna)
library(rgl)
b2.w <- b2 - diag(diag(b2)) # 희소행렬의 대각선을 0으로 변경
rownames(b2.w)
colnames(b2.w)
b2.w
gplot(b2.w , displaylabel=T , vertex.cex=sqrt(diag(b2)) , vertex.col = "green" , edge.col="blue" , boxed.labels=F , arrowhead.cex = .7 , label.pos = 2 , edge.lwd = b2.w*2)
# 참고 : gplot 함수 변수
1)배치 관련
gmode= "digraph", "graph", "twomode"
mode= "fruchtermanreingold", "kamadakawai", "spring", 고유벡터에 기초한 "eigen", "hall", "princoord", 다차원척도법 "mds", 임의화 "random", 원 "circle"
displayisolates = T or F, 고립 노드를 그릴 것인가
2)연결선(edge) 관련
userarrows = T or F , 화살표로 나타낼 것인가(T), 선분으로 나타낼 것인가(F)
edge.lwd = 선의 폭 지정
edge.lty = solid, dashed, dotted 선의 유형
edge.col = 선의 색상
arrowhead.cex = 화살머리의 확대 배수
thresh = 선을 이 값 이상인 경우만 표현. 디폴트는 0
usecureve = 연결선을 곡선으로 나타냄
diag = 인접행렬의 대각성분이 있는 경우 T로 놓으면 루프로 표현됨
3) 노드관련
vertex.cex = 노드 크기의 확대 배수
vertex.col = 노드의 색을 지정한다.
vertex.sides = 노드 다각형에서 변의 수. 12 이상으로 놓으면 거의 원형이 된다.
displaylabels = 노드 레이블을 표시하고자 하는 경우 T
label = 노드 레이블의 지정
boxed.labels = 노드레이블을 사각형으로 테두리하고 싶지 않은 경우 F
label.pos = 노드 레이블의 위치. 0은 중심에서 바깥쪽, 1은 아래, 2는 왼쪽, 3은 위쪽, 4는 오른쪽, 5는 중심.
label.col = 레이블 색상
label.cex, label.lwd, label.lty 등이 있음
'나 취준생 > R' 카테고리의 다른 글
R SOM(Self Organizing Map) 분석 (0) | 2021.02.15 |
---|---|
R k-means 군집 분석 (0) | 2021.02.15 |
R 신경망 (0) | 2021.02.05 |
R 회귀분석 - 2 (0) | 2021.02.01 |
R 회귀분석 - 1 (0) | 2021.02.01 |