Home 추천시스템
Post
Cancel

추천시스템

“추천”이 처음인 회사


이번 글에서는 스타일메이트의 크리에이터 추천 로직 기획&개발 관련해서 아이디어의 시작점과 간단한 여정을 소개합니다. 또한 추후에 사내에서 “추천” 뿐만 아니라 특정 목적에 맞는 분류 체계를 구축하기 위해서 고민해보면 좋을 것들을 알아보겠습니다. 기존 사내의 카테고리 항목들은 추천 로직에 사용하기에는 그 설명력이 충분하지 않았습니다. 또한 실무자별 카테고리를 부여하는 기준이 달라 추천 상의 “신뢰도”를 확보하는데 어려움이 있었습니다. 뿐만 아니라 인스타그램의 피드 이미지가 의사결정에 중요한 척도가 되는 만큼 이미지가 가진 정성적인 부분을 정량적으로 변환해야했습니다.

추천 알고리즘의 두 가지 종류


Contents Based Filtering

contents의 프로필을 작성하고 해당 프로필을 기반으로 “유사성”을 찾아 추천하는 것을 말합니다. 예를 들어 내가 선호하는 제품의 프로필과 유사한 제품을 추천해주거나, 나와 유사한 프로필을 가진 다른 유저가 선호하는 아이템을 찾아 추천합니다.

Collaborative Filtering

사용자의 과거 행동 데이터를 기반으로 추천합니다. 예를 들어 내가 소비한 아이템에 대해 남긴 평가들을 바탕으로 사용자의 선호를 파악하고 “좋은 평가를 남길만한” 새로운 아이템을 추천합니다.



두 방식 모두 장단점이 뚜렷합니다. Contents Based Filtering 방식의 경우 프로필을 생성하는 과정에 막대한 인적 자원이 투입되어야하며, 그 과정에 “주관”이 개입되어 데이터셋을 생성하는데 어려움이 있습니다. 반면에 Collaborative Filtering의 경우, 행동 데이터가 적은 신규 사용자를 대상으로 Cold Start 문제가 발생합니다. 그래서 두 가지 방식을 혼합해 사용하기도 하고, 서비스 시점별로 다른 알고리즘을 적용하기도 합니다.

일반적으로 행동 데이터가 충분할 경우 Collaborative Filtering 방식의 정확도가 더 높다고 알려져 있지만, 미디언스는 플랫폼 내 사용자들의 행동 데이터가 충분치 않았습니다. 거기에 더해 이제 막 런칭한 스타일메이트의 경우는 더더욱 행동 데이터가 부족했기에, Contents Based Filtering 알고리즘을 채택해 초기 추천을 위한 로직을 구상했습니다.

그래서 이미지에 코사인 유사도(Cosine-Similarity)?


가장 먼저 이미지 분석하면 떠오르는 CNN 기반의 딥러닝 모델을 적용해볼까 고려해봤습니다. 하지만 이내 CNN이 가진 막대한 연산 비용에 대한 걱정이 앞섰고, 상용 서비스들을 사용해보는 것도 지불해야할 금액 대비 성공 가능성이 낮다고 보여졌습니다. 클라우드 환경에 대한 자신감도 부족했습니다. 그래서 다음 조건을 만족하는 모델에 대해 고민하기 시작했습니다.

딥러닝 보다는 머신러닝 기반의 간단한 모델

  • 연산 비용이 적은 모델.
  • S3 & Lambda 환경만으로 구현할 수 있는 간단한 모델. (Library dependency, timeout 등)
  • 모델의 결과를 직관적으로 이해할 수 있는 모델.

초기 OTT 서비스에서 사용했던 전력이 있으며, AI 학습 시 가장 먼저 만나게 되는 코사인 유사도가 적합해보였습니다. 연산 비용이 적었으며, 별도의 library를 사용하지 않고도 가볍게 구현할 수 있는 모델이었습니다. 또한 초기 학습자들을 위한 모델인 만큼 PoC 결과를 사내에 공유하기에도 적합해 보였습니다.



그러나, 하지만..!


우선 과거 OTT 서비스에서 사용했던 Concept을 최대한 차용하되, 현재 데이터팀&스타일메이트본부의 리소스를 고려해 내용을 조금씩 변경했습니다. 또한, Contents based Filtering 알고리즘의 최대 제약 사항인 데이터 생성 과정에 개입되는 주관을 최소화 하기 위해 가이드 제작 및 라벨링 투입 인원도 최소화했습니다.

그러나 진짜 문제는, 우리가 흔히 접하는 추천 대상은 정적 아이템이지만 미디언스&스타일메이트의 추천 대상인 크리에이터들은 동적 아이템이라는 점이었습니다. 다시 말해, 크리에이터가 가진 속성들은 계속해서 변화하며, 우리가 작성한 크리에이터들의 프로필과 광고주들이 보고 있는 프로필이 일치하지 않을 수 있었습니다.

따라서 우리는 프로필 작성 단위를 채널에서 포스트 단위로 낮추되, 여러 포스트들이 채널을 구성한다는 점을 고려해 최소 프로필 수를 늘렸습니다. 광고주들이 크리에이터별로 좋다, 나쁘다를 판단할 수 있는 충분한 데이터를 우리가 가진 데이터셋 내에서 제공해야했고, 저희는 인스타그램 UI 상 처음으로 보이는 9장 내외를 “최소한”으로 보았습니다.

그 결과 저희는 하나의 채널에서 “대표” 이미지 8장을 추출해 데이터셋을 쌓기 시작했습니다. 또한 광고주들이 인스타그램 피드가 아닌 저희가 제공하는 데이터를 통해 크리에이터들을 평가하도록 유도했습니다. 제안하는 크리에이터들에 대한 판단 근거를 우리와 광고주 측 양쪽을 최대한 동일하게 유지하기 위해서 입니다.

요컨대, 그간의 과정을 정리하자면 다음과 같습니다.

  1. 사내의 데이터 문화와 개발환경 및 리소스 등을 고려한 추천 알고리즘 선정
    • Contents based filtering 알고리즘 방식의 tag 기반 Cosine-Similarity
  2. Contents based filtering 알고리즘이 가지고 있는 리스크 대처 방안
    • 데이터 생성 인원 최소화 및 지속적인 가이드 업데이트
  3. 계속해서 변동이 일어나는 “채널 피드”에 대한 대처 방안
    • 데이터셋 단위에 대한 재정의 (채널 → 포스트)
  4. 크리에이터에 대한 판단 기준이 서비스 측과 브랜드가 불일치
    • 광고주들이 우리의 가용 범위 밖에 있는 인스타그램에서 판단하기 이전에, 크리에이터에 대한 충분한 정보를 제공함으로써 기준 일치 시도



앞으로 우리 회사의 “추천”은 어떻게 발전할 수 있을까?


많은 제약사항들을 우회해서 프로토타입 버전을 마무리했지만 여전히 풀어야하는 숙제가 많습니다.

Contents based filtering 알고리즘이 가진 태생적 한계와 관련있다.

  1. 추천 과정에 사용될 데이터 생성에 막대한 인적 자원이 필요하다는 점.
  2. 투입되는 인적 자원량을 늘릴수록 데이터셋 생성에 개입되는 주관을 대처하기 어렵다는 점.

물론 위 방안에 대해 다름의 대처방안을 구상해놓기는 했지만, 결국 특정 시점이 지나면 Collaborative Filtering 알고리즘 방식을 전체, 혹은 일부분 반영해야할 것입니다. 그래야 실무담당자들이 하나하나 “프로파일링”해 데이터셋이 생성되는 것이 아닌, 서비스에서 자연스럽게 데이터가 생성될 겁니다.

가장 먼저 미디언스&스타일메이트에 반영되어야할 데이터는 서비스 내 컨텐츠 객체에 대한 평가 점수입니다. 이 때 컨텐츠 객체는 포스트 뿐만 아니라, 크리에이터에 대한 평가, 광고주(브랜드)에 대한 평가, 캠페인에 대한 평가 등 모든 것이 포함됩니다. 추가로, 각 평가점수를 설명할 수 있는 요인에 대한 (보다 상세한) 행동 로그가 있다면 평가 점수에 대한 질을 향상시킬 수 있습니다.

This post is licensed under CC BY 4.0 by the author.