!pip install pycaretPyCaret 설치
Google Colab 사용자의 경우 다음의 코드를 실행합니다.
from pycaret.utils import enable_colab
enable_colab()필요한 모듈 import
import pandas as pd
import numpy as np
import seaborn as sns
pd.options.display.max_columns = None실습을 위한 데이터셋 로드
from pycaret.datasets import get_data
dataset = get_data('france')InvoiceNo: 송장번호. 명목, 각 거래에 고유하게 할당된 6자리 정수. 이 코드가 문자 ’c’로 시작하면 취소를 나타냅니다.StockCode: 제품(항목) 코드. 공칭, 각 고유 제품에 고유하게 할당된 5자리 정수입니다.Description: 제품(항목) 이름Quantity: 거래당 각 제품(항목)의 수량InvoiceData: 송장 날짜 및 시간UnitPrice: 단가. 숫자, 단위당 제품 가격.CustomerID: 고객 번호입니다. 호칭, 각 고객에게 고유하게 할당된 5자리 정수Country: 국가 이름. 명목상, 각 고객이 거주하는 국가의 이름
설정: setup()
머신러닝 예측 방식에 따라 다음 중 하나를 골라 import 합니다.
from pycaret.arules import * # 연관 규칙setup 함수
data: 학습할 데이터셋을 지정합니다.transaction_id: 트랜섹션 id를 입력합니다.transaction_id를 기준으로 아이템을 그룹핑합니다.item_id: 아이템의 고유 품목(명) 이 되는 컬럼을 지정합니다.session_id: SEED 값을 지정합니다.
dataset.head(3)s = setup(data=dataset,
transaction_id='InvoiceNo',
item_id='Description') Transactions: 데이터세트의 고유한 트랜잭션 수입니다. 이 경우InvoiceNo의 고유 개수가 됩니다.Items: 데이터세트의 고유한 항목 수입니다. 이 경우Description에 지정한 고유 품목수가 됩니다.Ignore Items: 연관 규칙에서 무시할 항목을 지정합니다.
s = setup(data=dataset,
transaction_id='InvoiceNo',
item_id='Description',
ignore_items = ['POSTAGE']
) 모델 생성
연관규칙에서 모델을 생성하는 방법은 단순합니다. 필수로 입력해야 하는 파라미터는 없으나 4개의 옵션을 제공하며 옵션은 다음과 같습니다.
metric: 평가지표를 설정합니다. 기본값은confidence입니다. 다른 옵션 값으로는support,lift,leverage,conviction가 있습니다.threshold: 평가지표에 대한 최소 임계값을 지정합니다. 기본 값은 0.5 입니다.min_support:support에 대한 최소 임계값을 지정합니다.support는 다음과 같이 계산 됩니다.트랜섹션 별 아이템 출현 빈도/전체 트랜섹션`. 기본 값은 0.05 입니다.round: 반올림할 소수점 자릿수를 지정합니다.
ar_model = create_model() ar_model.shape결과 해석
아이템 X, Y가 존재한다고 가정합니다.
- 지지도(support):
- 두 항목 X, Y가 모두 포함하는 거래건수(transaction_id)의 비율을 나타냅니다.
- (X, Y 모두 포함하는 transaction_id) / (전체 transaction_id)
- (실사례) frequent item set을 판단하는데 사용
- (예시) 햇반, 라면, 스팸 묶음 세트 -> 마케팅 프로모션
- 신뢰도(confidence):
- X를 포함하는 거래중 X, Y를 모두 포함하는 조건부 확률을 말합니다.
- (X, Y 모두 포함하는 transaction_id) / (항목 X가 포함된 transaction_id)
- 아이템 집합 간의 연관성 강도를 측정할 때 사용
- 신뢰도 100%의 의미는 X를 구매하는 경우, 무조건 Y를 구매한다고 볼 수 있음
- 다만, 향상도를 같이 고려해야함
- 향상도(lift):
항목 X가 주어지지 않았을 때 항목 Y의 확률 대비 / 항목 X가 주어졌을 때 항목 Y의 확률 증가 비율을 말합니다.
lift가 1보다 큰 경우: 긍정적인 연관관계
lift가 1인 경우: X, Y는 독립적인 관계. 연관성이 없음
lift가 1보다 작은 경우: 부정적인 연관관계
만약, 두 항목 (X, Y)가 대체제인 경우 같이 구매되는 경우가 없으므로 1보다 작은 값이 발생할 수 있음. (예시) 콜라/사이다.
antecedents: 전례consequents: 결과
ar_model[['antecedents', 'consequents', 'support', 'confidence', 'lift']].head(10)plot_model(ar_model)plot_model(ar_model, plot='3d')