본문 바로가기
CS/MachineLearning

추천이 아닌 '시스템'에 방점을 둘 것 - 추천 시스템 입문

by Diligejy 2023. 6. 11.

 

그동안 데이터 분석 실무를 해오면서 선호하지 않는 업무 중 하나가 추천 시스템이었다.

 

그냥 느낌적인 느낌으로 추천 시스템이 나와 잘 맞지 않기도 했고, 추천 시스템을 연구하고 개발하면서 성능을 개선한다고 해도, 비즈니스에 도움이 되는지 확신할 수 없었기 때문이다. 일했던 곳의 핵심 솔루션이 아니었던 것도 한 몫 했던 것 같다. 그래서 스터디에 참여하거나 대략적인 내용은 파악했지만, 추천 시스템에 열중하진 않았다.

 

이 책을 읽으며 이 분들도 나와 같지 않을까? 그런 생각을 했다. 

 

추천 시스템을 연구하고 실무를 하시고 책까지 내신 분들에게 무슨 말이냐 할 수 있겠지만, 이 책의 저자들이 1 ~ 3장을 '추천' 시스템 코드가 아닌 전반적인 추천 '시스템' 에 대해 설명하는 걸 보고 그런 생각을 했다.

 

추천 시스템은 비즈니스 시스템을 구성하는 요소들 중 하나일 뿐이다. 개발자 입장에서는 당연히 최신 알고리즘과 더 좋은 컴퓨팅 파워를 사용해서 모델 성능을 개선하는게 목표이겠지만, 비즈니스 전략 차원에서 바라보면 그건 전술 차원에도 못 미칠 수도 있다. 

 

'추천'보다는 '시스템'에 집중해야 하는 이유다.

 

우선 서비스가 탄탄하고 데이터가 탄탄해야 추천을 하던지 말던지 할게 아닌가.

 

이 책의 저자들도 그래서 처음부터 협업 필터링이 뭔지 컨텐츠 기반 필터링이 뭔지 알고리즘부터 설명하는 게 아니라 전반적인 큰 그림을 그려주는 데 세 장에 걸쳐 서술한다. 그리고 추천시스템을 통해 만들고자 하는 비즈니스 목표가 구체적이고 명확한지 살펴보고, 추천 시스템을 만드는데 필요한 로그 시스템이나 UI/UX를 점검하고, 사용자 행동 데이터를 분석하라고 조언한다. 

 

마치 기본적인 수학 개념을 익히지 않고 다항함수 미적분의 공식만 깔짝 익혀서는 수학실력을 제대로 쌓을 수 없듯, 기본적인 제품의 체력도 갖추지 않은 채 추천 시스템이라는 기능만 붙여서는 성과를 내기 어렵다고 생각한다. 

 

이 책은 추천시스템보다 기본기를 강조하면서, 실제 추천시스템을 구성할 때 생길 수 있는 여러 문제들을 실제로 경험한 사람들의 진한 경험을 전해준다. 

 

마지막으로 코드를 모범이 될만큼 깔끔하게 잘 짜놓았다는게 인상적이었다. 실무하면서 이렇게 깨끗하게 짤 수는 없겠지만, 시니어들의 코드라 생각하고 필사해보면 나중에 팀 작업 할 때 컨벤션 만드는데도 도움이 될 듯 하다. 

 

밑줄긋기 

 

p.25~26

콘텐츠 정보보다는 인터랙션 데이터가 실시간으로 업데이트됩니다. 따라서 후자의 인터랙션 데이터를 사용한 협업 필터링이 사용자의 기호를 더 반영하여 클릭이나 구매를 유도할 수 있는 추천 방법이 되는 경향이 있습니다. 한편 신규 사용자나 신규 아이템은 행동 이력 데이터가 없으므로 전자의 콘텐츠 정보를 사용한 컨텐츠 기반 필터링으로 추천하는 경우가 많습니다. 신규 사용자나 신규 아이템 데이터가 적어 추천이 어려워지는 것을 콜드 스타트 문제(cold start problem)라 부르며 실제로도 많이 직면합니다.

 

p.27

해리포터 문제(Harry Porter Problem)라 불리는 문제가 있습니다. 특정 시기에 많은 사람이 해리포터 서적을 다른 아이템과 함께 구입함에 따라 모든 아이템의 추천 아이템으로 항상 해리포터가 추천되었습니다. 이렇듯 인기 아이템의 영향을 제거해야 할 경우도 있습니다. 

 

p.28

사용자 행동 이력을 기반으로 추천하는 방법 중에서도 열람 이력을 그대로 표시하는 추천은 구현 비용이 적은 방법입니다. 아마존이나 유튜브에서도 과거에 열람한 아이템이 제시되는 경우가 있습니다. 이는 구현 비용이 낮은 것에 비해 효과가 높습니다. 특히 동영상이나 음악 사이트 등 한 번 열람한 것을 다시 열람하는 경우가 많은 사이트에서 효과적입니다. 그리고 전자상거래 사이트와 같이 아이템을 열람한 뒤 어느 정도 시간이 지난 후에 구입하는 서비스에서도 리마인더 기능으로 효과적입니다. 

 

p.31

검색과 추천은 모두 '많은 아이템에서 가치 있는 아이템을 선택'하는 것이지만 사용자는 이 둘을 다른 목적으로 사용하며 'Pull  타입'인지 'Push 타입'인지로 설명되기도 합니다.

 

검색 시스템과 추천 시스템 비교

  검색 시스템 추천 시스템
사용자가 미리 마음에 드는 아이템을 파악하고 있는가 파악하고 있는 경우가 많음 파악하고 있지 않은 경우가 많음
키워드(쿼리) 입력 입력 있음 입력 없음
연관 아이템 추천 방법 입력된 검색 키워드로 사용자 의도 추측 사용자 프로필이나 과거 행동으로 추측
사용자의 자세 능동적 수동적
개인화 개인화하지 않은 경우가 많지만 최근에는 개인화 서비스가 증가하고 있음 개인화하는 경우가 많음

 

검색에서는 사용자가 원하는 것을 미리 파악하고 있으며 검색 키워드(쿼리)를 통해 능동적으로 알고자 하는 정보나 상품을 많은 후보 가운데 끌어냅니다(Pull 타입). 검색에서는 쿼리의 의도를 읽어 연관도가 높은 아이템을 표시하는 것이 중요합니다. 그리고 검색 쿼리가 같다면 사용자에 관계없이 같은 결과는 반환하는 것이 전형적입니다. 하지만 최근에는 검색 결과를 개인화하는 경우도 증가하고 있습니다. 

 

p.33

검색과 추천 사용 비중은 서비스에 따라 다릅니다. 넷플릭스에서는 추천 시스템을 경유한 시청이 80%, 아마존에서는 추천 시스템을 경유한 매출이 35%라고 알려져 있습니다. 검색과 추천 시스템을 어떻게 조합할 것인지는 비즈니스 모델이나 사용자 경험 설계에 따라 다릅니다. 

 

p.36

먼저 비즈니스 관점에서 추천 시스템을 도입함으로써 무엇을 기대할 수 있는지 정의하는 것이 중요합니다. 경우에 따라서는 추천 시스템이 필요하지 않거나 인기순 추천만으로도 충분합니다. 구체적으로는 추천 시스템을 도입함으로써 사용자의 어떤 행동 변화를 기대하는가에 관한 Key Goal Indicator (KGI) 또는 Key Performance Indicator (KPI) 책정이 매우 중요합니다. 클릭률, 구입률, 체류율, 트위터 게시 수 등 어떤 사용자의 어떤 행동을 최대화하고 싶은지에 따라 구현할 추천 시스템이 달라집니다. KPI를 책정할 때는 대상 시스템에 관해 숙지하고 서비스상에서의 사용자 행동에 관해 깊이 이해해야 합니다. 

 

https://blog.youtube/news-and-events/youtube-now-why-we-focus-on-watch-time

 

YouTube Now: Why We Focus on Watch Time

 

blog.youtube

 

예를 들어 유튜브에서는 사용자의 전체 시청 시간을 KPI로 보고 이를 최대화할 수 있도록 서비스가 설계되어 있습니다. 시청 시간이 KPI이므로 사용자가 마지막까지 시청할 수 있도록 동영상을 추천하는 것이 중요합니다. 원래 유튜브에서는 시청 동영상 수를 KPI로 해서 진행했지만, 섬네일 이미지가 매력적인 동영상들만 추천되는 문제가 발생했습니다. 그래서 KPI를 시청시간으로 변경했습니다. 그때는 동영상 시청에 대한 각각의 로그를 세세한 단위로 얻을 수 없었기 때문에 정확한 시청 시간 로그를 얻을 수 있도록 로그도 정비했습니다.

 

KPI를 책정할 때는 현재 얻은 데이터에서 생각하지 말고 사용자 행동의 본질을 담은 지표부터 검토한 후 만약 해당 데이터가 없다면 개발자와 협력하면서 로그를 정비해나가야 합니다.

 

p.43

온라인에서 검증할 때는 데이터 편향(bias)에 주의해양 합니다. 

 

예를 들어 아마존의 별 5개 평가 데이터에는 별 1개에서 5개의 평균값이 균등하게 존재하는 것이 아니라 별 5개가 많다는 편향이 있습니다. 그것으 상품에 호감을 가진 사람이 주로 평가하는 경향이 있기 때문입니다.

 

그 밖에도 검색 엔진의 영향을 받은 편향도 있습니다. 검색 결과 상위에 나타나는 것은 클릭하기 쉽고 하위에 있는 것은 클릭하기 어렵습니다. 이 데이터를 기반으로 어떤 처리도 하지 않고 행동 이력 기반의 추천 시스템을 만들면 검색 엔진의 영향을 받아 검색 결과 상위의 것이 더 잘 추천되기도 합니다. 

 

그러므로 이 편향들을 제거한 후 추천 시스템을 만들어서 평가해야 합니다. 

 

p.51

한 가지 알고리즘으로 생성한 하나의 리스트만 제공할 경우 반드시 사용자의 기호에 맞는 아이템을 추천할 수 있다고 할 수 없습니다. 따라서 적합한 아이템을 만날 가능성을 높이기 위해 다른 측면에서 아이템을 추천하는 알고리즘에 따라 정렬된 여러 리스트도 사용자가 열람할 수 있도록 하는 것이 좋습니다.

 

이렇게 다양한 사용자의 기호에 맞는 아이템을 표시하기 위해 여러 리스트를 사용자에게 나타내고 싶은 경우 몇 가지 해결 방법이 있습니다. 예를 들어 화면 위쪽에 있는 탭을 한 번 클릭함으로써 여러 리스트를 간단히 전환하도록 하는 UI를 생각할 수 있습니다. 예시로 '표준','랭킹', '리뷰 수', '신규 오픈' 등 4종류의 리스트로 전환할 수 있습니다. 또한 다른 해결 방법으로는 여러 알고리즘에 따라 생성된 여러 리스트를 한 화면에 동시에 제시할 수도 있습니다. 

 

최근에는 넷플릭스처럼 아이템을 가로 방향으로 배열해 여러 리스트를 한 화면에 표시하는 서비스도 늘고 있습니다. 사용자는 화면을 이동하지 않고도 다른 알고리즘으로 선택된 여러 리스트를 한 번에 열람할 수 있어 하나의 리스트에서 적합한 아이템을 발견하지 못했을 때 자연스럽게 다음 리스트를 열람해 원하는 아이템을 찾을 수 있습니다. 단, 이 UI를 구현할 경우 개별 아이템에 대한 정보를 표시할 공간이 상당히 제한됩니다. 그러므로 넷플릭스 같은 동영상 시청 서비스처럼 하나의 화면과 짧은 텍스트 등의 적은 정보로도 사용자에게 그 매려겨이 충분히 전달되는 아이템을 다루는 서비스에서 사용하는 것이 좋습니다. 

 

p.57

https://www.cs.umd.edu/~samir/498/schafer01ecommerce.pdf

 

https://www.researchgate.net/publication/2401786_Beyond_Algorithms_An_HCI_Perspective_on_Recommender_Systems

 

이번에는 서비스를 제공하는 쪽의 목적에 주목해보겠습니다. 여기서는 벤 샤퍼(Ben Schafer)와 스웨어린젠(Swearingen)의 글을 참고로 하여 추천 시스템을 활용하는 서비스 제공자 측의 대표적인 비즈니스 목적을 다음 5가지로 분류했습니다.

 

- 신규/사용 빈도가 낮은 사용자의 정착

- 서비스에 대한 신뢰성 향상

- 사용 빈도 향상 및 이탈 사용자의 복귀

- 교차 판매

- 정기적으로 사용자의 충성도 향상 

 

p.57

서비스를 처음 방문한 신규 사용자나 사용 빈도가 별로 높지 않은 사용자가 다른 서비스로 이동하기 전에 만족도를 높여 서비스에 정착하도록 하는 것은 서비스 제공자에게 매우 중요합니다. 만족도를 높여 정착하도록 하려면 서비스 내에서 사용자에게 좋은 경험을 제공하는 것뿐 아니라 나쁜 경험을 하지 않도록 하는 것도 중요합니다. 이러한 목적을 달성하는 데에는 소위 개요 추천(broad recommendation)을 사용합니다.

 

개요 추천이란 서비스 내 데이터 통계 정보나 서비스 지식이 풍부한 편집자의 선택을 기반으로 추천하는 것을 의미합니다. 통계 정보에 기반한 추천이란 '이번 주 시청 순위'와 같이 서비스 전체의 사용 빈도 순위, '만화 매출 순위'와 같이 특정 카테고리 안의 매출 순위 같은 것을 의미합니다. 편집자의 선택에 기반한 추천이란 '영화 평론가들이 선정한 추천 목록'이나 '이번 주 특판상품 목록'과 같이 서비스 편집자나 전문가가 직접 선택해 작성한 추천 리스트를 나타냅니다.

 

이렇게 통계 정보나 편집자의 선택에 기반한 사용자 정보는 사용자 니즈를 만족시키는 경우가 많으며 혹여 니즈에서 벗어나더라도 정도가 크지 않습니다. 따라서 사용자에게 그들의 니즈와 서비스의 연관성을 발견하게 하여 서비스를 계속 사용하게 할 수 있습니다. 

 

p.66

개인화되어 있다는 점을 사용자에게 전달했음에도 불구하고 적합한 아이템을 표시하지 못한다면 사용자는 크게 실망하여 서비스에서 이탈할 수도 있습니다. 그러므로 함부로 개인화하지 말고 사용자 정보가 축적되어 일정 수준 이상의 정확도가 보장된 상태일 때 개인화해야 합니다. 

 

물론 충분히 준비한 '당신을 위한 추천'으로 추천한다고 해도 사용자가 관심 없는 아이템을 추천할 수 있습니다. 그럴 때는 구글 뉴스와 같이 추천된 아이템 내에서 사용자가 관심을 갖지 않는 것에 대해 명시적으로 피드백할 수 있는 구조를 제공하는 방법도 생각해볼 수 있습니다. 

 

p.69

사용자의 과거 행동 이력 등을 통해 적합한 아이템을 추천하는 경우, 예를 들어 전자상거래 사이트라면 사용자가 과거에 구입한 아이템과 비슷한 아이템을 추천하게 될 것입니다. 그때 그저 유사도가 높은 아이템을 추천하는 것이 아니라 아이템 사이의 관계성을 고려해 추천할 아이템을 정하는 것이 좋을 수 있습니다. 

 

예를 들어 어떤 사용자가 전자상거래 사이트 안에서 프린터를 구입했다고 가정한 후 그 사용자가 사이트에 다시 방문했을 때의 추천에 대해 생각해봅시다. 이때 종류가 같고 색상이 다른 프린터는 사용자가 구입한 아이템과 유사도가 매우 높지만 그 사용자에게 추천해서는 안 될 것입니다. 프린터를 구입하고 바로 다시 프린터를 구입하는 사람은 거의 없기 때문입니다. 이 경우 잉크나 토너 등 프린터 부속품과 같은 보완 아이템을 추천하면 구입 확률을 높일 수 있습니다. 한편 검은색 펜을 구입한 사용자에게 같은 제조사의 빨간색 펜을 추천하면 검은색 펜이 마음에 든 경우 빨간색 펜도 구매할 수 있습니다. 이렇게 아이템에 따라서는 대체품을 추천해도 구입으로 연결될 수 있습니다. 과거에 사용자가 마음에 들어 한 아이템을 보완하는 아이템을 추천할 것인가, 대체하는 아이템을 추천할 것인가는 아이템의 속성에 따라 다르다는 것을 이해하고 추천할 아이템을 결정해야 합니다. 

 

유사도의 정의는 여러 가지로 생각할 수 있습니다. 예를 들어 영화를 추천하는 서비스의 경우 영화 장르가 비슷한 것을 유사하다고 생각할 수 있습니다. 또는 감독이 비슷하면 유사하다고 생각할 수 있습니다. 개봉 연도가 가깝거나 같은 배우가 출연한 것도 비슷하다고 생각할 수 있습니다. 이런 아이템 사이의 '유사도'는 사용하는 기준에 따라 크게 달라집니다. 어떤 '유사도'를 활용해 사용자가 좋아하는 아이템과 유사한 아이템을 추천할지는 사용자의 필요에 따라 설계 되어야 합니다. 

 

p.71

추천 아이템을 제시할 때 예를 들어 예측 평갓값이 아무리 높아도 사용자에게 제시해서는 안 되는 아이템이 존재할 수 있습니다. 그런 아이템을 사용자에게 추천하면 심각한 만족도 저하로 이어질 우려가 있으므로 어떤 수단을 통해 사전에 선별해서 제거해야 합니다. 

 

전자상거래 사이트에서 사용자가 한 번 구입한 아이템은 다시 추천하지 않는 경우가 많습니다. 한 번 구입한 책을 다시 구입하는 경우는 흔치 않기 때문입니다. 한편 생수 등은 정기적으로 같은 아이템을 구입할 가능성이 매우 높습니다. 이렇게 재구입을 할지 말지는 아이템에 따라 다르게 고려해야 합니다. 아이템마다 한 번 구입된 적 있는 아이템을 다시 추천 목록에 표시할지 판단하는 데는 비용이 소요되므로 '다시 구입'과 같은 기능을 별도로 추가함으로써 재구입은 해당 기능에 맡기는 전략을 택할 수도 있습니다. 다른 예시로 재고가 없어 판매할 수 없는 아이템이나 위법한 아이템 등의 경우 사용자에게 표시하기 전에 제거해두지 않으면 사용자 경험을 저해할 수도 있습니다. 

 

여러 차례 이야기했지만 구입으로 연결되지 않는 아이템을 추천 목록에 계속 넣는 것 또한 사용자의 만족도를 손상시킵니다. 그런 아이템에 대해서는 적절하게 부정적인 피드백이 생겨 예측 평갓값이 낮아지는 알고리즘을 도입하거나 일정 횟수만큼 표시되지 않도록 하는 기능을 추가하는 것도 효과적입니다. 아이템에 따라서는 구입을 결정하기까지 시간이 걸려 여러 차례 표시할 필요가 있는 아이템도 있으므로 이러한 아이템의 특성을 고려해 설계해야 할 수도 있습니다.

 

예를 들어 집이나 자동차 등과 같이 비교적 비용이 많이 드는 물건을 한 번 추천받은 후 좋다고 생각해도 즉시 구입하는 경우는 흔치 않습니다. 구인 정보 역시 처음 보고 즉시 지원하기보다는 다른 후보 아이템을 몇 가지 보며 반복해서 비교 검토한 후 지원하는 경우를 생각할 수 있습니다.

 

그리고 처음에는 별로 마음에 들지 않았지만 몇 번 표시된 것을 보다가 마음에 들게 되는 경우도 있습니다. 단, 같은 아이템을 얼마나 여러 차례 표시할지 결정하는 것은 어려우므로 '열람 이력'처럼 같은 아이템을 열람하기 위한 경로를 별도로 제공하는 등의 대책도 생각할 수 있습니다. 

 

p.88

협업 필터링과 컨텐츠 기반 필터링 비교

 

  협업 필터링 컨텐츠 기반 필터링
다양성 향상 O X
도메인 지식 취급 비용 O X
콜드 스타트 문제 대응 X
사용자 수가 적은 서비스에서의 추천 X O
커버리지 향상 X O
아이템 특징 활용 X O
예측 정확도 O

 

p.93~94

 

추천 알고리즘 선택

 

지금까지 추천 알고리즘을 분류하고 각각의 특징에 관해 설명했습니다. 다음으로 적절한 추천 알고리즘을 선택하기 위한 방침을 소개하겠습니다.

 

컨텐츠 기반 필터링과 협업 필터링 중 어느 것을 선택할 것인가에 대해 알아봅시다. 앞서 2가지 방법을 비교하면서 각각의 장단점에 대해 설명했습니다. 추천 시스템을 도입하는 서비스에서 달성하고자 하는 목적에 따라 알고리즘들의 특징 차이를 파악한 상태에서 적절한 것을 선택하게 됩니다. 2가지 알고리즘 중 어느 한쪽만 선택하는 것이 아니라 적절하게 조합한 하이브리드 방법을 선택하는 경우도 많습니다. 그리고 하나의 시스템에 대해 하나의 알고리즘만 적용하는 것이 아니라 사용자나 아이템의 상황에 따라 여러 알고리즘을 구분해서 사용하거나 바꾸는 등으로 대처해야 합니다.

 

먼저 일반적인 방침으로 서비스 내 데이터의 양에 맞춰 알고리즘을 선택하는 방법을 생각할 수 있습니다. 앞서 신규 서비스에서는 사용자 수가 적기 때문에 협업 필터링을 활용하기 힘들다고 했습니다. 또한 콜드 스타트 문제에 관해 설명한 것처럼 신규 사용자나 신규 아이템에 대해서는 서비스가 가진 데이터가 적기 때문에 협업 필터링을 적용하기 어려웠습니다. 따라서 데이터가 적은 신규 서비스에서 추천할 때 또는 어느 정도 규모가 있는 서비스에서 신규 사용자에게 추천하거나 신규 아이템을 추천할 때 컨텐츠 기반 필터링을 선택하는 경우가 많습니다. 어느 정도 사용자 수가 늘어나거나 사용자 및 아이템 별 데이터가 축적된 뒤에는 보다 복잡한 사용자의 기호를 표현할 수 있는 협업 필터링을 선택하는 쪽이 높은 정확도로 아이템을 추천할 수 있는 경우가 많습니다. 따라서 일정 데이터를 사용할 수 있는 시점이 되면 내용 기반 필터링에서 협업 필터링으로 알고리즘을 교체하는 등의 방법을 사용하는 경우가 많습니다. 

 

추천 시스템의 제공형태에 맞춰 알고리즘을 선택하는 것도 생각할 수 있습니다. 개요 추천이라면 서비스 전체의 사용자 행동 이력에 기반해 통계 데이터를 사용한 인기 리스트나 아이템 속성 등으로 필터링을 거는 간단한 직접 지정형의 내용 기반 필터링이 좋을 것입니다. 연관 아이템 추천에서는 예측 정확도나 아이템 특징을 관리하지 않아도 된다는 비용적인 장점에서 아이템-아이템 메모리 기반 방법의 협업 필터링을 선택하거나 단순하게 아이템의 특징을 사용해 비슷한 아이템을 찾아서 추천하는 경우가 많습니다. 알림 서비스나 개인화에서는 각 사용자에 관한 정보가 어느 정도 축적되었다는 것을 전제로 하는 경우가 많으므로 사용자-사용자 메모리 기반 방법의 협업 필터링이나 간접 지정형 컨텐츠 기반 필터링을 우선 선택하는 경우가 많을 것입니다. 그리고 충분한 데이터가 축적되면 모델 베이스 방법의 협업 필터링이 효과적입니다.

 

다양성의 관점에 따라 알고리즘을 선택하는 것도 중요합니다. 예를 들어 전자상거래 사이트에서 특정 색상, 특정 펜 굵기의 볼펜을 구입하기 위해 상품을 찾는 겨여우 다른 색이나 다른 굵기의 볼펜 또는 연필이나 샤프 펜슬을 추천할 필요는 없을 것입니다. 이처럼 원하는 것이 확실하게 정해져 있는 아이템에 관해서는 다양성의 중요도가 그다지 높지 않으므로 사용자가 원하는 것을 정확하게 추천할 수 있는 직접 지정형의 컨텐츠 기반 필터링을 사용하는 것이 좋습니다. 한편 뭔가 과자를 먹고 싶어 전자상거래 사이트를 사용하는 사용자에게는 이제까지의 구입 이력을 통해 추측한 새로운 과자를 추천하는 것이 좋습니다. 이처럼 원하는 것이 명확하게 정해져 있지 않은 아이템일 때는 다양성이 중요한 경우가 많습니다. 그렇기 때문에 신규성과 흥미로움을 중시하고 다양성을 구현할 수 있는 협업 필터링을 선택하는 경우가 많습니다. 

 

p.102~103

각 추천 알고리즘 비교

 

알고리즘명 설명 예측정확도 계산 속도(대규모 데이터에서 계산) 콜드 스타트 문제 대응
무작위 추천 무작위로 아이템을 추천한다. 베이스라인으로 사용하기도 한다 X O
통계 정보나 특정 규칙을 기반으로 한 추천(인기도 추천 등) 베이스라인으로 자주 사용한다 X O
연관 규칙 간단한 계산 방법이고, SQL로도 구현할 수 있어 예전부터 널리 사용되고 있다 O O X
사용자-사용자 메모리 기반 방법 협업 필터링 위와 같음 O O X
회귀 모델 회귀 문제로써 추천 태스크를 정식화하여 다양한 머신러닝 방법을 적용한다 O O O
SVD(특잇값 분해) 간단한 행렬 분해 방법 X
NMF(비음수 행렬 분해) 비음수 제약을 추가한 행렬 분석 방법 X
MF(Matrix Factorization) 넷플릭스 프라이즈(Netflix Prize)에서 좋은 성적을 거둔 행렬 분해 방법 O O X
IMF(Implicit Matrix Factorization) 암묵적 평갓값에 대응하는 행렬 분해 방법 O O X
BPR(Bayesian Personalized Ranking) 암묵적 평갓값에 대응하며 순위를 고려한 행렬 분해 방법 O O X
FM(Factorization Machines) 평갓값 외에도 아이템과 사용자의 정보를 가미할 수 있는 방법 O O O
LDA(컨텐츠 기반) 아이템의 컨텐츠 정보에 토픽 모델을 적용해 추천하는 방법
LDA(협업 필터링) 사용자의 행동 이력에 토픽 모델을 적용해 추천하는 방법 O X
word2vec(컨텐츠 기반) 아이템의 컨텐츠 정보에 word2vec을 적용해 추천하는 방법 O O
item3vec(협업 필터링) 사용자의 행동 이력에 word2vec을 적용해 추천하는 방법 O O X
머신러닝 머신러닝 추천 방법 O O

 

p.107

실무에서는 데이터를 샘플링하여 작은 데이터셋으로 빠르게 실험을 반복하고 좋아 보이는 알고리즘을 발견하면 데이터를 늘려 시험하는 방법을 많이 사용합니다. 실무에서 검증할 때는 이 샘플링 방법에도 주의해야 합니다. 샘플링이 특정 사용자 세그먼트에 치우쳐 있으면 알고리즘 비교도 공평하게 할 수 없습니다. 

 

p.121

최근 중요도가 높아지고 있는 공평성(fairness) 관점에서 데모그래픽 데이터를 사용할 때는 주의해야 합니다. 예를 들면 사용자에게 성별 등을 묻는 것 자체가 문제될 수 있습니다. 그리고 남성이니까 또는 여성이니까 같은 사고방식은 설령 그것이 통계적인 경향을 갖고 있다하더라도 그 경향을 서비스 지표 개선 등의 목적으로 사용할 수 없는 경우가 있습니다. 

 

그리고 의도치 않게 그런 정보를 사용했다가 문제가 되기도 합니다. 

 

https://www.ml.cmu.edu/news/news-archive/2016-2020/2018/october/amazon-scraps-secret-artificial-intelligence-recruiting-engine-that-showed-biases-against-women.html

 

Amazon Scraps Secret AI Recruiting Engine that Showed Biases Against Women - Machine Learning - CMU - Carnegie Mellon University

AI Research scientists at Amazon uncovered Biases against women with their machine learning recruiting engine

www.ml.cmu.edu

예를 들어 아마존은 채용과정에서 지원자의 프로필 정보가 회사와 얼마나 매치되는지 머신러닝으로 산출한 후 스크리닝에 사용했습니다. 하지만 후보자의 성별에 따라 채용 시험 합격률에 큰 차이가 있었다는 사실이 발각되어 문제가 되었습니다. 이렇게 사용자의 데모그래픽 정보라는 것은 개발자가 특정 정보의 사용을 의도하지 않았어도 공평성 관점에서 문제가 될 수 있어 사용 시 세심한 주의가 필요합니다. MovieLens 데이터셋도 초기 데이터셋에는 사용자 정보가 공개되어 있었지만 후기 데이터셋은 사용자 정보를 포함하지 않은 형태로 공개되었습니다. 

 

p.154

행렬 분해에서는 잠재 인자 수와 에폭(epoch) 수, 정규화 파라미터 조정이 중요합니다. 또한, Surprise에는 biased라는 파라미터가 있으며 사용자와 아이템 편향 포함 여부를 선택할 수 있습니다. 이 파라미터의 적절한 값은 그리드서치(grid search)나 베이즈 최적화(bayes optimization)등을 사용해서 찾아갑니다.

 

p.156

실무에서 행렬 분해를 사용할 때는 스파크나 Google ML 등의 라이브러리나 서비스에 구현되어 있는 행렬 분해가 명시적 행렬 분해인지 암묵적 행렬 분해인지 확인한 후 적절히 사용해야 합니다. 

 

p.197~ 198

https://ai.facebook.com/blog/powered-by-ai-instagrams-explore-recommender-system/

 

Powered by AI: Instagram’s Explore recommender system

Over half of the Instagram community visits Instagram Explore every month to discover new photos, videos, and Stories relevant to their interests. Recommending the most relevant content out of billions of options in real time at scale introduces multiple m

ai.facebook.com

인스타그램의 추천에서는 후보 아이템을 추출한 뒤 여러 스코어링 처리를 수행해서 최종적인 추천 리스트를 만듭니다.

 

p.198

사용자의 특징 벡터가 주어졌을 때 해당 벡터가 가장 가까운 k개의 아이템을 추출하는 문제를 생각해봅시다. 이 문제는 최근접 탐색 문제라 불리는 유명한 문제입니다. 최근접 탐색에서 사용자와 모든 아잍메 벡터의 유사도를 단순히 계산하면 아이템이 최대가 되는 경우 아이템 수에 따라 응답에 시간이 걸려 사용자 만족도를 저하시키는 문제가 발생합니다.

 

최근접 탐색에서 계산 속도를 높이는 방법 중 하나로 근사 최근접 탐색이 있습니다. '근사'라는 용어에서 알 수 있듯이 일부 정확성을 특성으로 하여 입력된 벡터에 가까운 벡터를 빠르게 찾아내는 방법입니다. 사용자에 대해 아이템을 추천하는 개인화가 아니라 아이템으로부터 비슷한 아이템을 추출하는 연관 아이템 추천에서도 마찬가지로 이 근사 최근접 탐색을 사용할 수 있습니다. 

댓글