跳至主要內容

    模型之前先做 EDA:從分布與切片找問題

    先確認一列代表什麼,再用分布、分組與散點圖,把平均值背後的資料問題找出來

    sunny 桑尼· · 13 MIN READ · 93 次瀏覽

    模型之前先做 EDA:從分布與切片找問題
    本文目錄

    同事拿來一張報表:「這個月平均配送時間從24分鐘變成51.3分鐘,模型是不是壞了?」

    先別急著換模型。若這個月偏遠地區的訂單突然變多,即使市區與偏遠地區各自都送得更快,整體平均仍然可能上升。

    探索性資料分析(exploratory data analysis,EDA)就是在正式建模前,先理解資料的定義、分布、組成和異常,提出值得驗證的問題。它可以找出後續研究方向,卻不會只靠一張圖就證明原因。

    這篇從「一列代表什麼」開始,依序看單一變數、分組差異與變數關聯。配圖採用 Seaborn 官方教材原圖:企鵝資料是形態測量,Tips 資料是餐廳帳單與小費。本文的配送算例另外設計,不把兩者說成同一份資料。

    畫第一張圖之前,先定義觀測單位

    假設一份資料有一千列,這不一定等於一千張訂單。同一張訂單可能有三個品項、五次物流掃描,或多筆付款紀錄。

    如果一列是商品,直接對每列的「整張訂單金額」取平均,商品多的訂單就被重複計算。這時數學式沒錯,錯的是分析單位。

    先寫一份最小欄位說明:

    要確認的事配送資料的具體問題

    一列代表什麼
    一張訂單、一次配送,還是一筆事件?
    主鍵是什麼
    訂單編號是否唯一?同編號多列有沒有合法原因?
    時間怎麼定義
    付款到簽收,還是出貨到簽收?時區是否一致?
    單位是什麼
    分鐘或小時?金額含不含運費?
    哪些資料沒進來
    尚未送達、取消、退貨與系統失敗是否被排除?

    這一步決定後面每張圖的分母。圖形漂亮,也救不了定義混在一起的欄位。

    單變量:先看資料集中在哪裡、尾巴延伸多遠

    圖1|先讀範圍、集中區域、尾端與可能的多峰。這張是企鵝鰭長,不是配送時間。來源:Seaborn,Visualizing distributions of data。

    對配送時間,可以用相同方式問:大部分訂單落在哪個區間?有沒有負值、不合理的大值,或正好卡在某個上限的堆積?

    發現長尾時,不要立刻刪掉它。它可能是紀錄錯誤,也可能正是業務最在意的長時間等待。EDA 的任務是把問題指出來,再結合欄位定義與原始紀錄判定。

    類別欄位則先看每類有幾筆。類別順序和數值距離不是同一件事,不需要把城市編成1、2、3後,再畫成連續分布。

    圖2|這張圖回答「資料裡各類有幾筆」,不能直接推成整個餐飲市場哪一天最熱門;收集方式也會影響筆數。來源:Seaborn,Visualizing distributions of data。

    類別筆數懸殊可能影響後面的比較:某個倉庫只有五張訂單,另一個有五萬張,平均值即使差很多,可信程度也不同。

    切片:總體形狀可能是不同群體混合出來的

    圖3|顏色讓你看見各物種在總分布裡的位置。它支持分組觀察,不單憑顏色證明差異的成因。來源:Seaborn,Visualizing distributions of data。

    回到配送問題,可以分別看城市、倉庫、時段、配送方式。切片的目的,是檢查原本的結論在哪些群體成立、在哪些群體失效。

    若重疊顏色太多,就把圖拆開。不同小圖應保留可比較的座標範圍,避免一張圖放大、一張圖縮小,讓差異看起來被誇大或縮小。

    圖4|小圖保留同一種讀法,讓群體間的形狀更容易比較。這裡分組變數是原資料的sex欄,並非本文對配送資料的分類。來源:Seaborn,Visualizing distributions of data。

    還要決定自己是在比「量」還是比「形狀」。某一群總共有很多資料,柱子自然可能比較高;如果想比較群體內部的分布,可改用各組面積歸一化後的密度。

    圖5|原例使用density及common_norm=False,讓各組總面積各為1。這有助比較形狀,卻不再保留群體原本誰多誰少的資訊。來源:Seaborn,Visualizing distributions of data。

    因此,報告中最好同時留下各組筆數。密度看起來差異很大,也可能只是小樣本造成的不穩定。

    一個完整算例:每組都變快,總平均卻變慢

    下面是另設的教學數表。每期各100張訂單,市區與偏遠地區的平均時間都下降,但兩種訂單的比例大幅改變:

    期間地區訂單數組內平均分鐘
    前期市區9020
    前期偏遠1060
    後期市區1018
    後期偏遠9055
    前期整體平均 = (90 × 20 + 10 × 60) / 100 = 24
    後期整體平均 = (10 × 18 + 90 × 55) / 100 = 51.3
    

    整體平均變慢,並不等於每一種訂單都變慢。這個例子提醒我們,總體指標同時受到組內表現與群體組成影響。

    但也不能因此宣布營運「其實變好了」。如果團隊現在真的要處理更多偏遠訂單,整體等待變長仍是需要面對的事。不同問題要看不同指標:比較流程效率時控制可比條件;評估所有顧客目前的體驗時,也要保留當期的真實組成。

    兩個變數:先用散點圖看關聯,再問是否混入其他因素

    圖6|橫軸total_bill、縱軸tip。可以觀察兩者關聯及離散程度,不能直接推成提高帳單一定造成更多小費。來源:Seaborn,Visualizing statistical relationships。

    用在配送時,可以把距離放在橫軸、配送時間放在縱軸。先看是否有明顯趨勢,再找離整體趨勢很遠的點,回頭核對原始紀錄。

    若不同配送方式使用不同路線,整體關聯可能混合了多種情況。這時再加入一個分組變數,比直接畫一條線更有幫助。

    圖7|顏色用來提出群體差異的問題,不是因果估計,也沒有排除群體間其他差異。來源:Seaborn,Visualizing statistical relationships。

    如果還想加上人數、時段等變數,不必全部塞進同一張圖。顏色、形狀與大小都需要額外解讀;資訊過多,反而容易忽略真正的問題。

    圖8|圖中size是用餐人數欄位名稱;此例使用顏色色階呈現它,不等於每個點的面積就是實際人數。來源:Seaborn,Visualizing statistical relationships。

    聯合分布與成對圖:拿來導航,不要把每個圖案都當發現

    圖9|中間看兩個變數一起如何變動,邊上看各自的分布。來源:Seaborn,Visualizing distributions of data。

    這種圖可以幫你分清:某個稀疏區域,是因為其中一個變數本來就少見,還是兩個變數的組合特別少見?

    變數更多時,成對圖會把多個組合並排。它很適合建立問題清單,但也增加了「看很多次、剛好找到漂亮圖案」的機會。

    圖10|把它當作查找關聯的索引。真正要報告某一對變數時,再回到單張圖、明確的樣本範圍與後續驗證。來源:Seaborn,Visualizing distributions of data。

    在同一批資料上找出一個分組差異,再用同一批資料宣布這個差異必然成立,證據仍然有限。正式比較需要事先明確的假設、適當的統計方法,或保留的新資料;建模時,也不能反覆偷看最後的測試集。

    做完EDA,應該留下哪些可交接的結果?

    一份有用的EDA不只是圖集。它至少應讓下一個人知道:資料的觀測單位與納入規則、欄位與單位、缺失和重複的範圍、重要切片的筆數、哪些差異只是待驗假設,以及接下來要採取什麼動作。

    例如,結論可以寫成:「總平均上升與地區組成變化同時出現;分地區的平均下降。先確認兩期計時定義相同,再按可比路線檢查,暫不歸因於模型。」這比「資料看起來怪怪的,可能需要深度學習」更能推動工作。

    下一篇〈缺失值、重複資料與異常值怎麼處理?〉會把發現的問題轉成具體清理規則,並保留哪些資料被改動、為什麼改動的紀錄。

    來源與圖像條款

    本文的配送數表與分析問題為另設教學內容;原圖資料與本文算例沒有混用,也未宣稱完成營運改善的因果驗證。

    圖像授權聲明

    以下保留本篇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

    登入後就能留言。

    登入
    sunny 桑尼
    sunny 桑尼

    AI 資料科學 · 產品經理 · 蒙奇 D 桑尼

    專注於 AI 工具應用與資料科學教育,致力於讓每個人都能用 AI 提升工作效率。曾任職於科技業,現為全職教育創作者。

    讀更多文章 →想自己動手試?領免費 Starter Kit →