機器學習作業 Prompt 速查表

適用於 Cursor / VS Code ・ 二元分類任務(集成方法)・ 資料結構未知也適用

對象:大學一、二年級機器學習初學者

Python 3.12 scikit-learn 繁體中文報告 可重現程式碼

目錄

  1. 使用說明
  2. 一鍵完整版 Prompt
  3. ① 專案設定與資料探索(EDA)
  4. ② 資料清理(Data Cleansing)
  5. ③ 特徵工程與訓練/測試切分
  6. ④ 模型選擇(Model Selection)
  7. ⑤ 模型評估(Model Evaluation)
  8. ⑥ 調參與過擬合處理
  9. ⑦ 模型預測與繳交檔輸出
  10. ⑧ 報告、README 與封面
  11. ⑨ 奪冠強化(進階必看)
  12. 加分技巧
  13. 交付前檢查清單

使用說明

怎麼用? 收到真正的作業資料後,把資料檔(例如 train.csvtest.csv)放進專案資料夾, 在 Cursor / VS Code 的 AI 對話框中,貼上下方任一段 Prompt 即可。
重要:資料結構未知。 下方 Prompt 已改成「不預設任何欄位名稱」,會要求 AI 先自動偵測:標籤欄、類別/數值欄、髒資料、無意義欄位等。 文中提到的銀行客戶流失(churn、country、age…)只是舉例參考,AI 應以實際資料為準,不要硬套。預期輸出為二元(0/1);若實際為多類別,Prompt 也已要求 AI 自動調整。
想拿冠亞季軍? 光靠基本流程只能「拿滿作業分」,要在排行榜奪牌,請務必: ① 先確認官方評分指標(Accuracy / F1 / AUC…,整條流程對準它最佳化)→ 用「一鍵完整版」建好底 → ② 再貼「⑨ 奪冠強化」(特徵工程 + XGBoost/LightGBM + 交叉驗證 OOF + 門檻調校 + 模型融合)。 冠軍分數多半來自特徵工程模型融合,不是單一模型。

一鍵完整版 Prompt(One-Shot)

貼上後 AI 會一次完成:資料清理 → 切分 → 多模型比較 → 評估 → 調參 → 預測輸出 → 報告與 README。適合想快速拿到完整成果者。
完整專案一次產出
涵蓋所有評分重點
你是一位資深機器學習工程師。請「直接、完整地幫我做完」這份分類作業,並產出可直接繳交的所有檔案,不要只給教學或步驟建議、不要留 TODO 給我自己補。

【重要:資料結構未知】
我稍後會把實際的資料檔(例如 train.csv、test.csv)與作業說明放進專案。請「以實際資料為準」,不要預設任何欄位名稱。請先用程式自動偵測:
- 標籤欄(label):若作業有指定就用指定的;否則自動推斷(通常是 test 沒有、train 才有的那一欄,或名稱像 target/label/churn/y)。預期為「二元分類(0/1)」;若偵測到是多類別,請自動改用適合多類別的設定與指標。
- 每一欄的型別(數值 / 類別)、缺失值、以及「異常值或雜訊」。
(下述銀行客戶流失 churn、country、age、credit_score… 只是格式參考範例,切勿硬套到實際資料。)

【環境與硬性規定】
- 使用 Python 3.12,套件:pandas、numpy、scikit-learn、matplotlib、seaborn。
- 程式必須「可重現」:固定 random_state=42,檔首集中管理 import 與路徑。
- 全部程式碼註解與報告文字一律使用「繁體中文」。

【最重要:先對準評分指標】
0. 先從作業說明找出「官方排行榜的評分指標」(例如 Accuracy / F1 / macro-F1 / ROC-AUC)。整條流程、調參的 scoring、以及決策門檻,全部要對準「這個指標」最佳化。若說明沒寫,請合理推斷並在報告中註明假設。

【請直接完成以下全部工作,輸出成可執行的 .py 檔案,並實際跑出結果】
1. 資料探索(EDA):shape、head、info、describe、逐欄缺失值、標籤 value_counts(判斷是否類別不平衡),並存圖。
2. 資料清理(Data Cleansing):自動找出並處理——非數字符號/亂碼(清洗成數值或標記無效)、不合理數值(如負年齡)、缺失值(數值補中位數、類別補眾數)、以及明顯無意義/雜訊欄位(全隨機、與標籤無關、或像 index、id 的欄位)自動移除。對 test 套用「與 train 完全相同」的清理,統計量只從 train 計算(避免資料洩漏)。
3. 特徵工程(Feature Engineering):除了基本編碼(類別欄用 One-Hot 或目標編碼)與數值標準化外,請「主動衍生新特徵」以提升分數,例如:欄位間比率/差值、數值分箱(binning)、群組聚合統計、多項式/交互特徵等;並用交叉驗證比較加了特徵後分數是否上升,保留有用的、砍掉沒用的。(特徵工程通常是冠軍分數的最大來源。)
4. 驗證策略(Validation):以 StratifiedKFold(5 折、random_state=42)做交叉驗證,產生 out-of-fold(OOF) 預測作為「可信的本地分數」,避免只用單次 train_test_split 造成過擬合。所有前處理/編碼都要放進 CV 折內或用 Pipeline,避免資料洩漏。
5. 模型選擇(Model Selection):公平比較多個模型:KNN、GaussianNB、DecisionTree、SVC、RandomForest、Bagging、AdaBoost、GradientBoosting;並「務必加入」高效梯度提升模型:XGBoost、LightGBM、CatBoost。若環境不允許安裝額外套件,改用 sklearn 內建 HistGradientBoostingClassifier(效能接近)。用表格依「官方指標」排序彙整所有模型的 CV 分數。
6. 模型評估(Model Evaluation):輸出 accuracy、precision、recall、F1、classification_report、confusion matrix,畫 ROC 並算 AUC。若指標為 F1/accuracy,請用 OOF 預測「調校最佳決策門檻(threshold)」,不要固定用 0.5。
7. 調參與過擬合處理:對最強的模型用 RandomizedSearchCV 或 Optuna(cv=StratifiedKFold、scoring=官方指標)調關鍵超參數(n_estimators、max_depth、learning_rate、min_child_weight/min_samples_leaf、subsample、colsample、reg_lambda 等);比較訓練 vs OOF 分數判斷過擬合並用正則化/early stopping 抑制。處理類別不平衡(class_weight / scale_pos_weight,並用 CV 決定是否用 SMOTE)。
8. 模型融合(Ensembling):把表現最好的幾個模型用 StackingClassifier 或機率加權平均(blending) 融合;並用「多個隨機種子平均」降低變異。用 OOF 分數證明融合優於單一模型。
9. 模型預測與輸出:挑「分散押注」的兩個最佳方法各出一份繳交檔——建議一份為「單一最強調參模型(如 LightGBM/XGBoost)」,另一份為「Stacking/Blending 融合模型」。用 OOF 調得的門檻做最終預測。檔名依作業要求(若無規定用 GID_submission_1_method.csv;GID 先用變數佔位)。輸出格式(欄位名、順序、有無 index、id 對應)請嚴格比對作業說明。
10. 交付文件:
   - 繁體中文書面報告(任務目標、解題流程、方法選擇理由、所用方法、實驗評估、實驗結果、結論);務必包含「消融實驗表(ablation)」顯示每個步驟(清理→特徵→調參→融合)帶來的 CV 分數提升,以及 SHAP/feature_importances 的特徵重要性與商業解讀。輸出可轉 PDF(Report_GID),封面含全體組員姓名與學號(先用【請填入】佔位)。
   - README.md:隊伍編號、學校名稱、指導老師、全體組員、所有繳交檔案的簡短說明與執行方式,並列出所需套件版本(含 requirements.txt)。

請先規劃檔案結構,接著「一次把每個檔案的完整程式碼寫出來並執行」,最後附上「從頭執行到產生繳交檔」的指令。若中途遇到錯誤,請自行修正到能成功跑完為止。

① 專案設定與資料探索(EDA)

環境設定 + 資料探索
先看懂資料長什麼樣
請用 Python 3.12(pandas、numpy、matplotlib、seaborn、scikit-learn)直接幫我完成一個二元分類專案的第一步。資料結構未知,請以我專案內的實際檔案為準,不要預設欄位名稱。全部註解用繁體中文,固定 random_state=42。

請建立並執行 explore.py:
1. 讀入 train 與 test 資料檔(自動找出檔案)。
2. 印出兩份資料的 shape、head()、info()、describe(include='all')。
3. 自動推斷「標籤欄」:優先用作業指定;否則取「train 有、test 沒有」的欄位,或名稱像 target/label/y 的欄位。印出它的 value_counts()(含比例),判斷是否類別不平衡。
4. 逐欄計算缺失值數量與比例;自動判斷每欄是數值型還是類別型。
5. 自動掃描「疑似髒資料」:數值欄裡的非數字符號/亂碼、不合理極端值、以及疑似無意義欄位(幾乎唯一值的 id、與標籤幾乎無關或全隨機的欄位)。把發現條列成繁體中文。
6. 用 seaborn/matplotlib 畫出:標籤分布圖、數值特徵直方圖、類別特徵計數圖,存成 png。
最後用繁體中文總結「資料有哪些問題、下一步清理計畫」。

② 資料清理(Data Cleansing)

處理髒資料與雜訊欄位
評分重點 1
接續同一個專案。請直接建立並執行 clean_data.py,寫一個通用、可重複使用的 clean(df, ...) 函式,對 train 與 test 做「完全一致」的清理。資料結構未知,請自動偵測處理,不要寫死欄位名稱。全部註解用繁體中文:

1. 數值欄位:把夾雜的非數字符號/亂碼(如 '~'、'!!!'、'@@@' 等)清掉後嘗試轉成數值;無法轉換者設為 NaN。
2. 不合理數值:自動偵測明顯異常(如應為正數卻出現負值、離群極端值),轉成 NaN。
3. 缺失值:數值欄用中位數補、類別欄用眾數補。
4. 類別欄位:亂碼/無效類別值改成眾數或 "Unknown"。
5. 無意義/雜訊欄位自動移除:例如幾乎每列都唯一的 id 欄、名稱像 index/Unnamed 的欄、與標籤相關性極低或全隨機的欄位(請列出被移除的欄位與理由)。
6. 重要:為避免資料洩漏(data leakage),所有補值統計量(中位數、平均、眾數)與被移除欄位清單都只從「訓練資料」決定,再原封不動套用到 test。
7. 回傳清理後的 DataFrame,並印出清理前後的缺失值與欄位對照。

(以上規則以實際資料為準;銀行 churn 資料只是範例。)請直接產出程式碼並示範產生 train_clean 與 test_clean。

③ 特徵工程與訓練/測試切分

編碼、標準化、Train-Test Split
評分重點 2
接續同一個專案,使用清理後的資料。請直接建立並執行 features.py,全部繁體中文註解(不要寫死欄位名稱,自動處理):

1. 特徵/標籤分離:y = 前面偵測到的標籤欄;X = 其餘欄位。
2. 自動找出類別欄位做編碼(LabelEncoder 或 One-Hot,二擇一並簡述理由);數值欄位用 StandardScaler(或 MinMaxScaler)標準化。強調 encoder 與 scaler 只能 fit 在訓練資料,再 transform 到驗證集與 test,以避免資料洩漏。
3. 用 train_test_split 切出訓練集與驗證集:test_size=0.2、random_state=42、二元分類時 stratify=y。簡述為何 stratify、為何固定 random_state。
4. 印出切分後各集合形狀與標籤比例,確認正確。
5. 用 joblib 把 encoder 與 scaler 存起來,方便之後對 test 做完全相同的轉換。
請直接產出完整程式碼。

④ 模型選擇(Model Selection)

多模型比較(含集成方法)
評分重點 3
接續同一個專案。請直接建立並執行 train_models.py,用相同的訓練集公平地訓練並比較多個分類模型,全部繁體中文註解:

必含模型:
- KNeighborsClassifier(KNN)
- GaussianNB(單純貝氏)
- DecisionTreeClassifier(決策樹)
- SVC(支援向量機,probability=True)
- RandomForestClassifier(隨機森林)
- BaggingClassifier
- AdaBoostClassifier
- GradientBoostingClassifier

要求:
1. 用一個字典存放所有模型,用迴圈統一訓練與評估,避免重複程式碼。
2. 對每個模型用 5-fold cross_val_score(scoring='f1')估計穩定表現。
3. 在驗證集上輸出每個模型的 accuracy、precision、recall、F1-score。
4. 用一個 pandas DataFrame 彙整所有模型的分數並依 F1 排序,印出比較表。
5. 用繁體中文說明「本題重點是集成方法(Ensemble)、為何集成方法通常較穩定(bagging 降變異、boosting 降偏差)」,並指出目前表現最好的前兩名。
6. 若要衝獎項,請再加入 XGBoost、LightGBM、CatBoost(無法安裝時用 sklearn 內建 HistGradientBoostingClassifier)一起比較——這些通常在表格資料上最強。

⑤ 模型評估(Model Evaluation)

完整評估指標與圖表
評分重點 4
接續同一個專案。請直接建立並執行 evaluate.py,對前兩名模型做深入評估,全部繁體中文說明:

1. 產生並印出 classification_report(precision/recall/f1)。
2. 畫出 confusion matrix(seaborn heatmap),並用繁體中文解讀 TP/FP/FN/TN 的實際意義(依實際任務情境說明,例如漏判正類的代價)。
3. 畫出 ROC 曲線並計算 AUC。
4. 說明在「類別不平衡」情境下,為何 F1-score / recall / AUC 比單純 accuracy 更重要。
5. 把所有圖表存成 png,並寫一段繁體中文「結果解讀」,比較兩名模型優缺點與最終選擇理由。

⑥ 調參與過擬合處理

GridSearchCV 調參 + 抑制過擬合
加分:展示調參能力
接續同一個專案。請直接建立並執行 tuning.py,對表現最好的 1~2 個集成模型(例如 RandomForest、GradientBoosting)做超參數調校,全部繁體中文說明:

1. 用 GridSearchCV(cv=5、scoring='f1')搜尋關鍵超參數:
   - RandomForest:n_estimators、max_depth、min_samples_leaf、max_features
   - GradientBoosting / AdaBoost:n_estimators、learning_rate、max_depth
2. 印出 best_params_ 與 best_score_,並用最佳參數重新訓練模型。
3. 過擬合(Overfitting)診斷:比較「訓練集分數」與「驗證集分數」的差距,用繁體中文說明差距太大代表過擬合。
4. 示範用 max_depth、min_samples_leaf、ccp_alpha(成本複雜度剪枝)等方式抑制過擬合,並畫出不同 max_depth 下訓練/驗證分數的變化曲線。
5. 用繁體中文總結調參前後 F1 的提升與最終選定的參數。

⑦ 模型預測與繳交檔輸出

預測 test.csv 並輸出兩份 submission
評分重點 5
接續同一個專案。請直接建立並執行 predict.py,用最終選定的「最佳兩個方法(以集成方法為主)」對 test 資料做預測並輸出繳交檔,全部繁體中文說明:

1. 用先前存下的 encoder 與 scaler,對清理後的 test 做「與訓練時完全相同」的轉換。
2. 分別用兩個最佳模型產生預測(二元輸出 0/1;若題目要機率或多類別,請自動配合)。
3. 依「作業說明要求的格式」輸出兩個 CSV;若無明確規定,檔名用 GID_submission_1_method.csv
   - GID 為隊伍編號,先用變數 GID = "G01" 佔位。
   - method 換成模型名稱,例如 G01_submission_1_RandomForest.csv、G01_submission_2_GradientBoosting.csv。
4. 確認輸出格式與作業要求一致(欄位名、順序、有無 index、id 對應),並印出前幾列檢查。
5. 用繁體中文說明從讀檔到產出繳交檔的完整重現步驟。

⑧ 報告、README 與封面

產出繁體中文報告 + README
符合繳交規範
接續同一個專案。請幫我產出兩份繳交文件,內容全部使用繁體中文:

一、書面報告(輸出成 Markdown,並說明如何轉成 Report_GID.pdf),需包含以下段落:
1. 封面:專案名稱、隊伍編號、學校名稱、指導老師、全體組員姓名與學號。
2. 任務目標:說明銀行客戶流失預測的商業意義。
3. 解題流程:逐步描述資料前處理 → 模型選擇 → 訓練 → 評估 → 最終預測。
4. 方法選擇的理由:為什麼選這些前處理與模型(尤其集成方法)、為什麼用這些調參步驟。
5. 所用方法:列出使用到的演算法與工具。
6. 實驗評估:說明評估指標(F1、AUC 等)與驗證方式(train-test split、交叉驗證)。
7. 實驗結果:用表格呈現各模型分數,附上混淆矩陣、ROC 圖,並解讀。另外加一張「消融實驗表(ablation)」,顯示資料清理→特徵工程→調參→模型融合每一步各帶來多少 CV 分數提升;以及 SHAP / feature_importances 的特徵重要性圖與商業解讀。
8. 結論:最終選擇、成效、限制與可改進方向。

二、README.md,包含:隊伍編號、學校名稱、指導老師、全體組員姓名、每個繳交檔案(.py、兩份 submission.csv、報告)的簡短繁體中文說明與執行方式,並附 requirements.txt(含套件版本)。

請直接產生這兩份文件的完整內容,隊伍與組員資訊先用【請填入】佔位。

⑨ 奪冠強化(進階必看)

在「一鍵完整版」或 ①~⑧ 跑完後,貼上這段把分數推到排行榜前段。這一段涵蓋特徵工程、強模型、穩健交叉驗證、門檻調校、模型融合——競賽奪牌的關鍵幾乎都在這裡。
競賽級強化流程(衝冠亞季軍)
特徵工程 + XGBoost/LightGBM + OOF + 融合
接續同一個專案。目標是「在官方排行榜拿到前段名次」。請直接建立並執行 competition.py,把整個管線升級到競賽等級,全部繁體中文說明,固定 random_state 並盡量 seed everything:

0. 先確認官方評分指標(Accuracy / F1 / macro-F1 / ROC-AUC…),之後所有 scoring、門檻、融合都對準它。若不確定就合理推斷並註明。

1. 穩健驗證(Validation):改用 StratifiedKFold(n_splits=5,shuffle=True,random_state=42)建立交叉驗證框架,並產生每個模型的 out-of-fold(OOF) 預測,作為可信的本地分數(本地 CV 要能對應排行榜)。所有前處理/編碼一律用 sklearn Pipeline + ColumnTransformer 包起來、在每個 fold 內 fit,杜絕資料洩漏。

2. 特徵工程(Feature Engineering):主動衍生新特徵並用 CV 驗證是否有效(保留有用、砍掉沒用):
   - 數值:欄位間比率/差/乘積、分箱(binning)、log/開根號等轉換、離群標記。
   - 類別:目標編碼(target/mean encoding,需在 CV 折內做避免洩漏)、頻率編碼、重要類別的 One-Hot、類別組合。
   - 群組聚合:以某類別為 key 對數值欄做 mean/std/count 等聚合再併回。
   請用「加特徵前 vs 後」的 OOF 分數證明提升。

3. 強模型(Models):訓練並比較 XGBoost、LightGBM、CatBoost、sklearn HistGradientBoostingClassifier、RandomForest(若無法安裝額外套件,全部退回 sklearn 內建的 HistGradientBoosting/RandomForest/GradientBoosting)。用早停(early stopping)避免過擬合。

4. 超參數優化(Tuning):用 Optuna(或 RandomizedSearchCV)以 StratifiedKFold + 官方指標為目標,搜尋每個強模型的關鍵超參數(learning_rate、max_depth/num_leaves、n_estimators、min_child_weight、subsample、colsample_bytree、reg_alpha、reg_lambda 等)。印出最佳參數與 OOF 分數。

5. 類別不平衡:比較 class_weight / scale_pos_weight / (謹慎使用)SMOTE 對官方指標的影響,用 CV 決定採用哪個。

6. 決策門檻調校(Threshold):若指標是 F1/accuracy 等需 0/1 的指標,請在 OOF 機率上搜尋最佳門檻(而非固定 0.5),並套用到最終預測。

7. 模型融合(Ensembling):用 StackingClassifier(以 Logistic Regression 當 meta learner)或對多個模型的 OOF 機率做加權平均(blending);也可多個 random seed 平均降低變異。用 OOF 分數證明融合優於任何單一模型。

8. 產出「分散押注」的兩份最終繳交檔:一份用單一最強的調參模型、另一份用融合模型;都套用調好的門檻,並嚴格符合作業要求的輸出格式。

9. 產出「消融實驗表」:條列 baseline → +清理 → +特徵工程 → +調參 → +融合,各步驟的 OOF 分數,證明每一步的貢獻;並用 SHAP 畫特徵重要性與解讀。

請完整寫出程式碼、實際跑出 OOF 分數與最終兩份繳交檔,若出錯請自行修正到成功。

加分技巧

追求滿分的進階要求
選用
請在現有專案上再加上以下進階內容,全部繁體中文說明:
1. 處理類別不平衡:比較「class_weight='balanced'」與 SMOTE 過採樣對 F1 的影響。
2. 特徵重要性:用 RandomForest / GradientBoosting 的 feature_importances_ 畫出重要特徵長條圖,並解讀哪些欄位最影響預測結果。
3. 用 VotingClassifier 或 StackingClassifier 把多個模型組合,看能否再提升 F1。
4. 加上 Pipeline 把「前處理 + 模型」串成一條龍,避免資料洩漏並方便重現。
5. 用繁體中文補一段「錯誤分析」:看模型最常判錯哪一類客戶、可能原因。

交付前檢查清單

基本(拿滿作業分)

進階(衝冠亞季軍)

已複製到剪貼簿!