同事拿來一張報表:「這個月平均配送時間從24分鐘變成51.3分鐘,模型是不是壞了?」
先別急著換模型。若這個月偏遠地區的訂單突然變多,即使市區與偏遠地區各自都送得更快,整體平均仍然可能上升。
探索性資料分析(exploratory data analysis,EDA)就是在正式建模前,先理解資料的定義、分布、組成和異常,提出值得驗證的問題。它可以找出後續研究方向,卻不會只靠一張圖就證明原因。
這篇從「一列代表什麼」開始,依序看單一變數、分組差異與變數關聯。配圖採用 Seaborn 官方教材原圖:企鵝資料是形態測量,Tips 資料是餐廳帳單與小費。本文的配送算例另外設計,不把兩者說成同一份資料。
畫第一張圖之前,先定義觀測單位
假設一份資料有一千列,這不一定等於一千張訂單。同一張訂單可能有三個品項、五次物流掃描,或多筆付款紀錄。
如果一列是商品,直接對每列的「整張訂單金額」取平均,商品多的訂單就被重複計算。這時數學式沒錯,錯的是分析單位。
先寫一份最小欄位說明:
這一步決定後面每張圖的分母。圖形漂亮,也救不了定義混在一起的欄位。
單變量:先看資料集中在哪裡、尾巴延伸多遠
對配送時間,可以用相同方式問:大部分訂單落在哪個區間?有沒有負值、不合理的大值,或正好卡在某個上限的堆積?
發現長尾時,不要立刻刪掉它。它可能是紀錄錯誤,也可能正是業務最在意的長時間等待。EDA 的任務是把問題指出來,再結合欄位定義與原始紀錄判定。
類別欄位則先看每類有幾筆。類別順序和數值距離不是同一件事,不需要把城市編成1、2、3後,再畫成連續分布。
類別筆數懸殊可能影響後面的比較:某個倉庫只有五張訂單,另一個有五萬張,平均值即使差很多,可信程度也不同。
切片:總體形狀可能是不同群體混合出來的
回到配送問題,可以分別看城市、倉庫、時段、配送方式。切片的目的,是檢查原本的結論在哪些群體成立、在哪些群體失效。
若重疊顏色太多,就把圖拆開。不同小圖應保留可比較的座標範圍,避免一張圖放大、一張圖縮小,讓差異看起來被誇大或縮小。
還要決定自己是在比「量」還是比「形狀」。某一群總共有很多資料,柱子自然可能比較高;如果想比較群體內部的分布,可改用各組面積歸一化後的密度。
因此,報告中最好同時留下各組筆數。密度看起來差異很大,也可能只是小樣本造成的不穩定。
一個完整算例:每組都變快,總平均卻變慢
下面是另設的教學數表。每期各100張訂單,市區與偏遠地區的平均時間都下降,但兩種訂單的比例大幅改變:
| 期間 | 地區 | 訂單數 | 組內平均分鐘 |
|---|---|---|---|
| 前期 | 市區 | 90 | 20 |
| 前期 | 偏遠 | 10 | 60 |
| 後期 | 市區 | 10 | 18 |
| 後期 | 偏遠 | 90 | 55 |
前期整體平均 = (90 × 20 + 10 × 60) / 100 = 24
後期整體平均 = (10 × 18 + 90 × 55) / 100 = 51.3
整體平均變慢,並不等於每一種訂單都變慢。這個例子提醒我們,總體指標同時受到組內表現與群體組成影響。
但也不能因此宣布營運「其實變好了」。如果團隊現在真的要處理更多偏遠訂單,整體等待變長仍是需要面對的事。不同問題要看不同指標:比較流程效率時控制可比條件;評估所有顧客目前的體驗時,也要保留當期的真實組成。
兩個變數:先用散點圖看關聯,再問是否混入其他因素
用在配送時,可以把距離放在橫軸、配送時間放在縱軸。先看是否有明顯趨勢,再找離整體趨勢很遠的點,回頭核對原始紀錄。
若不同配送方式使用不同路線,整體關聯可能混合了多種情況。這時再加入一個分組變數,比直接畫一條線更有幫助。
如果還想加上人數、時段等變數,不必全部塞進同一張圖。顏色、形狀與大小都需要額外解讀;資訊過多,反而容易忽略真正的問題。
聯合分布與成對圖:拿來導航,不要把每個圖案都當發現
這種圖可以幫你分清:某個稀疏區域,是因為其中一個變數本來就少見,還是兩個變數的組合特別少見?
變數更多時,成對圖會把多個組合並排。它很適合建立問題清單,但也增加了「看很多次、剛好找到漂亮圖案」的機會。
在同一批資料上找出一個分組差異,再用同一批資料宣布這個差異必然成立,證據仍然有限。正式比較需要事先明確的假設、適當的統計方法,或保留的新資料;建模時,也不能反覆偷看最後的測試集。
做完EDA,應該留下哪些可交接的結果?
一份有用的EDA不只是圖集。它至少應讓下一個人知道:資料的觀測單位與納入規則、欄位與單位、缺失和重複的範圍、重要切片的筆數、哪些差異只是待驗假設,以及接下來要採取什麼動作。
例如,結論可以寫成:「總平均上升與地區組成變化同時出現;分地區的平均下降。先確認兩期計時定義相同,再按可比路線檢查,暫不歸因於模型。」這比「資料看起來怪怪的,可能需要深度學習」更能推動工作。
下一篇〈缺失值、重複資料與異常值怎麼處理?〉會把發現的問題轉成具體清理規則,並保留哪些資料被改動、為什麼改動的紀錄。
來源與圖像條款
- Seaborn:分布視覺化與統計關係視覺化,原圖為官方教材輸出。
- Seaborn 圖像與教材程式依其 BSD 3-Clause完整聲明再利用;保留 Michael Waskom 及 Seaborn 開發者著作權與條款,不代表其為本文背書。
本文的配送數表與分析問題為另設教學內容;原圖資料與本文算例沒有混用,也未宣稱完成營運改善的因果驗證。
圖像授權聲明
以下保留本篇Seaborn原圖所附BSD條款、著作權與免責聲明。這不表示原作者為本站內容背書。
Copyright (c) 2012-2023, Michael L. Waskom
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the project nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
封面沿用本篇已註明來源的配圖,僅等比縮放並加白邊以保留全圖;圖片原有的署名與授權條件同樣適用於封面版本。
留言0
登入後就能留言。
登入