다섯 번째 프로젝트
기간 : 2021.07.02 ~ 2021.07.09
언어 : Python
패키지 : Scikit-learn, GENSIM(Word2Vec, TF-IDF), Selenium, Pandas, Maplotlib, WordCloud
툴 : PyCharm, Jupyter Notebook
영화 리뷰 기반으로 추천시스템을 같이 진행을 했다. 새로운 프로젝트를 하려고 했으나 생각보다 자료 모으기가 쉽지 않았다. 원래는 보드게임 후기를 모으려고 했으나 데이터가 너무 정제되지 않았다. 인터파크나 티켓팅하는 사이트에서 뮤지컬 후기를 긁어오려고 했으나 도배도 많았고, 알바들이 너무 많아서 포기했다. 네이버 검색을 하려고 했으나 뮤지컬의 경우 책 제목이 중간중간 있어서 일일이 또 처리를 해야 해서 병원 후기를 기반으로 한 병원 추천시스템을 진행하기로 했다.
데이터 크롤링 -> 데이터 전처리 -> 추천 시스템 -> GUI 순으로 프로젝트가 진행 됐으나 앞에 부분은 계속 반복되는 것 같아서 이번에 추천시스템에 대한 생각을 정리해보고자 한다.
협업 필터링
- 취향이 비슷한 사람끼리 그룹화해서 추천하는 방식이다. (예를 들어서 20~30대 남성, 서울 중구 지역에 사는 사람들)
- 단점은 처음 사용하는 이용자거나 새로 나온 상품을 추천하기 어렵다.
콘텐츠 기반 필터링
- 이용자가 소비한 콘텐츠를 기준으로 유사한 특성을 가진 콘텐츠를 추천한다.
- 단점은 다양성이 떨어진다. (이전에 진중권 교수가 얘기했던 확증편향 문제가 생긴다.)
분명 콘텐츠는 많은 것 같은데 또 막상 뒤적거려보면 볼게 없는 넷플릭스. 예전에 넷플릭스 추천시스템을 검색해봤을 때 수천개의 데이터를 가지고 카테고리를 나누고 각각 가중치를 곱해서 복잡하게 만들어졌다고 하는데 잘 모르겠다...
우선 플랫폼은 유저가 더욱 오래 사용해야 돈을 버는 구조인데, 이런 식으로 갑자기 볼 콘텐츠가 사라지면 이탈률이 커져서 플랫폼 자체적으로 손해다. 그래서 이들을 붙잡으려고 콘텐츠를 추천한다. 하지만 너무 유사한 콘텐츠를 추천하게 되면 확증편향 문제는 물론, 사람들이 질리게 되는 단점이 있는 것 같다.
유튜브의 알 수 없는 알고리즘. 내가 평상시에 보고 있던 콘텐츠도 아니고, 관심을 가지고 있던 콘텐츠도 아닌데 왜 갑자기 뜨는 것일까? 심지어 오늘 어제 영상도 아닌 몇 개월, 몇 년 전 영상이 추천이 된다?
나도 마케팅을 하려고 하는 사람이다 보니, 유튜브 알고리즘을 이해하려고 많은 분석과 시도를 해봤다. 조회수 100만, 200만, 300만 넘는 영상을 여러 개 보유하고 있어서 탐색기능에 대해서는 어느정도 이해를 했다. 하지만 아직도 나를 한 번도 보지 않았던 영상으로 이끄는 알고리즘에 대해서는 분석이 조금 필요하다.
우선 구글과 유튜브는 어느정도 연동(?)이 되어있어서, 구글에서 트래픽이 증가하면 유튜브에서도 어느정도 추천되는 모양이다. 예전에 빅맥송 오디션이 있었는데, 구글에서 검색량이 많아지자 유튜브에서도 이전 영상들이 다시 노출되는 현상이 있었다.
유튜브 알고리즘을 따라가려면 이용자의 개인 데이터, 노출 클릭률, 영상시청지속시간, 다음 화면의 클릭 유무 등 엄청나게 다양한 데이터가 필요하겠지만 이는 불가능하기 때문에, 간이 추천시스템을 만드려고 생각을 했다.
우선 우리가 했던 프로젝트는, 후기를 기반으로 TF-IDF로 각 단어의 가중치를 줘서 얼마나 자주 나오는지를 비교하여 코사인 유사도를 활용하여 영화를 추천했다. 그렇다면 코사인 유사도를 구하는 식에서 reverse = False를 할 경우에 정 반대의 영화를 추천하겠다는 생각이 들었다.
정반대의 영화의 경우 사용자가 관심이 없던 영화일 수도 있고, 아니면 한 번도 보지 않았던 장르의 영화일 수도 있다. 총 9개의 영화를 보여줄 때 6개는 관련성 있고, 2개는 중간 정도, 1개는 전혀 관련 없는 영화를 보여주면서 노출클릭률을 살펴본다. log.txt 파일에 데이터를 담아서 관련성 있는 영화를 클릭했을 때는 영향을 주지 않고, 총 9개의 영화를 다시 새로고침했을 때에만 점차 관련 없는 영화가 나오는 값을 줄여나간다. (-1 ~1 사이면 , -0.9 -0.8 -0.7 이런 식으로...)
랜덤으로 계속 영화가 나오기 때문에 이것도 정확하지는 않지만, 어떻게 하면 편향성을 줄이면서 플랫폼에 이용자를 더 오래 잡게 할 수 있을지에 대해서 계속 고민해야 할 것 같다.
'도전하자. 프로젝트' 카테고리의 다른 글
5-3 파이썬 팀프로젝트 PyQt5로 간단 GUI 프로그램 만들기 (자동완성 기능) (2) | 2021.08.14 |
---|---|
5-2 파이썬 팀프로젝트 추천시스템 (자연어 NLP / TF-IDF, Word2Vec) (0) | 2021.08.13 |
4-3 파이썬 팀프로젝트 CNN 카테고리 분류 모델 학습 및 평가 (0) | 2021.08.11 |
4-2 파이썬 팀프로젝트 CNN 카테고리 분류 - 데이터 크롤링 및 전처리 (0) | 2021.08.10 |
4-1 파이썬 팀프로젝트 CNN 상품 카테고리 분류 intro (셀리니움 vs BS4) (0) | 2021.08.10 |