포스팅 개요
이번 포스팅은 추천 시스템(recommedation system)에 대해서 알아봅니다.
또한, 추천 시스템에는 컨텐츠 기반 필터링(content based filtering)과 협력 필터링(collaborative filtering)이 있는데요.
위와 같은 추천 시스템과 그 적용 방법에 대해서 포스팅을 하겠습니다.
추천 시스템(recommendation system)포스팅은 몇 번을 거친 시리즈 형태로 포스팅이 주기적으로 올라갈 예정입니다.
참고한 자료
- https://www.kaggle.com/rounakbanik/movie-recommender-systems
- https://www.kaggle.com/ibtesama/getting-started-with-a-movie-recommendation-system
- https://wikidocs.net/5053
- https://medium.com/towards-artificial-intelligence/content-based-recommender-system-4db1b3de03e7
- https://www.youtube.com/watch?v=ZspR5PZemcs&list=PLU1prrdmLIpaGw0neztIByvshB9I7l6-f&index=11
위 자료 외에 자료는 각종 구글링에서 나온 자료를 참고하였습니다.
포스팅 본문
왜 추천 시스템이 중요한가? - Why use recommendation system?
먼저 왜 추천 시스템이 중요한지 알아보아야 합니다. 추천 시스템. 뭔가 그럴듯 한 말입니다.
제가 개인적으로 느끼는 추천 시스템은 잘만 만들어진다면 친사용자 서비스이며 동시에 친기업 서비스가 될 수 있는 정말 강력한 시스템입니다.
추천 시스템(recommendation system)은 사용자의 취향을 파악해야합니다. 그리고 취향에 다라 상품 등을 추천해줍니다. 그리고 사용자는 해당 상품을 구매할 확률이 높아지죠. 그렇기 때문에 친사용자이며 동시에 친기업 서비스가 될 수 있는 것입니다.
추천 시스템의 무서운점은 내가 몰랐던 취향도 추천해줍니다. 대표적으로 유튜브 추천 시스템(Youtube recommendation system)과 넷플릭스 추천 시스템(netflix recommendation system)이 그러하죠.
유튜브를 보다보면 내가 몰랐던 흥미로운 동영상을 추천해줍니다. 추천 시스템을 공부하고 있는 입장으로 그런 것을 볼 때마다 소름이 돋더라구요.
이러한 추천 시스템을 경험한 사용자는 높은 확률로 충성 고객이 될 수 있습니다. 그리고 사용자 유입도 많아지겠죠. 그러면 더 많은 데이터가 쌓이게 되고 더욱 견고한 추천 서비스가 될 수 있습니다.
추천 시스템의 기본 유형
추천 시스템의 기본은 크게 콘텐츠 기반 필터링(content based filtering) 방식과 협업 필터링(collaborative filtering) 방식이 있습니다.
더 나아가서는 딥러닝(deep learning) 등을 활용한 추천 방법과 하이브리드(Hybrid) 방법도 있지만, 기본적인 것은 위 2개입니다.
또한, 협업 필터링(collaborative filtering)은 또 다시 메모리 기반(memory based)(혹은 최근접 이웃 기반 nearest neighbor collaborative filtering) 협업 필터링과 잠재 요인(latent factor) collaborative filtering으로 나뉘어집니다.
초반에는 콘텐츠 기반 필터링(content based filtering)을 많이 사용했다고 합니다. 하지만 넷플릭스(netflix) 사례 이후 협업 필터링을 많이 사용하게 되었다고 합니다. 특히 latent factor collaborative filtering을 많이 사용하게 되었는데요. 이 잠재요인을 위해 행렬 분해(matrix factorization)을 사용했습니다.
콘텐츠 기반 필터링(content based filtering)
콘텐츠 기반 필터링 방식은 사용자가 특정 아이템을 선호하는 경우 그 아이템과 비슷한 콘텐츠를 가진 다른 아이템을 추천해주는 방식입니다.
굉장히 단순한 아이디어입니다.
예를 들어 사용자 A가 ItemA에 굉장히 높은 평점을 주었는데 그 Item이 액션 영화이며 '이수진' 이라는 감독이었으면
'이수진'감독의 다른 액션 영화를 추천해주는 것입니다.
그렇기 때문에 잘 사용하지 않는 방법입니다. 예전에는 많이 사용했던 방법이라고 합니다.
협업 필터링 - nearest neighbor based collaborative filtering
협업 필터링(collaborative filtering)에는 위에서도 말씀드렸지만 최근접 이웃 기반(nearest neighbor based collaborative filtering)과 잠재 요인(latent factor based collaborative filtering) 협업 필터링이 있다고 말씀드렸습니다.
이번 포스팅에서는 최근접 이웃 기반 nearest neighbor collaborative filtering에 대해서 알아보고 다음 포스팅에서 잠재 요인 collaborative filtering에 대해서 포스팅을 하겠습니다.
우리가 살아가는 실 생황에서 새로운 영화(예를 들어 최근에 나온 포드 v 페라리)가 나오면 다른 사람들의 평점이나 평가를 들어본 뒤 영화를 선택하는 경우가 대부분입니다. (그냥 봤다가 재미없으면 시간 낭비, 돈 낭비이기 때문이죠)
이 처럼 사용자가 아이템에 매긴 평점, 상품 구매 이력 등의 사용자 행동 양식(user behavior)를 기반으로 추천 해주는 것이 collaborative filtering 입니다.
그 중 최근접 이웃 기반(nearest neighbor collaborative filtering)은 사용자-아이템 행렬에서 사용자가 아직 평가하지 않은 아이템을 예측하는 것이 목표입니다.
위 그림처럼 예를들어 User2가 아직 ItemC에 대해 평가를 내리지 않았으니 이를 어떻게 평가할 지 예측하는 것입니다.
이처럼 nearest neighbor 기반 협업 필터링에서는 사용자-아이템 평점 행렬과 같은 모습을 가지고 있어야합니다. 따라서 column은 Item이 되어야하고 row는 user가 되어야 하는 듯한 모습을 가지고 있어야합니다.
그렇기 때문에 위 그림의 왼쪽 사진과 같이 데이터가 주어지면 오른쪽과 같이 데이터를 변경해주어야 합니다.
이러한 변경 방법은 Python pandas에서 pivot table로 지원해줍니다.
그리고 저런 모습은 공간 낭비가 됩니다. 왜냐하면 데이터가 굉장히 Sparse하기 때문이죠. 지금이야 Item이 몇 개 없지만 유튜브나 넷플릭스 같은 서비스에서는 Item이 수만개 ~ 수억개가 될 것입니다. 사용자가 이러한 동영상을 다 봤을리가 없죠.
이러한 최근접 이웃 기반(nearest neighbor based collaborative filtering)은 또 2가지로 나뉘어집니다.
- 사용자 기반 : 비슷한 고객들이 ~한 Item을 소비했다
- 아이템 기반 : ~한 Item을 소비한 고객들은 다음과 같은 상품도 구매했다
사용자 기반의 협업 필터링(user based collaborative filtering)은 아래와 같은 모습을 가지고 있을겁니다.
즉, User1과 User2는 ItemA ~ C까지의 평점이 비슷하기 떄문에 비슷하다~ 라고 생각하는 것이죠.
아이템 기반 협업 펄터링(Item based collaborative filtering)은 아래와 같습니다.
아까와 다르게 item - user 행렬을 가지고 있습니다.
ItemA와 ItemB는 비슷한 평점 분포를 가지고 있습니다. 그래서 ItemA와 ItemB는 서로 유사하다고 하는 것입니다.
그래서 User4에게 ItemA을 추천해주는 것이죠!
일반적으로 사용자 기반 협업 필터링(user based collaborative filtering)보다 아이템 기반 협업 필터링(item based collaborative filtering)이 좀 더 정확도가 높다고 합니다.
그 이유는 대체적으로 생각하는 것이 비슷한 상품을 좋아한다고 취향이 비슷하지 아니니까~ 라고 많이들 말씀하십니다.
그래서 nearest neighbor collaborative filtering을 사용할 때는 아이템 기반 협업 필터링을 많이 사용한다고 합니다.
이번 포스팅에서는 추천 시스템에 대한 개요와 기본적인 방법(content based filtering, memory based collaborative filtering)에 대해서 알아보았습니다.
다음 포스팅에서는 협업 필터링(collaborative filtering) 중 잠재 요인 협업 필터링(latent factor collaborative filtering)에 대해서 알아보겠습니다.
저에게 연락을 주시고 싶으신 것이 있으시다면
- Linkedin : https://www.linkedin.com/in/lsjsj92/
- github : https://github.com/lsjsj92
- 블로그 댓글 또는 방명록
으로 연락주시면 감사하겠습니다.