본문 바로가기
Big Data/DataAnalysis & Manipulate

Apriori 알고리즘

by Wikinist 2023. 8. 16.

Apriori 알고리즘

Apriori는 연관규칙 분석을 위한 클래식한 알고리즘으로, 데이터 내에서 아이템 간의 연관성을 찾아내는 데 사용됩니다. 이 알고리즘은 빈발 아이템 집합을 탐색하여 연관규칙을 생성하는 데 특히 유용합니다.

Apriori 알고리즘의 핵심 개념은 "아프라이어리 속성 (Apriori Property)"입니다. 이 속성에 따라서 어떤 아이템 집합이 빈발(frequent)하다면, 그 집합의 모든 부분 집합도 빈발하다는 것입니다. 이 아프라이어리 속성을 활용하여 알고리즘이 아이템 집합을 증가시키면서 연관규칙을 생성합니다.

Apriori 알고리즘의 동작 과정은 다음과 같습니다:

  1. 단일 아이템 집합의 생성: 먼저, 각각의 아이템을 개별 아이템 집합으로 간주합니다.

  2. 1-아이템 집합의 지지도 계산: 각 개별 아이템 집합의 지지도를 계산합니다. 이 지지도는 해당 아이템이 전체 데이터에서 얼마나 자주 나타나는지를 나타냅니다.

  3. 빈발 아이템 집합 생성: 최소 지지도 임계값(사용자가 설정)보다 높은 지지도를 가지는 아이템 집합을 "빈발 아이템 집합"으로 간주합니다.

  4. 빈발 아이템 집합 조합: 빈발 아이템 집합들을 사용하여 더 큰 크기의 아이템 집합을 생성합니다. 이때, 아프라이어리 속성을 활용하여 빈발 아이템 집합의 모든 부분 집합이 빈발하다면 새로운 아이템 집합도 빈발하다고 판단합니다.

  5. 새로운 아이템 집합의 지지도 계산: 생성된 새로운 아이템 집합의 지지도를 계산합니다.

  6. 빈발 아이템 집합 필터링: 최소 지지도 임계값을 만족하지 못하는 아이템 집합은 제거합니다.

  7. 연관규칙 생성: 남은 빈발 아이템 집합들을 사용하여 연관규칙을 생성합니다. 연관규칙의 지지도, 신뢰도, 향상도를 계산할 수 있습니다.

Apriori 알고리즘은 비교적 단순한 알고리즘이지만, 큰 데이터셋에서도 효과적으로 작동할 수 있습니다. 그러나 모든 가능한 아이템 집합을 생성하고 검사해야 하는 단점이 있어서 데이터가 매우 큰 경우에는 실행 시간이 늘어날 수 있습니다. 이런 경우에는 Apriori의 개선된 버전이나 다른 연관규칙 마이닝 알고리즘들이 사용될 수 있습니다.

지표

antecedents: 연관규칙에서 선행절에 해당하는 아이템 집합을 나타냅니다. 즉, 규칙의 조건부 부분으로, 규칙의 조건이 되는 아이템들의 집합입니다.

consequents: 연관규칙에서 후행절에 해당하는 아이템 집합을 나타냅니다. 이 부분은 규칙의 결과를 나타내며, 선행절이 참일 때 후행절도 함께 나타날 확률을 나타냅니다.

antecedent support: 선행절의 지지도를 나타냅니다. 선행절의 아이템 집합이 전체 데이터에서 얼마나 자주 나타나는지를 나타내는 값입니다.

consequent support: 후행절의 지지도를 나타냅니다. 후행절의 아이템 집합이 전체 데이터에서 얼마나 자주 나타나는지를 나타내는 값입니다.

support: 연관규칙의 지지도를 나타냅니다. 선행절과 후행절이 동시에 나타나는 거래의 비율을 나타내며, 전체 데이터에서 해당 규칙이 얼마나 자주 발생하는지를 나타냅니다.

confidence: 연관규칙의 신뢰도를 나타냅니다. 선행절이 발생했을 때 후행절도 발생할 확률을 나타냅니다. confidence = support(antecedent와 consequent가 동시에 발생하는 거래 수) / antecedent support(선행절의 지지도) 입니다.

lift: 연관규칙의 향상도를 나타냅니다. 향상도는 규칙의 신뢰도를 선행절의 지지도와 후행절의 지지도의 곱으로 나눈 값으로서, 두 아이템 간의 실제 연관성을 평가하는 지표입니다.

leverage: 레버리지는 규칙의 실제 발생 횟수와 예상대비 발생한 횟수의 차이를 나타내는 지표입니다. 값이 양수인 경우, 해당 규칙이 예상보다 더 자주 발생한다는 것을 의미합니다. 값이 음수라면 예상보다 덜 자주 발생한다는 것을 나타냅니다. 레버리지가 0에 가까울수록 규칙은 예상대로 발생하는 것입니다.

conviction: 확신도는 규칙의 신뢰도를 선행절의 지지도와 후행절의 지지도의 곱으로 나눈 값으로서, 값이 1에 가까울수록 규칙의 신뢰성이 낮다는 것을 나타냅니다. 값이 1보다 크면 규칙의 신뢰성이 상대적으로 높다고 볼 수 있습니다.

zhangs_metric: Zhang's Metric은 연관규칙의 유용성을 평가하기 위한 지표 중 하나로, 다양한 지표들의 조합으로 계산됩니다. 지지도, 신뢰도, 향상도 등을 종합하여 규칙의 유용성을 평가합니다. 값이 1에 가까울수록 규칙의 유용성이 높다고 판단할 수 있습니다. 또한 이 값은 다른 지표들의 조합으로 계산되므로 그 의미는 지표의 조합에 따라 달라질 수 있습니다.

이러한 지표들은 연관규칙 분석 결과를 이해하고 해석하는 데 도움을 주는 중요한 정보를 제공합니다.

예제

from mlxtend.frequent_patterns import apriori
from mlxtend.frequent_patterns import association_rules
import pandas as pd

# 구매 데이터 생성
data = {
    'Transaction_ID': [1, 2, 3, 4, 5, 6],
    'Items': [['apple', 'banana'],
              ['apple', 'carrot', 'donut'],
              ['banana', 'donut'],
              ['apple', 'banana', 'donut'],
              ['apple', 'carrot'],
              ['banana', 'donut']]
}

df = pd.DataFrame(data)

# Items 열을 문자열로 변환
df['Items'] = df['Items'].apply(lambda x: ', '.join(x))

# One-hot 인코딩
one_hot = df['Items'].str.get_dummies(', ').astype(bool)

# Apriori 알고리즘 적용
frequent_itemsets = apriori(one_hot, min_support=0.5, use_colnames=True)

# 연관규칙 생성
rules = association_rules(frequent_itemsets, metric='lift', min_threshold=1.0)

print(rules)

해당 게시글은 ChatGPT의 도움을 받아 작성되었습니다.

'Big Data > DataAnalysis & Manipulate' 카테고리의 다른 글

[pandas] columns.difference  (0) 2023.08.28
데이터 스케일러(StandardScaler, MinMaxScaler)  (0) 2023.08.25
연관 규칙 분석  (0) 2023.08.16
pd.pivot_table()  (0) 2023.08.16
pandas 결측값 처리  (0) 2023.08.15