#title 연관성 분석 [[TableOfContents]] ==== Multi-Dimension Association Rule ==== age(X, "20...29") ^ income(X, "20K...29K") => buys(X, "CD Player") [지지도= 2%, 신뢰도= 60%] * 나이가 20~29세이고, 수입이 20000 ~ 29000인 고객중에서 2%가 CD플래이어를 구입했으며, 이 그룹에 속한 고객이 CD플래이어를 구매할 확률은 60%이다. * age, income, buys와의 연관성에 주목한다. (Multi-Dimension Association Rule) ==== Single-Dimension Association Rule ==== contains(T, "Computer") => Contains(T, "Software") [지지도= 1%, 신뢰도= 50%] * 모든 거래중 1%는 Computer와 Software를 모두 구매했으며, 거래 T가 Computer를 포함한다면 그 거래가 Software도 포함할 확률이 50%이다. * 포함이라는 술어(또는 속성)이 반복된다. (Single-Dimension Association Rule) ==== 흥미도(Interestingness measure) ==== 지지도(Support) * 설명: 규칙 패턴이 나타나는 작업관계 데이터 투플들의 백분율 * 계산 * support( A => B ) = P( A 교집합 B ) = 두항목이 같이 거래된 수 / 전체거래 수 * 전체거래 중 A와 B가 동시에 거래된 비율 신뢰도(confiednce) * 설명: 규칙의 관련 정도의 추정 * 계산 * confidence( A => B ) = P( B | A ) = 두항목이 같이 거래된 수 / 항목A의 거래수 * A의 거래중 B가 포함된 거래의 비율 향상도(Lift) * 설명: 항목간의 관련 성격 * 계산 * lift( A => B ) = P( B | A ) / P( B ) = 항목A의 거래중 항목B가 포함된 거래의 비율 / 전체거래 중 항목B가 거래된 비율 * 항목 B가 A와 동시에 구매되는 경우(신뢰도)와 B자체만 구매되는 경우의 비율 {{{ if(lift == 1) result = "A와 B가 서로 독립적인 관계(예: 과자, 후추)" else if(lift > 1) result = "A와 B가 서로 양의 관계(예:빵, 버터)" else if(lift < 1) result = "A와 B가 서로 음의 관계(예: 지사제, 변비약)" }}} ==== 언제 흥미롭다고 하는가? ==== * 최소지지도 임계값(minimum support threshold) * 최소신뢰도 임계값(minimum confidence threshold) {{{ IF(최소지지도 임계값 == "만족" AND 최소신뢰도 임계값 == "만족") Result = "흥미로움" ELSE Result = "흥미롭지않음" }}} * 최소지지도 임계값과 최소신뢰도 임계값을 둘 다 만족하는 규칙을 강한(strong) 규칙이라고 한다. * 두 임계치의 결정은 사용자나 해당분야의 전문가들에 의해 결정됨. ==== R 예제 ==== 소스가 좀 이상하다..R로 하니까 너무 느리다. SSAS data mining으로 해야 것다. http://nicolemargaretwhite.blogspot.kr/2013/11/mining-for-association-rules-in-r.html --> dataframe으로 하니까 .. 이거 참고하자. http://prdeepakbabu.wordpress.com/2010/11/13/market-basket-analysisassociation-rule-mining-using-r-package-arules/ {{{ transaction.csv =========== 1001,Choclates 1001,Pencil 1001,Marker 1002,Pencil 1002,Choclates 1003,Pencil 1003,Coke 1003,Eraser 1004,Pencil 1004,Choclates 1004,Cookies 1005,Marker 1006,Pencil 1006,Marker 1007,Pencil 1007,Choclates #install.packages("arules") library("arules") tr = read.transactions(file="c:\\rdata\\transaction.csv", rm.duplicates= FALSE, format="single",sep="," ,cols =c(1,2)); basket_rules <- apriori(tr,parameter = list(sup = 0.5, conf = 0.9,target="rules")) inspect(basket_rules) rules.sorted <- sort(basket_rules, by="lift") inspect(rules.sorted) #install.packages("arulesViz") library(arulesViz) plot(basket_rules) plot(basket_rules, method="graph", control=list(type="items")) plot(basket_rules, method="paracoord", control=list(reorder=TRUE)) }}} {{{ r <- sqlQuery(conn, " select tid, items from trnsaction_table ") r.u <- unique(r) head(r.u) r.u <- sapply(r.u, unique) names(r.u) <- paste("Tr", 1:length(r.u), sep="") str(r.u) ru.tr <- as(r.u, "transactions") rules <- apriori(ru.tr, parameter = list(supp = 0.5, conf = 0.9, target = "rules")) }}} ==== 참고자료 ==== * [http://cran.r-project.org/web/packages/arulesViz/vignettes/arulesViz.pdf Visualizing Association Rules] * http://www.rdatamining.com/examples/association-rules * [attachment:연관성_분석_박종명.doc 연관성 분석(박종명)]