본문 바로가기

나 취준생/R

R 연관규칙

320x100

# 연관규칙


데이터 내부에 존재하는 항목간의 상호관계 혹은 종속관계를 찾아내는 분석기법

데이터 간의 관계에서 조건과 반응을 연결하는 분석으로 장바구니 분석 또는 서열 분석이라고 함

 

# 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