时间序列预测【实现及适用情况】

时间序列预测:某些数据本身与时间存在联系(趋势、周期性),如销售量、股票价格

这个网站相内容很好,推荐:第 7 章 时间序列回归模型 | 预测:方法与实践(第三版) (otexts.com)

一、朴素预测法、简单平均法

  • 直接取前一天的数据/取前面所有天数的平均值
  • 适用于数据随时间基本不变的情况

二、移动平均法、加权移动平均(MA)

  • 如果数据变化较大,过久的数据对于未来预测已经无用了,甚至会因为求平均值而起反作用
  • 只取前面n个点的平均值or前n个点的加权平均(考虑到前n个点对预测点的影响不同,给予近期更大的权重)
  • 对方法一的改善,适用于数据随时间的变化存在一定的趋势

三、指数平滑法(AR)

  • 下期=α*上期的实际值+(1-α)*上期的预测值(0时刻可用平均值代替预测值)
  • α越大对数据变化反应越迅速,α越小,平滑作用越强
  • 是对加权移动平均的进一步改善,将所有数据考虑在内,权重呈指数级下降
  • 一次指数、二次指数、三次指数

四、霍尔特指数平滑法(Holts)

  • 预测具有趋势的数据
  • 季节性:Holt-Winters加法模型、Holt-Winters乘法模型
  • 季节加法性:一个零售商在每个假日季节都会额外卖出100件商品;季节乘法性:一个零售商在假日季节的销售量是平时的两倍
import pandas as pd
from statsmodels.tsa.holtwinters import ExponentialSmoothing

# df = pd.DataFrame({
#     'date': pd.date_range(start='2000-01-01', periods=60, freq='Q'),
#     'Trips': [100, 120, 140, ...]  # 假设的百万次旅行数据
# })

# 创建一个ETS模型,这里我们使用加法趋势和季节性
model_additive = ExponentialSmoothing(
    df['Trips'], trend='add', seasonal='add', seasonal_periods=4
)
fit_additive = model_additive.fit()

# 创建一个ETS模型,这里我们使用乘法趋势和季节性
model_multiplicative = ExponentialSmoothing(
    df['Trips'], trend='mul', seasonal='mul', seasonal_periods=4
)
fit_multiplicative = model_multiplicative.fit()

# 预测未来3年的数据
forecast_additive = fit_additive.forecast(12)  # 假设每年有4个季度,3年共12个季度
forecast_multiplicative = fit_multiplicative.forecast(12)

五、ARIMA模型

  • 数据具有复杂的自相关结构
  • 既可以捕捉到数据的趋势变化,又可以处理突发的变化
  • AR+I+MA
import pandas as pd
from statsmodels.tsa.arima.model import ARIMA
import matplotlib.pyplot as plt

# 假设df是包含时间序列数据的pandas DataFrame,并且已经转换为所需的格式
# 例如,df的索引是日期,列是时间序列数据
df = pd.read_csv('your_time_series_data.csv', index_col='Date', parse_dates=True)

# 检查数据的平稳性
# 这里需要你根据数据的实际情况来决定是否需要差分,以及差分的阶数d
# 例如,如果数据是非平稳的,你可能需要进行一次差分
df_diff = df.diff().dropna()

# 选择ARIMA模型的参数
# p:自回归项的阶数
# d:差分的阶数
# q:滑动平均项的阶数
# 这些参数的选择通常基于对数据的ACF和PACF图的分析
p, d, q = 1, 1, 1  # 举例参数,需要根据实际情况调整

# 创建ARIMA模型实例
model = ARIMA(df['Your_Time_Series_Column'], order=(p, d, q))

# 拟合模型
model_fit = model.fit()


# 进行预测
forecast_steps = 10  # 预测未来的时间步数
forecast = model_fit.forecast(steps=forecast_steps)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值