유저들이 정말로 원하는 컨텐츠는 무엇일까? — 우리의 추천시스템의 시작 (1)

Choi Geonu
StyleShare
Published in
6 min readJun 24, 2021

더 많은 사람들이 더 쉽게 자신만의 멋을 찾아갈 수 있도록

스타일쉐어가 유저들에게 주고싶은 가치를 보여주는 문장입니다.

스타일쉐어에서는 유저들이 자신의 스타일을 알아가고 찾아가는 가치를 주기 위해 많은 노력들을 해왔습니다.

인기있는 컨텐츠를 보여주고, 예쁜 데일리룩을 모아서 보여주고, 또 뷰티라는 큰 주제를 묶어서 보여주는 등 다양한 주제로 스타일들을 유저에게 제시해 왔습니다.

이렇게 다양한 컨텐츠들을 준비하면서 많은 유저들에게 사랑을 받아왔지만, 유저들은 지속해서 관심사가 변하고 발산했습니다.

이런 유저들의 관심사를 반영하고 따라가기 위해서 우리는 무엇을 해야할까? 에 대한 고민을 하였고, 이 고민에 대한 우리의 답변 중 하나인 컨텐츠 추천 시스템이 스타일쉐어에 적용되기 까지의 과정을 소개해 드리려고 합니다.

안녕하세요, 저는 스타일쉐어에서 백엔드 개발을 담당하는 최건우 입니다.

오늘 해볼 이야기는 우리가 사용한 추천모델에 대한 기술적인 깊은 이해 보다는, 우리가 어떻게 컨텐츠 추천을 시작하게 되었고 어떤 과정을 겪고있는지에 대해 이야기해보려고 합니다.

연관 스타일

스타일쉐어의 스타일(좌)과 그 스타일에대한 연관스타일(우) — 개선 전

스타일쉐어 앱에는 스타일을 자세히 볼 수 있는 스타일 상세 화면이 있고, 그 안에는 함께 볼만한 스타일인 추천 스타일(이하 연관 스타일)이 있습니다. 팀 내에서는 이 화면에 대한 개선 방안에 대한 고민을 시작했고, 다음과 같은 질문을 던졌습니다.

연관 있는 스타일이란 무엇이지?
비슷한 옷을 입으면 연관 있는 스타일인가?
같은 상품에 대한 리뷰면 모두 연관된 스타일 일까?

이런 기초적인 질문부터 다시 시작을 하며 어떤 컨텐츠를 제시해야 사람들이 좋아할지 고민을 시작했습니다.

기초적인 질문으로 돌아가고 나서 고민을 하다보니 이런 결론에 다다르게 되었습니다.

우리의 의견은 필요 없다, 사용자가 연관있다고 생각하는 컨텐츠가 연관이 있는것이다

물론 이런 결론이 뜬금없이 나온것은 아닙니다. 이를 확인하기 위해 사용자의 관심사를 기반으로 데이터를 조사해 보았습니다.

Matrix Factorization

사용자의 관심사 그 자체를 분석할 방법은 없을까 하는 고민에서 저희는 추천 알고리즘에 대해 조사해 보았습니다. 여러가지 추천 알고리즘 중 가장 구현하기 쉽고 진입장벽이 낮은 Matrix Factorization 기법을 사용하여 유저의 스타일 관심도를 분석해보았습니다.

Matrix Factorization이란 유저의 컨텐츠에 대한 관심도를 행렬 형태로 나타내고, 각 유저와 컨텐츠에 그 행렬을 가장 잘 나타낼 수 있는 벡터를 찾아 할당하는 알고리즘입니다.

영화 추천에서의 Matrix Factorization — 출처: Google Developers

유저와 컨텐츠에 벡터를 할당한다 이 이야기는 단순하게 이야기해서 각 컨텐츠 사이에 거리를 정의한다. 라는 의미 이기도 합니다. 여기서의 거리는 각 스타일에 대한 유저들의 관심도를 의미하게 되죠.

즉, 스타일간의 거리가 가깝다 라는 것은 비슷한 유저들이 관심을 가진 스타일이다 라는 의미가 됩니다.

그렇다면 거리를 정의할 수 있다면 무엇을 할 수 있을까요?

거리를 정의할 수 있다는것은, 아래 그림과 같이 관심사에 따라 스타일을 배치할 수 있게 된다는 것입니다.

스타일을 관심사에 따라 배치한것을 시각화한 그림

이렇게 스타일 혹은 유저에 벡터를 할당하는 것을 임베딩(Embedding) 이라고 부릅니다.

Firebase Analytics Event

Matrix Factorization을 수행하기 위해서는 유저들의 관심도를 알아내는것이 필수적입니다. 스타일쉐어에서는 이러한 유저들의 행동 기록을 수집하기 위해 Firebase의 Analytics 기능을 사용하고 있습니다.

Firebase에서 수집된 데이터는 Google Big Query에 저장되어있고, 이 데이터를 이용해 Matrix Factorization을 수행했습니다.

Alternating Least Squares

Matrix Factorization을 수행하는 알고리즘은 여러가지가 있지만, 그 중 구현이 가장 쉽고 실험 결과 학습시간대비 가장 괜찮은 결과를 보였던 Alternating Least Squares (ALS) 알고리즘을 사용하였고 Python으로 만들어진 implicit라이브러리를 사용해 구현했습니다.

다시 연관스타일

이러한 스타일 임베딩 과정을 통해

우리는 이러한 스타일 임베딩이 정말 유저들이 연관있다고 생각하는 컨텐츠를 의미하는지 궁금했습니다.

우선 이를 API로 만들어 화면에서 직접 결과를 보았습니다.

개선된 후의 연관 스타일

개선된 연관스타일 화면 — 우상단 컨텐츠는 고정 컨텐츠이다

회사 내부 인원에게만 새로운 알고리즘으로 API를 제공한 결과 상당히 괜찮은 결과가 나왔습니다. 하지만 내부 인원 눈에만 좋으면 끝이 아니지요. 일반 유저들을 대상으로 A/B 테스트를 진행해 결과를 살펴보았습니다.

A/B 테스트

A/B 테스트 결과 유저들의 관심사는 좋은 기준이었다는것이 명확해졌습니다.

  • 스타일 상세 화면에서 연관 스타일을 방문하는 횟수가 대조군(기존 로직) 대비 실험군(관심사 로직)이 400%더 높은 수치를 보여주었습니다.
  • 스타일 상세에서 연관 스타일을 1회 이상 방문한 유저의 비율인 전환률160%가 증가하였습니다.
  • 놀라운 결과로 연관 스타일을 1회 이상 방문한 유저의 경우 구매로 이어지는 구매전환률은 실험군이 13.5% 더 높은 전환률을 보여주었습니다.

모든 결과는 95% 이상의 신뢰도로 통계적 유의성을 가지는 결과였습니다.

우리가 깨달은 것

우리는 위 실험을 통해 유저의 관심사가 얼마나 중요하고 귀중한 자료인지를 알게 되었습니다. 유저들이 좋아할만한 컨텐츠는 우리가 아니라 유저들이 가장 잘 알기에 유저들이 어떤 컨텐츠를 좋아하는지, 그 컨텐츠를 어떻게 보여주면 좋을지 고민하게 되는 계기가 되었습니다.

(2부에서 계속)

--

--