python时间序列分析工具prophet,分析年周期变化和未来趋势预测

prophet是facebook开发的一款开源时间序列分析预测工具。它根据已有序列分析,预测未来一段时间数据变化趋势,并给出年变化趋势,季节因素,节假日因素等。

安装

conda install pystan
conda install fbprophet

这个库需要先安装pystan这个库,再进行安装。

测试

import pandas as pd
import numpy as np
from fbprophet import Prophet
import matplotlib.pyplot as plt
import os

path_file = f'./23003_3_3211.60'
df = path_to_df(path_file,'60')

m = Prophet(yearly_seasonality=True,changepoint_range=1,seasonality_mode='multiplicative',seasonality_prior_scale=365) 
# 训练模型
m.fit(df)
#print(m)
# 构建预测集,预测未来一年的涨势
future = m.make_future_dataframe(periods=365)
#print (future.tail())

# 进行预测
forecast = m.predict(future)
#forecast = m.predict(test)
m.plot(forecast)
plt.savefig('forecast.png',dpi=300)

#print (forecast.tail(10))
#forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail(10)
m.plot_components(forecast,figsize=(8,6))
plt.savefig('plot_components.png',dpi=300)
#m.add_seasonality()
#fig2 = m.plot(forecast)
#print()
fig, axes = plt.subplots(2,1,figsize=(6,8), dpi= 200)
axes[0].plot(forecast['ds'],forecast['yearly']) #lags=50,
axes[1].plot(forecast['ds'],forecast['trend'])
plt.savefig('plot_fig.png',dpi=300)

点是观测数据,实线是预测数据,灰色区域,是置信区间。这个是年变周期是365,预测时间也是未来1年。

这个图是划分趋势性分量,年变分量,周分量。这个年变成分是之前decompose得到的趋势性成分不太一样,原理应该是类似的。

X1diff = df['y'].diff().dropna()

## 检验ARIMA模型的参数d
X1d = pm.arima.ndiffs(df['y'], alpha=0.05, test="kpss", max_d=3)
print("使用KPSS方法对序列X1的参数d取值进行预测,d = ",X1d)

X1diffd = pm.arima.ndiffs(X1diff, alpha=0.05, test="kpss", max_d=3)
print("使用KPSS方法对序列X1一阶差分后的参数d取值进行预测,d = ",X1diffd)

X2d = pm.arima.ndiffs(df['y'], alpha=0.05, test="kpss", max_d=3)
print("使用KPSS方法对序列X2的参数d取值进行预测,d = ",X2d)

X1d = pm.arima.nsdiffs(df['y'], 365, max_D=2)
print("对序列X1的季节阶数D取值进行预测,D = ",X1d)

X1diffd = pm.arima.nsdiffs(X1diff, 12, max_D=2)
print("序列X1一阶差分后的季节阶数D取值进行预测,D = ",X1diffd)
X1decomp = pm.arima.decompose(df["y"].values,"multiplicative", m=365)
## 可视化出分解的结果
ax = pm.utils.decomposed_plot(X1decomp,figure_kwargs = {"figsize": (10, 6)},
show=False)
ax[0].set_title("乘法模型分解结果")
plt.show()
## 使用加法模型分解结果(通常适用于平稳趋势的序列)
X1decomp = pm.arima.decompose(X1diff.values,"additive", m=365)
## 可视化出分解的结果
ax = pm.utils.decomposed_plot(X1decomp,figure_kwargs = {"figsize": (10, 6)},
show=False)
ax[0].set_title("加法模型分解结果")
plt.show()
 

decompose分解结果

一阶差分后decompose分解结果

展开阅读全文

页面更新:2024-03-04

标签:序列   趋势   未来   加法   分量   分解   周期   模型   季节   参数   时间   工具   方法

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top