iT邦幫忙

2025 iThome 鐵人賽

DAY 28
0
Odoo

做模組 × 畫地圖:30 天在地化會計模組的挑戰系列 第 28

Day 28: AI模組-成本異常檢測

  • 分享至 

  • xImage
  •  

探索

在去年出版的書籍中提到,成本的異常檢測最簡單的是透過觀察最大值與最小值來探討。然而,真正的異常資料,其實可以用更科學的方法進行統計比較。本章節希望針對過往輔導時經常遇到的問題,提出一套更具體的解決方式,離人工智慧學校畢業已五年,期間涉略相對較淺,模型原理尚未深入探討,等有更多案例研究再來說明~

期望解決的問題
首先,我們需要建立最基礎的統計資料。只有在具備標準差等統計基準後,才能進一步判斷 AI 所偵測到的異常是否真為異常。因此,本章節將聚焦於 統計方法與 AI 模型之間的一致性比較

當然,AI 的理論基礎與可選模型非常多元,但在本章節中,我更希望先完成 架構的實作,也就是打造一個可反覆測試 AI 的操作介面。至於模型的深入選擇與評估,則需要更多知識與測試過程,暫不在此展開。

最終目標
期望的成果是能延續 Day27 的銷貨成本毛利表,並在此基礎上加入 AI 與統計功能,讓分析更完整、更科學。


架構說明

統計使用

本系統在 銷售毛利分析表 中整合了統計異常檢測功能,透過 Z 分數(Z-Score) 方法來識別產品利潤率的異常情況,幫助管理者快速發現需要關注的異常交易。

1. 常態分佈假設

  • 假設產品利潤率遵循常態分佈
  • 約 95% 的資料點會落在平均值 ±2 個標準差範圍內
  • Z 分數 > 2.0 → 表示數值偏離正常範圍,屬於異常值

2. 異常檢測的實務意義

  • Z 分數 0–1:正常範圍內,無需特別關注
  • Z 分數 1–2:輕微偏離,可觀察後續趨勢
  • Z 分數 > 2:顯著異常,需要立即調查原因

3. Z 分數公式

Z = |(當前利潤率 - 歷史平均利潤率) / 歷史標準差|

模型使用

本系統整合了基於機器學習的 Isolation Forest (IF) 異常檢測演算法,透過多維度特徵分析來識別銷售毛利中的異常模式。IF 是一種 無監督學習方法,特別適合處理高維度資料的異常檢測。

多維度特徵向量(共 8 個特徵)

  • profit_rate:當前利潤率
  • profit_rate_ma3:3 期移動平均利潤率
  • profit_rate_ma6:6 期移動平均利潤率
  • profit_rate_std:利潤率標準差
  • volume_trend:銷量趨勢變化率
  • quantity:當前數量
  • unit_price:當前單價
  • acc_unit_price:應收單價

資料預處理

  • 歷史資料:取最近 12 期記錄,依時間排序
  • 最小樣本:至少需 3 筆歷史記錄
  • 特徵計算:基於歷史資料生成 8 維特徵向量
  • 資料標準化:使用預訓練的 scaler 進行標準化

污染度 (Contamination)

  • 定義:異常樣本比例的假設值
  • 範圍:0.0 ~ 0.5
  • 常用值:0.1(假設 10% 為異常樣本)

異常判斷機制

  1. 二元分類結果
  • predictions[0] == 1 → 正常
  • predictions[0] == -1 → 異常
  1. 異常分數 (Anomaly Score)
  • 範圍:0.0 ~ 1.0
  • 意義:分數越高,異常程度越嚴重
  1. 信心度 (Confidence Level)
  • 計算方式:min(1.0, max(0.0, score))
  • 用途:提供檢測結果的可信度

1. 基本原理比較

項目 統計分析(Z 分數) IF(Isolation Forest)
理論基礎 傳統統計學 - 常態分佈假設 機器學習 - 無監督學習
核心概念 標準化分數,衡量偏離平均值的程度 孤立性原理,異常點更容易被隔離
數學基礎 標準差、平均值計算 隨機決策樹、路徑長度分析
假設條件 資料遵循常態分佈 無特定分佈假設

2. 檢測維度比較

項目 統計分析(Z 分數) IF(Isolation Forest)
分析維度 單一維度(利潤率) 多維度(8 個特徵)
特徵數量 1 個:當前利潤率 8 個:利潤率、移動平均、標準差、趨勢、數量、價格等
時間考量 歷史平均值和標準差 短期、中期趨勢 + 絕對數值
複雜度 簡單線性關係 複雜非線性關係

**3. 異常判斷標準比較 **

項目 統計分析(Z 分數) IF(Isolation Forest)
判斷方式 閾值比較:Z > 2.0 二元分類:-1(異常)/ 1(正常)
分數範圍 0 到 ∞ 0.0 到 1.0
閾值設定 固定閾值(2.0) 模型自動學習閾值
可解釋性 高(明確的統計意義) 中等(需理解機器學習概念)

實作

前面介紹了兩種異常檢測的架構方法,接下來就是規劃實際系統的流程。由於目前沒有真實資料,我先請 AI 簡化產生 24 期、30 個料號,共 720 筆 DEMO 資料,並設計一隻作業程式,透過下拉選單可多次產生資料。流程如下:

  • 匯入 DEMO 資料
  • 匯入當期異動
  • 計算特徵工程
  • 訓練 AI 模型
  • 檢測 IF 異常
  • 產生統計摘要
  • 檢測統計異常
  • 清除資料

如果要測試不同污染度對異常檢測結果的影響,可以在 訓練 AI 模型 時重新操作。期望的效果是:AI 模型在每個月產出報表後,都能重新訓練一次,讓下一期產生銷貨毛利分析表時可直接使用更新後的模型。

此外,最終呈現結果需要接續 Day27 的銷貨毛利分析表。由於料號略有不同,我將名稱改為 P001P004 進行實作報表結果,讓系統在撈取報表資料後,能直接放入模型判斷,並輸出統計與 AI 的異常檢測結果,可以發現P001是統計與IF都正常,P004在統計異常,IF正常,那在統計上就是Z分數偏離太多,因此顯示異常。

實際操作畫面如下:

架構圖

架構圖

利潤率 - 異常檢測 Wizard

利潤率-異常檢測精靈

利潤率歷史資料

利潤率歷史資料

統計摘要 - 一致性判斷

統計摘要-一致性判斷

銷貨毛利分析表 Wizard

銷貨毛利分析表Wizard

銷貨毛利分析表 - AI/統計-P001

銷貨毛利分析表-AI/統計

銷貨毛利分析表 - AI/統計-P004

銷貨毛利分析表


小結

在異常檢測的實務中,過往比較常見的是人工製作一版合理的標準資料作為判斷依據,再逐一的去比較資料,但這樣的方式往往過於耗時耗力,無法大量的進行檢查,透過系統協助可以達到:

  • 統計基礎:透過 Z 分數方法,建立標準差基準,讓異常判斷更有科學依據。
  • AI 補強:整合 Isolation Forest,能同時考量多維度特徵,捕捉更複雜的異常模式。
  • 一致性比較:統計與 AI 雖然邏輯不同,但能互相驗證,提升判斷結果的可信度。
  • 流程自動化:可重複執行的 Wizard,讓每期報表重新訓練模型並自動檢測異常。

方法盲點

其一當然是樣本數不夠多,其二需要注意的是,這類方法同樣存在限制。當資料本身幾乎全是異常時,系統將難以分辨差異,形成所謂 「垃圾進,垃圾出」 的情況。
因此,更進階的做法可能是:

  • 方法1:以 標準成本 作為對照基準,協助判斷異常是否合理,但仍會有人工介入。
  • 方法2:系統審視 整體標準成本架構,新增額外特徵值,讓檢測更具參考價值。

下一步展望

若要在實務上更廣泛應用,未來可以:

  • 測試更多數據模型:例如 One-Class SVM、LOF(Local Outlier Factor)、Autoencoder 等,建立更完整的異常檢測架構。
  • 測試RAG:使用對話方式,測試讓系統抓取單筆資料後,分析進行判斷。
  • 延伸應用場景:不僅限於銷貨毛利,也能用於 製造成本分析表、採購歷史單價 等領域,協助及早發現異常交易或異常成本。
  • 決策輔助:將異常檢測結果進一步轉化為 行動建議,例如提醒採購異常價格、或預警某產品線毛利偏低,讓報表不只是「顯示數字」,而是真正能 驅動管理決策

上一篇
Day27:成本模組-月加權平均-成本報表
下一篇
Day 29: 開發建議
系列文
做模組 × 畫地圖:30 天在地化會計模組的挑戰30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言