[数据分析] 用Prophet快速进行时间序列预测(附Prophet和R代码)

合集下载

时间序列预测算法 python

时间序列预测算法 python

时间序列预测算法 python时间序列预测算法是一种用于预测未来时间点的数值或趋势的方法。

它是一种基于历史数据的统计学方法,可以用于预测股票价格、气象变化、销售趋势等各种时间序列数据。

在Python中,有许多时间序列预测算法可供选择。

其中最常用的是ARIMA模型和Prophet模型。

ARIMA模型是一种基于时间序列的统计模型,它可以用于预测未来时间点的数值。

ARIMA模型的核心思想是将时间序列分解为趋势、季节性和随机性三个部分,然后对每个部分进行建模。

ARIMA模型的优点是可以处理非线性趋势和季节性,但它需要对数据进行平稳化处理,因此需要一定的统计知识。

Prophet模型是Facebook开发的一种时间序列预测算法,它可以自动处理非线性趋势和季节性,并且不需要对数据进行平稳化处理。

Prophet模型的优点是易于使用和调整,适用于各种时间序列数据,但它需要更多的计算资源。

在Python中,可以使用statsmodels库和Prophet库来实现ARIMA模型和Prophet模型。

使用statsmodels库可以进行ARIMA 模型的建模和预测,使用Prophet库可以进行Prophet模型的建模和预测。

下面是一个使用ARIMA模型进行时间序列预测的示例代码:```pythonimport pandas as pdimport numpy as npimport matplotlib.pyplot as pltfrom statsmodels.tsa.arima_model import ARIMA# 读取数据data = pd.read_csv('data.csv', index_col='date', parse_dates=True)# 拆分数据集train_data = data[:'2019']test_data = data['2020':]# 建立ARIMA模型model = ARIMA(train_data, order=(1, 1, 1))model_fit = model.fit(disp=0)# 预测未来数据predictions = model_fit.predict(start='2020-01-01', end='2020-12-31', dynamic=False)# 绘制预测结果plt.plot(test_data, label='A ctual')plt.plot(predictions, label='Predicted')plt.legend()plt.show()```上述代码中,我们首先读取了一个时间序列数据集,并将其拆分为训练集和测试集。

时间序列分析和预测

时间序列分析和预测

时间序列分析和预测时间序列分析和预测是一种统计学方法,用于分析和预测时间序列数据中的模式和趋势。

时间序列数据是按照时间顺序排列的一系列观测值,例如每日销售额、每月失业率、每年的GDP等。

通过对这些数据的分析和预测,我们可以获取有关未来发展的见解,并做出相应的决策。

时间序列分析的目的是寻找数据背后的模式和趋势。

这种方法可以帮助我们理解数据中的周期性、趋势和季节性。

周期性是指数据在一段时间内呈现出重复的模式,如每天的高峰销售时间。

趋势是指数据随着时间的推移呈现出持续增长或持续下降的模式,如GDP的年度增长率。

季节性是指数据在特定的时间段内呈现出规律性的波动,如圣诞节期间的销售额增加。

时间序列分析有多种方法,包括简单移动平均法、指数平滑法和自回归移动平均法(ARIMA)。

这些方法的选择取决于数据的特性和分析的目的。

简单移动平均法适用于平稳序列,即在时间的不同点上具有相似的平均值和方差。

指数平滑法则更适用于非平稳序列,它根据最近的观测值对未来的预测进行加权。

ARIMA模型可以处理既有趋势又有季节性的数据,它结合了自回归(AR)和移动平均(MA)的特性。

时间序列预测是根据历史数据预测未来数据的一种技术。

预测的目的是确定未来趋势或模式,以便做出相应的决策。

预测方法的选择取决于数据的特征和可用的历史数据。

常用的预测方法包括滑动平均法、趋势法和季节性调整法。

滑动平均法根据最近一段时间的数据计算平均值,以预测未来的趋势。

趋势法通过建立趋势方程,将历史数据与时间的函数相匹配,从而预测未来的趋势。

季节性调整法是在观测值中去除季节性成分,然后根据非季节性成分的趋势进行预测。

时间序列分析和预测在许多领域中都有广泛的应用。

在经济学中,它可以用于预测GDP、通货膨胀率和失业率等经济指标。

在金融领域,它可以用于预测股票价格、汇率变动和利率趋势。

在市场研究中,它可以用于预测消费者需求和市场份额。

在环境科学中,它可以用于预测气候变化和自然灾害。

云音乐用户增长预测之Prophet模型

云音乐用户增长预测之Prophet模型

云⾳乐⽤户增长预测之Prophet模型导读:Prophet模型是Meta公司开发并应⽤于Facebook/Twitter等产品的开源时间序列模型,适⽤于MAU/DAU和新增的预测。

在云⾳乐的业务中,此模型不仅能⽤于DAU预测,也能⽤于评估活动和波动分析等多种场景。

本⽂将从Prophet模型的原理出发,基于对云⾳乐实际业务的思考,优化和改良了原模型,提⾼了模型预测准确性,并探究了优化后该模型在多种业务场景中的应⽤。

1关于ProphetProphet模型是Meta公司开发并应⽤于Facebook/Twitter等产品的开源时间序列模型,适⽤于MAU/DAU和新增的预测。

它仅仅使⽤序列的⾃相关性就能产⽣⾼质量的预测结果,不依赖其他的参数,所以使⽤起来⾮常简单便利,需要的计算资源也⾮常⼩。

主要特点包括:•简单易⽤,使⽤者只需懂得简单的时间序列知识就可以使⽤•泛⽤性⾼,能⼴泛应⽤于多个业务场景,也可以根据具体需要微调•解释性好,模型易于解释不仅如此,了解Prophet最重要的不在于使⽤Prophet本⾝,⽽在于通过这⼀综合的预测模型来了解预测时间序列的模式和⽅法,并将业务产⽣的价值和⽇常的波动分离开。

例如,通过将长期趋势、季节因素、节假⽇分离开,Prophet可以帮助我们回答以下⼏个其他模型难以回答的业务问题:•⼀些活动经常与节假⽇重合,例如元旦活动会带来活跃但⽤户在元旦本⾝就会更活跃,如何剥离元旦本⾝的影响来评估元旦活动带来的额外价值?•⼀到9⽉,受开学影响,活跃会下降,但定量来说,开学的影响到底有多⼤?•在解释DAU波动时,今年和去年同期都上升或下降但幅度不同,为什么?原版Prophet模型只需要输⼊时间戳和对应的值就可以输出预测,但准确性偏低;我们通过结合业务特点,改良了Prophet模型,使得模型预测6个⽉DAU准确度从 ~85%提升到了 ~95%2Prophet 的原理⾸先根据Harvey & Peters (1990),Prophet模型将输⼊的时间序列拆分为三个部分其中g(t)表⽰整体趋势,并不包含任何周期性的因素,例如长期增长或者下跌;s(t) 表⽰周期性因素,例如季节性的因素,⼀周内的波动等等;h(t)代表重复的但⾮周期性的因素,例如假期;最后的µt则表⽰测量误差(error term)。

数据分析中的时间序列预测方法介绍

数据分析中的时间序列预测方法介绍

数据分析中的时间序列预测方法介绍引言:在当今信息时代,数据的高速增长和广泛应用,使得时间序列分析成为数据科学中的重要领域。

时间序列预测是指通过分析一系列按时间顺序排列的数据,来预测未来的趋势和模式。

时间序列预测在许多领域都有广泛的应用,例如金融预测、销售预测、天气预测等等。

本文将介绍几种常用的时间序列预测方法。

一、移动平均(Moving Average)移动平均是时间序列预测中最简单和常用的方法之一。

它通过计算时间窗口内数据点的平均值来预测未来的值。

移动平均适用于没有明显趋势和季节性变化的数据。

常见的移动平均方法包括简单移动平均(Simple Moving Average,SMA)、加权移动平均(Weighted Moving Average)和指数移动平均(Exponential Moving Average,EMA)。

其中,简单移动平均对时间窗口内的数据给予相同的权重,加权移动平均对数据点进行加权处理,指数移动平均则给予近期数据更高的权重。

二、指数平滑法(Exponential Smoothing)指数平滑法是一种基于加权平均的时间序列预测方法。

它通过对历史数据进行加权平均来预测未来的值,其中较新的数据点权重更高。

指数平滑法适用于数据具有较强的趋势,但没有明显的季节性变化。

常见的指数平滑法包括简单指数平滑(Simple Exponential Smoothing)和Holt-Winters指数平滑。

三、自回归移动平均模型(ARMA)自回归移动平均模型是一种基于时间序列预测的统计模型。

它将时间序列数据分解为自回归(AR)和移动平均(MA)两部分,并通过对这两部分进行建模来预测未来的值。

AR部分表示当前值与过去一段时间的值之间的关系,而MA部分表示当前值与随机误差之间的关系。

ARMA模型的参数可以通过最小化误差来估计,并可以使用ARMA模型来进行长期和短期的预测。

ARMA模型也可以扩展为自回归滑动平均模型(ARIMA),用于处理具有季节性变化的时间序列。

数据分析知识:数据分析中的时间序列预测方法

数据分析知识:数据分析中的时间序列预测方法

数据分析知识:数据分析中的时间序列预测方法随着社会不断发展和技术的不断进步,数据分析已经成为了一个非常重要的领域。

其中,时间序列预测方法是数据分析中非常重要的分支之一。

时间序列预测方法可以通过分析历史数据的变化趋势,来预测未来一定时间内的数据变化趋势。

在实际应用中,它被广泛运用到股票的走势预测、销量的预测、金融市场的波动预测等领域。

时间序列预测方法主要分为两大类:基于统计学方法的时间序列预测和基于机器学习方法的时间序列预测。

其中,基于统计学方法的时间序列预测主要包括时间序列平稳性检验和时间序列模型等。

基于机器学习方法的时间序列预测主要包括回归模型、决策树、神经网络等。

时间序列平稳性检验是指对给定的时间序列数据进行检验,以判断该序列是否平稳。

平稳性是时间序列预测的基础。

如果一个时间序列是平稳的,那么它的均值、方差、自协方差都不随时间发生变化。

如果一个时间序列是非平稳的,那么在预测时需要经过差分处理将其转换为平稳序列。

常用的平稳性检验方法有ADF检验、KPSS检验、PP 检验等。

时间序列模型是一种基于统计学方法的分析方法,它对时间序列内在的规律进行了描述和分析。

目前常用的时间序列模型包括ARIMA 模型、VAR模型、GARCH模型等。

其中,ARIMA模型是一种基本的时间序列预测模型,它可以描述时间序列的长期趋势、季节趋势和随机波动。

VAR模型是多元时间序列预测模型,它可以对多个时间序列进行预测。

GARCH模型主要用于金融市场波动预测,可以对收益波动进行建模和预测。

除了基于统计学方法的时间序列预测,基于机器学习方法的时间序列预测也广泛应用于实际场景。

回归模型是一种最基础的机器学习模型,在时间序列预测中的应用也非常广泛。

对于线性回归模型,预测结果呈线性关系,可以通过OLS等方法求解。

而对于非线性回归模型,预测结果呈非线性关系,可以通过深度学习等方法求解。

决策树是一种基于树形结构的机器学习模型,它可以模拟人类在解决问题时的思考过程。

如何使用透析表进行数据时间序列分析

如何使用透析表进行数据时间序列分析

如何使用透析表进行数据时间序列分析数据时间序列分析是一种常用的统计方法,用于研究一系列按时间顺序排列的数据。

透析表是一种可视化工具,可以帮助我们更好地理解和分析数据的时间序列特征。

在本文中,我将介绍如何使用透析表进行数据时间序列分析的方法和步骤。

首先,我们需要准备好要分析的数据集。

这个数据集可以是一段时间内的销售数据、股票价格数据、天气数据等。

确保数据集包含时间列和要分析的指标列。

接下来,我们可以使用透析表来对数据时间序列进行分析。

透析表可以帮助我们了解不同时间维度上的指标变化情况,如年、季度、月份、周等。

在Excel中,我们可以使用“数据透视表”功能来创建透析表。

首先,选择要使用的数据集,然后点击Excel菜单栏中的“插入”选项卡。

在“表格”一栏中,选择“透视表”按钮。

这将打开“创建透视表”对话框。

在对话框中,确保选择正确的数据集,并指定透析表放置的位置。

然后,点击“下一步”按钮。

在下一个页面上,您可以选择要在透析表中显示的字段。

拖动时间字段到“行”区域,这将创建一个时间维度。

而将要分析的指标字段拖动到“值”区域。

然后,您可以根据需要对透析表进行进一步的定制。

您可以添加过滤器、更改字段的汇总方式等。

这些都可以通过右键单击透析表并选择相应的选项来实现。

一旦透析表创建完成,您将看到时间维度在行区域上,指标字段在值区域上显示。

您可以通过展开或折叠时间维度中的不同层级来查看数据的粒度。

除了透析表之外,还可以使用透析图来更好地可视化数据的时间序列。

在Excel中,您可以通过选中透析表并点击“插入”选项卡中的“透析图”按钮来创建透析图。

透析图可以显示不同时间维度的指标变化趋势。

您可以选择使用柱状图、线图或其他图表类型来呈现数据。

根据需要,您可以在透析图中添加标题、调整轴标签和其他设置。

使用透析表和透析图进行数据时间序列分析时,还需要注意以下几点:首先,确保数据集的完整性和准确性。

缺失值、异常值等都可能对分析结果产生影响。

时间序列分析和预测

时间序列分析和预测

时间序列分析和预测时间序列分析和预测是一种用来研究时间序列数据并预测未来趋势的统计方法。

时间序列数据是按时间顺序排列的数据集,包括诸如股票价格、气温变化、销售量等。

通过时间序列分析和预测,我们可以从过去的数据中发现模式和趋势,并使用这些信息来预测未来的变化。

时间序列分析和预测有许多应用领域,如经济学、金融学、气象学等。

在经济学中,时间序列分析和预测可以用来预测股票价格、通货膨胀率等。

在金融学中,它可以用来预测利率走势、汇率变化等。

在气象学中,时间序列分析和预测可以用来预测天气变化、气温变化等。

时间序列分析和预测的主要目的是发现和描述数据中存在的趋势、周期性和季节性等模式,并利用这些模式来预测未来的趋势。

为了实现这个目标,我们可以使用不同的时间序列模型,如ARIMA模型、指数平滑模型和回归模型等。

ARIMA模型是一种常用的时间序列模型,它包括自回归(AR)、移动平均(MA)和差分(I)三个部分。

自回归部分描述了当前值与过去值之间的关系,移动平均部分描述了当前值与随机误差之间的关系,差分部分描述了序列的趋势。

我们可以通过ARIMA模型分析数据中的这些关系,并预测未来的趋势。

指数平滑模型是另一种常用的时间序列模型,它利用权重来处理数据中的季节性和趋势。

简单指数平滑模型假设未来值是过去值的加权平均,而加权的系数会随着时间的推移而变化。

为了更好地捕捉季节性和趋势,我们可以使用Holt-Winters指数平滑模型。

回归模型是一种广义线性模型,它可以用来描述因变量和自变量之间的关系。

通过回归模型,我们可以利用时间序列数据和其他相关数据来预测时间序列的未来趋势。

回归模型可以通过最小二乘法来估计模型参数,并用于预测未来值。

除了上述模型之外,我们还可以使用谱分析、波动率建模等方法来进行时间序列分析和预测。

谱分析可以用来识别数据中的周期性成分,波动率建模可以用来预测金融市场的波动性。

总之,时间序列分析和预测是一种重要的统计方法,它可以用来研究时间序列数据中的模式和趋势,并预测未来的变化。

时间序列预测算法——Prophet

时间序列预测算法——Prophet

时间序列预测算法——Prophet下⾯是操作步骤。

参考了:Windows下安装Python版本的prophet:时间序列模型Prophet使⽤详细讲解:以上引⽤为CSDN博主「anshuai_aw1」的原创⽂章,遵循CC 4.0 BY-SA版权协议。

软件版本:PyCharm Community Edition 2021.2.3Python 3.8.12⼯程建⽴:在Windows下安装Python版本的prophetProphet是Facebook开源的⼀款时序预测的⼯具。

切换环境conda activate py38_1028安装pystanpip install pystan安装fbprophetpip install fbprophet -i https:///simple报错,根据错误提⽰安装了⼀些库pip install lunarcalendarpip install holidays新的错误:error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools":根据⽹上blog,安装了⼀些⼯具。

再次尝试弹出了⼀⽚错误,改变安装⽅法。

尝试使⽤conda来解决conda install -c conda-forge fbprophet好像成功了切换环境(Jupyter)安装ipykernelconda install ipykernelpython -m ipykernel install --user --name py38_1028 --display-name "Python (py38_1028)"安装好环境开始调试代码Prophet遵循sklearn库建模的应⽤程序接⼝我们创建了⼀个Prophet类的实例,其中使⽤了“拟合模型”fit和“预测”predict⽅法。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

手把手教你用Prophet快速进行时间序列预测(附Prophet和R代码)对于任何业务而言,基于时间进行分析都是至关重要的。

库存量应该保持在多少?你希望商店的客流量是多少?多少人会乘坐飞机旅游?类似这样待解决的问题都是重要的时间序列问题。

这就是时间序列预测被看作数据科学家必备技能的原因。

从预测天气到预测产品的销售情况,时间序列是数据科学体系的一部分,并且是成为一个数据科学家必须要补充的技能。

如果你是菜鸟,时间序列为你提供了一个很好的途径去实践项目。

你可以非常轻易地应用时间序列,它会带领你进入更大的机器学习世界。

Prophet是Facebook发布的基于可分解(趋势+季节+节假日)模型的开源库。

它让我们可以用简单直观的参数进行高精度的时间序列预测,并且支持自定义季节和节假日的影响。

本文中,我们将介绍Prophet如何产生快速可靠的预测,并通过Python 进行演示。

最终结果将会让你大吃一惊!本文目录1. Prophet有什么创新点?2. Prophet预测模型•趋势o饱和增长o突变点•季节性•节假日及大事件3. Prophet实战(附Python和R代码)•趋势参数•季节和节假日参数•通过Prophet预测客运量Prophet有什么创新点?当预测模型没有按预期运行时,我们希望针对问题来调整模型的参数。

调整参数需要对时间序列的工作原理有全面的理解。

例如automated ARIMA 首先输入的参数是差分的最大阶数,自回归分量和移动平均分量。

普通分析师不知道如何调整顺序来避免这种表现,这是一种很难掌握积累的专业知识。

Prophet包提供了直观易调的参数,即使是对缺乏模型知识的人来说,也可以据此对各种商业问题做出有意义的预测。

Prophet预测模型时间序列模型可分解为三个主要组成部分:趋势,季节性和节假日。

它们按如下公式组合:•g(t):用于拟合时间序列中的分段线性增长或逻辑增长等非周期变化。

•s(t):周期变化(如:每周/每年的季节性)。

•h(t):非规律性的节假日效应(用户造成)。

•e t:误差项用来反映未在模型中体现的异常变动。

Prophet使用时间为回归元,尝试拟合线性和非线性的时间函数项,采取类似霍尔特-温特斯( Holt-Winters )指数平滑的方法,将季节作为额外的成分来建模。

事实上,我们将预测问题类比为拟合曲线模型,而不是精确地去看时间序列中每个时点上的观测值。

1. 趋势趋势是对时间序列中的非周期部分或趋势部分拟合分段线性函数,线性拟合会将特殊点和缺失数据的影响降到最小。

•饱和增长这里要问一个重要问题-我们是否希望目标在整个预测区间内持续增长或下降?通常情况下,一些非线性增长的案例会有最大容量限制,比如以下案例:假设我们要预测未来12个月某app在某地区的下载量,最大下载量总是受该地区智能手机用户总数的限制。

然而,智能手机用户的数量也会随着时间的推移而增加。

基于这样的领域知识,分析师可以定义时间序列预测的容量限制为C(t)。

•突变点另一个要回答的问题是-时间序列是否会因为其他现象发生潜在变化,例如新产品发布、不可预见的灾难等。

这种情况下,增长率是会改变的。

这些突变点是自动选择的,然而有需要的时候也可以手动输入突变点。

在下图中,点线代表给定时间序列中的突变点。

随着突变点数量的增多,拟合变得更灵活。

在研究趋势成分时,分析师要面临两个基本问题:o过拟合o欠拟合参数changepoint_prior_scale可以用来调整趋势的灵活性并解决以上两个问题。

参数的值越大,拟合的时间序列曲线越灵活。

2. 季节性为了拟合并预测季节的效果,Prophet基于傅里叶级数提出了一个灵活的模型。

季节效应S(t)根据以下方程进行估算:P是周期(年度数据的P是365.25,周数据的P是7)。

对季节性建模时,需要在给定N的情况下,估计参数[a1,b1……aN, bN]。

傅里叶阶数N是一个重要的参数,它用来定义模型中是否考虑高频变化。

对时间序列来说,如果分析师认为高频变化的成分只是噪声,没必要在模型中考虑,可以把N设为较低的值。

如果不是,N可以被设置为较高的值并用于提升预测精度。

3. 节假日和大事件节假日和大事件会导致时间序列中出现可预测的波动。

例如,印度的排灯节(Diwali)每年的日期都不同,在此期间人们大多会购买大量新商品。

Prophet允许分析师使用过去和未来事件的自定义列表。

这些大事件前后的日期将会被单独考虑,并且通过拟合附加的参数模拟节假日和事件的效果。

Prophet实战(附Python代码)目前Prophet只适用于Python和R,这两者有同样的功能。

Python中,使用Prophet()函数来定义Prophet预测模型。

让我们看一下最重要的参数。

1. 趋势参数参数描述growth‘linear’或‘logistic’用来规定线性或逻辑曲线趋势changepoints包括潜在突变点的日期列表(不指明则默认为自动识别)n_changepoints若不指定突变点,则需要提供自动识别的突变点数量changepoint_prior_scale设定自动突变点选择的灵活性2. 季节&假日参数参数描述yearly_seasonality周期为年的季节性weekly_seasonality周期为周的季节性daily_seasonality周期为日的季节性holidays内置的节假日名称和日期seasonality_prior_scale改变季节模型的强度holiday_prior_scale改变假日模型的强度yearly_seasonality、weekly_seasonality和daily_seasonality取值为True或False,没有上一节中讨论的傅里叶项。

若值为True,默认取傅里叶项为10。

Prior scales用来定义拟合过程中季节或节假日的权重程度。

3. 通过Prophet预测客运交通现在我们已经了解了这个神奇工具的细节,接下来让我们通过实际的数据集来看看它的潜力。

这里我在Python中运用Prophet来解决下面链接(DATAHACK平台)中的实际问题。

DATAHACK平台:https:///contest/practice-problem-time-series-2/该数据集是一个单变量的时间序列,即某新型公共交通服务的每小时客运量。

基于给定的过去25个月的历史交通流量数据,我们可以尝试预测未来七个月的交通情况。

基本的探索性数据分析(EDA)可以通过以下课程获取:课程链接:https:///courses/course-v1:AnalyticsVidhya+TS_101+TS_term1/aboutPython实现如下:导入所需要的包并读入数据集#Importing datasetsimport pandas as pdimport numpy as npfrom fbprophet import Prophet#Read train and testtrain = pd.read_csv('Train_SU63ISt.csv')test = pd.read_csv('Test_0qrQsBZ.csv')#Convert to datetime formattrain['Datetime'] = pd.to_datetime(train.Datetime,format='%d-%m-%Y %H:%M')test['Datetime'] = pd.to_datetime(test.Datetime,format='%d-%m-%Y %H:%M')train['hour'] = train.Datetime.dt.hour我们可以看到时间序列中有很多噪声。

我们可以对其进行重采样并汇总,得到一个噪声更少的新序列,进而更易建模。

# Calculate average hourly fractionhourly_frac = train.groupby(['hour']).mean()/np.sum(train.groupby(['hour']).mean()) hourly_frac.drop(['ID'], axis = 1, inplace = True)hourly_frac.columns = ['fraction']# convert to time series from dataframetrain.index = train.Datetimetrain.drop(['ID','hour','Datetime'], axis = 1, inplace = True)daily_train = train.resample('D').sum()Prophet要求时间序列中的变量名为:y -> 目标(Target)ds -> 时间(Datetime)因此,下一步是基于上述规范来转换数据文件:daily_train['ds'] = daily_train.indexdaily_train['y'] = daily_train.Countdaily_train.drop(['Count'],axis = 1, inplace = True)拟合Prophet模型:m = Prophet(yearly_seasonality = True, seasonality_prior_scale=0.1) m.fit(daily_train)future = m.make_future_dataframe(periods=213)forecast = m.predict(future)我们可以通过以下命令来查看各个成分:m.plot_components(forecast)将0到23作为节点均等划分每小时,接下来我们可以把每日预测转化为每小时预测。

基于每日数据的预测如下。

# Extract hour, day, month and year from both dataframes to mergefor df in [test, forecast]:df['hour'] = df.Datetime.dt.hourdf['day'] = df.Datetime.dt.daydf['month'] = df.Datetime.dt.monthdf['year'] = df.Datetime.dt.year# Merge forecasts with given IDstest = pd.merge(test,forecast, on=['day','month','year'], how='left')cols = ['ID','hour','yhat']test_new = test[cols]# Merging hourly average fraction to the test datatest_new = pd.merge(test_new, hourly_frac, left_on = ['hour'], right_index=True, how = 'left')# Convert daily aggregate to hourly traffictest_new['Count'] = test_new['yhat'] * test_new['fraction']test_new.drop(['yhat','fraction','hour'],axis = 1, inplace = True)test_new.to_csv('prophet_sub.csv',index = False)我在公共积分榜上得到了206分,并得到了一个稳定的模型。

相关文档
最新文档