Data Mining이란?
"Knowledge(Rule) Discovering"
= 방대한 양의 Database로 부터 유용한 지식, 패턴을 찾아내는 것(일반적으로 예측하지 못한 것)
: Data Mining에 사용되는 알고리즘
e.g. rule (if A then B)
if contains apple & cheese(if) => contains beer (then)
< Examines for algorithm >
: 우연히 발견(<> 당연히 예상되는 것)하게 되는 유의미한 패턴 혹은 규칙
e.g. rule
빵이 존재할 확률 : 0.1
파우더가~ : 0.04
=> 빵과 파우더가 존재할 확률 : 0.004 (둘은 독립사건이므로)
그렇다면 여기서 Interesting Rule이란? = Surprising Rule
위 예제를 실제 시험한 결과 1000개 중 20개에 빵과 파우더가 존재한다면?
=> 예상 외 결과 (통계에 따르면 1000개중 4개꼴로 나와야하므로)
=> "빵과 세제"의 구매가 연관이 있을 수 있다! 라는 Knowledge
Data Mining의 핵심은 Interesing Rule을 찾아내는 것
(이 외의 패턴은 'Rule'이라기보다 'Fact'에 가까움. 즉 당연한 것)
즉, Data Mining은 '사실 찾기'가 아니라 '지식 찾기' (당연한 상식을 찾는 것은 의미 없음)
※ if A then B 와 같은 rule은 수억개가 가능할 수 있음. 각 rule에 대해 accuracy와 coverage를 계산하는 것 또한 무수히 많은 연산을 포함
=> 이를 보다 효과적으로 찾고자 사용하는 것이 "Apriori Algorithm"
20records of supermarket transaction, 9 things to be sold
If a basket contains beer and cheese, then it also contains honey
① confidence (accuracy)
= if를 만족할 때, then을 얼마나 만족하는가 (1/2) = 50%
beer & cheese : 2개
beer & cheese & honey : 1개
② coverage (support)
= 전체 database 중 if를 만족하는 것이 얼마나 되는가 (2/20) = 10%
beer & cheese : 2개
전체 : 20개
ⓐ K itemset = 장바구니에 k개의 item이 존재한다
e.g. {beer, cheese, eggs} : 3-itemset
{cheese} : 1-itemset
ⓑ large itemsets = item이 많다는 얘기가 아니라 "larger than minimum support"★보다 크다는 컨셉
ⓒ Support = support(%)이상의 itemset이 존재
ⓓ Lk = all large K-itemsets in DB
ⓔ Ck = candidate large k-itemsets
① minimum support를 갖는 모든 itemsets를 찾을 것
② itemsets을 가지고 interesting rules를 생성
Assumption : minimum support is 30%
Find all large 1-itemsets
20개 중 30% 이상이므로, 6개 이상인 1-itemset을 찾을 것
L1 = { {a}, {b}, {c}, {d}, {f} }
finding large itemsets
C2 = { {a,b}, {a,c}, {a,d},,, {f,g} }
L2 = {C2중에 minimum support 이상인 것들}
C3 = {L2로부터 3-itemset 생성}
이런식으로 Lk가 공집합이 될 때까지 진행하며, 이 과정에서 생성된 모든 L1,L2,,, 가 minimum support 이상을 만족하는 itemset
For(k=2;while Lk-1 is non empty;k++)
{
Ck = apriori-gen(Lk-1)
For each c in CK, initilize c.count to zero
For all records r in DB
{
Cr = subset(Ck,r);
for each c in Cr, c.count++
}
Set LK:= all C in Ck whose count >= minsup
}