import pandas as pd
data = pd.read_csv('C:\jupyter\data.csv', encoding= 'unicode_escape')
data = data.sort_values(['CustomerID', 'InvoiceNo'], ascending = True)
data
#StockCode 맨 뒤에 알파벳 붙어있는 애들(상품세부속성) 제외 위해서
# -> 숫자만 뽑아서 저장해서 'NewStockCode'컬럼으로 추가
data['NewStockCode'] = data.StockCode.str.extract('(\d+)')
data
#data.info()
#dataset = data.query('-Description.isnull()').groupby('InvoiceNo')['Description'].apply(list).tolist()
dataset = data.query('-NewStockCode.isnull()').groupby('InvoiceNo')['NewStockCode'].apply(list).tolist()
dataset
for i in dataset:
print(i)
from mlxtend.preprocessing import TransactionEncoder
from mlxtend.frequent_patterns import apriori
te = TransactionEncoder()
te_result = te.fit(dataset).transform(dataset)
df = pd.DataFrame(te_result, columns= te.columns_)
!pip install mlxtend
itemset = apriori(df, min_support= 0.01, use_colnames = True)
itemset
pd.options.display.max_rows = 10000
pd.options.display.max_columns = 20
pd.options.display.max_colwidth = 200
itemset.sort_values('support', ascending = False)
from mlxtend.frequent_patterns import association_rules
association_rules(itemset, metric="confidence", min_threshold=0.1).sort_values('support', ascending=False)
itemset.to_csv('chunsik5_apriori.csv')
- support(지지도)
전체 거래에서 특정 물품 A와 B가 동시에 거래되는 비중
해당 규칙이 얼마나 의미있는지 보여줌.
지지도 = P(A∩B)
:A와 B가 동시에 일어난 횟수 / 전체 거래 횟수
- confiddence(신뢰도)
A를 포함하는 거래 중 A와 B가 동시에 거래되는 비중
신뢰도 = P(A∩B) / P(A)
:A와 B가 동시에 일어난 횟수 / A가 일어난 횟수
- lift(향상도)
A라는 상품에서 신뢰도가 동일한 상품 B와 C가 존재할 때, 어떤 상품을 더 추천해야 좋을지 판단.
A와 B가 동시에 거래된 비중을 A와 B가 서로 독립된 사건일 때 동시에 거래된 비중으로 나눈 값
향상도 = P(A∩B) / P(A)*P(B) = P (B|A) / P (B)
: A와 B가 동시에 일어난 횟수 / A, B가 독립된 사건일 때 A,B가 동시에 일어날 확률
'Python' 카테고리의 다른 글
pandas, numpy 라이브러리(평균, 표준편차, 공분산, 상관계수) (0) | 2022.08.21 |
---|---|
Pandas 데이터 정렬하기, 날짜형 변환(to_datetime), pandasql, csv파일 불러오기/저장하기 (0) | 2022.08.15 |
Programmers (0) | 2022.07.20 |
python 기초 _ for문 _ 중첩문 (0) | 2022.07.16 |
python_if문, for문, def문, naming규칙, range (0) | 2022.07.14 |