
時間序列預測:ARIMA 與 Prophet - 每月工傷件數趨勢
工傷件數有淡旺季嗎?安全改善計畫真的有效嗎?本篇用十年月度工傷資料實測兩大時序模型:統計學派的 SARIMA 與 Meta 開源的 Prophet。實驗跑出一個殘酷的劇情:預設參數的 Prophet 輸給「直接抄去年同月」的天真基準——以及如何用元件圖診斷、調參逆轉的完整過程。
WRITTEN BY

- Name
- Harry Chang
核心貢獻者
George Box (喬治·博克斯) 與 Gwilym Jenkins 於 1970 年出版的《Time Series Analysis》確立了 Box-Jenkins 方法論 (ARIMA),統治統計預測領域半世紀。Box 也是那句名言的作者:「所有模型都是錯的,但有些是有用的」。Sean J. Taylor 與 Benjamin Letham (Facebook 核心資料科學團隊) 則於 2017 年開源 Prophet,論文標題《Forecasting at Scale》道盡其設計哲學:讓不懂 ARIMA 的分析師也能做出可靠預測,並把「人的領域知識」變成可調的參數。
為什麼工安需要時間序列?
前兩篇 (Day 40、41) 處理的是「這一筆是不是異常」,這一篇把視角拉高到「整體趨勢往哪走」:
- 驗證改善措施:安全改善計畫上線兩年,工傷件數的下降是計畫的功勞,還是本來就在降?
- 資源提前部署:如果 7、8 月是工傷旺季 (高溫、疲勞),職安人力與宣導應該 6 月就佈署。
- 設定合理目標:明年的工傷目標訂多少?拍腦袋不如讓模型先給一個基準預測。
1. 資料集來源
資料集:合成十年月度工傷件數
備註:延續本系列做法,合成資料才能「埋入已知答案」。真實結構參考常見的製造業型態。
資料集特色與欄位介紹:
2016-01 至 2025-12 共 120 個月,每月工傷件數由三個成分疊加後以 Poisson 分布抽樣 (件數是計數資料,天生就是 Poisson):
- 趨勢:2016~2019 穩定在每月約 14 件;2020 年初導入安全改善計畫後,四年間緩降至約 7 件——注意,趨勢裡藏了一個轉折點 (changepoint),這是後面劇情的伏筆。
- 季節性:7、8 月高溫疲勞高峰 (+3.5 件)、12 月年底趕工小高峰 (+1.5 件)、2 月春節停工低谷 (-4 件)。
- 雜訊:Poisson 隨機性——平均 10 件的月份,實際可能出 6 件也可能出 15 件。
資料切分
- 訓練集:2016-01 ~ 2024-12 (108 個月)。
- 測試集:2025-01 ~ 2025-12 (12 個月)——時間序列絕不能隨機切分,只能「用過去預測未來」。
2. 原理
2.0 先學會拆解:趨勢 + 季節 + 殘差
一切時序分析的起手式是 STL 分解,把序列拆成三層:

- Trend:改善計畫的成效肉眼可見——這條線就是給管理層看的那條線。
- Seasonal:每年重複的規律 (夏季高峰、春節低谷)。
- Residual:拆完剩下的隨機波動。如果殘差還有規律,代表模型還有東西沒學到。
2.1 ARIMA:統計學派的正統武功
ARIMA(p, d, q) 由三個零件組成,全部作用在序列自己身上:
| 零件 | 名稱 | 直覺 |
|---|---|---|
| AR(p) | 自回歸 | 這個月的件數,和前 p 個月的件數有關 (慣性) |
| I(d) | 差分 | 先做 d 次「這月減上月」,把趨勢消掉,讓序列平穩 |
| MA(q) | 移動平均 | 這個月的意外波動,會殘留前 q 期預測誤差的影子 |
- 平穩性 (Stationarity) 是 ARIMA 的核心信仰:均值與變異數不隨時間改變。趨勢與季節都是「不平穩」,所以要先用差分消掉——這就是 I 的工作。
- SARIMA 再加一組季節零件 (P, D, Q, s):對「去年同月」做同樣的三件事。本篇用經典設定 SARIMA(1,1,1)×(1,1,1,12)——月資料的萬用起手式。
2.2 Prophet:把預測變成「可調參的曲線擬合」
Prophet 走完全不同的路線——不管自相關,直接把序列建成可分解的加法模型:
- 趨勢:分段線性函數,自動偵測轉折點 (changepoints)——正好對應「某年導入改善計畫」這種結構變化。
- 季節性:用傅立葉級數擬合年週期 (平滑的正弦波疊加)。
- 假日效應:直接把「春節」「颱風假」等日曆事件餵給模型——這是它對亞洲資料特別友善的原因。
- 設計哲學:每個成分都對應一個人類看得懂的參數,預測錯了可以「看圖診斷」——這一點在後面的實驗會變成主角。
2.3 兩派對照
| 面向 | SARIMA | Prophet |
|---|---|---|
| 建模對象 | 序列的自相關結構 | 趨勢/季節/假日的顯式函數 |
| 前置要求 | 平穩性、定階 (p,d,q) | 幾乎零門檻,daily/monthly 皆可 |
| 轉折點 | 靠差分硬吃 | 原生支援,可調彈性 |
| 缺失值/離群值 | 敏感 | 天生耐受 |
| 可解釋性 | ACF/PACF,統計人語言 | 元件圖,管理層語言 |
3. 實戰
Python 程式碼實作
from statsmodels.tsa.statespace.sarimax import SARIMAX
from prophet import Prophet
# ---- SARIMA:月資料經典設定 (1,1,1)x(1,1,1,12) ----
sarima = SARIMAX(train['y'].values, order=(1, 1, 1),
seasonal_order=(1, 1, 1, 12)).fit(disp=False)
pred_arima = sarima.get_forecast(steps=12).predicted_mean
# ---- Prophet:資料表只要兩欄,ds (日期) 與 y (數值) ----
m = Prophet(yearly_seasonality=True, weekly_seasonality=False,
daily_seasonality=False)
m.fit(train) # train 含 ds, y 兩欄
future = m.make_future_dataframe(periods=12, freq='MS')
pred_prophet = m.predict(future)['yhat'].values[108:]
程式碼重點:
- Prophet 的 API 是「pandas 進、pandas 出」,對月資料記得
freq='MS'(Month Start)。 - 評估時多加一個季節性天真基準 (Seasonal Naive):預測值直接抄「去年同月」。任何時序模型都必須先打贏它,否則就是白忙。
4. 模型評估
12 個月留出測試的成績單
| 模型 | MAE | RMSE |
|---|---|---|
| Seasonal Naive (直接抄去年同月) | 2.250 | 2.784 |
| SARIMA (1,1,1)×(1,1,1,12) | 2.020 | 2.356 |
| Prophet (預設參數) | 2.399 | 2.824 |
| Prophet (changepoint_prior_scale=0.5) | 1.486 | 1.652 |

劇情分三幕:
第一幕:預設 Prophet 輸給了「抄去年」。MAE 2.399 對 2.250——大名鼎鼎的開源套件,敗給一行 Excel 就能做的天真基準。這不是 Prophet 爛,是預設參數不認識你的資料。
第二幕:看圖診斷。Prophet 最大的優勢是可以把模型剖開來看:

- 上圖 (趨勢):抓包了!真實趨勢是「2016~2019 平穩、2020 起下降」的折線,但 Prophet 畫成一條從頭降到尾的直線——它把 2020 年的轉折點抹平了。原因:預設
changepoint_prior_scale=0.05對趨勢轉折非常保守。 - 下圖 (年季節性):2 月低谷和 7 月高峰有抓到,但多出一堆真實結構裡不存在的小波浪——傅立葉級數把 Poisson 雜訊當成了季節規律。
第三幕:一個參數逆轉。把 changepoint_prior_scale 放寬到 0.5,允許趨勢在轉折點處大膽轉彎——MAE 從 2.399 降到 1.486,反超 SARIMA 奪冠。
工安視角的解讀
- 先立基準再談模型:職安月報本來就會「跟去年同期比」,Seasonal Naive 就是這件事的數學版。模型打不贏它,就繼續用去年同期比,誠實又省錢。
- 轉折點是有管理意義的:
changepoint_prior_scale調大後模型抓到的那個轉折,正是安全改善計畫的上線時間——模型幫你用數據證明了計畫有效,這比預測本身更有價值。 - 件數少的廠注意:月工傷件數是小計數 (常常是 0、1、2),Poisson 雜訊相對巨大,任何模型的區間都會很寬。此時重點不是點預測,而是「這個月落在區間外」的警訊功能。
5. 總結
我們學習了時間序列預測的兩大門派:
- SARIMA:Box-Jenkins 正統,用自回歸+差分+移動平均對付自相關,月資料起手式 (1,1,1)×(1,1,1,12)。
- Prophet:趨勢+季節+假日的可分解模型,轉折點原生支援,元件圖能「看圖診斷」——本篇它從輸給天真基準到反超奪冠,靠的就是這個可診斷性。
- 鐵律:永遠先立 Seasonal Naive 基準;時序資料只能按時間切分;預設參數不認識你的資料。
- 工安啟示:時序模型最大的價值不一定是預測,而是用轉折點與趨勢線證明「改善措施有沒有效」。
下一篇是一般教材極少覆蓋、但工安與設備管理天生需要的主題:存活分析 (Survival Analysis)——設備多久會壞?這批員工多久內會出事?時間本身,就是答案。