七种时间员外分析
我们经常听到一些热门话题,如加密货币,有一些人甚至会投资一些加密货币。但是投资这样一种剧烈波动的货币是不是安全的,我们如何能够确定现在投资这些货币能在未来赚到足够的收益?事实上,我们虽然不能完全确定,但依然可以根据当前的价格确定一个未来价格的近似值,从而达到更好的投资回报率,时间序列预测就是一种可操作性的方法。
除了加密货币,还有很多重要的领域会用到时间序列预测,例如预测销售额、呼叫中心的呼叫量预测、太阳活动、潮汐现象、股价走势等等。
如果酒店经理希望通过预测未来一年间夜量来对未来酒店库存和定价策略做事先的规划并对未来的酒店收入有一定预期,那么他可以利用过去1年、1月的数据和时间序列预测方法预测未来的间夜量,预测的结果将很好的帮助到他管理酒店。
本文中,我们将学习多种时间序列预测技术并且在多种数据集上比较效果。下面我们讲解这些技术并看看怎样可以提高这些方法的预测效果。
内容概要:
∙问题定义和数据集
∙安装statsmodel包
∙方法1:简单方法预测
∙方法2:简单平均
∙方法3:移动平均
∙方法4:单指数平滑法(Single Exponential smoothing)
∙方法5:霍尔特线性趋势预测(Holt’s linear trend method)
∙方法6:三次指数平滑法(Holt’s Winter asonal method)
∙方法7:整合移动平均自回归模型(ARIMA)
earthquakes(一)问题定义与数据集
我们当前要处理的问题是JetRail(高速铁路服务独角兽)的通勤人数预测。我们拿到2年的数据,从2012年8月到2014年9月,我们需要用这些数据来预测未来7个月的通勤人数。从上面的数据来看,我们拿到的是2年的小时级别的数据,字段有通勤人数,我们需要预估未来通勤人数。
在本文中,我们将把这份数据抽样并聚合到天级别再继续分析。
∙aaf抽取2012年8月至2013年12月的数据,总共14个月
∙构建模型的训练数据和测试数据,前12个月(2012年8月到2013年10月)作为训练数据,后两个月的数据作为预测数据
∙聚合数据到天级别牛津英语3a
(二)、安装statsmodels包
命令行中敲入
pip install statsmodels
(三)、简单方法预测
有时候整个时段的时间序列值是稳定的,如果想预测未来1天的值,我们只需要用1天前的数据作为预估值。这种预估方法的核心假设是未来的数据和最新观测的数据是一样的,下面我们用代码实现:
dd= np.asarray(train.Count)
y_hat = py()
河北省学位英语考试
y_hat['naive'] = dd[len(dd)-1]
plt.figure(figsize=(12,8))
七年级上册英语听力
plt.plot(train.index, train['Count'], label='Train')
plt.plot(test.index,test['Count'], label='Test')love is color blind
plt.plot(y_hat.index,y_hat['naive'], label='Naive Forecast')
plt.legend(loc='best')
plt.title("Naive Forecast")
plt.show()
我们用RMSE在检查下预测的准确率
ics import mean_squared_error
from math import sqrt
rms = sqrt(mean_squared_error(test.Count, y_hat.naive))
print(rms)
RMSE = 43.9164061439
我们从RMSE和图中可以看到,简单预测方法并不适合波动很大的数据集,仅适合比较稳定的数据集。
(三)、简单平均
这种方法的基本假设是可以用历史所有观测值的平均值来预测未来值。
我们讲用所有历史数据计算平均值,作为未来值的预估。当然,这种预测不会很准确
rm = sqrt(mean_squared_error(test.Count, y_hat_avg.avg_forecast))
print(rm)
RMSE = 109.545990803
我们看到,这种方法并没有改进预测效果,我们可以推测这个方法适合每个时间段的均值都相等的时间序列。
端午节 英语
(四)、移动平均
移动平均使用最近的k个观测值预测未来的时间序列,下面是代码实现
y_hat_avg = py()
y_hat_avg['moving_avg_forecast'] = train['Count'].rolling(10).mean().iloc[-1]
plt.figure(figsize=(16,8))
plt.plot(train['Count'], label='Train')
plt.plot(test['Count'], label='Test')
plt.plot(y_hat_avg['moving_avg_forecast'], label='Moving Average Forecast')
plt.legend(loc='best')
plt.show()
going homerms = sqrt(mean_squared_error(test.Count, y_ving_avg_forecast))
print(rms)
RMSE = 46.7284072511
我们看到这种方法比简单的平均法更好。
下车英文
一种比移动平均法更好的方法是加权移动平均。在上面的移动平均法中,我们赋予最近的k个观测值同等权重,但加权移动平均会区别对待各个观测值。加权移动平均需要指定权重,一般是最近的观测值权重更大,不需要设置时间窗口,我们一般给定一个权重数组,数组的和为1,比如[0.40, 0.25, 0.20, 0.15] 意味着给最近的4个观测值分别40%、25%、20%、15%的权重。
(五)、单指数平滑法(Single Exponential smoothing)
当我们理解了上述方法之后,我们就会知道简单的平均和加权移动平均是完全对立的方法。我们需要找到一种方法来综合两种方法:既能够考虑所有数据,同时对不同的点加权。例如一种很明智的做法是对最近的观测点赋更高的权重,对远的观测点赋予更低的权重。按照这个逻辑的预测技术就叫做单指数移动平均法。预测是通过加权移动平均进行的,其中权重根据观测点的远近指数级的下降,最远的观测点权重最小,其中参数 满足
>宽宥