.__.

[추천 시스템 입문] CH02. 추천 시스템 프로젝트 본문

추천 시스템/추천시스템입문

[추천 시스템 입문] CH02. 추천 시스템 프로젝트

yesjiyoung 2024. 1. 17. 00:34

들어가는 글 


2장에서는 추천 시스템 프로젝트를 어떤 팀과 어떤 프로세스로 진행하는지에 관해 설명한다. 

이를 통해, 추천 프로젝트를 진행하려면, 어떤 팀들과 협업해야하는지 그리고 어떤 프로세스를 통해 구현이 가능한지에 대해 공부해보려한다.

 

2.1 추천 시스템 개발에 필요한 3가지 스킬


데이터 과학자에게 필요한 스킬셋으로 "비지니스 문제 해결 능력", "데이터 사이언스 능력", "데이터 엔니어링 능력"의 3가지 스킬이 필요하다고 한다. 

추천시스템 개발에도 위의 세 가지 스킬이 필요하다. (당연히, 검색시스템 개발자도 위의 세 가지 스킬이 필요하다!)

 

비지니스 문제 해결 능력 

먼저, 추천 시스템을 도입함으로써 무엇을 기대할 수 있는지 정의하는 것이 중요하다고 한다. 구체적으로는 추천 시스템을 도입하여, 사용자의 어떤 행동 변화를 기대하는가에 관한 Key Goal Indicator(KGI) 또는 Key Performance Indicator(KPI) 책정이 매우 중요하다.

 

- 무엇을 기대할 수 있는지 정의 - 

클릭율, 구입률, 체류율, 트위터 게시 수 등 어떤 사용자의 어떤 행동을 최대화하고 싶은지에 따라 구현할 추천 시스템이 달라지기 때문이다.

 

- KPI를 책정 -

대상 시스템에 관해 숙지하고, 서비스상에서의 사용자 행동에 관해 깊이 이해해야, 적절한 KPI 설정이 가능하다.

 

예시, "youtube 추천 시스템의 KPI"의 경우 과거에는 시청 동영상 수, 현재는 사용자의 전체 시청 시간이라고 한다. (현재는 바뀌었을 수 있음) KPI가 시청 동영상 수 일때에는, 매력적인 섬네일 동영상만 추천되는 문제가 발견되었기 때문. 그때는 동영상 시청에 대한 각각의 로그를 세세한 단위로 얻을 수 없었기 때문에 정확한 시청 로그를 얻을 수 있도록 로그를 재정비 했다고 함. 

 

KPI를 책정할 때에는 현재 얻은 데이터에서 생각하지 말고 사용자 행동의 본질을 담은 지표부터 먼저 검토한후, 해당 데이터가 없다면 개발자와 협력하여 로그를 정비할 필요가 있다. 
➡️내가 생각한 이 서비스의 KPI를 미리 정의하고, 현재 로그 정의서로 뽑을 수 없는 지표라면, 새롭게 로그를 쌓아달라고 요청할 필요가 있다는 뜻! 

 

데이터 사이언스 능력

비지니스 목표를 달성하기 위한 이상적인 추천 시스템을 실제로 구현 가능한 추천 시스템으로 만들어내는 과정에서 데이터 사이언스 능력이  요구되는데, 이는 데이터의 양과 종류, 비지니스에 필요한 추천시스템의 구현 복잡도에 따라 다르다. 

한 번에 이상적인 추천 시스템을 만드는게 아니라, 우선 전통적인 방법을 이용해 얼만큼의 정확도가 나오는지 확인한 후, 이상과 현실의 갭이 너무 크지 않은지 검토하며 적정 비지니스 관련 부서와의 커뮤니케이션하는 것이 중요하다. 

➡️거창한 모델부터 사용하는 것이 아니라, 단순하고 명확한 전통 추천 시스템 방식부터 접근해보는 것도 좋다는 뜻! 

시행착오 과정에서 데이터의 성질이나 각 추천알고리즘의 장단점을 파악해나가는 것이 중요하다. 

 

- 단순한 추천 시스템 ex. 인기 상품 추천, 신규 상품 추천 

SQL만으로도 구축이 가능하다. 

 

- 살짝 복잡한 추천 시스템 ex. Collaborative Filtering / Content-based 추천 

오픈 소스 코드 활용 

 

- 독자적으로 정식화한 추천 알고리즘을 검토 ex. 아이템 or 사용자의 정보를 충분히 고려할 수 없는 경우 

논문 조사 → 자사 데이터에 적용할 수 있도록 수식이나 코드를 개선 

 

 

데이터 엔지니어링 능력

추천 시스템을 실제 서비스화할 때에는 다양한 비지니스 요건을 고려하여 구현하여야하며 시스템을 안정적으로 가동시켜야한다. 

 

예시, 1일 1회 메일을 이용하여, 모든 사용자에 대한 추천 상품 리스트를 제공하는 경우 24시간 내에 데이터 생성이 끝나야한다. 만일 100시간이 걸린다? 실제 서비스에 나갈 수가 없는거지 ... 따라서, 계산이 빠르게 완화되도록 처리를 병렬화하거나 데이터베이스 설계, 튜닝 등을 해야한다. 그리고 매일 추천 시스템에 사용하는 데이터를 가공하고 추천 목록작성 연산을 수행하며 추천 목록을 데이터베이스에 저장하는 파이프라인을 조정해햐한다. 
➡️기존 MapReduce job 에서 Spark job으로 변환하면서, 모듈 수행시간을 단축시킨 것 -> 이것은 나의 엔지니어링 경력이다 ! ! 

 

 

2.2 추천시스템 프로젝트 진행방법


프로세스를 7단계로 나눈 후, 위의 세 가지 역량을 가진사람이나 팀과 협업하는 방식을 공부해보자.

1. 과제 정의
2. 가설 수립
3. 데이터 설계/수집/가공
4. 알고리즘 선정
5. 학습/파라미터 튜닝
6. 시스템 구현 
7. 평가 및 개선

 

1, 2, 7단계는 비지니스 부서에서 담당하고 3,4,5,6,7은 데이터 과학자나 데이터 개발자가 맡아 프로젝트를 진행함.

 

2.2.1 과제 정의


비지니스 목적을 명확히 해야한다. 예를들어, "1개월 매출을 2배로 늘리고 싶은 경우" 그것을 한층 더 잘게 나누어 사용자 1명당 매출을 2배로 할 것인지, 사용자 수를 2배로 할 것인지와 같이 비지니스 지표(KPI)를 결정해한다.

 

- KPI : 1개월 매출을 2배로 만들기 위해 1인당 매출

- 목표 : KPI를 2배로 늘리는 것을 목표

 

이렇게 KPI와 목표를 저장했다면, 1인당 매출을 2배로 늘리기 위해 어디를 늘릴 수 있는지 분석한다.
→ 데이터 분석을 통한 정량적 방법, 사용자와 인터뷰하는 정성적 방법 

 

- 정량적 분석 

사용자 행동 로그를 통해 "애초에 검색한 사용자가 적다", "검색하는 사용자는 많지만 최초 검색 결과 페이지에서 이탈하고 만다"와 같이 현재 상태의 과제를 알 수 있다. 

 

- 정성적 분석

"어째서 애초에 검색한 사용자가 적은지", "어째서 최초 검색 결과 페이지에서 이탈했는지" 에 대해서는 데이터로 조사하는 것보다는 직접 사용자에게 물어봤을 때 시사점을 알 수 있다. 

➡️고중경팀에서 관리하는 VOC 등을 통해 확인할 수 있다. 

 

정량적/정성적 분석을 통해 각 과제의 중요도를 결정한다. 

예를들면, 아래와 같이 중요도를 설정할 수 있다. 

 

<이미지>

 

중요도 높은 과제 

- 너무 많은 아이템이 표시되어 원하는 아이템에 도달하지 못해 이탈률이 높다.

- 각 아이템의 상세 화면에서 해당 아이템과 비슷한 아이템을 알 수 없어 이탈율이 높다.

 

 

2.2.2 가설수립


각 과제를 해결하는 방법과 그것을 실현하기 위한 비용을 검토하고 비용대비효과(ROI = Return On Investment)가 높은 이니셔티브부터 선정한다.

 

➡️아 그래서 ROI가 높은 과제들이 우선순위에 놓이는거구나 ㅎㅎ .. 

 

2.2.3 데이터 설계/수집/가공


자사의 서비스에 어떤 데이터가 축적되어 있는지 정리하고, 그 데이터로 추천 시스템을 구축할 수 있는지 검토한다.

더보기

보통 추천 시스템 개발에서 필요한 데이터는 아래 2가지이다.

- [사용자와 아이템의 콘텐츠 정보]
   ⚑ 사용자 정보 
      - 프로필 정보 - 나이/성별어떤 장르의 아이템을 좋아하는가? ➡️선호 카테고리
  ⚑ 아이템 정보 
      - 아이템의 설명문, 태그, 카테고리, 등록일  
- [사용자와 아이템의 인터랙션 정보]
   - 열람 / 북마크 / 구입 / 시청 / 평가 등의 정보  

서비스 초기단계에는, 인터랙션 정보가 적기 때문에 우선 아이템 정보를 사용한 추천 시스템 구축부터 검토해야한다. 

 

<예시 상황1>

- 추천시스템 -
아이템에 "식품" 또는 "전자기기"라는 카테고리를 나타내는 태그가 부여되어 있을 때는 아이템의 태그 데이터를 사용하여 태그가 일치하는 것을 추천하는 시스템을 생각해보자.

 

- 데이터 확인 사항 -

먼저 각 아이템에 태그가 확실히 부여되어 있는지
(만일, 일부 아이템에는 태그가 없거나, 태그가 잘못붙여져 있다면 이를 직접 정리해야함 → 필요시, 크라우드 소싱 이용) 

 

<예시 상황2> 

- 추천 시스템 -

'이 아이템을 열람한 사람들은 이 아이템을 열람하고 있습니다' 라는 추천 시스템을 구현하는 경우, 알람 로그에서 봇 등을 활용해 부적절한 로그가 제거된 데이터를 준비해야함.

 

 

2.2.4 알고리즘 선정


어떤 추천 알고리즘을 사용할지 결정한다. 알고리즘 계산 시간, 필요한 데이터, 요구되는 예측 정확도 등 다양한 관점에서 비지니스 목표에 적합한 것을 선택한다. 

서비스 초기에는 먼저 간단한 알고리즘부터 구현하는 것이 좋다. 아래 그림과 같이 머신러닝 모델과 마찬가지로 일정한 비용을 투입하면, 처음에는 어느 정도의 정확도를 얻을 수 있다. 하지만 정확도를 95%에서 96%로 올리는데에는 막대한 비용이 든다.

➡️실제로 자동 오타교정 모델을 만들 때, 첫 머신러닝 시도에서는 95%이상의 precision이 나왔는데, 결국 98% 이상의 precision을 내기위해 계속 실험의 실험을 반복했다는 점이 기억에 남네... ㅎ

 

2.2.5 학습/파라미터 튜닝


추천 시스템의 학습과 튜닝을 수행하고 실제 서비스로 출시하기 전에 과거 데이터를 사용하여 온라인으로 추천 시스템의 좋고 나쁨을 검증한다. 

모델의 Recall, Precision 도 중요하지만, 구체적으로 이 아이템을 넣으면 어떤 아이템이 나오는지 확인하고 그 결과가 납득되는지 확인해야한다. ➡️weight 조정이 가능한 데모페이지 개발을 해보는 것이 좋겠다. 비지니스 관련 부서와 의논할 때 추천 결과의 구체적인 사례를 데모페이지로 제시한다면, 알고리즘의 차이를 쉽게 확인 할 수 있다.

 

온라인 검증시 데이터 편향에 주의해야한다.

예를들어, 아마존 별 5개의 평가 데이터에는 별1개에서 5개의 평균값이 균등하게 존재하지 않음. 별 5개가 많다는 편향이 존재. 그것은 상품에 호감을 가진 사람이 주로 평가하는 경향이 있기 때문.

 

그 밖에도 검색 엔진의 영향을 받은 편향도 존재한다.

검색결과 상위에 나타나는 것은 클릭하기 쉽고, 하위에 있는 것은 클릭하기 어렵다. 이 데이터를 기반으로 어떤 처리도 하지 않고 행동 이력 기반의 추천 시스템을 만들면, 검색 엔진의 영향을 받아 검색 결과 상위의 것만 잘 추천될 수도 있음.

 

그러니, 이러한 편향들을 제거하여 추천 시스템을 만들고 평가해야한다!

 

2.2.6 시스템의 구현 


실제 비지니스엗서 자주 사용되는 배치추천과 실시간 추천에 관해 설명 → 자세한 내용은 6장에서 

배치 추천

- 1일 1회 또는 1주 1회 등 정해진 시점의 정보를 기반으로 추천 목록을 업데이트하여 사용자에게 제공하는 것 

- 추천 목록 : 추천 모델 학습 + 추천 모델에 의한 예측 

   - 추천 모델 학습 → 매번 새롭게 학습하면 신규 아이템까지 추천할 수 있어 좋지만, 학습시간이 걸릴 때에는 타협해서 1주일에 한 번 학습하기도 한다. 

  - 추천 모델에 의한 예측 → 사용자가 얼마나 되는지에 따라 계산 구조가 달라진다. 사용자가 10만명이고 각 사용자마다 추천 리스트를 만드는 경우에는 한 사람의 추천 목록을 만드는데 드는 시간이 1초라고 가정하면 10만초 = 27.8시간 소요됨 → 따라서, 이를 고속화하기 위해 병렬처리 등의 시도가 추가로 필요함.

 

실시간 추천

- 사용자의 직전 행동 이력을 반영해 추천 목록을 만드는 것이다. 사용자의 행동 이력을 즉시 반영하려면 데이터의 동기나 실시간 연산 등 폭넓은 엔지니어링 기술이 필요함.

 

실제 시스템에 삽입할 때에는 사용자 수나 아이템 수에 따라 시스템 구성이 달라지며, 추천이 실시간으로 이루어지는가에 따라 또 달라진다.

 

 

2.2.7 평가 및 개선


- A/B테스트 진행 

- A/B테스트가 어려운 경에는 출시 전후를 비교 (단, 시계열에 따른 트렌드 등을 고려해 평가해야한다.)

 

2.3 정리


추천 시스템 프로젝트 진행시 필요한 3가지 역량(비지니스 역량, 데이터 사이언스 능력, 데이터 엔지니어링 능력)과 프로젝트 진행방법을 7단계 프로세스로 나누어 공부했다. 

먼저 비지니스 목표를 결정하고, 데이터와 사용자 조사를 통해 현재 상태의 과제 정확도를 높이며 비용대비 효과가 높은 이니셔티브를 수행하는 것이 가장 중요하다.