데이터분석

연관분석

장수우 2024. 11. 10. 19:08

연관 분석은 데이터 내 항목 간의 규칙을 찾는 데 주로 사용됩니다.
이러한 규칙은 "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)를 기준으로 항목 집합의 빈도를 추려내며,
지지도 기준을 넘는 항목 집합들만 연관 규칙 생성에 활용됩니다.

  1. 동작 과정:
    • 모든 항목의 지지도를 계산하고, 지지도가 최소 지지도보다 높은 항목 집합을 찾습니다.
    • 이 항목 집합을 바탕으로 크기가 2인 항목 집합을 생성하고, 동일하게 지지도를 기준으로 필터링합니다.
    • 이 과정을 반복하여 빈발 항목 집합을 찾습니다.
  2. 장점:
    •  이해하기 쉬우며, 지지도 기준을 설정하여 비효율적인 조합 생성을 줄입니다.
  3. 단점:
    • 반복적 지지도 계산으로 인해 데이터가 클 경우 계산 비용이 높습니다
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와는 다르게 반복적인 지지도 계산 없이 빈발 항목 집합을 빠르게 찾을 수 있습니다.

  1. 동작 과정:
    • 데이터를 FP-트리 구조로 표현하고, 항목들의 빈도와 순서를 기준으로 트리를 형성합니다.
    • 트리를 순회하며 빈발 패턴을 추출합니다.
  2. 장점:
    • 지지도 계산을 반복하지 않아 Apriori보다 계산 효율이 높습니다.
  3. 단점:
    • 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보다 계산 효율성이 높아 대규모 데이터에 적합합니다.

연관 규칙 평가 및 활용 방법

연관 분석의 규칙은 세 가지 주요 지표(지지도, 신뢰도, 향상도)로 평가됩니다.

특정 상황에 따라 아래와 같은 방식으로 활용됩니다.

  1. 마케팅 전략: 연관성이 높은 상품을 함께 추천하거나, 매장 배치 전략에 활용됩니다.
  2. 추천 시스템: 고객이 구매한 상품과 연관성이 높은 다른 상품을 추천할 수 있습니다.
  3. 의료 데이터 분석: 특정 질병이나 증상 간의 연관성을 파악하여 진단 및 치료에 활용할 수 있습니다.
반응형