일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- pandas
- 실습
- Numpy
- Kaggle
- level 2
- 머신러닝
- 프로그래머스
- 알고리즘
- Python
- 실기
- oracle
- SQL
- 빅분기
- R
- 튜닝
- 데이터 분석
- Oracel
- 코딩테스트
- level 1
- python3
- 빅데이터 분석 기사
- 파이썬
- 오라클
- sklearn
- matplotlib
- seaborn
- 카카오
- Today
- Total
라일락 꽃이 피는 날
[빅분기 실기] 연관규칙분석 (Association Rule) 본문
연관규칙분석 (Association Rule, Apriori Algorithm)
대용량의 트랜잭션 데이터로부터 'X이면 Y이다' 라는 형식의 연관관계를 발견하는 기법이다.
어떤 두 아이템 집합이 빈번히 발생하는가를 알려주는 일련의 규칙들을 생성하는 알고리즘이다.
흔히 장바구니 분석(Market Basket Analysis) 이라고도 한다.
연관규칙을 수행하기 위해서는 거래 데이터의 형식으로 되어 있어야 한다.
지지도 (Support) : 전체 거래 건수 중에서 항목집합 X와 Y를 모두 포함하는 거래 건수의 비율
X와 Y를 모두 포함하는 거래 수 / 전체 거래 수 = n(X∩Y) / N
신뢰도 (Confidence) : 항목집합 X를 포함하는 거래 중에서 항목집합 Y도 포함하는 거래 비율
X와 Y를 모두 포함하는 거래 수 / X가 포함된 거래 수 = n(X∩Y) / n(X)
향상도 (Lift) : 신뢰도 / P(Y)
향상도가 절대값 1보다 크면 우수함을 의미하고, 1이면 X와 Y는 독립적이라는 것을 의미한다.
[주요 하이퍼파라미터]
- min_support : 최소 지지도, 기준값 이상만 제시
- min_confidence : 최소 신뢰도, 기준값 이상만 제시
- min_lift : 최소 향상도, 기준값 이상만 제시
1. 분석 데이터 준비
import numpy as np
import pandas as pd
data = pd.read_csv('Market_Basket.csv', header = None)
data.head()
transactions = []
for i in range(data.shape[0]):
transactions.append([str(data[j][i]) for j in
range(data.shape[1]-data.isnull().sum(axis=1)[i])])
transaction data로 변환하기 위해서 transactions 이라는 빈 리스트를 만들어 놓고 케이스(행) 수만큼 for문을 수행한다.
transactions에 추가하면서 data에 있는 제품 품목을 담는다.
2. 모델 적용
from apyori import apriori
rules = apriori(transactions, min_support = 0.015, min_confidence = 0.2,
min_lift = 1, min_length = 1)
results = list(rules)
df=pd.DataFrame(results)
df
3. 연관품목의 시각화
ar=(df.iloc[1:74]['items'])
ar
78개 규칙 중 74개만 뽑아 그래프로 표현한다.
import matplotlib.pyplot as plt
from matplotlib import font_manager
import networkx as nx
from networkx.drawing.nx_pydot import graphviz_layout
df = pd.DataFrame(list(ar), columns=['FROM', 'TO'])
G = nx.from_pandas_edgelist(df, source = 'FROM', target = 'TO')
# 한글 폰트 설정
ko_font_location = "C:/Windows/Fonts/malgun.ttf"
ko_font_name = font_manager.FontProperties(fname=ko_font_location).get_name()
# 품목 연관 시각화
plt.figure(figsize=(10,10))
nx.draw_kamada_kawai(G)
pos=nx.kamada_kawai_layout(G)
nx.draw_networkx_labels(G, pos, font_family=ko_font_name, font_size=10, font_color='black')
nx.draw_networkx_nodes(G, pos, node_color='orange', node_size=2000, alpha=1)
plt.show()
'데이터 분석 > 빅데이터 분석 기사' 카테고리의 다른 글
[빅분기 실기] DBSCAN (0) | 2022.06.20 |
---|---|
[빅분기 실기] 군집 분석 (Cluster Analysis) (0) | 2022.06.20 |
[빅분기 실기] 엘라스틱넷 (Elasticnet) (0) | 2022.06.19 |
[빅분기 실기] 라쏘 (Lasso) (0) | 2022.06.19 |
[빅분기 실기] 릿지 (Ridge) (0) | 2022.06.19 |