top of page

Data Science 인턴 프로젝트: 배송 거절 확률 예측 모델 시스템

Updated: Jan 5, 2022


3PL 사업 모델 및 프로젝트 배경

3PL의 사업모델은 고객 X의 물건을 운송대행업체 Y를 통해 배송하도록 도와주는 중개인 역할을 하는 사업이다. 예를 들어, 코카콜라(고객 X)의 물건을 목포에서 서울까지 배송해주겠다는 계약을 $1000에 체결하고, 운송수단을 직접 소유한 우체국 택배(운송대행업체 Y)를 통해 $600에 배송계약을 체결함으로써 총 $1000-$600= $400의 이익을 챙기는 사업모델이다.



하지만 배송 출발 시각 (PickupTime)이 얼마 남지 않은 때에, 다양한 이유로 인해 우체국 택배에서 배송을 못 할 것 같다는 배송 거절 통보를 받는 때가 종종 발생하게 된다. 이 같은 경우, 전보다 시급하게 운송대행업체를 찾아야 함으로 다음과 같은 문제가 발생한다.

  1. 더 높은 가격 (낮은 마진)에 운송대행업체 Z와 계약

  2. 약속된 시간 안에 배송하지 못해 고객 X에게 위약금 지불 및 고객 신뢰도에 타격

이와 같은 배송 거절 문제는 1주일 평균 약 $420,000의 비용을 발생시켰다.



 
프로젝트 목표

화물에 대한 정보, driver의 정보, 날씨 등 데이터를 기반으로 각 운송대행업체별로 배송을 취소할 확률을 미리 예측하여, 배송 성공률이 가장 높은 운송대행업체를 선별함으로써 이익을 극대화하는 것이다.



 
프로젝트 작업 흐름

전반적인 프로젝트가 흘러간 과정에 대해 나열해보면 아래와 같다.



1. 자료수집 및 정제


SQL을 활용해 과거 350만 개 이상의 운반된 화물들의 정보를 수집했다. 화물이 취소되는데 연관이 있을 만한 feature 들을 구하기 위해 운송대행업체와 계약을 체결하는 Sales 직원들과 여러 차례 점심을 먹으며 물어보고, 이를 데이터 수집에 반영했다. 그 feature 들 중에는 database에 정제되어 있지 않은 feature들도 있었기에 feature engineering을 통해 새로운 변수들을 추가하였다.


.미국에는 트럭운전사의 휴식시간이 보장되어야 한다는 규제가 있다. 예를 들어 트럭기사가 14시간을 운전 뒤 10시간 의무휴식, 8시간 운전 후 30분 의무휴식 등의 규제이다. 프로젝트 당시만해도 각 트럭기사의 데이터가 정제되어 있지 않았기 때문에 매니저님께 의뢰를 하고, 구체적인 요구사항 리포트 작성 및 DBA님과 미팅을 통해 데이터에 접근할 수 있었다.


2. Random Forest 모델 구현


Python의 scikit-learn library가 제공하는 다양한 알고리즘을 적용해 모델들을 만들었다. 최종적으로, Feature 들간의 성질(multi-collinearity, variance, etc.)과 각 feature의 중요도 설명 용이성 등을 고려했을 때 random forest가 가장 적합하다고 판단하여 random forest에 기반한 예측모델을 구현했다.


우선 예측 변수의 Class 1이 현저히 적은 데이터의 특성을 반영해 Under-sampling 을 통해 데이터를 준비했고, 모델의 Overfilling을 방지하기 위해 training dataset 과 test dataset으로 80:20 비율로 나눠 모델을 훈련했다. 또한 예측 성능 향상을 위해 hyperparameter를 수정해주었다.


처음에는 threshold를 0.5로 나누는 모델을 구축했는데, False Negative (FN) rate를 최소화하는 threshold를 정하기 위해 ROC 커브를 활용했다. 프로젝트 특성상 FN rate를 최소화하는 것이 비즈니스 측면에서 더 큰 이익을 가져다 주고 사용자의 혼선을 예방한다는 가정하에 FN rate를 최소화하였다.


3. Cost Benefit Analysis (손익분석)


예를 들어, 운송대행업체 A와 B가 각각 0.90, 0.80의 확률로 $700, $500에 취소 없이 배송한다는 예측 모델 결과가 나왔다고 가정했을 때, 어떤 운송대행업체를 추천해야 할까? 저자는 이를 손익분석을 통해 검증해 보았다.


0.01의 확률상승이 금전적으로 $5의 이익을 발생시킬 경우, 운송대행업체 B는 (0.90 – 0.80) / 0.01 * 5 + $500 = $550에 배송을 할 수 있다는 점에서 운송대행업체 B를 추천하는 것이 영업 이익상 합리적이라는 결과를 도출할 수 있었다. 하지만 이는 단순화한 예시일 뿐 실제 확률상승에 따른 금전적 이익은 선형적(linear)이지 않고 확률의 구간에 따라 바뀔 수 있다는 점에 주의해야 했다.


4. Demo 웹 애플리케이션 개발.


인턴십 최종 발표에서 화물추천시스템이 어떤 식으로 사내소프트웨어에 적용될 수 있는지 직접 보여주기 위해 C#으로 웹 애플리케이션을 구축했다. 데이터의 흐름 과정은 다음과 같다.


I. 특정 화물 ID에 대한 화물정보를 Database 와 Web App (Client) 간에 주고 받는다.

II. 해당 화물정보를 Message Queue를 통해 예측모델 (Server)로 전송한다.

III. 운송대행업체별로 해당 화물을 운송할 수 있는 확률을 Web App (Client)에 전송한다.


Message Queue는 RabbitMQ와 ZeroMQ 후보군 중 후자의 퍼포먼스와 추후 가용성이 더 낫다고판단해 ZeroMQ를 이용해 data pipeline을 구축했다.


 
추가 고려사항

모델의 예측(true/false)에 100% 따라서 Sales 직원이 운송대행업체와 계약을 맺는다는 가정하에 총 예상 이익은 일주일에 약 $140, 000 였다.


하지만 Sales 직원들이 예측 결과에 전적으로 의존해 결정을 내리지 않고, 참고용으로만 활용하게 될 경우 총 이익은 바뀔 수 있을 것이다.


BIG TRUCK HUNTER 시스템이 실제 업무환경에 배치되었을 때, A/B Testing을 통해 시스템의 예측정보를 이용하는 Sales 직원들과 이용하지 않는 직원들의 이익 창출을 비교해 볼 수 있을 것이다. 또한, 프로젝트의 본 의도대로 사용자들이 받아들이는지, 그렇지 않다면 원인이 무엇이고, 개선 포인트는 무엇인지 등에 대한 자료를 수집 및 분석하여 올바르게 대처할 수 있을 것이다.


 
마치며

  • Data science는 domain에 대한 지식과 communication skill이 정말 중요하다는 점을 피부로 체험한 귀중한 시간이었다. 다양한 분야의 사람들과 이야기를 나누며 새로운 feature 에 대해 알게 되고, 창의적인 feature 및 실험 방법을 찾을 수 있었던 신나는 경험이었다. 그리고 이 과정을 즐기고 몰입해 있는 내 자신을 발견할 수 있었다.


  • 한가지 아쉬운 점은 서비스를 직접 출시하고 A/B Testing을 통해 사용자가 어떻게 반응하는지 살펴보지 못했다는 것이다. 실제 업무에서 A/B testing은 어떻게 이뤄지고, Feedback 결과를 어떤 방식으로 수집 및 반영해 최종적으로 서비스를 출시하는지 직접 경험해보고 싶었다.


  • 매니저님과 팀 동료 분들, Sales 직원들, 인턴 동료들 등 많은 분들께 정말 감사한 시간이었다. 특히 권한과 책임을 많이 주는 동시에 끝까지 해내도록 기다려주신 매니저님께 감사하다. 프로젝트가 끝난 뒤에도 지속적인 연락을 통해 프로젝트 상황에 대해 알려주시는 등 일적인 측면뿐만 아니라 사람 간의 관계에 있어서도 많은 생각과 깨달음을 준 경험이었다.


이번 인턴 경험 중 아래와 같은 생각이 자주 떠올랐다.


  • 커리어뿐만 아니라 전반적인 삶에 있어 나는 주변 사람들에게 어떤 도움이 될 수 있을까?


  • 어떻게 하면 주변 사람들과 함께 성장해나갈 수 있을까?


  • 그러기 위해 지금 나는 무얼 해야할까?


이 질문들에 대한 답을 지속적으로 갈구하고 꼭 실행시켜 나가고 싶다.

Comments


bottom of page