FP-Growth 왜 나왔을까?
이전 포스팅에서 Apriori 알고리즘에 대해 알아보았다. Apriori의 가장 큰 단점 아이템셋의 수가 증가할 수록 메모리를 많이 먹고 속도가 느려진 다는 것이다. FP Tree도 기본적으로 연관분석의 하나이며 Apriori와의 차이는 FP-Tree를 생성한 후에 최소 지지도 이상의 패턴만을 추출한다는 것이다. FP tree는 아이템 별로 노드를 추가하면서 트리를 생성하는 과정이다.
FP Tree를 생성하는 방법은 아래 블로그에 잘 설명되어 있다. (너무 유익한 내용 감사드립니다. ㅠ)
https://process-mining.tistory.com/92
FP-Growth 사례
원핫 인코딩을 통해 데이터프레임을 생성하는 절차는 Apriori 와 동일하다.
import mlxtend
import numpy as np
import pandas as pd
data = np.array([
['휴지','물티슈','샴푸'],
['수세미','물티슈','비누'],
['휴지','수세미','물티슈','비누'],
['수세미','비누']
])
df_data = pd.DataFrame(data)
df_data
from mlxtend.preprocessing import TransactionEncoder
te = TransactionEncoder()
te_array = te.fit(data).transform(data)
df = pd.DataFrame(te_array, columns=te.columns_)
df
fpgrowth 모듈을 임포트한 후 함수에 파라미터들을 넣어준다. Apriori와 파라미터도 동일하고 최소 지지도 이상의 아이템 셋을 추출하는 결과값도 동일하다. (다만 이상하게 colab에서 fpgrowth 모듈 임포트 오류가 나서 [!pip install --upgrade mlxtend]로 모듈을 업그레이드 하고나니 정상적으로 fpgrowth 모듈 임포트가 됐다.
from mlxtend.frequent_patterns import fpgrowth
fpgrowth(df, min_support=0.5, use_colnames=True)
결과는 Apriori 와 동일하게 추출되었으며 아래 itemset들을 기반으로 추천이 가능할 것이다.
연관분석(Apriori, FP growth)의 단점
연관분석은 개인화 추천시스템의 가장 기본이 되는 방법이다. 다만 여기에는 몇 가지 문제점이 있다. 첫 번째는 최소 지지도를 분석가가 주관적으로 설정한다는 것이다. 최적화된 지지도는 아마 상품별로 판매상황별로 다를 것이기 때문에 분석가의 주관적인 최소 지지도 설정에 문제가 있을 수 있다. 두 번째는 상관관계는 파악할 수 있지만 인과관계를 파악하기 어렵다는 점이며, 마지막으로 세 번째는 거래량이 적은 상품들은 자연히 지지도가 낮게 나와 거래량이 적은 상품들에 대한 상품들은 추천에서 배제될 수 있다는 사실이다.
이러한 배경하에 협업 필터링(Collaborative Filtering) 계열 알고리즘이 나타나기 시작했으며 이는 다음 포스팅에서 알아보도록 하겠다.
아래 내용의 글도 연관분석에 도움이 많이 되므로 링크를 남겨놓도록 하겠다.
http://www.sbr.ai/news/articleView.html?idxno=1582
'데이터 분석 > 데이터 분석' 카테고리의 다른 글
개인화 추천 알고리즘 4 : 컨텐츠 기반 모델과 코사인 유사도 함수 (0) | 2022.02.08 |
---|---|
개인화 추천 알고리즘 3 : 컨텐츠 기반 모델과 유사도 함수 (0) | 2022.02.07 |
개인화 추천 알고리즘 1 : Apriori 알고리즘 (0) | 2022.02.06 |
파이썬으로 코스피 코스닥 상장기업 재무정보 크롤링하기 (0) | 2022.01.23 |
Dart_fss 모듈을 활용한 배당금 예측 (그리고 실패) (0) | 2022.01.17 |
댓글