제 8 장 연관규칙의 탐색

8.1 연관규칙분석이란

  • 연관규칙분석은 비지도학습법의 일종으로 자료에 있는 항목(item)들간의 연관규칙을 찾는 방법 - 항목은 상품, 서비스 등을 의미함
  • 마케팅에서는 고객의 장바구니에 들어있는 품목간의 관계를 알아본다는 의미에서 장바구니분석(market basket analysis)이라고도 부름
  • 활용
    • 효율적인 상품의 진열
    • 패키지 상품의 개발
    • 교차판매 전략
    • 기획상품의 결정

8.2 연관규칙분석의 적용 사례

  1. 백화점, 호텔 등 서비스업에서는 연관규칙을 통하여 고객들이 특정 서비스를 받은 후 다음에 어떤 서비스를 원하는지 미리 알 수 있고,
  2. 신용카드사나 은행에서는 고객들의 기존 금융서비스 내역으로부터 대출과 같은 특정한 서비스를 받을 가능성이 높은 고객을 찾을 수 있다.
  3. 의료보험이나 손해보험에서는 고객의 보험금 청구가 기존의 정상적인 청구와 다른 패턴을 보이는 경우 보험사기의 징조로 간주하여 추가적인 조사를 하게 된다.
  4. 인터넷 쇼핑몰에서 상품의 추천
  5. 텍스트마이닝에서 연관 키워드 또는 유사 문서의 추출
  6. 웹사이트의 접속자의 페이지간의 이동

8.3 연관규칙의 생성방법 예시

  • 예제 데이터

    거래번호 품목
    1 오렌지쥬스,사이다
    2 우유, 오렌지쥬스, 식기세척제
    3 오렌지쥬스, 세제
    4 오렌지쥬스, 세제, 사이다
    5 식기 세척제, 사이다
  • 동시구매표

    오렌지쥬스 식기세척제 우유 사이다 세제
    오렌지쥬스 4 1 1 2 2
    식기세척제 1 2 1 1 0
    우유 1 1 1 0 0
    사이다 2 1 0 3 1
    세제 2 0 0 1 2

8.4 연관규칙분석의 측도

  • 연관규칙: \(X \Rightarrow Y\) (\(X\)이면 \(Y\)이다)

  • 연관규칙 측도: 연관규칙의 유용성 또는 선택을 위한 측도

    1. 지지도(support): 품목 \(X\)의 지지도는 전체 거래에서 \(X\)를 포함한 거래 비율로 정의 \[ \text{지지도}(X) = P(X) = \frac{ \text{X가 포함된 거래수}}{\text{전체 거래수}} \]

    2. 신뢰도(confidence): \(X\)를 구입한 거래 중 \(Y\)를 같이 구입한 비율 \[ \text{지지도}(X \Rightarrow Y) = P(Y | X) = \frac{P(X, Y)}{P(Y)} = \frac{\text{품목 X와 Y를 동시에 포함하는 거래수}}{\text{품목 X를 포함하는 거래수}} \]

    3. 향상도(lift): \(X \Rightarrow Y\)의 신뢰도와 \(Y\)의 지지도의 비율, 즉 \(X\)를 구매했을 때 \(Y\)의 구매 비율이 그러한 조건이 없는 경우에 비해 얼마나 커지는가를 나타내는 지표 \[ \text{향상도}(X \Rightarrow Y) = \frac{P(Y | X)}{P(Y)} = \frac{conf(X \Rightarrow Y)}{supp(Y)} \]

  • 예제: 앞에 제시된 데이터에서 연관규칙을 계산하면 아래와 같다.

    1. 지지도(support)

      • supp(오렌지쥬스) = 4/5
      • supp(사이다) = 3/5
      • supp(식기세척제) = 2/5
      • supp(세제) = 2/5
      • supp(오렌지쥬스, 사이다) = 2/5
      • supp(오렌지쥬스, 세제) = 2/5
    2. 신뢰도(confidence): \(X\)를 구입한 거래 중 \(Y\)를 같이 구입한 비율

      • conf(오렌지쥬스 => 사이다) = (2/5)/(2/5) = 1
      • conf(사이다 => 오렌지쥬스) = (2/5)/(3/5) = 2/3
    3. 향상도(lift): \(X\)를 구매했을 때 \(Y\)의 구매 비율이 그러한 조건이 없는 경우에 비해 얼마나 커지는가?

      • lift(오렌지쥬스 => 사이다) = 1/(3/5) = 5/3 > 1
      • lift(사이다 => 오렌지쥬스) = (2/3)/(4/5) = 5/6 < 1

8.5 R을 이용한 연관 규칙의 탐색 예제

8.5.1 Epub data

  • 2003년 1월부터 2008년 12월까지의 전자문서의 다운로드 이력 (Vienna University of Economics and Business Administration)
  • 총 936 item에 대한 다운로드 트랜젝션의 수는 15,729 건
  • 이 내장 데이터는 transaction / itemMatrix 클래스로 3개의 컬럼으로 구성되어 있음
# install.packages("arules")
library(arules)
data("Epub")
inspect(head(Epub))

##     items                      transactionID TimeStamp          
## [1] {doc_154}                  session_4795  2003-01-02 10:59:00
## [2] {doc_3d6}                  session_4797  2003-01-02 21:46:01
## [3] {doc_16f}                  session_479a  2003-01-03 00:50:38
## [4] {doc_11d, doc_1a7, doc_f4} session_47b7  2003-01-03 08:55:50
## [5] {doc_83}                   session_47bb  2003-01-03 11:27:44
## [6] {doc_11d}                  session_47c2  2003-01-04 00:18:04
summary(Epub)

## transactions as itemMatrix in sparse format with
##  15729 rows (elements/itemsets/transactions) and
##  936 columns (items) and a density of 0.001758755 
## 
## most frequent items:
## doc_11d doc_813 doc_4c6 doc_955 doc_698 (Other) 
##     356     329     288     282     245   24393 
## 
## element (itemset/transaction) length distribution:
## sizes
##     1     2     3     4     5     6     7     8     9    10    11    12    13    14    15    16    17    18    19    20    21 
## 11615  2189   854   409   198   121    93    50    42    34    26    12    10    10     6     8     6     5     8     2     2 
##    22    23    24    25    26    27    28    30    34    36    38    41    43    52    58 
##     3     2     3     4     5     1     1     1     2     1     2     1     1     1     1 
## 
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   1.000   1.000   1.000   1.646   2.000  58.000 
## 
## includes extended item information - examples:
##    labels
## 1 doc_11d
## 2 doc_13d
## 3 doc_14c
## 
## includes extended transaction information - examples:
##       transactionID           TimeStamp
## 10792  session_4795 2003-01-02 10:59:00
## 10793  session_4797 2003-01-02 21:46:01
## 10794  session_479a 2003-01-03 00:50:38
year = strftime(as.POSIXlt(transactionInfo(Epub)[["TimeStamp"]]), "%Y")

# 지지도가 0.01이상의 상위 20개의 아이템들에 대한 다운로드 수(absolute) 상대빈도(relative) 
itemFrequencyPlot(Epub[year == "2003"], type="absolute", topN=20, support=0.01)

# 연관 규칙 탐색 (support >= 0.001)
Epub_rules = apriori(Epub, 
                      parameter = list(support = 0.001))
inspect(Epub_rules)

##     lhs                   rhs       support     confidence coverage    lift     count
## [1] {doc_6e8, doc_6e9} => {doc_6e7} 0.001080806 0.8947368  0.001207960 402.0947 17   
## [2] {doc_6e7, doc_6e9} => {doc_6e8} 0.001080806 0.8500000  0.001271537 417.8016 17   
## [3] {doc_6e7, doc_6e8} => {doc_6e9} 0.001080806 0.8095238  0.001335113 454.7500 17   

8.5.2 Adult 자료

데이터: Adult 자료 : 미국 Census Bureau의 Census Income 데이터베이스에서 추출된 설문조사 자료 48,842개의 관측값과 나이, 직업군, 교육정도 등의 15개의 변수(대부분의 변수들이 범주형) 지지도, 신뢰도, 향상도 등이 주어진 적절한 최소값보다 큰 연관규칙을 탐색해 보자

  1. 먼저, R패키지를 설치하고 내장데이터를 살펴보자

    library(arules)
    # adult data
    data(Adult)
  2. apriori()함수: 주어진 데이터에서 미리 정해진 연관성 측도를 만족하는 연관규칙들을 탐색

    apriori(데이터, parameter = list(supp = 0.5, conf = 0.9, target = "rules"))
    # parameter는 연관성측도의 최소값을 지정하여 리스트로 입력
    # supp = 0.5(지지도), conf = 0.9(신뢰도), target = "rules"
  3. 지지도 (support) >= 0.5 이고 신뢰도 (confidence) >= 0.9 인 연관규칙의 탐색

    rules <- apriori(Adult, parameter = list(supp = 0.5, conf = 0.9, target = "rules"))
    summary(rules)
    
    ## set of 52 rules
    ## 
    ## rule length distribution (lhs + rhs):sizes
    ##  1  2  3  4 
    ##  2 13 24 13 
    ## 
    ##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
    ##   1.000   2.000   3.000   2.923   3.250   4.000 
    ## 
    ## summary of quality measures:
    ##     support         confidence        coverage           lift            count      
    ##  Min.   :0.5084   Min.   :0.9031   Min.   :0.5406   Min.   :0.9844   Min.   :24832  
    ##  1st Qu.:0.5415   1st Qu.:0.9155   1st Qu.:0.5875   1st Qu.:0.9937   1st Qu.:26447  
    ##  Median :0.5974   Median :0.9229   Median :0.6293   Median :0.9997   Median :29178  
    ##  Mean   :0.6436   Mean   :0.9308   Mean   :0.6915   Mean   :1.0036   Mean   :31433  
    ##  3rd Qu.:0.7426   3rd Qu.:0.9494   3rd Qu.:0.7945   3rd Qu.:1.0057   3rd Qu.:36269  
    ##  Max.   :0.9533   Max.   :0.9583   Max.   :1.0000   Max.   :1.0586   Max.   :46560  
    ## 
    #     
    ## mining info:
    ##   data ntransactions support confidence                                                                              call
    ##  Adult         48842     0.5        0.9 apriori(data = Adult, parameter = list(supp = 0.5, conf = 0.9, target = "rules"))    
  4. ’sex -> ?’인 연관성 규칙에서 향상도가 1보다 큰 규칙의 탐색

    rules.sub = subset(rules, subset = lhs %pin% "sex" & lift > 1)
    inspect(sort(rules.sub)[1:3])
    
    ##     lhs                                          rhs                            support   confidence coverage  lift     count
    ## [1] {race=White, sex=Male}                    => {native-country=United-States} 0.5415421 0.9204803  0.5883256 1.025691 26450
    ## [2] {sex=Male, native-country=United-States}  => {race=White}                   0.5415421 0.9051090  0.5983170 1.058554 26450
    ## [3] {race=White, sex=Male, capital-loss=None} => {native-country=United-States} 0.5113632 0.9190124  0.5564268 1.024056 24976    

8.6 연습문제

arules 패키지의 Income 자료에 대하여 연관규칙을 탐색하라.