59doit
[ R ] 연관분석 #1 본문
연관분석
연관성 분석 기법은 방대한 데이터 세트에서 객체나 아이템 간의 연관관계를 찾아내는 분 석기법이다.
하나의 거래나 사건에 포함된 항목 간의 관련성을 파악하여 둘 이상의 항목들로 구성된 연관성 규칙을 도출하는 탐색적인 분석 방법
연관성 분석 주요 측도 : 지지도(Support), 신뢰도(Confidence), 향상도(Lift)
- 지지도(Support) : 전체 데이터 세트에서 해당 아이템 집합이 포함된 비율
- 신뢰도(Confidence) : {X}→{Y}에서 ‘조건’ X를 포함한 아이템 세트 중에서 X, Y 둘 다 포함된 아이템 세트가 발생한 비율을 말하는데, ‘조건 X’가 발 생했다는 조건하에 규칙의 ‘결과 Y’가 발생할 확률 신뢰도 (X→Y)와 신뢰도 (Y→X)는 서로 같지 않다
- 향상도(Lift) : 조건 {X}가 주어지지 않았을 때의 결과 {Y}가 발 생할 확률 대비, 조건 {X}가 주어졌을 때의 결과 {Y}의 발생 확률의 증가 비율을 의미 한다. 향상도가 1을 넘어가면 조건과 결과 아이템 집합 간에 서로 양의 상관관 계가 있으며, 1보다 작으면 서로 음의 상관관계 만일 향상도가 1로 나타나면 조건과 결과 아이템 집합은 서로 독립적인 관계라고 할 수 있다.
(1) 연관규칙 평가척도
- (1) 지지도(support) 전체에 대한 품목A와 품목B가 동시에 일어나는 확률
- Support = P(A∩B) = 품목 A와 품목 B가 동시에 포함된 거래 수 / 전체 거래수
- 일반적으로 지지도가 낮다는 의미는 A와 B를 동시에 구매하는 거래가 자주 발생하지 않음을 의미
- Support(A → B) 와 Support(B → A)가 상호 대칭적으로 서로 같은 값을 가진다.
- (2) 신뢰도(confidence) 품목 A가 구매될 때 품목 B가 동시에 구매되는 경우의 조건부확률
- Confidence (A → B) = P(B|A) = 품목 A와 품목 B가 동시에 포함된 거래 수 / 품목 A를 포함한 거래수
- 지지도는 상호 대칭적으로 서로 같은 값을 가지기 때문에 포함 비중이 낮은 경우에는 연관성을 판단하는데 어려움이 있어 이를 보완한 것이 신뢰도 품목 A가 포함된 거래 중에서 품목 B를 포함한 거래의 비율
- (3) 향상도(lift) 하위 항목들이 독립에서 얼마나 벗어나는지의 정도를 측정한 값
- Lift(A → B) = 신뢰도 / 품목 B를 포함한 거래율
- 지지도 또는 신뢰도가 높은 연관성 규칙 중에서 우연히 연관성이 높게 보이는 것들이 나타날 수 있는데 이를 보완하기 위해서 향상도가 사용된다.
- 향상도가 1에 가까우면 두 상품은 서로 독립적
- 향상도가 1보다 작으면 두 상품은 음의 상관성
- 향상도가 1보다 크면 두 상품은 양의 상관성
- 연관규칙에 의미가 있으려면 향상도가 1보다 큰 값이어야 한다.
- 향상도의 값이 클수록 상품 간의 연관성이 높다고 볼 수 있다.
ex) 트랜잭션 객체를 대상으로 연관규칙 생성
#1 연관분석을 위한 패키지 설치
install.packages("arules") library(arules) |
#2 트랜잭션(transaction) 객체 생성
read.transaction()함수
tran <- read.transactions("C:/tran.txt", format = "basket", sep=",") tran # transactions in sparse format with # 6 transactions (rows) and # 5 items (columns) |
format : 데이터의 형식을 나타내는 문자열 집합 : "basket", "single"
sep : 필드가 구분되는 방법을 지정하는 문자열 데이터 파일. 기본값()은 공백에서 분할된다.""
#3 트랜잭션 데이터 보기
inspect(tran) # items # [1] {라면, 맥주, 우유} # [2] {고기, 라면, 우유} # [3] {고기, 과일, 라면} # [4] {고기, 맥주, 우유} # [5] {고기, 라면, 우유} # [6] {과일, 우유} |
inspect () 함수 : 연관 및 트랜잭션을 읽을 수 있는 형식으로 표시
#4 규칙(rule) 발견1
rule <- apriori(tran, parameter = list(supp = 0.3, conf = 0.1)) inspect(rule) # # lhs rhs support confidence coverage lift count # # [1] {} => {과일} 0.3333333 0.3333333 1.0000000 1.000 2 # # [2] {} => {맥주} 0.3333333 0.3333333 1.0000000 1.000 2 # # [3] {} => {고기} 0.6666667 0.6666667 1.0000000 1.000 4 # # [4] {} => {라면} 0.6666667 0.6666667 1.0000000 1.000 4 # # [5] {} => {우유} 0.8333333 0.8333333 1.0000000 1.000 5 # # [6] {맥주} => {우유} 0.3333333 1.0000000 0.3333333 1.200 2 # # [7] {우유} => {맥주} 0.3333333 0.4000000 0.8333333 1.200 2 # # [8] {고기} => {라면} 0.5000000 0.7500000 0.6666667 1.125 3 # # [9] {라면} => {고기} 0.5000000 0.7500000 0.6666667 1.125 3 # # [10] {고기} => {우유} 0.5000000 0.7500000 0.6666667 0.900 3 # # [11] {우유} => {고기} 0.5000000 0.6000000 0.8333333 0.900 3 # # [12] {라면} => {우유} 0.5000000 0.7500000 0.6666667 0.900 3 # # [13] {우유} => {라면} 0.5000000 0.6000000 0.8333333 0.900 3 # # [14] {고기, 라면} => {우유} 0.3333333 0.6666667 0.5000000 0.800 2 # # [15] {고기, 우유} => {라면} 0.3333333 0.6666667 0.5000000 1.000 2 # # [16] {라면, 우유} => {고기} 0.3333333 0.6666667 0.5000000 1.000 2 |
arules패키지에서 제공하는 apriori()함수를 이용하여 트랜잭션 객체를 대상으로 규칙 발견
apriori(트랜잭션 data, parameter=list(supp, conf))
Default: support: 0.1, confidence: 0.8
>> 임의적으로 설정하는것
#5 규칙(rule) 발견2
rule <- apriori(tran, parameter = list(supp = 0.1, conf = 0.1)) inspect(rule) |
support = 0.1, confidence = 0.1)
>> 임의적으로 설정하는것
(2) 트랜잭션 객체 생성
거래 데이터를 대상으로 트랜잭션 객체를 생성하기 위해서 arules패키지에서 제공되는 read.transaction()함수 사용 read.transactions(file, format=c(“basket”, “single”), sep=NULL, cols=NULL, rm.duplicate=FALSE, encoding=”unknown”)
file: 트랜잭션 객체를 생성할 대상의 데이터 파일명
format: 트랜잭션 데이터 셋의 형식 지정(basket 또는 single)
- basket: 여러 개의 상품(item)으로 구성된 경우 (transaction ID없이 상품으로만 구성된 경우)
- single: 트랜잭션 구분자(Transaction ID)에 의해서 상품(item)이 대응된 경우
sep: 각 상품(item)을 구분하는 구분자 지정 cols: single인 경우 읽을 컬럼 수 지정(basket은 생략)
rm.duplicates: 중복 트랜잭션 상품(item) 제거
encoding: 데이터 셋의 인코딩 방식 지정
ex) single 트랜잭션 객체 생성
stran <- read.transactions("C:/demo_single", format = "single", cols = c(1, 2)) inspect(stran) # items transactionID # [1] {item1} trans1 # [2] {item1, item2} trans2 |
format=”single” 속성: 한 개의 트랜잭션 구분자에 의해서 상품(item)이 연결된 경우
sep 속성 제외: item은 공백으로 구분
cols 속성: 처리할 컬럼 지정
ex) 중복 트랜잭션 제거
#1 트랜잭션 데이터 가져오기
stran2 <- read.transactions("C:/single_format.csv", format = "single", sep = ",", cols = c(1, 2), rm.duplicates = T) |
중복된 트랜잭션이 존재하는 경우 해당 트랜잭션을 제거하기 위해 rm.duplicates=T 속성 지정
#2 트랜잭션과 상품수 확인
stran2 # transactions in sparse format with # 248 transactions (rows) and # 68 items (columns) |
#3 요약통계량 제공
summary(stran2) |
ex) 규칙 발견(생성)
#1 규칙 생성하기
astran2 <- apriori(stran2) |
arules패키지에서 제공되는 apriori()함수는 연관규칙의 평가척도를 이용하여 규칙을 생성
#2 발견된 규칙 보기
inspect(astran2) |
#3 상위 5개의 향상도를 내림차순으로 정렬하여 출력
inspect(head(sort(astran2, by = "lift"))) |
lift(향상도)에서는 decreasing = T 필요 없이 내림차순 정렬이 된다
ex) basket형식으로 트랜잭션 객체 생성
btran <- read.transactions("C:/demo_basket", format = "basket", sep = ",") inspect(btran) # items # [1] {item1, item2} # [2] {item1} # [3] {item2, item3} |
format=”basket” : 트랜잭션 구분자(transaction ID)없이 상품으로만 구성된 데이터 셋을 대상으로 트랜잭션 객체를 생성할 경우
cf)
single 트랜잭션 구분자에 의해서 상품이 대응된 경우
cols : single인 경우 읽을 컬럼 수 지정 (basket은 생략)
'통계기반 데이터분석' 카테고리의 다른 글
[ R ] xgboost (0) | 2022.12.05 |
---|---|
[ R ] 연관분석 #2 시각화 (0) | 2022.12.04 |
[ R ] 군집분석 #2 (0) | 2022.12.03 |
[ R ] 군집분석 #1 (0) | 2022.12.03 |
[ R ] 오분류표 (1) | 2022.12.03 |