49. arules Package
in Study on R Programming
Overview
비지도 학습(unSupervised Learning)에서 연관 분석을 수월하게 해결해주는 arules와 연관 규칙을 시각화하기 위한 arulesViz 패키지에 대해 알아본다.
arules 패키지
어느 상점에 30개의 품목을 판매한다고 가정할때, 발생 가능한 품목의 수는 2^30 = 1,073,741,824(10억개 이상) 이다.
이것은 현실적으로 불가능해 보이는 작업이다.
다행스럽게도 R에서는 arules(Association Rule)라는 패키지를 이용하면 좀 더 수월하게 해결할 수 있다.
arules는 최소 지지도 가지 치기 알고리즘인 Apriori(아프리오리) 알고리즘을 이용하여 연관 규칙을 분석한다.
연관 규칙 검색 공간을 줄이고자 하는 기준선으로, 이전에 믿고 있었던 내용을 다시 사용한다.
예를 들어서, {병문안 카드}와 {꽃}의 빈도가 각각 많았다면 {병문안 카드, 꽃}의 빈도도 역시 많을 것이다. 라는 것이다.
또한 Adult, Groceries 데이터 셋과 as(), labels(), crossTable()
등의 연관 분석에 필요한 여러 가지 함수들을 제공한다.
apriori의 원칙
빈번한 itemSet의 부분 집합 역시 빈번해야 한다.
제공 함수
apriori() 함수
트랜잭션 객체를 대상으로 연관 규칙을 발견해 주는 함수이다.
반환 타입은 rules 객체이다.
- 사용 형식
apriori(data, parameter=list(supp, conf), control = NULL)
- data
- transaction data, matrix, data frame
- control
- control parameter
- parameter
- supp : 규칙을 생성하기 위한 최소한의 지지도(기본 값 : 0.1)
- conf : 규칙을 생성하기 위한 최소한의 신뢰도(기본 값 : 0.8)
- maxlen(10) : 규칙에 포함되는 최대 길이(lhs 와 rhs 의 길이를 합친 길이)
- minlen(1) : 규칙에 포함되는 최소 길이
- smax(1)
image() 함수
격자 형식으로 데이터를 시각화한다.
행은 트랜잭션, 열은 항목을 보여준다.
- 사용형식 :
image(tran)
inspect() 함수
트랜잭션 객체에 대한 연관 규칙의 내용을 확인하기 위한 함수이다.
LHS : 규칙을 구성하는 왼쪽을 의미
RHS : 규칙을 구성하는 오른쪽을 의미
- 사용 형식
- inspect(rules), inspect(tran)
- rules
- apriori() 함수가 반환하는 객체를 사용
itemFrequency() 함수
제품이 포함된 거래의 비율을 보여준다.
- 사용 형식 :
itemFrequency(x = groceries[, 1:3])
- x : transaction 객체(희소 행렬)
sort() 함수
rules 객체에 대한 정렬을 수행해준다.
- 사용 형식 :
sort(rules, descreasing=T, by='confidence')
- descreasing : 정렬 방식을 지정(Default : T)
- by : 정렬을 수행할 항목 지정(Default : ‘support’)
subset() 함수
rules 객체 중에서 특정 조건을 만족하는 항목에 대한 부분 집합을 추출한다.
- 사용 형식
wmilk <- subset(rules, rhs %in% 'whole milk')
- rules
- rules 객체
- 연산자
%in% 'a'
: a인 항목을 추출%in% c('a','b')
: a또는 b인 항목을 추출%pin% 'a'
: 항목에 문자 a를 포함하고 있는 항목을 추출
summary() 함수
item의 수와 트랜잭션의 수를 요약 통계량으로 보여준다.
- 데이터가 9835행 169열을 가지고 있음
- a density of 0.02609146는 매트릭스에서 0이 아닌 칸의 비율
영업 시간 총 거래건수 = 9835(행) * 169(열) * 0.02609146 = 43,367 개
거래 건수당 평균 구매 개수는 43,367 / 9835 = 4.409456024개 - 가장 빈도가 많은 품목은 전지 우유(whole milk)로써 2513건 whole milk의 거래 비율은 2513 / 9835 = 0.255516014 = 25.55%
거의 4회당 1번은 판매가 된다고 볼 수 있음 - 물건 1개만 팔린 건수가 2159건
물건 32개가 팔린 적이 단 1건
transactions() 함수
트랜잭션 객체를 생성해주는 함수이다.
거래한 데이터에 대하여 희소 매트릭스를 생성해준다.
- 사용 형식
read.transactions(file, format=c('basket', 'single'), sep=NULL, cols=NULL, rm.duplicate=FALSE, encoding='unknown')
- file
- 분석 수행을 하기 위한 파일
- format
- 트랜잭션 데이터 셋의 형식
- single : 트랜잭션 구분자(transactionID)에 의해서 상품(item)이 대응된 경우
- basket : 여러 개의 상품(item)으로 구성된 경우
- sep
- 각 상품을 구분하는 구분자
- cols
- single인 경우 읽을 컬럼 수를 지정(basket 생략)
- rm.duplicate
- 중복된 트랜잭션의 item 제거
- encoding
- 데이터 셋의 인코딩 방식 지정
출력 결과 예시
transactions in sparse format with 6 transactions (rows) and 5 items (columns)
해당 거래 건수가 6건이고, 총 5개의 거래 품목이 있음
매트릭스의 각 칸은 구매된 제품이면 숫자 1, 그렇지 않으면 0
arulesViz 패키지
plot() 함수
연관 규칙(association rules)과 itemsets을 시각화하기 위한 함수이다.
- 사용 형식
plot(rules, method='graph', control=list(type='items'))
- rules
- rules 객체
- method
- 그리는 방법을 지정
- graph
- 큰 원과 작은 원을 이용하여 시각화
- 물품들 간의 연관성 그래프
- 화살표의 두께는 지지도, 화살표의 색상의 진하기는 향상도(lift)
- grouped
- 좌측은 연관 규칙의 조건(LHS), 결과(RHS)를 우측으로 한 그래프
- 원의 크기는 각 규칙의 지지도(support)를 의미
- 색상의 진하기는 향상도(lift)를 의미
- 조건(LHS) 앞 수는 그 조건으로 되어 있는 연관 규칙의 수
- 조건(LHS)에 “+”와 함께 표시된 숫자는 표시가 생략된 물품 수
- scatterplot
- 지지도와 신뢰도를 산점도로 보여줌
- x 축 : 지지도(support)
- y 축 : 신뢰도(confidence)
- 색상 : 향상도(Lift)
- control
- control = list(type = “itemsets”)
- control = list(type = “items”)
- 마지막으로 method 인자를 “paracoord”로 하면 각 물품 간의 연간관계를 병렬적으로 확인할 수 있음
- 가로축의 숫자는 조건(LHS)의 물품 수를 의미
plot(dvd.rules, method = "paracoord", control = list(reorder = TRUE))