Prophet模型的简介以及案例分析(下)

本文涉及的产品
模型训练 PAI-DLC,100CU*H 3个月
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
交互式建模 PAI-DSW,每月250计算时 3个月
简介: Prophet模型的简介以及案例分析(下)

7-2-2、读取数据


# 读取数据
df = pd.read_csv('./energy.csv')
# 更改列名,更改为Prophet指定的列名ds和y
dd = df.rename(columns={'Datetime':'ds','AEP_MW':'y'})
# 注意:Prophet模型对于数据格式有要求,日期字段必须是datetime格式,这里通过pd.to_datetime来进行转换。
dd['ds'] = pd.to_datetime(dd['ds'])
# 数据读取时为小时数据,我们需要将其聚合为天的数据
dd = dd.set_index('ds').resample('D').sum().reset_index()
dd


数据:左侧为日期,右侧为当天对应的用电量。


1e62879a71e5475ab8fb2b502106d077.png

7-2-3、数据预处理以及进行训练集和测试集的划分。


# 划分数据,划分为训练集和验证集,预测的数据设置为未来一个月
df_train = dd[:5025]
df_test = dd[5025:]
df_train.plot('ds', ['y'])


现在的df_train如图所示


7b4770cec970472ba2c6a8bf5074caa9.png


观察数据:导入一个好看的包,画的更漂亮一些


import plotly.express as px
fig = px.line(df_train, x="ds", y="y")
fig.show()

4931886aa5794b1fba8733d44c4a168e.png

7-2-4、实例化Prophet对象,并且通过fit来训练模型

# 数据的变动会受到季节、周、天的影响,存在一定的规律性,因此我们将这三个参数设置为True
m = Prophet(yearly_seasonality=True, weekly_seasonality=True, daily_seasonality=True)
# 采用中国的假期模式,其余参数均保持默认
m.add_country_holidays(country_name="CN")
m.fit(df_train)
# make_future_dataframe: 作用是告诉模型我们要预测多长时间,以及时间的周期是什么。这里设置为30,即预测一个月时间的数据。
future = m.make_future_dataframe(periods=30, freq='D')
# 进行预测,返回预测的结果forecast
forecast = model.predict(future)
# forecast['additive_terms'] = forecast['weekly'] + forecast['yearly'];
# 有:forecast['yhat']  = forecast['trend'] +  forecast['additive_terms'] 。
# 因此:forecast['yhat']  = forecast['trend'] +forecast['weekly'] + forecast['yearly']。
# 如果有节假日因素,那么就会有forecast['yhat']  = forecast['trend'] +forecast['weekly'] + forecast['yearly'] + forecast['holidays']。
forecast

forecast表示:Dataframe中包含了很多预测结果的信息,其中yhat表示预测的结果。


239b7da967844a92bfbdb4a888f7aeb1.png

7-2-5、数据可视化

# 对数据机型可视化操作,黑点表示真实数据,蓝线表示预测结果。蓝色区域表示一定置信程度下的预测上限和下限。
m.plot(forecast)
plt.show()
# 通过plot_componets()可以实现对数据的年、月、周不同时间周期下趋势性的可视化。
m.plot_components(forecast);


数据可视化


0627755a261348dd8474dad7f0259218.png

de44eb2e61ac43049c4ae2cc3d55502c.png



8647b91351ae46e484ad999b0d4e0de9.png


7-2-6、将预测值和真实值做对比


# 测试
# 测试,把ds列,即data_series列设置为索引列
df_test = df_test.set_index('ds')
# 把预测到的数据取出ds列,预测值列yhat,同样把ds列设置为索引列。
forecast = forecast[['ds','yhat']].set_index('ds')
# df_test['y'] = np.exp(df_test['y'])
# forecast['yhat'] = np.exp(forecast['yhat'])
# join:按照索引进行连接,
# dropna:能够找到DataFrame类型数据的空值(缺失值),将空值所在的行/列删除后,将新的DataFrame作为返回值返回。
df_all = forecast.join(df_test).dropna()
df_all.plot()
# 设置左上角小标
plt.legend(['true', 'yhat'])
plt.show()


对比图


83c8c2f4b58e423a8a3fbc9184254a4c.png

总结:相比于股票预测,只预测未来一个月的用电量,可以说很准确了,基本趋势都拟合到了。


7-2-7、模型评估


模型评估:评估模型的准确程度,通过RMSE(均方误差)来度量y与pre之间的差异程度,值越小,说明拟合程度越好

train_len = len(df_train["y"])
rmse = np.sqrt(sum((df_train["y"] - forecast["yhat"].head(train_len)) ** 2) / train_len)
print('RMSE Error in forecasts = {}'.format(round(rmse, 2)))

7-2-7、模型存储


模型存储:以上流程实现了Prophet模型搭建,但考虑到未来我们还要复用通过此历史数据训练的模型,因此我们要将模型存储到本地,并在需要的时候将其导入,使用pickle来保存模型


import pickle
# 模型保存
with open('../models_pickle/automl.pkl', 'wb') as f:
    pickle.dump(model, f, pickle.HIGHEST_PROTOCOL)
# 模型读取
# with open('prophet_model.json', 'r') as md:
#     model = model_from_json(json.load(md))


八、其他注意事项


8-1、节假日设置。

# 有的时候,由于双十一或者一些特殊节假日,我们可以设置某些天数是节假日,并且设置它的前后影响范围,也就是 lower_window 和 upper_window。
playoffs = pd.DataFrame({
  'holiday': 'playoff',
  'ds': pd.to_datetime(['2008-01-13', '2009-01-03', '2010-01-16',
                        '2010-01-24', '2010-02-07', '2011-01-08',
                        '2013-01-12', '2014-01-12', '2014-01-19',
                        '2014-02-02', '2015-01-11', '2016-01-17',
                        '2016-01-24', '2016-02-07']),
  'lower_window': 0,
  'upper_window': 1,
})
superbowls = pd.DataFrame({
  'holiday': 'superbowl',
  'ds': pd.to_datetime(['2010-02-07', '2014-02-02', '2016-02-07']),
  'lower_window': 0,
  'upper_window': 1,
})
holidays = pd.concat((playoffs, superbowls))
m = Prophet(holidays=holidays, holidays_prior_scale=10.0)


参考文章:

初识Prophet模型(一)-- 理论篇.

解读:一种来自Facebook团队的大规模时间序列预测算法(附github链接).

【python量化】将Facebook的Prophet算法用于股票价格预测.

独家 | 手把手教你用Python的Prophet库进行时间序列预测.

Facebook 时间序列预测算法 Prophet 的研究.

官网.

论文.

时间序列模型Prophet使用详细讲解.

怎么训练出一个NB的Prophet模型.

NeuralProphet:基于神经网络的时间序列建模库.

数据异常检测:

「经验」如何30min内排查出指标异动的原因.

「经验」指标异动排查中,3种快速定位异常维度的方法.

「经验」指标异动排查中,如何量化对大盘的贡献程度.


总结


桥洞底下盖小被,小被里边抹眼泪,抹完眼泪无所谓,说什么啊我都对对对。

相关文章
|
3月前
|
机器学习/深度学习 自然语言处理 算法
数据准备指南:10种基础特征工程方法的实战教程
在数据分析和机器学习中,从原始数据中提取有价值的信息至关重要。本文详细介绍了十种基础特征工程技术,包括数据插补、数据分箱、对数变换、数据缩放、One-Hot编码、目标编码、主成分分析(PCA)、特征聚合、TF-IDF 和文本嵌入。每种技术都有具体应用场景和实现示例,帮助读者更好地理解和应用这些方法。通过合理的特征工程,可以显著提升模型的性能和预测能力。
177 3
数据准备指南:10种基础特征工程方法的实战教程
|
6月前
|
数据采集 机器学习/深度学习 数据可视化
关于Python数据分析项目的简要概述:从CSV加载数据,执行数据预处理,进行数据探索,选择线性回归模型进行训练,评估模型性能并优化,最后结果解释与可视化。
【7月更文挑战第5天】这是一个关于Python数据分析项目的简要概述:从CSV加载数据,执行数据预处理(填充缺失值,处理异常值),进行数据探索(可视化和统计分析),选择线性回归模型进行训练,评估模型性能并优化,最后结果解释与可视化。此案例展示了数据科学的典型流程。
103 2
|
8月前
|
机器学习/深度学习 数据采集 数据可视化
利用Python进行历史数据预测:从入门到实践的两个案例分析
利用Python进行历史数据预测:从入门到实践的两个案例分析
403 1
|
机器学习/深度学习 自然语言处理 算法
【机器学习实战项目】10分钟学会Python怎么用Logistic回归进行分类预测(一)
【机器学习实战项目】10分钟学会Python怎么用Logistic回归进行分类预测(一)
393 0
|
机器学习/深度学习 数据采集 算法
Prophet模型的简介以及案例分析(上)
Prophet模型的简介以及案例分析
|
机器学习/深度学习 监控 数据可视化
机器学习测试笔记(7)——可视化
机器学习测试笔记(7)——可视化
101 0
机器学习测试笔记(7)——可视化
|
机器学习/深度学习 人工智能 算法
python机器学习数据建模与分析——决策树详解及可视化案例
你是否玩过二十个问题的游戏,游戏的规则很简单:参与游戏的一方在脑海里想某个事物,其他参与者向他提问题,只允许提20个问题,问题的答案也只能用对或错回答。问问题的人通过推断分解,逐步缩小待猜测事物的范围。决策树的工作原理与20个问题类似,用户输人一系列数据,然后给出游戏的答案。我们经常使用决策树处理分类问题,近来的调查表明决策树也是最经常使用的数据挖掘算法。它之所以如此流行,一个很重要的原因就是使用者基本上不用了解机器学习算法,也不用深究它是如何工作的。
270 0
|
机器学习/深度学习 测试技术 Python
机器学习中分类任务的常用评估指标和python代码实现
机器学习中分类任务的常用评估指标和python代码实现
423 0
机器学习中分类任务的常用评估指标和python代码实现
|
机器学习/深度学习 存储 人工智能
可视化机器学习实验指标和超参数的最佳工具(Neptune)
根据关键指标评估模型是了解模型质量的关键第一步。 跟踪超参数和相应的评估指标很重要,因为超参数的微小变化有时会对模型质量产生很大影响。 因此,了解哪些超参数有影响,哪些不影响评估指标可以带来有价值的见解。 这就是为什么您应该可视化这些参数对您的指标的影响,并了解您在所有 ML 实验中的模型性能如何。 为了帮助您,我收集了一份推荐工具列表,这些工具将为您完成繁琐的工作。 以下是可视化机器学习实验指标和超参数的六种工具。
|
机器学习/深度学习 算法
ML/DL之预测分析类:利用机器学习算法进行预测分析的简介、分析、代码实现之详细攻略
ML/DL之预测分析类:利用机器学习算法进行预测分析的简介、分析、代码实现之详细攻略

热门文章

最新文章