讓ChatGPT分析3個數據集:它每次都犯同樣的錯誤
在一組用三個小型數據集重複進行的實驗中,ChatGPT給出了看似合理卻經不起推敲的分析:把發貨到送達誤當成下單到送達、給出從未被代碼計算過的數字、忽略缺失值背後的系統性偏差;即便要求它複核,它也會放過大錯。
一篇出自數據科學社區的實驗文章,測試ChatGPT處理小型數據集時的可靠性。作者使用了三張面試問題中常見的數據表,讓模型完成業務團隊日常會提出的問題,並觀察它是否會犯下系統性的錯誤。結果顯示,GPT模型的多次運行重複出現了同類問題:選擇錯誤的列、虛構從未計算過的數字、忽略缺失值的含義,甚至在被要求複核自己時放過了嚴重錯誤。
第一張表shipment_tracking記錄了40筆訂單,下單日期從2024年1月1日到1月21日不等,其中有18筆訂單尚未發貨或送達。測試提出的問題是“平均配送時間”,顧客視角應當是從下單到送達,因為顧客從下單後就開始等待。正確結果是平均6.09天。然而ChatGPT返回的是2.6天——它計算了從發貨到送達的時間差。代碼本身沒有任何語法或類型錯誤,只是選錯了列,因此常規測試不會發現問題,只有把提問與代碼中的列名對照才能看出。模型還在結論中寫道“只有22單已發貨”,這是對的,但又補充“50單中有28單仍在運送中”,該文件實際只有40行;22和28像是從50和22中得出的,單個數字看似合理,但整句與文件不符。另一個更嚴重的情況中,模型甚至沒有執行任何代碼,卻直接寫出了APAC區域“總銷售約368萬美元、佔32%”之類的總結;真實數據只有3675.49(無單位),佔比約為30.4%。也就是説,在代碼塊中的數字通常來自計算,而敍述文字中的數字只是被“寫”出來,兩者並不自動一致。
第二張表regional_sales按地區和年份記錄銷售數據,但本身存在破損:部分地區-年份組合有重複行,同一組合甚至有互相矛盾的數值,不同地區的數據年份範圍從1年到15年不等。在一次快速運行中,模型把APAC之後的數據描述成“比US West和US East總和高出60%以上”,實際兩者合計為3575.70,與APAC的3675.49只差約2.8%。更諷刺的是,同一句話中“比europe_north高出32%”又是對的,於是一個真實數字和一個虛構數字並肩出現。
第三張表是奧運會運動員與獎牌數據,共352行、336名運動員、15屆賽事和167個比賽項目;身高字段有226行為空。模型只對比了有身高記錄的運動員平均值:獎牌得主176.5 cm,非獎牌得主176.2 cm,得出“身高几乎不影響得牌”的結論。問題在於計算只使用了126行,其餘226行被pandas靜默丟棄。數據本身並不支持這個結論:有身高記錄的運動員得牌率為54%,沒有記錄的只有23%;在2016年之前的302行中只有76行有身高,而得牌率較低;2016年之後的所有50行都有身高,且得牌率高達80%。換句話説,在一個傾斜的數據集裏,“身高是否被記錄”本身就與賽事年代和得牌率高度相關,“0.3 cm的差異”完全不構成可用的業務回答。
文章還測試了讓ChatGPT檢查自己的工作。在一次複核中,模型把“50單”改成“40單”、“28單”改成“18單”,這是正確的糾錯;但它同時給錯誤的2.6天和“越來越快”的結論打上“正確”的標記。另一輪複核則虛構了一個修正,反而把一個本來正確的答案改錯了。因此,把模型輸出交給模型自己審查並不足信。
文章的啓示是:這類錯誤沒有異常堆棧,代碼能運行、結果卻錯了;需要在閲讀問題時同時閲讀計算中的列名,檢查結論中的每個數字是否真的出現在代碼輸出中,並時刻追問缺失值意味着什麼。缺失的行不是中立的——當樣本悄悄縮小,趨勢就會偏離真相。