文/旗標科技
先前『銷售AI化!看資料科學家如何思考,用Python打造能賺錢的機器學習模型』一書已經實作過監督式學習的分類與迴歸模型,本節要介紹的是第 3 種:用來處理具有週期性資料的時間序列 (Time series) 模型,可以只用過去的目標變數值去訓練模型,然後將模型用在預測未來一段時間的目標變數值。例如共享單車業者可以用過去兩年期間的每日租借量去訓練模型,再用此模型去預測未來一段期間的每日租借量。
我們在前面討論的迴歸模型,訓練時使用的輸入資料也有時間性的關係,但與本節要介紹的時間序列模型不同,我們先來看看它們的差異。
下面是迴歸模型的預測示意圖 (項目經過簡化)。此模型要預測單車的「租借量」,輸入資料為「年份」、「月份」、「星期幾」…等 (下圖藍色框)。換句話說,這是利用當日收集到的資料 (必須有當天的天氣等資料) 去預測當日租借量的機制:
那麼,時間序列模型又是什麼樣的處理方式呢?請見下圖:
時間序列模型並不是用「租借量」右側那一堆項目來訓練,而是靠過去「每日」的「租借量」來訓練。各位可能會想,單靠目標變數過去的資料,真的能夠訓練模型嗎?這時候,位於表格最左側的「日期」就有很重要的意義了,因為日期具有週期性,也就是說單車租借量在每個星期天應該都差不多,去年 4 月與今年 4 月也應該會有類似的走向。這 2 種現象就是所謂的「週循環」與「年循環」。由於我們取得的資料集記錄的是以 1 天為單位的統計資料,因此可預期的循環只會有週與年這 2 種,如果有以更短的時間為單位 (例如小時) 的資料,就可以預測「日循環」。
具體來說,就是將目標變數的數值資料視為以「日單位」、「週單位」、「年單位」的週期性與趨勢變化的總和,找出與過去歷史資料擬合程度高的「週期函數」與「趨勢」,就能夠建出時間序列模型並預測未來。
那麼時間序列模型適合應用在什麼類型的工作中呢?由於「迴歸」與「時間序列」想要預測的都是未來的一個數值,因此能夠運用的場景也差不多。
我們思考一下,為了開發迴歸模型我們需要收集許多項目的資料,才能訓練模型做預測。而時間序列模型卻只需要過去每日的「日期」與「租借量」就可以做訓練,怎麼看都覺得更方便。事實上也是如此,只不過以前在開發時間序列模型的人需要具備統計知識,而現在因為可使用 Facebook (2021 年已改名為 Meta) 發表的 Prophet 演算法 (可自動化預測時間序列的未來走勢),讓我們很容易就能開發出時間序列模型。
時間序列模型的特色還包括統計的信賴區間(Confidence Interval) 觀念。也就是說,時間序列並不只是單純預測一個數值而已,還能夠「預測結果會有多少機率(Prophet 演算法預設是 0.8,也就是 80%)落在估計的數值區間之內」。因此只要活用預測結果,便能有效控制風險。
【編註】信賴區間是指給予預測值一個可容許的誤差範圍,比如說信賴區間是 -2 到 2 之間,標準答案 1 就落在信賴區間之內,但標準答案 3 就超出此區間。更詳細的介紹可參考《機器學習的統計基礎》(旗標科技出版)。
還有,我們也想知道「能夠預測到多遠的未來」?像 5.2 節的迴歸模型,輸入資料中包括「天氣」與「氣溫」等項目,這表示要到當天才能收集到必需的正確資料,也才能預測當天的租借量。相較之下,時間序列模型是利用過去日期的租借量,因此可以預測中長期的變化趨勢。
過去要處理時間序列的問題,雖然可以使用 Python 的 statsmodel 統計套件,但需要具備一定程度的數學與統計知識,導致程式開發者難以上手。所幸 Facebook 於 2017 年發布時間序列預測專用的 Prophet 演算法,由於自動化的預測功能,讓開發此類模型變得簡單許多,
※ 本文摘錄自『銷售AI化!看資料科學家如何思考,用Python打造能賺錢的機器學習模型』