数据集 时间序列预测模型案例 python
时间: 2023-11-13 18:51:35 浏览: 84
以下是一个简单的时间序列预测模型案例,使用Python编程实现:
1. 准备数据集
我们将使用一个名为“AirPassengers.csv”的数据集,其中包含1949年1月至1960年12月的每个月的乘客人数。首先,我们需要导入必要的库和数据集:
```python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 导入数据集
df = pd.read_csv('AirPassengers.csv')
```
2. 可视化数据集
我们可以使用Matplotlib库来可视化数据集,以便更好地了解其趋势和季节性:
```python
plt.plot(df['Month'],df['#Passengers'])
plt.xlabel('Year-Month')
plt.ylabel('Number of Passengers')
plt.title('Air Passengers Dataset')
plt.show()
```
3. 创建时间序列模型
我们将使用ARIMA(自回归移动平均)模型来预测未来的乘客人数。ARIMA模型包括三个重要的参数:p,d和q。其中,p是自回归项数,d是差分次数,q是移动平均项数。
首先,我们需要将数据集分为训练集和测试集。我们将使用前80%的数据作为训练集,其余的20%作为测试集:
```python
# 拆分数据集
train_data, test_data = df[0:int(len(df)*0.8)], df[int(len(df)*0.8):]
```
然后,我们需要确定ARIMA模型的参数。我们可以通过绘制自相关性(ACF)和偏自相关性(PACF)图来确定这些参数:
```python
from statsmodels.tsa.stattools import acf, pacf
# 绘制ACF和PACF图
lag_acf = acf(train_data['#Passengers'], nlags=20)
lag_pacf = pacf(train_data['#Passengers'], nlags=20, method='ols')
# 绘制ACF图
plt.subplot(121)
plt.plot(lag_acf)
plt.axhline(y=0, linestyle='--', color='gray')
plt.axhline(y=-1.96/np.sqrt(len(train_data['#Passengers'])), linestyle='--', color='gray')
plt.axhline(y=1.96/np.sqrt(len(train_data['#Passengers'])), linestyle='--', color='gray')
plt.title('Autocorrelation Function')
# 绘制PACF图
plt.subplot(122)
plt.plot(lag_pacf)
plt.axhline(y=0, linestyle='--', color='gray')
plt.axhline(y=-1.96/np.sqrt(len(train_data['#Passengers'])), linestyle='--', color='gray')
plt.axhline(y=1.96/np.sqrt(len(train_data['#Passengers'])), linestyle='--', color='gray')
plt.title('Partial Autocorrelation Function')
plt.tight_layout()
plt.show()
```
根据这些图表,我们可以选择ARIMA模型的参数。在这个例子中,我们将使用p=2,d=1和q=2。然后,我们可以使用ARIMA模型来训练数据集:
```python
from statsmodels.tsa.arima_model import ARIMA
# 创建ARIMA模型并拟合训练集
model = ARIMA(train_data['#Passengers'], order=(2, 1, 2))
model_fit = model.fit(disp=-1)
print(model_fit.summary())
```
4. 预测未来的乘客人数
一旦我们训练了模型,我们就可以使用它来预测未来的乘客人数。在这个例子中,我们将使用模型来预测测试集中的乘客人数,并将其与实际值进行比较:
```python
# 预测测试集中的乘客人数
predictions = model_fit.forecast(steps=len(test_data))[0]
# 可视化预测和实际值
plt.plot(test_data['#Passengers'].values, label='Actual')
plt.plot(predictions, label='Predicted')
plt.xlabel('Time')
plt.ylabel('Number of Passengers')
plt.title('Air Passengers Dataset')
plt.legend()
plt.show()
```
这个简单的时间序列预测模型案例演示了如何使用Python编程语言来预测未来的趋势和季节性。通过使用ARIMA模型,我们可以更好地了解时间序列数据,并使用它来做出更好的商业决策。
阅读全文