연관 분석은 데이터 내 항목 간의 규칙을 찾는 데 주로 사용됩니다.
이러한 규칙은 "A를 구매한 고객은 B도 구매할 가능성이 높다"와 같은 형태로 표현됩니다.
연관 규칙은 지지도(Support), 신뢰도(Confidence), 향상도(Lift)와 같은 지표를 통해 평가합니다.
- 지지도(Support):
- 규칙에서 특정 항목 집합이 데이터 내에서 얼마나 자주 등장하는지를 나타냅니다.
- {A, B}라는 항목 집합의 지지도는 전체 거래 중에서 {A, B}가 포함된 거래 비율입니다.
- 계산식: Support = P(A ∩ B)
- 신뢰도(Confidence):
- 조건부 확률로, 항목 A가 포함된 거래 중에서 항목 B도 포함된 거래의 비율을 나타냅니다.
- 예를 들어, A를 구매한 고객이 B도 구매할 확률을 의미합니다.
- 계산식: Confidence= P(A ∩ B) / P(A) = 지지도 / P(A)
- 향상도(Lift):
- 두 항목 간의 연관성이 얼마나 강한지를 나타내는 지표로, A와 B가 독립적이라면 향상도는 1입니다.
- A를 구매한 고객이 B를 구매할 가능성이 일반적인 B의 구매 가능성보다 얼마나 더 높은지를 나타냅니다.
- 계산식: P(A ∩ B) /P(A) * P(B) = 신뢰도 / P(B)
1. Apriori 알고리즘
Apriori 알고리즘은 빈발 항목 집합(Frequent Itemset)을 반복적으로 탐색하여 연관 규칙을 도출하는 방식입니다.
지지도(Support)를 기준으로 항목 집합의 빈도를 추려내며,
지지도 기준을 넘는 항목 집합들만 연관 규칙 생성에 활용됩니다.
- 동작 과정:
- 모든 항목의 지지도를 계산하고, 지지도가 최소 지지도보다 높은 항목 집합을 찾습니다.
- 이 항목 집합을 바탕으로 크기가 2인 항목 집합을 생성하고, 동일하게 지지도를 기준으로 필터링합니다.
- 이 과정을 반복하여 빈발 항목 집합을 찾습니다.
- 장점:
- 이해하기 쉬우며, 지지도 기준을 설정하여 비효율적인 조합 생성을 줄입니다.
- 단점:
- 반복적 지지도 계산으로 인해 데이터가 클 경우 계산 비용이 높습니다
from mlxtend.frequent_patterns import apriori, association_rules
import pandas as pd
# 예제 데이터 (장바구니 형식으로 각 항목이 포함되었는지 여부)
data = {'milk': [1, 1, 0, 1, 0], 'bread': [1, 0, 1, 1, 1], 'butter': [0, 1, 1, 0, 1]}
df = pd.DataFrame(data)
# Apriori 알고리즘을 사용한 빈발 항목 집합 추출
frequent_itemsets = apriori(df, min_support=0.6, use_colnames=True)
print(frequent_itemsets)
# 연관 규칙 생성
rules = association_rules(frequent_itemsets, metric="confidence", min_threshold=0.7)
print(rules)
수정 가능한 주요 파라미터
- min_support:
최소 지지도. 지지도 기준을 설정하여 필터링할 빈발 항목 집합의 최소 발생 비율을 지정합니다.
예를 들어, min_support=0.5로 설정하면, 전체 거래의 50% 이상 발생한 항목 집합만 포함됩니다. - use_colnames:
항목 이름 사용 여부. True로 설정하면 결과에서 항목 집합을 항목명으로 출력합니다. - max_len:
최대 항목 수. 최대 항목 수를 설정하여 특정 개수 이상의 항목 집합은 제외할 수 있습니다.
예를 들어, max_len=3으로 설정하면 최대 3개 항목으로 구성된 빈발 항목 집합만 계산합니다. - low_memory:
메모리 최적화. True로 설정하면 대규모 데이터에서 메모리 사용량을 줄일 수 있습니다.
적합한 데이터 형식
- 이진 행렬 형식: 각 항목이 포함되었는지 여부를 0과 1로 표현한 데이터프레임 형식이 필요합니다. 예를 들어, 고객의 거래 기록에서 특정 상품이 포함된 경우 1, 포함되지 않은 경우 0으로 표시합니다.
- 범주형 변수: 항목이 명확히 구분되는 범주형 변수(상품, 서비스 등)일 때 적합합니다.
2. FP-Growth (Frequent Pattern Growth) 알고리즘
빈발 패턴 트리(FP-Tree)를 활용하여 항목 집합의 빈발 패턴을 추출하는 방식입니다.
Apriori와는 다르게 반복적인 지지도 계산 없이 빈발 항목 집합을 빠르게 찾을 수 있습니다.
- 동작 과정:
- 데이터를 FP-트리 구조로 표현하고, 항목들의 빈도와 순서를 기준으로 트리를 형성합니다.
- 트리를 순회하며 빈발 패턴을 추출합니다.
- 장점:
- 지지도 계산을 반복하지 않아 Apriori보다 계산 효율이 높습니다.
- 단점:
- FP-트리 생성이 필요하므로 메모리 사용량이 많을 수 있습니다.
from mlxtend.frequent_patterns import fpgrowth
# FP-Growth를 사용한 빈발 항목 집합 추출
frequent_itemsets_fp = fpgrowth(df, min_support=0.6, use_colnames=True)
print(frequent_itemsets_fp)
# 연관 규칙 생성
rules_fp = association_rules(frequent_itemsets_fp, metric="confidence", min_threshold=0.7)
print(rules_fp)
수정 가능한 주요 파라미터
- min_support: 최소 지지도. 특정 지지도 이상 발생한 항목 집합만 포함되며, min_support=0.4와 같이 설정하여 최소 발생 비율을 조정할 수 있습니다
- use_colnames: 항목 이름 사용 여부. True로 설정하면 항목명을 직접 사용하여 결과에 표시됩니다.
적합한 데이터 형식
- 이진 행렬 형식: Apriori와 마찬가지로 항목의 포함 여부를 0과 1로 표현한 데이터프레임 형식이 필요합니다.
- 빈발 항목이 많은 대규모 데이터: FP-Growth는 Apriori보다 계산 효율성이 높아 대규모 데이터에 적합합니다.
연관 규칙 평가 및 활용 방법
연관 분석의 규칙은 세 가지 주요 지표(지지도, 신뢰도, 향상도)로 평가됩니다.
특정 상황에 따라 아래와 같은 방식으로 활용됩니다.
- 마케팅 전략: 연관성이 높은 상품을 함께 추천하거나, 매장 배치 전략에 활용됩니다.
- 추천 시스템: 고객이 구매한 상품과 연관성이 높은 다른 상품을 추천할 수 있습니다.
- 의료 데이터 분석: 특정 질병이나 증상 간의 연관성을 파악하여 진단 및 치료에 활용할 수 있습니다.
반응형
'데이터분석' 카테고리의 다른 글
유데미(Udemy) 러닝 크루 【한글자막】 머신러닝의 모든 것 with AI, Python & R + ChatGPT Prize [2024] 수강완료 후기 (4) | 2024.12.23 |
---|---|
군집 분석 (1) | 2024.11.10 |
앙상블 기법 (1) | 2024.11.10 |
분류분석 (0) | 2024.11.09 |
오분류 추정 및 확인 (0) | 2024.11.09 |