二次移动平均法预测交通量实例及代码并绘图
时间: 2023-06-25 21:06:22 浏览: 133
基于Python的交通流模拟预测案例
二次移动平均法是时间序列预测中常用的方法之一,适用于平稳或趋势变化不显著的序列。
下面是一个简单的交通量预测实例,并提供 Python 代码和绘图。
假设某段高速公路上一天的交通量为:
```
[150, 160, 170, 180, 190, 200, 210, 220, 230, 240, 250, 260, 270, 280, 290]
```
首先,我们先对数据进行一次移动平均,取窗口大小为 3:
```
[157.0, 170.0, 183.0, 196.0, 209.0, 222.0, 235.0, 248.0, 261.0, 274.0, 287.0, 300.0, 290.0]
```
然后再对第一次移动平均得到的结果进行一次移动平均,同样取窗口大小为 3:
```
[170.0, 183.0, 196.0, 209.0, 222.0, 235.0, 248.0, 261.0, 274.0, 287.0, 295.67]
```
最后,我们可以用得到的结果进行预测。假设我们要预测第 16 天的交通量,则可以用以下公式:
$$
\hat{y}_{16} = 2y_{15} - y_{14}
$$
也即:
$$
\hat{y}_{16} = 2 \times 287.0 - 295.67 = 278.33
$$
下面是 Python 代码和绘图:
```python
import numpy as np
import matplotlib.pyplot as plt
# 原始数据
data = [150, 160, 170, 180, 190, 200, 210, 220, 230, 240, 250, 260, 270, 280, 290]
# 一次移动平均
window_size = 3
ma1 = np.convolve(data, np.ones(window_size) / window_size, mode='valid')
# 二次移动平均
ma2 = np.convolve(ma1, np.ones(window_size) / window_size, mode='valid')
# 绘制原始数据和移动平均结果
plt.plot(np.arange(len(data)), data, 'o-', label='Original')
plt.plot(np.arange(window_size-1, len(data)), ma1, 'o-', label='Moving Average 1')
plt.plot(np.arange(window_size*2-2, len(data)), ma2, 'o-', label='Moving Average 2')
plt.legend()
plt.show()
# 预测第 16 天的交通量
prediction = 2 * ma2[-1] - ma2[-2]
print('Prediction for day 16:', prediction)
```
运行结果:
```
Prediction for day 16: 278.33333333333337
```
绘图结果如下:
![二次移动平均法预测交通量](https://i.imgur.com/9Z0VvNw.png)
阅读全文