본문 바로가기

Tech Story

추천 시스템을 위한 데이터 준비 (PR시리즈.2)

두번째로 추천에 사용되는 데이터에 대해서 간단히 설명하겠습니다. 추천방식에 따라서 필요한 데이터가 달라지지만, 가장 일반적인 내용을 설명하고 추후에 특정 알고리즘이나 방식에 맞는 데이터는 별도로 설명하겠습니다. (특정 용어가 특정/다른 상황에서 적절하지 않을 수도 있습니다.)

추천의 기본 원리는 과거는 곧 미래다입니다. 그렇기에 추천을 위해서 필요한 데이터는 유저들의 행위 behavior 기록입니다. 상품 구매 이력, 이벤트 참석 이력, 기사를 공유했거나 like를 한 이력, 영화나 드라마를 보거나 평점을 남긴 이력 등의 모든 것들이 추천시스템에서 활용합니다. 그런 모든 이력들이 제품이나 컨텐츠에 대한 사용자의 선호/관심을 나타내는 지표로 사용합니다.

좀 더 구체적으로 쇼핑 추천을 예로 들겠습니다. A라는 사람이 특정 나이키 운동화를 웹에서 조회해본 것도 그 사람이 그 제품에 대한 선호를 보여주는 것이고, 더 나아가 그 제품을 구입했다면 더 확실하게 표시한 것입니다. 더우기 평점을 5점 (5점 스케일에서)으로 매겼다면 그 사람의 제품에 대한 만족도/선호도를 명시적으로 보여주는 것입니다. 댓글을 남긴다거나 추가로 더 구입한다거나 등의 모든 행위들이 사용자의 선호도 지표로 활용됩니다. 조금 복잡한 얘기가 될 수도 있지만, 쇼핑검색에서 특정 제품이 검색결과에 노출되었지만 그 사용자가 그 제품을 조회해보지 않는다면 이는 마이너스 (-) 선호도로 측정되기도 합니다. 선호도의 정도는 경우에 따라서 다양하게 해석이 됩니다.

이런 사용자의 아이템 선호도를 레이팅이라고 말합니다. 레이팅은 말 그대로 평점/별점을 매긴 것을 뜻합니다. 앞서 쇼핑에서 5점 스케일로 평점을 줬다면 이는 명시적 레이팅 explicit rating이라고 부릅니다. 그런데 특정 제품을 조회해봤다거나 구매했다 등의 행위에서는 조회여부 (0/1), 구매여부 (0/1)로 나뉘어질 뿐 명시적으로 점수화시킬 수 없습니다. 이런 경우는 암묵적 점수 implicit feedback이라고 부릅니다. 초기의 연구들이 명시점수에 기반해서 진행되었습니다. 그러나 명시점수와 암묵점수 사이에는 서로 장단점이 있기 때문에 요즘에는 둘을 동시에 사용하는 것이 일반적입니다. 물론, 명시점수가 존재치않는 경우가 더 많습니다.

명시점수의 경우에는 사용자의 선호도가 명시적으로 나타나기 때문에 추천하는 것이 조금더 직관적입니다. 그런데 암묵점수에 비해서 데이터 빈약도 data sparsity가 훨씬 큽니다. 즉, 유저들이 특정 제품을 구입하더라도 평점을 매기지 않는 경우가 허다합니다. Data sparsity는 바로 추천 알고리즘의 정확도와 연결되기 때문에 중요한 이슈입니다. 그래서 더 dense한 암묵점수를 명시점수의 보조역할로 사용하는 경우가 많습니다. (때로는 암묵점수만을 사용하는 경우가 더 많음) 물론 그렇다고 해서 암묵점수가 data sparsity가 없다는 얘기는 아닙니다. 명시점수가 암묵점수보다 더 심하다는 얘기입니다.

Data sparsity 이외에도 명시점수의 단점이 많이 있습니다. 대표적으로 점수의 편향이 있다는 점입니다. 사용자들이 소비한 모든 컨텐츠/상품에 대해서 평점을 남기는 것도 아니고, 남겨진 평점에 대한 신뢰도 문제가 있습니다. 저는 책을 많이 읽는데, 좋은 책을 읽었을 때는 시스템에 접속해서 4 또는 5점을 줍니다. 그런데, 마음에 들지 않는 책을 읽었을 때는 굳이 리뷰를 쓰지 않습니다. 모든 사람들이 저와 같이 점수를 준다면 4/5점대는 많은 데이터가 있는데, 1/2점대는 적은 데이터만 쌓여서 사용자의 선호를 명확히 구분하지 못해서 제대로된 추천이 불가능합니다. 뿐만 아니라, 사용자마다 점수 스케일이 다르다는 점입니다. 누구는 '그저그럼'이 3점이 될 수 있고, 다른 이는 4점이 될 수도 있습니다. 그리고 같은 유저더라도 상황에 따라서 다른 점수 스케일을 사용하는 점도 문제가 될 수 있습니다. 기분이 좋을 때는 4/5점을 남발하다가 기분이 나쁠 때는 1/2점을 줄 수도 있습니다. 이런 사용자 바이어스를 줄이고, 일관성에 맞도록 조정하는 방법도 연구의 한 축입니다.

명시점수에 노이즈가 많기 때문에, 최근에는 그냥 암묵점수를 사용하는 경우도 많아졌습니다. 명시점수에 비해서 더 많은 데이터를 확보할 수 있다는 것이 가장 큰 장점입니다. 명시점수에 비해서 선호도를 제대로 표현할 수 없다는 단점이 있지만, 이는 암묵점수를 어떻게 해석하느냐에 따라서 어느 정도 극복도 가능합니다. 특정 제품을 조회했으면 1, 아니면 0으로 구분하는 것이 아니라, 특정제품이 노출되었지만 조회하지 않았다면 -1, 노출되지 않았다면 0점, 조회했으면 1점, 그리고 구입까지 했다면 2점을 주는 식으로 레이팅을 달리할 수 있습니다.

추천 시스템에서 데이터와 관련해서 해결해야할 가장 큰 문제점은 데이터의 크기 data dimensionality 문제입니다. 넷플릭스의 유저 레이팅도 몇십억건이 넘는다고 합니다. 그런데 앞서 말했듯이 다양한 메타데이터를 사용해서 새로운 축이 생기면 더 큰 문제를 야기할 것입니다. SVD 기반의 Matrix Factorization에서는 로컬 데이터를 업데이트하는 방식으로 데이터의 스케일문제를 해결하기도 합니다. 최근에 많은 주목을 받고 있는 Big Data 기반으로 문제를 해결하기도 합니다. 그런데, 하둡 Mahout에 들어있는 CF를 사용해서 테스트를 진행해봤는데, 데이터 사이즈가 별로 크지도 않았는데 사용된 유사도에 따라서 메모리 문제가 발생하기도 했습니다.

이상의 유저레이팅은 보통 협업필터링 Collaborative Filtering에서 기본적인 데이터입니다. 여기에 더해서 Content-based Filtering (CBF)를 위해서 다양한 메타데이터도 사용이 가능합니다. 영화를 예로들면 특정 영화의 장르, 스태프나 출연진, 내용/줄거리 (에 사용된 키워드 등)이 메타데이터로 사용되고, 이들을 기준으로 관련 영화 (아이템)을 묶어서 추천해줄 수도 있습니다. 그리고 사용자에 대한 데이터도 사용됩니다. 사용자의 특성 (성별, 나이, 지역, 직업 등)에 따라서 제품에 대한 선호가 다른 경우가 많기 때문에 사용자 데모그래픽에 따른 그룹화 및 그룹별 추천도 가능합니다.

트위터나 페이스북의 성공으로 소셜관계 데이터는 최근에 가장 흔하게 사용되는 데이터 중에 하나입니다. 친구 또는 내가 선호하는 (팔로잉) 사람의 글이나 의견을 보여주는 형태입니다. 소셜 데이터가 추천에서 별 효과가 없다는 연구결과도 많지만, 적어도 추천의 신뢰도를 높여주는데는 효과가 있다고 합니다. 즉, '네 친구 XX가 추천한 글이야' 식으로 추천의 이유를 설명해주면, 추천된 글/제품이 별로더라도 결과를 이해하고 넘긴다는 것입니다. '너와 비슷한 누군가의 추천이야'보다는 '네가 알고 있는 누구의 추천이야'가 더 설득력이 있다는 얘기입니다.

간단하게 설명될 것같았는데, 의외로 글이 길어졌습니다. 여전히 추천에 필요한 데이터를 충분히 설명하지 못했습니다. 후속 글들에서 필요한 설명은 추가하겠습니다.

추천시스템 전체 목록

  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

반응형