MOAI 2026 第二套模擬考古題
你好!我是 MOAI 2026 競賽委員會專家。根據 IOAI 2025/2026 Syllabus 中關於「卷積神經網絡 (CNN)」、「機器學習評估指標 (Evaluation of ML Models)」的要求,以及 MOAI/IOAI 的「嚴格白名單 (Whitelist)」與「無網際網路 (Offline)」競賽環境規範,我為你精心設計了以下這套模擬考古題。
為了達到最佳的測驗效果,本試卷的「標準答案與詳解」目前已鎖定在後台隱藏。請你先嘗試作答,當你完成答題,或者需要幫助時輸入「請提供詳解」,我便會為你批改並解鎖答案!
一頁看懂
| 區塊 | 內容 |
|---|
| 理論題 | CNN 參數、維度、F1-score、ROC-AUC、感受野 |
| 編程題 | AQI 多分類任務 |
| 主要工具 | scikit-learn、pandas、numpy、pytorch |
| 評分重點 | 理論計算正確、Pipeline 正確、避免 Data Leakage |
| 常見失分 | 類別編碼錯誤、異常值沒處理、只寫模型沒寫流程 |
第一部分:理論與計算題 (佔總分 25%)
本部分測試你對深度學習底層運算與機器學習評估指標的數學理解。
| 題號 | 考點領域 | 題目描述 (Question) |
|---|
| Q1 | CNN 參數計算 | 假設輸入一張影像大小為 32×32×3 (RGB 三通道),經過一個卷積層 (Conv2D),設定 kernel_size=3x3,filters=16,並且包含偏差值 (bias)。請問該卷積層共有多少個可訓練參數 (Trainable Parameters)? |
| Q2 | CNN 維度計算 | 承上題,若該卷積層設定 stride=1, padding=1,接著再通過一個最大池化層 (MaxPool2D),設定 pool_size=2x2, stride=2。請問經過這兩層計算後,輸出的特徵圖維度 (Output Shape: Height × Width × Channels) 為何? |
| Q3 | F1-score 計算 | 在一個罕見疾病預測任務中,模型的測試結果如下:True Positive (TP) = 40,False Positive (FP) = 10,False Negative (FN) = 10,True Negative (TN) = 940。請寫出計算公式,並算出該模型的 Precision, Recall, 以及 F1-score。 |
| Q4 | ROC-AUC 概念 | 請問 ROC 曲線的 X 軸與 Y 軸分別代表什麼評估指標?若一個模型完全無法區分正負樣本(等同隨機瞎猜),其 AUC 值約為多少? |
| Q5 | CNN 感受野 | 在不使用 Pooling 的情況下,若連續堆疊兩層 kernel_size=3x3, stride=1, padding=0 的卷積層,請問第二層輸出的一個像素,對應回原始輸入影像的感受野 (Receptive Field) 大小為何? |
理論題作答提示
| 題型 | 先想什麼 | 短例子 |
|---|
| CNN 參數 | kernel_h × kernel_w × in_channels × filters + bias | 3×3×3×16 + 16 |
| CNN 維度 | 先算卷積,再算池化 | 32 → 32 → 16 |
| F1-score | 先算 Precision 和 Recall | F1 = 2PR / (P + R) |
| ROC-AUC | X 軸是 FPR,Y 軸是 TPR | 隨機模型 AUC 約 0.5 |
| 感受野 | 一層 3x3 再接一層 3x3 | 感受野會變成 5x5 |
第二部分:編程實戰題 (佔總分 75%)
| 項目 | 任務要求與描述 |
|---|
| 任務背景 | 預測澳門空氣質量等級 (Macau AQI Classification)。澳門環保局收集了過去數年的氣象與交通傳感器數據。由於感測器偶有故障,數據中存在缺失值與異常值。你的任務是訓練一個監督式學習分類器,根據當日的氣象與交通特徵,預測當日的空氣質量等級 (AQI Level)。 |
| 數據集描述 (Data Schema) | 訓練集 train.csv 包含以下欄位:date(日期字串 "YYYY-MM-DD")、temp(平均氣溫 °C,含少量 NaN 缺失值)、humidity(相對濕度 %)、wind_speed(風速 km/h)、pm25_sensor(PM2.5 傳感器數值,包含極端異常值)、traffic_volume(交通流量估算,整數)、district(測站所在區域,類別變數,如 'Macau_Peninsula', 'Taipa', 'Coloane')、aqi_level(目標變數:0=優、1=良、2=輕度污染、3=重度污染) |
| 評分標準 | Weighted F1-score。由於重度污染 (3) 的日子極少(嚴重 Class Imbalance),大會採用加權 F1-score 以公平評估各類別的預測表現。 |
| 限制條件 | 1. 白名單限制:無網際網路,僅能使用 scikit-learn, pytorch, pandas, numpy。2. 不洩漏數據:必須使用正確的 Pipeline 架構,避免 Data Leakage。3. 交付格式:需輸出 submission.csv,包含 date 與預測的 aqi_level。 |
| 實戰要求 | 請用文字簡述解題策略與程式碼架構,包含:1. 如何處理 temp 的缺失值以及 pm25_sensor 的異常值?2. 針對 district 字串類別變數,你會呼叫哪一個 scikit-learn 函數?3. 針對 Class Imbalance,你在模型訓練時會加入什麼參數或策略? |
編程題解題架構
| 步驟 | 要做什麼 | 短例子 |
|---|
| 1 | 讀入資料、看缺失值 | df.isna().sum() |
| 2 | 處理 temp 缺失值 | SimpleImputer(strategy='median') |
| 3 | 處理 pm25_sensor 異常值 | clipping 或 IQR 過濾 |
| 4 | 編碼 district | OneHotEncoder(handle_unknown='ignore') |
| 5 | 建立完整 Pipeline | ColumnTransformer + model |
| 6 | 處理不平衡 | class_weight='balanced' |
| 7 | 驗證與輸出 | Weighted F1 + submission.csv |
短範例
categorical_features = ["district"]
encoder = OneHotEncoder(handle_unknown="ignore")
model = RandomForestClassifier(class_weight="balanced", random_state=42)
🚀 挑戰開始!
請根據上述題目給出你的理論題計算過程,以及編程題的解題思路架構。如果你在計算時卡住,或是想直接看標準解答與教學,請隨時回覆「請提供詳解」!
🎬 配套影片資源
完成考題後,建議觀看以下影片對照學習: