iT邦幫忙

2025 iThome 鐵人賽

DAY 28
0

1. 準備資料
我們要比較模型預測 (afp_pred, alt_pred) 與實際值 (afp, alt) 的誤差。
在 PostgreSQL 中取出資料:

SELECT
  record_date,
  afp,
  afp_pred,
  alt,
  alt_pred
FROM cancer_patients
WHERE patient_id = '001'
ORDER BY record_date;

2. 在 Python 中計算誤差
我們來用幾個常見的回歸模型評估指標:
● MAE (Mean Absolute Error):平均誤差絕對值
● MSE (Mean Squared Error):均方誤差
● MAPE (Mean Absolute Percentage Error):平均百分比誤差

import pandas as pd
import psycopg2
from sklearn.metrics import mean_absolute_error, mean_squared_error

conn = psycopg2.connect(
    host="localhost",
    database="cancer_db",
    user="admin",
    password="admin123"
)
df = pd.read_sql("SELECT * FROM cancer_patients WHERE patient_id='001'", conn)

mae_afp = mean_absolute_error(df["afp"], df["afp_pred"])
mse_afp = mean_squared_error(df["afp"], df["afp_pred"])
mape_afp = (abs((df["afp"] - df["afp_pred"]) / df["afp"])).mean() * 100

mae_alt = mean_absolute_error(df["alt"], df["alt_pred"])
mse_alt = mean_squared_error(df["alt"], df["alt_pred"])
mape_alt = (abs((df["alt"] - df["alt_pred"]) / df["alt"])).mean() * 100

print(f"AFP 模型誤差:MAE={mae_afp:.2f}, MAPE={mape_afp:.1f}%")
print(f"ALT 模型誤差:MAE={mae_alt:.2f}, MAPE={mape_alt:.1f}%")

這樣就能知道模型目前預測的準確程度,例如:
AFP 模型誤差:MAE=24.6,MAPE=5.4%
ALT 模型誤差:MAE=8.1,MAPE=6.2%

3. 儲存模型評估結果
我們可以將這些數據存進一個新表格,方便後續趨勢追蹤。

CREATE TABLE model_evaluation (
  eval_date DATE,
  mae_afp FLOAT,
  mape_afp FLOAT,
  mae_alt FLOAT,
  mape_alt FLOAT
);

接著每次運行評估時新增一筆紀錄:

cursor = conn.cursor()
cursor.execute("""
INSERT INTO model_evaluation (eval_date, mae_afp, mape_afp, mae_alt, mape_alt)
VALUES (CURRENT_DATE, %s, %s, %s, %s);
""", (mae_afp, mape_afp, mae_alt, mape_alt))
conn.commit()
cursor.close()

4. 在 Grafana 建立「AI 模型表現 Dashboard」
(1) 折線圖:模型誤差趨勢
查詢語法:

SELECT
  eval_date AS "time",
  mape_afp AS "AFP MAPE (%)",
  mape_alt AS "ALT MAPE (%)"
FROM model_evaluation
ORDER BY eval_date;

顯示模型誤差隨時間的變化(越低越好)。

(2) Stat Panel:模型最新表現

SELECT
  mae_afp, mape_afp, mae_alt, mape_alt
FROM model_evaluation
ORDER BY eval_date DESC
LIMIT 1;

在 Grafana 顯示:
AFP 模型準確度:94.6%
ALT 模型準確度:93.8%

5. 建立自我回饋流程
這是進階概念:
可以讓 AI 模型根據誤差「自我修正」或「自動再訓練」。

(A) 簡單版本:自動提醒再訓練
當 MAPE > 10% 時,自動觸發提醒:

if mape_afp > 10 or mape_alt > 10:
    print(" 模型誤差上升,建議重新訓練!")

或發送通知(Email / Slack / Line)給系統管理者。

(B) 進階版本:自動再訓練
如果你有儲存過去病人資料,可以自動執行再訓練流程:

import joblib
from sklearn.linear_model import LinearRegression

X = df[["alt", "afp_pred"]]  # 或更多特徵
y = df["afp"]

model = LinearRegression()
model.fit(X, y)

joblib.dump(model, "updated_afp_model.pkl")
print(" 模型已自動再訓練!")

然後自動更新系統使用的新模型,實現 AI 自我優化循環。

6. 成果展示
到這裡,你的系統整體架構如下

[病人資料更新] 
     ↓
[AI 預測模型產生結果] 
     ↓
[誤差評估 (MSE/MAE/MAPE)]
     ↓
[Grafana 可視化模型表現]
     ↓
[誤差高 → 通知 / 自動再訓練]

● 具備模型監控
● 能追蹤準確率變化
● 具備回饋學習潛力


上一篇
AI 自動生成健康報告摘要 (LLM 整合篇)
下一篇
打造系統總覽儀表板
系列文
用 Grafana 打造癌症資料視覺化平台:從資料清洗到AI預測呈現30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言