AI 캐릭터챗 서비스인 케이브덕 내 기존 수동 큐레이션 추천 레일을 자동화하여 개인화 추천 시스템을 설계했습니다. 추천 모델을 리서치하고 가장 적합한 모델을 실제로 구현했으며, 서빙 로직을 고도화하여 모델이 보다 개인화된 랭킹을 할 수 있게끔 노력했습니다.
세부 목표:
1. 문제 정의 & KPI 체계 수립
1-1. 타겟 진단
1-2. KPI 퍼널 설계
2. 개인화 추천 시스템 구축 (zero to one)
2-1. 스코어링 & 블렌딩 구조 설계
2-2. 서빙 로직 설계
2-3. MMR
3. 온라인 테스트 & 개선 루프
로드맵
진행 프로세스
주제 1. 문제 정의 & KPI 체계 수립
EDA로 타겟을 진단 후, 유저 퍼널을 탐색 해 실험이 같은 기준으로 평가될 수 있는 KPI 체계를 마련하였습니다.
주제 1-1. 타겟 진단
채팅방 생성량은 많지만 유저 프로필 결측이 커 프로필 기반 추천이 어려운 상태임을 확인
EDA로 이 구조를 확인하고 행동 로그 기반 개인화를 프로젝트의 출발점으로 설정
주제 1-2. KPI 퍼널 설계
단일 클릭 대신 유저 사용 퍼널인 노출 - 클릭 - 채팅 - 채팅방 depth의 퍼널로 분해
주제 2. 개인화 추천 시스템 구축 (zero to one)
행동 기반 스코어링을 골격으로 두고 컨텐츠 기반 슬롯을 블렌딩해 상호보완적 추천 레일을 구조화하고, 서빙 로직과 MMR을 얹어 후보 생성부터 서빙까지 이어지는 추천 레일 전체를 구현하였습니다.
주제 2-1. 스코어링 & 블렌딩 구조 설계
행동 기반 스코어러로서 히스토리 피처 기반 W&D를 채택
캐릭터 임베딩을 통한 컨텐츠 기반 슬롯 로직 구성
주제 2-2. 서빙 로직 설계
비공개 / 신고된 캐릭터 등 스코어링할 필요가 없는 아이템을 배제
유저가 선택할 수 있는 토글별 (남성향/여성향, 해외 제작 캐릭터 숨김, 세이프티 모드) 시나리오 피처 구현
유저 취향 아이템 기반의 retrieval 구조에서 출발, 최근 취향성을 반영한 스코어링 후보 생성
주제 2-3. MMR
상위 relevance는 보존하고 하위 순위에서 중복된 아이템을 축별로 감점하는 position-dependent 방식 채택
주제 3. 온라인 테스트 & 개선 루프
구축한 개인화 레일을 선별된 유저들에게 선공개 후 받은 피드백을 바탕으로 모델 피처와 서빙 로직을 검증했으며, 개선된 모델을 실제 유저들에게 공개하여 KPI 지표의 유의한 상승을 확인하였습니다.
마무리 단계에서는 개선 루프와 운영 방안, 코드 안정화 문서를 전달하여 성공적인 운영 이관을 마쳤습니다.
성과 및 인사이트
주제 1. 문제 정의 & KPI 체계 수립
추천 품질을 측정하고 실험으로 비교할 수 있는 기준을 마련하였습니다.
유저 성별 미입력이 XX%, 연령 미입력이 XX%, 본인 인증 완료가 XX%로 프로필 기반 추천이 불가능하다는 점을 확인하고, 행동 로그를 타겟으로 하는 추천 구조를 정의
기존 큐레이션 추천 카드의 클릭 후 채팅 존재율 XX%를 베이스라인으로 확보
KPI 퍼널을 정의하고, 지표별 역할을 분리 (노출 대비 클릭: 발견 / 클릭 대비 채팅 시작: 클릭 후 품질)
주제 2. 개인화 추천 시스템 구축 (zero to one)
W&D 스코어러 + 컨텐츠 기반 슬롯의 블렌딩 구조와, 이 스코어링을 할 자격 필터, 컨텐츠 기반 retrieval과 MMR을 결합해 케이브덕 전체 캐릭터 풀에서 유저별로 XX개 캐릭터를 만들어내는 실 서비스 가능한 파이프라인을 남겼습니다.
프로젝트 과정 중 retrieval 구성은 점진적으로 고도화되었고, 최종본에서는 유저 내역 컨텐츠 유사도 기반으로 재구성되어 유저별로 random 대비 retrieval에서 W&D 점수가 양수로 전환됨을 확인
FM 기반 모델이나 단순 CF와 1차 비교 후 W&D 모델이 가장 안정적인 성능을 내는 것을 확인했고, 이후 고도화 단계에서는 이미지, 화풍 등의 피처를 추가한 안정형 모델을 최종안으로 선정
주제 3. 온라인 테스트 & 개선 루프
X일간 테스트한 데이터를 분석한 결과, 유저별 이중차분(DID)이 추천 레일이 존재하는 홈탭 전체에서 유저 일당 클릭과 채팅 시작, 24시간 내 대화량이 모두 유의하게 상승했고, 노출 대비 클릭 / 클릭 대비 채팅 또한 유의하게 상승
임베딩 파일과 모델 학습 결과, 서빙 로직을 완결성 있는 패키지로 전달하고, 피드백 → 모델 개선으로 이어지는 루프 문서를 이관해 재현과 재학습이 가능한 상태로 마무리
PM 소회
워프스페이스와 프로젝트를 진행하며 좋았던 점은 무엇인가요?
색다른 도메인에서 프로젝트를 해볼 수 있어서 인상깊었습니다. 또 기존 개인화 레일이 전무해 e2e로 데이터 가공부터 운영 방안까지 모든 과정을 경험해볼 수 있어서 좋았습니다. GH의 짧은 프로젝트 기간 때문에 테스트를 못 올려보거나 한 번 올리고 끝나는 경우가 많았는데, 워프스페이스에서 저희 개인화 알고리즘을 적극적으로 믿고 올려주셔서 결과 분석까지도 이뤄낼 수 있었습니다.
프로젝트 진행 중 겪었던 가장 큰 어려움은 무엇이었나요? 이를 어떻게 해결했나요?
저희가 리서치한 여러 모델에서 하나를 선택하기 위해 정성평가 과정을 거치는게 특히 어려웠습니다. 유저들에게 개인화가 정말 잘 될만한 모델인지 눈으로 확인해보는 절차가 필요했기 때문에 특히나 도메인 지식이 많이 필요했던 것 같습니다. 이후 선별된 유저들에게 직접 피드백을 받아 유저들이 실제로 어떤 식으로 서비스를 이용하는지 알아가면서 정성평가 과정에서 무엇을 중심으로 봐야 하는지 깨달을 수 있었던 것 같습니다.
이번 경험을 통해 어떤 인사이트나 역량을 얻으셨나요?
e2e로 알고리즘을 설계하고 개발 후 운영 방안까지 제공해드리는 과정에서 시행착오가 많았는데, 팀 개발에서 가장 중요한 것은 공유할 코드 구조를 일원화하고 그 구조를 유지하는 것이라고 느꼈습니다. 처음 공유본을 드리기 전 각자의 코드가 다른 부분이 많았고 하나로 합치는 데 시간을 많이 투자했기 때문에, 앞으로 팀 개발을 할 일이 있다면 처음부터 뼈대를 잘 만들어야 한다는 인사이트를 얻을 수 있었습니다.
향후 유사한 프로젝트를 진행할 학회원들에게 전하고 싶은 조언이 있나요?
추천시스템 개발을 할 때는 모델의 오프라인 평가 지표도 중요하지만 체감 정성 평가 또한 공존해야 한다는 점을 조언해주고 싶습니다. 특히나 AUC 같은 지표가 비슷하다면 내부 정성평가를 통해 여러 모델 중에 하나를 골라야 하기 때문입니다. EDA를 통해 명확한 모델 후보를 근거 있게 골라 처음부터 한 모델만 깊게 깎아보는 방향도 좋아 보입니다.