recommend system : 토크ON세미나 _ SKplanet Tacademy 정리

url : https://www.youtube.com/watch?v=43gb7WK56Sk&ab_channel=SKplanetTacademy

1강 - 추천시스템의 이해 (연관분석, Apriori, FP-Growth)

RS-KR 에서 추천시스템 관련 정보 공유 중

1.1 추천시스템 이란

  • 추천 시스템 이란

사용자(user)에게 상품(item)을 제안하는 소프트웨어 도구 이자 기술

-> 다양한 의사결정과 연관있음

  • 목표

어떤 사용자에게 어떤 삼풍을 “어떻게 추천”할지에 대해 이해

보통 어떤 사용자를 대상으로 추천할지 대상 집단을 설정을 먼저 함.

  • 파레토와 롱테일의 법칙
- 파레토의 법칙
상위 20%가 80%의 가치를 창출한다.
- 롱테일의 법칙
하위 80%가 상위20%의 가치보다 크다. -> 인터넷의 발전에 따라
-> 소외된 80%의 고객에서도 상당한 영업기회가 존재한다는 현상 (아마존, 넷플릭스 등) 
-> 추천시스템의 발전 (온라인에서 더 효율적으로 사용하기 좋음)  
  • 추천시스템의 역사
   - 2005 ~ 2010
- Apriori 알고리즘
연관상품 추천
-> 같이 구매하는 상품을 찾아서 추천해주는 방법
   - 2010 ~ 2015
- 협업 필터링
SVD
- 2005 ~ 2009년 넷플릭스 추천대회
SVD를 이용한 추천시스템이 우승
   - 2013 ~ 2017
데이터의 중요성을 인식하여 데이터를 DB에 쌓아두기 시작
- Spark를 이용한 빅데이터
FP-Growth
Matrix Factorization
   - 2015 ~ 2017
- 딥러닝을 이용한 추천시스템
협업필터링 + 딥러닝
Item2Vec, Doc2Vec
YouTube Recommendation
Wide & Deeo Model
   - 2017 ~ 
- 개인화 추천시스템
Factorization Machine
Hierarcical RNN
강화학습 + Re-Ranking
딥러닝
  • 연관분석(Association Analysis)
   - 정의
룰기반의 모델로서 상품과 상품사이에 어떤 연관이 있는지 찾아내는 알고리즘
추천 시스템의 시초 알고리즘
   - 연관 이란?
1. 얼마나(frequent) 같이 구매되는가?
2. A아이템을 구매하는 사람이 B아이템을 구매하는가?
 -> 2번은 A아이템을 사는 조건 하에 B상품을 구매하는 경우 
 (ex 아이패드를 사서 아이패드 팬슬을 삼, 월마트 귀저기와 맥주의 상관관계)
    - 규칙평가지표
1. support(지지도)
A상품을 구매시 B를 이어지는 규칙에 대해 조건 A에 대한 구매 확률
2. confidence(신뢰도)
A를 상품을 구매시 B라는 상품까지 구매를 할 확률
3. lift(향상도)
두 사건이 동시에 얼마나 발생하는지 비율, 독립성을 측정하기 위한 평가 지표

주로 1, 2번을 많이 사용함

   - 규칙 생성 방법
아이템에 대한 모든 연관 가능성이 있는 연결을 나열하고, 향상도, 지지도, 신뢰도가 높은 규칙을 찾아내는 방식
예 4가지 상품인경우 ) 4c1 - 4, 4c2 - 6, 4c3 - 4, 4c4 - 1 => 15가지에 대한 분석
but -> 아이템의 증가에 따라 규칙의수가 기하급수적으로 증가하는 문제 발생
아이탬이 100개만되도 1경에 가까운 관계 수가 생김
  • Apriori 알고리즘
   - 정의
연관분석에서 아이템셋의 증가를 줄이기 위한 방법
빈번한 아이템셋은 하위 아이템셋 또한 빈번할 것이다 라는 아이디어에서 시작
즉, 빈번하지 않은 아이템셋은 하위 아이템셋 또한 빈번하지 않음으로 미리 제거 가능 
ex) {2,3}을 구매한 아이템셋이 빈번하지 않으면 {1,2,3}, {0,2,3}, {2,3,4}등을 모두 제거 가능 
    P(item 2, item3) > P(item2, item3, item4) 이기 때문에 

   - Apriori 알고리즘 진행 방법
1. k개의 item을 가지고 단일항목집단 생성(one-item frequent set)
단일 항목집단 - 아이템을 하나만 구매하는 경우 
각 상품에 대해 나누고 지지도를 계산 
=> 전체의 거래에서 몇번을 거래했는지 확률값을 계산
2. 단일항목집단에서 최소 지지도(support) 이상의 항목만 선택
=> 1에서 구한 확률값에서 특정 값을 기준으로 그 이하값을 제거 
3. 2에서 선택된 항목만을 대상으로 2개항목집단 생성
4. 2개항목집단에서 최소 지지도 혹은 신뢰도 이상의 한목만 선택
5. 위의 가정을 k개의 k-item frequent set을 생성할 때까지 반복

   - Implicit Feedback
비암시적인 피드백으로 사용자가 상품을 구매했지만 구매에 대해 만족했는지 알 수 없음.

   - 장점
원리가 간단하여 사용자가 쉽게 이해할 수 있고 의미를 파악할 수 있음
유의한 연관성을 갖는 구매패턴을 찾아줌
   - 단점
데이터가 클 경우에 속도가 느리고 연산량이 많음
실제 사용시에 많은 연관상품들이 나타나는 단점이 있음
연관 상관관계가 인과관계를 의미하지 않는 경우도 있음 ex) 치킨 - 치킨무 치킨때문에 치킨무를 구입함
  • FP-Growth
   - 정의
Apriori 알고리즘의 속도측면 단점을 개선한 알고리즘
Apriori와 성능은 비슷하지만 FP Tree구조를 사용해 빠른 속도를 가짐
but, 동일하게 발생하는 아이템셋(frequent itemsets)을 찾는데 좋지만 아이템간의 연광성을 찾기는 어려움
   - FP-Growth 알고리즘 진행 방법
1. 모든 거래를 확인하여, 각 아이템마다의 지지도(support)를 계싼하고 최소 지지도이상의 아이템만 선택
2. 모든 거래에서 빈도가 높은 아이템 순서대로 정렬
3. 부모 노드를 중심으로 거래를 자식노드로 추가해주면서 tree를 생성
부모 노드인 root를 중심으로 아이템들을 자식노드로 하나씩 추가하게 됨
4. 새로운 아이템이 나올 경우에는 부모노드부터 시작, 그렇지 않으면 기존의 노드에서 확장
구매내역의 유사도를 가지고 트래형태로 생성하고 빈도를 추가
5. 지지도가 낮은 순서부터 시작하여, 조건부 패턴을 생성
트리에 끝에서부터 해당 아이템을 산경우 앞선 트리를 구매하게 될 수를 구함
6. 모든 아이템에 대해서 반복

   - 장점
Apriori알고리즘보다 빠르고 2번의 탐색만 필요로 함
후보 itemsets을 생성할 필요없이 진행 가능
   - 단점
대용량의 데이터셋에 메모리를 효율적으로 사용하지 않음
Apriori 알고리즘에 비해서 설계하기 어려움
지지도 계산이 FP-Treerk 가 만들어지고 나서야 가능
  • 예시 코드

https://www.kaggle.com/chocozzz/00-apriori-fp-growth