欢迎访问宙启技术站
智能推送

使用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库进行时间序列分析和预测。您可以根据自己的数据和需求做出相应的调整。