TITLE : [토크ON세미나] 추천시스템 분석 입문하기 1강 - 추천시스템의 이해 (연관분석, Apriori, FP-Growth)
YOUTUBE LINK : https://youtu.be/43gb7WK56Sk PRESENTER : SKplanet Tacademy DURATION : 00:55:06 PUBLISHED : 2021-01-25
Table of contents
FULL SCRIPT
안녕하세요.
이번 추천 시스템 입문하기의 실습과 이론 발표를 맡은 KAIST의 석사과정생 김현우라고 합니다.
오늘 같은 경우는 이제 기본적으로 과거에 사용했던 추천 시스템 알고리즘부터 시작해 가지고 현재 사용하고 있는 협업 필터링 기반의 알고리즘, 그리고 컨텐츠 기반의 알고리즘 그리고 이거를 통해서 이제 Kaggle에 있는 그런 책 관련된 추천 관련 실습 데이터를 통해서 한번 실습 진행하고 마지막으로 현재는 딥러닝 기반의 알고리즘과 그리고 강화학습 그리고 다른 최신 기법들은 뭐가 있는지 한번 살펴보고 마무리 짓도록 하겠습니다.
먼저 기본적인 목차 보시면 총 6가지 과정으로 발표 오늘은 진행됩니다.
첫 번째로는 추천 시스템의 이해인데 여기서는 이제 추천 시스템이란 무엇이고 기존의 기업들에서는 어떤 식으로 추천 시스템을 활용했고 어떤 식으로 사용해서 매출 같은 거를 극대화하고 올렸는지 그리고 이제 과거의 추천 시스템들 이제 요새는 딥러닝과 머신러닝 이용해서 많은 추천 시스템 모델을 만드는데 그 전에는 이제 어떤 식으로 추천 시스템을 활용했는지 그런 기본 베이스라인 모델에 대해서 살펴보도록 하겠습니다.
그리고 이제 추천 시스템을 이제 보통은 컨텐츠 기반의 추천 시스템과 협업 필터링 기반의 추천 시스템을 많이 활용하는데요.
첫 번째 챕터에서는 이제 컨텐츠 기반의 추천을 그리고 두 번째 챕터에서는 협업 필터링 기반의 추천 시스템에 대해서 살펴보겠습니다.
그리고 이제 간단하게 이제 추천을 내가 잘 했는지 안 했는지에 대한 그런 평가를 할 수 있는 평가 함수를 살펴보고 책 추천 대회라는 케글에 그런 데이터셋이 있는데 그걸 가지고 실습을 하고 마지막으로 요새는 어떤 모델을 사용하고 그리고 어떤 챌린지 분야들이 있는지 살펴보도록 마무리하도록 하겠습니다.
일단 저에 대해서 간단히 소개 드리자면 저는 KAIST 산업 및 시스템 공학과를 지금 1학기째 제약 중이고 있고요.
팀 EDA라는 블로그를 소소하게 운영하면서 그리고 추천 시스템 코리아라는 페이스북 그룹의 운영진이기도 합니다.
그래서 잠깐 저희 추천 시스템 코리아 페이스북 소개해 드리자면 여기서는 추천 시스템 관련해 가지고 그런 정보나 아니면 코드 같은 거 모르는 부분 물어보거나 그리고 최신 논문이나 튜토리얼 자료 같은 거 이렇게 만들어 가지고 배포하고 있으니까 관심 있는 분은 여기 링크 참조해서 들어오시면 많은 도움 될 겁니다.
저 같은 경우는 그리고 원래는 정형 데이터나 태블러 데이터 좋아해 가지고 케글 컴피티션 같은 데도 많이 참여했고 그리고 가장 최근에 참여했던 컴피티션 같은 경우는 상위 1% 하기도 했었는데 그리고 국내 대회도 많이 나갔어요.
근데 작년에 나갔던 대회 중에서 카카오에 브런치 추천 대회라고 있었는데 추천 시스템 이때 처음 접해봤었는데 아까 추천이란 게 다른 수요 예측이라든지 저희 데이터 분석 처음 하게 되면 타이타닉에서 분류 문제 같은 거 많이 풀게 됐는데 얘 같은 경우는 내가 이걸로 공부해도 현실적으로 기업이나 이런 데서 어떻게 써먹어야 될지 좀 막연한 감이 있는데 추천 시스템 대회 나가면서 처음 추천 공부했을 때는 어 이거는 뭔가 되게 하면 바로 기업에서 도움이 되겠다 약간 이런 게 보이더라고요.
그래서 그때부터 흥미가졌고 이거 통해가지고 좀 더 기업 추천 관련한 데 찾아가지고 들어가서 그때부터 추천 시스템 본격적으로 공부했습니다.
그래서 간단하게 추천 시스템의 개요부터 살펴보도록 하겠습니다.
추천 시스템을 어떻게 정리를 할 수 있을까요?
추천 시스템의 좀 바이블이라고 보이는 recommender systems 핸드북 이란 책에서는 추천 시스템을 다음과 같이 정해야 한대요.
추천 시스템은 사용자에게 상품을 제안하는 소프트웨어 도구이자 기술이라고 이렇게 소개를 합니다.
이렇게 사용자에게 상품을 제안하는 게 왜 중요하고 왜 유의미할까요?
일단 유튜브 같은 데만 보면은 일단 유튜브 같은 경우 일단 사용자만 해도 10억 명이 넘는다고 하고 그리고 매초 매 분 이렇게 순간순간마다 몇 십만 개 이렇게 아이템 그러니까 영상들이 올라오게 되는데 사용자 입장에서는 내가 이제 관심 있는 아이템을 그렇게 수십만 개 되는 풀에서 찾기가 굉장히 어렵고 기업 입장에서도 이렇게 좀 계속 올라오는 거를 사용자에게 관심이 있을 법한 것을 제안해 줌으로써 좀 더 매출이라든지 그리고 자기네 플랫폼을 사용자들이 더 잘 이용할 수 있게 하니까 훨씬 중요합니다.
그래서 일단 추천 시스템을 하게 되면 이제 사용자 어떤 사용자를 정한 다음에 그 사용자에게 어떤 상품을 어떻게 추천을 할지에 대한 이해를 가져야 되는데 보통 이렇게 처음에는 사용자 어떤 사용자를 정할지 이렇게 타겟 집단부터 이렇게 정하게 되는데 이거는 전체 사용자를 풀로도 할 수 있지만 약간 사업부라든지 마케팅 팀 입장에 따라서도 좀 다른 것 같아요.
그래서 막 20대만을 집중해서 좀 더 추천을 한다든지 그리고 상품 같은 경우 이제 최신 영화가 나오면 그 영화를 홍보하기 위해서 혹은 잘 안 되는 영화가 있으면 얘를 마케팅 팀에서 쿠폰 같은 걸 통해서 좀 더 잘 보도록 추천을 한다든지 해서 그런 조금 많은 기업의 다른 부서들과 연관이 있고 근데 여기서는 이런 복잡한 얘기는 말고 어떻게 추천할지 단순하게 이제 추천 방법론 들 많이 사용하는 방법론 들에 대해서 이번 시간에 5시간 동안 이해하는 것을 목표로 진행해 보도록 하겠습니다.
일단 기업에서 어떤 식으로 추천 시스템을 활용하는지에 대해서 한번 살펴보도록 하겠습니다.
제가 생각했을 때 추천 시스템을 좀 잘한다고 생각하는 기업이 몇 개 있는데요.
그 중에 하나가 그런 중고 마켓 플랫폼을 운영하는 당근마켓입니다.
당근마켓 같은 경우 이렇게 들어가 보면 추천을 어떤 식으로 하냐면 이 상품과 함께 봤어요 라는 항목이 있어 가지고 제가 본 이 상품에 대해서 다른 사용자들은 그러니까 이 상품을 본 다른 사용자들은 어떤 상품을 봤는지 이렇게 6개 정도로 나타내고 만일 내가 요 6개 중에 관심 있는 게 있으면 또 들어가 가지고 이렇게 구매로 이어질 수 있도록 그리고 카카오 같은 경우는 위와 같이 이 상품과 함께 봤어요 가 아니라 해당 글하고 유사한 글을 어떤 모델을 통해서 잘 비교를 통해 가지고 유사한 글을 찾아서 이렇게 추천을 해주더라고요.
그래서 이거는 실전 이탈 예측 모델링 이라는 그런 분석 관련된 글을 제가 봤는데 추천으로는 뭐 이거 3개 정도는 좀 관련이 없는 거지만 아래 3개 정도는 데이터 사이언스 딥러닝 데이터 분석가에게 필요한 이렇게 조금 관련된 글이 추천할 수 있도록 그런 추천 시스템을 하고 있습니다.
그리고 또 이제 해외 사례로 보면 유튜브 같은 게 있죠.
유튜브 같은 경우는 조금 그런 스케일이 많이 크다 보니까 되게 현실적인 것부터 많이 고려하고 실시간으로 이런 영화 같은 것도 영화나 영상 같은 것도 많이 올라와서 유튜브 같은 데서 딥러닝 모델을 잘 활용했어도 추천하고 실제 그런 클릭의 대부분이 추천에서 나온다고 합니다.
추천에 대해서 잠깐 보기 전에 파레트와 롱테일의 법칙에 대해서 한번 살펴볼게요.
이거는 사실 추천하고는 완전 관련 없어 보일 수도 있지만 추천 시스템에 대한 그런 뭐랄까 핵심 내용 그런 것들이 여기서부터 출발하는 것 같아서 넣었습니다.
일단 파레트의 법칙이 뭐냐면 상위 20%의 가치를 상위 20%가 그런 전체 가치의 80%의 가치를 창출한다는 의미인데 이거는 처음에 이탈리아 어떤 학자에서 발견되었다고 합니다.
이게 원래는 그런 완두콩 전체에 그런 전체 완두콩의 80%가 20%의 완두 그거에서만 발화되어 가지고 이 현상이 발견되어 가지고 실제 이게 기업이나 다른 분야에서 어떻게 되는지를 살펴봤을 때 매출 같은 경우는 매출의 80%가 20%의 VIP 고객이나 주력 상품에서 나오니까 그런 핵심 고객들만에 이제 집중해 가지고 하는 게 좋다라는 것부터 출발을 했는데 근데 추천 시스템은 조금 다릅니다.
이게 인터넷의 발전을 통해서 이제 많은 사람들이 조금 더 접근이 활발해졌고 그래서 아마존 같은 회사와 넷플릭스 같은 경우는 인터넷을 본격적으로 실행하면서 이런 파레트의 법칙과 반대되는 롱테일의 법칙을 좀 집중하게 시작했는데요.
이 롱테일의 법칙은 하위 80%가 상위 20%의 가치보다 크다는 법칙입니다.
그래 가지고 이제 인터넷의 발전에 따라서 그런 하위 80%가 더 많은 가치를 창출할 수 있도록 이제 도와주고 그런 인터넷의 발전에 힘입어 추천 시스템이 도입되게 되는 거죠.
사실 추천 시스템은 오프라인보다는 좀 더 온라인에서 적용하기 더 쉬운 것 같아요.
예를 들어서 아까 당근마켓 사례처럼 간단하게 그런 추천 아이템을 같이 이미지 띄워 줄 수도 있고 마찬가지로 브런치 사례처럼 이렇게 보여줄 수 있을 정도로 UI, UX 적으로만 이렇게 인터넷에 조금 변경만 주면 되니까 실제로도 아마존에서 서점에서 팔리지 않은 책을 이제 온라인에서 추천을 통해 가지고 한 50% 이상 정도의 매출이 온라인에서 추천을 통해서 이루어졌다고 합니다.
그래서 이런 법칙도 이제 보고 이제 과거부터 현재까지 어떤 식으로 추천 시스템의 역사가 진행되는지에 대해서 간단하게 살펴보겠습니다.
일단 과거에는 에이프리오리라는 알고리즘 그러니까 연관 상품을 추천해주는 알고리즘이 처음에 출발을 했습니다.
이거 같은 경우는 비슷한 상품이 아니라 같이 구매하는 상품 같은 걸 잘 찾아서 추천해주는 방법인데요.
그게 과거에 이제 첫 출발을 하면서 이제 사람들이 추천 시스템에 대한 관심을 가지고 이걸 어떻게 마케팅이나 이런 오프라인이나 온라인에서 어떻게 적용할지에 대한 고민을 시작했고 그 이후에 이제 2006년부터 2009년까지 넷플릭스에서 자기네 이제 영화를 가지고 어떤 식으로 추천을 할 수 있을지 그런 모델을 개발하는 넷플릭스 추천 대회가 열렸었는데 이때 우승자의 솔루션이 아마 SVD를 통한 협업 필터링 방법이었을 거예요.
그래서 이 순간을 기점으로 이제 협업 필터링을 기반으로 하는 추천 시스템이 대폭적으로 많이 연구가 되게 시작했죠.
그리고 이제 13년도 이정도부터는 이제 사람들이 데이터에 대한 중요성을 인식하고 많은 데이터를 DB단에 이제 쌓아두기 시작하는데 그러다 보니까 데이터가 빅데이터가 되어가면서 단순히 기존의 이제 모델들로는 추천을 하기가 많이 힘들어진 거죠.
그래서 이런 빅데이터들을 어떻게 다룰지 그런 거에 대한 연구가 활발했고 그리고 최근 이제 딥러닝의 발달과 그리고 알파고 이런 딥러닝이 많이 발달에 힘입어서 기존의 연구였던 협업 필터링을 어떻게 딥러닝과 활용할지 그리고 다른 유튜브나 그런 곳에서는 조금 대규모 규모에서도 어떻게 딥러닝을 잘 활용해서 추천을 할지 그리고 이런 딥러닝 뿐만 아니라 강화학습이라든지 팩토라이제이션 머신 같은 기존의 머신러닝 알고리즘 그리고 RNN 등의 다양한 딥러닝으로서 초개인화 추천 시스템이 최근에는 진행되고 있습니다.
그래서 저희는 여기서 에이프리오리 연관 상품 추천부터 시작해가지고 협업 필터링 그리고 FP그로스와 매트릭스 팩토라이제이션 그리고 간단하게 워드투백을 이용한 추천 시스템 정도를 오늘 살펴보도록 하겠습니다.
그래서 일단 첫 번째로 가장 기존의 첫 번째 추천 시스템 알고리즘의 시작점이었던 연관 분석에 대해서 한번 살펴보도록 하겠습니다.
연관 분석이란 룰 기반의 모델로서 상품과 상품 사이에 어떤 연관성이 있는지를 찾아내는 알고리즘입니다.
그럼 이제 이 연관이라는 게 무슨 의미인지 알아야 되는데요.
이런 연관은 두 가지 형태로 일단 정의를 할 수가 있습니다.
첫 번째로 얼마나 같이 구매되는가.
그리고 두 번째로 A 아이템을 구매하는 사람이 B 아이템을 구매하는가.
예를 들어 이런 게 있을 수 있겠죠.
아이패드를 구매하는 사람이라면 아이패드의 펜슬을 같이 구매하겠다.
치킨을 사는 사람이라면 치킨무를 같이 구매를 하겠다.
두 가지 의미는 이게 여기서 보면 연관해서 첫 번째랑 두 번째는 조금 다른데요.
첫 번째 같은 경우는 단순하게 둘을 같이 구매하는 거라면 그 두 번째 정의는 어떤 A 상품을 구매하는 조건이 있어야 B 상품을 구매하는 겁니다.
그러니까 아이패드를 구매하기 위해 아이패드 펜슬을 하고 아이패드가 있을 때 아이패드를 구매했으니까 아이패드 펜슬을 사는 게 두 번째라고 생각하시면 됩니다.
그래서 이런 거는 좀 연관 분석이라는 이름보다는 장바구니 분석이라는 이름으로 많이 표현됐고 대표적인 예시로는 아마 많은 사람들이 데이터 마이닝 관련 수업이나 공부를 했으면 들어봤을 법한 월마트의 맥주라는 기저귀 사례가 있습니다.
이 예시 간단하게 이야기 드리면 월마트에서 사람들의 영수증 같은 매출 어떤 걸 구매했는지 영수증을 살펴봤을 때 맥주를 구매할 때 사람들의 기저귀를 같이 구매하는 경향이 크다는 걸 밝혀내가지고 둘을 함께 진열하는 마케팅 전략을 세웠을 때 매출의 상승을 본 사례인데요.
왜 맥주랑 기저귀랑 되게 관련이 없어 보이는데 왜 이런 현상이 생겼는지를 좀 살펴봤을 때 집에서 애를 돌보다가 기저귀가 떨어져 가지고 구매를 해야 되는데 남편보고 기저귀를 가서 매장에서 사와라 했을 때 남편이 매장에서 기저귀를 사고 조금 주변 돌아다니면서 장 보다가 오늘 집에 돌아가서 축구 경기나 보면서 맥주 마실까?
하면서 맥주를 조금 더 구매하는 경향이 있었고 이런 현상을 발견했으니까 상품을 같이 진열해 두면 조금 더 사람들의 접근 편의성이 좋아질 테고 기저귀를 구매하면서 맥주를 구매까지 이어지는 게 좀 더 자연스럽게 되면서 매출이 증가하지 않을까?
라는 생각을 가져서 마케팅을 했을 때 실제 그렇지 않은 경우보다 매출이 많이 증가했다고 합니다.
그래서 이런 식으로 어떻게 연관이 있는지를 살펴보면서 분석을 진행할 수 있는데요.
참고로 여담이지만 사실은 이게 기존에 월마트란 맥주 기저귀 사례로 많이 알려졌는데 월마트가 아니고 다른 회사였고 나중에 조금 분석했을 땐 맥주 기저귀와 그렇게 상관관계가 크지는 않다고 합니다.
그래서 일단 연관 분석에 대한 그런 이게 진짜 좋은 연관이 있는 건지를 평가할 수 있는 규칙의 평가 지표부터 먼저 살펴보도록 하겠습니다.
평가 지표에는 크게 세 가지가 있는데요.
첫 번째로는 서포트라는 지지도와 두 번째로는 컨피던스라는 신뢰도 세 번째는 리프트라는 향상도가 있습니다.
그래서 첫 번째 서포트 지지도부터 살펴보면 지지도라는 것은 A라는 상품을 구매했을 때 B로 이렇게 연관, B로 이렇게 이어지는 규칙에 대해서 이런 조건절 A에 대해서 얼마만큼의 구매하는 그런 확률을 보는 겁니다.
참고로 이거는 실제 이런 책에서는 PA라고 나와있고 소프트웨어나 그런 알고리즘 같은 데서는 PA, B라고 나와있어가지고 두 개 다 가능하다고 이해하시면 됩니다.
그래서 조건절 A에 대해서 얼마나 구매를 할지에 대한 확률이 지지도이고 컨피던스 신뢰도 같은 경우는 A라는 상품을 구매했을 때 B라는 상품의 구매까지 이어질 확률.
그리고 리프트 향상도 같은 경우는 두 사건의 동시에 얼마나 발생하는지에 대한 비율인 즉 독립성을 측정하기 위한 평가 지표입니다.
실제로 모델을 만들 때는 서포트나 신뢰도를 많이 사용하지만 세 가지 지표를 좀 더 적절하게 조합해가면서 비교분석을 진행합니다.
그래서 이제 연관 분석을 통해서 어떻게 규칙을 생성하는지에 대해서 살펴보겠습니다.
일단 연관 분석 같은 경우는 만약에 아이템이 네 가지가 있을 때 이 네 가지를 통해서 만들 수 있는 모든 연관성에 대한 것을 경우의 수를 전부 다 나열하고 그 나열 된 경우의 수를 모두 탐색해서 지지도, 신뢰도, 향상도의 규칙들이 높은 것을 찾아내는 방식인데요.
저 같은 경우는 고등학교 2학년 때 배웠는데 그런 고등학교 수학 중에서 순열과 조합이라는 것을 통해서 저희는 전체의 경우의 수가 몇 개인지 이런 것을 예전에 배운 적이 있습니다.
그래서 상품 네 개가 있을 때 네 개의 상품을 통해서 한 가지 상품만 구매하는 경우의 수, 두 가지 상품을 구매하는 경우의 수, 네 개 중에 세 가지 상품을 구매하는 경우의 수, 그리고 네 개 중에 네 개 전부 다 구매하는 경우의 수를 저희는 콤비네이션을 통해서 했는데 네 개 중에 한 개만 구매하는 경우 이제 4시 1이라고 해서 네 가지 경우가 있을 수 있고요.
네 가지 중에 두 개를 선택하는 경우의 수는 4시 1을 통해서 여섯 가지가 있을 수 있겠죠.
그래서 이 전체의 경우의 수에 대해서 다 더하게 되면 아예 안 사는 경우 하나 빼고는 총 15개의 규칙이 만들어질 수 있습니다.
그래서 이 15개의 규칙에 대해서 지지도와 신뢰도, 향상도를 개선한 다음에 높은 순서대로 이제 연관성이 있다라는 것을 분석하는 게 연관 분석의 핵심적인 아이디어입니다.
근데 이런 연관 분석에는 조금 크리티컬한 문제점이 하나 있는데요.
그거는 아이템의 증가에 따라서 규칙의 수 또한 기하급수적으로 증가한다는 게 바로 문제점입니다.
보시면 아이템 10개인 경우에 대해서는 규칙의 수의 개선을 위해 10승에서 1을 빼는 걸로 개선할 수가 있는데요.
이때는 1023개로 규칙이 되게 감당할 수 있는 수준이었는데 유튜브만 해도 그런 영상의 수가 몇 십만 개가 아니라 몇 천만 개가 되고 그리고 이마트나 월마트 같은 데도 상품의 수가 아예 기본적으로 천 단위가 넘어서 만 단위 가까이는 될 텐데 이런 만 단위만 사실 아이템이 100개인 경우만 돼도 거의 일경 각하한 수에 대해서 엄청나게 많은 규칙이 나오게 됩니다.
그래서 이거를 다 사용하기에는 진짜 현실적으로는 불가능하고 이런 문제점을 해결하기 위해서 나온 알고리즘이 에이프리오리 알고리즘인데 에이프리오 알고리즘의 원리는 일단은 빈번한 아이템 셋에 하위 아이템 셋은 또한 빈번할 것이다.
그러니까 빈번하지 않은 아이템 셋은 하위 아이템 셋도 빈번하지 않으니까 미리 제거해주면 더 좋겠다라는 아이디어를 가지고 출발한 알고리즘입니다.
그래가지고 여기서 아이템 셋이 뭔지 간단하게 얘기하면 어떤 상품 4개가 있을 때 이 넷을 묶음을 통해서 만들 수 있는 아이템 셋이고요.
그리고 이 알고리즘 같은 경우는 2랑 3이랑 이렇게 묶인 아이템 셋의 집합이 좀 빈번하지 않으면 2와 3에서 0이라는 아이템을 추가한 0, 2, 3과 2와 3이라는 아이템 집합에서 1을 추가한 1, 2, 3 그리고 여기서 각각 1과 0을 추가한 0, 1, 2, 3이라는 아이템 셋의 집합 또한 빈번하지 않을 것이니까 얘네를 같이 제거해줄 수 있다는 게 이 방법의 기본적인 아이디어입니다.
그래서 당연하게 2와 3에 대한 지지도 같은 경우는 0과 2, 3을 묶은 이 값에 대한 지지도와 1, 2, 3을 묶은 이 지지도보다는 얘가 클 수밖에 없는데요.
사실 확률적으로 2와 3을 같이 구매하는 경우의 수가 2와 3에서 0을 같이 구매하는 경우의 수보다는 더 클 수밖에 없겠죠.
근데 만일 이 값이 낮으면 굳이 뒤에 거를 봐도 볼 이유가 없다.
그러니까 얘도 그냥 자연스럽게 지어버리자 하는 게 에이프리어 알고리즘의 기본적인 계유입니다.
그래서 알고리즘에 어떻게 진행되는지 순서를 한번 살펴보도록 하겠습니다.
첫 번째로는 이제 만일 K개 아이템을 가지고 있다고 생각했을 때 일단 K개 아이템을 가지고 단일 항목 집단이라는 걸 생성합니다.
여기서 말하는 단일 항목 집단이란 아이템을 한 개씩 구매하는 경우를 의미합니다.
그리고 그러한 단일 항목 집단에서 이 경우가 단일 항목 집단입니다.
그래서 이 경우에서 이제 지지도를 계산한 다음에 내가 설정한 최소 지지도, 이거는 사용자의 하이퍼 파라미터 값인데 최소 지지도보다 그런 지지도 기준의 이상인 항목들만 선택하게 되고요.
그리고 이렇게 선택한 항목들을 대상으로 위에서는 단일 항목 집단이었다면 이제는 2개 항목 집단을 이런 식으로 생성하게 되는 거죠.
그리고 여기서도 이제 동일하게 최소 지지도나 혹은 신뢰도 이상의 항목만을 선택해서 그다음에는 이제 2개 항목 집단이 아닌 3개 항목 집단, 4개 항목 집단 이렇게 진행됩니다.
여기서 간단하게 다시 알고리즘 소개해드리면 일단 1개 항목 집단을 선택한 다음에 지지도 계산해서 최소 지지도 이상인 항목만 선택하고요.
그다음에 2개 집단 이렇게 만든 다음에 최소 지지도 이상인 것만.
2, 3 같은 경우는 최소 지지도 이상이 아니어서 이렇게 제거가 되고 그럼 이제 3개 집단을 만드는데 최소 지지도 이상인 거를 고를 때 2, 3이 아니었으니까 2, 3과 연관된 상품들은 애초에 DB에서 탐색하지 않도록 하는 게 APRIL 알고리즘입니다.
한번 실제 예시를 가지고 데이터가 어떻게 APRIL 알고리즘이 진행되는지 살펴보겠습니다.
일단 데이터 같은 경우는 4가지 거래가 있는데 상품 목록 같은 경우는 우유, 양상추, 기저귀, 주스, 맥주 총 5개의 상품이 있다고 가정해보도록 하겠습니다.
그리고 이제 이러한 상품 목록을 가지고 매트릭스 형태로 변형을 해주게 될 텐데요.
이렇게 이거는 트랜잭션 매트릭스라고 표현하고 내부의 값이 0이 많아가지고 스팟스 매트릭스라는 희소 행렬이라고도 표현을 해줍니다.
여기서 말하는 스팟스 매트릭스는 매트릭스 안에 0이라는 값이 좀 유의미하지 않은 의미 없는 값이 많다는 행렬을 의미합니다.
그리고 참고로 여기 만약 우유를 2개 구매하거나 기저귀를 2개 구매해도 내부의 값은 다 1로 채워지고요.
그리고 이러한 데이터셋의 형태를 인플리시 피드백이라는 데이터라고 표현을 하는데요.
그래서 인플리시 피드백이 무엇인지에 대해서 소개를 드리자면 이거는 그런 비함시적인 피드백으로 이게 사용자가 상품을 구매했지만 이게 진짜 구매하고 구매를 했는데 상품에 만족했는지 만족하지 않았는지 그거에 대해서 모른다는 겁니다.
예를 들어서 영화 같은 경우는 영화를 구매한 다음에 평점 같은 걸 5점부터 1점까지 남길 수가 있는데요.
5점을 남겼으면 내가 진짜 이 영화는 보고 만족했다.
1점을 남겼으면 이 영화는 보고 내가 만족하지 않았다.
이거 관련한 영화는 다시 보기 싫다.
이런 식으로 즉각적인 확실한 피드백을 얻을 수 있는데요.
유튜브 같은 경우는 영상을 보고 좋아요나 싫어요를 남기지 않게 되면 내가 이 영상을 봤지만 내가 영상을 보고 난 뒤에 이 영상이 마음에 들었는지 싫어했는지를 모델 자체는 모르게 되고 모델 스스로가 이 사람이 싫어하는지는 모르겠지만 봤으니까 추천을 해주게 되는 그런 형태의 문제를 가지게 되는데요.
그렇게 구성된 데이터를 일단 인플루이시 피드백이라고 하고 보통 많은 데이터 같은 경우가 이런 식으로 많이 구성이 되어 있습니다.
다시 알고리즘으로 돌아와서 이렇게 스팔스 매트릭스 형태를 만든 다음에 어떤 식으로 알고리즘이 진행된지를 살펴보게 되면 첫 번째로 우유, 양상추, 기저귀, 주스, 맥주 5개의 상품에 대해서 단일 항목 집단이라는 걸 생소합니다.
여기서는 이제 상품이 5개가 있으니까 5개의 상품을 얘기 드릴 수가 있겠죠.
그리고 이제 지지도를 계산해서 최소 지지도 이상인 항목만을 선택하게 되는데요.
예를 들어서 최소 지지도는 0.5라고 설정한 다음에 한번 두 번째 알고리즘에 진행을 해보겠습니다.
일단 지지도의 계산 같은 경우는 우유라는 상품부터 시작하면 전체 4개의 거래에서 몇 번 만큼의 거래가 일어난지에 대한 확률값을 계산하면 됩니다.
우유 같은 경우 4번 중에 2번을 구매했으니까 확률값이 4분의 2로 0.5가 계산되게 되고요.
양상추 같은 경우는 4번 중에 거래가 총 3번 발생했으니까 4분의 3, 0.75의 지지도를 가질 수 있습니다.
마찬가지로 기저귀와 맥주 또한 4번의 거래 중에 총 3번에서 거래가 일어난 걸 볼 수 있으니까 0.75값을 가지고요.
주스 같은 경우 4번 중에 한 번만 거래가 발생했으니까 4분의 1 값으로 0.25가 가지는 것을 볼 수 있습니다.
근데 이제 제가 설정한 최소 지지도란 값이 0.5 이상인 것만을 선택한다고 했으니까 주스 같은 경우는 이제 0.25로 0.5보다 낮으니까 제거를 해준 다음에 분석을 진행하게 되는 거죠.
그래서 단일 항목에서 이렇게 제거가 된 항목 같은 경우는 그다음 이게 항목 집단을 생성할 때 애초에 빠진 상황에서 그런 연관 규칙들을 만들게 됩니다.
그래서 이번에는 상품이 4개가 있으니까 4개에서 2개 항목 집단을 생성하는 경우의 수는 4개 중에 2개를 조합한다.
4시 2 총 6개를 생성할 수가 있고요.
그리고 여기서도 마찬가지로 지지도를 계산한 다음에 최소 지지도 이상의 항목만을 선택하게 됩니다.
예를 들어서 우유와 양상추에 대해서 지지도 계산을 진행하자면 4개의 그런 거래에서 양상추와 우유가 함께 구매한 경우는 총 1개밖에 없으니까 4분의 1 값을 가지고 우유와 기저귀 같은 경우는 이 거래번호 0번에서 그리고 거래번호 2번에서 같이 발생한 걸 볼 수 있으니까 0.5로 2분의 1 값을 가진 걸 볼 수 있습니다.
그리고 마찬가지로 남은 4개의 연관 항목에 대해서도 이렇게 분석을 진행해주고 최소 지지도 0.5 이상인 거를 선택하면 총 4개의 연관 규칙이 나왔고요.
그리고 이거를 2개뿐만 아니라 3개, 4개 그러니까 총 3개의 상품 세트에 대해서 진행하면 이런 식으로 값이 남고 실제 그래프로 그려봤을 땐 이런 식으로 지금 진행되는 것을 볼 수 있습니다.
첫 번째로는 주스가 지워졌기 때문에 우유 주스, 양상추 주스, 기저귀 주스, 주스 맥주처럼 주스가 들어가는 항목이 먼저 첫 번째로 제거가 되고 2개 집단 항목에서 제거됐던 게 우유, 양상추와 우유, 맥주니까 3개 집단에서는 우유, 양상추와 우유, 주스가 들어간 항목들이 이렇게 애초에 고려할 필요도 없이 지워지는 것을 살펴볼 수 있습니다.
이렇게 위에 예시에서는 서포트를 그런 기준으로 한번 살펴봤는데요.
여기서는 서포트 뿐만 아니라 컴퓨던스나 리프트라는 평가 지표도 함께 사용이 가능하고요.
실제로는 그런 값들이 의미하는 바가 서로 달라서 함께 살펴보면서 좀 더 좋은 규칙들을 찾는 게 중요합니다.
근데 이런 에이프리오리 알고리즘의 장점과 단점에 대해서 간단하게 살펴보면 장점 같은 경우는 원리가 되게 간단합니다.
보통 딥러닝이나 머신러닝 같은 경우 요새 블랙박스 모형이다 해가지고 내가 이렇게 알고리즘 적용해가지고 추천이 나왔는데 왜 이렇게 나오는지 사실 모르는 경우가 세반인데 이 에이프리오 같은 경우는 조금 의미가 쉽다 보니까 아, 만일 치킨하고 치킨무가 같이 나왔으면 둘은 같이 구매되는 성향이 크니까 그럼 같이 나왔구나 하는 사용자가 쉽게 이해를 하고 의미를 파악할 수 있다는 게 장점이고요.
그래가지고 유의한 연관성을 찾을 수가 있는 게 장점이죠.
근데 단점이 비록 아까처럼 빈번하지 않은 집합들을 제거하면서 규칙을 만들었음에도 불구하고 좀 연상량이 많고 속도가 많이 느리다는 단점이 있습니다.
그리고 실제 사용시에 많은 연관상품이 나타나는 단점도 있고요.
그리고 이런 연관 같은 게 보통 많이들 표현하는 상관관계가 인과관계를 의미하지는 않는다고 표현하는데 이런 연관상품들이 상관관계는 의미할 수가 있어도 실제 인과관계는 의미하지 않습니다.
그래서 아까 치킨과 치킨무 예시처럼 치킨무를 구매했기 때문에 치킨을 구매한다는 게 아니라 치킨을 구매했기 때문에 치킨무를 구매하는 것처럼 그런 인과관계에 대해서 파악하기 어렵다는 단점이 있는 게 에이프리오 알고리즘의 한계점입니다.
근데 이런 한계점이 있으면 극복하는 방법도 있겠죠.
그게 FP-Gross라는 알고리즘인데 FP-Gross 같은 경우는 그런 알고리즘의 연관규칙을 트리 형태로 그런 알고리즘에 빈번한 셋을 만듦으로써 속도 측면에서 좀 단점을 개선한 알고리즘입니다.
그래서 원리 같은 경우는 조금 비슷한데 첫 번째로는 모든 거래를 확인하여 각 아이템마다의 지지도를 계산하고 여기서 최소 지지도 이상의 아이템만을 선택하는 것은 기존과 동일합니다.
하지만 두 번째부터는 조금 달라지는데 이거는 뒤에 예시를 보면서 같이 살펴보도록 하겠습니다.
일단 첫 번째로 모든 거래를 확인하여 아이템마다의 지지도를 계산하고 최소 지지도 이상의 아이템을 선택하는 것은 에이프리오 알고리즘과 동일합니다.
그래서 여기서는 아까 주스 없어진 것처럼 주스는 없어지고 우유, 양상추, 기저귀, 맥주 총 네 가지 아이템에 대해서만 여기서 남게 되고요.
그 다음에 그런 모든 거래에서 빈도가 높은 순서대로 아이템을 순서대로 정렬하는 게 알고리즘이 바뀌게 됩니다.
그래서 첫 번째 거래 같은 경우는 우유와 기저귀, 주스를 구매했고 여기서 일단 지지도가 안 됐기 때문에 주스가 삭제되었죠.
그 다음에 빈도가 높은 순서는 우유와 기저귀를 비교해서 우유 같은 경우는 총 전체의 네 개의 거래에서 두 번 발생했고 기저귀는 네 개의 거래 중에서 세 번이 발생했는데 기저귀가 우유보다 거래가 많이 발생했으니까 순서를 정렬해서 기저귀, 우유 순서대로 정렬하게 됩니다.
그리고 두 번째나 세 번째, 네 번째 거래에 대해서도 마찬가지로 동일하게 거래가 많이 나온 순서대로 정렬하는 게 일단 에이프릴 크로스 알고리즘의 시작입니다.
그래서 이렇게 정렬한 알고리즘 아이템 순서를 토대로 그런 트리를 형성하게 되는데요.
일단 거래 순서대로 이렇게 트리를 어떻게 형성하냐면 일단은 부모노드인 루트를 중심으로 이런 아이템들을 자식노드로 그런 부모노드에 하나씩 추가해주게 됩니다.
그래서 부모노드에 기저귀와 우유란에 이렇게 아이템 셋의 거래 집단에 이렇게 추가를 해주고요.
그 다음에 이렇게 양상추처럼 새로운 아이템이 나올 경우에는 부모노드로부터 이렇게 거래를 출발하고 그렇지 않은 경우 양상추, 기저귀, 맥주, 우유처럼 앞에 양상추, 기저귀, 맥주가 기존에 거래 있는 경우 이렇게 뒷단에만 우유를 간단하게 추가해줌으로써 트리 형태를 만들 수 있습니다.
마찬가지로 양상추, 맥주 같은 경우 양상추는 나왔지만 양상추, 맥주라는 조합은 처음 나와보로 기존에 양상추에서 이렇게 노드를 확장할 수가 있겠죠.
그리고 이제 이렇게 확장한 알고리즘을 통해서 어떻게 조건부 패턴을 그러니까 연관 규칙을 찾냐면 일단 지지도가 낮은 순서대로 조건부 패턴을 생성하게 됩니다.
그래서 아래 같은 경우 거꾸로 출발하게 되는데요.
우유를 샀을 때 맥주, 기저귀, 양상추를 구매할 것이다.
우유를 샀을 때 기저귀를 구매한다.
이제 최소 값을 통해서 총 몇 번이나 발생했는지를 조건부 패턴을 하나씩 찾게 되는 거죠.
그래서 맥주를 샀을 때 양상추도 같이 구매하는 경우가 총 몇 번인지 맥주를 샀을 때 기저귀와 양상추를 구매하는 경우가 총 몇 개인지 모든 아이템 셋에서 반복하게 되고 이제 얘도 마찬가지로 이런 조건을 토대로 신뢰도와 지지도를 통해서 좋은 연관 규칙들을 찾게 됩니다.
그런데 이런 FP-Gross 같은 경우는 APRIL 알고리즘보다 훨씬 빠르게 되는데 이게 DB단을 두 번만 스캔하면 돼가지고 알고리즘 속도가 매우 빠르고요.
그리고 이전에 봤던 APRIL 알고리즘은 전체 후보 집단을 다 생성하고 지지도를 계속 계산하게 하면서 하나씩 지워갔던 반면에 얘는 일단 계속해서 아이템을 추가하기 때문에 후보 아이템 집단을 생성할 필요가 없다는 장점이 있습니다.
그리고 위와 같은 단점은 대용량이 될수록 FP-Gross도 어느 정도 한계점을 보이고 그리고 지지도 계산을 FP-Tree가 다 만들어지고 난 뒤에야 할 수 있어가지고 그런 쪽에 대한 한계점을 보겠습니다.
이제 FP-Gross에 대한 알고리즘과 한번 APRIL 알고리즘에 대한 코드를 한번 살펴보게 될 건데요.
코드 같은 경우 실습은 CAG를 해서 진행되게 되고요.
그런 관련 코드는 이제 살펴보게 되니까 여기 들어와서 일단 ID 가입하시고 진행하시면 됩니다.
그런 APRIL와 FP-Gross에 대한 알고리즘은 MLX10라는 알고리즘 통해서 진행할 수가 있게 되는데요.
한번 같이 실행을 해보면서 보도록 하겠습니다.
이제 numpy라는 패키지를 통해서 데이터셋을 그런 거래 집단을 생성해 줄 건데요.
저희가 아까 봤던 예시가 우유, 기저귀, 주스, 맥주, 양상추 거래에 대해서 만들었으니까 지금도 똑같이 이렇게 상품 집단에 대해서 한번 거래를 만들어보도록 하겠습니다.
일단 CAG을 사이트에 접속해 주신 다음에 제가 보내준 링크 T, 아카데미, 투라는 사이트에 접속해 주시면 여기 노트북 항목에 제가 만들어둔 오늘 실습자료를 미리 만들어둬서 여기에서 추천 시스템에 이어 APRIL, FP-Gross라는 노트북 들어가서 보시면 되고요.
그리고 로컬 환경이나 구글 코렙 같은 경우 사용하시는 분들은 코렙 환경창 띄운 다음에 얘는 데이터셋 따로 쓸 필요 없어가지고 바로 코드 보시면 됩니다.
그래서 코드 일단 첫 번째 shell 한번 import부터 같이 쳐보면 일단 기본적으로 import는 패키지를 불러오는 코드인데 여기서 먼저 APRIL 알고리즘과 FP-Gross가 MLXTEND라는 패키지 통해서 사용할 수 있기 때문에 얘부터 호출을 해주고요.
그리고 보통 많이 사용하는 데이터 분석 패키지인 numpy와 pandas를 호출해 주도록 하겠습니다.
이 edge 같은 경우는 이 앞에 패키지 명이 길기 때문에 간단하게 np라는 용어가 numpy를 의미하겠다는 의미고요.
마찬가지로 pd가 pandas를 의미한다는 용어입니다.
그래서 이렇게 호출한 다음에 저희 데이터셋을 생성해 주게 되는데요.
저희가 아까 봤던 게 우유, 기저귀, 주스, 맥주, 양상추, 다섯 개의 예시에 대한 데이터셋을 가졌으니까 아까 상황과 똑같이 거래에 대해서 데이터셋을 만들어 주도록 하겠습니다.
데이터셋 같은 경우는 np.array를 통해서 만들어 줄 텐데요.
일단 첫 번째로 크게 대괄호 하나 쳐준 다음에 아까 봤던 게 상품이 우유, 기저귀, 주스부터 출발했었거든요.
그래서 이렇게 데이터셋을 거래 번호마다 하나씩 생성해 주면 됩니다.
0번의 거래고요.
그리고 첫 번째 거래.
pdf 같이 다른 창에 다른 모니터나 핸드폰 같은 거에 그런 틔울 수 있으신 분은 거기서 봤던 예시 가지고 같이 쳐주시면 됩니다.
그래서 0번부터 3번의 거래까지 같이 쳐주시면 맥주 그리고 이렇게 생성해 줄 수가 있습니다.
그리고 이렇게 생성한 거를 데이터라는 변수에 저장을 해 둔 다음에 뒷부분에서 한번 사용하도록 하겠습니다.
이렇게 만든 데이터를 통해서 아까 저희가 희소행렬을 이렇게 매트릭스 형태로 거래에 대한 트랜지션 매트릭스 형태로 변형을 해줬는데요.
이거 같은 경우는 mltext에 preprocessing이라는 함수에서 트랜지션 인코더를 불러오면 그 코드를 구현할 수가 있습니다.
그래가지고 한번 패키지 호출부터 같이 시작하면 from mltext preprocessing에서 import transaction encoder를 해주고요.
그래서 transaction을 해주고 그리고 여기서 transaction encoder라는 어떤 함수를 호출해 주도록 하겠습니다.
그래서 해당 함수를 t라는 걸로 객체 명령으로 저장을 해주고요.
t에서 fit이라는 호출 명령어와 트랜스폼을 같이 사용하게 되면 아래와 같이 array 형태로 거래가 어떤 식으로 이루어졌는지를 볼 수 있는데요.
여기서 보면 각각의 row와 column이 의미하는 발을 저희가 모르기 때문에 얘를 t.columns라는 명령어를 통해서 한번 column까지 같이 만들어 주도록 하겠습니다.
t.columns는
이제 그런 트랜지션 인코더를 해가지고 얘를 트랜지션 매트릭스로 변경을 할 때 컬럼 순서를 어떻게 지금 기록하고 있는지에 대한 정보를 저장하고 있는 게 t.columns고요.
pd.dataframe은
위에 형태가 array 형태였는데 얘가 지금 형태가 array인데 얘를 pandas의 dataframe으로 변경해 주겠다는 의미입니다.
그래서 이렇게까지 한 다음에 실행을 해보면 아까는 이제 컬럼명이 없었는데 이제는 컬럼명과 인덱스 번호가 이렇게 생겨가지고 0번째 거래에는 기저귀와 우유, 주스가 구매했다는 거를 위에 정보와 똑같이 알 수가 있습니다.
한번 이 다음에 aprii 알고리즘을 사실 돌리는 거는 되게 쉽습니다.
이게 사람들이 이제 되게 똑똑한 사람들이 이미 그런 패키지를 잘 만들어 둬가지고 mltext에 frequent patterns라는 클래스에서 aprii의 함수만 호출해주면 되는데요.
저희가 def라는 dataframe을 만들었잖아요.
그래서 얘를 단순하게 넣어주고 그 다음에 최소 지지도를 몇으로 설정할지 이거를 이제 제 마음대로 0.1을 설정할 수도 있는 거고 0.5를 설정할 수도 있는 거고 예시처럼 이거 같은 경우는 이제 각자 가지고 있는 데이터셋과 도메인에 따라서 계속해서 확인해 보면서 좋은 값을 찾아주는 거는 사용자의 몫이라고 할 수 있습니다.
그래서 이렇게 돌리면 이제 이렇게 최소 지지도를 만족한 변수들이 좋은 아이템에 연관해 규칙들이라는 것을 알 수가 있습니다.
그리고 이 다음에 fp-growth에 대한 것도 한번 살펴볼 텐데요.
fp-growth 같은 경우도 이제 위에 전처리 단계는 동일합니다.
그래서 이것까지 만들어주는 건 동일한데 아까 이 함수를 여기서 fp가 아니라 아까 전에는 aprii 이렇게 df의 min support와 useColumns true로 진행했다면 여기서는 이제 aprii가 아닌 fp-growth를 이제 import 받아서 단순하게 돌려주면 됩니다.
그래서 규칙 같은 경우는 동일한 거 볼 수 있고요.
그리고 조금 차이 나는 게 속도 부분인데 위에서 보면 aprii 같은 경우는 12.6ms 시간만큼 걸린 반면에 얘 같은 경우는 4.13ms로 속도 면에서 3배 정도 훨씬 빠른 거를 볼 수가 있고 fp-growth의 장점이 이제 aprii보다 속도가 빨리 할 수 있다는 것을 살펴볼 수 있습니다.
코닥님이 질문 주셨는데 최소 지지도 같은 경우는 알고리즘 설계자가 직접 설정하는 거고 사실 이 알고리즘 같은 경우 아까 말했던 단점이 너무 크리티컬해가지고 그렇게 현업에서 많이 쓰는 것 같지는 않습니다.
그리고 보통은 이제 성능을 많이 validation set이나 이런 걸 offline matrix라는 어떤 기준을 통해서 평가를 통해서 그런 최소 지지도의 좋은 값들을 찾아나가는 건 사용자의 몫이겠죠.
이게 데이터랑 가지고 있는 추천 도메인이라든지 데이터 그리고 상황에 따라서 지지도 값이 보통 많이 다르기 때문에 어떤 지지도를 사용해야 된다라는 그런 규칙 정답 같은 건 없는 것 같습니다.
인과관계를 파악하는 추천 시스템의 연구에 대한 거는 조금 저도 정확하게는 모르겠고요.
솔직히 이 분야에 대해서는 사실 Cautious inference라는 그런 베이지한 확률 통계 기반의 분야가 따로 있습니다.
거기서는 이제 그래프라든지 같이 구매되는데 확률적으로 어떤 모습을 통해가지고 규칙을 통해서 이게 진짜 인과인지 아닌지를 판단하는 Cautious inference라는 분야가 따로 있습니다.
최소 지지도 말고 이제 아까 봤던 Confidence 여기 아까 처음에 봤던 매트릭스 3개 있잖아요.
지지도, 신뢰도, 리프트, 향상도 이 3가지를 하나씩만 쓸 수도 있지만 3가지 적절하게 같이 써가면서 비교 실험을 해가지고 좋은 연관을 찾아낼 수 있습니다.
에이프리온이나 FP-Gross는 콜드 스타트 문제를 막을 수 없나요?
신규 고객에 대한 추천은 어떻게 진행할 수 있나요?
라고 질문 드렸는데 일단 신규 고객이 어떻게 정의되냐에 따라서 조금 다른 면이 있을 수 있을 것 같은데 일단 연관 규칙을 통해가지고 상품 집단 같은 걸 만들 수 있는 거는 동의하시잖아요.
예를 들어서 치킨과 치킨물을 같이 구매한다.
아이패드와 아이패드 펜슬을 같이 구매한다.
이렇게 한다면 일단 마케팅 측면에서 오프라인에서 같이 진열하는 거는 신규 고객하고는 연관이 없을 것 같고요.
그럼 콜드 스타트와는 연관이 없을 것 같고요.
그리고 이제 이 상황에서는 콜드 스타트가 해결될 수 있겠죠.
아무것도 안 구매한 상황이라면 콜드 스타트겠지만 만일 어떤 고객이 들어왔는데 아무것도 구매하지 않은 상황에서 만일 치킨을 구매한다.
그럼 이제 이 치킨을 구매했으니까 이 치킨과 연관이 있는 치킨무, 콜라, 사이다 이런 거를 이제 같이 띄워준다든지 그리고 아이패드를 구매하면 아이패드 펜슬, 아이패드 키보드, 아이패드 그리고 커버 같은 거를 같이 보여준다거나 이런 식으로 진행을 할 수가 있겠죠.
바로바로 피드백을 통해서 아마 이런 거를 가장 잘하는 데가 아마 유튜브인 것 같아요.
유튜브 같은 경우 진짜 그런 신규 분야 갑자기 파충류 그런 영상 떠가지고 뭔가 해서 심심해서 한번 클릭해보면 연관 영상에 보면 다 파충류 관련 영상밖에 없거든요.
그런 식으로 이제 즉각적인 피드백을 가질 수 있는 그런 시스템만 구축해준다면 하나만 구매하면 콜드 스타트는 어느 정도 해결할 수가 있는 거죠.
아까 질문 주신 에이프리오리에서 신뢰도 말고 향상도나 다른 데이터 프레임 확인하려면 어떻게 하냐고 하셨을 때 일단은 코드와 같은 경우 아까 에이프리오스 신뢰도 만들 때 FPG 크로스도 똑같이 이런 식으로 만들었잖아요.
DF 넣어서 이 값을 신뢰도는 조금 낮게 조정해가면서 이런 식으로 넣어서 매트릭 다른 컨피던스 통해서 확인할 수 있더라고요.
그래서 이 기준 보면서 좋은 거 취사선택하는 그런 형식으로 이 민 스트레이셜 홀드가 컨피던스와 연관이 되어가지고 할 수 있습니다.
그래서 코드 같은 경우는 아까 이런 식으로 association이라는 규칙을 이렇게 만들었을 때 이런 식으로 association에서 룰이라는 그런 함수를 호출하고 매트릭을 여기서 컨피던스와 그리고 이 컨피던스에 대한 최소 컨피던스죠.
그거를 0.5로 설계하겠다 이렇게 볼 수 있는 거죠.
일단은 컨텐츠에 기반하고 협업 필터링 기반의 알고리즘이라기보다는 처음에 발표할 때 설명했던 것처럼 룰 기반의 알고리즘인 게 제일 정확한 표현인 것 같고요.
그리고 아까 말했듯이 좀 단점이 뚜렷해요.
APRIL이나 FPGROSS 같은 경우 일단 그런 메모리와 시간을 너무 많이 먹어요.
그게 일단 첫 번째 큰 단점이고 두 번째로는 규칙을 생성하기는 하는데 이 생성된 규칙이 굉장히 많다고 하더라고요.
그래서 실제로 적용했을 때 규칙이 너무 많으니까 막상 또 적용하기는 어려운 APRIL 같은 경우는 좀 간단하게 베이스라인 통해서 어떤 연관 있는지 그런 시각적으로 데이터세 처음 받아 봤을 때 의미 같은 거 파악할 때 사용하는 것 같고요.
그리고 실제로는 알고리즘 같은 경우는 아까 말했듯이 컨텐츠 기반과 협업 필터링 기반의 알고리즘 그리고 요새는 딥러닝 기반의 알고리즘이 성능이 좋다 보니까 해당 방법론을 적용해서 하는 게 맞는 것 같습니다.
그렇게 많이 사용하는 것 같습니다.
콜드 스타트의 신규 고객에 따라서 어떤 고객 같은 거 신규 고객에는 지지도가 이렇게 높은 거를 권하고 하는 얘기처럼 사실 추천 시스템도 적용할 때 얘가 신규 고객이냐, 기존 고객이냐 그리고 기존 고객인데 조금 열정적이게 그런 상품을 이용하는 충성 고객이냐 이렇게 고객 집단부터 나누는 거를 타겟 집단을 나누는 것부터 시작하거든요.
그래서 이제 신규 고객에는 이렇게 빈도수 높은 걸 추천하고 신규 고객이 아닌 기존 고객 같은 경우 이제 또 다시 집단을 좀 더 세분화 시켜가지고 어떤 집단에는 좀 더 초개인화의 추천 시스템 알고리즘 적용하고 이렇게 다양한 집단에 따라서 다르게 알고리즘 적용해주는 게 조금 필요합니다.
근데 이거는 지금 아까 말해준 것처럼 도메인 따라 상황이 너무 달라가지고 그 부분은 직접 추천 시스템 관련 하시는 분이라면 데이터 보면서 확인하는 게 맞는 것 같습니다.
SUMMARY
KAIST 석사과정생 김현우가 이번 추천 시스템 입문하기의 실습과 이론 발표를 맡았다.
기본적으로 과거에 사용했던 추천 시스템 알고리즘부터 협업 필터링 기반의 알고리즘, 컨텐츠 기반의 알고리즘, 딥러닝 기반의 알고리즘, 그리고 강화학습을 통해 Kaggle의 책 관련 추천 실습 데이터를 통해 실습을 진행할 것이다.
그리고 평가 함수를 통해 추천의 성능을 평가하고, 책 추천 대회 데이터를 통해 실습한다.
김현우는 KAIST 산업 및 시스템 공학과 1학기 제약 중이며, 팀 EDA 블로그와 추천 시스템 코리아 페이스북 그룹의 운영진이다.
추천 시스템 코리아 페이스북에서는 추천 시스템 관련해 가지고 그런 정보나 아니면 코드 같은 거 모르는 부분 물어보거나 그리고 최신 논문이나 튜토리얼 자료 같은 거 배포하고 있습니다.
관심 있는 분들은 여기 링크 참조해서 추천 시스템을 공부할 수 있습니다.
추천 시스템 코리아 페이스북에서는 추천 시스템 관련해 정보, 코드, 논문, 튜토리얼 자료 등 배포하고 있습니다.
관심 있는 분들은 여기 링크 참조해서 추천 시스템을 공부할 수 있습니다.
이를 통해 사용자들에게 개인화된 추천을 할 수 있습니다.
추천 시스템 코리아 페이스북은 추천 시스템 관련해 정보, 코드, 논문, 튜토리얼 자료 등을 배포하고 있습니다.
본 사이트는 관심 있는 분들이 추천 시스템을 공부할 수 있도록 도움을 줍니다.
이를 통해 사용자들에게 개인화된 추천을 할 수 있습니다.
추천 시스템은 사용자에게 상품을 제안하는 소프트웨어 도구이자 기술로, 기업과 사용자 모두에게 유 이 플랫폼에서는 사용자들이 관심 있는 아이템을 수십만 개의 풀 중에서 찾기 어려우므로 사용자에게 관심이 있는 아이템을 추천하여 매출 및 플랫폼 사용 증가를 목표로 하고 있습니다.
이를 위해 관심 있는 사용자를 정하고, 어떤 상품을 어떻게 추천할지 이해하는 과정이 필요합니다.
이를 위해 전체 사용자를 풀로 할 수도 있지만, 마케팅 팀의 입장에서는 특정 집단에 대한 추천이 더 중요합니다.
일단 유튜브 같은 경우 사용자가 10억 명이 넘고, 매초 매 분 순간순간마다 수십만 개의 아이템이 올라오기 때문에 사용자는 관심 있는 아이템을 찾기가 힘들고, 기업도 사용자가 좋아하는 아이템을 제안해서 매출과 플랫폼 사용을 늘리기 위해 추천 시스템을 사용합니다.
이를 위해 사용자를 정하고, 어떤 상품을 어떻게 추천할지 이해하는 과정이 필요합니다.
전체 사용자를 풀로 할 수도 있지만, 마케팅 팀의 입장에서는 특정 집단에 대한 추천이 더 중요합니다.
당근마켓은 이러한 추 당근마켓과 카카오는 사용자들이 상품과 함께 봤거나 유사한 글을 통해 추천해주는 시스템이다.
또한, 유튜브는 실시간으로 딥러닝 모델을 활용해 추천해주고 있으며, 파레트와 롱테일의 법칙은 상위 20%의 가치가 전체 가치의 80%를 창출한다는 것을 의미한다.
당근마켓과 카카오는 사용자들이 상품과 함께 봤거나 유사한 글을 통해 추천해주는 시스템을 사용하고 있다.
유튜브는 실시간으로 딥러닝 모델을 활용해 추천하고 있으며, 파레트와 롱테일의 법칙은 상위 20%의 가치가 전체 가치의 80%를 창출한다는 것을 의미한다.
80%의 완두콩이 20%의 완두로 발화되는 현상 때문에 기업과 다른 분야에서는 80%의 매출이 20%의 VIP 고객들로부터 나오고 있다는 것이 발견되었다.
그러나 인터넷의 발전으로 기존의 파레트의 법칙과 반대되는 롱테일의 법칙이 적용되는 추천 시스템이 도입되고 있다.
이 롱테일의 법칙은 하위 80%가 상위 20%의 가치보다 크다는 법칙이다.
이는 온라인에서 UI, UX를 통해 인터넷의 발전에 따라 하위 80%가 더 많은 가치를 창출할 수 있도록 도와준다는 것을 의미한다.
예를 들어 아마존과 넷플릭스와 같은 기업이 이런 추천 시스템을 적용하여 50% 이상의 매출을 창출하고 있다.
두 번째로 얼마나 빈번하게 구매되는가.
과거에 사람들이 추천 시스템에 대한 관심을 가지고 시작해 2006년부터 2009년까지 넷플릭스의 추천 대회를 통해 협업 필터링 방법이 사용되기 시작했습니다.
이후 빅데이터가 발달하면서 단순한 모델로는 추천이 힘들어지며, 딥러닝과 강화학습, RNN 등의 다양한 딥러닝 알고리즘이 초개인화 추천 시스템으로 사용되고 있습니다.
에이프리오리 연관 상품 추천부터 협업 필터링, FP그로스, 매트릭스 팩토라이제이션, 워드투백을 이용한 추천 시스템이 사용되고 있습니다.
룰 기반의 모델로서 연관 분석은 두 가지 형태로 정의되는데 같이 구매되는 정도와 빈번하게 구매되는 정도를 측정합니다.
첫 번째는 두 개 상품을 같이 구매하는 것이고, 두 번째는 A 상품을 구매하는 조건이 있어야 B 상품을 구매하는 것을 의미합니다.
월마트의 맥주와 기저귀 사례는 사람들이 맥주를 구매할 때 기저귀를 같이 구매하는 경향이 있고, 이를 통해 매출이 상승하는 것을 밝혔습니다.
연관 분석을 위해 서포트(지지도), 컨피던스(신뢰도), 리프트(향상도) 지표를 사용하여 모든 경우의 수를 나열하고 그 나열 된 경우의 수를 탐색해 지지도, 신뢰도, 향상도의 규칙들이 높은 것을 찾아내는 방식으로 연관 분석을 진행합니다.
2학년 때 고등학교 수학으로 배운 순열과 조합을 통해 네 개의 상품을 구매하는 경우의 수를 계산할 수 있다.
한 개만 구매하는 경우 4가지, 두 개를 선택하는 경우 6가지, 세 가지를 선택하는 경우 4가지, 네 개를 선택하는 경우 1가지의 경우의 수가 있어 총 15개의 규칙이 만들어진다.
그러나 아이템의 수가 증가할수록 규칙의 수도 기하급수적으로 증가하기 때문에 연관 분석은 조금 크리티컬한 문제점이 있다.
빈번하지 않은 아이템 셋을 제거하고 빈번한 아이템 셋만을 남기는 에이프리오 알고리즘은 아이템 셋을 하나씩 생성하고, 빈번하지 않은 아이템 셋은 제거하며, 빈번한 아이템 셋을 제거해주는 것이 기본적인 아이디어입니다.
에이프리오 알고리즘은 빈번하지 않은 아이템 셋을 제거하고 빈번한 아이템 셋만 남기는 것이 기본 아이디어로, 아이템 셋을 하나씩 생성하고, 빈번하지 않은 아이템 셋은 제거하며, 빈번한 아이템 셋을 제거해주는 것이 기본적인 아이디어입니다.
이는 지지도가 높은 아이템 셋만 남기고 나머지는 제거하여 빈번하지 않은 아이템 셋을 제거하는 것을 목적으로 합니다.
에이프리오 알고리즘은 빈번하지 않은 아이템 셋을 제거하고 빈번한 아이템 셋만 남기는 것이 기본 아이디어로, 아이템 셋을 하나씩 생성하고, 빈번하지 않은 아이템 셋은 제거하며, 빈번한 아이템 셋을 제거해주는 것이 기본적인 아이디어입니다.
이는 지지도가 높은 아이템 셋만 남기고 나머지는 제거하여 빈번하지 않은
APRIL 알고리즘은 사용자가 설정한 최소 지지도를 기준으로 항목 집단을 생성하고, 이 기준을 만족하는 항목만 선택하는 방식으로 작동합니다.
간단히 말해서 우선 데이터를 트랜잭션 매트릭스로 변형한 후, 단일 항목 집단을 선택한 다음 지지도를 계산하여 최소 지지도 이상인 항목만 선택합니다.
이후 선택된 항목들을 대상으로 2개 집단, 3개 집단, 4개 집단으로 만들며 최소 지지도 이상인 항목만 선택하고, 2, 3과 연관된 상품들은 DB에서 탐색하지 않도록 합니다.
인플루엔시 피드백은 비함시적인 피드백이라고 할 수 있으며, 사용자가 상품을 구매했는데 만족하지 않았는지 확인하기 위해 평점 혹은 좋아요/싫어요를 남길 수 있게 해주는 것이다.
이러한 데이터를 인플루엔시 피드백이라고 하고, 스팔스 매트릭스 형태로 구성하여 알고리즘으로 진행한다.
최소 지지도를 계산하여 최소 지지도 이상인 항목만 선택하며, 각 상품에 대한 확률값을 계산하여 지지도를 계산한다.
기저귀, 맥주, 주스, 우유 사이의 관계를 분석하기 위해 최소 지지도 0.5 이상의 항목만을 선택하여 그래프로 그려보면, 4개의 상품 세트에 대해 총 4개의 연관 규칙이 나오게 됩니다.
총 4개의 거래 중에 기저귀와 맥주는 3번에서 거래가 발생하여 0.75값을 가지고, 주스는 한 번만 거래가 발생하여 0.25값을 가집니다.
이렇게 항목들의 연관 규칙을 분석하여 최소 지지도 0.5 이상인 것만 선택하면, 총 4개의 연관 규칙이 나오게 됩니다.
에이프리오 알고리즘은 원리가 간단하고 유의한 연관성을 찾을 수 있는 장점이 있지만, 연관상품이 많이 나타나는 단점과 인과관계를 의미하지 않는 한계가 있습니다.
초기에는 주스가 제거되고 우유, 양상추, 기저귀 주스, 주스 맥주가 제거되었습니다.
극복하는 방법도 있기 때문에 서포트, 컴퓨던스, 리프트를 사용하여 값을 파악하고 좋은 규칙을 찾아낼 수 있습니다.
FP-Gross는 기존의 연관규칙 알고리즘을 트리 형태로 개선한 알고리즘으로, 속도 측면에서 단점을 개선하였다.
첫 번째로 거래를 확인하고 아이템별 지지도를 계산하고 최소 지지도 이상의 아이템만 선택하는 것은 에이프리오 알고리즘과 동일하다.
두 번째부터는 빈도가 높은 순서대로 아이템을 정렬하고, 그 아이템 순서를 토대로 트리를 형성한다.
이렇게 정렬한 알고리즘 아이템 순서를 토대로 부모노드를 중심으로 자식노드로 아이템을 추가하는 것이 FP-Gross의 시작이다.
FP-Gross 알고리즘은 기존 트리 형태를 확장해서 새로운 아이템을 추가하거나 조건부 패턴을 찾아내는데 사용됩니다.
이는 지지도와 신뢰도를 계산하여 좋은 연관 규칙을 찾아내는데 도움이 됩니다.
그리고 빠르게 실행되는 장점이 있지만 대용량의 데이터에 대해서는 한계가 있습니다.
그러므로 이번에는 ID 가입 후 APRIL과 FP-Gross 알고리즘을 MLX10 통해 실행할 수 있습니다.
그리고 상품 집단을 생성하기 위해 numpy 패키지를 사용합니다.
접속한 사이트에서 제공하는 노트북에서 추천 시스템인 APRIL, FP-Gross 노트북을 보면서 실행할 수 있습니다.
그리고 패키지를 호출하고 데이터셋을 생성해 데이터 분석 패키지인 numpy와 pandas를 통해 우유, 기저귀, 주스, 맥주, 양상추로 구성된 데이터셋을 만들어 줍니다.
데이터셋을 거래 번호마다 하나씩 생성하고, 거래를 트랜지션 매트릭스 형태로 변형하고, 트랜스폼과 피트 함수를 사용해 배열 형태로 보고, 그에 따라 컬럼명과 인덱스 번호를 생성하고, pandas 데이터프레임 형태로 변경하여 주면 aprii 알고리즘을 돌릴 수 있다.
MLText에서 패키지를 잘 만들어 두고, Aprii의 함수를 호출하면 됩니다.
사용자는 자신의 데이터셋과 도메인에 따라 최소 지지도를 몇으로 설정할 수 있습니다.
Aprii로 돌리면 좋은 아이템과 연관한 규칙들을 찾을 수 있고, Fp-growth로 돌리면 속도가 빠릅니다.
그리고 최소 지지도의 좋은 값을 찾아나가는 것은 사용자의 몫입니다.
그럼 치킨과 치킨물을 같이 추천해주는 추천 시스템을 만들 수 있겠죠.
데이터 분석을 통해 인과관계를 파악하는 추천 시스템 연구는 베이지한 통계 기반의 Cautious Inference 분야로 나뉘어져 있습니다.
지지도, 신뢰도, 리프트, 향상도를 같이 쓰고 비교 실험을 통해 좋은 연관을 찾아낼 수 있습니다.
신규 고객에 대한 추천은 정의에 따라 다를 수 있으며, 예를 들어 치킨과 치킨물을 같이 구매한다는 연관 규칙을 통해 추천 시스템을 만들 수 있습니다.
이렇게 추천 시스템을 통해 콜드 스타트 문제를 해결할 수 있습니다.
구매한 치킨에 연관된 치킨무, 콜라, 사이다 등의 관련 상품을 함께 보여주고, 아이패드 구매 시 펜슬, 키보드, 커버 등 관련 상품을 보여주는 것이 좋다.
이러한 즉각적인 피드백은 유튜브가 가장 잘하는 것 같다.
에이프리오리에서 신뢰도를 확인하기 위해 FPG 크로스, DF 등을 이용하고 매트릭, 컨피던스 등을 통해 좋은 거를 취사하는 것이 가능하다.
코드는 association 규칙을 만들고 함수를 호출하고 매트릭을 통해 컨피던스를 확인할 수 있다.
이는 룰 기반의 알고리즘이며, 메모리와 시간이 많이 들어간다는 단점이 있다.
APRIL 같은 경우는 시각적으로 데이터를 분석하기 위한 기본 라인을 만들고, 추천 시스템은 신규 고객과 기존 고객을 구분하고 다양한 상황별 알고리즘을 적용하여 초개인화된 추천 시스템을 만들어 내는 것이 중요하다.
이것은 도메인마다 다르기 때문에, 데이터를 보면서 확인하는 것이 좋다.