24편 - 세션 기반의 다음 장소 추천받기
여행! 여행은 일상에서 벗어나 새로운 경험을 누리며, 지난 스트레스를 해소하고 소중한 사람들과 특별한 순간을 만들어내는 설렘으로 넘쳐납니다. 새로운 장소의 낯섦은 여행의 매력이기도 하죠. 하지만 여행지에서는 ‘어디 가지?’, 뭐 하지?’, ‘무엇을 먹지?’에 대한 고민으로 시간을 허비하기도 합니다. 그래서 열심히 검색을 하고 인스타그램과 같은 SNS를 부단히 찾아보게 되죠.
그래서 생각했습니다. 여행지에 대한 정보를 찾는 시간은 여행을 더욱 흥미롭게 만들기도 하지만, 낯선 여행지에서도 개인의 여행 패턴을 기반으로 다음 여행지를 추천하는 티맵 서비스가 있다면 어떨까? 소중한 사람과 더 특별한 추억을 쌓을 수 있지 않을까?
티맵은 국내 내비게이션 서비스 중 점유율 1위로, 하루 평균 4천만 킬로미터 이상의 주행 경로를 안내합니다. 연단 위로 환산하면 무려 500억 킬로미터 이상의 길안내가 이뤄지고 있는 거죠. 저희는 티맵이 확보한 이 엄청난 데이터와 딥러닝 기술을 활용하여 '다음 여행지 추천' 서비스를 개발했습니다.
데이터 정제
여행에 특화된 서비스를 제공하기 위해서는 전체 주행 데이터에서 ‘여행’이라는 패턴을 정의하고 추출하는 과정이 필요했습니다.
사용자가 단순히 관광지를 방문한 경우를 전부 추출할 경우 일시적인 방문인지, 여행의 목적을 가졌는지를 구분하지 어렵습니다. 일시적인 방문과 여행의 목적으로 보다 명확하게 구분하기 위해서는 숙박이 중요한 요인임을 데이터를 탐색하며 확인할 수 있었고 결과적으로 숙박과 여행지를 동시에 포함한 주행 데이터를 '여행'으로 정의하는 기준을 마련했습니다.
더불어 티맵의 장소 상세 정보를 활용하여 숙박, 여행지, 관광지, 데이트 코스 등 여행에 대한 목적지를 명확하게 추출 및 분류했습니다.
이렇게 만들어진 목적지들의 나열을 ‘여행 세션’으로 정의하고, 여행 세션이 가지는 특성을 확인하기 위해 EDA를 진행했습니다.
데이터 EDA
여행 세션의 일별 건수 분포를 살펴보면, 토요일은 평일에 비해 대략 2배 수준으로 높아지는 경향을 보이며, 일요일에는 감소하는 패턴이 나타났습니다. 또한 황금연휴 시즌에는 첫날과 둘째 날이 서로 비슷한 수준의 여행 세션을 가지고 있는데, 이를 통해 연휴 기간에 여행하는 인원수는 늘어나지만, 연휴 첫날과 둘째 날에 여행을 떠나는 것을 확인할 수 있었습니다.
목적지의 시간대별 출발 시간 분포를 히스토그램으로 분석한 결과, 여행 목적지 카테고리 간 방문 패턴에 차이를 확인할 수 있었습니다.
• 관광명소나 데이트 코스의 경우, 목적지로 향하는 시간대가 주로 오후에 높았습니다.
• 레저/스포츠 관련 목적지는 오전 시간대에 출발이 두드러졌습니다.
• 시장을 방문하는 경우, 오후 다섯 시까지 방문이 증가하며, 저녁 시간대에는 방문이 거의 없는 것을 확인할 수 있었습니다.
• 음식점은 점심과 저녁 시간대에 방문이 많았으며, 카페는 점심 직후에 가장 많이 방문되었습니다.
• 숙박업소의 경우, 체크인 시간인 오후 2시 이후에 방문이 급격히 증가했습니다.
이를 종합적으로 해석하면, 여행자들은 일반적으로 늦은 아침에 음식점을 방문한 후 관광지 → 카페 → 숙박 업소나 다시 음식점 순서로 이동하는 패턴을 보였습니다. 또한 목적지의 성격에 따라 출발 시간에 차이가 있으며, 레저/스포츠의 경우 아침에 일찍 출발하는 경향이 나타났습니다.
목적지의 카테고리 별 평균 주행시간을 30분 단위로 살펴보면 음식점과 카페의 경우 30분과 1시간의 차이가 두드러지며, 데이트 코스의 경우 다른 카테고리보다 좀 더 30분과 1시간의 비율차이가 적은 것으로 보였습니다.
이를 해석해 보면 여행의 관점에서 현재 위치에서 음식점과 카페는 비교적 가까운 곳에서 찾게 되지만 데이트 코스의 경우 조금 먼 곳까지 주행할 여지가 있음을 볼 수 있었습니다.
목적지의 이동을 chord 차트로 그려보면 하루 내의 이동이 어디서 어디로 발생하는지 확인이 가능했고, 대부분의 경우 도내에서의 이동이 두드러지게 나타나는 것을 확인할 수 있었습니다.
여행에 관련되어 가장 큰 목적지는 제주와 강원이었고, 제주의 경우 여행 자체를 위한 목적성이 뚜렷한 지역이라 주행량이 많다고 볼 수 있었고, 강원도의 경우 인접지역이 수도권이기 때문에 주행량이 많다고 볼 수 있을 것 같습니다.
최초 목적지를 기준으로 목적지가 이동한 지역을 살펴보면 [서울, 인천, 경기]의 경우 상호 이동이 활발했었고, 충청-전라 권에서는 [대전, 전북, 광주]가, 경상도 권에서는 [울산, 부산] 권역별 여행의 중심지 역할을 하고 있다고 보였습니다. 여행의 범위를 기준으로 권역을 구분해 보면 (경기-강원권, 충청-전라권, 경상권)으로 여정이 분리되는 것을 볼 수 있었습니다.
저희는 EDA의 결과를 바탕으로 데이터 내에 여행이라는 관념이 통상적으로 가지는 시간적 특성과 공간적 특성이 충분히 드러나고 있다고 판단했고, 다음 장소를 추천할 수 있는 추천 모델에 대한 선행 연구를 찾아보았습니다.
추천시스템의 경우 굉장히 다양한 시스템들이 존재하고 있고 분류 또한 굉장히 다양합니다. 저희는 그중에서 시퀀셜 혹은 세션이라는 주제로 추천을 다루고 있는 Session-based 추천 시스템들에 좀 더 관심을 두고 본 프로젝트를 진행했습니다.
우선, Session-Based 추천 시스템(Session-Based Recommender Systems, SBRS)은 Recommendation System (RS)의 한 유형으로, 사용자가 만들어 낸 세션(예: 현재 브라우징 세션)을 기반으로 추천을 제공하는 방식을 연구하는 분야입니다. SBRS의 방법론은 기존 추천시스템과 비교했을 때 더 가볍고 직관적이며, 짧은 시퀀스에서 효과적으로 활용할 수 있다 장점이 있습니다.
SBRS 분야에서 대표적으로 사용된 모델은 다음과 같았습니다.
1.RNN 기반
GRU4Rec: Session 데이터를 GRU 모델에 입력하여 다음 아이템을 예측하는 모델로 시퀀스 기반의 전통적인 딥러닝 방식으로 알려져 있습니다.
2.Transformer 기반
시퀀스의 특성을 가진 데이터이다 보니 자연어를 다루는 NLP 모델들과의 결합이 용이했고, 역시나 세상을 바꾼 Transformer에도 영향을 받아 Bert4rec이라는 모델이 제안되었습니다.
3.CNN 기반
시퀀스 데이터에 CNN을 활용하면 세션 내 상호작용에 대한 순서를 고려하기 쉽게 만들 수 있으며, Convolution 레이어를 사용해 로컬 피처를 학습할 수 있다는 장점이 존재합니다. 3D CNN model, Temporal Convolutional Networks와 같은 모델이 제안되었습니다.
4.GNN (Graph Neural Networks)
GNN은 최근에 많이 활용되며, 데이터셋을 그래프로 구성하여 추천을 생성합니다. 이 중 대표적인 모델인 SR-GNN은 세션데이터를 GNN으로 만들어서 세션에 포함된 여러 아이템들간의 higher intention을 포착하는 능력이 좋은 것으로 제안되었습니다. SRGNN, NARM 등의 모델이 제안되었습니다.
1차 실험
• 여행 세션 데이터의 경우 관광량이 많았던 강원도에 한정 지어 어떤 모델이 좋은 성능을 보이는지를 확인해 보았습니다.
• 데이터는 총 70만 개 정도의 세션(시퀀스)이 추출되었고, 평균 세션길이는 3.5이며 poi의 개수는 23만 개로 비교적 많은 상황이었습니다.
• 아래의 모델을 가지고 평가를 진행했고 결과는 전통적인 시퀀스 기반의 모델보다 GNN기반의 모델이 좋은 성능을 보여주는 것을 1차적으로 확인할 수 있었습니다.
• 가장 좋은 성능을 보인 MSGIFSR 모델은 다음과 같은 구조를 가지고 있습니다.
- Learning Multi-granularity Consecutive User Intent Unit for Session-based Recommendation
• MSGIFSR 모델의 경우 유저의 세션을 그래프로 구성할 때 개별 아이템만을 고려해 그래프를 구성하는 것이 아니라, 아이템의 연속된 시퀀스를 또 다른 그래프의 노드로 만들고 이를 통해 부가적인 그래프를 생성하는데 이 과정이 유저가 가진 고차원(higher-order)의 잠재적인 의도를 포착해 좋은 성능으로 이어진 것이라고 판단했습니다.
• 더불어 세션 기반의 추천시스템의 입력은 매우 단순한 편인데, 동일한 데이터로 Bert4rec과 GNN을 차용한 모델을 비교해 봄으로써 단순한 시퀀스에서 다양한 서브 시퀀스를 만드는 것도 좋은 성능에 일조한다는 것과 이러한 구조를 뒷받침하는 GNN의 재표현(representation) 능력도 알려진 대로 좋은 편이라는 것을 알게 되었습니다.
2차 실험
• 1차 실험에서 성능이 좋았던 GNN 모델인 MSGIFSR 모델을 기반으로 다음의 내용으로 2차 실험을 진행해 보았습니다. 2차 실험에서는 크게 세 개의 주제를 가지고 실험을 전개했습니다.
1. 데이터 확대 및 필터링 방식 추가 : 전국구로 목적지를 확대하고, 대상이 되는 목적지 중 방문 횟수 기준으로 도별, 카테고리별 상위 20%로의 목적지만을 가지고 실험을 진행했습니다. 상위 20%의 데이터를 사용한 이유는 여느 추천 도메인처럼 방문 목적지의 분포에도 long tail problem이 존재했고 이를 완화시키기 위해서 빈도수 기준으로 cutoff 하였습니다.
2. 명시적 순서 정보 추가 : MSGIFSR 모델의 경우 순서에 대한 정보를 포착하기 위해서 연속된 아이템들의 셋을 순서가 있는 방식으로 인코딩해서 사용하고 있었는데, 순서에 대한 정보를 명시적으로 준다면 모델에서 동일한 장소에서 추천을 받더라도 시간에 따라 다른 추천 결과를 받을 수 있지 않을까라는 가설을 세웠습니다. 목적지의 임베딩 생성 시에 해당 목적지로 출발한 시간을 임베딩으로 만들었고 이를 초기화(initialize)된 노드 임베딩과 더해주는 방식으로 시간정보를 주입했습니다.
3. 데이터 증강 (Augmentation) : 마지막으로 단조로운 여행 시퀀스에 Augmentation을 추가해 조금 더 다이내믹한 시퀀스로 만들어 주었습니다. 여행 시퀀스를 좀 더 분석해 본 결과 호텔, 콘도 등 숙박업소인 목적지가 하루 주행 중 가장 마지막에 많이 등장을 하는 것을 포착했습니다. 이렇게 되면 숙박이 입력될 경우에 대해서는 다음 장소에 대한 정보가 부족해져 다양한 출력값이 보장될 수 없었습니다. 또한 입력시퀀스가 길어질수록 숙박만을 추천하는 경우가 나타났습니다. 그래서 마지막 목적지를 기준으로 해당 목적에서 시작된 다른 세션을 추가해서 데이터를 augmentation 했습니다.
• 실험 결과
- 시간 피처를 넣은 결과를 보면 다음과 같습니다.
입력값으로 제주도의 한라수목원을 넣은 결과를 살펴보면, 시간이 없는 경우엔 근처의 장소를 추천하고 있지만, 시간을 명확하게 입력할 경우 아침에는 해당 장소를 방문할 경우엔 좀 더 멀리 있는 곳을 추천하고, 오후에 해당 장소를 방문할 경우에는 더 가까운 곳을 추천하는 결과를 보여주었습니다.
- Data Augmentation에 대한 결과는 다음과 같습니다.
augmentation이 없는 경우에는 입력 세션이 길어질 때 숙박을 추천하고 관광지를 추천하지 못하는 경우가 있었는데, augmentation 이후에는 시퀀스가 길어지더라도 추천하는 관광지의 풀이 좀 더 늘어난 것을 확인해 볼 수 있었습니다.
이를 통해 사용자는 늦은 시간에 다음 목적지를 추천받더라도, 숙박이 아닌 관광에 관련된 목적지를 추천받을 수 있게 됨으로써 다음날의 여정으로 이어질 수 있는 장점도 생기게 되었습니다.
Further
다양한 실험을 진행하고 나서 이를 서비스로 만들어내기 위해서는 아직도 남은 과제들이 여럿 있습니다. 그중에 몇 가지를 소개해 드리고자 합니다.
먼저 실험에서 사용되는 정량 평가와 실제 서비스의 피드백 간의 괴리를 해소해야 합니다. 모델 학습 과정에서 MRR, HR 등의 정량 지표를 통해서 1차적으로 모델의 성능을 검증하지만, 실제 고객의 반응을 보는 A/B 테스트에서는 실험에 사용된 메트릭과 전혀 다른 결과를 보여줄 수 도 있습니다.
두 번째로는 모델의 지속적 학습과 배포를 위한 MLops에 관한 부분입니다. 서비스를 하면서 매번 수동으로 모델을 학습시키고 배포하는 것은 매우 비효율적입니다. 더불어 모델이 단순히 결과를 만들어 적재하는 것이 아니라 API 서버로서 요청을 받고 응답을 만들어야 한다면 효율적인 배포 구조와 장애 시 최대한 빠르게 대응할 수 있는 구조와 방식도 수반되어야 합니다.
마지막으로 서빙을 위한 모델의 최적화 과정이 필요합니다. 딥러닝 모델의 경우 GPU 연산이 필수적이지만 API를 배포하기 위해 GPU 머신을 기반으로 배포할 경우 예상되지 않은 엄청난 비용이 발생할 수 있습니다. CPU에서도 적당한 크기의 요청을 받아낼 수 있는 가벼운 모델을 배포하는 선택을 할 수도, 혹은 GPU에 최적화된 모델을 만들기 위해서 노력을 할 수 도 있을 것입니다. GPU 최적화를 진행한다면 배포될 모델이 직렬화가 가능한지에 대해서도 확인을 해봐야 할 것입니다.
마치며
양질의 데이터는 모델 개발의 핵심 요소 중 하나이며, 데이터의 양과 질은 모델의 성능과 신뢰도에 큰 영향을 미칩니다. 부족한 양과 질의 데이터를 보완하기 위해서는 추가적인 데이터 수집 및 정제 작업이 필요하며, 모델을 보다 복잡하게 만들어야 하는 경우도 있습니다.
이번 분석과 실험을 진행하며 티맵의 데이터는 양과 질의 측면에서 굉장한 우위를 가지고 있다는 생각을 많이 하게 되었습니다. 신뢰도 높은 데이터를 기반으로 모델을 만들기 때문에 좋은 모델을 개발하는 데에 집중할 수 있는 좋은 환경이라는 생각이 들었습니다.
여행에 대한 분석과 모델링을 통해 다음 장소를 추천받고, 추천받은 장소를 확인해 보고, 가보고 싶다는 생각이 들 때면 '이번 주말엔 추천받은 곳에 가볼까'하는 설렘이 찾아왔던 것 같습니다. 더불어 티맵을 사용하는 모든 사용자들의 여정에 즐거움과 설렘을 더해줄 수 있는 서비스로 발전하길 바라는 마음도 같이 커지게 된 것 같습니다.
데이터를 통해 고객들의 여정의 시작과 끝을 함께 하는 티맵의 다음 행보도 기대해 주시면 감사하겠습니다.
참고 논문
A Survey on Session-based Recommender Systems
Learning Multi-granularity Consecutive User Intent Unit for Session-based Recommendation
Machine Learning Operations (MLOps): Overview, Definition, and Architecture