生活随笔
收集整理的這篇文章主要介紹了
时间序列分析之:函数分解decompose
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
時間序列分析——函數分解
第一篇 函數分解 函數分解decompose
文章目錄 時間序列分析——函數分解 前言 一、函數分解是什么? 二、建立分解函數 總結
前言
這幾天一直在深思,如何建立一個和實際比較貼切的金融模型,能反映現實生活?比如我們聽到國家又放水了,我們可以預期物價又得上漲了,但是如何通過模型來反映這種相關關系呢? 伙伴楊RC說用EXCEL建了個模型來預測本期深圳車牌競價,以達到最小的成本拍到車牌,這個想法不錯,Good lucky to my brother。 簡單的模型可以用EXCEL,復雜的模型就得使用python。 隨著人工智能的不斷發展,機器學習越來越重要,我們的目標是讓機器進行數據分析,發現一些特性和趨勢。本文就介紹時間序列分析的基礎。
一、函數分解是什么?
說白了就是拆分信號。剛好函數分解和我們想要建立的模型有點吻合:environment大趨勢 + company的周期性波動 + market的高斯擾動。 當然后續我們會引入相關性分析、情感分析等要素。
二、建立分解函數
1.功能
分解函數成三部分:趨勢、周期、和剩余部分(一般指噪聲,均值為0) 分解就是將時序數據分離成不同的成分,分解有:長期趨勢Trend、季節性seasonality和隨機殘差residuals 返回包含三個部分 trend(趨勢部分) , seasonal(季節性部分) 和residual (殘留部分) 傳入:一個序列,可以是時間序列 輸出:趨勢、周期、和剩余部分 三部分 函數詳解地址:鏈接 所以,我們建立一個python文件,命名為compose.py ,方便后續函數進行調用。 代碼如下:
# 功能:分解函數成三部分:趨勢、周期、和剩余部分(一般指噪聲)
# 分解就是將時序數據分離成不同的成分,分解有:長期趨勢Trend、季節性seasonality和隨機殘差residuals
# 返回包含三個部分 trend(趨勢部分) , seasonal(季節性部分) 和residual
( 殘留部分
)
# 創建時間:
2021 - 01 - 15
# 傳入:一個序列
# 輸出:趨勢、周期、和剩余部分 三部分
# 函數詳解地址:https
: / / machinelearningmastery
. com
/ decompose
- time
- series
- data
- trend
- seasonality
/
from statsmodels
. tsa
. seasonal import seasonal_decompose
import matplotlib
. pyplot as pltdef
decompose ( timeseries
, frequence
) : # 傳入數列和頻率數# 返回包含三個部分 trend(趨勢部分) , seasonal(季節性部分) 和residual
( 殘留部分
) # statsmodels也支持兩類分解模型,加法模型和乘法模型,model的參數設置為"additive"(加法模型)和"multiplicative"(乘法模型)。 # period:int, optional,系列的時期。如果x不是pandas對象或x的索引沒有頻率,則必須使用。如果x是具有時間序列索引的pandas對象,則覆蓋x的默認周期性 # decomposition = seasonal_decompose(timeseries,model='multiplicative',freq=frequence) decomposition
= seasonal_decompose ( timeseries
, model
= 'additive' , freq
= frequence
) trend
= decomposition
. trendseasonal
= decomposition
. seasonalresidual
= decomposition
. resid# 畫圖參數fig
= plt
. figure ( ) ax1
= fig
. add_subplot ( 411 ) ax1
. plot ( timeseries
, label
= 'Original' ) ax1
. legend ( loc
= 'best' ) ax2
= fig
. add_subplot ( 412 ) ax2
. plot ( trend
, label
= 'Trend' ) ax2
. legend ( loc
= 'best' ) ax3
= fig
. add_subplot ( 413 ) ax3
. plot ( seasonal
, label
= 'Seasonality' ) ax3
. legend ( loc
= 'best' ) ax4
= fig
. add_subplot ( 414 ) ax4
. plot ( residual
, label
= 'Residuals' ) ax4
. legend ( loc
= 'best' ) fig
. tight_layout ( ) plt
. show ( block
= False
) return trend
, seasonal
, residual
2.測試函數
我們先合成一個:趨勢 + 周期性波動 + 高斯擾動的函數,測試我們的compose函數能否成功分解。 測試函數如下:
import matplotlib
. pyplot as plt
import numpy as np
import math
from math import
*
import pandas as pd
from decompose import
* plt
. rcParams
[ 'font.sans-serif' ] = [ 'SimHei' ] #解決中文亂碼
plt
. rcParams
[ 'axes.unicode_minus' ] = Falsextime
= np
. arange ( 1 , 1000 , 1 )
xnorm
= xtime
/ len ( xtime
) queshi
= 2 * xnorm
+ 1
fig1
= plt
. figure ( )
ax1
= fig1
. add_subplot ( 412 )
ax1
. plot ( xtime
, queshi
, label
= '趨勢' )
ax1
. legend ( loc
= 'best' ) zouqi
= [ sin ( x
* 20 * math
. pi
) for x in xnorm
]
ax2
= fig1
. add_subplot ( 413 )
ax2
. plot ( zouqi
, label
= '周期' )
ax2
. legend ( loc
= 'best' ) noize
= 0.02 * np
. random
. normal ( size
= xtime
. size
)
ax3
= fig1
. add_subplot ( 414 )
ax3
. plot ( noize
, label
= '噪聲' )
ax3
. legend ( loc
= 'best' ) signal
= queshi
+ zouqi
+ noize
ax4
= fig1
. add_subplot ( 411 )
ax4
. plot ( signal
, label
= '合成信號' )
ax4
. legend ( loc
= 'best' ) fig1
. tight_layout ( )
plt
. show ( block
= False
) signal
= pd
. Series ( signal
) . astype ( 'float' )
trend
, seasonal
, residual
= decompose ( signal
, frequence
= 200 )
plt
. show ( )
生成合成函數如下: 分解函數結果如下: 可以看出完全分解還原了我們模擬的信號。 這里需要注意的是:我們提前知道了輸入序列的周期,所以可以完美拆分,如果我們把周期信號填錯了,那么結果又會出現非常大的偏差。 比如本次合成信號的周期是100的整數倍,如果我們輸成了150,那會是怎么樣?
signal
= pd
. Series
( signal
) . astype
( 'float' )
trend
, seasonal
, residual
= decompose
( signal
, frequence
= 150 )
分解結果: 可以看到,此時趨勢不同了,周期函數的權重降低了,本該是噪音的信號,現在變得很強。模型已經開始失真。 如果我們用33這個周期去測試,結果會是怎樣?
trend
, seasonal
, residual
= decompose
( signal
, frequence
= 33 )
結果如下:周期信號基本成了噪音,趨勢信號已經糅合和其他信號,市場擾動也不明顯了。 因此對信號的周期的確定,有至關重要的作用。 下篇我們將探尋如何尋找時間序列的周期。
總結
每個G民都覺得自己是G神,實際上只是布朗運動中的一份子,高斯白噪聲中的一個噪點而已。 沒有誰能預測未來。未來是屬于未來的。
總結
以上是生活随笔 為你收集整理的时间序列分析之:函数分解decompose 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。