iT邦幫忙

0

Day 10:機器學習模型集成與跨平台擴展

o 2025-10-15 11:02:28122 瀏覽
  • 分享至 

  • xImage
  •  

一、今日目標

  1. 規則基線模型 升級為 機器學習模型,利用現有數據進行訓練,提升偵測準確度與召回率。
  2. 後端 API 集成機器學習模型,並提供高效能的預測服務。
  3. 討論如何將本系統擴展到 移動端桌面應用,進行跨平台應用與防禦。

二、機器學習模型集成

2.1 數據準備與清理

首先,我們將使用之前生成的 phishing_master_dataset.csv,這些數據包含了標註過的樣本。我們將使用 Logistic Regression 模型來進行二分類(phishingbenign),並且基於風險分數、URL 頻率、發件人等特徵進行預測。

數據清理與特徵提取

使用 Pandas 清理數據並將文本數據轉換為機器學習模型可用的數值特徵。

# ml_model.py
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report, confusion_matrix
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.pipeline import make_pipeline

# 讀取數據
df = pd.read_csv("data/phishing_master_dataset.csv")

# 清理數據(去除缺失值)
df = df.dropna(subset=["raw_text", "label"])

# 特徵與標籤
X = df["raw_text"]
y = df["label"].apply(lambda x: 1 if x == "phishing" else 0)

# 訓練/測試集劃分
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 使用 CountVectorizer 將文本轉換為數值特徵
model = make_pipeline(CountVectorizer(), LogisticRegression(max_iter=1000))

# 訓練模型
model.fit(X_train, y_train)

# 預測與評估
y_pred = model.predict(X_test)
print("Classification Report:\n", classification_report(y_test, y_pred))
print("Confusion Matrix:\n", confusion_matrix(y_test, y_pred))
2.2 模型優化與交叉驗證
為了提高模型的穩定性與準確度,可以進行交叉驗證,並根據 精確度(Precision) 和 召回率(Recall) 調整模型的超參數。以下是進行交叉驗證的代碼:

python
複製程式碼
from sklearn.model_selection import cross_val_score

# 交叉驗證(5-fold)
cv_scores = cross_val_score(model, X, y, cv=5, scoring="accuracy")
print(f"5-fold Cross Validation Accuracy: {cv_scores.mean():.4f}")
2.3 模型存儲與集成
完成訓練後,我們可以使用 joblib 或 pickle 來儲存訓練好的模型,並將其集成到 API 中:

python
複製程式碼
import joblib

# 儲存模型
joblib.dump(model, "phishing_model.pkl")

# 從檔案中加載模型
model = joblib.load("phishing_model.pkl")
三、後端集成機器學習模型
3.1 在 FastAPI 中集成模型
我們將把訓練好的模型集成到後端的 FastAPI 中,並提供 API 端點來接收新數據並返回預測結果。

api/app.py

python
複製程式碼
from fastapi import FastAPI, Form
from pydantic import BaseModel
import joblib

app = FastAPI()

# 載入訓練好的模型
model = joblib.load("phishing_model.pkl")

class AnalyzeIn(BaseModel):
    text: str

class AnalyzeOut(BaseModel):
    score: float
    verdict: str

@app.post("/analyze", response_model=AnalyzeOut)
async def analyze_body(body: AnalyzeIn):
    # 預測
    prediction = model.predict([body.text])[0]
    score = model.predict_proba([body.text])[0][prediction]  # 預測的機率
    verdict = "phishing" if prediction == 1 else "benign"
    return {"score": score, "verdict": verdict}
3.2 測試模型集成
啟動後端並進行測試:

bash
複製程式碼
uvicorn api.app:app --reload --host 0.0.0.0 --port 8000
測試:

bash
複製程式碼
curl -X POST http://127.0.0.1:8000/analyze -H "Content-Type: application/json" -d '{"text": "Your account will be suspended. Verify now: https://bit.ly/test123"}'
四、跨平台擴展(移動端與桌面應用)
4.1 移動端集成
為了讓系統支持 移動端,我們可以使用 Flutter 或 React Native 來構建跨平台的移動應用。在這裡,假設我們選擇 Flutter,將後端 API 集成到應用中。

在 Flutter 中調用後端 API:

dart
複製程式碼
import 'package:http/http.dart' as http;
import 'dart:convert';

Future<Map<String, dynamic>> analyzeText(String text) async {
  final response = await http.post(
    Uri.parse('http://127.0.0.1:8000/analyze'),
    headers: {"Content-Type": "application/json"},
    body: json.encode({"text": text}),
  );
  
  if (response.statusCode == 200) {
    return json.decode(response.body);
  } else {
    throw Exception('Failed to analyze text');
  }
}
在 Flutter 中顯示結果:

dart
複製程式碼
// 假設分析結果為 `Map<String, dynamic> result`
String verdict = result['verdict'];
double score = result['score'];

Text('Verdict: $verdict\nScore: $score');
4.2 桌面應用集成(Electron)
若要將系統集成到桌面應用中,可以使用 Electron 框架來將網站封裝成桌面應用。

使用 Electron 呼叫後端 API:

javascript
複製程式碼
const { app, BrowserWindow } = require('electron');
const fetch = require('node-fetch');

app.whenReady().then(() => {
  let win = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      nodeIntegration: true
    }
  });
  
  win.loadURL('http://127.0.0.1:8000');  // 加載你希望展示的頁面
  
  fetch('http://127.0.0.1:8000/analyze', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({ text: 'Your account has been suspended. Verify now.' })
  })
  .then(response => response.json())
  .then(data => console.log(data));
});
五、長期運維計劃與部署
5.1 系統監控與維護
在部署到生產環境後,進行以下監控與維護措施:

系統健康監控: 使用 Prometheus 和 Grafana 監控後端服務健康狀況,特別是 API 請求的延遲、錯誤率及流量。

自動化部署與更新: 配置 CI/CD pipeline(如 GitHub Actions),實現代碼的自動化測試與部署。

定期重新訓練模型: 每月或每季收集新的釣魚樣本,並重新訓練模型,保持模型的最新性和準確度。

5.2 擴展規模
多語言支持: 系統可支持多語言,如中文、日文、德文等,並針對每個語言設計不同的風險檢測規則。

多平台支持: 將防詐系統擴展至移動應用、桌面應用、Web 應用等多平台,實現跨平台防禦。

六、後續計劃
多模態模型集成: 整合圖像、文本等多模態數據進行防詐檢測,提升系統對複雜攻擊的辨識能力。

防範針對性攻擊: 針對假冒網站、社交工程攻擊等設計針對性防禦規則與機器學習模型,提升偵測能力。

用戶教育資源: 提供用戶教育模塊,幫助用戶識別釣魚攻擊,增強社會工程防範意識。


圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言