使用Stats()库进行时间序列分析和预测
发布时间:2024-01-21 00:32:05
StatsModels是一个Python库,用于实现统计模型的估计和推断。它提供了一组强大的功能,可以进行时间序列分析和预测。
首先,需要安装StatsModels库。在命令行中运行以下命令进行安装:
pip install statsmodels
下面将以一个简单的例子来说明如何使用StatsModels进行时间序列分析和预测。假设我们有一个销售数据的时间序列,并且我们想要预测未来几个月的销售额。
import pandas as pd
import numpy as np
import statsmodels.api as sm
# 导入数据
data = pd.read_csv('sales_data.csv')
# 将日期作为索引
data['date'] = pd.to_datetime(data['date'])
data.set_index('date', inplace=True)
# 检查数据的平稳性
# 定义一个函数,用于进行单位根检验(ADF检验)
def adf_test(series):
result = sm.tsa.stattools.adfuller(series)
print('ADF Statistic: %f' % result[0])
print('p-value: %f' % result[1])
print('Critical Values:')
for key, value in result[4].items():
print('\t%s: %.3f' % (key, value))
# 对销售数据进行单位根检验
adf_test(data['sales'])
# 差分数据使其平稳
data_diff = data.diff().dropna()
# 再次进行单位根检验
adf_test(data_diff['sales'])
# 确定ARIMA模型的参数
# 寻找最佳的p值和q值
from statsmodels.tsa.arima_model import ARIMA
import itertools
p = range(0, 3)
q = range(0, 3)
# 使用穷举法寻找最佳的p值和q值
parameters = itertools.product(p, q)
best_aic = np.inf
best_order = None
for param in parameters:
try:
model = ARIMA(data_diff, order=param)
model_fit = model.fit()
if model_fit.aic < best_aic:
best_aic = model_fit.aic
best_order = param
except:
continue
print('Best ARIMA Order:', best_order)
# 拟合ARIMA模型
model = ARIMA(data_diff, order=best_order)
model_fit = model.fit()
# 预测未来几个月的销售额
forecast = model_fit.predict(start=len(data_diff), end=len(data_diff) + 5)
forecast = forecast.cumsum().shift(len(data))
# 绘制原始数据和预测值
import matplotlib.pyplot as plt
plt.figure(figsize=(10, 6))
plt.plot(data['sales'], label='Actual')
plt.plot(forecast, label='Forecast')
plt.title('Sales Forecast')
plt.legend()
plt.show()
上面的代码中,首先导入了必要的库。然后,使用pandas库将数据加载到一个DataFrame中,并将日期列设置为索引。接下来,定义了一个函数adf_test(),用于进行单位根检验。进行单位根检验后,通过对数据进行差分,使其成为一个平稳时间序列。确定了ARIMA模型的参数之后,使用ARIMA()函数拟合了模型,并进行了预测。最后,使用matplotlib库绘制了原始数据和预测结果。
通过这个例子,您可以了解如何使用StatsModels库进行时间序列分析和预测。您可以根据自己的数据和需求做出相应的调整。
