본문 바로가기
데이터 분석/데이터 분석

개인화 추천 알고리즘 2 : FP-Growth

by thomasito 2022. 2. 6.
반응형

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 

 

[이재호 강좌] 오렌지 제9강 연관 분석(Association Analysis) - 경영자를 위한 디지털 전략 가이드, 스

알림: 본 강좌의 모든 예제와 오렌지 파일은 강좌 하단에 zip 파일로 제공됩니다. 강좌의 내용을 따라하시면서 활용해주세요. -스마투스비즈니스리뷰지 알림- 목차1. 연관분석의 소개2. 추천시스

www.sbr.ai

반응형

댓글