怎樣理解時間序列一

我要看到數據,我要看到圖形化展示的數據,我要直接看到數據表達的信息,我要看到數據可以表達的未來的信息。慾壑難填,古人誠不欺我也。

我們反覆的壓榨、提取數據可以提供的信息,數據它也是夠意思,我們每多動點腦子,多花點時間,它卻也真的可以多提供些信息來,數據不負有心人啊。

想著更多的榨取數據的價值,也就開始看些數據挖掘領域的知識。和以往一樣,每學習一小段,就得總結下來,不然看過之後也會忘了十之八九了。

首選的模塊,就是時間序列,畢竟它還算是比較好理解的嘛,用起來、產出價值也算是容易的。零售行業中可以先預測商品的銷量再訂貨,就能減少些損耗;電商平台預測銷量,也可以監控異常或是刷單行為;旅遊/交通/酒店這些行業預測些人流量之類的,正好拿來做人力排班。在我們還不知真偽的算命都有很大的市場,若是有科學的辦法來預測未來,誰不想知道呢。

在這下面,我就簡單介紹下時間序列。

時間序列是怎樣預測的,它不是五行八卦來算來的也不是窮舉出來的,它是一種統計學方法,利用數據自身的信息來擬合函數對序列進行表達,進一步進行預測。若是往簡單了說,它就是先看歷史數據,然後找出個規律,再拿這個規律應用到未來,就是預測了。這種方法在很多企業已經是存在的了,即便還沒有什麼時間序列的概念。前年遇到的一個零售企業,就是通過過去5周的數據,每周一銷售額平均值作為下周一的銷售額,每周二的平均值作為下周二的銷售額,以此類推算出下一整周的銷售額。這就是一種移動平均的方法,這種比較簡單的演算法,在這家企業是很受歡迎的,也是真的給他們帶了些價值。

我上面舉的例子中的計算邏輯很簡單,但有著預測誤差的問題,比如最近溫度回升了,商品的銷量會受到影響,預測的值也必然是會有些誤差的。那麼問題來了,誤差問題怎麼解決。

無論是簡單的移動平均方法,或是更複雜些的演算法,誤差總會有的,演算法的不斷進化以及我們嘗試使用更複雜的計算都是朝著一個方向,那就是降低預測誤差,一個演算法是否好用,其最重要的評價標準就是它預測的准或是不準。但結果的准或不準,和演算法自身的關係還真的不大,更重要的是我們是否選擇了合適的演算法,配置了合適的參數,若是沒有在演算法模型的選擇和參數評估上花功夫,簡單的調用了一個演算法後發現它不準,從而就了定義這個演算法不好是不公正的。因此若要得到相對精準的預測數據,是要花些功夫的,而必備的一個基礎,就是要對演算法有一定的理解。下面我就介紹兩個最常用的演算法。

指數平滑預測模型:指數平滑預測模型是一種確定性分析演算法,理解和使用都很簡單,它來源於移動平均的思路,但更近一步,移動平均方法中計算歷史各個周期的數據的權重是一樣的,但現實中往往是距離當前越近的周期,影響權重越大。我們先來看簡單指數平滑,它的公式還是簡單的,也有助於大家理解指數平滑概念,所以我就寫出來:

通過公式看的出來,歷史數據的影響權重是越來越小的,此外,??在0到1之間且取值越大,近期大影響越大,因此一般變化比較緩慢的序列,??值可以小一點,而變化比較劇烈的序列,??值就要大一些。這樣看來,它已經比簡單的移動平均方法考慮的更多一層了,那麼理論上應該是會更準確一點了。此外,上面的這個公式是簡單指數平滑,它只適合比較平的序列,既不能預測長期趨勢,也不能預測帶有周期效應的序列。至於為什麼,可以看下面的推導:

根據上面的公式可以推導出(這個推導不難,你若是感興趣就驗證一下,不感興趣就看結果就夠了,結果是對的,我並沒有騙你):

那麼再近一步的推導:

可以看出來??t?l 恆等於??t?? ,因此,通過簡單指數平滑預測出來的就是一條直線(如下圖所示),除非用多個簡單指數平滑來拼湊一個周期(例如前面我舉的例子)。

但是很多數據是有趨勢性和周期性的,怎樣預測帶有趨勢性和周期性的數據呢。那麼引入了Holt兩參數指數平滑和Holt-Winters三參數指數平滑。各模型所適用的序列情況可以參考下面的表格:

如果序列中有一個趨勢,每期都遞增或遞減r,那麼一定周期後數據一定是初始值加或減這個周期倍數的r值。比如我體重每年遞增3斤,十年後就增加了30斤。這個思路很簡單,也是Holt兩參數指數平滑的基本思想,它預測時不止考慮歷史數據的權重平均,同時考慮到歷史數據的趨勢性。看下它的平滑公式為:

可以簡單理解下,公式中的r就是趨勢因素的一種表達,從公式中也可以看出,趨勢的計算也是指數平滑的思想,近期的趨勢影響權重和之前的趨勢影響權重不同,同時??在0到1之間且取值越大,近期趨勢影響越大。可以推導出Holt兩參數指數平滑的預測值為:

因此它的預測序列為一定比例的斜線(如下圖所示)。

當然現實生活中,尤其是企業業務中,很多數據都是具有周期性的,比如企業的銷售額可能是以年為周期,零售商品的銷售額以周為周期等等。採用Holt-Winters三參數指數平滑可以預測周期性數據。

周期性有不同類型,有累加性和累乘性,比如某地產公司每年7月份比6月份多買10w套房子,那麼就屬於累加的,若是每年7月份比6月份多買10%,這就是累乘的。因此對周期性數據進行預測時,要根據業務情況考慮使用加法模型還是乘法模型。我們還是看一下Holt-Winters三參數指數平滑的公式(以下分別為加法模型和乘法模型):

這兩個公式看起來已經不那麼友好了,我們只摘取對我們理解演算法有用的信息,可以看出來公式中多了s值,它的價值就在於周期性,公式中的??為周期。我們可以這樣理解,每次預測的值都是由一個周期的不同節點影響的,它將周期打散並分成多條線路預測再合併,例如將文章開頭中的例子,將周一到周日打散,然後將每個周一連起來預測,再將每個周二連起來測,公式中的??t-St???和??t/St???就是打造周期中不同節點的不同起點,從而它便可以預測具有周期性的數據。

到這裡可能會有些人看著發懵,前文不是講了指數平滑預測模型理解和使用很簡單么,為什麼還是有一堆的公式。然而我並沒有騙你,寫了那堆公式,只是想從原理上解釋它的預測方法,但是若要使用,不懂那些公式也沒關係,只需要記住上文中的表格。首先用肉眼評估自己手中的數據是否有趨勢性、是否有周期性,然後對號入座選擇合適的參數,就可以得到預測結果了,如下圖所示同時考慮趨勢性和周期累成所得到的預測結果。

這裡只介紹了一種預測方法,它使用起來很簡單,但是預測精度也是有限的,如果把預測後的殘差序列做白雜訊分析,很有可能發現還存在有價值的信息沒有被充分提取,這就引出了我下一個想要介紹的預測模型:ARIMA模型,ARIMA模型的預測原理是分析序列自身,並且提取序列中所有相關性性信息來擬合函數,並用該函數進行預測。相比於holt-winters,ARIMA模型可以對信息實現更充分的提取,當然它的複雜度就要更高一些了,原本想在本文中都介紹一下,但是篇幅過大,留在下一篇吧。

下一篇:怎樣理解時間序列二

原創文章,轉載請私信作者


推薦閱讀:

機器學習(周志華)第一、二章
利用R語言繪製世界航班路線圖
《Python數據挖掘》筆記(七) 自動化文本摘要
數據挖掘的知識大綱
為什麼有些公司在機器學習業務方面傾向使用R+Hadoop方案?

TAG:商業智能BI | 數據挖掘 | 數據分析 |