(五十)時間序列分析一 效應分解法

2021-10-07 13:03:32 字數 3559 閱讀 6475

將時間序列分為趨勢、週期、隨機三個部分,並對前兩個部分(穩定的可用於**的)使用曲線擬合。

這三種效應可以組合成加法模型和乘法模型,即三種效應之間相加或者相乘,圖形上的區別就是加法效應下季節效應的振幅隨時間變化不大(第一行圖),乘法效應下振幅逐漸增大(第二行圖)。

airpassengers資料集是乙份某航空公司從2023年到2023年每月的客運量資料。可以使用facebook資料科學家貢獻的fbprophet包(安裝時cmd裡面執行 conda install -c conda-forge fbprophet):

import pandas as pd

from fbprophet import prophet

import matplotlib.pyplot as plt

df = pd.read_csv(r'c:\users\lenovo\desktop\airpassengers.csv'

)#將字串改為日期

df['date'

]= pd.to_datetime(df[

'date'])

df.head(

)out[4]

: date air

01949-01

-011121

1949-02

-011182

1949-03

-011323

1949-04

-011294

1949-05

-01121

由於prophet函式要求其只能處理單變數的時間序列,匯入的資料第一列必須是日期型別的變數,變數名為「ds" ;第二列必須為數值型別的變數,變數名稱必須為」y」:

df = df.rename(columns=

)df.head(2)

out[6]

: ds y

01949-01

-011121

1949-02

-01118#看看該時間序列資料的趨勢和週期性

pd.plotting.register_matplotlib_converters(

)#上一條**是因pandas版本的問題造成時間戳'timestamp'的報錯處理

ax = df.set_index(

'ds'

).plot(figsize=(12

,8))

ax.set_ylabel(

'monthly number of airline passengers'

)ax.set_xlabel(

'date'

)plt.show(

)

下面使用prophet函教對時間序列進行建模。雖然該函式有很多引數,但是大郎分採用預設即可。其中只有兩個引數需要修改:growth引數用於指定長期趨勢部分的擬合函式的形式,選項有iiner和logistic兩個。通過觀察該資料集的趨勢可以確定是線性趨勢,假設發現時間序列的趨勢是非線性的,無論是指數形式還是對數形式,均可以選擇logstic;**值的置信區間預設為80%,而我們常用的是95%,因此需要設定一下:

# 設定趨勢的形式和**值的置信區間為95% 

my_model = prophet(growth=

'linear'

,interval_width=

0.95

)my_model.fit(df)

接下來進行**。make_future_dataframe函式用於準備好**使用的日期字段,periods引數指定**的期數,由於freq設定為「ms」代表月度資料,因此36期代表生成了3年的月度字段。predict函式使用只有日期欄位的空表進行**,其**的輸出變數較多,主要變數是時間序列的**均值"yhat",**均值95%置信區間的下限"yhat_lower",**均值95%置信區間的上限"yhat_upper":

future_dates = my_model.make_future_dataframe(periods=

36, freq=

'ms'

)forecast = my_model.predict(future_dates)

forecast[

['ds'

,'yhat'

,'yhat_lower'

,'yhat_upper']]

.tail(2)

out[7]

: ds yhat yhat_lower yhat_upper

1781963-11

-01534.021253

488.073721

578.596021

1791963-12

-01563.611828

517.280040

606.959414

最後展示**的結果,其中uncertainty引數用於設定是否在圖中展示置信區間:

在圖中,藍色的實線為**的均值,淺藍色區域為95%的置信區間,黑色的點為原始資料,最後三年為**資料。可以發現隨著時間的增長,季節效應的振幅逐漸增大,但是prophet本身沒有設定加法效應和乘法效應的選項,只能做加法效應模型。如果需要做乘法模型,只需要對時間序列取自然對數

可以看到,這個模型擬合效果更好(對比2023年-2023年那一段),**更符合實際情況。也就是說如果季節效應隨著趨勢增加,就需要對資料取對數再建模

AI 08 時間序列分析

一 時間序列預處理 每個統計學問題都需要進行一定的假設,同樣時間序列 也是 一條時間序列裡長期穩定不變的規律,是基本模型 平穩的基本思想 時間序列的行為並不隨時間改變 不常見 嚴平穩 這是一種比較嚴格的定義,認為只有當序列所有的統計性質都不會隨著時間的推移而發生變化時,該序列才能平穩。而在實踐中要獲...

八 時間序列

時間序列 datetime.datetime 2011 02 31 產生乙個datetimeindex物件 pd.datetimeindex 時間範圍 pd.date range start 4 1 2012 periods 20 時間戳 pd.timestamp 2011 03 12 04 20 ...

商務統計 12 時間序列分析 構成分析

客觀事物隨時間的變化是由多種因素共同作用的結果。按性質和作用,將影響因素歸為四種 將上述四種因素和時間序列的關係表示出來,構成了時間序列的分解模型。按其對時間序列的影響方式不同,可分解為多種模型,常用的兩種模型是 1.長期趨勢變動的測定 長期趨勢是時間序列的主要構成要素。主要方法 間隔擴大到何種程度...