1. 연관 규칙 학습 (Association Rule Learning)이란?
데이터셋 내의 항목들 간에 발생하는 연관성을 찾는 비지도 학습 기법입니다.
주로 '장바구니 분석(Market Basket Analysis)'에 사용되며,
고객이 함께 구매하는 제품들 간의 관계를 발견하거나,
어떤 항목들이 함께 자주 등장하는지를 파악하는 데 활용됩니다.
1. 연관 규칙 학습의 주요 개념 |
|
2. 활용 |
|
3. Apriori 알고리즘 |
|
4. Eclat 알고리즘 |
|
5. Apriori와 Eclat 비교 |
두 알고리즘 모두 연관 규칙 학습을 위한 강력한 도구이지만, 데이터셋의 크기와 특성에 따라 적합한 알고리즘을 선택하는 것이 중요합니다. Apriori는 단계적으로 데이터를 확장하고, Eclat는 수직적 탐색을 통해 빠르게 빈발 항목을 찾아냅니다. |
2. Apriori 실습
◼ 장바구니 데이터
◼ apyori 설치하기
!pip install apyori
|
Collecting apyori Downloading apyori-1.1.2.tar.gz (8.6 kB) Preparing metadata (setup.py) ... done Building wheels for collected packages: apyori Building wheel for apyori (setup.py) ... done Created wheel for apyori: filename=apyori-1.1.2-py3-none-any.whl size=5953 sha256=721937003013c3b16093bab54666b6f0d5bf8816f30a62006ca0b98dea6e55dd Stored in directory: /root/.cache/pip/wheels/c4/1a/79/20f55c470a50bb3702a8cb7c94d8ada15573538c7f4baebe2d Successfully built apyori Installing collected packages: apyori Successfully installed apyori-1.1.2 |
◼ import
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
|
◼ 데이터 전처리해서 가져오기
dataset = pd.read_csv('데이터 위치', header = None)
transactions = []
for i in range(0, 7501):
transactions.append([str(dataset.values[i,j]) for j in range(0, 20)])
|
|
◼ dataset 확인
dataset
|
◼ 모든 거래 리스트 보기
transactions
|
[['shrimp', 'almonds', 'avocado', 'vegetables mix', 'green grapes', 'whole weat flour', 'yams', 'cottage cheese', 'energy drink', 'tomato juice', 'low fat yogurt', 'green tea', 'honey', 'salad', 'mineral water', 'salmon', 'antioxydant juice', 'frozen smoothie', 'spinach', 'olive oil'], ['burgers', 'meatballs', 'eggs', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan'], ['chutney', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan'], .... |
◼ 데이터셋에서 Apriori 모델을 학습하기
from apyori import apriori
rules = apriori(transactions = transactions, min_support = 0.003, min_confidence = 0.2, min_lift = 3, min_length = 2, max_length = 2)
|
|
rules:
|
◼ Apriori 함수의 출력에서 첫 번째 결과를 표시하기
results = list(rules)
results
|
[RelationRecord(items=frozenset({'chicken', 'light cream'}), support=0.004532728969470737, ordered_statistics=[OrderedStatistic(items_base=frozenset({'light cream'}), items_add=frozenset({'chicken'}), confidence=0.29059829059829057, lift=4.84395061728395)]), RelationRecord(items=frozenset({'mushroom cream sauce', 'escalope'}), support=0.005732568990801226, ordered_statistics=[OrderedStatistic(items_base=frozenset({'mushroom cream sauce'}), items_add=frozenset({'escalope'}), confidence=0.3006993006993007, lift=3.790832696715049)]), RelationRecord(items=frozenset({'pasta', 'escalope'}), support=0.005865884548726837, ordered_statistics=[OrderedStatistic(items_base=frozenset({'pasta'}), items_add=frozenset({'escalope'}), confidence=0.3728813559322034, lift=4.700811850163794)]), RelationRecord(items=frozenset({'honey', 'fromage blanc'}), support=0.003332888948140248, ordered_statistics=[OrderedStatistic(items_base=frozenset({'fromage blanc'}), items_add=frozenset({'honey'}), confidence=0.2450980392156863, lift=5.164270764485569)]), RelationRecord(items=frozenset({'herb & pepper', 'ground beef'}), support=0.015997866951073192, ordered_statistics=[OrderedStatistic(items_base=frozenset({'herb & pepper'}), items_add=frozenset({'ground beef'}), confidence=0.3234501347708895, lift=3.2919938411349285)]), RelationRecord(items=frozenset({'tomato sauce', 'ground beef'}), support=0.005332622317024397, ordered_statistics=[OrderedStatistic(items_base=frozenset({'tomato sauce'}), items_add=frozenset({'ground beef'}), confidence=0.3773584905660377, lift=3.840659481324083)]), RelationRecord(items=frozenset({'olive oil', 'light cream'}), support=0.003199573390214638, ordered_statistics=[OrderedStatistic(items_base=frozenset({'light cream'}), items_add=frozenset({'olive oil'}), confidence=0.20512820512820515, lift=3.1147098515519573)]), RelationRecord(items=frozenset({'olive oil', 'whole wheat pasta'}), support=0.007998933475536596, ordered_statistics=[OrderedStatistic(items_base=frozenset({'whole wheat pasta'}), items_add=frozenset({'olive oil'}), confidence=0.2714932126696833, lift=4.122410097642296)]), RelationRecord(items=frozenset({'pasta', 'shrimp'}), support=0.005065991201173177, ordered_statistics=[OrderedStatistic(items_base=frozenset({'pasta'}), items_add=frozenset({'shrimp'}), confidence=0.3220338983050847, lift=4.506672147735896)])] |
데이터 구조 설명각 RelationRecord는 다음과 같은 정보를 포함하고 있습니다:
예시 해석첫 번째 규칙인 frozenset({'chicken', 'light cream'})의 경우:
|
◼ 결과를 잘 정리하여 Pandas DataFrame에 저장하기
def inspect(results):
lhs = [tuple(result[2][0][0])[0] for result in results]
rhs = [tuple(result[2][0][1])[0] for result in results]
supports = [result[1] for result in results]
confidences = [result[2][0][2] for result in results]
lifts = [result[2][0][3] for result in results]
return list(zip(lhs, rhs, supports, confidences, lifts))
resultsinDataFrame = pd.DataFrame(inspect(results), columns = ['Left Hand Side', 'Right Hand Side', 'Support', 'Confidence', 'Lift'])
|
◼ 결과확인하기
resultsinDataFrame
|
◼ 향상도(lift)를 기준으로 내림차순으로 정렬된 결과를 표시하기
resultsinDataFrame.nlargest(n = 10, columns = 'Lift')
|
3. Eclate 실습
◼ 결과를 잘 정리하여 Pandas DataFrame에 저장하기
def inspect(results):
lhs = [tuple(result[2][0][0])[0] for result in results]
rhs = [tuple(result[2][0][1])[0] for result in results]
supports = [result[1] for result in results]
return list(zip(lhs, rhs, supports))
resultsinDataFrame = pd.DataFrame(inspect(results), columns = ['Product 1', 'Product 2', 'Support'])
|
◼ 결과확인
resultsinDataFrame.nlargest(n = 10, columns = 'Support')
|
'AI > 머신러닝' 카테고리의 다른 글
16. 강화학습 | 광고클릭 데이터 (0) | 2024.10.07 |
---|---|
14. 계층적 군집화(HC) | 고객층 분석 (0) | 2024.10.07 |
13. 나이브 베이즈 분류기 모델 (0) | 2024.06.18 |
12. K-평균 군집화 (KMeans) | Marketing (0) | 2024.06.17 |
11. 다양한 모델 성능비교 | Air Quality UCI (0) | 2024.06.17 |