인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

Abraham님의 프로필 이미지
Abraham

작성한 질문수

[개정판] 파이썬 머신러닝 완벽 가이드

추천 Summary

실시간 추천시스템 구현방법 문의

작성

·

1.1K

0

안녕하세요. 강사님.

원리를 바닥부터 설명해주셔서 추천시스템의 본질을 이해하는데 큰 도움을 받았습니다.

강의에서는 추론 대상이 되는 유저가 남김 평점 데이터를 포함하여 행렬 분해를 하고 학습해서 안 본 영화의 평점을 예상합니다.

그런데 넷플릭스 같은 추천 서비스는 유저가 가입하자마자 자기가 본 영화에 평점을 남기면 즉시 영화를 추천해 주는데, 이것은 어떻게 하는 것인지요?

잠재 요인 기반 협업 필터링을 이용한다면, 유저가 데이터를 입력하자마자 기존 데이터에 추가한 뒤 새롭게 matrix를 분해해서 다시 학습해야 하고 이는 시간이 너무 오래 걸리기에 불가능한 방법으로 보입니다.

그리고 아이템 기반 협업 필터링을 이용한다고 해도 새로운 데이터를 추가해서 다시 학습하면 전체 코사인 유사도가 이전과 달라지고 예상 평점도 달라집니다.

('9.2 아이템 기반 인접 이웃 협업 필터링 실습' 강의에서 영화 데이터의 user 수를 다르게 해서(한 쪽은 모든 유저, 다른 한 쪽은 70번까지 유저 데이터만 이용) 영화 간에 코사인 유사도를 비교해보니 코사인 유사도가 다르게 나오는데, 이 때 아이템 간의 유사도가 다르게 나오는 것이 맞지요?)

신규 유저가 입력한 raw한 평점 데이터 값을 이미 만든 모델에 inference해서 결과값을 받는 웹어플리케이션을 만들어 보고 싶은데, 위 이유 때문에 어떻게 해야할지 감이 안 잡힙니다.

혹시 강의 후반부에서 다뤄주실까 하고 완강했으나 해당 내용은 언급되지 않아 직접 문의드립니다.

감사합니다.

답변 1

2

권 철민님의 프로필 이미지
권 철민
지식공유자

안녕하십니까,

해당 사항은 추천 시스템을 구현할 시 고려 해야할 중요 사항중에 하나입니다.

일단 cold start 이슈 부터 말씀 드리면 협업 필터링의 경우 사용자의 평점 데이터가 없으면 추천을 만들수가 없습니다. 어느 정도 기존 평점 데이터가 쌓이지 않으면,  추천 데이터를 성능이 좋지는 않습니다.

또한 일반적으로 협업 필터링은 실시간 보다는 배치(일간/주간)에 한번씩 돌려서 만듭니다.

먼저 사용자 평점 데이터가 없는 경우 cold start 문제를 해결하기 위해서 contents 기반 필터링이나, 사용자 프로파일 정보를 활용합니다.

예를 들어 (제 개인적인 생각입니다만) 넷플릭스는 사용자가 처음 가입하는경우 일단 넷플릭스 오리지널(넷플릭스 자체 제작) 작품을 최우선 추천합니다(이건, 협업 필터링을 해도 넷플릭스 오리지널을 먼저 추천하는것 같습니다. 즉 넷플릭스 오리지널의 가중치가 상당히 높습니다)

두번째로 나이대별, 성별대 등으로 인기가 있을 만한 작품을 우선 순위로 정해서 이 순으로 추천해 줍니다.

세번째로 최신 인기 있을 만한 작품들을 Random하게 추천해 줍니다. 이 중에서 사용자가 미리보기등을 선택한다든가 등의 정보를 취합해서 사용자 취향을 파악하는데 사용합니다.

요약드리면 협업 필터링만 사용하지 않습니다. 인기작품, 회사에서 미는(?) 작품, 비슷한 사용자 취향에 따른 우선 순위 작품등, 사전에 정해진 추천 로직을 함께 사용합니다. 때문에 실시간으로  추천이 될 수 있습니다.(협업필터링(배치), 사전에 정해진 추천로직(실시간))

협업 필터링과 이 사전에 정해진 추천 로직을 어느 정도 가중치를 가지고 추천하는 지도 좋은 추천 시스템을 만드는 기준이 될 수 있습니다.

감사합니다.

Abraham님의 프로필 이미지
Abraham

작성한 질문수

질문하기