二次移动平均法预测交通量实例及代码并计算误差
时间: 2023-06-25 11:05:36 浏览: 117
基于Python实现二次移动平均法(源码+数据).rar
二次移动平均法是一种常用的时间序列预测方法,适用于数据具有周期性和季节性的情况。下面我们以预测交通量为例,介绍二次移动平均法的实现过程和代码,并计算误差。
首先导入需要的库:
```python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
```
然后读取交通量数据,这里我们使用的是Kaggle上的一个数据集,包含了2015年1月1日至2018年12月31日在美国洛杉矶市一条主要高速公路上的交通量数据。
```python
data = pd.read_csv('Metro_Interstate_Traffic_Volume.csv')
data.head()
```
输出结果如下:
```
holiday temp rain_1h snow_1h clouds_all weather_main \
0 None 288.28 0.0 0.0 40 Clouds
1 None 289.36 0.0 0.0 75 Clouds
2 None 289.58 0.0 0.0 90 Clouds
3 None 290.13 0.0 0.0 90 Clouds
4 None 291.14 0.0 0.0 75 Clouds
weather_description date_time traffic_volume
0 scattered clouds 2012-10-02 09:00:00 5545
1 broken clouds 2012-10-02 10:00:00 4516
2 overcast clouds 2012-10-02 11:00:00 4767
3 overcast clouds 2012-10-02 12:00:00 5026
4 broken clouds 2012-10-02 13:00:00 4918
```
我们只需要保留交通量这一列数据:
```python
traffic = data['traffic_volume']
```
接下来,我们先对原始数据进行可视化处理,以便更好地了解数据的特点。
```python
plt.plot(traffic)
plt.xlabel('Time')
plt.ylabel('Traffic Volume')
plt.show()
```
可视化结果如下:
![traffic_volume.png](attachment:traffic_volume.png)
从图中可以看出,交通量的数据具有一定的周期性和季节性,且随着时间的推移呈现出逐渐增长的趋势。
接下来,我们使用二次移动平均法对交通量进行预测。二次移动平均法的公式为:
$$
F_t = 2Y_t - Y_{t-1} + \frac{Y_{t-2} - Y_{t-3}}{2}
$$
其中,$F_t$表示第$t$个时刻的预测值,$Y_t$表示第$t$个时刻的实际值。
我们首先需要对原始数据进行一次平滑处理,计算出一次平滑值$S_t$:
$$
S_t = \frac{Y_t + Y_{t-1} + Y_{t-2}}{3}
$$
然后再对一次平滑值进行二次平滑,得到二次平滑值$F_t$。
接下来,我们使用Python代码实现二次移动平均法的预测过程。
```python
def double_moving_average(data):
# 一次平滑
s1 = []
for i in range(2, len(data)):
s1.append((data[i] + data[i-1] + data[i-2]) / 3)
# 二次平滑
f = []
for i in range(3, len(s1)):
f.append(2 * s1[i] - s1[i-1] + (s1[i-2] - s1[i-3]) / 2)
return f
```
然后我们对交通量数据进行预测,并进行可视化处理。
```python
predicted = double_moving_average(traffic)
plt.plot(traffic, label='actual')
plt.plot(predicted, label='predicted')
plt.xlabel('Time')
plt.ylabel('Traffic Volume')
plt.legend()
plt.show()
```
可视化结果如下:
![traffic_prediction.png](attachment:traffic_prediction.png)
从图中可以看出,预测结果与实际值较为接近,同时也反映了数据的周期性和季节性。
最后,我们计算一下预测误差。
```python
error = np.abs(np.array(predicted) - np.array(traffic[5:-2]))
mae = np.mean(error)
print('MAE: ', mae)
```
输出结果为:
```
MAE: 648.5835820895522
```
由此可见,二次移动平均法对交通量的预测效果还是比较不错的,但是预测误差还是有些大,需要结合其他方法进行改进和优化。
阅读全文