TL;DR:
크게 시도별로 나눠보면 가장 빨리 소진된 울산은 38분,
오래 남아있었던 전북은 2시간 하고도 45분간 재고가 충분*하다고 알려줬다.
*실제 현장의 상황은 알 수 없으나 데이터가 말해준 바로는 그러했다. 입고 이후 '충분(100개 이상)'상태를 유지하는 시간의 해당지역 평균이다.
숫자의 단위는 '분'이다.
마스크 재고 정보는 지난 3월 10일 공지 이후 3월 15일자로 오픈 API 형태로 제공되기 시작했으며 현재도 서비스가 되고 있습니다. 그러자 재고 현황을 지도에 보기좋게 나타내는 각종 웹사이트가 경쟁적으로 나타났고 그 덕분에 서비스 초반에는 API가 먹통이 되기도 했습니다.
모두 동일한 API를 활용하기에 실제와 데이터의 괴리를 현장에서 직접 조사하며 바로잡을 게 아니라면 동일한 내용물에 껍데기(UI)만 다를 뿐. 어떤 서비스가 더 뛰어난가, 어떤 사용자경험이 더 편리한가는 크게 중요치 않습니다. 게다가 이미 포털사 지도앱에 내장되어 서비스 되고 있으니, 지도앱이라고 하면 접근성은 말할 것도 없고 그 어떤 사이트보다 안정적으로 서비스를 제공해주고 있죠.
데이터 더미 속에서 미래(의 마스크)를 찾으려거든
더 나은 무언가를 만들 수 없는 조건이니 처음부터 바퀴의 재발명은 필요 없다고 생각합니다. API 명세만 놓고 보면 데이터의 수집/분석이 불가능하여 서비스 시작일부터 매일같이 매 분마다 자료를 수집했습니다. 당장 줄을 설 필요는 없었지만 언젠가는 필요할 테니, 미래를 준비하기 위해 차곡차곡 곳간을 채웠고 어느덧 일주일치 데이터가 모여 공유해봅니다.
1200만 개의 데이터를 꿰어 보려면
꿰뚫어 보면 좋겠지만 690,934행 18열의 12,436,812칸짜리 데이터는 그냥 봐서는 아무것도 아닌 것 같네요. 꿰뚫지는 못하더라도 열두 말의 구슬이라고 생각하고 꿰어보려고 했습니다.
- 우선 서울 시내로 한정하여 요일별로 구분하고 마스크 재고의 각 상태가 지속되는 시간을 흩뿌려 놓았습니다.
각 점이 하나의 약국 데이터고 약국의 위치를 구별로 나눠 색을 달리했습니다. - 아무래도 수기 입력 데이터의 한계가 있다보니 이상치(outlier)는 제거하고 평균의 함정을 피하기 위해 boxplot을 그렸습니다.
- Y축이 재고 상태가 유지된 시간인데, 월요일 '충분'은 2~30부터 100분 언저리까지 시간대에 대부분 몰려있고 평균선은 50분쯤 되는 그림입니다.
- 재고 현황별 색상은 오픈 API 가이드를 충실히 따랐습니다.
글 작성일 기준으로 화요일은 편차가 적고 굉장히 빠른 시간에 단계가 변화하는 걸 알 수 있습니다. 그럼 마스크 재고 앱을 보면서 재고 현황이 어제보다 훨씬 금방 변할 테니 더 서둘러야할까요?
꼭 그렇지는 않습니다. 위는 테스트용으로 sample_n(10000) 즉 1만 개 데이터만 점찍어본 것이고, 전체 데이터는 조금 다릅니다.
전국적으로 수십~수백만 장이라고는 하지만 어차피 약국별 수량은 매우 한정적이다보니 사람이 조금만 몰려도 기존 데이터와는 확연히 달라질 수밖에 없습니다. 그래서 크게 시도 단위의 그룹을 먼저 알아보고 데이터도 평균값만 취해 그래프를 다시 그렸습니다.
각 요일별로 5부제가 실시되니 요일별 분석을 목적으로 했는데 아직 데이터가 부족한 듯싶습니다. 일요일이 두 번, 그리고 월요일을 두 번 거치면서 평균이 크게 변화하는 중입니다. 데이터를 다시 펼치면,
이건 결국 다시 아래처럼 바꿀 수 있습니다.
상위 1,2위를 차지한 전라북도와 대구광역시 그리고 가장 빨리 상태가 변한(조기 소진된) 울산광역시도 동일한 방법으로 그려봤습니다. (지역별 편차가 큰 이유는 판매 속도 차이뿐만 아니라 판매 방식에 따른 차이일 수도 있습니다. 가령 번호표를 나눠준다든지 시스템에 입력을 몰아서 한꺼번에 한다든지 등등. 그에 따른 지역간 차이는 없다고 가정하고 평균값을 참고해주기 바랍니다.)
지역을 좀더 세분화해보면 다음과 같습니다. 같은 서울시 내에서도 편차가 꽤 큽니다.(그림 모양이 매우 다릅니다.)
옅은 색상의 empty나 break 상태로 오래 유지되는 것은 시스템 오류일 가능성이 있고 오류가 아니더라도 현 시점에는 불필요한 정보로 간주합니다.
다시 서울 시내 전체 평균 수치로 바꿔서 구체적인 시간을 알아보자. 대략 30~50분이면 상태가 변화했고, 주말에는 상대적으로 좀더 오래 지속됐음을 알 수 있습니다.
충분이 가장 안심할 수 있는 상태긴 하지만(이미 약국 앞에 수십 명이 줄을 서있다고 가정하면 다른 상태의 경우 앱을 보고 길을 나서기엔 이미 늦었을 수 있습니다.)
충분->보통->부족으로 이어지는 동안에도 구입 가능성은 있는 상태이므로 수치를 누적 합산해봤습니다.
규모는 한 눈에 안 들어오고 마치 더미 데이터를 집어넣은 일러스트 그림같은 느낌입니다.
어렵게 그렸지만 선그래프는 그만 놓아줄 때가 된 것 같습니다. 지금 필요한 건 초록이 높으냐 빨강이 높으냐처럼 색상별 비교가 아니라 재고 상태를 유지하는 시간이기 때문에 누적 막대그래프가 가장 유용해 보입니다.
100분, 200분 단위가 익숙지 않으니 시간(h), 분(m)으로 레이블까지 표시해줬습니다.
요컨대 어제까지의 데이터로 봤을 때 재고 상태 유지(=판매시간)이 길어지는 추세입니다.
그래서 데이터를 분석하면 마스크를 잘 살 수 있을까?
향후 과제 및 제언
코드 폭탄으로 시작해서 그래프 폭탄으로 마무리됐습니다.
이정도로 꿰기 작업을 마치고, 데이터가 좀 더 모이면 각 지역별, 일자별, 요일별 추세를 반영하여 며칠 뒤(본인이 구입 가능한 요일)의 상태 변화 시각을 예측해볼 수 있을 듯싶습니다.
- 데이터 분석의 관건은 결국 미래를 예측하는 데 있다고 봅니다.
- 입고시각은 앞으로도 들쭉날쭉하겠지만 실사용자 관점에서 재고 알림 앱을 열어 주변 판매정보를 확인했을 때 가령 '초록색'이라면 앞으로 몇 분가량은 '충분'한 상태로 유지되겠다는 예상이 가능할 것입니다.
- 판매 시점 서버 입력(데이터 업데이트)의 편차가 크지 않고 데이터의 정확성이 보증된다면 '공적'이라는 이름에 걸맞게 관 차원에서 각 지역별 수요에 입각한 수량 분배에 활용해볼 수도 있을 것입니다.
*유독 빨리 소진되는 동네(시도처럼 큰 단위 수준이 아니더라도)와 요일이 있다면 공급물량을 늘린다거나 장시간 재고가 유지되는 주변 지역을 안내하는 등의 방법으로
-.NULL
예시로 들었던 지역별 그래프와 서울 시내지만 다른 양상을 나타내는 종로5가, 세종로(주소 내 문자열이 포함된 데이터로 필터링) 도표로 마무리합니다.
'Tech : 데이터 분석 > 생활 속 데이터분석' 카테고리의 다른 글
프로듀스 101 시즌2 - 4화 분석 (0) | 2019.10.26 |
---|---|
버즈분석으로 미래 예측이 가능할까? (0) | 2019.10.26 |
주차장에 내 자리 있나요?(2/3) (0) | 2019.10.22 |
주차장에 제 자리 있나요? (1/3) (0) | 2019.10.22 |
댓글