

[특징 및 인사이트]
- zip 기준으로 '대표위경도'를 만들어서 같은 동네에 사는 각각의 주문들은 하나의 점으로 만들어 주었다.(평균)
- Sellers는 대도시 밀집 지역인 남동부 지역에 밀집되어 있다.
# geolocation을 zip 기준으로 '대표위경도' 만들기 (평균)
geo_agg = (
geo.groupby('geolocation_zip_code_prefix', as_index=False)
.agg({'geolocation_lat' : 'mean', 'geolocation_lng' : 'mean'})
)
# sellers에 위경도 붙이기
sellers_map_df = sellers[['seller_id', 'seller_zip_code_prefix', 'seller_city', 'seller_state']].merge(
geo_agg,
left_on='seller_zip_code_prefix',
right_on='geolocation_zip_code_prefix',
how='left'
)

[인사이트]
- Olist의 주 고객들은 남동부와 북동부 지역에 밀집되어 있다.
- Customer도 Seller와 마찬가지로 customer 테이블에서 아이디/zip 코드/도시/주 칼럼을 geo_agg와 merge하여 customers_map_df 데이터프레임을 생성한 뒤 지도를 그린다.
# 배송이 estimated time보다 delay된 지역만 뽑아서 보기
df_delay = orders[[
'order_id', 'customer_id',
'order_purchase_timestamp',
'order_delivered_customer_date',
'order_estimated_delivery_date'
]].copy()
# daytime 변환
for c in ['order_purchase_timestamp', 'order_delivered_customer_date', 'order_estimated_delivery_date']:
df_delay[c] = pd.to_datetime(df_delay[c], errors='coerce')
# delivered & estimated 있는 것만
df_delay = df_delay.dropna(subset=['order_delivered_customer_date','order_estimated_delivery_date'])
# 지연일수
df_delay['delay_days'] = (df_delay['order_delivered_customer_date'] - df_delay['order_estimated_delivery_date']).dt.days
# delay된 주문만
df_delay = df_delay[df_delay['delay_days'] > 0].copy()
df_delay[['order_id','delay_days']].head()
[output]
- 실제 배송이 지연된 주문과 그 지연 일수를 정리한 분석용 데이터셋 도출
df_delay = df_delay.merge(
cus[['customer_id','customer_zip_code_prefix','customer_city','customer_state']],
on='customer_id',
how='left'
)
df_delay = df_delay.merge(
geo_agg[['geolocation_zip_code_prefix','geolocation_lat','geolocation_lng']],
left_on='customer_zip_code_prefix',
right_on='geolocation_zip_code_prefix',
how='left'
)
df_delay = df_delay.dropna(subset=['geolocation_lat','geolocation_lng']).copy()
df_delay.shape

[인사이트]
- 위 지도는 지연 주문의 절대적인 개수이다.
- 대도시 밀집 지역인 남동부 지역에 전체 주문량이 많은만큼 확실히 지연 주문 건수도 많은 것을 알 수 있다.
- 초록색: 지연 주문 한 자릿 수 / 노란색: 지연 주문 두 자릿 수 / 주황색: 지연 주문 3-4자릿수
- 하지만 위 지도는 절대적인 지연 주문량만 나타낼 뿐, 지연율 및 배송 속도 평균 등 성능을 비교하기에는 무리가 있다.
- 그래서 초록색 지역은 배송이 빠르고 주황색 지역은 배송이 느리다로 해석하면 안된다.
# 배송 + 고객
base = (orders[['order_id','customer_id',
'order_purchase_timestamp',
'order_delivered_customer_date',
'order_estimated_delivery_date']]
.merge(cus[['customer_id','customer_state']],
on='customer_id', how='left'))
# datetime 변환
for c in ['order_purchase_timestamp',
'order_delivered_customer_date',
'order_estimated_delivery_date']:
base[c] = pd.to_datetime(base[c], errors='coerce')
base = base.dropna(subset=[
'order_purchase_timestamp',
'order_delivered_customer_date',
'order_estimated_delivery_date'
])
# 배송 지표
base['shipping_days'] = (
base['order_delivered_customer_date']
- base['order_purchase_timestamp']
).dt.days
base['delay_days'] = (
base['order_delivered_customer_date']
- base['order_estimated_delivery_date']
).dt.days
base['is_delayed'] = (base['delay_days'] > 0).astype(int)
# 리뷰 결합
base = base.merge(
ordrev[['order_id','review_score']],
on='order_id',
how='left'
)
state_metrics = (
base.groupby('customer_state')
.agg(
주문건수=('order_id','count'),
배송지연율=('is_delayed','mean'),
평균배송소요일=('shipping_days','mean'),
평균지연일수=('delay_days', lambda x: x[x>0].mean()),
평균리뷰평점=('review_score','mean')
)
.reset_index()
.sort_values('배송지연율', ascending=False)
)
state_metrics




[분석 결과 요약 및 인사이트 정리]
- 분석 결과 요약: 브라질 북부/북동부 지역에서 배송 지연율이 상대적으로 높게 나타난 것을 볼 수 있다. 반면, 남동부 지역은 낮은 지연율을 보였다. 이는 판매자/고객 밀집 지역과 물류 인프라 수준 차이에서 기인한 구조적 문제로 해석할 수 있다.
- 결과 해석:
1) 북부/북동부 지역: 높은 배송 지연율
- Amazonas, Para, Maranhao, 일부 Nordeste 지역에서 지연율이 가장 높다.
- 주문 절대량은 남동부에 비해 많지 않지만, 주문 대비 지연 비율이 매우 높다
- 장거리 배송에 필요한 물류 허브 부족, 도로/운송 인프라 열세, 배송 리드타임 변동성 등으로 해석할 수 있다.
2) 중부 지역: 중간 수준의 지연율
- Mato Grosso, Goias 등
- 주문량과 지연율 모두 중간 수준
- 물류 접근성은 일부 확보했으나 남동부 대비 여전히 거리 연결성의 한계가 존재한다.
3) 남동부/남부: 낮은 배송 지연율
- SP, Rio de Janerio, Parana, Minas Gerais 등
- 대도시 밀집 지역으로, 주문량이 매우 많지만 지연율은 오히려 낮다.
- Sellers 분포 지도에서 알 수 있듯이, 판매자 밀집 지역이라 평균 배송 거리가 짧다. 물류센터 및 허브가 집중 되어있는 곳이기 때문이다.
- 인사이트
1) 지연율은 주문량과 반드시 비례하지 않는다. 오히려 물류 인프라와 지역 접근성의 문제로 해석할 수있다.
2) 북부/북동부: SLA 차등 적용 필요, 물류 파트너 확대 or 지역 허브 전략 검토 필요
3) 남동부: 대규모 주문 처리에도 안정적인 현재 구조

[인사이트]