본문 바로가기
알고리즘/최단 경로 알고리즘

카카오맵이 최적 경로를 결정하는 데까지

by NewCodes 2024. 2. 7.
반응형

 

카카오맵에서 불편함을 느끼고, 궁금증을 해결하다.

 

 

 

안녕하세요! NewCodes입니다!!

 

우선 이전 포스팅에서

제가 가졌던 궁금증에 대해 다시 살펴보겠습니다.

 

 

 

위 그림은 제가 사는 동네입니다.

 

보시다시피 1번 경로가 2번보다 훨씬 더 빠른 길입니다.

 

하지만, 카카오맵이 항상 2번 경로를 추천해줬습니다.

 

 

그래서 저는 카카오택시를 탈 때면 항상 

시간과 돈을 불필요하게 소모하곤 했습니다.

 

이러한 현상이 1년 이상 반복되자

저는 궁금해졌습니다.

 

 

카카오맵은 도대체 어떤 이유로
2번 경로를 최적 경로로 추천할까?

 

 

길찾기 서비스는 어떤 원리로 동작할까?

 

 

 

드디어 이 궁금증에 대한 마침표를 찍고자 합니다!

이를 위해 아래와 같은 과정을 거쳤습니다.

 

 

 

이번 포스팅에서는

4단계와 5단계를 진행해보겠습니다.

 

즉, 가설을 검증하고 결론을 도출해보겠습니다.

 

 


🧐 다른 길찾기 서비스도 2번 경로를 최적 경로라 판단할까?

우선 다른 길찾기 서비스도 카카오맵과 같이 경로를 추천했을지 궁금했습니다. 그래서 네이버맵과 티맵의 경로를 살펴봤습니다.

 

네이버맵 추천 경로 조사

네이버맵은 돌아가는 경로인 2번 경로 자체를 추천하지 않았습니다. 최단 경로인 1번 경로를 '실시간 추천' 경로로 제시했고, '무료우선'과 '거리우선'도 마찬가지로 1번 경로를 추천했습니다. 

 

티맵 추천 경로 조사 

티맵 또한 1번 경로를 추천 경로로 제시했습니다. 그리고 티맵에서 놀라운 걸 발견했습니다! 티맵에는 '어린이 보호'라는 추천 경로가 따로 있습니다.

 

어린이 보호 추천 경로

 

여기서는 어린이 보호구역을 우회하는 2번 경로를 추천했습니다. 이를 통해 우리는 2번 가설(어린이 보호구역)에 주의를 기울여 볼 수 있습니다. 

 

일반 도로와 어린이 보호구역의 차이 

주택가 이면도로, 왕복 2차로 등에 대한 도로 정보에 따른 가중치는 지도 서비스마다 유사할 것입니다. 그 이유는 객관적인 데이터가 존재하기 때문입니다. 각 도로마다 제한 속도가 몇인지 정해져 있고, 실제 사용자들이 각 도로에서 몇 km로 운행하는지에 대한 평균 데이터가 있을 겁니다. 이러한 수치를 통해 최적의 의사결정에 가까워질 수 있습니다.

 

하지만 어린이 보호구역에 대한 가중치는 서비스마다 다를 수 있습니다. 어린이 보호구역은 '제한 속도 30km' 그 자체로 규정되는 구역이 아닙니다. 어린이 보호구역이란 '교통사고의 위험으로부터 어린이를 보호하기 위해 필요하다고 인정된 구역'입니다. 다른 도로와는 달리, 속도 제한과 더불어 운전자의 각별한 주의가 필요한 도로입니다.

 

만약, 특정 길찾기 서비스가 어린이 보호구역에 대한 가중치를 높여서 알고리즘에 자주 채택되도록 한다면, 해당 구역에 대한 통행량이 증가할 것입니다. 그리고 이는 시행횟수가 높아지는 것이나 다름없어 통계적으로 사고빈도를 높일 수 있게 됩니다. 반면, 어린이 보호구역에 대한 가중치를 낮춰서 우회하는 길을 추천하게 된다면 사용자들의 불편을 야기할 수 있습니다. 이러한 사정을 몰랐던 저처럼요. 그리고 이러한 불편은 사용자들로 하여금 해당 서비스를 떠나게 하는 원인이 될 수 있습니다. 

 

아마 길찾기 서비스는 어린이 보후구역에 대한 가중치를 설정할 때 많은 고민과 의사결정이 이루어졌을 거라고 생각합니다. '비즈니스''어린이 보호' 그 사이에서 최적의 결정을 내려야 했을 겁니다. 

 

정리

정리하자면 티맵, 네이법맵을 통해서 얻은 결론은 아래와 같습니다.

  1. 주택가 이면도로, 왕복 2차로 등에 대한 도로 정보에 따른 가중치는 객관적인 데이터로 의사결정이 가능함. 따라서, 지도 서비스마다 도로 특성에 의한 가중치는 유사할 것으로 추정함.
  2. 어린이 보호구역에 대한 가중치는 객관적 데이터만으로 결정하기 힘든 문제임. 따라서, 지도 서비스는 각자마다 '비즈니스'와 '어린이 보호' 그 사이에서 최적의 결정을 내렸을 것.
  3. 티맵이 어린이 보호 경로를 별도로 추천했다는 건, 어린이 보호구역에 대한 가치판단을 일반 경로에는 포함시키지는 않았을 확률이 높음.
  4. 카카오맵은 일반 경로에 대해 어린이 보호구역에 대한 가중치를 낮게 부여해서 우회하도록 유도했을 확률이 높음.

 


🕵🏻‍♂️ 가설검증

1. 공사 정보가 업데이트되지 않아서 우회했을 것이다.  

공사 구역

 

 : 네이버맵에서는 도로 네트워크 데이터 팀이 따로 있다고 합니다. 그래서 해당 팀에서 교통 정보 관련 데이터를 받는다고 합니다. 카카오맵도 데이터정보플랫폼팀이 있어 여기에서 공사 정보와 같은 교통 정보를 꾸준히 업데이트할 것으로 보입니다.

 

회사 내부 규정 상 자세한 건 알기가 어렵지만, 공사 정보 업데이트 누락에 대한 확률은 높아 보이지 않습니다. 그리고 1년간 지속적으로 해당 경로를 추천한 걸로 보아 변동성 있는 데이터 때문은 아닐 걸로 추정됩니다.

 

따라서, 저는 해당 가설이 틀렸다고 판단했습니다.

 

 

2. 어린이 보호구역에 대한 회피도가 강해서 우회했을 것이다. 

어린이 보호구역

 

 : 앞서 네이버맵, 티맵과 비교하여 얻은 인사이트를 통해 해당 가설이 부합할 확률이 높습니다. 티맵에서는 어린이 보호 경로가 따로 존재했었고, 해당 경로에서는 카카오맵이 추천해준 2번 경로와 동일했습니다. 따라서 카카오맵에서는 애초에 경로를 추천할 때 어린이 보호에 대한 가치판단이 이루어졌을 걸로 판단합니다. 즉, 어린이 보호구역에 대해서는 가중치를 더 낮게 부여함으로써 우회하도록 유도한 것이죠.

 

따라서, 저는 해당 가설이 옳다고 판단했습니다.

 

 

3. 골목을 회피하는 경향이 있어 2번 경로를 추천했을 것이다. 

골목

 

 : 해당 가설을 검증하기 위해서는 1번 경로와 2번 경로의 도로 제한속도를 비교할 필요가 있습니다. 

 

결론부터 말씀드리자면, 1번 경로는 낮과 밤 상관없이 제한속도는 30km/h로 변화가 없습니다. 

 

1번 경로 중 어린이 보호구역은 오전 8시부터 오후 8시까지 제한속도를 30km/h로 제한합니다. 또한, 심야시간(21시 ~ 07시)에는 어린이 보호구역 속도 제한이 40~50km/h로 상향 적용된다고 합니다. 즉, 집중 단속 시간대가 아니더라도 속도 제한이 적용됩니다.

 

그런데 여기서 하나를 더 짚어보겠습니다. 위 그림에 보이는 해당 어린이 보호구역 도로는 보호구역·주택가 이면도로에 해당하는 편도 1차로입니다. 기본적으로 편도 1차로의 제한 속도는 30km/h입니다. 따라서, 해당 도로의 심야시간에도 제한속도는 여전히 30km/h라는 걸 알 수 있습니다.

 

2번 경로에서 왕복 2차로의 제한 속도50km/h입니다. 왕복 1차로의 제한 속도30km/h입니다. 또한, 보호구역·주택가 이면도로(골목)30km/h라고 합니다. 

 

정리하자면

  • 1번 경로는 계속해서 시속 30km/h로 제한됩니다.
  • 2번 경로시속 50km/h로 제한되는 왕복 2차로가 일부 존재하고, 나머지는 30km/h로 동일합니다. 

제한 속도로만 판단하자면 2번 경로가 더욱 매력적이고, 2차로도 존재하기에 2번 경로를 판단했을 수도 있습니다. 즉, 3번 가설도 타당할 확률이 높아보이죠. 

 

그런데 정말 이 가설이 맞을까요? 우리가 생각해볼 지점이 하나 있습니다.

 

오른쪽에 보시면 주정차된 차들이 많습니다.

 

막상 2번 경로의 왕복 2차로를 들여다보면요. 출발지에서 도착지로 향하는 방향으로 주행하는 오른쪽 차선을 보시면, 주정차된 차들이 많아 편도 1차로인 거나 다름이 없는 수준입니다. 제한 속도가 50km/h라는 점을 제외한다면, 1차로에 비해 넓은 2차로라는 메리트는 사라지는 것이죠. 

 

즉, 이전에 제한 속도만을 고려했을 때보다는 2번 경로에 대한 매력은 생각보다 떨어지죠. 

 

물론 이러한 도로의 형상이 길찾기 알고리즘에 반영이 됐는지는 모릅니다. 또, 2번 경로는 주행해야 하는 거리가 더 멀기에 최종 비용 계산에서는 어떻게 됐을지 모릅니다.

 

해당 가설을 정확하게 검증하기 위해서는 더욱 많은 양적 데이터를 준비하거나 혹은 실험을 해야 합니다. 이를 검증하는 건 더 이상 저의 영역은 아닌 것 같아 해당 가설은 보류하도록 하겠습니다. 

 

 

참고로 카카오맵에 관한 정보를 더 얻고자 했지만, 내부 규정상 힘들었습니다. 카카오맵 알고리즘에 관해 기술 블로그를 쓴 저자도 찾기 힘들더라고요. 

 


🎯 결론

1단계부터 5단계까지 가설을 세우고 알고리즘을 학습하며 검증하는 데까지 이르렀습니다. 이제는 학습한 지식을 총동원하여 결론을 내려보고자 합니다. 

 

해당 경로에 대한 결정은 Metric Customization이라는 비용 전처리 과정에서 의사결정이 이루어졌다고 생각합니다.

 

1번 경로는 어린이 보호구역 주택가 이면도로의 제한속도로 인해 해당 경로의 비용이 높게 계산되었을 것입니다.

그에 반해 2번 경로는 왕복 2차로가 포함되어 비용이 낮게 계산되었을 것입니다.

그래서 비용이 더 낮은 2번 경로가 최단 경로가 아님에도 최적 경로로 결정될 수 있었습니다.

 

 

물론 비용 처리 단계 중 쿼리 단계에서 문제가 생겼을 수도 있습니다. 하지만 카카오맵은 거리상 최단 경로인 2번 경로를 탐색하긴 했고, 이를 최적 경로인 1번 경로 다음으로 2번을 추천해준 걸로 보아 쿼리 자체에서 문제가 있었을 확률은 낮을 것 같습니다.

 

그래서 가장 확률이 높은 쪽으로 결론을 내고자 합니다. 주요 변인은 Metric Customization에서 어린이 보호구역왕복 2차로에 대한 가중치 전처리였습니다.

 


🚀 지도 길찾기 서비스의 미래 방향은?

제가 위와 같은 경험을 하면서 얻은 세 가지 인사이트를 풀어보고자 합니다. 

 

1. 항상 사용자 입장에서 고려할 줄 알아야 합니다.

앞서 얻은 결론 중 아래와 같은 결론이 있었습니다.

 

  • 주택가 이면도로, 왕복 2차로 등에 대한 도로 정보에 따른 가중치는 객관적인 데이터로 의사결정이 가능함.
  • 따라서, 지도 서비스마다 도로 특성에 의한 가중치는 유사할 것으로 추정함.

개발자와 데이터 엔지니어링 시각에서는 객관적인 데이터만으로도 최적 경로에 대한 의사결정이 가능한 것처럼 보일지도 모릅니다. 하지만, 길찾기 서비스를 이용하는 사용자 입장에서 생각해보면요. 사용자가 느끼는 건 다를 수 있습니다.

 

예를 들어, 골목을 통해서 가는 경로가 최단 경로이라고 한들, 골목으로 들어가는 걸 선호하지 않는 사용자는 운전에 불편함을 느낄 수 있습니다. 개인마다 주행 스타일과 속도가 다르기에 서비스에서 추천하는 최적 경로는 해당 사용자가 느끼는 최적 경로와는 상이할 수 있습니다. 

 

정리하자면, 서비스에서 제 아무리 객관적인 데이터로 합리적인 의사결정을 했을지 언정, 개인이 선호하는 주행 스타일에 따라 해당 의사결정이 사용자 입장에서 그릇된 결정이 될 수도 있습니다. 앞으로 이러한 개인의 주행 스타일에 따라 경로를 추천하는 기능도 나오길 기대해보겠습니다. 

 

 

2. 표면적 데이터가 아닌 실제적 데이터를 고려해야 합니다. 

추가로, 3번 가설을 통해서 우리가 생각해볼 지점이 하나 있습니다.

 

오른쪽에 보시면 주정차된 차들이 많습니다.

 

막상 2번 경로의 왕복 2차로를 들여다보면요. 출발지에서 도착지로 향하는 방향으로 주행할 때, 주정차된 차들이 많아 편도 1차로인 거나 다름이 없는 수준입니다. 이렇게 도로가 실제로 어떤 형상을 띄고 있는지에 대한 데이터도 가중치에 반영이 되었을까요? 

 

만약 이와 같은 실제적 데이터를 포함하려면 로드뷰 데이터를 바탕으로 딥러닝과 같은 기술로 해결해야 할 것입니다. 앞으로 길찾기 서비스가 발전해야 것 중의 하나가 바로 이러한 실제적인 상황을 기술적으로 담아낼 수 있는 부분이 아닌가 싶습니다.

 

 

3. 경로를 추천할 때는 사회적 책임이 담긴 의사결정을 해야 합니다.

어떻게 가중치를 설정하느냐에 따라 특정 도로 구간에 대한 통행량이 증가할 수도 감소할 수도 있습니다. 통행량이 증가하면 자연스레 통계적으로 사고 빈도와 교통 체증 등이 증가할 수밖에 없습니다. 그렇기에 어린이 보호구역과 같이 특수한 도로 같은 경우에 가중치를 설정할 때는 심사숙고해서 의사결정을 해야 할 것입니다. 

 

개발자로서 개발만 잘하는 것이 중요한 건 아닙니다. 어떤 사회적 책임감을 가지고 어떤 가치관을 가졌는지도 상당히 중요하다고 생각합니다. 개발자의 선택, 실수 등은 해당 서비스를 이용하는 많은 사람들로 하여금 영향력을 끼칠 수 있습니다. 

 

이와 비슷한 맥락으로 구글에는 친환경 경로 탐색 기능이 있습니다. 정말 흥미로운데요! 구글 기술 블로그를 잠깐 살펴봅시다.

 

 

기능 시연 모습

 

Google 지도에서 친환경 경로 탐색은 미국 에너지부 국립재생에너지연구소의 통계유럽 환경청 데이터를 바탕으로 운전자들이 가장 연료 효율적인 경로를 찾도록 도와줍니다. 이 기능은 출시 이후 50만 미터 톤 이상의 탄소 배출을 줄여준 것으로 추정되는데 이는 화석 연료로 운행되는 차량 100,000대를 도로에서 사라지게 한 것과 같은 효과입니다. Google은 올해 말 Google Maps Platform에도 친환경 경로 탐색을 제공하게 되어 매우 기쁩니다.

 

 

와.. 절로 감탄이 나옵니다! 저만 그런가요? ㅎㅎ 개발자로서 어떤 기능을 만들고, 어떤 선택을 할 것인지는 정말 중요합니다. 물론 이를 위해 기획자, 매니저 등 많은 사람들이 기능 구현에 관여를 하겠지만요. 결국 이걸 구현하는 사람은 개발자이니, 본인이 주도적으로 프로젝트를 맡아 의견을 내고 구현까지 하는 게 중요하다고 생각합니다.

 

이제는 ESG 경영이 필수인 것 같습니다. ESG를 실천하지 않는 기업은 투자 유치에도 불리하다고 합니다. 이제는 기업이 이윤추구만을 하는 게 아니라 다른 책임까지 맡아야 하는 것처럼, 개발자도 코딩만을 하는 게 아니라 그 이외의 배경들을 파악해야 한다고 생각합니다.

 

 


⭐️ 느낀 점

길찾기 알고리즘 자체의 문제는 아니었지만, 문제 해결에 도움은 되었음  

카카오택시를 이용하면서 일상에서의 불편함을 느꼈습니다. 불편함이 어느 순간 궁금증으로 바뀌었고, 이를 해소하고자 했습니다. 처음에는 기술적으로 이러한 문제를 해결할 수 있을 거라 생각했지만, 실제로는 온전히 그러하진 않았습니다. 

 

카카오맵이 사용하는 길찾기 알고리즘인 CCH(Customizable Contraction Hierarchies)를 해외 논문을 읽어가면서까지 학습했습니다. 해당 알고리즘의 기반이 되는 CH(Contraction Hierarchies) 또한 그러한 방식으로 학습했습니다. 

 

이렇게 학습했던 이유는 알고리즘 자체의 특성으로 인해 해당 문제가 발생했음을 밝혀내고 싶었던 마음도 있었습니다. 개발자는 기술로 문제를 해결하는 사람이니까요. 처음에 이 문제를 바라볼 때는 기술에만 초점을 뒀었습니다. 

 

하지만 해당 문제를 해결하는 데 있어 중요한 포인트는 '가중치에 대한 의사결정'이었습니다. 기술과는 다소 거리가 있죠. 그래도 길찾기 알고리즘을 파악함으로써 길찾기 알고리즘 자체가 원인은 아니라는 걸 배제할 수 있었습니다. 한 가지의 원인을 소거할 수 있었다는 점에서 그래도 의미가 있겠죠. 또, 덕분에 CCH 중 Metric Customization에서 각 도로에 대한 가중치 의사결정이 이루어졌다는 걸 알 수도 있었습니다. 

 

비즈니스에 참여하는 개발자

가설 검증과 결론 도출에 있어 기술적인 측면보다는 도로 정보 등의 도메인 지식이 많이 개입되었습니다. 그런데 제가 앞으로 비즈니스에서 만날 문제들도 마찬가지일 거라고 생각합니다. 기술적으로 해결하기보다는 다른 방식으로 해결하는 게 훨씬 더 효과적일 수 있습니다. 

 

물론 개발자는 이러한 문제를 기술적으로 해결하는 사람입니다. 하지만, 저는 비즈니스 문제에 더욱 역동적으로 참여하는 개발자가 되고 싶습니다. 결국 개발자가 해결하는 문제는 비즈니스를 위한 것이니까요! 그리고 저는 비즈니스를 다루는 것도 너무 재밌습니다!

 

위와 같은 경험을 하면서 흥미있게 탐구했고, 나름의 보람도 있었습니다. 덕분에 알고리즘, 자료구조의 필요성을 느끼고 공부하는 계기가 되기도 했고요.

 

느낀 점을 요약하고 마쳐보겠습니다!

  1. 최단 경로 != 최적 경로
  2. 도메인 지식의 중요성 (도로 정보, 교통 정보)
  3. 개발자로서의 사회적 책임, 윤리적 태도의 필요성
    (가중치에 대한 가치 선택 -> 하나의 수치가 큰 파장을 일으킬 수 있다.)

 

 

반응형