iT邦幫忙

2026 iThome 鐵人賽

DAY 12
0
自我挑戰組

拯救混亂數據:30 天 Python 輕量級 ETL 與電商關聯資料分析系列 第 12

[Day 12] 揪出隱形炸彈:品類跨表翻譯與「高負評率」門檻過濾實戰

  • 分享至 

  • xImage
  •  

好評靠營運,差評看品類?

在 Day 11 中,我們證實了「物流延遲」是摧毀買家信任、引爆 1 星負評的頭號元兇。

但如果今天物流完全準時,商品評價就一定高枕無憂嗎?答案是否定的。很多時候,差評並不是物流跳票,
而是商品本身的屬性踩了雷——例如尺寸不合、組裝困難、運送途中易碎,或是品質與照片落差過大。

今天我們將跨表引入商品資料表 (products) 與品類翻譯表,透過衍生特徵「負評率 (Bad Review Rate)」,
並配合分析師必備的「統計樣本門檻」,揪出全平台真正拖垮滿意度的隱形地雷品類!

步驟一:雙表串聯—把葡萄牙文翻譯成標準維度

在 olist_db 字典中,有兩張跟商品相關的關鍵表:

  • olist_products_dataset:記錄商品的長寬高、重量與所屬品類。

  • product_category_name_translation:將葡萄牙文品類名稱對照為英文的翻譯字典。

我們先將這兩張表串接起來,建立具備英文名稱的商品清單:

# 1. 取出商品表與翻譯表
products = olist_db['olist_products_dataset']
translation = olist_db['product_category_name_translation']

# 2. 將商品表與翻譯表進行 Left Join,取得英文品類名稱
products_en = pd.merge(
    products, 
    translation, 
    on='product_category_name', 
    how='left'
)

# 3. 檢視前三筆
products_en[['product_id', 'product_category_name', 'product_category_name_english']].head(3)

實作 :
https://ithelp.ithome.com.tw/upload/images/20260919/20136155xjt8Yyq6Ad.png

步驟二:串接訂單評價,定義「負評率 (Bad Review Rate)」

在電商營運實務中,3 星通常代表普通,4~5 星代表正向好評,而 1~2 星則會被歸類為嚴重的負向體驗(Defect / Bad Review)。

我們將商品資料與帶有評分的訂單明細串聯,並為每一筆商品評價標註是否為負評:

# 1. 將包含評分的訂單與商品明細串接
# 由於一張訂單可能包含多個品項,以 items 為橋樑進行串聯
item_reviews = pd.merge(
    items[['order_id', 'product_id']], 
    orders_with_reviews[['order_id', 'review_score']], 
    on='order_id', 
    how='inner'
)

# 2. 接上具備英文品類的商品資料
item_category_reviews = pd.merge(
    item_reviews, 
    products_en[['product_id', 'product_category_name_english']], 
    on='product_id', 
    how='left'
)

# 3. 衍生二元標籤:是否為 1~2 星負評
item_category_reviews['is_bad_review'] = item_category_reviews['review_score'] <= 2

實作 :

https://ithelp.ithome.com.tw/upload/images/20260919/20136155NjOd4W1MUF.png

步驟三:避坑實戰為什麼不能直接 sort_values?

很多初學者算出各品類的負評率後,立刻執行降冪排序:

# ❌ 危險示範:無門檻排序
naive_ranking = item_category_reviews.groupby('product_category_name_english').agg(
    total_reviews=('review_score', 'count'),
    bad_review_rate=('is_bad_review', 'mean')
).reset_index()

naive_ranking.sort_values(by='bad_review_rate', ascending=False).head(5)

執行後你會發現:名列前茅的往往是 security_and_services 這類冷門品類,負評率高達 100%。
但仔細一看,它的總評論數只有 1~2 筆!這在統計學上稱為小樣本偏差(Small Sample Fallacy)。
若拿這份名單去向主管匯報「這個品類是全平台最大地雷」,營運團隊只會啼笑皆非。
老手做法:設定樣本門檻(Threshold Filtering)我們必須過濾掉評論數過少的長尾品類
(例如總評論數必須 $\ge$ 100 筆),才能反映真實的品類品質:

# 1. 聚合計算各品類的總評論數、平均星等與負評率
category_summary = item_category_reviews.groupby('product_category_name_english').agg(
    total_reviews=('review_score', 'count'),
    avg_score=('review_score', 'mean'),
    bad_review_rate=('is_bad_review', 'mean')
).reset_index()

# 2. 防呆門檻:只保留累積評論數 >= 100 筆的主力品類
significant_categories = category_summary[category_summary['total_reviews'] >= 100].copy()
significant_categories['bad_review_rate_pct'] = (significant_categories['bad_review_rate'] * 100).round(2)
significant_categories['avg_score'] = significant_categories['avg_score'].round(2)

# 3. 依負評率降冪排序,檢視真正的高風險品類
significant_categories.sort_values(by='bad_review_rate', ascending=False).head(5)

實作 : 

https://ithelp.ithome.com.tw/upload/images/20260919/20136155u5wD2Qusn4.png

步驟四:商業洞察—誰是真正的地雷品類?

在排除極端小樣本後,真正的問題品類浮出水面:

辦公家具 (office_furniture):
負評率逼近 25%~30%,平均評分僅約 3.5 分左右。
每 4 位買家就有 1 位留下 1~2 星負評。

大型家電 / 音響器材: 負評率同樣顯著高於平均。

背後的關鍵線索:
仔細觀察這些高負評品類的物理特性,它們幾乎全數具備「體積龐大」、「重量沉重」或「結構脆弱」的特點。
在長途顛簸的物流網絡中,大件商品極易發生外箱破損、邊角碰撞,或者需要買家自行組裝卻缺少零件,
這些品類特徵與配送品質交互作用,形成了消費者體驗的重災區。


今天掌握了商品維度的深度挖掘技巧:

  • 多表標準化: 透過翻譯字典將外文代碼映射為易於商業溝通的標準品類。

  • 嚴防小樣本偏差: 透過評論數門檻過濾,避免極端長尾數據誤導商業決策。

  • 定位體驗地雷: 發現大件家具與精密設備是拖垮滿意度的核心痛點。

既然辦公家具等大件品類是負評重災區,這是否與它們的「商品重量」與「包裝體積」直接相關?
明天 Day 13,我們將進一步剖析 products 中的物理規格數據,計算體積重量比與物流成本的連鎖反應!


上一篇
承諾與背叛:計算物流延遲天數,揭露 1 星負評的致命元兇
下一篇
[Day 13] 用 pd.cut 特徵分箱拆解「重量級別與延遲率」
系列文
拯救混亂數據:30 天 Python 輕量級 ETL 與電商關聯資料分析15
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言