一個關於毛孩、愛、與 AI 異常偵測的溫馨故事
完整教學 Isolation Forest 原理
小葦是個在家工作的資料科學家,每天最期待的事,不是老闆的讚美,而是早上七點,奶油那條金色尾巴開始搖晃的那一刻。
奶油是一隻三歲的黃金獵犬,名字來自牠毛色的顏色——暖黃帶著奶白,像是陽光打在剛切開的奶油上。牠的生活非常有規律:早上七點喝水、吃飯,然後跑去叫小葦起床;上午玩一輪「誰先拿到網球」;下午在陽台曬太陽打盹;晚上七點的散步是牠最興奮的事,不論颳風下雨。
小葦幫奶油戴上了一條智慧項圈,不是為了炫耀,而是因為身為一個每天和資料打交道的人,他心裡有個念頭越來越清晰:
「如果奶油哪天不舒服,在說話之前,資料或許能幫牠說話。」
項圈每一分鐘靜靜記錄著奶油的一切:
這些資料每天傳進小葦的電腦,再由他親手訓練的 AI 模型默默守望著奶油——那個模型,叫做 Isolation Forest(隔離森林)。
想像一座森林,裡面住著一百棵偵探樹。每一棵樹的工作很簡單:隨機選一個特徵(例如「今天喝水幾次」),再隨機畫一條分隔線,把資料切成兩半;然後繼續切、繼續切,直到某筆資料孤零零地待在一個小格裡為止——它被「孤立」了。
一百棵偵探樹各自獨立判斷,最後統計「平均需要幾刀」,轉成一個 0 到 1 的異常分數。它是無監督學習——不需要事先準備任何「這是正常」「這是異常」的標籤,模型自己就能找出誰格格不入。
奶油戴著項圈過了兩個月,完全不知道自己正在被記錄——牠只知道這個東西掛著時,有時候會傳來一陣輕微的震動,然後小葦就會笑著跑過來摸牠的頭。
這兩個月,AI 模型在學習什麼叫做「奶油的正常」。每一天的資料,在偵探樹的眼裡,都與其他正常天緊緊靠在一起,要費很多力氣才能把某一天孤立出來。
模型設定的警報閾值是 0.6。低於 0.6 的天,一切正常,不打擾小葦。偵探樹靜靜守著,什麼也不說——因為奶油每天都很好。
把奶油 60 天的資料想像成散佈圖上的 60 個點(橫軸步數,縱軸飲水次數),它們聚成一大片密集的雲。偵探樹隨機切一刀,把 60 點切成 30:30;再切,15:15⋯⋯要切很多刀,才能把其中某一天孤立出來。
下面是互動示意圖——按「開始示範」可以看到偵探樹如何分別處理「正常天」與「異常天」:
示意圖:正常天 vs 異常天,需要幾刀才能被孤立?
正常天(聚在一起)
異常天(格格不入)
那是七月的某個星期二,小葦正在趕一份報告,奶油趴在腳邊,感覺和每天一樣。
但電腦另一個視窗裡,一個數字悄悄在動。
奶油的項圈資料傳進來了。每一個數字,單獨看,都不嚇人——也許步數少,是因為天氣熱;也許吃得慢,是因為換了新口味?
但偵探樹不這樣想。一百棵樹輪流分析這五個維度:這筆資料全都偏了一點,切起來特別順——第一刀切步數就把它分開了;第二刀切飲水次數,幾乎孤立;第三刀,完全孤立。
平均只要 3.2 刀,就能把今天孤立出來。
正常的天緊緊聚在一起,要 20、30 刀才能孤立;奶油這一天的五個數值全部偏離中心,在散佈圖上離群獨處,偵探樹一看——三刀就切完了。
注意:Isolation Forest 偵測的是「和自己過去的正常有多不同」,而不是「是否達到某個絕對數值」。就算奶油今天的步數對別的狗是正常的,只要對奶油自己不正常,就會被發現——這讓它對每一隻獨特的毛孩都公平。
小葦的手機輕輕震了一下。
小葦愣了一秒,低頭看看奶油。奶油正在打盹,沒有嗚咽,沒有發抖,看起來就是……懶懶的,有點累。
如果沒有這條訊息,他可能會想:「也許是天氣熱,很正常。」然後繼續趕報告。
但他把報告丟一旁,蹲下來,輕輕摸了摸奶油的肚子。奶油把頭靠過來,用那雙亮晶晶的眼睛看著他,尾巴輕輕搖了兩下——不是平時那種瘋狂搖法,只是……輕輕的兩下。
小葦突然感覺胸口一緊。他打開電話,預約了明天早上的獸醫門診。
每棵偵探樹都記錄:「我切了幾刀才把這筆資料孤立?」一百棵樹各有各的答案,取平均後,換算成 0 到 1 的異常分數。
奶油那天:平均 3.2 刀孤立,相比正常天的 20+ 刀,分數高達 0.73——一百棵偵探樹達成共識:今天不對勁。而且它同時感知到五個維度的細微變化,人眼很容易忽略單一異常,Isolation Forest 卻能看見整體的「偏移感」。
這就是它特別適合監測生物健康指標的原因:每個單一數值都在合理範圍內,但放在一起,整體模式就是不對——只有多維度模型才能捕捉這種細膩的異常。
獸醫林醫師輕輕摸了摸奶油的腹部,做了尿液分析和超音波。奶油乖乖趴著,偶爾轉頭看看小葦,尾巴還是輕輕搖。
「早期泌尿道結石,」林醫師說,「很小,才剛開始。因為來得早,飲食調整加上多補充水分就能控制,不需要手術。」
她停了一下,補充說:「如果再拖個一兩個月,可能就要動手術了。你怎麼發現的?牠看起來沒有什麼明顯症狀。」
小葦笑了笑:「偵探幫我翻譯的。」
他回頭看著奶油,奶油正好也抬起頭看他,那雙亮晶晶的眼睛裡有著某種說不清的溫柔。
「謝謝你告訴我,」小葦在心裡說,「雖然你用的方式有點繞,但我聽到了。」
三週後,奶油回診,結石指數下降,飲水量回到了正常範圍。那天下午的散步,奶油幾乎是用飛的,那條金色的尾巴在夕陽裡搖得比任何時候都快。
小葦看著牠,突然覺得眼眶有點熱。
奶油戴著牠的智慧項圈,繼續過著每一天。走 8,000 步,喝 4 次水,進食 6 分鐘,睡 13 小時。每天的異常分數靜靜躺在 0.2 上下——偵探樹滿意地繼續守望,什麼也不說,因為今天,奶油很好。
「愛一個說不了話的毛孩,不只是用眼睛看、用手摸。
有時候,是用資料傾聽牠沒說出口的話。」
Isolation Forest 不是冰冷的演算法。
在這個故事裡,它是一百棵守望者樹,每一棵都在說:
「今天你的奶油,還好。放心吧。」
| 概念 | 奶油的故事怎麼說 |
|---|---|
| 訓練資料 | 兩個月的「正常奶油」行為資料(60 天基準期) |
| 隔離樹 | 100 棵偵探樹,每棵隨機切割、獨立判斷 |
| 孤立深度 | 正常天平均 20+ 刀,異常天只要 3.2 刀 |
| 異常分數 | 0.73 > 閾值 0.60,觸發健康警報 |
| 無監督學習 | 不需要「生病標籤」,模型自己找出誰格格不入 |
| 多維度感知 | 五個指標同時輕微偏移,人眼難察,AI 看見整體模式 |
| 個體化比較 | 和奶油自己的過去比,而非跟其他狗比,對每隻毛孩都公平 |