브라질 지역별 배송 지연 인사이트 발굴

brusel Luam·2026년 1월 5일
post-thumbnail

1. Sellers 분포

[특징 및 인사이트]

  • 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'
)

2. Customers 분포

[인사이트]

  • Olist의 주 고객들은 남동부와 북동부 지역에 밀집되어 있다.
  • Customer도 Seller와 마찬가지로 customer 테이블에서 아이디/zip 코드/도시/주 칼럼을 geo_agg와 merge하여 customers_map_df 데이터프레임을 생성한 뒤 지도를 그린다.

3. 지연 건수

# 배송이 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자릿수
  • 하지만 위 지도는 절대적인 지연 주문량만 나타낼 뿐, 지연율 및 배송 속도 평균 등 성능을 비교하기에는 무리가 있다.
  • 그래서 초록색 지역은 배송이 빠르고 주황색 지역은 배송이 느리다로 해석하면 안된다.

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


5. 지연율 지도 시각화

[분석 결과 요약 및 인사이트 정리]

  • 분석 결과 요약: 브라질 북부/북동부 지역에서 배송 지연율이 상대적으로 높게 나타난 것을 볼 수 있다. 반면, 남동부 지역은 낮은 지연율을 보였다. 이는 판매자/고객 밀집 지역과 물류 인프라 수준 차이에서 기인한 구조적 문제로 해석할 수 있다.
  • 결과 해석:

1) 북부/북동부 지역: 높은 배송 지연율

  • Amazonas, Para, Maranhao, 일부 Nordeste 지역에서 지연율이 가장 높다.
  • 주문 절대량은 남동부에 비해 많지 않지만, 주문 대비 지연 비율이 매우 높다
  • 장거리 배송에 필요한 물류 허브 부족, 도로/운송 인프라 열세, 배송 리드타임 변동성 등으로 해석할 수 있다.

2) 중부 지역: 중간 수준의 지연율

  • Mato Grosso, Goias 등
  • 주문량과 지연율 모두 중간 수준
  • 물류 접근성은 일부 확보했으나 남동부 대비 여전히 거리 연결성의 한계가 존재한다.

3) 남동부/남부: 낮은 배송 지연율

  • SP, Rio de Janerio, Parana, Minas Gerais 등
  • 대도시 밀집 지역으로, 주문량이 매우 많지만 지연율은 오히려 낮다.
  • Sellers 분포 지도에서 알 수 있듯이, 판매자 밀집 지역이라 평균 배송 거리가 짧다. 물류센터 및 허브가 집중 되어있는 곳이기 때문이다.
  • 인사이트
    1) 지연율은 주문량과 반드시 비례하지 않는다. 오히려 물류 인프라와 지역 접근성의 문제로 해석할 수있다.
    2) 북부/북동부: SLA 차등 적용 필요, 물류 파트너 확대 or 지역 허브 전략 검토 필요
    3) 남동부: 대규모 주문 처리에도 안정적인 현재 구조

6. 분포비교(시각적 검증)

[인사이트]

0개의 댓글