Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- 파이썬 머신러닝 완벽 가이드
- 스파르타 코딩
- 중회귀모형
- 실전 데이터 분석 프로젝트
- 어쩌다 마케팅
- Cluster
- 파이썬 머신러닝 완벽가이드
- TiL
- 회귀분석
- 내일배움
- 스파르타코딩
- 미세먼지
- 프로젝트
- SQL
- 프로그래머스
- 파이썬 철저입문
- harkerrank
- MySQL
- 티스토리챌린지
- 파이썬
- 오블완
- hackerrank
- R
- 텍스트 분석
- 웹 스크랩핑
- 내일배움캠프
- 파이썬 철저 입문
- 스파르타
- 내일배움카드
- wil
Archives
- Today
- Total
OkBublewrap
연관 규칙 (2): Apriori 알고리즘 본문
Apriori 알고리즘
연관규칙의 1세대 알고리즘..?!
1️⃣ 효율적인 연관규칙 탐색 알고리즘이 필요한 이유
아이템 개수가 많을수록 기하급수적으로 증가함
2️⃣ 연관규칙 생성 전략 및 알고리즘 종류
- 모든 가능한 항목집합의 개수(M)를 줄이는 전략 ➡️ Apriori
- Transaction(N) 개수를 줄이는 전략 ➡️ DHP
- 비교하는 수(W)를 줄이는 전략 ➡️ FP-growth
3️⃣ Apriori 원리
- 빈발항목집합
- 최소 지지도 이상의 빈발항목집합을 추출
- 지지도를 계산하는 대신, 최소 지지도 이상인 빈발항목집합만 추출하여 연관규칙을 계산 - Apriori Principle
- 첫 번째 원칙: 하나의 항목집합이 빈발하다면, 그 항목집합의 모든 부분집합도 빈발해야 한다.
- 두 번째 원칙: 하나의 항목집합이 비빈발하다면, 이 항목집합을 포함하는 모든 집합도 비빈발이다. - Apriori Pruning Principle:
- 빈발하지 않은 항목집합이 존재하면 그 집합을 포함하는 상위 항목집합도 생성하거나 테스트하지 않습니다.
즉, 비빈발 항목집합을 제거하는 가지치기 기법이다. - 빈발항목집합 후보 생성:
- (k-1) 항목 빈발항목집합에서 (k-2) 항목이 같은 항목들만 혼합하여 k-항목 빈발항목집합 후보를 생성
- 예를 들어, 2-항목 빈발항목집합에서 {B}를 포함하는 {B, C}와 {B, E}를 혼합하여 3-항목 빈발항목집합 후보 {B, C, E}를 만듭니다. - 연관규칙 생성:
- 빈발항목집합에서 가능한 모든 부분집합 X, Y를 나누어 연관규칙 X -> Y를 생성합니다.
- 생성된 연관 규칙은 최소 신뢰도 조건을 만족하지 않으면 제거됩니다. - 반복 과정:
- 빈발항목집합 추출, 후보 생성, 연관 규칙 생성 및 가지치기를 반복하여 더 이상 연관규칙이 없을 때까지 진행
4️⃣ Apriori 실습
연관 규칙 분석 절차
- 모든 거래에서 발생하는 모든 항목에 대한 빈도 테이블을 생성
- support가 임의의 값보다 큰 것들로 필터링
- 중요 항목의 모든 가능한 조합을 만들기
- 모든 조합의 발생 횟수 계산
- Association Rules 적용
- 해석
Data Set
Market_Basket_Optimisation.csv
www.kaggle.com
df = pd.read_csv('Market_Basket_Optimisation.csv', header = None)
df.head()
트랜잭션 데이터로 변환
# 동일한 크기의 리스트에 각 손님들의 쇼핑 목록을 넣기
trans = []
for i in range(0, 7501):
trans.append([str(df.values[i,j]) for j in range(0, 20)])
# numpy array 로 변환
trans = np.array(trans)
print(trans.shape)
# (7501, 20) -> 총 스물가지의 장바구니
from mlxtend.preprocessing import TransactionEncoder
te = TransactionEncoder()
data = te.fit_transform(trans)
data = pd.DataFrame(data, columns = te.columns_)
data.shape
# (7501, 121) -> 트랜잭션 데이터 (모든 항목이 들어간)
중요 항목의 모든 가능한 조합을 만들기
frequent_itemsets = apriori(data, min_support = 0.01, use_colnames=True)
frequent_itemsets.sort_values("support", ascending=False)
Association Rules 적용 - 연관 규칙 학습 함수
from mlxtend.frequent_patterns import association_rules
- df: DataFrame
- 빈발 항목 집합을 포함하는 데이터프레임입니다. 이 데이터프레임은 apriori 함수에서 생성한 빈발 항목 집합 결과를 포함하고 있어야 합니다.
- metric: str (기본값은 'lift')
- 연관 규칙을 평가할 메트릭을 지정합니다. 가능한 메트릭은 다음과 같습니다:
- 'lift': 리프트 (lift) 지표를 기준으로 규칙을 생성
- 'confidence': 신뢰도 (confidence) 지표를 기준으로 규칙을 생성
- 'support': 지원도 (support) 지표를 기준으로 규칙을 생성
- 'leverage': 레버리지 (leverage) 지표를 기준으로 규칙을 생성
- 'conviction': 확신도 (conviction) 지표를 기준으로 규칙을 생성
- 연관 규칙을 평가할 메트릭을 지정합니다. 가능한 메트릭은 다음과 같습니다:
- min_threshold: float (기본값은 1.0)
- metric으로 지정한 지표에서 규칙을 선택할 때 사용되는 최소 임계값입니다. 예를 들어, lift 기준으로 규칙을 생성하려면 min_threshold=1.0으로 설정할 수 있습니다. lift가 1보다 크면 두 항목은 서로 연관성이 있다고 볼 수 있습니다.
- support_only: bool (기본값은 False)
- True로 설정하면, support만을 기준으로 규칙을 반환합니다. 신뢰도(confidence), 리프트(lift) 등 다른 지표는 고려하지 않습니다.
- return_metrics: bool (기본값은 True)
- True일 경우, 규칙을 반환할 때 각 규칙의 지표(예: lift, confidence 등)를 포함합니다.
해석
예시
antecedents | consequents | antecedent support | consequent support | support | confidence | lift | representativity | leverage | conviction | zhangs_metric | jaccard | certainty | kulczynski |
(ground beef, eggs) | (mineral water) | 0.019997 | 0.238368 | 0.010132 | 0.506667 | 2.125563 | 1.0 | 0.005365 | 1.543848 | 0.540342 | 0.040816 | 0.352268 | 0.274586 |
groupd beef와 egg가 함께 나타날 때 mineral water가 나타날 확률은 약 50.7%이고, 이 규칙의 향상도는 2.13배입니다. 즉, ground beef와 eggs가 함께 있을 때 mineral water가 나타날 확률은 무작위로 나타날 확률보다 2배 더 높다는 의미이다.
참고
[R 연관규칙(Association Rule) ] Apriori algorithm
지난번 포스팅에서는 연관규칙(association rule)의 평가척도로서 지지도(support), 신뢰도(confidence), 향상도(lift), IS측도(Interest-Support), 교차지지도(cross support) 에 대하여 알아보았습니다. 이번 포스팅
rfriend.tistory.com
https://rfriend.tistory.com/193
[R 연관규칙 (Association Rule)] R arules package로 연관규칙 분석하기
지난번 포스팅에서는 대용량 데이터로 부터 효율적으로 연관규칙(association rules)을 도출할 수 있는 apriori algorithm 에 대하여 알아보았습니다. 이번 포스팅에서는 R의 arules package를 가지고 분석하
rfriend.tistory.com
'Python > 학습용' 카테고리의 다른 글
LLM - RAG(2) (0) | 2025.03.20 |
---|---|
LLM - RAG(1) (0) | 2025.03.20 |
연관 규칙 (1): 이론, 평가척도 설명 (0) | 2025.03.07 |
Spark (4): 병렬처리 실습 (0) | 2025.03.05 |
Spark (3): 데이터 핸들링, 최적화 기법, 멀티프로세싱 및 검증 (0) | 2025.03.03 |