數(shù)據(jù)分析:時間序列分析:時間序列的差分與平滑_第1頁
數(shù)據(jù)分析:時間序列分析:時間序列的差分與平滑_第2頁
數(shù)據(jù)分析:時間序列分析:時間序列的差分與平滑_第3頁
數(shù)據(jù)分析:時間序列分析:時間序列的差分與平滑_第4頁
數(shù)據(jù)分析:時間序列分析:時間序列的差分與平滑_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

數(shù)據(jù)分析:時間序列分析:時間序列的差分與平滑1時間序列分析基礎(chǔ)1.1時間序列數(shù)據(jù)的特性時間序列數(shù)據(jù)是按時間順序收集的數(shù)據(jù)點序列,這些數(shù)據(jù)點通常代表了某個現(xiàn)象隨時間變化的情況。時間序列數(shù)據(jù)具有以下特性:連續(xù)性:數(shù)據(jù)點是連續(xù)收集的,通常以固定的時間間隔(如每小時、每天、每月)記錄。時間依賴性:當前數(shù)據(jù)點可能依賴于過去的數(shù)據(jù)點,這種依賴關(guān)系可以是線性的或非線性的。季節(jié)性:數(shù)據(jù)可能表現(xiàn)出周期性的模式,這些模式與特定的時間周期(如一年中的季節(jié)、一周中的天)相關(guān)。趨勢性:數(shù)據(jù)可能隨時間呈現(xiàn)上升或下降的趨勢。隨機性:數(shù)據(jù)中可能包含隨機波動,這些波動沒有明顯的模式或趨勢。1.2時間序列的組成成分時間序列通常由以下幾種成分組成:趨勢(Trend):長期的上升或下降模式。季節(jié)性(Seasonality):數(shù)據(jù)中重復(fù)出現(xiàn)的周期性模式。周期性(Cyclic):非固定周期的波動,通常與經(jīng)濟周期相關(guān)。隨機性(Random):無法預(yù)測的隨機波動。1.2.1示例:分析時間序列數(shù)據(jù)的組成成分假設(shè)我們有以下時間序列數(shù)據(jù),代表了某商品每月的銷售量:importpandasaspd

importmatplotlib.pyplotasplt

fromstatsmodels.tsa.seasonalimportseasonal_decompose

#創(chuàng)建時間序列數(shù)據(jù)

dates=pd.date_range(start='2020-01-01',periods=36,freq='M')

sales=[100,110,120,115,130,140,150,145,160,170,180,175,190,200,210,205,220,230,240,235,250,260,270,265,280,290,300,295,310,320,330,325,340,350,360,355]

df=pd.DataFrame({'sales':sales},index=dates)

#進行時間序列分解

result=seasonal_decompose(df['sales'],model='additive',period=12)

#繪制分解結(jié)果

result.plot()

plt.show()這段代碼使用了statsmodels庫中的seasonal_decompose函數(shù)來分解時間序列數(shù)據(jù)。結(jié)果將顯示趨勢、季節(jié)性和隨機性成分的圖表,幫助我們理解數(shù)據(jù)的結(jié)構(gòu)。1.3時間序列分析的目標時間序列分析的主要目標包括:描述性分析:理解數(shù)據(jù)的模式和趨勢。預(yù)測:基于歷史數(shù)據(jù)預(yù)測未來的值。周期性檢測:識別數(shù)據(jù)中的周期性模式。異常檢測:識別數(shù)據(jù)中的異常點或事件。1.3.1示例:使用ARIMA模型進行預(yù)測假設(shè)我們想要預(yù)測上述商品銷售數(shù)據(jù)的未來趨勢,可以使用ARIMA模型:fromstatsmodels.tsa.arima.modelimportARIMA

#擬合ARIMA模型

model=ARIMA(df['sales'],order=(1,1,0))

model_fit=model.fit()

#預(yù)測未來12個月的銷售量

forecast=model_fit.forecast(steps=12)

#打印預(yù)測結(jié)果

print(forecast)在這個例子中,我們使用了ARIMA模型來預(yù)測未來12個月的銷售量。order=(1,1,0)表示模型的參數(shù),其中1表示自回歸項的階數(shù),1表示差分的階數(shù),0表示移動平均項的階數(shù)。1.4總結(jié)時間序列分析是理解、預(yù)測和分析隨時間變化數(shù)據(jù)的關(guān)鍵工具。通過識別數(shù)據(jù)的特性、組成成分和應(yīng)用適當?shù)姆治黾夹g(shù),我們可以揭示隱藏的模式,做出更準確的預(yù)測,并進行有效的決策。在實際應(yīng)用中,選擇合適的方法和模型對于成功分析時間序列數(shù)據(jù)至關(guān)重要。2時間序列的差分2.1差分的概念與作用時間序列分析中,差分是一種常用的技術(shù),用于處理非平穩(wěn)時間序列數(shù)據(jù),使其轉(zhuǎn)化為平穩(wěn)序列。差分操作通過計算序列中相鄰觀測值的差值來實現(xiàn),這有助于消除數(shù)據(jù)中的趨勢和季節(jié)性成分,從而簡化模型的構(gòu)建過程。差分可以分為一階差分、二階差分等,具體使用哪一階差分取決于原始序列的特性。2.2階差分與高階差分2.2.1階差分一階差分是最基本的差分形式,它通過計算序列中每個點與其前一個點的差值來實現(xiàn)。例如,對于時間序列YtΔ2.2.2高階差分如果一階差分后序列仍然非平穩(wěn),可以繼續(xù)進行二階差分、三階差分等。二階差分即對一階差分結(jié)果再次進行差分:Δ2.3差分的實例操作假設(shè)我們有一個時間序列數(shù)據(jù),表示某地區(qū)每月的降雨量(單位:毫米)。我們首先加載數(shù)據(jù),然后進行一階差分操作,最后可視化差分前后的數(shù)據(jù),以直觀地觀察差分的效果。2.3.1數(shù)據(jù)樣例daterainfall

2020-0150

2020-0260

2020-0370

2020-0480

2020-0590

...2.3.2Python代碼示例importpandasaspd

importmatplotlib.pyplotasplt

#加載數(shù)據(jù)

data=pd.read_csv('rainfall.csv',parse_dates=['date'],index_col='date')

#進行一階差分

data['diff_rainfall']=data['rainfall'].diff()

#刪除第一個NaN值

data=data.dropna()

#可視化原始數(shù)據(jù)和差分后的數(shù)據(jù)

plt.figure(figsize=(14,7))

plt.subplot(2,1,1)

plt.plot(data['rainfall'],label='OriginalRainfall')

plt.title('OriginalRainfallData')

plt.legend()

plt.subplot(2,1,2)

plt.plot(data['diff_rainfall'],label='1stOrderDifferencedRainfall')

plt.title('1stOrderDifferencedRainfallData')

plt.legend()

plt.tight_layout()

plt.show()2.3.3代碼講解數(shù)據(jù)加載:使用pandas的read_csv函數(shù)加載CSV文件,其中parse_dates參數(shù)用于解析日期,index_col參數(shù)設(shè)置日期列為索引。一階差分:通過diff方法對降雨量列進行一階差分,生成新的列diff_rainfall。處理NaN值:差分操作在序列的第一個點會產(chǎn)生NaN值,因此使用dropna方法刪除這個值。數(shù)據(jù)可視化:使用matplotlib庫繪制原始數(shù)據(jù)和差分后的數(shù)據(jù),通過兩個子圖分別展示,以便于對比觀察。通過上述代碼,我們可以直觀地看到差分操作對時間序列數(shù)據(jù)的影響,幫助我們判斷數(shù)據(jù)是否變得更加平穩(wěn),從而為后續(xù)的時間序列分析提供基礎(chǔ)。3時間序列的平滑3.1平滑的目的與方法時間序列平滑是一種數(shù)據(jù)預(yù)處理技術(shù),旨在減少時間序列數(shù)據(jù)中的隨機波動,揭示潛在的趨勢或周期性模式。平滑方法通過創(chuàng)建數(shù)據(jù)點的加權(quán)平均或使用統(tǒng)計模型來實現(xiàn),從而幫助我們更好地理解數(shù)據(jù)的長期行為。主要的平滑方法包括移動平均平滑和指數(shù)平滑技術(shù)。3.1.1移動平均平滑移動平均平滑是一種簡單直觀的方法,通過計算數(shù)據(jù)點的局部平均值來平滑時間序列。這種方法可以有效去除短期波動,使趨勢更加明顯。3.1.1.1示例代碼假設(shè)我們有一組時間序列數(shù)據(jù),存儲在列表data中,我們可以使用Python的pandas庫來計算移動平均。importpandasaspd

#示例數(shù)據(jù)

data=[10,12,15,18,20,22,25,28,30,32]

#創(chuàng)建DataFrame

df=pd.DataFrame(data,columns=['Value'])

#計算3期移動平均

df['MA_3']=df['Value'].rolling(window=3).mean()

#顯示結(jié)果

print(df)3.1.2指數(shù)平滑技術(shù)指數(shù)平滑技術(shù)是一種更高級的平滑方法,它為每個數(shù)據(jù)點分配一個權(quán)重,權(quán)重隨時間的推移而衰減。這種方法可以更靈活地調(diào)整平滑程度,以適應(yīng)不同的數(shù)據(jù)特性。3.1.2.1示例代碼使用Python的statsmodels庫,我們可以輕松地應(yīng)用指數(shù)平滑技術(shù)。下面的代碼示例展示了如何使用簡單指數(shù)平滑(SES)。importnumpyasnp

importpandasaspd

fromstatsmodels.tsa.holtwintersimportSimpleExpSmoothing

#示例數(shù)據(jù)

data=np.array([10,12,15,18,20,22,25,28,30,32])

#創(chuàng)建DataFrame

df=pd.DataFrame(data,columns=['Value'])

#應(yīng)用簡單指數(shù)平滑

ses=SimpleExpSmoothing(df['Value'])

model=ses.fit(smoothing_level=0.6,optimized=False)

#預(yù)測并添加到DataFrame

df['SES']=model.fittedvalues

#顯示結(jié)果

print(df)3.2移動平均平滑移動平均平滑通過計算數(shù)據(jù)點的局部平均值來減少時間序列的波動。例如,3期移動平均會計算每個數(shù)據(jù)點前后的兩個點的平均值,包括該點本身。3.2.1代碼示例importpandasaspd

#示例數(shù)據(jù)

data=[10,12,15,18,20,22,25,28,30,32]

#創(chuàng)建DataFrame

df=pd.DataFrame(data,columns=['Value'])

#計算3期移動平均

df['MA_3']=df['Value'].rolling(window=3).mean()

#顯示結(jié)果

print(df)3.2.2解釋在上述代碼中,我們首先導入了pandas庫,然后創(chuàng)建了一個包含示例數(shù)據(jù)的DataFrame。使用rolling函數(shù)和mean方法,我們計算了3期移動平均,并將結(jié)果存儲在新的列MA_3中。rolling(window=3)表示我們正在計算每個數(shù)據(jù)點及其前后兩個數(shù)據(jù)點的平均值。3.3指數(shù)平滑技術(shù)指數(shù)平滑技術(shù)為每個數(shù)據(jù)點分配一個權(quán)重,其中較近的數(shù)據(jù)點具有較高的權(quán)重,而較遠的數(shù)據(jù)點具有較低的權(quán)重。這使得指數(shù)平滑能夠更快速地響應(yīng)數(shù)據(jù)的變化,同時仍然保持平滑效果。3.3.1代碼示例importnumpyasnp

importpandasaspd

fromstatsmodels.tsa.holtwintersimportSimpleExpSmoothing

#示例數(shù)據(jù)

data=np.array([10,12,15,18,20,22,25,28,30,32])

#創(chuàng)建DataFrame

df=pd.DataFrame(data,columns=['Value'])

#應(yīng)用簡單指數(shù)平滑

ses=SimpleExpSmoothing(df['Value'])

model=ses.fit(smoothing_level=0.6,optimized=False)

#預(yù)測并添加到DataFrame

df['SES']=model.fittedvalues

#顯示結(jié)果

print(df)3.3.2解釋在指數(shù)平滑的示例中,我們使用了statsmodels庫中的SimpleExpSmoothing類。smoothing_level=0.6參數(shù)控制了平滑的程度,值越接近1,平滑效果越小,模型對新數(shù)據(jù)的響應(yīng)越快。optimized=False表示我們手動設(shè)置了平滑參數(shù),而不是讓模型自動優(yōu)化。通過上述代碼,我們不僅平滑了時間序列,還預(yù)測了每個點的平滑值,并將這些預(yù)測值添加到了DataFrame中,以便于進一步分析和可視化。通過移動平均平滑和指數(shù)平滑技術(shù),我們可以有效地減少時間序列數(shù)據(jù)中的噪聲,揭示潛在的趨勢和模式,為后續(xù)的預(yù)測和分析提供更清晰的數(shù)據(jù)視圖。4差分與平滑的結(jié)合應(yīng)用4.1差分后的平滑處理4.1.1原理時間序列的差分操作通常用于去除序列中的趨勢和季節(jié)性成分,使序列變得平穩(wěn)。然而,單純差分可能會引入額外的波動,特別是在序列中存在隨機噪聲時。平滑處理則可以進一步減少這些波動,提高預(yù)測的準確性。差分和平滑的結(jié)合使用,可以有效地處理非平穩(wěn)時間序列,為后續(xù)的預(yù)測模型提供更穩(wěn)定、更清晰的數(shù)據(jù)。4.1.2內(nèi)容差分操作:對時間序列進行一階或高階差分,以消除趨勢和季節(jié)性。平滑處理:使用移動平均、指數(shù)平滑等方法對差分后的序列進行平滑,減少隨機波動。4.1.3示例假設(shè)我們有一個包含趨勢和季節(jié)性的時間序列數(shù)據(jù),我們將使用Python的pandas和statsmodels庫來展示差分和平滑的結(jié)合應(yīng)用。importpandasaspd

importnumpyasnp

importmatplotlib.pyplotasplt

fromstatsmodels.tsa.stattoolsimportadfuller

fromstatsmodels.tsa.apiimportSimpleExpSmoothing

#創(chuàng)建一個包含趨勢和季節(jié)性的時間序列數(shù)據(jù)

np.random.seed(0)

date_rng=pd.date_range(start='1/1/2018',end='1/1/2023',freq='D')

ts=pd.Series(np.random.randn(len(date_rng))+np.arange(len(date_rng))*0.1+np.sin(np.arange(len(date_rng))*0.1),

index=date_rng)

#差分操作

ts_diff=ts.diff().dropna()

#平滑處理

model=SimpleExpSmoothing(ts_diff)

fit=model.fit(smoothing_level=0.2,optimized=False)

ts_smoothed=fit.fittedvalues

#檢查差分和平滑后的序列是否平穩(wěn)

defcheck_stationarity(series):

result=adfuller(series)

print('ADFStatistic:%f'%result[0])

print('p-value:%f'%result[1])

check_stationarity(ts_diff)

check_stationarity(ts_smoothed)

#可視化原始序列、差分序列和平滑序列

plt.figure(figsize=(14,7))

plt.plot(ts,label='Original')

plt.plot(ts_diff,label='Differenced')

plt.plot(ts_smoothed,label='Smoothed')

plt.legend(loc='best')

plt.show()4.2差分與平滑在預(yù)測模型中的應(yīng)用4.2.1原理在預(yù)測模型中,差分和平滑作為預(yù)處理步驟,可以顯著提高模型的預(yù)測性能。差分使序列平穩(wěn),而平滑則減少噪聲,兩者結(jié)合可以提供更清晰的序列特征,便于模型學習。4.2.2內(nèi)容模型選擇:選擇適合平穩(wěn)序列的預(yù)測模型,如ARIMA、狀態(tài)空間模型等。模型訓練:使用差分和平滑后的序列訓練模型。預(yù)測:基于訓練好的模型進行預(yù)測,并將預(yù)測結(jié)果逆差分和逆平滑,以恢復(fù)到原始序列的尺度。4.2.3示例我們將使用差分和平滑后的序列訓練一個ARIMA模型,并進行預(yù)測。fromstatsmodels.tsa.arima.modelimportARIMA

#訓練ARIMA模型

model_arima=ARIMA(ts_smoothed,order=(1,0,1))

fit_arima=model_arima.fit()

#預(yù)測

forecast=fit_arima.get_forecast(steps=30)

forecast_confidence=forecast.conf_int()

#逆差分和逆平滑

forecast_diff=forecast.predicted_mean.cumsum()

forecast_original=pd.Series(ts.iloc[-1],index=[ts.index[-1]])

forecast_original=forecast_original.append(forecast_diff)

#可視化預(yù)測結(jié)果

plt.figure(figsize=(14,7))

plt.plot(ts,label='Original')

plt.plot(forecast_original,label='Forecast',linestyle='--')

plt.fill_between(forecast_confidence.index,

forecast_confidence.iloc[:,0],

forecast_confidence.iloc[:,1],color='k',alpha=.25)

plt.legend(loc='best')

plt.show()4.3實例分析:使用差分和平滑進行時間序列預(yù)測4.3.1原理通過一個實際案例,我們將展示如何使用差分和平滑技術(shù)來預(yù)測時間序列數(shù)據(jù)。首先,我們對序列進行差分以去除趨勢和季節(jié)性,然后使用平滑技術(shù)減少波動,最后訓練預(yù)測模型并進行預(yù)測。4.3.2內(nèi)容數(shù)據(jù)準備:加載和預(yù)處理時間序列數(shù)據(jù)。差分和平滑:對數(shù)據(jù)進行差分和平滑處理。模型訓練和預(yù)測:使用處理后的數(shù)據(jù)訓練預(yù)測模型,并進行預(yù)測。結(jié)果評估:評估預(yù)測結(jié)果的準確性。4.3.3示例我們將使用一個實際的銷售數(shù)據(jù)集來展示整個過程。#加載數(shù)據(jù)

sales_data=pd.read_csv('sales_data.csv',index_col='Date',parse_dates=True)

#差分操作

sales_diff=sales_data.diff().dropna()

#平滑處理

model_sales=SimpleExpSmoothing(sales_diff)

fit_sales=model_sales.fit(smoothing_level=0.2,optimized=False)

sales_smoothed=fit_sales.fittedvalues

#訓練ARIMA模型

model_arima_sales=ARIMA(sales_smoothed,order=(1,0,1))

fit_arima_sales=model_arima_sales.fit()

#預(yù)測

forecast_sales=fit_arima_sales.get_forecast(steps=30)

forecast_confidence_sales=forecast_sales.conf_int()

#逆差分和逆平滑

forecast_diff_sales=forecast_sales.predicted_mean.cumsum()

forecast_original_sales=pd.Series(sales_data.iloc[-1],index=[sales_data.index[-1]])

forecast_original_sales=forecast_original_sales.append(forecast_diff_sales)

#可視化預(yù)測結(jié)果

plt.figure(figsize=(14,7))

plt.plot(sales_data,label='OriginalSales')

plt.plot(forecast_original_sales,label='ForecastSales',linestyle='--')

plt.fill_between(forecast_confidence_sales.index,

forecast_confidence_sales.iloc[:,0],

forecast_confidence_sales.iloc[:,1],color='k',alpha=.25)

plt.legend(loc='best')

plt.show()4.3.4數(shù)據(jù)樣例假設(shè)sales_data.csv文件包含以下數(shù)據(jù):Date,Sales

2018-01-01,100

2018-01-02,105

2018-01-03,110

...

2022-12-31,150在這個例子中,我們首先加載銷售數(shù)據(jù),然后對其進行差分和平滑處理,接著使用ARIMA模型進行預(yù)測,并最終評估預(yù)測結(jié)果的準確性。通過這個過程,我們可以看到差分和平滑如何幫助我們更好地理解和預(yù)測時間序列數(shù)據(jù)。5差分與平滑的局限性與注意事項5.1差分和平滑的局限性在時間序列分析中,差分和平滑是兩種常用的數(shù)據(jù)預(yù)處理技術(shù),它們各自有其優(yōu)勢和局限性。5.1.1差分的局限性過度差分問題:過度差分可能會導致時間序列的自相關(guān)性喪失,從而影響模型的預(yù)測能力。例如,如果一個序列只需要一階差分就能變得平穩(wěn),進行二階差分可能會引入不必要的復(fù)雜性。信息丟失:差分操作會減少序列的長度,因為每次差分都會丟失序列的第一個觀測值。這在處理較短的時間序列時尤其重要,因為信息的丟失可能會影響模型的訓練和預(yù)測。增加噪聲:差分操作可能會放大序列中的隨機波動,尤其是在序列本身噪聲較大的情況下,這可能會影響后續(xù)分析的準確性。5.1.2平滑的局限性滯后效應(yīng):平滑技術(shù),如移動平均,可能會引入滯后效應(yīng),即平滑后的序列對新信息的反應(yīng)會比原始序列慢。這對于需要實時或快速響應(yīng)的場景可能不適用。信息丟失:與差分類似,平滑操作也可能導致信息丟失,尤其是在使用較大的窗口進行平滑時,序列的細節(jié)和短期波動可能會被抹平。參數(shù)選擇困難:平滑技術(shù)通常需要選擇一個參數(shù),如平滑窗口的大小或平滑系數(shù)。選擇不當可能會導致過度平滑或不足平滑,影響模型的性能。5.2選擇合適差分階數(shù)和平滑參數(shù)的策略5.2.1策略一:自相關(guān)圖和偏自相關(guān)圖通過觀察時間序列的自相關(guān)圖(ACF)和偏自相關(guān)圖(PACF),可以初步判斷是否需要進行差分以及差分的階數(shù)。如果ACF圖顯示緩慢衰減,可能需要進行差分操作;如果PACF圖在某個點突然截斷,這可能指示了差分的階數(shù)。5.2.1.1示例代碼importpandasaspd

importnumpyasnp

fromstatsmodels.graphics.tsaplotsimportplot_acf,plot_pacf

importmatplotlib.pyplotasplt

#創(chuàng)建一個時間序列數(shù)據(jù)

np.random.seed(123)

data=np.random.normal(size=100)

data=pd.Series(data)

#繪制自相關(guān)圖和偏自相關(guān)圖

fig,(ax1,ax2)=plt.subplots(1,2,figsize=(12,4))

plot_acf(data,lags=20,ax=ax1)

plot_pacf(data,lags=20,ax=ax2)

plt.show()5.2.2策略二:平穩(wěn)性檢驗使用平穩(wěn)性檢驗,如AugmentedDickey-Fuller(ADF)檢驗,來確定序列是否平穩(wěn)以及需要進行幾階差分。ADF檢驗的p值小于0.05通常表明序列是平穩(wěn)的。5.2.2.1示例代碼fromstatsmodels.tsa.stattoolsimportadfuller

#對原始序列進行ADF檢驗

result=adfuller(data)

print(f'ADFStatistic:{result[0]}')

print(f'p-value:{result[1]}')

#如果p值大于0.05,進行一階差分

ifresult[1]>0.05:

data_diff=data.diff().dropna()

result_diff=adfuller(dat

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論