1. 들어가며

안녕하세요? 우아한형제들에서 데이터분석가로 일하고 있는 송훈화입니다.
최근에 분석가로서 Product 부문에 참여해 아래 2개의 업무를 진행했습니다.

  • AI 추천배차의 성과 측정 및 현황 분석
  • 비마트 주문수 및 입고수 예측을 통한 비용 최적화

위 프로젝트에 참여하면서 과정과 성과, 그리고 배운 것과 개인적 경험에 대해 하나씩 공유해보고자 합니다.
혹시 누군가 비슷한 경험을 하고 있다면 제 글이 조금이나 도움이 되면 좋겠습니다.
만약 입사 초반에 쓴 블로그 내용이 궁금하시다면 아래를 클릭해주세요.

2. AI 추천배차 성과 측정 및 현황 분석

우선, AI추천배차는 배달을 효율적이고 적절한 시간에 완료할수 있도록 배달건을 라이더에게 배정/추천하는 시스템입니다.
이에 대한 소개 자료가 궁금하시면 아래 링크를 참고해주세요.

제가 옆에서 리더와 구성원의 생각/행동을 지켜보면서 느낀 점은,
AI추천배차를 개선하고 효과적으로 운영하기 위해 Lean Startup Process를 기반으로 노력한다는 것입니다.
간단히 Lean Startup Process에 대해 말씀드리면, 서비스 구축/개선을 위해 아래 3가지 단계를 반복하는 프로세스를 의미합니다.

  • BUILD (만들고)
  • MEASURE (측정하고)
  • LEARN (배우고)

즉, 최소한으로 동작하는 시스템을 개발하고(Build), 데이터를 통해 성과를 측정한 후(Measure), 배움(Learn)을 통해 서비스를 반복적으로 개선하는 방식을 의미합니다. 모든 구성원이 자연스럽게 이 프로세스를 기반으로 시스템을 개발/운영하고자 노력하였고, 저는 주로 측정(Mesure) 단계에 관여/기여하였습니다. 따라서 이제부터는 주로 측정 단계를 중심으로 기술하고자 합니다.

우선, 측정 단계에서 제가 진행한 업무는 아래와 같습니다.

  • 시스템의 성과를 측정하고 현황을 파악할수 있는 대시보드를 구축
  • 시계열 트렌드 및 패턴, 요인간 상관관계를 파악하고, 의사판단을 위한 통계적 기준을 마련

지금부터는 위 내용에 대해 하나씩 말씀드리겠습니다.

2.1 어떻게 무엇을 측정했는가?

처음에 한 일은 지표를 정의하고 수식을 만드는 것이었습니다. 이미 사용중인 지표가 일부 있었고, 이를 기반으로 목적을 점차 이해하며 설계를 시작했습니다. 이 과정에서 중요하게 고려한 것은 아래 3가지입니다.

  • 시스템의 목적과 제공하려는 가치를 온전히 이해하는 것
  • 개념 및 수식에 대하여 표준화된 공통 기준을 만들고 문서화하는 것
  • 구성원을 지표 구축 과정에 참여시키고 공감도와 관심도를 높이는 것

2.1.1 목적을 온전히 이해하기

저는 프로젝트 중간에 투입됐기 때문에 시스템의 목적과 도메인 지식이 부족한 상태였고, 이를 보완하기 위해 질문을 많이 했습니다.
운영 및 개발하시는 분들에게 어떤 목적과 배경으로 시스템이 만들어진 것인지 물어보고 문서로 정리하였고,
때로는 현장에 나가서 실제 이루어지는 과정을 목격하고 인터뷰하면서 이해도를 점차 높일수 있었습니다.

어느 정도 목적을 이해한 후, 아래 2가지를 중요하게 고려하며 지표설계를 진행했습니다.

  • 신뢰도: 측정을 반복해도 안정적이고 동일한 결과를 보이는가?
  • 타당도: 측정하고자 하는 개념을 정확하고 적절히 측정하고 있는가?

완벽하게 위 2가지 개념을 지켰다고 보기는 어렵지만, 최대한 노력하며 시스템의 품질 및 효율을 중심으로 지표 설계를 마무리하였습니다. 더불어, 배달구간별 현황 및 라이더 사용성 등 세부적인 지표를 추가하였고, 상세한 분석을 위해 지역/배달수단 등 필터링 조건에 대해서도 설계하였습니다.

2.1.2 표준화된 수식/개념 정의하기

지표 설계 이후에는 표준화된 기준을 만들고자 했습니다. 처음에는 표준화 과정 없이, 자체적으로 개념과 수식을 만들고 공유하다보니 아래와 같은 문제가 발생하기 시작했습니다.

  • 동일한 지표에 대해 주체별로 다른 수치를 공유/보고
  • 동일한 지표에 대해 주체별로 개념 및 이미지, 중요도가 다름
  • 불필요한 커뮤니케이션 비용 및 오해 발생

따라서 지표를 구축하고 공유하는 과정을 잠시 멈추고, 유관 주체와 정기적으로 모여 지표에 대한 개념 및 의미부터 수식까지 모든 내용을 표준화하였습니다. 더불어, 베이스 역할을 하는 테이블의 조건에 대해 상세히 협의하여 이를 문서화하였으며, 반복 검증하는 과정을 진행했습니다.

보다 상세히, 표준화를 위해 진행한 내용과 결과 예시는 아래와 같습니다.

  • 지표별 측정의 목적 및 의미, 기대효과는 무엇인가?
  • 지표별 중요도는 어느 수준인가?
  • 비율을 구할 경우 분모, 분자에 들어갈 대상은 무엇이고, 수식은 무엇인가?
  • 아웃라이더 등 제거/필터링 조건의 경우 어떤 기준이 타당한가?

그림 1. 표준화 작업 결과 예시

이 과정에서 힘들고 부담스러웠던 부분은 눈에 보이지 않는 작업이고, 오랜기간 여러명이 에너지를 소모해야한다는 점이었습니다.
그러나 이 과정이 마무리된 후에는 커뮤니케이션 과정이 효율적으로 진행되어 아래와 같은 효과가 있었습니다.

  • 불필요한 커뮤니케이션 비용 감소
  • 구성원들이 의구심 없이 확신을 가지고 지표를 해석

2.1.3 구성원이 지표에 친근해지도록 만들기

마지막으로, 구성원들이 지표 구축 과정에 참여하여 오너십을 갖도록 유도하였고, 지표를 공감하고 쉽게 이해할수 있도록 정기적으로 설명하는 시간을 가졌습니다. 그 결과, 구성원분들이 스스로 간단한 분석과 지표 확인을 할수 있었고, 필요시 문서화된 자료를 참고하며 주도적으로 학습/활용할수 있었습니다.
저 또한 구성원분들이 제공해주시는 피드백 및 아이디어를 기반으로, 지표를 점차 개선하고 신규 지표를 개발하는 데 많은 도움을 받을수 있었습니다.

2.2 어떤 도구와 구조로 측정했는가?

이번에는 어떤 도구와 구조를 활용했는지 공유하고자 합니다. 요점만 정리하면 대시보드는 Redash를 활용했고 KPI와 Metric 2가지 형태로 구분하여 구축했습니다. 참고로 Redash는 파이썬 기반으로 만들어진 대시보드로, 편리하고 빠르게 대시보드를 구축하여 활용하기에 훌륭한 툴이라고 생각합니다.

2.2.1 목표에 따라 대시보드를 KPI, Metric으로 구분

KPI 대시보드에는 소수의 중요한 지표를 선별하여 추가하였습니다. 시간이 없거나 바쁜 경우에는 KPI 대시보드를 통해 빠르게 현황을 파악하기 위한 용도로 만들었고, 비교적 중요도는 낮지만 상세한 현황을 파악하고 분석하기 위한 지표들은 Metric 대시보드에 위치시켰습니다.

대략 KPI에는 4개 정도의 지표를, Metric에는 15개 정도의 지표를 포함시켰습니다.
비록 달성 전이기는 하지만, 이상적인 대시보드는 아래와 같다고 생각하며 점진적으로 대시보드 구축업무를 진행했습니다.

  • 소수의 중요도 높은 지표로 현황을 효과적이고 빠르게 파악
  • 통계적 기준을 기반으로 데이터를 통해 의사결정
  • 대응 필요시 효과적인 액션 아이템 및 조합을 사용자에게 제공
  • 피드백 반영 및 업데이트 자동화

이상적인 모습으로 가는 도중에 하차하게 되어 아쉬운 마음이 있지만, 현재 구성원분들이 언젠가 달성할 것으로 생각하고 있습니다.

그림 2. 대시보드 구축 결과 예시

2.2.2 데이터 퀄리티 검증은 필수

업무 시간은 항상 부족하기에, 데이터의 퀄리티를 검수하는 과정을 생략하는 경우가 종종 있는 것 같습니다.
귀찮고 지루한 부분이지만, 퀄리티 검증을 소홀히할 경우 추후에 많은 어려움을 겪게 된 경험이 있습니다.
따라서 데이터를 공유하기 전에 아래와 같은 과정을 반드시 거치고 공유하는 것을 원칙으로 세웠습니다.

  • 작업자가 자체적으로 2~3회 정도 코드 리뷰 및 수치 검수 진행
  • 1명 이상의 협업자와 리뷰후 최종 공유

위와 같은 프로세스가 전체 작업시간을 길게 하는 원인이 되었지만,
장기적으로 보면 불필요한 후속 작업을 최소화할수 있었고, 또 불필요한 혼란을 주지 않았기에 시간을 더 아낄수 있었던 것 같습니다.

2.3 실제 무엇을 개선했는가?

지표 및 대시보드는 Lean Startup Process가 진행되는 과정의 일부(주로 Measure 단계)에 기여하였는데, 예를 들어

  • 정기적인 모니터링 및 원인 추정
  • 요인간 상관관계 및 시계열 패턴 파악
  • 변동성 발생 및 대응 필요에 대한 근거 제공
  • A/B 테스트 진행시 차이에 대한 효과 안내

지금도 구성원들이 시스템을 개선하고 더나은 사용자 경험을 제공하기 위해 꾸준하게 테스트하고 분석하고 개선하는 프로세스를 진행하고 있습니다. 분석가로서 이 과정의 일부로 참여하여, 데이터가 적극적으로 활용되는 과정을 지켜보면서, 보람을 느끼고 의미 있는 경험을 할수 있었습니다.

3. B마트 물류센터 비용 효율화

다음으로, B마트 비용 효율화 업무에 대해 간단히 공유해드리고자 합니다. B마트의 물류 이동 프로세스를 간략히 살펴보면 아래와 같습니다.

1) 거래처에 발주 요청 2) 물류센터에 물품 입고 3) 입고된 물품을 발송 준비 ✓ 4) 주문한 고객에게 배송

위 과정중 예측모델을 통해 효율화하고자 했던 부분은 3. 입고된 물품을 발송준비하기 위해 투입되는 근무자의 시간이었습니다.
근미래에 발생할 것으로 예상되는 주문수 및 입고수를 기준으로 근무자의 스케쥴을 조정하여, 불필요한 시간의 낭비를 최소화하는 목적으로 예측모델을 개발하였습니다.

지금부터는 예측모델을 개발하고 이를 활용한 과정에 대해 기술하고자 합니다.

3.1 어떤 예측모델을 사용했는가?

3.1.1 학습 데이터

우선 학습에 이용할 데이터를 만들기 위해 과거 6개월 정도의 데이터를 추출한후 전처리를 진행했습니다.
이 과정에서 주로 고민했던 부분은 아래와 같습니다.

  • 어떤 후보 변수를 모델에 적용하고 최종적으로 어떤 변수를 선택할 것인가?
  • 예측력을 높이기 위한 변수 변환 작업을 어떻게 진행할 것인가?
  • 이상치와 누락된 값을 어떤 기준으로 처리할 것인가?

주요 내용만 간단히 공유하면, 아래와 같은 전처리 과정을 거쳐 학습데이터를 만들었습니다.

  • 후보변수중 최종적으로 선택된 변수는 주로 기간이나 시점을 나타내는 변수이거나 최근의 변화량/트렌드와 관련 있는 변수
  • 예측력을 높이기 위해 분포 변환 및 표준화(변수의 값을 일정한 범위로 조정)하는 작업을 진행
  • 이상치의 경우 IRQ 방식을 주로 이용, 누락된 값은 평균과 같은 통계치를 이용해 메꾸거나 때로는 샘플을 제거

3.1.2 모델 선정 및 검증

예측 대상인 주문수, 입고수의 경우 수치형 변수이므로 아래와 같은 회귀모델을 적용해 예측력을 테스트해보았습니다.

  • Linear Regression, Ridge, Lasso 등 선형 모델
  • Random Forest, XGboost, LightGBM, KNN 등 비선형 모델

그 결과 LightGBM이 속도 측면이나 예측력, 일반화 가능성을 모두 고려했을때 가장 좋은 모델로 판단되어 최종 모델로 선정되었습니다. 참고로, 위 과정에서 Pandas 및 Numpy, Scikit-learn를 주로 이용했고, 클래스 및 함수를 모듈로 저장해 엔지니어에게 전달하였습니다. 엔지니어는 테이블 자동화 작업을 진행하여, 운영 담당자가 직접 SQL을 통해 데이터룰 추출할수 있도록 지원하였습니다.

예측모델 테스트/활용 과정에서 제가 얻은 경험은 다음과 같습니다.

  • 예측력을 높이기 위해 가장 효과적인 과정은 변수를 변환하거나 파생변수를 추가하는 것
  • 하이퍼파라메터 튜닝이나 복잡하고 다양한 모델을 쓰는 것보다, 효과적인 변수를 추가하거나 변환하는 작업이 더욱 효과적
  • 위 과정에서 도메인 지식이 중요한 역할 (유관팀을 귀찮게 하더라도 계속 물어보고 가설을 잘 설정하는 것이 중요)
  • 한정된 업무 시간을 효율적으로 배분하기 위해 목적을 잊지 않고, 유관팀과 자주 커뮤니케이션하며 의견을 참고하는 것이 유용

3.2 실제 무엇을 개선했는가?

실제 개선된 내용을 요약하면 아래와 같습니다.

  • 사업팀에서 시간대별 예상 주문수를 이용해, 지점별 근무자 스케줄을 계획하고 휴게시간 등을 조정
  • 정확한 예상 수치에 맞춰 근무시간을 탄력적으로 운영하여 근무시간 비용을 절약

그림 3. 예측치 활용 및 검증 과정 예시

업무 초반부터 완벽하고 예측력이 무한히 높은 모델을 만드는 것보다, 실제 적용되고 가시적인 성과로 연결되는 것에 초점을 맞추고자 노력했습니다. 유관자와 충분히 시간을 갖고 기대효과와 활용방안에 대해 명확히 그리면서 업무를 진행했고, 이러한 점이 실제 개선까지 연결되는데 도움이 된것 같습니다.

4. 마무리

마지막으로, 지금까지 업무하면서 도움이 됐던 그리고 앞으로도 계속 간직하고자 하는 핵심적인 태도/가치에 대해 공유하고 글을 마치고자 합니다.

4.1 일의 본질에 대한 고민

무슨 일이든 본질, 즉 왜 이 일을하는가에 대한 이해와 공감이 중요한 것 같습니다.
시간이 걸리더라도, 협업자 간에 목적에 대한 공감대를 형성하고, 최종결과 및 기대효과를 명확히 이해하고 있을때 좋은 결과로 이어지는 것 같습니다.

목적에 대한 이해는 결과 뿐만 아니라, 일을 하는 과정에서 의사결정을 할때 훌륭한 가이드라인의 역할을 하기도 합니다.
예를 들어, 가용 가능 시간을 100으로 봤을 때, 아래와 같이 우선순위에 맞춰 시간배분을 계획할수 있었습니다.

  • 데이터 퀄리티 확보 및 전처리 (40)
  • 변수의 생성 및 변환 (30)
  • 모델 정교화 및 업데이트 (20)
  • 문서화 및 커뮤니케이션 등 기타 작업 (10)

4.2 일을 바라보는 관점과 태도가 중요

두 번째로 일을 어떻게 바라보고 있는가, 즉 관점과 태도에 대한 중요함을 강조하고 싶었습니다.

때로는 너무 눈에 보이는 것에만 관심을 두는 것은 아닌지 고민해볼 필요가 있을 것 같습니다.
데이터 분석 분야도 트렌드가 빠르게 바뀌고, 이 순간에도 수많은 새로운 기술과 방법론이 쏟아져 나오고 있습니다.
잦은 변화와 화려함을 쫓기보다, 아래와 같은 태도를 지니고자 노력할때 좋은 결과로 이어진 경우가 많았던 것 같습니다.

  • 작지만 꾸준하게
  • 느려도 정확하게
  • 모두가 참여하게
  • 남보다 내가먼저
  • 감사히 정성스레

지금까지 분석가로서 업무한 과정과 개인적인 경험, 그 과정에서 배우고 느낀 것에 대해 공유했습니다.
긴 글을 읽어주셔서 감사드리고, 다분히 주관적이고 개인적인 경험이지만 누군가에게 조금이나마 도움이되길 바라는 마음으로 기록하였습니다. 혹시 잘못 기술되었거나 오해가 있는 부분은 너그러운 마음으로 이해해주시면 감사하겠습니다.