## 文章链接

（一）数据预处理

（二）AR模型（自回归模型）

（三）Xgboost模型

（四）LSTM模型

（五）Prophet模型（自回归模型）

## 模型原理

• 可拓展：曲线拟合问题可以很轻易的引入季节和多周期性的影响，可以应用于多种数据类型；
• 数据灵活：与ARIMA模型不同，曲线拟合问题不需要数据等步长，所以不需要对数据进行一些特殊操作（如插值）；
• 速度快：相比较于传统的训练模型，曲线拟合的速度更快，有助于数据科学家进行迭代；
• 变量易解释：模型的大部分变量都有着明确的物理含义，并且拥有一定数据分析经验的人可以很快的将背景知识转换为新的参数引入模型。

## 模型安装

Prophet模型的安装推荐使用conda

`conda install -c conda-forge fbprophet`

## 模型实现

``````def prophet_predict_fb(observed_data, x_name="ds", y_name="y", forecast_cnt=365, frep="D", file_name=""):
"""
function that predict time series with library fbprophet
:param observed_data: time series data(DataFrame format)
(two columns, one is time in YYYY-MM-DD or YYYY-MM-DD HH:MM:SS format and the other is numeric data)
:param x_name: x column name(time data), usually is DATE
:param y_name: y column name(numeric data) e.g. HMD, MAX...
:param forecast_cnt: how many point needed to be predicted
:param frep: the frequency/period of prediction
:param file_name:
:return: None
"""

def check_parameter_validity():
if x_name not in observed_data.keys():
raise KeyError("train_data doesn't have column named %s" % x_name)
if y_name not in observed_data.keys():
raise KeyError("train_data doesn't have column named %s" % y_name)

try:
check_parameter_validity()
except KeyError as e:
print("key error: %s" % str(e))
return None

observed_data = observed_data.rename(columns={x_name: "ds", y_name: "y"})

observed_data["ds"] = pd.to_datetime(observed_data["ds"])
observed_data["y"] = pd.to_numeric(observed_data["y"], downcast='float', errors='coerce')

df2_pro = fbprophet.Prophet(changepoint_prior_scale=0.1)
df2_pro.fit(observed_data)

future_date = df2_pro.make_future_dataframe(periods=forecast_cnt, freq=frep)
df2_forecast = df2_pro.predict(future_date)

# register a datetime converter for matplotlib
from pandas.plotting import register_matplotlib_converters
register_matplotlib_converters()

if file_name:
fig1 = df2_pro.plot(df2_forecast, xlabel=x_name, ylabel=y_name)
fig1.show()
fig1.savefig('./result/%s.png' % file_name)
fig2 = df2_pro.plot_components(df2_forecast)
fig2.show()
fig2.savefig('./result/%s.png' % str(file_name + "1"))

return df2_forecast
``````

### 关键参数

• changepoint_prior_scale：数据趋势的变化频率，值越大，数据的趋势项变化越缓慢。