Chuyển đến nội dung chính

第 5 課:迷你項目 1 — 預測房價

第一個完整的練習課程:簡單的 EDA、訓練/測驗分割、基準模型、評估和經驗教訓。

🧠 人工智慧與機器學習 — 第 4 課 第 5 課:迷你項目 1 — 預測房價

機器學習:從基礎到高級

第 0 部分:新手入門(第 0 週)

亞洲開發網

簡介

這是該系列的第一個迷你項目。目標不是優化到最佳水平,而是讓您從頭到尾經歷整個過程:了解資料、選擇特徵、分割訓練/測試、建立基準、訓練模型、評估並得出結論。

問題背景

您擁有一個城市的住房數據,其中包含以下資訊:

  • 面積
  • 臥室數量
  • 廁所號碼
  • 區
  • 房屋年齡
  • 售價

目標是預測新房的房價。

迷你專案目標

  • 進行基本的 EDA 來理解數據
  • 建立第一個基線
  • 訓練至少一個迴歸模型
  • 使用指標給出明確的結論

1. 業務問題

房地產經紀人或清單系統想要估算新房子的公平售價。

對應的機器學習問題:

輸入房屋資訊後,預計售價是多少?

2. 最低 EDA 要求

import pandas as pd

df = pd.read_csv('data/raw/houses.csv')

print(df.head())
print(df.shape)
print(df.info())
print(df.isnull().sum())
print(df.describe())

您至少需要回答以下問題:

1.有多少行數據? 2. 是否有任何欄位缺少資料? 3. 目標列是什麼? 4. 模型中是否存在沒有意義的列?

3.選擇第一個特徵

在第一輪中,不要選擇太多列。只是幾個明顯的特徵:

features = ['dien_tich', 'so_phong', 'so_toilet', 'tuoi_nha']
X = df[features]
y = df['gia']

第一輪選擇少數特徵的原因:

  • 易於調試
  • 易於理解每個變數的影響
  • 減少複雜資料處理中的錯誤

4. 基線

from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_absolute_error

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)

baseline_pred = [y_train.mean()] * len(y_test)
baseline_mae = mean_absolute_error(y_test, baseline_pred)

print('Baseline MAE:', baseline_mae)

5.第一個模型

from sklearn.linear_model import LinearRegression

model = LinearRegression()
model.fit(X_train, y_train)

pred = model.predict(X_test)
model_mae = mean_absolute_error(y_test, pred)

print('Model MAE:', model_mae)

6. 讀取結果

例如:

  • 基線 MAE:8.5 億
  • 模型MAE:4.2億

初步結論:

  • 此模型明顯優於基線
  • 初步工作流程已步入正軌
  • 可以透過特徵工程或更強大的模型進一步改進

7. 進一步擴展

嘗試新增一個分類變量,例如 quan:

X = pd.get_dummies(df[['dien_tich', 'so_phong', 'so_toilet', 'tuoi_nha', 'quan']], drop_first=True)
y = df['gia']

然後再次訓練並比較指標。這是測試新增位置資訊是否確實對模型有幫助的簡單方法。

8. 小型專案後的簡短報告樣本

你應該寫一個像這樣的總結:

我使用 4 個基本數值特徵來預測房價。透過平均價格進行基線預測得出 MAE = X,而線性迴歸得出 MAE = Y。這表明模型已經了解了特徵與售價之間的關係。但該模型目前沒有使用詳細的位置特徵,也沒有處理異常值。

這是一個非常重要的習慣,因為機器學習不僅涉及編碼,還涉及傳達結果。

額外挑戰

  1. 比較線性迴歸和隨機森林迴歸。
  2. 嘗試刪除某個功能以查看指標如何變化。
  3. 創建特徵 gia_m2 並檢查使用不當是否有洩漏。

常見錯誤

  • 在不理解其含義的情況下使用每一列。
  • 在評估之前忘記分開訓練/測試。
  • 看到指標優於基線,然後在沒有檢查數據的情況下過早下結論。

完成標準

  • 完成了小專案從頭到尾的運行
  • 有一個基線和至少 1 個機器學習模型
  • 可以寫出關於結果的簡短、易於理解的結論