Project/개인 Project

[Project] 칵테일 추천 알고리즘 설계 - 기본 추천 알고리즘 -

강_토발즈 2025. 3. 24. 17:39

 

현재 진행 중인 프로젝트에서, 사용자 (로그인 사용자 혹은 비로그인 사용자) 에게 칵테일을 추천해주는 기능을 담당하고 있고, 이 추천 칵테일을 어떠한 알고리즘으로 설계하여 노출시킬지에 대한 과정을 기록하고자 한다.

포스팅의 흐름은 먼저 알고리즘에 대한 소개를 시작으로, 왜 해당 자료들을 사용해서 알고리즘을 만드려고 하는지에 대한 타당성을 기술한다. 이후 실제 알고리즘을 통한 칵테일 순위를 도출하는 예시를 보여주는 것으로 마무리 하고자 한다.

 

 

1. 소개

  •  알고리즘의 목적
     로그인 사용자와 비로그인 사용자에게 맞춤형 칵테일을 추천하여, 각 사용자에게 최적화된 경험을 제공하고자 한다.

  •  추천 알고리즘의 효과
    개인화된 추천은 사용자가 원하는 콘텐츠를 쉽게 찾을 수 있게 하여 만족도를 높인다. 또 사용자가 관심 있는 칵테일을 추천받음으로써, 웹페이지에 더 오래 머물게 되어 이탈률이 감소한다.
    이와 관련된 연구로, "A Survey of Collaborative Filtering Approaches" (Bobadilla et al., 2013)에서는 추천 시스템이 사용자 경험을 개선하는 데 어떤 효과를 미치는지 설명하고 있다.

  • 데이터 소스
    <비로그인 사용자>
    Google Trend API: 칵테일 검색량 데이터
    Naver Trend API: 칵테일 검색량 데이터

    <로그인 사용자>
    Google Trend API: 칵테일 검색량 데이터
    Naver Trend API: 칵테일 검색량 데이터
    조회수: 웹페이지 내에서 각 칵테일의 조회수
    좋아요: 사용자들이 관심을 표시한 칵테일의 좋아요 수

 

2. 왜 Google 과 Naver의 검색량을 이용하는가?


칵테일 추천 알고리즘에서는 검색량이 증가한 칵테일을 기준으로 추천하고자 한다. 이를 위해 Google과 Naver의 검색량을 활용하는 이유는 다음과 같다.

  • 소비자 관심의 지표

    검색량의 증가는 소비자 관심의 직접적인 지표로 작용한다. 많은 사람들이 검색하는 키워드는 그만큼 관심을 받고 있다는 의미.
    실제로 Google Trend 데이터를 사용한 연구에서는 검색량이 증가한 키워드가 실제 판매 예측에 유용하다는 결과가 발표었고, 이 내용은 "The Role of Google Search in Predicting Future Sales" (Luca et al., 2016)에서 확인할 수 있다.

  • 검색 엔진의 시장 점유율

    StatCounter(1999년에 시작된 웹 트래픽 분석 웹 사이트)에 따르면, Google은 전 세계 검색 엔진 시장 점유율의 약 92%를 차지하고 있다. 한편, Naver는 대한민국 내에서 약 70%의 점유율을 기록하고 있다.
    이는 사용자들이 주로 이 두 플랫폼을 통해 정보를 검색하고 있음을 나타내며, Google 과 Naver 의 검색량은 대부분의 소비자 행동을 반영한다고 할 수 있다.

  • 구매 전환 가능성

    많은 사람들이 사용하는 검색 엔진에서 검색량이 높은 키워드는 소비자의 구매로 이어질 가능성이 높다. 즉, 색량이 증가한 칵테일은 소비자들의 관심을 끌고 있으며, 추천할 만한 가치가 있다.

3. 사용자 활동 기반 요소 (조회수, 좋아요)의 활용 이유

 

칵테일 추천 알고리즘에서는 사용자가 웹페이지에서 남긴 활동 흔적(조회수, 좋아요)을 점수로 반영하여 추천에 활용하고자 한다. 사용자 활동 기반 요소에 가중치를 부여하는 이유는 다음과 같다.

 

  • 선호 반영

    가중치 기반 추천 시스템은 다양한 요소(사용자의 활동)에 가중치를 부여하여 사용자 선호를 효과적으로 반영할 수 있다.
    "Collaborative Filtering for Implicit Feedback Datasets" (Yifan Hu et al., 2008)에서는 사용자 행동 데이터를 활용하여 추천의 정확성을 높이는 방법을 다루고 있고 이러한 방법으로 사용자의 활동을 효과적으로 이용할 수 있다는 것을 설명한다.

  • 효과적인 사례 :  Netflix의 추천 알고리즘

    -협업 필터링: 비슷한 취향의 다른 사용자들이 좋아한 콘텐츠를 추천한다. 예를 들어, A와 B가 비슷한 콘텐츠를 시청한 경우, A가 아직 보지 않은 B가 좋아한 콘텐츠를 추천한다.
    -콘텐츠 기반 필터링: 사용자가 과거에 선호한 콘텐츠의 특성을 분석하여 유사한 콘텐츠를 추천한다.
    -하이브리드 접근법: 협업 필터링과 콘텐츠 기반 필터링을 결합하여 더욱 개인화된 추천을 제공한다.
    -> 향후 협업 필터링과 유사한 방식을 채택하여 사용할 예정

  • 결론

    사용자의 활동을 기반으로 칵테일을 추천하는 방식은 더욱 만족스러운 사용자 경험을 도출할 수 있다. 이는 사용자가 자신의 취향에 맞는 콘텐츠를 쉽게 발견할 수 있도록 도와줄 수 있다.

 

4. 알고리즘의 구성

4-1. 비로그인 사용자

 

- Google Trend 점수 : 특정 검색어의 증가량을 G 라고 할 때, Google Trend 점수는 0.92 * G 로 설정

- Naver Trend 점수 : 특정 검색어의 증가량을 N 이라고 할 때, Naver Trend 점수는 0.7 * N 으로 설정

- 만약 "마티니" 검색어의 Google 검색엔진 증가량이 60이고, Naver 검색엔진 증가량이 50이라면

  • Google Trend 점수: 0.92 × 60 = 55.2
  • Naver Trend 점수:  0.70 × 50 = 35
  • 마티니의 점수 = 90.2


4-2 로그인 사용자

 

- Google Trend 점수 : 특정 검색어의 증가량을 G 라고 할 때, Google Trend 점수는 0.92 * G 로 설정

- Naver Trend 점수 : 특정 검색어의 증가량을 N 이라고 할 때, Naver Trend 점수는 0.7 * N 으로 설정

 

- 기타 점수들 : 칵테일의 총 좋아요 갯수 * w1 + 칵테일의 총 조회수 * w2     (w1 = 0.6, w2 = 0.4)

-만약 "마니티" 검색어의  Google 검색엔진 증가량이 60이고, Naver 검색엔진 증가량이 50, 좋아요수가 50, 총 조회수 100 이라면,

  • Google Trend 점수: 0.92 × 60 = 55.2
  • Naver Trend 점수:  0.70 × 50 = 35
  • 기타 점수 : 50 * 0.6 + 100 * 0.4 = 70
  • 마티니의 점수 = 160.2

5. 알고리즘 사용 방법 및 향후 계획

  • API 데이터 저장 및 접근 방법

    방법 : Google과 Naver의 검색 증가량 데이터를 1주일 또는 1달 단위(협의 필요)로 데이터베이스(DB)에 저장하여 사용한다.

    이유 : 외부 API 사용량에 제한이 있어 매번 요청할 수 없기 때문에, 주기적으로 데이터를 저장함으로써 API 요청 횟수를 줄이고 , 혹시 모를 오류에 대비해 시스템의 안정성을 높일 수 있다.

  • 실시간 데이터 반영

    방법 : 총 조회수 및 총 좋아요 수는 실시간으로 반영하도록 설계한다.

    이유 : 사용자에게 최신 정보를 제공함으로써 가장 인기 있는 칵테일을 추천할 수 있어, 사용자 경험을 향상시키고 만족도를 높인다.
    하지만 향후 접속자가 많아지고 데이터 사용량이 증가할 경우, 서버의 메모리 사용량이 증가할 가능성이 높다. 이럴 경우 특정 구간을 기준으로 점수를 환산하여 최종 점수에 합산하고, 이 점수를 DB에 저장하는 방식으로 변경하고자 한다.

  • Today's Recommended Cocktail

    방법 : DB에서 불러온 API에 따른 가중치에 실시간 총 조회수 및 총 좋아요 수를 합산하여 칵테일 키워드들의 순위를 매기고, 가장 높은 순위의 칵테일 5가지를 사용자 화면에 노출시킨다.

    이유 : API 가중치와 실시간 데이터를 결합하여 보다 정확한 추천 정보를 제공함으로써, 사용자에게 유효한 추천을 할 수 있다.

  • 또 다른 추천 알고리즘의 대한 개발

    방법 : Netflix 의 협업 필터링 알고리즘을 방식을 도입하여, 나와 비슷한 사용자의 취향을 고려하여 칵테일을 추천받을 수 있도록 한다. 쿼리 사용 및 자료구조에 대한 사용에 대한 장단점을 분석하여, 메모리를 최대한 적게 사용하고 서버도 안정적으로 작동할 수 있는 방법을 모색해보도록 한다.

    이유 : 보다 정교한 알고리즘으로 사용자 만족도를 높일 수 있고, 다양한 방법으로 서버 최적화에 대해서 생각해고 구현할 수 있다.