Share           Pin It

일전에 PR시리즈라는 타이틀로 20 차례에 걸쳐서 추천 시스템 및 알고리즘에 대한 다양한 글을 적었었습니다. 이후로도 계속 추천 관련 업무를 진행하고 있기 때문에 그 이후에 추천에 관한 생각을 정리할 필요가 있을 것같아서 글을 적습니다. 예전 글과 반복되는 내용도 있지만, 이 글을 처음 읽는 분들을 위해서 중복된 내용도 간략히 다시 적겠습니다. 

 초기의 추천 시스템은 아이템 Item 자체 또는 그것의 메타데이터를 이용해서 관련성을 맺어서 추천해줬습니다. 그래서 이름도 CBF, 즉 Content-based Filtering입니다. 보통 추천 알고리즘에서는 Recommendation보다는 Filtering이라는 용어를 많이 사용하는데, 필요한 것만 걸러서 보여준다 정도로 이해하면 될 것같습니다. Filtering이라는 용어는 다음에 설명할 CF 이후로 사용된 듯합니다. CBF가 더 원초적인 방법이지만 CF가 추천 알고리즘으로 활성화된 이후에 CBF라는 이름으로 불린 듯합니다. CBF는 아이템의 속성 또는 메타데이터의 동일성/유사성을 바탕으로 관련 아이템을 추천해줍니다. 영화를 예로 들면, 요즘 인기있는 ‘인터스텔라’를 감명깊게 본 분들에게 인터스텔라의 감독인 ‘크리스토퍼 놀란’이 감독했던 다른 영화인 ‘인셉션’이나 ‘다크 나이트’를 추천해주는 형태입니다. 

두번째는 보통 추천 시스템/알고리즘이라고 말하면 가장 먼저 떠올리는 CF, 즉 Collaborative Filtering입니다. 한국어로 협업필터링이라고 불립니다. 협업필터링이란 많은 사람들이 동시에/협렵적으로 필터링을 해준다는 의미입니다. CBF가 아이템 또는 컨텐츠 그 자체 또는 속성을 이용했다면, CF는 아이템을 소유한 (물건이면 구매했거나 영화면 관람했거나 책이면 읽었거나 등의 행위를 총칭함) 사람들을 매개로 해서 추천해주는 형태입니다. 보통 Likely-minded라고 표현하는데, 비슷한 취향을 가진 다른 사람들의 소유한/좋아한 아이템을 추천해주는 형태입니다. 그래서 협업적이라고 부릅니다. 앞서 ‘그래비티’를 재미있게 봤던 관객들이 인터스텔라도 재미있게 봤다면, 이전에 그래비티를 본 사람들에게 인터스텔라를 추천해주는 형태입니다.

세번째는, 아직 정식으로 이름이 붙여진 것은 아니지만 암암리에 사용되고 있어서 제 나름대로 명명한 것입니다. 대부분이 수긍할 듯한데, CAF, 즉 Context-Awared Filtering입니다. 트위터의 실시간성, 포스퀘어의의 지역성, 그리고 페이스북의 소셜/인맥 등이 바로 컨텍스트입니다. 즉, 이런 컨텍스트를 인지하고 그걸 이용해서 추천해주는 것을 CAF라고 명명하려 합니다. CBF가 아이템의 속성을 이용하고, CF가 아이템을 소유한 사람을 이용한다면 CAF는 (아이템의) 현재를 이용해서 추천해주는 것입니다. 현재 즉 At Present는 단순히 시간만을 의미하지는 않습니다. 지금 이 시각에 맞는 아이템을 추천해주기도 하고, 지금 이 장소에 맞는 아이템을 추천해주기도 하고, 지금 이 상황에 맞는 아이템을 추천해줍니다. 점심시간이 다가오면 점심 메뉴와 식당을 추천해주고, 차의 기름이 다 떨어져가면 주변의 주유소를 추천해주고, 비가 오면 우수에 젖도록 분위기있는 음악을 추천해주고… 그런 식으로 현재 어디에서 누구와 어떤 상황에 있는가에 따라서 추천해주는 것입니다.

물론 위의 CBF, CF, CAF가 단독으로 추천에 활용될 수도 있지만, 당연히 적절히 조화를 이뤄서 종합적으로 추천해주는 것이 일반적입니다. 보통 Hybrid 방식이라 부릅니다. Hybrid Filtering이라는 일반적으로 부르지는 않지만, 그렇게 불러도 무관할 듯합니다. 여러 알고리즘의 결과값을 잘 조화를 이뤄서 하이브리드 방식으로 추천해줄 수도 있고, 단순히 다양한 알고리즘의 추천 결과를 혼합해서 보여주는 Fusion 방식도 있습니다. 둘 간의 큰 차이가 있는 것같지는 않습니다.

추천에서 CBF는 가장 안전한, 즉 틀리지 않은 답을 제공해줍니다. 그래서 뻔한 추천이 이뤄지는 경우가 많습니다. 그런데 CF는 맞는 답을 제공해줍니다. 사실 많은 경우 또는 적절한 부가 필터링 규칙을 적용하지 않으면 CBF보다 오히려 더 엉뚱한 결과를 제공해주기도 하지만, 많은 사람들이 공통적으로 소유한 아이템이라는 가정 하에 맞는 답을 제공해주는 방식입니다. 그런 식으로 보면 CAF는 더 적합한 답을 제공해주는 것입니다. 틀리지 않은 답, 맞는 답, 그리고 더 맞는 답이라는 어색한 표현을 사용했지만 곰곰이 생각해보시면 납득이 가리라 봅니다. 그렇지만, 이것만은 확실히 말할 수 있습니다. 추천은 '정답’을 제공해주는 것은 아닙니다. 추천된 것이 (상황이나 개인에 따라서) 정답일 수도 있지만, '이게 정답이니 이걸 사용해’라는 강압적인 그것이 아닙니다. 추천은 조금 더 빠르고 쉽게 원할 수도 있는 어떤 것을 발견하는 것을 도와주는 것입니다. 그래서 Recommender라는 말보다는 Discovery & Assistant라는 표현이 더 나을 듯합니다.

그리고 추천을 제대로 하기 위해서는 좋은 알고리즘을 사용하는 것에 앞서서 아이템 또는 서비스 도메인의 속성을 파악하는 것이 더 중요합니다. 이미 대부분의 추천 알고리즘은 논문이나 오픈 소스 등의 형태로 알려져있습니다. 알고리즘 자체에서 — 추천의 정확도 면에서 — 큰 차별화를 이룰 수 없다는 말입니다. 조금 더 빠른 알고리즘이나 조금 더 커버리지가 넓은 알고리즘, 조금 더 우연성 Serendipity를 허용하는 알고리즘 등이 존재할 수는 있지만, 큰 틀에서 특히 하이브리드 형태로 다양한 알고리즘/방법론을 접목해서 사용한다면 큰 차이는 없습니다. 그러나 어떤 서비스 도메인에 추천 알고리즘을 적용하느냐에 따라서 결과는 차이가 날 수 밖에 없습니다. 만능의 알고리즘을 찾는 것에 앞서 적용할 서비스의 특성을 먼저 파악하고, 프로그램화할 수 있는 피쳐들을 찾아서 추천에 활용하는 것이 맞습니다.

CF가 대표적인 알고리즘이라고 해서 모든 서비스에서 가장 적합한 방법이 아닐 수 있습니다. 일반적으로 시의성이 적고 긴 생명주기를 가진 아이템/컨텐츠의 경우 CF가 충분히 좋은 알고리즘이지만, 뉴스처럼 시간이 중요하거나 의류와 같이 패션 트렌드에 민감하거나 에어컨, 온풍기와 같이 시즈널성이 큰 아이템을 추천해주는 경우라면 CF보다는 CBF 또는 CAF, 또는 단순한 (미리 정의된) 규칙에 의한 추천이 더 적합할 수가 있습니다. 단순히 추천 알고리즘/시스템을 적용하기에 앞서 그 서비스 도메인을 먼저 파악해서 어떤 방법으로 해결할 것인가?를 먼저 고민하고, 알고리즘들을 그 상황에 맞게 튜닝해서 사용해야 합니다.

최근 2~30년 동안 추천을 위한 많인 아이디어들이 실생활에 적용되어 효과를 보여주고 있습니다. 벌써 만개한 분야로 보여지만, 여전히 더 좋고 다양한 아이디어들이 쏟아지고 있습니다. 현재 어떤 알고리즘이나 조건이 가장 좋은 추천을 제공해준다고 하더라도, 그것에 만족하면 안 됩니다. 새로운 알고리즘도 계속 나오고 또 서비스의 주변 상황들이 계속 변하기 때문에 주기적으로 새로운 알고리즘을 계속 테스트해보고 관련 추천 요소들을 계속 변경해가면서 그렇게 적응적 Adaptive 추천 시스템을 만들어가는 것도 매우 중요합니다. 한번의 성공은 영원할 수 없습니다.

P.S., 일반적인 분석/마이닝업무에서도 알고리즘에 대한 이해도보다는 서비스/비즈니스/도메인에 대한 이해도가 더 필요합니다. 특정 알고리즘에 대한 대가가 아니라면...

페이스북 페이지: https://www.facebook.com/unexperienced

댓글을 달아 주세요

Share           Pin It
일전에 PR시리즈를 통해서 추천 시스템과 관련된 여러 알고리즘 및 이슈를 다뤘습니다. 그 이후에도 추천 및 개인화 프로젝트를 계속 진행하고 있고, 당분간은 (타의로?) 추천 업무에서 벗어날 수 없을 듯합니다. 그래서 최근 떠오르는 추천에 대한 생각을 정리합니다.

일각에서는 추천이 모든 문제를 해결해줄 마법약으로 생각하는 듯합니다. 제대로 된 추천 서비스를 붙이면 갑자기 매출이 2~30%이상 올라가고, 사용자들이 급증할 것이라는 환상을 가지고 있습니다. 기존의 유수의 잘 나가는 기업들이 추천 서비스를 잘 만들었기 때문에 현재의 위치에 왔다는 착각을 하는 듯합니다. 그도 그럴 것이 아마존의 매출의 몇%이상은 추천 상품에서 나온다거나 넷플릭스가 추천을 잘 해줘서 성공했다와 같은 기사들이 많기는 합니다. 그러나 그들의 성공에 추천이 중요한 역할을 한 것은 사실이지만, 결정적인 역할을 했다고 생각지는 않습니다.

음식상에 비유하면 추천은 구색을 맞추는 반찬에 불과하지, 결코 메인 요리가 아닙니다. 추천은 결코 밥, 국, 김치가 될 수 없고, 불고기나 생선 요리처럼 중요 요리도 아닙니다. 그저 몇몇 나물 요리에 불과합니다. 많은 서비스들이 (자동화된) 추천 영역이 없이도 잘 운영되고 있는 것이 이를 잘 보여줍니다. (밥, 국, 김치처럼) 서비스의 근간이 되거나 (불고기, 생선요리처럼) 서비스의 핵심 기능으로 추천이 자리잡은 경우는 거의 없습니다. 잘 차려진 한상차림에서 빠져도 빠졌는지도 잘 모르지만 포함되면 이 식당 상차림이 좋은데 정도로 인식되는 것이 추천입니다. 콩나물정도를 생각하고 글을 적기 시작했는데, 계란 후라이정도가 적당할 듯합니다. 불고기 정식에서 계란 후라이가 없어도 전혀 어색하지 않지만, 계란 후라이가 함께 제공됨으로써 메뉴가 더 다양해지고 잘 차려진 그런 느낌...

물론 저도 많은 서비스에서 추천 및 자동화가 더 큰 역할을 해야 된다고 믿고 있고 그것을 위해서 고군분투하고 있습니다. (이전 글에서 밝혔듯이 최소 50%이상) 그러나 자동화된 추천이 모든 문제를 해결해주는 만병통치약이라는 환상에서는 벗어나야 합니다. 현실을 냉정하게 봐야 합니다. 추천이 중요하지만 과장되지는 않아야 합니다. 물론, 현실에서는 추천이 과소평가받는 것도 사실입니다. 우선순위가 계속 밀리다가 어쩔 수 없는 상황에서 추천이 한방을 터뜨려줄 거라는 그런 환상이 있습니다. 추천/자동화가 가장 핵심 요소는 아니지만 그렇다고 가장 우선순위가 낮은 요소도 아닙니다. 중 또는 중상정도의 우선순위로 서비스 초기부터 고려가 되야 합니다.

추천 관련 업무를 계속 진행하다보니 추천에서 가장 중요한 것이 어떤 알고리즘을 사용할 것인가나 얼마나 정확도를 높일 것인가가 아닙니다. 최근 나오는 여러 논문이나 화이트페이퍼 등에도 종종 언급됩니다. 추천에서 중요한 것은 어떤 알고리즘을 사용할 것인가보다는 어떤 개념으로 서비스를 만들 것인가가 더 중요하고, 수치로 보이는 정확도나 지표를 얼마나 높일 것인가보다는 잘 드러나지 않는 사용자의 만족을 어떻게 충족할 것인가가가 더 중요합니다. [R = SS >> AA] 즉, 추천은 알고리즘(A)보다 서비스(S)가 더 중요하고, 정확도(A)보다 만족도(S)가 더 중요합니다. 논문 등에 제시된 특정 알고리즘의 특장점을 무시할 수는 없으나 서비스의 개념과 특징이 우선 고려되야 합니다. 사용자의 만족도 결국 알고리즘이 아닌 개념에서 나옵니다. (실제 사용자가 어떤 알고리즘을 사용했는지 알고 싶어하지도 않고 알 필요도 없습니다.)

추천 및 자동화는 중요합니다. 그러나 추천이 만병통치약이라는 그런 과장된 기대치를 낮추기 전에는 추천은 절대 작동하지 않습니다. 물론 추천을 만병통치약으로 정제해야하는 것이 저같은 사람들의 미션이기는 합니다. 계란 후라이 덕후가 아닌 이상에는 불고기 백반을 시켜놓고 계란 후라이가 안 나왔다고 불평하는 사람은 없을 것입니다. 그러나 미천한 계란 후라이가 백반의 완성도를 높여줄 것입니다. 추천도 그렇습니다. 계란 후라이가 필요치 않은 식단에 굳이 계란 후라이를 추가하려는 것도 피해야 합니다.

==
페이스북 페이지: https://www.facebook.com/unexperienced

댓글을 달아 주세요

  1. Favicon of http://anunmankm.tistory.com BlogIcon 버크하우스 2014.08.19 09:58 신고 Address Modify/Delete Reply

    Initializing

Share           Pin It

지난 글들에서 CF 알고리즘과 CF에서 가장 중요한 유사도를 구하는 방식에 대해서 간략히 설명을 드렸습니다. 이번에는 그런 추천 알고리즘들이 잘 개발되었는지를 측정하는 성능지표에 대해서 다루겠습니다. 평가지표에 더해서 추천 시스템을 개발할 때 고려해야할 사항도 함께 적겠습니다.

다른 대부분의 데이터마이닝 기술들이 그렇듯이 첫번째 성능지표는 정확도입니다. 제안된 방법이 얼마나 사용자의 선호도를 잘 예측해서 레이팅값을 제대로 예측하느냐 또는 추천된 아이템을 선택할/좋아할 가능성이 높은가를 측정합니다. 정확도는 보통 두가지 방법으로 계산됩니다. 가장 흔히 사용하는 방식은 예측된 레이팅과 실제 레이팅 사이의 차이, 즉 Error 텀을 측정하는 것입니다. MAE (Mean Absolute Error)와 RMSE (Root Mean Square Error)가 가장 흔히 사용되는 지표입니다. Netflix Prize에서도 RMSE를 기존의 것보다 10% 개선하는 것이 목표였습니다. 두번째 방법은 예측값과 실측치의 Correlation을 측정하는 것입니다. MAE 등이 값의 차이를 구했다면, Correlation은 값의 변화 경향을 측정합니다. 유사도 글에서 언급되었던 Pearson correlation coefficient가 가장 흔한 방법입니다. ROC (Receiver Operating Characteristic) Curve도 자주 활용되는데, 제가 잘 모르는 분야라서 설명은 생략합니다. (ROC 위키페이지)

제가 처음 추천시스템을 접했던 2006년 2007년까지만 하더라도 대부분의 논문들이 정확도를 측정하는 것이 주요 목표였고, 제안된 방법이 기존 것보다 정확도가 조금이라도 높아지면 대단한 성과인양 논문을 쓰고 제출했던 것같습니다. 당시만 하더라도 대규모 자동화된 추천 시스템이 흔치 않았기 때문에 정확도만으로도 충분했던 것같습니다. 그런데 최근에 다시 추천 논문을 읽어보니 정확도 이외에 다른 요소들을 더 내세우는 경향이 짙었습니다. 어떤 측면에서 보면 정확도 개선은 더이상의 여지가 거의 없기 때문에 다른 측면을 강조하는 것일 수도 있습니다.

그래서 최근에 등장하는 논문이나 시스템들은 정확도 뿐만 아니라, 사용자 만족도 또는 사용자 경험에 많은 중점을 두고 있습니다. 추천 시스템은 사용자들과 접점이 많은 매우 실용적인 것입니다. 그렇기 때문에 단순히 사용자의 선호도를 예측하는 것 이상으로, 사용자들이 실제 추천된 아이템을 만족하느냐는 중요한 이슈입니다. 예를들어, A라는 사용자가 a 제품에 대한 레이팅을 4점으로 했을 때, 어떤 추천 알고리즘은 3점을 예측하고, 다른 추천 알고리즘은 5점으로 예측했다면 MAE (정확도) 관점에서 보면 둘다 에러가 1로 동일합니다. 그렇지만 이 두 추천 시스템의 성능을 같다고 볼 수 없습니다. 사용자가 만약 4점 이상 예측된 아이템만 보겠다라는 규칙이 있다면, 첫번째 추천 시스템은 a 제품을 추천해주지 못하는 현상이 발생합니다. 다른 경우를 생각해보면, 어떤 추천 시스템이 5점으로 예측해서 영화를 추천해줬는데 (물론 사용자가 그 영화를 봤을 때 5점으로 레이팅한다는 가정 하에), 해당 영화가 19금 영화이고 사용자는 미성년자였다면 이 또한 제대로된 추천이 아닙니다. 그래서 최근 연구/시스템들은 정확도 이상의 것 -- 러프하게 말해서 '사용자 만족도' -- 을 요구하고, 지표화하고 있습니다.

사용자 만족도는 정확도만큼 깔끔하게 지표화하기 어렵습니다. 만족도라는 것이 정성적인 부분이라서 이를 정량화하는 것이 매우 어렵습니다. 그래도 시스템에서는 다양한 방법으로 사용자의 만족도를 예측하고 있습니다. 대표적인 방법이 추천된 상품이 조회/구매되는 비율, 즉 CTR을 구하는 경우가 많습니다. CTR이 높다는 것은 사용자가 추천된 아이템에 흥미를 느꼈다는 증거가 됩니다. 그런데 CTR만으로도 만족도를 충분히 설명할 수 없습니다. 오히려 추천이 제대로 이뤄졌다면 클릭회수 또는 CTR이 감소할 수도 있습니다. 그래서, 추천된 아이템을 즐기는 시간 (예를들어, 영화를 조금 보다가 그만 뒀다면 만족도가 낮은 것이고, 끝까지 봤다면 만족도가 높은 것입니다)을 측정하기도 하고 (Duration Time), 웹사이트의 경우 재방문률 retention rate를 구하기도 합니다. 클릭회수나 CTR보다는 Duration Time이나 Retention Rate의 변화를 측정하는 것이 조금 더 장기적이로 이뤄질 가능성이 높습니다. 이 말은 사용자 만족도라는 것을 단기적으로 파악하는 것이 어렵다는 의미이기도 합니다. 새로운 방법론을 적용했을 때, 너무 조급하게 결과가 나올 것을 기대하는 것은 경계해야 합니다.

그리고 최근 추천 논문에는 Serendipity (Serendipitous recommendation)라는 용어가 자주 등장합니다. 즉, 우연 또는 우연적 발견이라는 의미입니다. 추천 알고리즘들이 개인화되었다고는 하지만, 그래도 아이템의 인기도에 크게 의존을 합니다. 그렇기 때문에 많은 사용자들이 좋아하는 일반적인 아이템은 자주 추천이 됩니다. 일반적인 아이템이 추천이 되면 너무 뻔해서 만족도가 떨어집니다. 그래서 연관성은 있지만 (관심을 가질 법 한 범위 내에서) 그래도 새로운/신선한 것을 추천해주도록 추천 시스템들이 진화하고 있습니다. 그런 측면에서 추천 시스템은 Recommendation Engine에서 Discovery Engine으로 발전하고 있습니다. 우연성을 너무 강조해서 너무 생뚱맞은 것을 추천해주면 또 곤란합니다. 어려운 문제입니다. 추천 점수에서 상위 1~2개 정도의 아이템만 추천해주는 경우에는 뻔하지만 연관성이 높은 아이템을 추천해줄 때 사용자들의 만족도가 높아지고, 다수의 아이템을 동시에 추천해주는 경우 (Top 10 등)에는 다양한 아이템들이 추천될 때 사용자 만족도가 증가한다고 알려져있습니다. 그리고, 초보 서비스 이용자들에게는 연관성이 높은 아이템들을, 헤비 유저에게는 우연성이 높은 아이템들을 추천해주는 것도 대부분의 사용자를 만족시키는 한 방안입니다.

그리고, 특히 헤비 유저들에게는 자유도 user control를 제공해줄 필요가 있습니다. 기계적으로 아이템들을 추천해주는 것이 아니라, 사용자들에게 자신이 추천 방식을 변경시켜주는 것입니다. '나는 최신 상품을 우선으로 보겠다' 아니면 '평점이 높은 것 위주로 보겠다' 등과 같은 옵션을 제공해줌으로써, 시스템의 단점도 보완하면서 사용자들에게 자유도를 제공해줄 수 있습니다. (글을 적고 보니 user control은 평가지표는 아니네요.) 유저 컨트롤 못지 않게 중요한 것이 추천 신뢰도입니다. 유저들은 가끔 왜 이 아이템이 추천되었는지?를 궁금해합니다. 그렇기 때문에, '네가 이러이런한 상품을 구입했고, 그런 상품을 구입한 다른 사용자들이 이런 상품을 좋아했다' 또는 '네 친구 XX가 이 상품을 좋아했다' 등과 같은 설명 또는 추천의 근거를 제공해주는 것도 매우 중요합니다. 이전 글에서도 적었는데, 소셜 데이터를 사용함으로써 추천 시스템 자체의 (수치화/지표화된) 품질은 별로 개선시키지 않았지만, 추천의 이유를 설명해줌으로써 추천 신뢰도는 높였다는 연구결과도 있습니다.

그리고, 뉴스 기사를 추천해주는 경우에 중요한 요소가 하나 더 있습니다. 바로 공정성입니다. 정치 경제 사회 문제에 대해서 특정 견해를 가진 이들에게 비슷한 견해의 다른 기사들을 추천해주면 만족도는 증가합니다. (사용자가 추천 시스템(의 작동)을 인지하지 못한 상황에서) 특정 견해의 뉴스만을 제공해주면, 편향된 시각으로 뉴스를 편집한다는 오해를 불러일으키기도 합니다. 그래서 에디터들은 특정 중대 사안에 대해서 두가지 다른 견해를 동시에 노출시켜주려고 노력하는 경향이 있는데, 자동화된 시스템도 중립성을 학습할 필요가 있습니다. 소셜픽이라는 검색서비스를 만들 때, 관련된 기사/글이 두개밖에 없으면 그냥 두개열로 나란히 나열해서 보여주자라고 의견을 낸 적이 있습니다. 그랬더니 뉴스/블로그 쪽에서 오래 일하셨던 분이 그렇게 되면 사용자들이 두 기사를 놓고 논쟁을 시키는 것처럼 보인다는 의견을 더했습니다. 그래서 현재는 3개열에 노출하데, 마지막 세번째 열은 공백으로 놓고 제공해주고 있습니다.

(글을 마치려고 했는데 한 가지 더 생각났습니다.) 추천 커버리지도 추천 시스템의 품질과 직결됩니다. 커버리지는 (연관아이템추천에서) 연관아이템을 가지는 아이템의 개수와 연관아이템의 개수, 둘 모두를 뜻합니다. CF 알고리즘은 간단하지만 잘 작동한다고 말했습니다. 그런데 치명적인 단점은 커버리지가 낮습니다. 일단 사용자들에게 한번 이상 조회된 아이템에 한해서만 추천 (커버리지의 두 측면에서)이 됩니다. 정확한 수치는 경우에 따라서 다르겠지만, 전체 아이템에서 10%정도만 유저들에 의해 한번이라도 조회됩니다. 전체 상품수는 1000개인데, 100개 상품만 추천/피추천 대상이 된다는 얘기입니다. 그러면 나머지 900 제품은 절대 추천되지 못하는 현상이 발생합니다. 그래서 CF 방식에 CBF 방식을 결합해서 하이브리드 형태로 추천 시스템을 만듭니다. 예를들어, '이영화를 봤던 사람들이 봤던 다른 영화들'과 '이 영화의 장르/감독/배우들의 다른 영화들'을 혼합해서 추천해주는 것입니다. 그리고, 커버리지가 낮다는 것은 (같은 아이템을 계속 추천/노출시킴으로써) 사용자들은 추천 피로도가 쌓이게 됩니다. 그래서 추천 커버리지 또는 다양성, 그리고 앞서 말했던 우연성은 중요합니다.

이 외에도 다양한 측면에서 추천 시스템의 품질을 평가, 측정할 수 있습니다.

(Coming Soon) 앞으로 추천랭킹, 필터링, 개인화, 필터버블 등의 글이 계속 이어집니다.

추천시스템 전체 목록

  1. 추천 시스템과의 조우 (PR시리즈.1)
  2. 추천 시스템을 위한 데이터 준비 (PR시리즈.2)
  3. 추천대상에 따른 추천 시스템의 분류 (PR시리즈.3)
  4. 알고리즘에 따른 추천 시스템의 분류 (PR시리즈.4)
  5. 추천 시스템을 위한 유사도 측정 방법 (PR시리즈.5)
  6. 추천 시스템의 성능 평가방법 및 고려사항 (PR시리즈.6)
  7. 추천 시스템에서의 랭킹과 필터링 문제 (PR시리즈.7)
  8. 추천 시스템의 쇼핑하우 적용예 (PR시리즈.8)
  9. 개인화 추천 시스템에 대하여 (PR시리즈.9)
  10. 추천 시스템의 부작용 - 필터버블 (PR시리즈.10)
  11. 추천 시스템의 레퍼런스 (PR시리즈.11)
  12. 추천 시스템에 대한 잡다한 생각들 (PR시리즈.12)
  13. 추천 시스템을 위한 하둡 마훗 사용하기 (PR시리즈.13)
  14. 추천 시스템에 대해서 여전히 남은 이야기들 (PR시리즈.14)

==

페이스북 페이지: https://www.facebook.com/unexperienced

댓글을 달아 주세요

  1. Favicon of http://sdoood.tistory.com BlogIcon 이젠모든것이~! 2017.11.04 18:14 신고 Address Modify/Delete Reply

    좋은 글 잘봤습니다 ^^

Share           Pin It

앞으로 다양한 주제의 글이 남아있지만, 이번 포스팅이 추천 시스템에서는 가장 핵심이 되는 추천 알고리즘에 대한 글입니다.

본격적으로 추천 알고리즘이 개발된 것은 20여 년 밖에 되지 않지만, 실 서비스에서 쉽게/바로 적용이 가능하고 그 효과도 즉각적으로 측정이 가능하기 때문에 다양한 방법들이 개발되었습니다. 밑에서 자세히 설명하겠지만 대부분의 알고리즘들이 매우 간단하여, 데이터마이닝에 큰 지식이 없는 이들도 쉽게 구현, 적용할 수 있어서 다양한 분야의 전문가들이 추천 알고리즘에 살을 붙여서 개념의 간단성에 비해서 매우 다양한 방법들이 존재합니다.

가장 원시적인 추천 알고리즘은 컨텐츠 기반의 필터링 (CBF)이 될 듯합니다. 아이템의 속성/메타데이터를 이용해서 연관 아이템을 묶어주기 때문에 별로 어렵지 않게 구현도 가능합니다. 예를들어, '변호인'이라는 영화를 본 사용자에게 변호인이 장르가 '드라마'이므로 드라마 장르의 다른 인기 영화를 추천해준다거나, (양우석 감독이 메가폰을 잡았기 때문에 양우석 감독의 전작인 XX를 추천해주면 된다고 적으려 했는데, 변호인이 첫번째 영화네요ㅠㅠ) 송강호씨가 주연을 맡았기 때문에 송강호씨가 출연한 다른 작품인 관상이나 설국열차 등을 추천해주는 형태입니다. 알고리즘이 매우 직관적이고 쉽기는 하지만, 추천되는 아이템이 너무 뻔하다는 단점이 있습니다. 그래도 CBF는 다른 알고리즘들과 하이브리드 형태로 여전히 사용되고 있습니다. 밑에서 설명할 CF방식의 커버리지 문제를 해결하기 위해서 CBF를 이용하면 좋습니다.

보통 추천 알고리즘이라고 말하면 대부분 협업필터링 Collaborative Filtering (CF)으로 이해합니다. 그만큼 CF가 추천시스템의 대표 알고리즘입니다. 그렇기에 지난 20여년간 다양한 방법들이 개발, 활용되고 있습니다. CF의 기본 컨셉/가정은 'likely-mind'라고 표현하듯이 나와 비슷한 성향을 가진 다른 사용자들이 좋아하는 것이면 나도 좋아할 가능성이 높다는 것입니다. 내가 영화 '변호인'을 재미있게 봤다면, '변호인'을 재미있게 본 다른 많은 사람들이 재미있게 본 '화려한 휴가'나 '26년' 등을 추천해주는 형태입니다.

CF방식도 머신러닝을 활용한 모델기반CF가 있고, 단순히 앞서 설명한 가정 (likely-mind)을 그대로 구현한 메모리기반CF가 있습니다. 죄송하지만, 모델기반의 CF는 제가 구현/적용해보지 않아서 자세한 설명을 해드릴 수 없습니다. 나이브 베이지언이나 뉴럴네트워크 등의 다양한 머신러닝/AI기법을 활용해서 추천을 해준다 정도로 이해하고 넘어가면 됩니다. 밑에서 다시 언급될 Matrix Factorization도 모델기반이라고 부르는 듯한데, 이것은 따로 설명하겠습니다.

메모리 기반 CF가 가장 흔하게 사용되는 추천 알고리즘입니다. 유저-아이템 레이팅을 모두 메모리에 올려두고 유저-유저 또는 아이템-아이템의 관계 (유사도)를 계산한다고 해서 메모리 기반이라 불립니다. 메모리 기반 CF도 사용자기반CF와 아이템기반CF로 나뉩니다. 사용자 기반의 경우 나와 유사한 사용자들이 좋아하는 상품을 추천해주는 형태입니다. (나 - 유사사용자들 - 그들이 좋아한 아이템들) 반면에 아이템 기반은 내가 좋아하는 아이템의 관련 아이템들을 추천해줍니다. (나 - 내가 좋아한 아이템들 - 그것들의 관련 아이템들) 여기서 중요한 점은 유사사용자 또는 관련아이템을 찾아내는 것입니다. 그래서 다음 글에서는 CF의 핵심은 유사도 측정 방법에 대해서 따로 설명할 예정입니다. 

일반적으로 유저수와 아이템수 중에서 적은 쪽에 맞춰서 추천시스템을 구현하는 것이 정확도나 강건성 등의 측면에서 더 낫다고 합니다. 유저기반이 조금더 일찍 소개되었지만, 아마존의 성공 이후에 아이템기반이 많은 주목을 받았고, 구글 유튜브도 최근(?)에 아이템기반으로 개인화추천을 변경했다고 합니다. CF 방식의 장점은 간단하지만 의외로 추천이 잘 된다는 점이 있고, 또 우연에 의한 추천이 가능하다는 점입니다. 그러나 적어도 한번 이상 유저들이 조회해본 상품들이 추천되기 때문에 커버리지가 낮다는 단점이 있습니다. 그리고 새로운 유저가 시스템에 등록했거나 새로운 아이템이 등장했을 때, 유저-아이템 레이팅이 존재하지 않기 때문에 이른 유저/아이템에 적당한 아이템을 추천해주지 못합니다. (Cold start 문제라고 함) 그리고 CF방식도 기본적으로 인기도에 의한 추천이기 때문에 인기 있는 상품들이 더 자주 추천될 가능성이 높습니다. 이상하게 들리겠지만, 우연에 의한 추천이 가능하지만 또 전혀 그렇지 않을 수도 있습니다.

마지막으로 CF방법에서 가장 최근에 주목을 받는 것은 Matrix Factorization (MF) 방식입니다. 여러 논문들을 읽어보면 data dimensionality를 해결하기 위해서 MF를 사용한다고 하는데, 단순히 수학적인 계산 측면에서 보면 MF방식을 적용하기 위해서 행열 matrix 연산을 하는데 필요한 메모리도 감당하기 어렵습니다. MF방식을 따로 연구/구현해보지 않았기 때문에 자세하게 설명드릴 수는 없지만, 유저-아이템 레이팅 매트릭스에서 고유값 eigen vector를 구해서 행열을 분해하는 singular value decomposition (SVD)를 이용합니다. SVD의 자세한 설명은 위키피디어를 참조하시고, 간단히 말해서 N x M 레이팅 매트릭스 (R)를 a개의 고유값으로 분해한다면 N x a의 U 행열과 a x M의 V 행열로 분해해서, 다시 이들을 조합해서 missing value에 대한 예측치를 만들어주는 형태가 됩니다. (설명이 복잡한 것같은데, 더 궁금하면 구글링을...) 앞서 MF에서 SVD를 구하는 것도 계산이 클 수 있다고 말했는데, 최근에 로컬 업데이트를 통해서 SVD를 예측하는 방식도 나와있기 때문에 서비스에서 문제가 없습니다. 실제 Netflix에서도 몇 십억 건의 레이팅을 SVD로 분해했다고 하니, 서비스 적용에는 별 문제가 없습니다.

아주 러프하게 추천 알고리즘을 설명해드렸습니다. 다음 글에서는 유사도 측정방법이나 다른 고려사항들을 다루겠습니다.

추천시스템 전체 목록

  1. 추천 시스템과의 조우 (PR시리즈.1)
  2. 추천 시스템을 위한 데이터 준비 (PR시리즈.2)
  3. 추천대상에 따른 추천 시스템의 분류 (PR시리즈.3)
  4. 알고리즘에 따른 추천 시스템의 분류 (PR시리즈.4)
  5. 추천 시스템을 위한 유사도 측정 방법 (PR시리즈.5)
  6. 추천 시스템의 성능 평가방법 및 고려사항 (PR시리즈.6)
  7. 추천 시스템에서의 랭킹과 필터링 문제 (PR시리즈.7)
  8. 추천 시스템의 쇼핑하우 적용예 (PR시리즈.8)
  9. 개인화 추천 시스템에 대하여 (PR시리즈.9)
  10. 추천 시스템의 부작용 - 필터버블 (PR시리즈.10)
  11. 추천 시스템의 레퍼런스 (PR시리즈.11)
  12. 추천 시스템에 대한 잡다한 생각들 (PR시리즈.12)
  13. 추천 시스템을 위한 하둡 마훗 사용하기 (PR시리즈.13)
  14. 추천 시스템에 대해서 여전히 남은 이야기들 (PR시리즈.14)

==

페이스북 페이지: https://www.facebook.com/unexperienced

댓글을 달아 주세요