지난 포스팅에서는 시간/순서를 고려한 순차 패턴 분석 (sequence pattern analysis)에 대해서 알아보았습니다.

 

이번 포스팅에서는 연관규칙 분석의 대상이 되는 항목의 분류체계 (Taxonomy)와 가상 항목 (Virtual Item)에 대해서 알아보겠습니다. 

 

이번 포스팅에서 다루려는 주제는 1~2시간 짜리 연관규칙 교육 프로그램에서는 시간이 부족한 관계로 잘 안다루는 내용입니다만, 매우 중요한 부분입니다.  실전 프로젝트에서 보면 "써먹을 수 있는 규칙"이 나오느냐, 안나오느냐에 상당히 관련이 있는 부분이구요, 사실 순서상으로 보면 지금 쓰는 이 글이 연관규칙 분석을 할 때 현업(業 전문가, domain expert)과 함께 프로젝트 초반에 분석 시나리오 잡을 때 의사결정을 해야만 하는 매우 중요한 부분입니다.

 

 

 

1) 항목 분류 체계 (Taxonomy)

 

상품 구매 연관규칙을 분석한다고 가정했을 때, 상품 분류 체계를 예로 생각하시면 됩니다.  백화점, 마트, 홈쇼핑, 인터넷쇼핑몰, 슈퍼마켓 등... 유통업체는 아래와 같은 형태의 대/중/소/세/세부속성별로 계층(Hierarchy)을 가진 상품 분류 체계를 가지고 있습니다.

 


 * Reference: "Data Mining Techniques", by Michael J.A.Berry, Gordon S.Linoff 



소분류 -> 중분류 -> 대분류 방향으로 올라갈 수록 일반화(generalization), 추상화 되며, 소분류 -> 세분류 -> 세부속성 방향으로 내려갈 수록 구체적(detail)인 항목이 됩니다.

 

이게 연관규칙 도출에 왜 중요한지에 대해서 예를 들어서 설명해보겠습니다.

 

너무 상위 항목 (대분류, 혹은 중분류)을 가지고 연관규칙을 분석하면 "실행 가능한 수준의 규칙"이 아닌 경우가 많습니다.  한마디로 업무에 적용하기가 애매한 경우입니다.  가령, 대분류를 가지고 분석을 해서 "{냉동식품} → {아동의류} 라는 연관규칙이 나왔다고 해봅시다.  '냉동식품'이나 '아동의류' 담당 매니저, 마케터에게 이 규칙을 가져가면 아마 "so what?", "나보고 뭘 어쩌라고요?" 소리 듣기 십상입니다.

 

반면에, 너무 하위 항목 (가령, 세부속성의 '브랜드')을 가지고 연관규칙 분석을 수행하면 당장 실행가능한 규칙이 나올 여지는 있습니다만, 단점으로는 일단 연산 시간이 무척 많이 걸립니다.  그리고 빈도수가 너무 작은 다수의 '브랜드'들의 경우 비빈방항목 pruning 원칙에 의해 규칙에 안나타날 수 있습니다. 

 

결국 너무 상위 level이어도 안되고, 너무 하위 level이어도 안좋고 해서, 적당한(?) 수준을 찾아서 분석을 수행해야 합니다. 그리고 여기서 '적당한(?)'은 "분석 목적이 무엇인가?", "어디에 써 먹을려고 연관규칙 분석을 하는 것인가?", "최종 사용자는 누구이며 그 사용자가 만족하는 수준은 어느 level인가?" 등의 질문에 답하는 과정에서 결정이 된다고 보면 됩니다.  이런 질문에 답하려면 현업(domain expert)이 꼭 필요하겠지요?  業은 잘 모르는 분석전문가가 현업 참여없이 단독으로 taxonomy 분석 level 정해놓고 '연관규칙이 이렇게 나왔네요'하고 가져가면 그 규칙을 사용할 현업한테서 한 소리 (가령, '이거 왜 하셨어요?', '이걸로는 암것도 못하겠는걸요...') 듣고 분석을 처음부터 다시 수행해야할 수도 있습니다. 

 

사실, 더 큰 문제는 상품분류체계(taxonomy) 관리가 잘 안되는 경우가 매우 많다는 점입니다.  MD 담당자가 새로 바뀌면 기존의 상품분류체계와 align을 안시키고 이상한 상품코드를 새로 추가하는 경우도 있구요, 단종된 상품코드는 그때 그때 정리를 해줘야 하는데요, 그대로 두고 있는 경우도 있습니다. 이거 교통정리하는게 참 고역인데요, 자칫 연관규칙 분석하는 업무량보다 상품분류체계 정비하는게 더 시간을 많이 잡아먹는, 배보다 배꼽이 더 큰 웃긴 일이 생길 수도 있습니다. -_-;

 

또 하나 문제는요, 상품분류체계가 마케텅의 입맛에 딱 안맞을 수 있다는 점입니다. 보통은 MD가 상품분류체계를 기획하고, 정보를 입력하고, 관리를 합니다.  그러다 보니 '마케팅' 부서의 활용 관점은 안들어가 있다고 보면 됩니다.  바로 여기서 가상항목(virtual item)에 대한 필요성이 생깁니다.

 

 

 

2) 가상 항목 (Virtual Item)

 

가상 항목 (virtual item) 이란 원래의 항목분류체계(taxonomy)에는 없는 가상의 항목을 새로 만들어 사용하는 것입니다. 가령, 아래의 예처럼 원래의 항목분류체계에는 'Handbag'과 'Watch'의 카테고리에 각 각 속해있던 상품(item)들을 '브랜드'라는 새로운 관점을 가지고 묶어서 'GUCCI handbag'과 'GUCCI watch'를 'GUCCI Products'라는 새로운 가상의(기존에는 없었던) 항목(virtual item)으로 만들고, 'DKNY handbag'과 'DKNY watch'를 'DKNY products'라는 새로운 가상의 항목(virtual item)으로 만들어서 연관규칙 분석에 사용하게 됩니다.

 

 

 

위의 예에서는 상품 카테고리 간 동일한 브랜드별로 virtual item을 만들어보았습니다. 

 

이 외에도 분석해서 사용하려는 목적에 따라서 다양한 아이디어를 생각해볼 수 있습니다.

가령, 식품을 수입품과 국산품으로 구분하는 virtual item 이라든지, 유아식품 중 아토피 관련 식품이나 유기농 식품 여부 virtual item도 생각해볼 수 있습니다.  상품구매 요일(평일, 공휴일)이나 시즌, 아니면 event 성 (생일, 기념일, 00day 관련 등) 상품에 대한 virtual item도 생각해 볼 수 있겠습니다. 

 

비빈발항목을 묶어서 빈발항목으로 만든 다음에 이에 적당한 naming을 해서 가상항목으로 만들어서 분석을 하는 것도 재치있는 분석요령입니다.  

 

 

 

3) Segmented multiple sets mining

 

마지막으로, 실무 분석할 때 요긴하게 써먹곤 했던 것 하나 더 말씀드리자면, 연관규칙 도출에 영향이 클 것으로 예상되는 특정 기준, 관점이 있다면 이를 가지고 사전에 데이터셋을 나누어서 연관규칙 분석을 하라는 것입니다.

 

가령, 아래의 예처럼 상품 연관구매 규칙을 분석한다고 했을 때, 성(gender)과 연령(age)에 따라서 상품 구매 패턴이 큰 차이를 보일 것이라고 예상을 한다면 성별과 연령대별로 segments를 나누어서 각 segment별로 나누어서 연관구매규칙을 분석하면 된다는 뜻입니다.

 

 

 

물론 지지난번에 포스팅했던 '범주형 및 연속형 데이터의 연관규칙 분석' 방법을 활용해서 연령대, 성별을 이항변수화(binarization)하여 연관규칙 분석을 수행해도 되긴 합니다.  편한 방법을 사용하시면 되겠습니다.

 

다음 포스팅에서는 군집분석(Clustering)에 대해서 알아보도록 하겠습니다.

 

이번 포스팅이 도움이 되었다면 아래의 '공감 ~♡'를 꾸욱 눌러주세요. ^^

 

728x90
반응형
Posted by Rfriend
,

지난번 포스팅에서는 연관규칙(association rule)의 평가척도로서 지지도(support), 신뢰도(confidence), 향상도(lift), IS측도(Interest-Support), 교차지지도(cross support) 에 대하여 알아보았습니다.

 

이번 포스팅에서는 연관규칙 (1세대) 알고리즘으로서 Apriori algorithm 에 대해 소개하도록 하겠습니다.  알고리즘을 이해하면 컴퓨터 내부에서 무슨 일이 일어나고 있는지, 컴퓨터가 어떻게 그 많은 연산을 효율적으로 수행하는지 원리를 알 수 있습니다.

 

 

 

1) 왜 효율적인 연관규칙 탐색 알고리즘이 필요한가?

 

거래에서 나타나는 모든 항목들의 집합(item set)을 이라고 할 때, 모든 가능한 부분집합의 개수는 공집합을 제외하고 개 입니다.

 

그리고 모든 가능한 연관규칙의 개수입니다.

 

이를 그래프로 나타내면 아래와 같은데요, 가능한 부분집합의 개수나 연관규칙의 개수가 item 이 증가할 때 마다 지수적으로 증가함을 알 수 있습니다.

 

item이 5개이면 subset 개수가 31개, rule 개수가 180개가 되며, => item이 10개만 되어도 subset 개수가 1023개, rule 개수가 57002 개가 됩니다.  이렇게 지수적으로 증가하는 subset과 rule들을 연필과 종이를 가지고 일일이 계산한다는 것은 미친짓입니다.  그리고 컴퓨터로 계산한다고 해도 계산복잡도와 필요 연산량이 어마무시하게 많아져서 시간이 굉~장히 오래 걸립니다.(심하면 하루를 꼬박 넘기고, 이틀, 사흘....)  이러므로 "빠르고 효율적인 연관규칙 계산 알고리즘"과 "연관규칙 평가 측도(기준)"이 필요한 것입니다.  

 

 

 

 

 

5개의 원소 항목을 가지는 I={A, B, C, D, E} 에 대하여 가능한 모든 항목집합을 예시로 풀어보면 아래와 같습니다. 

 

 

 

 

 

2) 연관규칙 생성 전략 및 Algorithm에는 무엇이 있나?

 

부분집합의 개수가 2^k - 1 개로서 지수적으로 증가하기 때문에 모든 경우의 수에 대해 지지도를 계산하는 것이 연산량이 엄청납니다. 그래서 연산량을 줄이기 위해 아래의 3가지 전략 중의 하나를 사용합니다.

 

1) 모든 가능한 항목집합의 개수(M)를 줄이는 전략 ▶ Apriori algorithm

2) Transaction 개수(N)을 줄이는 전략 ▶ DHP algorithm

3) 비교하는 수(W)를 줄이는 전략 ▶ FP-growth algorithm

 

 

 

3) 빈발항목집합을 추출하는 Apriori algorithm 의 원리, 원칙은 무엇인가?

 

위의 3개의 알고리즘 중에서 1세대 Apriori algorithm에 대해서만 예를 들어서 설명해보겠습니다.

 

최소지지도 이상을 갖는 항목집합을 빈발항목집합(frequent item set)이라고 합니다.  모든 항목집합에 대한 지지도를 계산하는 대신에 최소 지지도 이상의 빈발항목집합만을 찾아내서 연관규칙을 계산하는 것이 Apriori algorithm의 주요 내용입니다. 

 

빈발항목집합 추출의 Apriori Principle

 

1) 한 항목집합이 빈발(frequent)하다면 이 항목집합의 모든 부분집합은 역시 빈발항목집합이다.
(frequent item sets -> next step) 

 

2) 한 항목집합이 비비발(infrequent)하다면 이 항목집합을 포함하는 모든 집합은 비빈발항목집합이다. (superset -> pruning)

 

 

Apriori Pruning Principle


If there is any itemset which is infrequent, its superset should not be generated/tested
(Agrawal & Srikant @VLDB’94, Mannila, et al. @ KDD’ 94)

 

위의 Apriori Pruning Principal 을 도식화한 예시는 아래와 같습니다.  아래 예시 그림처럼 {A, B} item set이 비빈발항목(infrequent item set)이면 그 및에 {A, B}를 포함해서 줄줄이 딸린 {A, B, C}, {A, B, D}, {A, B, E}, {A, B, C, D}, {A, B, C, E}, {A, B, D, E}, {A, B, C, D, E}도 역시 비빈발항목인, 영양가 없는 superset 일 것이므로 볼 필요도 없으니 (안봐도 비디오...), 아예 처음부터 가지치기(pruning)를 하라는 것입니다. 

 

 

 

{A, B, C, D, E}의 5개 원소 항목을 가지는 4건의 transaction에서 minimum support 2건 (=2건/총4건=0.5) 기준으로 pruning 하는 예를 들어보겠습니다.

 

 

 

위의 예시를 tree 형식으로 색깔로 infrequent item set과 그의 하위 superset을 나타내보면 아래와 같습니다.  색깔 칠해진 superset 들은 가지치기(pruning) 당해서 지지도 계산을 하지 않게 됩니다.

 

 

[그림 1]

 

 

 

위에서 예와 그림으로 소개한 빈발항목집합 추출 Pseudo Aprior algorithm 은 아래와 같습니다.

 

Pseudo Apriori algorithm

 

[Reference] "Fast Algorithms for Mining Association Rules", Rakesh Agrawal, Ramakrishman Srikant, 1994

 

(위의 (3)번 apriori-gen(Lk-1) 에서 (k-1)-항목 빈발항목집합후보를 생성하고, (9)번에서 minimum support  count 보다 큰 빈발항목집합만 추출, 즉 최소지지도 미만은 pruning)

 

 

4) 빈발항목집합의 후보를 생성하고 연관규칙을 도출하는 Apriori algorithm의 원리는?

 

이후에 빈발항목집합의 후보(candidates list)를 생성하고, 연관규칙을 생성한 후에, 최소신뢰도 기준 (minimun confidence criteria)를 적용해서 최소 신뢰도에 미달하는 연관규칙은 제거(pruning)하게 됩니다. 

 

빈발항목집합 후보를 생성하기 위해, (k-1)-항목 빈발항목집합에서 처음 (k-2) 항목이 같은 항목들만 혼합하여 k-항목 빈발항목집합 후보를 생성합니다. 

아래에 2-항목 빈발항목집합 을 가지고 3항목 빈발항목후보 를 생성하는 예를 들어보겠습니다.  2-항목 빈발항목집합에서 (k-1)-항목, 즉 1-항목이 같은 항목은 노란색을 칠한 {B}항목입니다. 따라서 {B}항목이 포함된 {B, C}와 {B, E}를 혼합해서 k-항목 빈발항목집합, 즉 3-항목 빈발항목집합 후보를 만들면 {B, C, E} 가 됩니다. 나머지 {A, B}, {C, E}는 무시하게 됩니다.  실제로 위의 [그림1]에서 살아남은 3-항목 빈발항목집합이 {B, C, E} 입니다 (3-항목 빈발항목의 나머지 항목집합은 superset으로서 pruned 됨).

 

 

[그림2]

 

[Reference] "R, SAS, MS-SQL을 활용한 데이터마이닝", 이정진, 자유아카데미, 2011

 

 

빈발항목집합을 도출했으므로 이제 연관규칙을 생성해보겠습니다.  빈발항목집합 L의 항목들을 공집합이 아닌 두 개의 서로 다른 부분집합 X와 Y로 나누어 하나의 연관규칙 X → Y를 만들었다고 합시다. k-항목 빈발항목집합 L은 최대 개(공집합과 전체집합 제외)의 연관규칙을 만들수가 있으며, 이중에서 최소신뢰도(minimum confidence) 조건을 만족하는 연관규칙을 찾으면 됩니다.

 

연관규칙 생성의 Apriori principle


빈발항목집합 L에 대하여 연관규칙 X → Y 가 최소신뢰도 기준을 만족하지 않으면 X의 어떠한 부분집합 X'에 대한 연관규칙 X' → L - X' 도 최소신뢰도 기준을 만족할 수 없다

 

 

3-항목 빈발항목집합 C3 {B, C, E}를 가지고 6개 (=2^k - 2 = 2^3 -2 = 8 - 2 =6개) 의 연관규칙을 만들어보면 아래 그림과 같습니다.  이때 가령 아래 검정색으로 테두리를 친 {C, E} → {B} 연관규칙이 최소신뢰도 기준에 미달했다고 할 경우, 그 밑에 딸린 {C} → {B, E}, {E} → {B, C} 연관규칙은 제거(pruning)하게 됩니다.

 

[그림3]

 

 

[그림1]에서 처럼 비빈발항목(infrequent)에 대해서 최소지지도(minimum support) 기준 미달 항목을 가지치기(pruning)하고 -> [그림2]에서 처럼 빈발항목후보를 생성한 후에 -> [그림3]에서 처럼 최소신뢰도(minimum confidence) 기준 미달하는 연관규칙을 제거해나가는 반복(iteration) 작업을 새로운 연관규칙이 없을 때까지 하게 됩니다.

 

 

다음번 포스팅에서는 R을 가지고 연관규칙 분석하는 예를 들어보겠습니다.

 

이번 포스팅이 도움이 되었다면 아래의 '공감 ♡'를 꾸욱~ 눌러주세요.

 

728x90
반응형
Posted by Rfriend
,

지난번 포스팅에서는 연관규칙분석, 장바구니분석, 순차분석의 개략적인 정의와 활용에 대해서 알아보았습니다.

 

이번 포스팅에서는 연관규칙(association rule)의 흥미를 평가할 수 있는 척도(interestingness measure) 들로서 지지도, 신뢰도, 향상도, IS측도, 교차지지도에 대해서 알아보겠습니다.

 

(참고. 연관규칙은 비지도학습으로서, Y값에 대한 label이 없는 상태에서 데이터에 숨겨진 패턴을 찾는 분석기법임.  Y값에 대한 label을 가지고 하는 지도학습인 예측이나 분류에서 하는 모델 성과평가와 Y값 label 없이 숨겨진 패턴을 찾는 연관규칙의 흥미척도는 성격이 다름)

 

이들 연관규칙 평가 척도가 중요한 이유는 연관규칙 분석을 하게 되면 수십, 수백, 수천개의 association rule 들이 쏟아지기 때문에 육안으로 일일이 보고 평가하기가 너무 힘들기 때문입니다.  (1) 모래사장에서 보석반지를 눈으로 찾는 방법과, (2) 모래를 거를 수 있는 체(screening filter)에 다가 삽으로 모래를 퍼다가 부어서 체에 걸러진 물건들 속에서 보석반지가 있나 확인하는 방법 중에서 어떤 것이 더 효율적이고 효과적일지 생각해보시면 됩니다.  (2)번  체를 사용하는 후자 방법에서 사용하는 체가 오늘 포스팅의 주제가 되겠습니다.

 

 

X와 Y를 서로 공통원소가 없는 항목들의 집합이라고 하고, X->Y 를 if X then B라는 연관규칙이라고 하며, N은 전체 거래 건수, n(X), n(Y)는 항목집합 X와 Y의 거래 건수(즉, row 개수)라고 했을 때, 지지도(Support), 신뢰도(Confidence), 향상도(Lift)의 정의는 아래와 같습니다.

 

  • 지지도 (Support)

    :
    두 항목 XY의 지지도는 전체 거래 건수 중에서 항목집합 XY를 모두 포함하는 거래 건수의 비율을 말합니다.   지지도는 좋은 규칙(빈도가 많은, 구성비가 높은)을 찾거나, 불필요한 연산을 줄일 때(pruning, 가지치기)의 기준으로 사용합니다.

지지도(support) s(X→Y) 

= X와 Y를 모두 포함하는 거래 수 / 전체 거래 수 = n(X∪Y) / N 


 

  • 신뢰도 (Confidence)

    : 항목집합 X를 포함하는 거래 중에서 항목집합 Y포함하는 거래 비율 (조건부 확률) 을 말합니다.  신뢰도가 높을 수록 유용한 규칙일 가능성 높다고 할 수 있습니다.

신뢰도(Confidence) c(X→Y) 

= X와 Y를 모두 포함하는 거래 수 / X가 포함된 거래 수 = n(X∪Y) / n(X) 

 

 

  • 향상도 (Lift)

    항목집합 X가 주어지지 않았을 때의 항목집합 Y의 확률 대비 항목집합 X가 주어졌을 대 항목집합 Y의 확률 증가 비율을 말합니다. 다른말로 표현하자면, 향상도가 1보다 크거나(+관계) 작다면(-관계) 우연적 기회(random chance)보다 우수함을 의미합니다. (X와 Y가 서로 독립이면 Lift = 1)

향상도(Lift)

= 연관규칙의 신뢰도/지지도 = c(X→Y) / s(Y)

 

 

 

연관규칙 평가 척도 : 지지도(Support), 신뢰도(Confidence), 향상도(Lift)

 

 

아래에 어떤 슈퍼마켓에서 5명의 고객에 의해서 발생한 5건의 거래(transaction N=5)을 가지고 예를 들어보았습니다.

 

 

참고로, 신뢰도(confidence)는 rule의 순서에 따라서 값이 달라집니다. 즉 신뢰도 c(X→Y)와 c(Y→X)의 값이 다르며, 이를 비대칭적 척도(asymmetric measure)라고 합니다.

 

반면에, 향상도(lift)는 Lift(X→Y) 값과 Lift(Y→X)의 값이 서로 같으며, 이런 특성을 가지는 척도를 대칭적 척도(symmetric measure)라고 합니다.  위의 예제를 가지고 한번 직접 계산해서 확인해보시기 바랍니다.

 

 

위의 3개의 rule 평가 척도를 소개하였는데요, 각각의 평가 관점이 다르기 때문에 어느 하나만을 가지고 rule을 평가하는 것이 아니라 보통은 3개의 척도를 모두 사용합니다.

 

보통 (1) 특정 지지도(Support) 와 신뢰도(Confidence) 이하의 rule 은 screening out 시키게끔 해놓고,

(minimun support, minimum confidence)

 

(2) 향상도(Lift) 내림차순(양의 관계를 찾을 때)으로 sorting을 해서 rule을 평가하는 식으로 이용하곤 합니다. 

 

그리고 관심이 있는 상품이나 item이 있으면 목적에 맞게 해당 item이 left-hand side 나 right-hand side 에 있는 rule만을 subset으로 선별해서 보기도 하구요.

 

 

분석에 oriented 된 통계전문가, 기계학습 전문가의 경우 신뢰도(confidence)와 향상도(lift)가 높은 rule을 눈에 불을 켜고 찾고, 선호하는 경향이 있습니다.  그런데 매출과 이익을 책임져야 하는 사업부 현업의 경우는 연관규칙을 보는 view가 조금 다를 수 있습니다.  "그 rule을 적용하면 기대할 수 있는 매출 증가분이 얼마나 되는데요?"라는 질문이 사업부 현업이 던지는 질문인데요, 이 질문에 만족할 만한 답을 주려면 '지지도(Support)'가 높아서 전체 거래 건수 중에서 해당 rule이 포함된 거래건수가 많아야지만이 해당 rule을 가지고 마케팅전략을 수립해서 실전에 적용했을 때 높은 매출 증가를 기대할 수 있게 됩니다.  즉, 아무리 신뢰도(confidence)와 향상도(lift)가 높아도 지지도(support)가 빈약해서 전체 거래 중에 가뭄에 콩나듯이 나오는 거래유형의 rule이라면 사업부 현업은 아마 무시할 겁니다.  현업을 빼고 분석가만 참여한 연관규칙 분석이 위험하거나 아니면 실효성이 떨어질 수 있는 이유입니다.  그리고 지지도(support)가 매우 낮으면 몇 개 소수이 관측치의 치우침만으로도 신뢰도나 향상도가 크게 영향을 받게 되어 '우연'에 의한 규칙이 잘못 선별될 위험도 있습니다.

 

 

위와 같이 지지도(support), 신뢰도(confidence), 향상도(lift)의 한계를 보완하기 위한 다양한 평가척도가 더 있는데요, 그 중에서도 IS(Interest-Support) 측도, 교차지지도(cross support) 에 대해서 간략하게 소개하겠습니다. 

 

연관규칙 A → B 에 대하여

  •  IS(Interest-Support) 측도 : 향상도(lift)와 지지도(support)의 곱에 제곱근을 취한 값

    ☞ 향상도(lift)와 지지도(support)가 모두 높을 수록 IS 측도값도 커짐. 둘 중에 하나라도 작으면 IS측도는 작아지며, 지지도는 낮고 향상도만 높은 rule이나 향상도는 낮고 지지도만 높은 rule을 screening out 시키고 둘다 높은 rule만 선별할 수 있음.

  • 교차지지도(cross support) : 최대지지도에 대한 최소지지도의 비율


    ☞ 항목집합 에 대하여 의미 없는 연관규칙의 생성을 방지하기 위하여 교차지지도 r(X)를 이용함.  분자에 지지도 중에서 최소값을, 분모에는 지지도 중에서 최대값을 가져다가 계산을 하므로 지지도의 최소값과 최대값의 차이가 클 수록 교차지지도는 낮아지게 되며, 이 비율이 매우 작으면 항목집합 X에서 생성되는 연관규칙이 의미가 없을 가능성이 높음.

 

지지도(support), 신뢰도(confidence), 향상도(lift), 이에 더해 IS측도나 교차지지도 등의 척도만을 가지고 기계적으로 연관규칙을 찾았다고 해서 끝나는 것은 아닙니다.  반드시 업 전문가(business domain expert)의 해석, 평가, 판단, 개입이 있어야지 연관규칙분석이 끝이 납니다.

 

 

연관규칙을 (1) 설명이 가능한가? (Explainable), (2) 활용이 가능한가? (Actionable) 라는 두 개의 기준을 가지고 평가를 해봐서 '설명이 가능하고 & 활용이 가능한 연관규칙 (Explainable & Actionable association rule)' 만이 최종적으로 살아남아 현장에 적용이 되고 그 효과를 검증받게 됩니다.

 

아래에 Useful rule, Trivial rule, Inexplicable rule의 예를 보면 금방 이해하실 수 있을 것입니다.  실제 연관규칙 분석을 해보면 rule이 엄청 많이 쏟아지는데 반해, 똘똘한 rule의 최종 판단/선별에 업 전문가의 개입이 필요하다는 점이 현장에서 많이 쓰이지 못하고 있는 장애 요인이 되고 있는게 아닌가 싶습니다.

 

 

 

다음번 포스팅에서는 Apriori algorithm 에 대해서 알아보도록 하겠습니다.

 

이번 포스팅이 도움이 되었다면 아래의 '공감 ♡'를 꾸욱~ 눌러주세요.

 

728x90
반응형
Posted by Rfriend
,

지난 포스팅에서 기계학습의 정의, 학습 및 과적합(overfitting)에 대한 큰 그림, 개략적이고 이론적인 내용을 다루었습니다.

 

이번 포스팅부터는 기계학습 분석 기법의 각론으로 들어가보겠습니다.

 

먼저, Y값(종속변수, 목표변수)이 없는 상태에서 데이터 속에 숨겨져 있는 패턴, 규칙을 찾아내는 비지도학습(unsupervised learning)의 하나인 '연관규칙분석(Association Rule Analysis)', 혹은 유통업계에서 사용하는 용어로 '장바구니분석(Market Basket Analysis)'에 대해서 알아보겠습니다.

 

보통 기계학습, 데이터마이닝 교육을 받는다고 하면 단골메뉴로 나오는 분석 기법이기도 하며, "맥주와 기저귀" 사례(이거 가짜 사례임... -_-')와 함께 많이 회자되곤 합니다.  그러다 보니 '회귀분석' 만큼이나 분석 강의 좀 들어봤다 하는 사람이면 열에 아홉은 연관규칙분석을 들어는 봤고, 그러다보니 만만하게(?) 보는 것도 좀 있는 것 같고요, rule이 엄청 많이 나오는데 그중에서 쓸모있는 것은 별로 찾지 못해서 재미를 잘 못보고 평가절하받는 기법인것도 같습니다.  

 

 

B2C 업종에 종사하는 분이라면 약방의 감초처럼 빼놓을 수 없는게 상품추천(recommendation) 일텐데요, 추천을 위해 많이 사용하는 분석 기법이 연관규칙분석, 순차분석입니다.

 

 

 

상품 추천에 사용하는 분석기법들을 아주 간략히 소개하자면,

  • 연관규칙분석, 장바구니분석 (Association Rule Analysis, Market Basket Analysis) : 고객의 대규모 거래데이터로부터 함께 구매가 발생하는 규칙(: A à 동시에 B)을 도출하여, 고객이 특정 상품 구매 시 이와 연관성 높은 상품을 추천
  • 순차분석 (Sequence Analysis)고객의 시간의 흐름에 따른 구매 패턴(A à 일정 시간 후 B)을 도출하여, 고객이 특정 상품 구매 시 일정 시간 후 적시에 상품 추천
  • Collaborative Filtering모든 고객의 상품 구매 이력을 수치화하고, 추천 대상이 되는 고객A와 다른 고객B에 대해 상관계수를 비교해서, 서로 높은 상관이 인정되는 경우 고객B가 구입 완료한 상품 중에 고객A가 미구입한 상품을 고객A에게 추천
  • Contents-based recommendation고객이 과거에 구매했던 상품들의 속성과 유사한 다른 상품 아이템 중 미구매 상품을 추천 (Collaborative Filtering유사 고객을 찾는 것과 비교됨)
  • Who-Which modeling특정 상품()을 추천하는 모형을 개발 (: 신형 G5 핸드폰 추천 스코어모형)하여 구매 가능성 높은(: 스코어 High) 고객() 대상 상품 추천

등이 있습니다. 

 

 

상품 추천은 이미 몇 십년 전부터 실전에 적용이 되어 왔고, 그 선진 업체들의 경우 효과를 톡톡히 보고 있습니다.

추천은 그 자체로 환전성이 있기 때문에 가치가 있다. 넷플릭스의 경우 대여되는 영화의 2/3가 추천을 통해 발생했으며, 구글 뉴스(Google News)의 경우 38% 이상이 추천을 통해서 조회가 발생하는 것으로 알려져 있다. 또한 아마존의 경우에도 추천을 통해 판매가 전체 매출액의 35%를 넘는다. ...

 

* 출처 : 넷플릭스의 빅데이터, 인문학적 상상력과의 접점, 조영신, KISDI 동향 Focus 

 

물론 연관규칙이나 순차분석만 가지고 상품추천하는 것은 아닙니다만, 연관규칙분석, 순차분석은 상품추천에 활용할 수 있는 가장 기본적인 분석기법임에는 틀림없습니다.  아래에 넥플릭스에서 상품추천에 이용하는 알고리즘 소개글을 보면 사용할 수 있는 데이터를 모조리 모아서, 분석기법을 여러개 조합해서 상품추천을 하고 있는것으로 보입니다.

 

넥플릭스는 이용자들이 동영상에 매긴 별점과 위치정보, 기기정보, 플레이버튼 클릭 수, 평일과 주말에 따른 선호 프로그램, 소셜 미디어 내에서 언급된 횟수 등을 분석해 알고리즘을 개발했다. 

* 출처 : 넷플릭스의 빅데이터, 인문학적 상상력과의 접점, 조영신, KISDI 동향 Focus 

 

 

암튼, 서두가 길었습니다.  연관규칙 본론으로 들어가겠습니다.

 

규칙(rule)이란 "if condition then result"  (if A --> B) 의 형식으로 표현을 합니다.

 

연관규칙(association rule)은 특정 사건이 발생하였을 때 함께 (빈번하게) 발생하는 또 다른 사건의 규칙을 말합니다. 

 

연관규칙에서 사용하는 기본 용어에 대해서 짚고 넘어가자면,

  • 항목 집합 (Item set) : 전체 Item (I) 중에서 가능한 부분 집합,
  • 항목 집합의 집합 (The set of item sets) : Item의 부분집합들로 구성된 집합,

 

연관규칙을 다시 좀 어려운 위의 용어를 사용해서 써보자면, 연관규칙이란 특정 항목 집합이 발생하였을 때 또 다른 항목 집합이 발생하는 규칙을 말합니다.

 

 

가령,

 

{맥주} --> {기저귀} 

  : 맥주를 사는 고객은 기저귀도 같이 산다

 

{남성, 금요일, 맥주} --> {기저귀}

  : 금요일에 맥주를 사는 남성 고객은
    기저귀도 같이 산다

 

같은 규칙이 연관규칙의 예가 되겠습니다.

 

 

 

 

연관규칙분석, 장바구니분석, 순차분석... 용어가 좀 헷갈릴 수 도 있는데요, 개념 이해를 위해 비교를 해보자면요,

 

연관규칙(association rule)은 "What goes WITH what?" 즉, 동시 구매품목에 관심을 가지는데 비해서, 순차분석(sequeuce analysis)은 "What goes AFTER what?" 처럼 시간의 순서에 따른 규칙에 관심을 가집니다.  연관분석할 때는 주문번호, 고객ID, 구매상품코드만 있으면 되는데요, 순차분석을 하려면 "Time-stamp" 변수가 추가로 꼭 필요합니다.

 

장바구니분석(Market basket analysis)는 연관규칙을 유통업에서 부르는 용어입니다. 도식화하자면 장바구니분석은 연관규칙의 부분집합(?)이라고도 할 수 있겠네요.

 

 

 

유통업에서 장바구니분석(연관분석)을 통해 상품 추천뿐만이 아니라 상품 진열이라든지 상품 패키징, 번들링, (홈쇼핑의 경우) 방송순서나 카달로그 배치 등 다방면에 적용을 할 수 있습니다.

 

연관규칙은 유통업말고도 여러 업종에서 사용되는데요, 의료계에서는 암 데이터 분석에서 단백질 서열과 자주 발견되는 DNA 패턴을 찾는다던지, 증상과 질병 간 연관관계 등을 찾는데 연관규칙을 사용합니다.

 

순차분석은 의료비 허위 청구 순서 패턴을 찾는다던지, 휴대폰서비스 이용 부당행위 사전 조합 식별, 불량 유발 공정/장비 패턴 탐지, 웹사이트나 모바일앱의 메뉴별 클릭 스트림 분석 등을 하는데 사용할 수 있습니다.

 

다음번 포스팅에서는 연관규칙의 평가 척도 (지지도, 신뢰도, 향상도)에 대해서 알아보도록 하겠습니다.

 

이번 포스팅이 도움이 되었다면 아래의 '공감 ~♡'를 꼬옥 눌러주세요. ^^

 

728x90
반응형
Posted by Rfriend
,

지난번 포스팅에서는 과적합(Over-fitting)이란 무엇인지, 그리고 과적합이 왜 문제인지에, 과적합이 아니라 데이터에 내재한 구조, 관계, 규칙을 일반화(generalization)하여 적정적합을 시킬 수 있도록 학습하는 것이 왜 중요한지에 대하여 알아보았습니다.

 

그렇다면 이번 포스팅에서는 어떻게 과적합을 파악하고 피할 수 있는지(How to detect and prevent over-fitting)에 대하여 소개하도록 하겠습니다. 그것은 바로 'Validation Set'을 활용하는 방법(Cross-Validation)입니다.

 

기계학습, 데이터마이닝 초심자라면 과적합(Over-fitting)을 정확히 이해하기 힘들 수도 있구요, 과적합을 이해했다고 하더라도 Training set vs. Validation set vs. Test set 으로 데이터셋을 나누어서 훈련시키는 과정에서 검증하고, 마지막 모형 결과를 테스트하는 구조, 절차를 이해하는게 처음에는 좀 힘들 수도 있을 것 같습니다.  (제가 처음 배울 때에 이걸 잘 이해를 못했었어요... ^^;;) 

 

이걸 제대로 이해하지 못하면 분석가가 가지고 있는 데이터셋을 몽땅 집어넣어서 예측이나 분류 모델을 만들다가 과적합(over-fitting)의 함정에 빠지는 위험에 맞닥뜨리게 됩니다. 

 

 

 

 

 

1) Training with all original data set

 

가지고 있는 데이터셋을 몽땅 넣어서 예측 혹은 분류 모델을 훈련 시키면 이게 과소적합(under-fitting)인지, 적정적합(generalized-fitting)인지, 과적합(over-fitting)인지를 가늠하기가 힘듭니다. 

 

아래의 그림에 나오는 것처럼 training model의 error rate이 낮으면 낮을 수록 더 좋은 모델인 것일까요?

 

문제는 훈련을 시키면 시킬 수록 Error rate는 계속 줄어드는 경향이 있으므로 결국은 과적합(over-fitting)으로 귀결된다는 점입니다.  중간에 적정적합 구간에서 훈련을 중단시키지 않으면 말이지요.  그런데 가지고 있는 모든 데이터를 Training set 으로만 활용하면 어디서 훈련을 중단시켜야 할지 도무지 알 수가 없답니다.  바로 이 문제의식에서 Validation set의 필요성이 시작합니다.

 

 

 

 

 

 

2) Training Set vs. Validation Set

 

과적합을 탐지하고 방지하기 위해서, 보유하고 있는 데이터셋을 Training set (50%~60%), Validation set (20%~25%), Test set (20%~25%) 의 3개의 set으로 구분을 한 후에, (저는 보통 Training : Validation : Test set = 60% : 20% : 20% 로 분할)

 

 - (1) Training set 을 가지고 예측 혹은 분류 모델을 훈련시키고

 

 - (2) Validation set을 가지고서 (1)번의 Training set을 가지고 훈련 중인 모델이 혹시 과적합(over-fitting)의 유혹에 빠지고 있는 건 아닌지, 아니면 훈련 더해야 하는데 농땡이 치다가 과소적합(under-fitting)인 것은 아닌지 검증, 감시를 하면서 최적의 적정적합(generalized-fitting) 구간을 찾아 모델을 선택한 후 (즉, 모델의 coefficients, weights 결정)

 

 - (3) Test set을 사용해서 (1)번과 (2)번의 협동작업으로 도출한 최종 모델(final model)에 대해서 성적을 매기는 작업을 하게 됩니다.

 

Validation set과 Test set을 혼동하는 분도 있을 것 같습니다.  (제가 그랬습니다....  ^^;)  Validation set은 과적합 방지용, Test set은 최종 모델 평가용도 입니다.

 

아래 그림은 Training set으로 만든 예측 혹은 분류 모델에 Validation set 데이터를 적용해서 예측 혹은 분류 error 를 측정한 그래프입니다.  Training set으로 모델을 만들면 반복(iterarion)을 계속할 수록 error rate은 계속 줄어드는데요, 이 모델을 처음 보는 데이터셋인 Validation set 에 적용을 하게 되면 error rate이 처음에는 줄어들다가 어느 순간 부터는 방향을 바꾸어서 증가하게 됩니다(보통은 Training set의 error보다 Validation set의 error가 조금씩 높음).  바로 이 변곡점이 과적합(over-fitting)이 시작되는 지점으로 합리적으로 의심을 할 수 있습니다

 

이 변곡점을 지나서도 계속 훈련을 시키게 되면 '데이터에 내재한 구조, 관계, 패턴'을 학습해서 '일반화(generalization)'하는 것이 아니라 training set을 통째로 외우게 됨에 따라 --> 처음 보는 데이터셋인 Validation set에 대해서는 자꾸 틀린 답을 내놓게 되어 Validation set의 error rate은 거꾸로 올라가게(나빠지게) 되는 것입니다.

 

 

 

 

3) k-fold Cross Validation

 

데이터셋을  Training set (50%~60%), Validation set (20%~30%), Test set (20%~30%)으로 나누게 되면 모델 훈련에는 Training set (50%~60%)만이 사용이 됩니다.  나머지 Validation set과 Test set으로 빼놓은 데이터가 아깝다는 생각이 들지요? 

 

특히, 확보한 데이터의 개수가 작은 경우에는 문제가 심각해질 수 있습니다.  데이터가 충분하지 못한 상태에서 그걸 3개의 훈련, 검증, 테스트 셋으로 나누면 분할된 데이터셋에 무슨 데이터가 들어갔느냐에 따라 모형이 심하게 영향을 받을 수가 있습니다. 

 

이런 경우에 k-fold Cross Validation 기법을 사용하면 좋습니다. k-flod Cross Validation기법은 Traning set을 k 등분한 후에 --> (k-1) 개의 fold (= (k-1)/k 구성비) 는 Training set으로 사용하고, 나머지 1개의 fold (1/k 구성비)은 validation set으로 사용하며, --> Validation set 에 해당하는 fold를 round를 거듭하면서 바꿔주게 됩니다.  말로 설명하면 좀 이해하기 어려울 수도 있는데요, 아래의 5-fold Cross Validation 예시 그림을 참고하시기 바랍니다.  4개 fold의 Training set 과 1개 fold의 Validation set을 이용해서 모형 훈련을 시키는 것을 5 round 시행하여 분류 모형(classifier)을 선택하고, Test set을 가지고 이 최종모형을 평가하는 data flow 예시입니다.

 

 

 

k-fold Cross Validation을 극단으로 가져가면 k를 데이터 관측치 수 n 만큼 하는 경우도 있는데요, 이를 leave-one-out Cross Validation (LOOCV) 이라고 합니다.  보유하고 있는 데이터를 fully 활용할 수 있는 장점이 있고, 특히 데이터 샘플 수가 작을 경우 유용하겠지요.  다만, leave-one-out Cross Validation은 연산 비용이 높다는 점은 염두에 두어야 하며, 샘플 사이즈가 크다면 보통은 10-fold Cross Validation을 많이 사용하는 편입니다.

 

 

참고로, re-sampling methods 를 tree 형식으로 정리해놓은 자료가 있어서 소개합니다.  아래 구분 tree에서 색깔 칠해놓은 부분이 이번 포스팅에서 소개한 방법이 되겠습니다.  색 안칠해진 부분도 많고, 공부해야 할 것이 참 많지요? ^^"

 

* Source : “Performance Evaluation for Learning Algorithms”, Nathalie Japkowicz, School of Electrical Engineering & Computer Science University of Ottawa

 

 

다음번 포스팅에서는 이번 포스팅과 직접 관련된 bias-variance trade-off 에 대해서 소개하겠습니다.

 

이번 포스팅이 도움이 되었다면 아래의 '공감 ~♡'를 꾸욱 ~ 눌러주세요. ^^

 

728x90
반응형
Posted by Rfriend
,