250x250
반응형
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
- 꼭읽어봐야할책
- 네인생우습지않다
- 옹졸함
- php
- Face Detection
- 성선택
- 비밀번호변경
- todolist
- 클라우드
- 지방사람이보는서울사람
- 중용
- Git
- UPSERT
- OpenCV
- delete
- Django
- 헬레나크로닌
- 독후감
- Python
- ChatGPT
- 훌륭한모국어
- 나만의주식5법칙
- linux명령어
- 서울로가자
- 공작과개미
- MySQL
- db
- git 업로드
- 일일투자금액
- 다산의마지막습관
Archives
- Today
- Total
Terry Very Good
연관규칙분석 알고리즘( Apriori VS FP-growth ) 비교 및 사용법 본문
728x90
반응형
연관규칙분석 알고리즘은 진화를 거듭해서 지금의 개인화 추천 / 협업필터링으로 진화했다.
가장 근간이되는 Apriori 알고리즘과 FP-growth알고리즘에 대해 비교 및 사용법을 적어보겠다.
(본인은 OSP 투자 설계 시스템에 본 방법을 적용한 적이 있다.)
Apriori Algorithm
장점: 원리가 간단하여 이해하거나 의미를 파악하기 쉽다.
유의미한 연관성을 갖는 분야(구매패턴찾기, 동일 설계 추천 등)에 다양한 패턴을 찾아준다.
단점: 데이터가 커질수록 연산할게 많아져 속도가 느려진다.(이를 보완하기 위해 나온 것이 FP-growth algorithm)
너무 많은 연관상품을 나타내준다.
치킨을 먹기 위해 콜라를 산 것인지, 콜라를 먹기 위해 치킨을 산 것인지 구분이 어렵다.
[실행 코드]
import mlxtend
import numpy as np
import pandas as pd
from mlxtend.preprocessing import TransactionEncoder
from mlxtend.frequent_patterns import apriori
from mlxtend.frequent_patterns import association_rules
import time
data = np.array([
['우유','기저귀','쥬스'],
['상추','기저귀','맥주'],
['우유','양상추','기저귀','맥주'],
['양상추','맥주']
])
start = time.time()
te = TransactionEncoder()
te_ary = te.fit(data).transform(data)
df = pd.DataFrame(te_ary, columns=te.columns_)
#print(df)
min_support_per = 0.5
min_trust_per =0.5
result = apriori(df,min_support=min_support_per, use_colnames=True)
result_chart = association_rules(result, metric="confidence", min_threshold=min_trust_per)
print(result_chart)
print("time: ", time.time() - start) # 현재시각 - 시작시간 = 실행시간
[결과]
antecedents consequents antecedent support consequent support support confidence lift leverage conviction
0 (맥주) (기저귀) 0.75 0.75 0.5 0.666667 0.888889 -0.0625 0.75
1 (기저귀) (맥주) 0.75 0.75 0.5 0.666667 0.888889 -0.0625 0.75
2 (우유) (기저귀) 0.50 0.75 0.5 1.000000 1.333333 0.1250 inf
3 (기저귀) (우유) 0.75 0.50 0.5 0.666667 1.333333 0.1250 1.50
4 (맥주) (양상추) 0.75 0.50 0.5 0.666667 1.333333 0.1250 1.50
5 (양상추) (맥주) 0.50 0.75 0.5 1.000000 1.333333 0.1250 inf
time: 0.032541751861572266
FP-growth Algorithm
장점: Tree구조를 사용하여 Apriori Algoritm보다 훨씬 빠르며, DB 스캔 횟수도 줄어든다.
단점: 아직까지도 대용량 데이터 셋에서는 메모리를 효율적으로 사용하지 않는다고 본다.
Apriori에 비해 원리이해/설계가 어렵고, 서포트의 계산은 무조건 FP-Tree가 만들어져야 가능하다.
[실행 코드]
import mlxtend
import numpy as np
import pandas as pd
from mlxtend.preprocessing import TransactionEncoder
from mlxtend.frequent_patterns import association_rules
from mlxtend.frequent_patterns import fpgrowth
import time
start = time.time() # 시작 시간 저장
data = np.array([
['우유','기저귀','쥬스'],
['상추','기저귀','맥주'],
['우유','양상추','기저귀','맥주'],
['양상추','맥주']
])
te = TransactionEncoder()
te_ary = te.fit(data).transform(data)
df = pd.DataFrame(te_ary, columns=te.columns_)
#print(df)
min_support_per = 0.5
min_trust_per =0.5
result = fpgrowth(df,min_support=min_support_per, use_colnames=True)
result_chart = association_rules(result, metric="confidence", min_threshold=min_trust_per)
print(result_chart)
print("time: ", time.time() - start) # 현재시각 - 시작시간 = 실행시간
[결과]
antecedents consequents antecedent support consequent support support confidence lift leverage conviction
0 (맥주) (기저귀) 0.75 0.75 0.5 0.666667 0.888889 -0.0625 0.75
1 (기저귀) (맥주) 0.75 0.75 0.5 0.666667 0.888889 -0.0625 0.75
2 (기저귀) (우유) 0.75 0.50 0.5 0.666667 1.333333 0.1250 1.50
3 (우유) (기저귀) 0.50 0.75 0.5 1.000000 1.333333 0.1250 inf
4 (양상추) (맥주) 0.50 0.75 0.5 1.000000 1.333333 0.1250 inf
5 (맥주) (양상추) 0.75 0.50 0.5 0.666667 1.333333 0.1250 1.50
time: 0.028723716735839844
728x90
반응형
'신기술 습득 > IDEA&Tool&API' 카테고리의 다른 글
Google News RSS URL Parameters (0) | 2022.02.23 |
---|---|
[EXCEL VDA] 기본 실행법(엑셀 처음화면에서 VDA코드 실행까지) (0) | 2021.11.29 |
개발에 필요한 최소한의 좌표 내용(기본위경도설명 및 PROJ / WGS84 / UTM / UTMK) (0) | 2021.01.23 |
[텔레그램 API] 우분투에서 텔레그램 API를 이용한 챗봇 만들기 (0) | 2021.01.09 |
[카카오네비] 좌표를 이용하여 URL로 카카오Navi 즉시 실행하기(길찾기 버튼 / 좌표활용로드뷰URL) (1) | 2020.11.17 |