퍼스널 모빌리티 서비스 운영 밀도 최적화 모델 프로젝트: 밀도 곡선과 최적화

Edwin Park
elecle
Published in
20 min readDec 28, 2023

안녕하세요, 나인투원 데이터분석팀 에드윈, 박의연입니다. 올해 4분기에 진행한 밀도 최적화 모델 프로젝트를 마무리하면서 이렇게 정리와 함께 포스팅을 하게 되었습니다. 나인투원 데이터 분석팀은 일레클 서비스의 운영 최적화와 매출 극대화를 할 수 있는 데이터 기반 의사 결정을 수행하는 전략을 수립하는 것을 목표로 삼고 있습니다. 데이터에 기반한 밀도 최적화 모델 수립은 그 목표에 가장 부합하는 프로젝트 중 하나였습니다. 운영 최적화라는 주제가참고할 자료가 많지 않은만큼 우리 팀 스스로 문제를 정의하고 풀어나가는 과정이 필요했고, 유의미한 결실을 얻을 수 있어 뿌듯했습니다. 우리가 문제를 풀어나가는 과정을 앞으로 소개드리겠습니다.

1. 기기 밀도와 최적화 이론

밀도 최적화 모델 프로젝트는 권역별 기기 대수를 조정하여 이용횟수를 극대화하는 최적화 결과를 도출하는 모델을 개발하는 프로젝트입니다.

여기에서 밀도는 정해진 권역이라는 운영단위 내 면적 대비 기기 대수를 의미합니다. 같은 운영지역에 기기를 더 많이 높이면 기기 밀도는 높아지고, 같은 시장에 더 많은 기기 공급이 이루어집니다. 우리는 권역별로 나뉘어진 시장에 대해서 공급을 최적화하여 서비스 이용횟수와 매출을 최대로 하고자 합니다.

이때 어떤 지역(권역)에 얼마나 기기를 공급하는 것이 적절한지는 우리에게 어려운 질문이자 중요한 결정이 될 것입니다. 한 가지 다행인 것은 권역별 기기 공급은 비교적 유연하게 늘리고 줄일 수 있습니다. 앞으로 우리는 어떠한 방식으로 권역별 밀도를 최적화하는지에 대한 소개를 하겠습니다.

1–1. 기기 밀도 최적화 전략의 발전 단계

퍼스널 모빌리티 서비스는 거의 동일한 형태의 기기를 큰 규모로 여러 지역에서 운영하는 것이 특징입니다. 그렇기 때문에 지역마다 같은 기기를 수백 대, 많게는 수천 대를 운영하게 되는데, 정확히 몇 대를 운영해야 하는가에 대한 결정에는 여러가지 전략이 존재할 수 있습니다. 여기에서 밀도 최적화 전략의 목표는 총 기기당 이용횟수의 극대화입니다. 앞으로 단계별 밀도 최적화 전략을 소개해드리겠습니다.

(1) 일단 권역의 규모에 맞춰서 배치해보자.

가장 기초적인 접근은 “모든 지역의 대당 성과는 동일하다 가정하였을 때, 지역의 규모에 비례하여 기기를 분배한다”가 될 것입니다. 큰 규모의 지역에는 더 많은 대수를, 작은 규모의 지역에는 더 적은 대수를 분배하는 것입니다.

여기서 지역의 규모라는 기준도 다양할 것입니다. 도시의 면적, 거주 인구 수, 가구 수, 유동 인구 수 등 다양한 지표가 지역과 시장의 규모를 표현할 수 있을 것입니다. 이 중에서 가장 가장 직관적이고 집계가 쉬운 거주 인구 수, 면적 같은 지표가 주로 사용될 것입니다.

하지만, 퍼스널 모빌리티 서비스의 대당 성과는 항상 인구 수와 도시 규모에 비례하지는 않습니다. 도시의 인프라와 성격에 따라 비슷한 규모의 도시에서도 성과는 다르게 나타납니다. 따라서 그 두 도시에 같은 규모로 운영하는 것은 비효율적일 수 있습니다.

(2) 고성과 지역에 더 많이, 저성과 지역에 더 적게

다음 단계의 접근으로는 우선 설정한 표준 밀도로 운영을 하면서 지표를 지켜보고 그 지표에 따라 밀도(기기 대수)를 조절하는 것입니다. 이는 대당 성과가 높은 지역에 더 많은 기기 대수를 투입하고, 반대로 성과가 낮은 지역에 대해서는 기기 대수를 줄이는 전략입니다. 기준으로 삼을 수 있는 대당 성과로는 기기당 매출 혹은 기기당 이용횟수 등이 있을 것입니다. 우리는 이러한 전략을 취했을 때 고성과 지역은 기기가 늘어나면서 대당 성과가 낮아지고, 저성과 지역은 기기가 줄어들면서 대당 성과가 늘어나는 현상을 확인하였습니다.

즉, 고성과 지역에 대수를 늘리고, 저성과 지역에 대수를 줄이면, 기기당 성과는 서로 평균에 비슷해지게 되었습니다. 따라서 우리는 기기당 성과의 격차를 줄이는 것이 곧 최적화의 방향이라는 판단을 하였습니다. 하지만, 이러한 전략 또한 완전한 최적화라 볼 수 없습니다. 그 이유는 아래에서 다루겠습니다.

(3) 기기 증차에는 한계 효용이 발생한다.

앞선 항목에서 기기를 늘리면 대당 성과가 줄고, 기기를 줄이면 대당 성과가 좋아지는 현상을 발견했습니다. 우리는 이런 현상을 통해 “권역 내 기기가 늘어날 때 이용량의 증분은 점차 감소한다.”는 원칙이 존재한다는 것을 발견했습니다. 그리고 우리는 이 발견에 따라 권역별로 아래와 같은 가상의 곡선이 존재한다고 추측할 수 있었습니다.

기존의 기기 대수가 x_0이고, 그에 따른 이용량이 y_0라고 할 때 대당 성과(기기당 이용 횟수)는 y_0/x_0 즉 원점과 (x_0, y_0)을 지나는 직선의 기울기입니다.

이 상황 아래에서 기기 대수 x_0를 조절하면 아래와 같습니다.

  • x_0에서 x_a로 기기를 줄였을 때 원점과 (x_a, y_a)을 지나는 직선의 기울기는 더 높아졌고, 이는 기기당 이용횟수가 전보다 높아짐을 의미합니다.
  • x_0에서 x_b로 기기를 늘렸을 때 원점과 (x_b, y_b)을 지나는 직선의 기울기는 더 낮아졌고, 이는 기기당 이용횟수가 전보다 낮아짐을 의미합니다.

즉, 기기 대수와 이용횟수의 관계가 위 곡선과 같기 때문에 위와 같은 대당 성과의 변화가 발생하는 것입니다.

앞으로 우리는 가상의 기기 대수 증가에 따른 이용횟수의 한계 체감이 발생하는 곡선을 “밀도 곡선”이라 부르겠습니다. 이 밀도 곡선 이론은 앞으로 다룰 밀도 최적화 모델의 기반이 됩니다.

앞선 2번 전략의 한계는 이 밀도 곡선을 통해 설명할 수 있습니다. 아무리 대당 성과가 높은 지역이다 하더라도 밀도가 높아지면, 이용횟수 증분은 점차 줄어들게 되고, 기기 증분 대비 이용량 증분이 매우 낮아지게 됩니다. 따라서 우리는 기존 성과와 기존 밀도와 관계 없이 기기 증분 대비 이용량 증분이 높은 곳을 증차하는 것이 가장 합리적이라는 결론을 얻을 수 있습니다. 그리고 권역별로 기기 증분 대비 이용량 증분을 추정하는 데에는 권역별 밀도 곡선을 도출하는 과정이 필요합니다.

2. 권역별 밀도 최적화 모델링

2–1. 권역별 밀도 곡선 도출

권역별 밀도 최적화 모델을 개발하기 위해서는 우선적으로 권역별 밀도와 이용횟수 간의 관계를 파악해야 합니다. 이를 파악하기 위해서는 아래 세 가지 단계의 작업이 필요하였습니다.

2–1–1. 날씨 영향 고려

1–3에서 정의한 밀도곡선을 권역별로 도출하기 위해서 권역별로 일별 밀도와 일별 이용횟수의 관계를 우선 파악해야 합니다. 하지만 이 때, 일별 이용 횟수를 가공하지 않고 사용하면 원하는 밀도 곡선의 형태를 도출하기 어렵습니다. 바로 이용횟수와 날씨 간의 관계 때문인데요. 이용횟수는 기온과 강수량의 영향을 직접적으로 받기 때문에 계절과 우천 현황에 따라 이용횟수가 크게 변동합니다. 따라서 밀도와 이용횟수 간의 관계를 도출하기 위해서는 “날씨의 영향을 받지 않은 보정된 이용횟수”를 구하여 날씨의 영향을 제거해야 합니다.

우리는 권역별, 일별로 기온과 강수량을 제외한 이용횟수를 도출하는 “날씨 보정 모델”을 개발하여 사용하고 있습니다. 밀도 곡선을 도출할 때 이 “날씨 보정 모델”이 도출한 보정된 이용횟수(detrended ride count)를 사용하겠습니다.

날씨 보정 모델을 다룬 프로젝트는 다음에 포스팅하도록 하겠습니다.

한 권역에 같은 기간에 대하여 일별 밀도 — raw한 이용횟수의 관계와 일별 기기 대수 — 보정 이용횟수의 관계를 시각화한 결과를 비교하면 아래와 같습니다.

위 두 산점도를 보면 알 수 있듯이 날씨 보정 이전에는 기기 대수와 이용횟수 간의 관계가 뚜렷하지 않지만, 날씨 보정 이후에는 그 관계가 보다 명확하게 나타나는 것을 확인할 수 있습니다.

이제 이 날씨 요소가 보정된 이용횟수를 바탕으로 밀도 곡선을 명확히 그려낼 수 있고, 이를 바탕으로 최적화 모델을 설계할 수 있습니다.

2–1–2. 권역간 규모 차이 고려

한 권역에 대해서 기기 대수와 이용횟수 간의 관계는 위 단계에서 보다 명확히 파악할 수 있었습니다. 하지만, 여러 권역에 대해서 기기 대수와 이용횟수 간의 관계를 한 데 모아서 비교할 때에는 권역 간의 규모 차이에서 발생하는 문제가 발생했습니다.

권역의 규모는 운영하는 도시의 규모에 따라 다르게 됩니다. 큰 규모의 권역은 1,000 대 가 넘기도 하며, 작은 규모의 도시는 적게는 100 대 이하로 운영되고 있습니다. 이들을 한 데 모아서 같은 공식으로 설명하기에는 스케일 차이에 따른 부적절함이 발생하게 됩니다. 파라미터 값에 스케일이 반영되어 권역 간의 비교를 할 수 없고 fitting에서 발생하는 LMS(Least Mean Square)의 비용 또한 권역 간 비교를 할 수 없습니다.

위 그림에서 볼 수 있듯이, 권역 규모가 다른 세 권역의 기기 대수 — 보정 이용횟수 간의 관계는 데이터의 범위가 달라 권역간 관계의 비교를 하기 어렵습니다. 따라서 이 규모를 고려한 스케일링 작업이 필요합니다.

우리 규모에 대한 스케일링 작업을 하기 위해 기기 대수와 보정 이용횟수에 권역별 면적을 나누어 rpa, bpa라는 값을 만들었습니다.

  • rpa: (detrended) ride count per area = 면적당 (보정) 이용횟수
  • bpa(=density): bike count per area = 면적당 기기 대수 (= 밀도)

위 세 권역에 대하여 각각 bpa-rpa의 관계를 시각화한 결과는 아래와 같습니다.

위와 같이 세 권역의 자료가 한 군데 모아져 스케일을 고려한 밀도와 이용횟수 간의 관계를 비교할 수 있습니다. 이렇게 권역별 규모 차이가 고려된 데이터를 바탕으로 우리는 밀도 곡선을 fitting하고 최적화 모델을 개발할 것입니다.

한 가지 유의해야 할 것은 기기 대수가 아니라 밀도로 설명 변수가 변경됨에 따라 기기 1대가 권역별로 영향을 주는 정도가 바뀌었다는 것입니다. 가령 같은 기기 50대 증가가 발생하더라도 권역 크기가 다른 두 권역의 X축의 변화는 규모가 작은 권역에서 더욱 크게 발생하게 됩니다. 이는 최적화 단계에서 최적화 과정에 대한 이해에 있어 중요한 부분이 됩니다.

이제 다음 단계에서 권역별 bpa와 rpa의 관계에 대하여 수식화하는 작업을 해보겠습니다.

2–1–3. 밀도 곡선의 수식화

앞선 단계에서 우리는 보정 이용횟수를 통해 권역 밀도와 이용횟수간의 관계를 권역 규모 차이를 고려하면서 보다 명확히 파악할 수 있었습니다. 이제 우리는 이 관계를 수식화 하여 밀도를 조정했을 때 이론 상 기대할 수 있는 이용횟수 증감분을 파악할 수 있고, 이것을 기반으로 최적화 모델을 개발해야 합니다.

우리가 생각하는 “밀도 곡선”의 형태를 특정하기 위한 조건은 아래 세 가지가 있습니다.

1. 밀도 곡선은 항상 원점을 지난다. (zero-intercept)

2. 밀도 곡선은 오목함수이다. (concave)

3. 밀도 곡선은 단순증가함수이다. (monotonic increase)

이 세 가지 조건을 충족하는 수식에는 자연로그, 유리함수 등을 기반으로 한 여러 수식이 존재하였는데, 저희는 아래의 “미카엘리스-멘텐 방정식Michaelis-Menten Equation”의 수식을 차용하였습니다.

미카엘리스 멘텐 방정식의 그래프
미카엘리스 멘텐 방정식

미카엘리스-멘텐 방정식은 생화학 분야에서 사용되는 방정식으로, 기질의 농도에 따른 효소의 초기 반응 속도의 관계를 표현한 식입니다. 이 관계에서 기질 농도가 높아질수록 반응속도는 증가하지만 그 증가분이 체감하여 한계인 V_max에 수렴하게 되는데, 이는 우리가 정의한 밀도 곡선의 상황과 정확하게 일치합니다.

우리는 이 공식을 우리의 상황에 맞게 rpa와 bpa의 관계를 아래와 같이 표현하였습니다.

  • rpa: 면적당 이용 횟수 (권역간 규모 고려)
  • bpa: 기기 밀도 (권역간 규모 고려)
  • α: 첫 번째 파라미터, 최대 rpa 값에 영향을 미침
  • β: 두 번째 파라미터, 증가분 체감의 속도에 영향을 미침

위 수식의 형태에 맞춰 권역별 일별 밀도와 이용횟수 데이터를 바탕으로 권역별 밀도곡선 식을 fitting할 수 있습니다.

좌측 데이터를 바탕으로 밀도 곡선을 추정한 결과(오른쪽)

우리는 위 그림과 같이 왼쪽 그림의 데이터를 바탕으로 오른쪽과 같이 밀도 곡선을 도출할 수 있었습니다. 위 공식을 통해 우리가 상정한 밀도 증가에 따른 이용횟수 증가 체감을 적절히 표현할 수 있고, 실제 운영 경험이 없는 밀도 구간에 대해서도 rpa 값에 대한 추정도 가능하게 되었습니다.

예시로 3개 권역에 대해서 밀도 곡선을 한번에 시각화한 결과는 아래와 같습니다.

위와 같이 권역별 산점도의 분포 모양에 맞게 올바르게 곡선이 fitting된 것을 확인할 수 있고, 아래와 같은 해석들을 할 수 있습니다.

  • 파란색 권역은 빨간색 권역보다 현재 기기당 성과는 낮지만 밀도 증가에 따른 이용횟수가 체감하는 정도는 비슷합니다.
  • 주황색 권역은 빨간색 권역보다 저밀도 구간에서 효율이 좋지만, 체감하는 정도가 빨라 고밀도 구간에서 빨간색 권역보다 성과가 안 좋아집니다. 이런 경우, 고밀도 구간에서 주황색보다는 빨간색 권역의 기기 추가 배치가 권장됩니다.
  • 현재 주황색 권역의 밀도가 40, 파란색 권역의 밀도가 20이라면, 현재 대당 이용횟수는 주황색이 높지만 밀도 증가에 따른 이용횟수 증가분은 파란색 권역이 더 높아보입니다. 해당 상황에서는 대당 성과가 낮지만 파란색 권역에 추가 배치를 하는 것이 주황색 권역에 추가하는 것보다 더 옳은 결정이 될 것입니다.

이렇게 구현 완료한 권역별 밀도 곡선을 바탕으로 다음 파트에서 어떤 권역에 증감차를 하는 것이 효율적인가를 판단하는 최적화 알고리즘을 개발하는 과정을 다루어 보겠습니다.

2–2. 최적화 모델 개발

밀도 최적화 알고리즘의 기본적인 미션은 “한정된 기기 대수 내에서 권역별 기기 분배를 통한 이용횟수 극대화”입니다. 한 곳에만 모든 기기 대수를 몰아넣는 플랜과, 모든 권역에 N분의 1 분배를 하는 플랜과, 밀도 곡선을 고려한 플랜 등 가능한 모든 선택지 아래에서, 총 이용횟수가 가장 큰 기기 분배 플랜을 선택하는 것이 최적화의 모델의 목표입니다.

2–2–1. 최적화 문제 구상

이 기기 분배 문제를 예시와 함께 도식화하면 다음과 같습니다.

주어진 500g의 설탕을 세 사람(?)이 나누어서 설탕물을 마시고자 합니다. 이 때 세 사람의 물이 담긴 그릇의 크기는 제각기 다릅니다. 그리고 세 사람의 입맛이 달라, 단맛을 좋아하는 정도가 다르고, 설탕 농도에 따른 효용은 우상향하지만 한계 체감이 발생합니다. 이 때 500g의 설탕을 모두 사용하여 모든 사람의 효용의 합을 극대화하는 설탕 분배 결과를 도출하는 문제입니다.

이러한 문제에서 우리는 다음과 같은 종류의 여러 의사 결정들을 낼 수 있습니다.

  1. 모두가 똑같은 농도가 되도록 동등하게 분배한다.
  2. 가장 단맛을 좋아하는 사람에 적당히 더 많이 주고, 덜 좋아하는 사람에게 적당히 덜 주자.
  3. 농도에 따른 단맛의 체감 정도를 확인하여 세 사람의 효용의 합을 극대화하는 분배 결과를 도출하자.

우리는 1, 2번과 같은 단계에서 발전하여 3번과 같은 의사 결정을 할 수 있는 것을 목표로 한다고 이해하면 되겠습니다.

그리고 위 문제에서 유의할 두 가지 포인트가 존재합니다.

  • 세 사람의 설탕물 농도에 따른 효용 곡선이 제각기 다르고 효용 체감이 발생하기 때문에 누적된 농도에 따라 효용 증분 값이 계속하여 바뀌게 됩니다. 이를 고려한 설탕의 적절한 분배가 필요합니다.
  • 세 그릇의 물의 양이 다르기 때문에 설탕 1g이 변화시킬 수 있는 농도의 변화는 물의 양에 따라 달라집니다. 규모에 따라 설탕 투입에 따른 농도 변화의 정도가 다른 점을 반드시 고려해야 합니다.

이 두 가지 포인트는 앞으로 다룰 최적화 알고리즘을 이해하는 데 중요한 역할을 하게 됩니다.

2–2–2. 최적화 모델 수식화

위에서 구상한 최적화 모델을 실제로 개발하기 위해 이를 수식으로 작성해보겠습니다. 최적화 모델의 경우 목표식과 제약식, 그리고 결정 변수를 각각 선언합니다. 우리가 달성하고자 하는 목표는 무엇인지, 그것을 이루는데 발생하는 제약은 무엇인지, 그리고 우리는 어떤 변수를 조절할 수 있는지 먼저 생각해봅시다.

  • 목표(Objective Function): 모든 권역에서의 총 이용횟수 합의 극대화
  • 제약(Constraint): 총 분배 가능한 기기는 한정되어 있음.
  • 결정 변수(Decsion Variables): 권역별로 분배할 배치 자전거 대수

그리고 우리는 최적화의 방식이 두 가지로 나뉠 수 있다 판단했습니다.

  1. 기존 기기 분배: 기존 운영 기기가 총 X대가 있다면, 그 전체 기기를 최적화하여 분배 결과.
  2. 추가 기기 분배: 신규 기기 X대가 주어진 상황에서, 권역별로 운영중인 기기는 그대로 두고 신규기기 분배를 최적화 하는 결과

1번과 2번 모두 실제 운영 의사 결정 상황에서 발생하는 상황이고, 서로 살짝 다른 상황을 가지고 있기에 두 문제를 각각 나누어 설계해 보았습니다.

(1) 기존 기기 분배

권역별 총 이용횟수는 앞서 구한 bpa-rpa의 관계를 바탕으로 bpa-rpa의 식에서 기기 대수 — 권역 총 이용횟수의 식으로 전개하여 구할 수 있습니다. 그리고 각 권역별 현재 배치 되어 있는 기기 대수의 총합은 제한 되어있다는 제약을 걸어줍니다.

추가로, 결정변수인 권역별 배정 기기 대수의 경우 범위를 제한하여 지나치게 한 권역에 많은 기기를 배치하거나, 지나치게 적게 배정되는 경우를 방지해줍니다.

(2) 추가 기기 분배

1과 대체적으로 비슷하지만, 결정변수가 권역의 총 기기 대수가 아니라, “기존 운영 대수에 추가로 배치할 기기 대수”가 되고, 신규 배치 대수의 총합은 미리 정의된 총 신규기기 대수를 넘을 수 없다는 제약이 존재하게 됩니다.

추가로, 결정변수인 권역별 추가 기기 대수가 음수가 되지 않도록 범위를 설정해줍니다.

우리는 위와 같은 과정으로 두 개의 최적화 문제를 설계를 완료했습니다. 이제 다음 단계에서 최적화 문제를 실제로 코드 작업을 통해 구현해보고자 합니다.

2–2–3. 최적화 모델 코드 작업

위에서 설계한 최적화 모델은 목적식도 제약식도 크게 복잡한 형태가 아니기 때문에 SciPy 라이브러리에서 제공하는 최적화 관련 함수들을 사용하여 어렵지 않게 구현할 수 있었습니다.

SciPy 라이브러리에서는 scipy.optimize.minimize라는 메서드를 통해 최적화 문제를 풀 수 있습니다. minimize 메서드는 목적식 최소화 문제를 풀 수 있고, 별도로 maximize 함수는 없습니다. 저희가 풀고자 하는 문제는 최대화 문제이므로, 목적식 전체에 — 1을 곱하여 최소화 문제로 변환시켜 주어야 합니다.

추가로, scipy.optimize.minimize는 method라는 argument가 있는데, 사용할 최적화 알고리즘(solver)을 지정할 수 있습니다. 각 method별 필요한 요소들을 정리하면 아래와 같습니다. 우리의 최적화 모델은 bounds와 constraints가 존재하고, 비선형 최적화 문제를 풀기 적절한 “SLSQP” method를 사용하였습니다.

scipy.optimize.minimize의 method별 필요한 요소 (출처: https://wikidocs.net/15656)

2–3. 최적화 모델 구현과 배포

위 단계에서 SciPy 라이브러리를 사용하여 최적화 모델을 코드로 구현할 수 있었습니다. 하지만 이는 최적화 모델의 코어 부분만 구현한 것이고, 이를 분석자가 용이하게 결과를 조회할 수 있도록 구현하는 작업이 필요했습니다.

데이터분석팀은 최적화 결과를 어떤 형태로 만들어 배포하는 것이 적절한지에 대해서 많은 고려 사항을 두었습니다. 고려 사항들에는 아래와 같은 것들이 있었습니다.

  • 최적화 결과를 다른 부서에서도 조회해야 하는가? Yes
  • 선택 권역, 기기 대수 등의 input을 여러 경우로 선택해서 결과를 확인하고 싶은가? Yes
  • 최적화 결과를 빠르게 얻을 수 있어서 논의 중에도 조회 및 활용하고 싶은가? Yes
  • 최적화 결과물이 DB 같은 곳에 반드시 저장되어야 하는가? No
  • 최적화 결과물이 주기적으로 생성되어 공유되어야 하는가? No
  • 최적화 결과물이 일레클 서버에 전송되어, 서비스 로직에 반영되어야 하는가? No

위와 같은 우리의 활용 방식을 고려했을 때, 이 최적화 모델을 streamlit 대시보드를 사용하여 선택 권역, 기기 대수 등의 input을 interactive하게 조정하여 결과물을 조회할 수 있도록 하는 것이 가장 적절하다 판단하였습니다.

Streamlit은 Python기반 대시보드 서비스로, HTML, Javascript등의 웹 프론트엔드 개발 언어를 전혀 사용하지 않고도 대시보드 페이지를 생성할 수 있는 서비스로, 웹 개발 백그라운드가 부족한 많은 데이터 계열 직군들에게 인기를 얻고 있습니다. 일레클 데이터 팀 또한 Streamlit 서비스로 많은 데이터 조회 대시보드를 생성하여 활용하고 있어, 본 최적화 모델도 Streamlit을 활용해 구현하고 배포하고자 하였습니다.

streamlit에 배포한 밀도 최적화 모델 대시보드 화면

화면 상단에는 최적화 대상 권역 리스트와 총 기기 대수 정보를 입력할 수 있고, 좌측에는 권역별 밀도곡선의 시각화 결과를, 우측에는 권역별 밀도 최적화 결과를 시각화 결과를 출력합니다.

이렇게 하여 나인투원 멤버라면 누구나 데이터를 조회하여 최적화 결과를 확인할 수 있고, 운영팀에서는 이 결과를 참고하여 지역별 운영 대수 조정의 의사 결정에 활용할 수 있게 됩니다.

3. 마무리

3–1. 이용횟수 극대화만이 올바른 결정인 것은 아니다.

밀도 최적화 결과를 확인한 결과를 보았을 때와 실제로 제안하고 적용하는 과정에서, 우리는 최적화 결과를 그대로 수행하는 것만이 올바른 결정이라고 보기 어려울 수 있습니다.

[오퍼레이션 비용 고려]

  • 너무 작은 단위까지 최적화를 하려는 시도는 기기 이동에 발생하는 비용이 더 크게 들 수 있습니다. 보다 정확한 최적화된 의사 결정을 도출하기 위해서는 기기 이동에 발생하는 비용까지 고려할 수 있어야 합니다.
  • 기기 이동에 발생하는 비용과 권역별 운영 비용 등 실제 의사 결정에서 필요로 하는 비용들을 최적화 단에서 고려하는 것을 향후 개선 사항으로 두었습니다.

[경쟁 현황 등의 시장 상황 고려]

  • 시장 경쟁 등의 전략적인 측면을 고려하였을 때 밀도 최적화의 결과와 전략적인 액션이 상충하는 경우가 발생할 수 있습니다.
  • 이용횟수 극대화라는 최적화 결과에서는 기기 수거를 제안하지만, 특정 기기 대수 이상을 유지하려는 의사 결정이 우선될 수 있으므로, 그러한 경우 최적화 대상에서 제외할 수 있습니다.

3–2. 운영 최적화의 핵심, 밀도 최적화

공유 모빌리티 서비스에서는 운영 차원에서 현장관리자의 채용, 기기 대수, 운영 지역, 반납 가능 구역 등 많은 요소들을 직접 조절할 수 있습니다. 하지만 이 중에서 가장 명확하게 운영 규모와 매출 규모를 결정짓고 다른 운영적 요소에 근본적으로 영향을 미치는 것이 “몇 대를 운영하는가”라고 생각합니다. 이 운영 대수 결정은 투입 리소스는 명확하지만, 기기 한 대를 늘리고 줄일 때마다 기대할 수 있는 효용과 기회 비용은 파악하기 어렵습니다. 이 기기 밀도와 효용 간의 관계를 파악하고 이를 통한 운영 최적화를 달성하는 일은 생각보다 까다로웠습니다. 하지만 그만큼 최적화 모델이 완성되었을 때 가져올 수 있는 “쉽게 답하지 못하는 문제”를 풀어내었다는 데에 뿌듯함을 느낄 수 있었습니다. 이로써 일레클 데이터분석팀이 궁극적으로 목표로 하는 “모든 오퍼레이션 단위에서의 매출 극대화 전략 수립”에 큰 한 걸음을 딛을 수 있었습니다.

3–3. 소감

짧지 않은 기간 동안 나인투원에서 일레클 서비스의 데이터 분석을 하면서 매출 극대화, 운영 최적화 등의 주제에 대해서 여러 고민들과 시도들이 있었습니다. 그 중에서 기온 보정 모델 개발부터 밀도 최적화 모델 개발까지의 긴 여정이 저에게는 가장 기억에 남는 프로젝트입니다. 2년 전부터 고민해오던 주제에 대해서 러프한 프로토 타입 이론을 만들고, 기술적인 성장 이후에 그것을 실제로 구현하게 되면서 저의 성장도 확인할 수 있었습니다. 그리고 마이크로 모빌리티의 운영 최적화라는 특수한 주제에 대해서 스스로 문제를 정의하고 해결하는 과정이 귀중한 경험이었던 것 같습니다.

--

--