① 依序閱讀:每節先讀說明;遇到互動元件時,先預測結果,再操作驗證。 ② 對照程式範例:程式碼卡下方的「來源」標了課程練習筆記本(lab);需要實作時,再打開原始筆記本對照。 ③ 檢查理解:答錯時先看回饋,再回到相關說明;標為延伸的內容可留待第二輪。 ④ 最後翻關鍵詞彙卡自測術語,並用 重點速查與來源查閱。
教科書:An Introduction to Statistical Learning with Applications in Python(ISLP);
AI 協作參考書:AI-Assisted Statistics for Data Scientists(第三版)。章節旁的來源標記可點到本頁書目。
這一頁用一份資料走完一次小分析:
沿用 00B 取得的課程 Auto.csv,從清理 horsepower 開始,
一路到讀圖、比較模型與讀標準誤。每一步都讓 AI 起草,再由你核對。概念參考 Bruce、Bruce 與 Gedeck 的
《AI-Assisted Statistics for Data Scientists》第三版,完整書目見頁末。
這本書的前言區分兩種工作:定義清楚的標準題,例如「對這兩欄做簡單迴歸」,AI 通常能給出教科書式的答案; 目標模糊的專案,例如「這份資料能告訴我們什麼」,需要你先決定問題、資料能代表誰、哪些證據才算數。 後者不能只靠一段能跑的程式完成。
| 分級 | 適合的任務 | 至少要做的檢查 |
|---|---|---|
| 較低風險 | 你已懂概念、做過多次的資料整理;查語法;讀錯誤訊息;標準圖表的繪圖程式;檔案格式轉換 | 執行並比對一個已知小例子 |
| 中風險 | EDA、特徵工程、模型與檢定的程式草稿、解讀圖表與模型輸出 | 核對假設、資料切分、單位與完整輸出 |
| 高風險 | 因果解釋、族群代表性、模型上線、正式結論與政策建議 | 由人主導;資料與研究設計提供依據,必要時加領域審查 |
書中轉引的低風險清單裡,寫程式與除錯的項目多半附了前提:你在概念上已經懂、自己先試過,AI 只幫你補語法或樣板。清單也列了學習用途,例如理解基本程式概念或參數的意義;這時請 AI 解釋可以,但要回到文件或課程內容核對。
書中提出幾個解釋,後面幾節的例子都會用到:
AI 已替你完成一份顧客流失模型。下列哪件事最後仍必須由你決定?
AI 只看得到你給它的內容。欄位名稱通常很短,year 是西元年還是兩位數編碼?origin 的 1、2、3 代表什麼?
? 是遺漏還是一種車款?這些答案要查資料字典。書中建議把資料字典寫成 YAML
這類機器可讀、人也看得懂的格式,連同幾列樣本一起交給 AI。
下面是 Auto 的一份精簡字典。內容依 ISLP 的 Auto 資料說明 與課程筆記本的實際輸出整理;說明文件沒寫的事(例如缺值的原因),就明寫「待確認」,不要自己補上。
有了字典,再用書中整理的提示原則把任務說清楚:方向(現在只做什麼)、格式(要交回什麼)、 例子(一個正確的小例子;只用來示範格式時,內容不必是真實資料)、驗收(怎樣才算完成)。 複雜的工作先拆成幾個小任務,每個小任務各寫一個提示。
horsepower:依字典把 ? 轉成缺值,整欄轉成數值。回傳 pandas 程式,並列出轉換前後的 dtype、缺值數與列數。不得刪列。字典沒寫清楚的地方,先列問題,不要自行假設。」
| 要素 | 你要說清楚什麼 | Auto 例句 |
|---|---|---|
| 方向 | 現在在哪一階段、這次只做什麼 | 「先處理 horsepower,不要建模」 |
| 格式 | 工具、輸入輸出與呈現方式 | 「回傳可執行的 pandas 程式與前後對照表」 |
| 例子 | 一個正確小例子或預期結果 | 「字串 '?' 應轉成 NaN,'130' 應轉成 130.0」 |
| 脈絡 | 資料字典、單位、樣本範圍、已做步驟與限制 | 「year 是 70–82 的兩位數編碼」 |
| 驗收 | 怎樣才算完成、哪些條件不能破壞 | 「列數不變;新增缺值數恰好等於 ? 的個數」 |
| 分工 | 大任務拆成哪些小任務 | 「清理、畫圖、建模分三次問」 |
你請 AI 解讀 origin 對 mpg 的影響,但沒有附資料字典。最可能出現什麼問題?
書中描述 AI 寫程式的可靠流程:生成 → 執行 → 解析錯誤 → 修改 → 重跑。這個流程能讓程式跑得起來, 但「能跑」和「做對」是兩件事。常見的兩種失敗是:程式報錯;或者程式沒報錯,卻做了你沒要求的事。
回到 horsepower 的清理任務。假設第一次只說「幫我清理 Auto」,AI 交回的程式用 dropna() 把含缺值的列整列刪掉。
程式能跑,也沒有警告,但它把兩個決定混在一起了:
? 轉成缺值、整欄轉成數值。這一步不應該改變列數。分開之後,每一步都有清楚的驗收條件。pandas 的寫法(na_values、dropna)在
P4 遺漏值 有完整練習,這裡只看怎麼驗收 AI 交回的程式。
| 驗收項目 | 怎麼判斷 |
|---|---|
| 列數 | 清理前後應相同;不同就追查是哪一行刪了列 |
| 型態 | horsepower 轉換後應能進行數值運算 |
| 缺值 | 新增的缺值數應恰好等於原本 ? 的個數,不多也不少 |
| 其他欄 | 沒有要求修改的欄位,內容應完全不變 |
?),確認輸出會照規則跟著改變。
| 每一輪 | 交付物 | 通過才往下走 |
|---|---|---|
| 1. 先說清楚任務 | 一個小任務與驗收條件 | AI 沒有自行補關鍵假設 |
| 2. 生成 | 最小可執行程式與必要說明 | 看得懂改了哪些地方 |
| 3. 親自執行 | 錯誤訊息、警告、完整輸出 | 看的是實際執行結果,不是 AI 的描述 |
| 4. 對照預期 | 小例子、列數、摘要或測試 | 能跑,而且做對 |
| 5. 保存再擴大 | 通過的版本與下一個小任務 | 一次只增加一個不確定來源 |
AI 的清理程式沒有報錯,列數與缺值數也和你預期的一樣。下一步最合理的是什麼?
新的 AI 工具可以直接讀圖片。你把圖貼上去,請它寫一段解讀,它通常能指出主要趨勢,再追問幾次,還可能提出你沒想到的分組或後續分析。 這很有用。但書中的例子也顯示,模型會把密集區的範圍讀偏,或寫出圖上沒有的內容,語氣卻一樣篤定。
從這一節起,圖、摘要與模型都沿用課程 lab 的 392 筆完整資料,也就是排除 horsepower 缺值 5 列後的版本。 如果你用的是清理後仍保留 397 列的資料,摘要數字會略有不同(例如 mpg 的平均與第一四分位數)。
在 Auto 上試一次。執行課程 Ch01 lab 的 pairplot,把圖交給 AI 解讀:
請自己執行這一格,再把圖交給 AI。看看它怎麼描述 mpg 與 horsepower 的關係,以及不同汽缸數的分組。
來源:Ch01-lab-zh.ipynb
AI 的描述可能大致正確:馬力越大,每加侖跑的英里數越少,而且關係是彎的,不是直線。接下來要做的,是把它的每一句話分成三類:
| AI 說的話 | 例子 | 你怎麼核對 |
|---|---|---|
| 圖上看得到的 | 「馬力越高,mpg 越低,而且曲線往右變平」 | 回到圖確認;用摘要數字或分組平均重算 |
| 要重算才能確認的 | 「中間一半的車在 75 到 125 馬力之間」 | 對照 describe() 的 25% 與 75% 分位數;說「多數」時則直接算區間內的比例 |
| 圖上根本沒有的 | 「新車比較省油」 | pairplot 沒有畫 year;圖沒有編碼的條件,不能出現在圖的解讀裡 |
mpg cylinders displacement horsepower weight \
count 392.000000 392.000000 392.000000 392.000000 392.000000
mean 23.445918 5.471939 194.411990 104.469388 2977.584184
std 7.805007 1.705783 104.644004 38.491160 849.402560
min 9.000000 3.000000 68.000000 46.000000 1613.000000
25% 17.000000 4.000000 105.000000 75.000000 2225.250000
50% 22.750000 4.000000 151.000000 93.500000 2803.500000
75% 29.000000 8.000000 275.750000 126.000000 3614.750000
max 46.600000 8.000000 455.000000 230.000000 5140.000000
acceleration year origin
count 392.000000 392.000000 392.000000
mean 15.541327 75.979592 1.576531
std 2.758864 3.683737 0.805518
min 8.000000 70.000000 1.000000
25% 13.775000 73.000000 1.000000
50% 15.500000 76.000000 1.000000
75% 17.025000 79.000000 2.000000
max 24.800000 82.000000 3.000000horsepower 的 25%、50%、75% 分位數是 75、93.5、126,最小 46、最大 230。AI 說「中間一半的車」落在哪裡,用這組數字就能判斷。
來源:Ch01-lab-zh.ipynb
書中整理了幾種讀圖時常見的錯誤,在 Auto 上都可能遇到:
書中也示範把主成分分析的載荷貼給 AI,請它說明每個主成分代表什麼。在本站的非監督式學習 lab 上做同一件事,有兩個陷阱要先處理。
Index(['Murder', 'Assault', 'UrbanPop', 'Rape'], dtype='object')
Ch12-unsup-lab-zh.ipynb
array([[ 0.53589947, 0.58318363, 0.27819087, 0.54343209],
[-0.41818087, -0.1879856 , 0.87280619, 0.16731864],
[-0.34123273, -0.26814843, -0.37801579, 0.81777791],
[-0.6492278 , 0.74340748, -0.13387773, -0.08902432]])每一列是一個主成分,每一行對應一個變數,順序是 Murder、Assault、UrbanPop、Rape。
來源:Ch12-unsup-lab-zh.ipynb
以這組載荷來看,第一主成分的四個載荷同號且三個犯罪變數較大,第二主成分以 UrbanPop 為主。這類敘述可以由數字直接核對; 「某些州比較危險」則需要分數與更多脈絡,不能只從載荷推出。完整內容見 主成分分析。
AI 看完 mpg 與 horsepower 的散布圖後寫道:「這張圖顯示 1980 年代的車更省油。」你該怎麼處理?
讀完圖,下一步常是請 AI 比較幾個模型。書中示範把迴歸輸出貼給 AI,請它寫一段分析:它能指出哪些變數有關、效果大約多大, 還會主動建議取對數、加樣條或做交叉驗證。這些建議通常合理,但你要分清楚三件事:
| 問題 | 要看什麼 |
|---|---|
| 有沒有關聯 | 係數的正負與 p 值;關聯不代表因果 |
| 效果多大 | 線性項:係數乘上合理的變化量,並保留單位;有二次項時,改比較兩個指定馬力值的預測差 |
| 證據多強、多穩定 | 標準誤、區間,以及換一種資料切法後結果是否改變 |
在 Auto 上,AI 讀完上一節的圖,很可能會說「二次模型比線性好」。這句話要成立,至少要有兩種證據: 模型在沒參與擬合的資料上預測得比較好,而且這個差距換一種切法仍然存在。 只看擬合用資料上的誤差不夠,因為越複雜的模型在擬合資料上幾乎一定表現更好。
課程 Ch05 lab 把 392 筆資料切成一半訓練、一半驗證,比較一到三次多項式在驗證集上的均方誤差(MSE):
array([25.57387819, 22.21802005, 22.66767544])
線性約 25.6,二次約 22.2,三次約 22.7。線性到二次下降 3.4;二次到三次反而上升 0.45。
來源:Ch05-resample-lab-zh.ipynb
(np.float64(23.802232661034168), np.float64(1.4218450941091842))
同一個線性模型,換 10 種隨機切法,驗證 MSE 的平均約 23.8、標準差約 1.4。這個標準差描述各次切分之間的差異,不是平均值的標準誤。
來源:Ch05-resample-lab-zh.ipynb
把兩張卡放在一起,可以看出 AI 的結論需要補什麼:
請 AI 比較模型時,要它交回各次切分的分數而不只是平均,並說明切分方式與 random_state。
如果它先用全部資料挑變數再做交叉驗證,評估會過度樂觀,見 先選特徵再交叉驗證的錯誤。
AI 說:「三次模型在訓練資料上的誤差最小,所以它是最好的模型。」這個論證缺了什麼?
比較完預測,再看係數本身有多不確定。迴歸輸出的係數旁邊通常附有標準誤,描述「如果重新抽一份樣本,這個係數大約會變動多少」。AI 讀到兩組不一樣的標準誤時, 常見的反應是挑一個、或說「其中一個算錯了」。比較好的第一步是追問兩種算法各自依賴什麼假設。
課程 Ch05 lab 用兩種方法估計 mpg 對 horsepower 迴歸係數的標準誤:
兩者若明顯不同,不一定是誰算錯;它常在提醒你:模型的某個假設可能不成立。另一種可能是程式本身出了錯, 而且不會報錯。下面的延伸兩種情況都會遇到。
intercept 0.848807 horsepower 0.007352 dtype: float64
Ch05-resample-lab-zh.ipynb
intercept 0.717 horsepower 0.006 Name: std err, dtype: float64
Ch05-resample-lab-zh.ipynb
intercept 2.067840 poly(horsepower, degree=2, raw=True)[0] 0.033019 poly(horsepower, degree=2, raw=True)[1] 0.000120 dtype: float64
Ch05-resample-lab-zh.ipynb
intercept 1.800 poly(horsepower, degree=2, raw=True)[0] 0.031 poly(horsepower, degree=2, raw=True)[1] 0.000 Name: std err, dtype: float64
二次項的 0.000 是四捨五入到小數三位的結果,不是「沒有不確定性」;bootstrap 那一格顯示 0.000120。請 AI 讀這種表時,要它注意顯示位數。
來源:Ch05-resample-lab-zh.ipynb
| 係數 | 公式 | bootstrap | 怎麼讀 |
|---|---|---|---|
| 線性:截距 | 0.717 | 0.849 | bootstrap 大約多 18% |
| 線性:horsepower | 0.0064(輸出顯示 0.006) | 0.0074 | bootstrap 大約多 14% |
| 二次:horsepower | 0.031 | 0.033 | 接近 |
| 二次:horsepower² | 0.000(四捨五入) | 0.00012 | 接近 |
| 二次:截距 | 1.800 | 2.068 | 仍有差距 |
線性模型的差距是值得追查的線索。除了模型形式正確、誤差變異固定這兩個假設,公式標準誤還把 horsepower 當作已知, 只看誤差帶來的變動。mpg 與 horsepower 的關係是彎的,直線擬合的殘差被放大,誤差變異的估計也跟著受影響。 bootstrap 每次連同 horsepower 一起重抽,模型形式不對或誤差變異不固定時,仍能反映係數實際的變動;它仍然假設各列彼此獨立,也不保證一定比較準。 單看兩個數字,無法判斷差距來自哪一個假設,要再看殘差圖等證據。
改用二次模型後,一次項與二次項係數的兩種估計變得接近,截距仍有差距。模型形式以外的假設也要看, 例如 mpg 的分散程度是否隨馬力改變。課本說「二次模型的兩種估計對應得更好」,要對照每一個係數去看,不要只看結論。
能跑不代表做對:一個真實的例子。課程筆記本早先沿用 ISLP lab 的 boot_SE,依 index 標籤重抽;
而目前 ISLP 套件載入的 Auto 以車名當 index,而且有重複(本頁資料字典寫過「同名的車可能出現不只一次」)。依標籤抽樣時,
D.loc 會把同名的車一次全部取出,一份重抽樣本約有 690 列,而不是 392 列。
程式沒有任何錯誤訊息,算出的截距標準誤約 0.73,看起來也合理。問題出在重抽方式:同名的車整批進出,樣本變大,本例因此低估了變動。
改成依列的位置抽樣後,結果與 ISLP 課本印出的 0.85 與 0.0074 相同。這類錯誤有個簡單的檢查:印出一份重抽樣本的列數,確認它等於 n。
同一個係數,用兩種方法估計標準誤,結果明顯不同。AI 建議「採用比較小的那個,結論比較顯著」。你怎麼回應?
到這裡,AI 已經交回清理程式、圖的解讀、模型比較與標準誤的說明。最後一步是讓這些內容經得起質疑,並留下別人能重跑的紀錄。
書中建議兩種做法:請同一個 AI 批判自己的分析,或者更好的是,請另一個 AI 檢查。對自己熟悉的問題多試幾個模型, 可以知道哪一個在這類工作上比較可靠。做法上:
第二個 AI 提出的異議也只是待查的線索。兩個模型可能學到相同的錯誤,同意彼此也不代表正確;最後仍要回到資料、程式與文件。
| 至少要留下 | Auto 這次的例子 |
|---|---|
| 任務與對話 | 關鍵 prompt、追問、日期、使用的模型與工具 |
| 資料來源 | 課程 Auto.csv 的取得日期;資料字典;? 的處理規則 |
| 程式與環境 | 清理與建模程式、套件版本、random_state 與 seed |
| 結果與檢查 | 完整輸出、驗收結果、失敗的嘗試與修正原因 |
| 人工決策 | 排除 5 列缺值的理由;採納或拒絕 AI 哪些建議;結論的適用範圍 |
你有一份含病患紀錄的內部資料,想請公開的聊天模型幫忙除錯。第一步應該是什麼?
回顧本頁觀念與原 Lab 的程式,確認各個操作的意義與使用條件。
下面三題延續 Auto 的情境,練習判斷該補什麼資訊、怎麼核對 AI 的說法。
你想知道 Auto 中產地是否與油耗有關。哪個第一個 prompt 最合適?
你請兩個 AI 描述 mpg 的分布。一個說「中間一半的車在 17 到 29 mpg」,另一個說「中間一半的車在 20 到 35 mpg」。你先做什麼?
整個 Auto 分析做完了。要讓同學接著重跑並理解你的決定,至少要交付什麼?
需要核對完整公式、比較表或實作時,再展開下方速查。
下列來源說明本頁使用的協作流程與實作方法。AI 能力與限制的研究整理見 00A 的參考資料。
| 來源 | 這一頁用到什麼 |
|---|---|
| Bruce, Bruce & Gedeck, AI-Assisted Statistics for Data Scientists, 3rd ed.(Preface;Ch.1 資料字典與用 AI 讀圖;Ch.4 用 AI 讀迴歸結果;Ch.7 用 AI 解讀主成分;Ch.10 提示設計、脈絡學習與逐步推理;Ch.11 準確性、vibe coding、用 AI 做統計分析) | 標準題與模糊專案的區分、資料字典當脈絡、提示原則、生成—執行—修正、讀圖與讀表的錯誤類型、自我批判與多個 AI 交叉檢查、低風險任務清單。 |
| 官方 GitHub README、Python 程式 | 需要核對原書範例的程式與資料時,回到作者提供的版本。 |
| ISLP:Auto 資料說明 | 本頁資料字典的欄位定義與編碼。 |
| scikit-learn: Common pitfalls | 資料洩漏、前處理一致性與 random_state 的官方實作指引。 |
詞彙卡整理本頁引用的課程 lab中常用的統計或機器學習專有名詞,正面附英文名稱。 先看正面的術語,試著說出定義,再翻面核對。可以洗牌複習,也可以搭配本章例子練習解釋。