1. Giới thiệu
Thương mại điện tử là một cuộc chiến đốt tiền để giành lấy người dùng mới (Acquisition), nhưng lợi nhuận thực sự lại nằm ở việc giữ chân họ (Retention). Tại Brazil, Olist là một gã khổng lồ marketplace kết nối hàng ngàn nhà bán lẻ với khách hàng trên khắp đất nước. Thế nhưng, đằng sau những con số tăng trưởng doanh thu ấn tượng từ 2016 đến 2018, hệ thống này đang rỉ máu
Sự chênh lệch đáng sợ
Hãy nhìn vào một con số đáng sợ: Hơn 96% khách hàng của Olist chỉ mua hàng đúng một lần rồi biến mất mãi mãi. Điều gì khiến tỷ lệ Churn Rate lại cao đến mức cực đoan như vậy? Khách hàng không có nhu cầu mua sắm tiếp, hay do trải nghiệm của họ đã bị phá hỏng ngay từ lần chạm đầu tiên?
Khi phân tích sự phân bổ của hơn 100,000 lượt đánh giá (Review Score Distribution), chúng ta thấy một sự thật thú vị. Đây không phải là một đường cong hình chuông bình thường. Đại đa số khách hàng thực sự hài lòng (đánh giá 5 sao chiếm hơn 50%). Tuy nhiên, "cái đuôi" 1 sao lại phình to bất thường, chiếm khoảng 11-12% tổng số đơn hàng.
Nói cách hình tượng: Cứ 10 đơn hàng được giao đi, sẽ có ít nhất 1 khách hàng trải qua sự thất vọng tột độ (1 sao). Và trong ngành E-commerce, 1 trải nghiệm 1-sao hiếm khi chỉ dừng lại ở một lời phàn nàn - nó là dấu chấm hết cho vòng đời của một khách hàng. Vậy, rốt cuộc điều tồi tệ gì đã xảy ra bên trong những đơn hàng 1 sao đó? Ở bài blog này chúng ta sẽ cùng nhau đi sâu vào từng khía cạnh của một đơn hàng, tìm hiểu sự thật đằng sau con số biến mất khổng lồ này nhé.
2. Giải thích Dataset
Trong bài viết này, chúng tôi sử dụng dataset có sẵn trên Kaggle: Brazilian E-Commerce Public Dataset by Olist (Dataset)
Dataset này mô tả toàn bộ hành trình mua sắm trên nền tảng Olist từ 2016 đến 2018 - từ lúc khách hàng đặt hàng cho đến khi nhận hàng và để lại đánh giá.
2.1. Cấu trúc dữ liệu
Dataset gồm 9 bảng chính, mỗi bảng phản ánh một phần trong hành trình mua sắm:
- olist_orders_dataset.csv - 99.441 đơn hàng, 8 cột, bao gồm trạng thái đơn hàng (order_status) và 5 mốc thời gian từ đặt hàng đến giao hàng
- olist_order_items_dataset.csv - 112.650 dòng, mỗi dòng là một sản phẩm trong đơn, gồm giá (price) và phí vận chuyển (freight_value)
- olist_customers_dataset.csv - 99.441 khách hàng, thông tin địa lý theo zip code, thành phố và bang
- olist_sellers_dataset.csv - 3.095 người bán, thông tin địa lý tương tự phía khách hàng
- olist_order_payments_dataset.csv - 103.886 dòng, gồm giá trị thanh toán (payment_value), phương thức và số kỳ trả góp
- olist_order_reviews_dataset.csv - 99.224 đánh giá, gồm điểm đánh giá (review_score) từ 1-5 sao và bình luận của khách hàng
- olist_products_dataset.csv - 32.951 sản phẩm, gồm danh mục và thông số vật lý
- olist_geolocation_dataset.csv - 1.000.163 dòng tọa độ lat/lng theo zip code
- product_category_name_translation.csv - bảng dịch 73 danh mục sản phẩm từ tiếng Bồ Đào Nha sang tiếng Anh
Nhận xét: Bảng orders đóng vai trò trung tâm, kết nối hầu hết các bảng còn lại thông qua order_id và customer_id.
2.2. Góc nhìn phân tích
Một đơn hàng có thể được nhìn như một pipeline: Order → Processing → Shipping → Delivery → Review
Mỗi bước đều để lại dấu vết trong dữ liệu: thời gian xử lý, thời gian vận chuyển, chi phí - và cuối cùng là review score. Đây chính là nền tảng để trả lời câu hỏi của blog: điều gì xảy ra trong một đơn hàng có mức đánh giá thấp?
3. Làm sạch dữ liệu
Trước khi phân tích, cần đảm bảo dữ liệu phản ánh đúng thực tế. Quy trình làm sạch gồm 4 bước: kiểm tra dữ liệu bị thiếu, trùng lặp, ngoại lai và kiếm tra theo logic, định dạng dữ liệu.
3.1. Kiểm tra dữ liệu bị thiếu
missing = df.isnull().sum()
missing_pct = missing / len(df) * 100
Kết quả cho thấy missing data xuất hiện ở 3 bảng chính:
olist_orders_dataset.csv
print("=== GIÁ TRỊ THIẾU: orders ===")
print(orders_raw.isnull().sum())
print(f"Tổng số dòng: {len(orders_raw)}")
- order_approved_at: 160 dòng thiếu (0.16%)
- order_delivered_carrier_date: 1.783 dòng thiếu (1.79%)
- order_delivered_customer_date: 2.965 dòng thiếu (2.98%)
Đây là các đơn hàng chưa hoàn thành - chưa được duyệt hoặc chưa giao đến tay khách. Vì tỉ lệ đều dưới 5% và có lý do rõ ràng, xử lý bằng cách chỉ giữ lại các đơn có order_status = "delivered" để đảm bảo tính nhất quán cho toàn bộ phân tích.
olist_order_reviews_dataset.csv
print("=== GIÁ TRỊ THIẾU: reviews ===")
print(reviews_raw.isnull().sum())
print(f"Tổng số dòng: {len(reviews_raw)}")
- review_comment_title: 87.656 dòng thiếu (88.3%)
- review_comment_message: 58.247 dòng thiếu (58.7%)
Đây không phải lỗi dữ liệu - mà là hành vi người dùng. Phần lớn khách hàng Brazil chỉ chấm sao mà không để lại bình luận. Xử lý:
- Drop hoàn toàn cột review_comment_title (88% missing, không có giá trị phân tích)
- Giữ lại review_comment_message, tạo thêm cột has_comment để phân tích NLP ở phần sau chỉ làm việc trên ~41% đơn có nội dung
olist_products_dataset.csv
print("=== GIÁ TRỊ THIẾU: products ===")
print(products_raw.isnull().sum())
- product_category_name: 610 sản phẩm thiếu (1.85%) → map từ bảng dịch, còn lại gán nhãn "unknown"
- Thông số vật lý (cân nặng, kích thước): 2 dòng thiếu (0.01%) → xóa thẳng
3.2. Kiểm tra dữ liệu trùng lặp
print("=== TRÙNG LẶP ===")
for name, df in dfs.items():
n = df.duplicated().sum()
print(f"{name}: {n} duplicate rows ({len(df)*100:.2f}%)")
Hầu hết các bảng đều sạch hoàn toàn. Tuy nhiên có 2 trường hợp cần xử lý theo logic nghiệp vụ:
olist_order_reviews_dataset.csv
n_dup = reviews_raw.duplicated(subset="order_id").sum()
print(f"order_id bị dup: {n_dup}")
# output: 551
551 đơn hàng có nhiều hơn 1 review - xảy ra khi khách hàng cập nhật đánh giá nhiều lần. Giữ lại review mới nhất theo review_answer_timestamp:
reviews_clean = (
reviews_raw
.sort_values("review_answer_timestamp", ascending=False)
.drop_duplicates(subset="order_id", keep="first")
.reset_index(drop=True)
)
olist_geolocation_dataset.csv
n_zip = geo_raw["geolocation_zip_code_prefix"].nunique()
print(f"{len(geo_raw):,} dòng cho {n_zip:,} zip code")
# output: 1,000,163 dòng cho 19,015 zip code (avg 52.6 dòng/zip)
Hoàn toàn bình thường - mỗi zip code có nhiều địa chỉ khác nhau. Aggregate về median lat/lng để giữ 1 tọa độ đại diện mỗi zip:
geo_clean = (geo_raw
.groupby("geolocation_zip_code_prefix")
.agg(**lat=**("geolocation_lat", "median"),
lng=("geolocation_lng", "median"))
.reset_index()
)
3.3. Kiểm tra giá trị ngoại lai
for col in numeric_cols:
Q1 = df[col].quantile(0.25)
Q3 = df[col].quantile(0.75)
IQR = Q3 - Q1
lower, upper = Q1 - 1.5 * IQR, Q3 + 1.5 * IQR
n_out = ((df[col] < lower) | (df[col] > upper)).sum()
print(f"{col}: {n_out:,} outliers ({n_out/len(df)*100:.1f}%)")
| Cột | Outliers | Tỷ lệ |
|---|---|---|
| price | 8.427 | 7.48% |
| freight_value | 12.134 | 10.77% |
| payment_value | 7.981 | 7.68% |
| payment_installments | 6.313 | 6.08% |
Trong bối cảnh ecommerce, giá cao hoặc phí ship lớn không phải lỗi nhập liệu mà phản ánh thực tế thị trường. Tất cả outliers được giữ nguyên.
3.4. Kiểm tra logic & định dạng dữ liệu
# 5 cột datetime đang là object -- mọi tính toán thời gian sẽ sai nếu không parse
print("=== KIỂU DỮ LIỆU: orders ===")
print(orders_raw[DATETIME_COLS].dtypes)
# review_score phải trong [1, 5]
invalid_score = reviews_raw[~reviews_raw["review_score"].between(1, 5)]
print(f"review_score ngoài [1,5]: {len(invalid_score)} dòng")
# Giá và phí ship không được âm
print(f"price < 0: {(items_raw['price'] < 0).sum()} dòng")
print(f"freight_value < 0: {(items_raw['freight_value'] < 0).sum()} dòng")
# Ngày giao ước tính không được sớm hơn ngày đặt hàng
n_illogical = (orders_tmp["order_estimated_delivery_date"] < orders_tmp["order_purchase_timestamp"]).sum()
print(f"Vi phạm logic ngày: {n_illogical} dòng")
Kết quả:
- 5 cột datetime đang là kiểu object → convert toàn bộ bằng pd.to_datetime()
- review_score ngoài [1,5]: 0 dòng
- Giá âm: 0 dòng
- Vi phạm logic ngày: 0 dòng
- payment_type có giá trị "not_defined" ở 3 dòng → replace bằng NaN
Dataset có chất lượng logic rất tốt - không có vi phạm nào đáng kể ngoài vấn đề kiểu dữ liệu.
3.5. Kết quả sau làm sạch
| Bảng | Trước | Sau | Ghi chú |
|---|---|---|---|
| orders | 99.441 | 96.478 | Chỉ tính các sản đã được giao (delivered) |
| reviews | 99.224 | 98.673 | Xóa 551 review trùng lặp |
| geolocation | 1.000.163 | 19.015 | Gộp zip code theo trung vị, lấy tọa độ trung tâm để khi join không bị nhân bản dòng |
| products | 32.951 | 32.949 | Xóa 2 sản phẩm thiếu cân nặng/kích thước |
Ngoài ra, 2 cột mới được tạo để phục vụ phân tích phía sau:
- delivery_delay_days = ngày giao thực tế − ngày giao ước tính (dương = trễ, âm = sớm)
- has_comment = True nếu đơn hàng có nội dung bình luận
Sau bước này, 6.535 đơn (6.6%) được xác định là giao trễ. Con số tưởng nhỏ nhưng tác động của nó lên trải nghiệm khách hàng lớn hơn rất nhiều. Đó là điều các phần tiếp theo sẽ chứng minh.
4. Thị trường qua góc nhìn Time-series
4.1. Tổng quan tăng trưởng
Trong giai đoạn 01/2017 → 08/2018 (20 tháng):
- Số đơn hàng: tăng từ 750 lên 7.300 đơn/tháng (+747%)
- Tổng doanh thu: R\$ 15.4 triệu
Con số này đặt Olist vào nhóm những thị trường tăng trưởng nhanh nhất khu vực - chỉ sau 2 năm hoạt động. Song, đây mới là bề nổi của cả một hành trình.
4.2. Nghịch lý trong điểm đánh giá (review score)
Trong suốt 2017, điểm đánh giá trung bình dao động ổn định quanh ~4.2. Nhưng đến tháng 3/2018, điểm đánh giá (review score) rơi xuống 3.81 - mức thấp nhất trong toàn bộ dataset.
Một câu hỏi xuất hiện: tại sao trải nghiệm khách hàng lại tệ nhất đúng vào thời điểm hệ thống phát triển nhanh nhất?
4.3. Tăng trưởng không ổn định
Khi tách tăng trưởng thành hai lớp, câu trả lời bắt đầu rõ hơn
- Trung bình trượt (Moving/Rolling Average) 3 tháng: loại bỏ nhiễu ngắn hạn, cho thấy trend tăng đều và bền vững - trung bình +15.9% mỗi tháng
- Tăng trưởng tháng/tháng (MoM): tăng trưởng thực tế không đều và có những cú shock đột ngột:
- Black Friday 11/2017: volume vọt +63% trong một tháng
- Tháng 12/2017: giảm ngay -24% sau đó
4.4. Giai đoạn stress của hệ thống
Giai đoạn từ tháng 11/2017 đến tháng 3/2018 (vùng tô đỏ trên biểu đồ):
- Số lượng đơn hàng (Volume) tăng mạnh và duy trì ở mức cao bất thường
- Điểm đánh giá (Review score) giảm rõ rệt, chạm đáy sau 4 tháng
Giai đoạn này có thể được xem là "stress period" của hệ thống. Đáng chú ý, điểm đánh giá không giảm ngay khi khối lượng đơn hàng tăng lên mà xuất hiện độ trễ vài tháng. Điều này cho thấy vấn đề không nằm ở nhu cầu mà ở khả năng hệ thống thích nghi và xử lý lượng cầu tăng theo thời gian.
Nhận xét: Mặc dù Olist ghi nhận thị trường thương mại điện tử của Brazil mức tăng trưởng rất nhanh nhưng đà tăng này lại không ổn định. Sự biến động mạnh theo từng giai đoạn đã tạo ra những "cú sốc" mà hệ thống logistics không kịp thích nghi. Vì vậy các đơn hàng có mức đánh giá thấp không phải là những trường hợp ngẫu nhiên mà là hệ quả tất yếu của chính quá trình tăng trưởng thiếu ổn định đó.
5. Hành trình của một đơn hàng
Mục tiêu của phần này là "mổ xẻ" các giai đoạn vận hành của một đơn hàng để tìm ra nút thắt cổ chai (bottleneck). Chúng ta sẽ so sánh thời gian xử lý của các đơn 5 sao so với đơn 1 sao.
5.1. Nút thắt sinh tử nằm ở đâu?
Chúng tôi đã sử dụng Funnel Analysis để trực quan hóa hành trình một đơn hàng từ thanh toán, qua khâu kiểm duyệt cho tới khi đến được tay khách hàng, thể hiện thông qua biểu đồ bên dưới:
Để hiểu tại sao khách hàng lại phẫn nộ để lại đánh giá 1 sao, chúng ta cần tháo dỡ quy trình vận hành của Olist. Một đơn hàng thành công phải vượt qua 3 trạm kiểm soát (Funnel):
- Purchase to Approve: Thời gian xác nhận thanh toán.
- Approve to Carrier: Thời gian nhà bán hàng (seller) đóng gói và giao cho Đơn vị vận chuyển (Carrier).
- Carrier to Customer: Hành trình kiện hàng rong ruổi trên đường đến tay người mua.
Khi đo lường thời gian trung vị (median time) ở từng bước và phân tách chúng theo điểm đánh giá, thủ phạm thực sự bắt đầu lộ diện.
Sự khác biệt giữa một đơn hàng 5 sao và 1 sao không nằm ở khâu thanh toán hay đóng gói. Dữ liệu cho thấy:
- Khâu xử lý nội bộ (Thanh toán & Đóng gói): Thời gian giữa đơn 1 sao và 5 sao gần như tương đồng. Hệ thống xét duyệt thanh toán của Olist hoạt động trơn tru, và các nhà bán hàng nhìn chung đều tuân thủ tốt thời gian đóng gói gửi hàng (thường mất khoảng 1-2 ngày).
- Nút thắt cổ chai (The Bottleneck): Khâu "Carrier to Customer" chính là mồ chôn trải nghiệm khách hàng. Trong khi các đơn hàng 5 sao thường mất khoảng 6-7 ngày để vận chuyển, thì những khách hàng đánh giá 1 sao phải mòn mỏi chờ đợi trung bình hơn 13-14 ngày. Càng chờ lâu, điểm số càng trượt dài.
Khoảng cách này được minh chứng rõ rệt khi đối chiếu với biến is_late (Giao hàng trễ so với cam kết). Tỷ lệ giao hàng trễ ở nhóm khách hàng đánh giá 5 sao chỉ loanh quanh ở mức cực kỳ thấp, nhưng ở nhóm khách hàng 1 sao, tỷ lệ này tăng vọt. Sự đứt gãy trong khâu logistics, cộng hưởng với đặc thù địa lý rộng lớn của Brazil, đã biến khâu giao hàng chặng cuối (last-mile delivery) thành lỗ hổng lớn nhất đẩy khách hàng rời đi mãi mãi.
5.2. "Hố đen" của sự thất vọng: Khi lời hứa bị phá vỡ.
Ngoài ra, cảm xúc giận dữ của khách hàng còn nằm ở sự đứt gãy giữa kỳ vọng và thực tế vận hành. Hãy nhìn vào biểu đồ dưới đây để thấy "lời hứa" giao hàng đã bị phá vỡ như thế nào.
Dựa trên dữ liệu chênh lệch ngày giao hàng so với dự kiến (Delivery Delay Analysis), chúng ta thấy một quy luật nghiệt ngã:
- Sự hưng phấn của nhóm 5 sao: Những đơn hàng nhận được 5 sao thường có số ngày chênh lệch là số âm (nghĩa là nhận hàng sớm hơn dự kiến). Khách hàng không chỉ cần đúng hạn, họ yêu thích cảm giác được "vượt mong đợi".
- Sự phẫn nộ của nhóm 1 sao: Nhìn vào biểu đồ Boxplot, nhóm 1 sao có "cột râu" kéo dài tới tận 20-30 ngày trễ. Đây là những trường hợp "thất hứa" nghiêm trọng. Một khi đơn hàng vượt quá ngày cam kết, mỗi ngày trôi qua sẽ trừ đi một điểm niềm tin của khách hàng.
Nút thắt sinh tử của Olist nằm ở khâu Logistics chặng cuối (Đơn vị vận chuyển). Khách hàng không rời bỏ vì sản phẩm xấu, họ rời bỏ vì Olist đã phá vỡ cam kết về thời gian. Để cứu vãn tỷ lệ giữ chân khách hàng, Olist không thể chỉ cải thiện phần mềm; họ cần một chiến lược hạ tầng vật lý - đưa hàng hóa đến gần khách hàng hơn thông qua hệ thống kho bãi thông minh tại các bang trọng yếu.
6. Điều gì thật sự ảnh hưởng đến Review
6.1. Correlation Heatmap
Delta day: Chênh lệch giữa ngày giao hàng thực tế và ngày giao hàng cam kết (delivered_day - estimated_day)
Ship day: Số ngày giao hàng
Total Price: Tổng giá trị đơn hàng
Total Freight: Tổng giá trị vận chuyển
Number of installments: Số tháng thanh toán (Trả theo từng đợt)
Mối tương quan giữa Review Score và các biến vận chuyển
- Ship Day (-0.33): Đây là biến có tương quan nghịch mạnh nhất với Review Score. Thời gian giao hàng thực tế càng dài, điểm càng thấp. Khách hàng chấm điểm dựa trên trải nghiệm thực tế "chờ đợi bao lâu".
- Delta Day (-0.27): Hệ số này cho thấy sự "thất hứa" (giao sau ngày dự kiến) ảnh hưởng tiêu cực rõ rệt đến điểm số. Tuy nhiên, nó thấp hơn Ship Day, chứng tỏ khách hàng đôi khi vẫn khó chịu vì chờ lâu dù bạn đã báo trước là sẽ lâu.
Mối quan hệ giữa các biến Vận hành Delta Day & Ship Day (0.60)
- Tương quan thuận khá mạnh Điều này dễ hiểu: Hành trình càng dài thì rủi ro gặp sự cố trên đường càng cao, dẫn đến việc dễ bị vượt quá ngày dự báo.
· Tuy nhiên, nó không phải là 1.0, chứng tỏ hệ thống dự báo (Estimated Date) của Olist đã cố gắng bù trừ cho những quãng đường xa bằng cách nới lỏng thời gian cam kết.
Logic của dòng tiền và sản phẩm
- Total Price & Number of installments (0.32): Tương quan thuận. Khách hàng có xu hướng chia nhỏ kỳ hạn trả nợ khi mua những món đồ đắt tiền. Trả góp là một văn hóa tiêu dùng mạnh mẽ tại Brazil.
- Total Price & Total Freight (0.41): Tương quan trung bình. Có thể nói hàng giá trị cao (như TV, tủ lạnh) thường cồng kềnh, nặng nề nên phí vận chuyển cao hơn hoặc là đồ điện tử (laptop, điện thoại) thì chi phí bảo hiểm vận chuyển cao.
Mối quan hệ giữa Giá trị hàng và Chi phí vận chuyển (0.41)
- Hàng đắt tiền thường đi kèm phí ship cao: Điều này có thể do các mặt hàng giá trị cao thường cồng kềnh hơn (đồ gia dụng, điện tử) hoặc yêu cầu bảo hiểm vận chuyển, đóng gói đặc biệt.
- Cơ hội tối ưu: Tuy nhiên, con số 0.41 không phải là quá cao (tương quan trung bình). Điều này gợi ý rằng có những mặt hàng giá rẻ nhưng phí ship vẫn cao (có thể do khoảng cách địa lý xa như từ São Paulo đi các bang vùng sâu vùng xa).
Sự cộng hưởng giữa Ship Day và Total Freight (0.20)
- Càng xa càng đắt, càng lâu: Phí ship cao thường đi kèm với khoảng cách địa lý lớn. Khoảng cách lớn dẫn đến thời gian giao hàng thực tế (Ship Day) kéo dài.
- Insight: Khách hàng ở vùng sâu vùng xa đang phải chịu "thiệt thòi kép": vừa trả phí cao hơn, vừa phải chờ đợi lâu hơn. Đây chính là nhóm khách hàng dễ để lại Review Score thấp nhất mà bạn đã thấy trên bản đồ địa lý.
Dữ liệu khẳng định một nghịch lý trong tâm lý khách hàng: Họ có thể dễ dàng chấp nhận một mức giá cao (Total Price) hay phí ship đắt đỏ, nhưng lại cực kỳ khắt khe với sự chờ đợi (Ship Day) và đặc biệt là sự thất hứa (Delta Day) trong hành trình vận chuyển.
6.2. Phân tích mật độ và LOESS: Tác động của việc giao hàng đến điểm đánh giá
Số ngày vận chuyển
- Ngưỡng an toàn (0 - 20 ngày): Trong khoảng này, đường cong màu đỏ dốc rất nhẹ. Khách hàng vẫn khá hài lòng và sẵn sàng cho 4-5 sao dù thời gian giao hàng có tăng thêm vài ngày.
- "Điểm gãy" (The Breaking Point - Khoảng 25 ngày): Đây là dữ liệu cực kỳ đắt giá. Ngay khi vượt qua mốc 25 ngày, đường LOESS đổ dốc thẳng đứng. Điều này cho thấy sự kiên nhẫn của khách hàng đã cạn sạch, và khả năng nhận 1-2 sao tăng đột biến.
- Vùng tuyệt vọng (> 50 ngày): Sau 50 ngày, điểm số chạm đáy (1 sao). Lúc này, tốc độ không còn ý nghĩa vì khách hàng đã hoàn toàn thất vọng.
Chênh lệch giữa thời gian giao hàng dự kiến và thời gian giao hàng thực tế
Vùng làm tốt (Estimated vs. Actual < 0): Khi hàng đến sớm hơn dự kiến (phía bên trái vạch 0), điểm số duy trì cực kỳ ổn định ở mức sát 5 sao. Bạn có thể thấy đường kẻ đỏ gần như nằm ngang, chứng tỏ khách hàng rất hài lòng khi nhận hàng sớm
Vùng chuyển giao (Từ 0 đến 5 ngày trễ): Sự sụt giảm bắt đầu xuất hiện nhưng chưa quá gắt. Khách hàng vẫn còn sự kiên nhẫn nhất định
"Điểm gãy" (The Breaking Point): Ngay sau khi vượt qua mốc 5 ngày trễ, đường LOESS bắt đầu đổ dốc không phanh. Đây chính là khoảnh khắc sự kiên nhẫn biến thành sự thất vọng (Frustration)
6.3. Kết luận
Dựa trên sự kết hợp giữa Thời gian giao hàng và Độ lệch so với dự kiến, chúng ta có thể rút ra một kết luận mang tính chiến lược cho bài blog của bạn.
Hai biểu đồ này không chỉ mô tả dữ liệu mà còn định nghĩa rõ "Luật chơi của niềm tin" trong thương mại điện tử:
Sự kết hợp giữa "Thời gian" và "Lời hứa"
- Thời gian giao hàng cho thấy khách hàng bắt đầu mất kiên nhẫn sau 25 ngày chờ đợi tuyệt đối.
- Chênh lệch thời gian giao hàng bổ sung rằng sự thất vọng sẽ bùng nổ chỉ sau 5 ngày nếu bạn giao trễ hơn dự kiến.
- Kết luận: Bạn có thể giao hàng chậm (ví dụ 20 ngày), nhưng tuyệt đối không được giao trễ hơn lời hứa quá 5 ngày. Khách hàng thà nhận một lời hứa "giao trong 20 ngày" và nhận đúng hạn, còn hơn nhận lời hứa "10 ngày" nhưng 15 ngày mới có hàng.
Định nghĩa "Vùng rơi tự do" của lòng tin : Cả hai biểu đồ đều xác nhận một hiện tượng phi tuyến tính (không phải cứ trễ 1 ngày là điểm giảm 1 ít):
- Vùng ổn định: Từ -30 đến 0 ngày thời gian giao hàng và 0 đến 20 ngày chênh lệch, lòng trung thành của khách hàng là "bất khả xâm phạm" với mức điểm sát 5 sao.
- Vùng sụp đổ: Ngay khi bước qua "điểm gãy" (Breaking Point), điểm số không giảm dần mà rơi thẳng đứng. Điều này cho thấy khách hàng không hề khoan nhượng khi sự chờ đợi vượt quá ngưỡng chịu đựng tâm lý.
Trong Logistics, tốc độ giao hàng nhanh là một lợi thế, nhưng sự chính xác so với cam kết mới là 'túi khí' bảo vệ thương hiệu. Khách hàng có thể bao dung cho một hành trình dài, nhưng sự kiên nhẫn của họ sẽ sụp đổ hoàn toàn nếu bạn bước qua ngưỡng 5 ngày trễ hẹn hoặc 25 ngày chờ đợi."
7. Khách hàng phàn nàn về điều gì?
7.1. Khi dữ liệu nói lên "nỗi đau" thật sự
Nếu phần trước cho thấy điểm số review là một kết quả cuối cùng, thì ở đây chúng ta đi thẳng vào nguyên nhân cảm xúc đằng sau những đánh giá 1 sao. Để làm điều đó, tôi không nhìn vào toàn bộ bình luận một cách cảm tính, mà dùng NLP kết hợp topic modeling để bóc tách những chủ đề xuất hiện nhiều nhất trong review của khách hàng.
Khi nhìn vào word cloud, sự khác biệt giữa hai nhóm gần như hiện ra ngay lập tức. Ở nhóm 1 sao, những từ nổi bật nhất xoay quanh các tín hiệu của sự thất vọng: entrega (giao hàng), prazo (thời hạn), chegou (đã đến), atraso (trễ), reclamo/reclamação (phàn nàn), aguardando (đang chờ), problema (vấn đề). Những từ này không chỉ mô tả một đơn hàng chậm, mà còn mô tả một trải nghiệm bị kéo dài trong trạng thái chờ đợi, bực bội và mất niềm tin.
Ngược lại, ở nhóm 5 sao, thế giới ngôn ngữ hoàn toàn khác. Các từ như prazo, entrega, rápida (nhanh), ótimo (tốt), perfeito (hoàn hảo), recomendo (khuyên mua), qualidade (chất lượng) xuất hiện dày đặc. Điều này cho thấy khách hàng không chỉ hài lòng vì "nhận được hàng", mà còn hài lòng khi đơn hàng đến đúng lời hứa, thậm chí vượt kỳ vọng. Nói cách khác, review tích cực không đến từ sản phẩm một mình, mà đến từ việc toàn bộ hành trình giao hàng vận hành trơn tru.
7.2. Topic modeling: complaint không phải ngẫu nhiên, mà có cấu trúc
Khi đi sâu hơn bằng BERTopic, các complaint trong nhóm 1 sao cũng không hề rời rạc. Chúng tụ lại thành những cụm chủ đề rất rõ. Cụm lớn nhất là Delivery, chiếm áp đảo gần như toàn bộ review 1 sao. Trong cụm này, những từ khóa như delivery, came, delivered, arrived, still cho thấy một trạng thái chung: khách hàng liên tục nhắc đến việc hàng đã đến hay chưa, đã bị trễ bao lâu, và vì sao vẫn chưa được xử lý.
Những topic nhỏ hơn như relógio (đồng hồ), cadeira (ghế), cortina (rèm) không nói rằng chính sản phẩm đó là vấn đề cốt lõi. Ngược lại, chúng cho thấy phàn nàn vẫn bám vào đơn hàng cụ thể, nhưng gốc rễ của bất mãn thường nằm ở hành trình giao nhận chứ không phải ở bản thân danh mục sản phẩm. Điều này rất quan trọng: khách hàng không viết review 1 sao chỉ vì họ mua đồng hồ hay ghế, mà vì đơn hàng của họ bị kéo vào một trải nghiệm vận hành tệ.
Từ góc nhìn phân tích, đây là một kết luận rất đắt giá: review thấp không phân bố ngẫu nhiên theo sản phẩm; nó tập trung mạnh vào logistics. Nói cách khác, Olist không đang thất bại ở "cái gì được bán", mà đang thất bại ở "cái gì xảy ra sau khi bán xong". Và khi khách hàng bắt đầu dùng ngôn ngữ của sự chờ đợi, trì hoãn, và thất hứa, đó là dấu hiệu cho thấy niềm tin đã bắt đầu sụp.
8. Sau trải nghiệm tệ - họ có quay lại?
8.1. Retention không chỉ là giữ chân, mà là giữ lại niềm tin
Sau khi đã biết khách hàng đang phàn nàn điều gì, câu hỏi tiếp theo tự nhiên xuất hiện là: một trải nghiệm tệ có thật sự đẩy khách hàng đi mãi mãi không?
Đây là lúc survival analysis trở nên hữu ích. Thay vì chỉ hỏi "ai churn?", chúng ta hỏi sâu hơn: sau bao lâu thì khách hàng ngừng quay lại? Và tốc độ rời bỏ đó có khác nhau giữa các nhóm trải nghiệm hay không?
Biểu đồ Kaplan-Meier cho thấy một điều rất rõ: nhóm late delivery luôn nằm dưới nhóm on-time/early gần như suốt toàn bộ trục thời gian. Điều này có nghĩa là ngay từ sau lần mua đầu tiên, khách hàng gặp giao trễ đã có xác suất quay lại thấp hơn. Khoảng cách giữa hai đường không bùng nổ ngay lập tức, nhưng nó xuất hiện sớm và duy trì dai dẳng. Đây chính là kiểu tổn thương rất nguy hiểm trong e-commerce: không phải khách hàng "đóng cửa" ngay, mà họ âm thầm rút lui nhanh hơn.
Đặc biệt, đường survival của nhóm giao trễ nằm thấp hơn khá nhất quán trong vùng đầu của đồ thị - tức là giai đoạn mà khách hàng vẫn còn đang cân nhắc có nên thử mua lại hay không. Điều đó cho thấy tác động của việc giao hàng trễ không dừng ở sự bực bội nhất thời; nó làm giảm xác suất tái mua ở chính thời điểm mà thương hiệu cần giữ khách nhất.
8.2. Một trải nghiệm xấu không chỉ làm giảm hài lòng, mà còn rút ngắn vòng đời khách hàng
Khi nhìn sang survival curve theo review score, bức tranh còn rõ hơn nữa. Nhóm 1 sao rơi xuống rất nhanh và tách khỏi các nhóm còn lại gần như ngay từ đầu. Các nhóm 2-5 sao có quỹ đạo gần nhau hơn nhiều, nhưng vẫn cho thấy một nguyên tắc chung: càng điểm cao, khách hàng càng ở lại lâu hơn. Điều này xác nhận rằng review không phải chỉ là "lời nhận xét sau mua", mà là một chỉ báo khá mạnh cho khả năng quay lại trong tương lai.
Điểm đáng chú ý là nhóm 1 sao không chỉ thấp hơn, mà còn tụt nhanh hơn hẳn. Nói theo ngôn ngữ retention, đây là nhóm có "vòng đời khách hàng" ngắn nhất. Một trải nghiệm cực tệ không chỉ làm mất một đơn hàng, mà còn làm mất luôn giá trị tương lai của khách hàng đó. Nếu xét dưới góc độ kinh doanh, tổn thất này lớn hơn rất nhiều so với một lần giao hàng muộn: Olist mất không chỉ doanh thu hiện tại, mà còn mất cả khả năng biến khách hàng thành người mua lặp lại.
8.3. Kết luận: churn không đến từ giá, mà đến từ vết nứt trong trải nghiệm
Ghép hai biểu đồ lại với nhau, chúng ta thấy một kết luận rất nhất quán:
Delivery delay làm khách hàng khó chịu; review thấp cho thấy sự khó chịu đó đã được ghi nhận; survival analysis chứng minh nó tiếp tục chuyển hóa thành churn trong tương lai.
Nói cách khác, trải nghiệm tệ không chỉ phá hỏng một đơn hàng, mà còn phá vỡ toàn bộ mối quan hệ giữa khách hàng và nền tảng. Với Olist, vấn đề không nằm ở việc khách hàng có mua hay không, mà ở việc sau khi đã mua và thất vọng, họ có còn đủ lý do để quay lại nữa hay không. Và câu trả lời từ dữ liệu là: càng tệ, họ càng rời đi nhanh hơn; càng bị thất hứa, vòng đời khách hàng càng ngắn lại.
9. Hiệu suất giao hàng theo tiểu bang
9.1. Logistics Risk Map
Dựa trên việc đối chiếu giữa Bản đồ Rủi ro Logistics và biểu đồ Top 10 Bang có điểm Review cao nhất, chúng ta có thể thấy 3 trường hợp đặc biệt (MS, TO, RS), những bang có tỷ lệ trễ cao (>5%) nhưng vẫn duy trì được mức độ hài lòng của khách hàng trong nhóm dẫn đầu
Thông thường, tỷ lệ trễ tỷ lệ nghịch với điểm số review. Tuy nhiên, sự xuất hiện của MS (9.76%), TO (10%) và RS (5.99%) trong danh sách điểm cao nhất cho thấy các yếu tố quản trị khác đã bù đắp cho sự chậm trễ này:
- Mato Grosso do Sul (MS - 9.76%) & Tocantins (TO - 10.0%): Mặc dù có tỷ lệ trễ khá cao (màu cam đậm trên bản đồ), hai bang này vẫn đạt điểm review ấn tượng là 4.16. Điều này cho thấy khách hàng tại các bang này có thể có kỳ vọng thực tế về thời gian giao hàng do vị trí địa lý hoặc Olist đã thực hiện tốt khâu thông báo trạng thái đơn hàng, giúp giảm bớt sự thất vọng khi có trễ chuyến.
- Rio Grande do Sul (RS - 5.99%): Với tỷ lệ trễ xấp xỉ 6%, RS vẫn đạt điểm số cao là 4.19. Đây là minh chứng cho việc chất lượng sản phẩm hoặc dịch vụ khách hàng tại khu vực phía Nam này rất tốt, đủ sức thuyết phục khách hàng "vị tha" cho những sai số nhỏ về thời gian giao hàng.
Sự khác biệt trở nên rõ rệt khi nhìn vào các bang như MA (Maranhão) hay PI (Piauí) trên bản đồ:
- Các bang này có tỷ lệ trễ vượt ngưỡng rủi ro nghiêm trọng (>15%, màu đỏ đậm).
- Kết quả là chúng hoàn toàn vắng bóng trong danh sách Top 10 Review Score.
- Nhận xét: Ngưỡng 10% (của MS và TO) dường như là "giới hạn cuối cùng" của sự bao dung. Khi tỷ lệ trễ vượt qua mức này và tiến tới vùng 15-20%, sự hài lòng của khách hàng sẽ sụp đổ và không thể lọt vào nhóm dẫn đầu.
Ngược lại với nhóm trên, các bang như SP (São Paulo) và PR (Paraná) thể hiện sự ổn định tuyệt đối:
- Tỷ lệ trễ cực thấp (màu nhạt nhất trên bản đồ, thường <5%).
- Dẫn đầu bảng xếp hạng review với điểm số từ 4.24 đến 4.25.
- Đây là nhóm tiêu chuẩn (Benchmark) mà các bang khác cần hướng tới: Vận hành nhanh chóng đi đôi với sự hài lòng tối đa.
9.2. Mối tương quan về mặt địa lý giữa người bán và khách hàng
Để phân tích tiêu chí này chúng ta sẽ chia thành 3 nhóm:
- Intrastate: Đơn hàng mà sản phẩm sẽ cùng bang với khách hàng
- Interstate: Đơn hàng mà sản phẩm sẽ khác bang với khách hàng
- Hybrid Origin: Đơn hàng có nhiều hơn một sản phẩm, ít nhất một sản phẩm cùng bang và ít nhất một sản phẩm khác ban
Nhóm Intrastate (Nội bang): Hình mẫu lý tưởng
- Chỉ số: Điểm Review cao nhất (4.27) và Tỉ lệ trễ ở mức thấp (4.5%).
- Đây là minh chứng rõ nhất cho lợi thế của sự gần gũi địa lý. Khoảng cách ngắn giúp giảm thiểu rủi ro trong chuỗi cung ứng, dẫn đến sự hài lòng ổn định của khách hàng.
Nhóm Interstate (Liên bang): Sức cản của khoảng cách
- Chỉ số: Tỉ lệ trễ tăng vọt lên mức cao nhất (7.9%), kéo theo điểm Review giảm xuống (4.10).
- Nhận xét: Đúng như dự đoán của các mô hình logistics, khi hàng hóa phải đi xuyên bang, các rào cản về hạ tầng và thời gian vận chuyển (Lead time) sẽ đẩy tỷ lệ trễ lên cao, trực tiếp làm sụt giảm trải nghiệm người dùng.
Nhóm Hybrid Origin (Hỗn hợp): Nghịch lý dữ liệu
- Chỉ số: Tỉ lệ trễ thấp kỷ lục (0.4%) nhưng Điểm Review lại chạm đáy (2.91).
- Thông thường, giao hàng nhanh sẽ có điểm cao, nhưng ở đây thì ngược lại. Điều này gợi mở các giả thuyết về hành vi:
- Kỳ vọng không đồng bộ: Khi khách hàng mua nhiều món (một món gần, một món xa), họ có xu hướng mong đợi tất cả phải đến nhanh như món đồ "nội bang".
- Phức tạp trong đóng gói: Đơn hàng hỗn hợp thường dẫn đến việc giao hàng nhiều lần (Split shipments). Khách hàng có thể cảm thấy phiền hà khi phải nhận hàng lẻ tẻ, dẫn đến đánh giá thấp bất kể tốc độ trung bình là rất nhanh.
10. Kết luận: Cuộc chiến thật sự không nằm ở tăng trưởng, mà ở lời hứa
Nhìn lại toàn bộ hành trình phân tích, câu chuyện của Olist không còn đơn thuần là một bài toán về tăng trưởng, mà là một bài toán về niềm tin.
Trong giai đoạn 2017-2018, Olist đã làm rất tốt một việc mà bất kỳ nền tảng e-commerce nào cũng khao khát: mở rộng thị trường với tốc độ cực nhanh. Nhưng chính tốc độ đó lại vô tình tạo ra những "vết nứt" trong vận hành - đặc biệt là ở khâu logistics chặng cuối. Và khi những vết nứt này xuất hiện, chúng không chỉ làm chậm một đơn hàng, mà làm đứt gãy toàn bộ trải nghiệm khách hàng.
Dữ liệu đã cho thấy một chuỗi nguyên nhân - hệ quả rất rõ ràng:
- Tăng trưởng không ổn định → hệ thống logistics bị quá tải
- Quá tải vận hành → giao hàng chậm và trễ hẹn
- Trễ hẹn → review score giảm mạnh (đặc biệt sau ngưỡng 5 ngày)
- Review thấp → khách hàng rời bỏ nhanh hơn (churn tăng cao)
Và kết quả cuối cùng chính là con số đáng sợ ban đầu: hơn 96% khách hàng không bao giờ quay lại.
Một trong những insight quan trọng nhất từ toàn bộ phân tích là: khách hàng có thể chấp nhận chờ lâu - nhưng không chấp nhận bị thất hứa.
- Giao trong 20 ngày nhưng đúng hẹn → vẫn có thể nhận 4-5 sao
- Hứa 10 ngày nhưng giao trong 15 ngày → rất dễ nhận 1-2 sao
Điều này định nghĩa lại ưu tiên trong e-commerce:
- Tốc độ là lợi thế cạnh tranh
- Nhưng độ chính xác của lời hứa mới là nền tảng của niềm tin
Nút thắt chiến lược: Logistics, khách hàng không rời bỏ vì sản phẩm tệ:
- Review 1 sao tập trung vào: giao hàng, chờ đợi, trễ hẹn
- Không tập trung vào: chất lượng sản phẩm
Điều này có nghĩa:
Olist không thất bại ở "cái họ bán", mà thất bại ở "cách họ giao".
Giữ chân khách hàng không thể được "mua" bằng marketing, nó phải được xây bằng vận hành.
Các hướng đi chiến lược bao gồm:
- Xây dựng hệ thống kho phân tán (distributed warehouse) gần khách hàng
- Tối ưu last-mile delivery
- Cải thiện hệ thống dự báo thời gian giao hàng (ETA)
- Minh bạch trạng thái đơn hàng theo thời gian thực
- Quản lý kỳ vọng khách hàng thay vì "hứa cho hấp dẫn"
E-commerce thường được xem là cuộc chiến của:
- Giá
- Sản phẩm
- Trải nghiệm giao diện
Nhưng trong thực tế, nó là cuộc chiến của logistics và niềm tin.
Olist đã thắng trong việc đưa khách hàng đến với nền tảng lần đầu.
Nhưng lại thua trong việc giữ họ ở lại.
Và dữ liệu đã chứng minh một sự thật đơn giản nhưng khắc nghiệt: một trải nghiệm giao hàng tệ không chỉ làm mất một đơn hàng, nó xóa luôn toàn bộ giá trị vòng đời của khách hàng đó.
11. Tài liệu tham khảo
- Tất cả hình ảnh trong bài viết đều được tạo từ thư viện python, ngoại trừ Hình 1 (Olist: Bài học về giữ chân và thu hút khách hàng) được tạo từ Gemini AI.
- LOESS Regression: Kỹ thuật hồi quy làm mịn dữ liệu (lowess smoothing).
- Kaplan-Meier Estimator: Phương pháp phi tham số dùng để ước tính hàm sống sót (Kaplan Meier)
- Pandas & NumPy: Thư viện xử lý dữ liệu cấu trúc và tính toán số học (Pandas Doc).
- Matplotlib & Seaborn: Công cụ trực quan hóa dữ liệu (Seaborn).
- Plotly Express: Thư viện hỗ trợ vẽ bản đồ Brazil theo dữ liệu có sẵn (Plotly Express).
- Ngoài ra còn sử dụng những kiến thức từ khóa học AIO2026.
Chưa có bình luận nào. Hãy là người đầu tiên!