You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将ARIMA模型应用于小时级时间序列实现交通流量预测?

小时级交通流量预测的ARIMA(SARIMA)实现指南

针对小时级交通流量时间序列的ARIMA应用,核心难点在于处理时间序列连续性、季节性周期以及平稳性校验,以下是分步解决流程:

一、数据预处理(解决小时数据常见报错的关键)

小时数据的格式、连续性问题是多数报错的根源,先完成以下操作:

  • 解析时间列并设置为索引
    确保Datetime被正确识别为时间类型,且作为时间序列的索引:
    import pandas as pd
    # 读取数据(替换为你的文件路径)
    df = pd.read_csv("traffic_data.csv")
    # 按日/月/年 小时:分钟格式解析时间
    df['Datetime'] = pd.to_datetime(df['Datetime'], format='%d/%m/%y %H:%M')
    # 设置时间索引
    df.set_index('Datetime', inplace=True)
    
  • 补全连续时间序列
    ARIMA要求序列无时间断点,需按小时重采样并填充缺失值:
    # 按小时频率重采样,确保时间连续
    df = df.resample('H').asfreq()
    # 用线性插值填充缺失的流量值(可根据业务调整为均值/中位数填充)
    df['Traffic'] = df['Traffic'].interpolate(method='linear')
    

二、平稳性校验与差分处理

ARIMA仅适用于平稳序列,小时数据通常存在24小时日周期,需结合普通差分和季节性差分:

  • 用ADF检验判断平稳性:
    from statsmodels.tsa.stattools import adfuller
    adf_result = adfuller(df['Traffic'])
    print(f"ADF统计量: {adf_result[0]}, p值: {adf_result[1]}")
    # p值>0.05则序列不平稳,需要差分
    
  • 差分操作:
    # 1阶普通差分(消除趋势)
    df['diff_1'] = df['Traffic'].diff().dropna()
    # 24阶季节性差分(消除日周期)
    df['diff_seasonal'] = df['Traffic'].diff(24).dropna()
    
    对差分后的序列再次做ADF检验,直到p值<0.05确认平稳。

三、参数确定(优先用SARIMA而非普通ARIMA)

小时数据存在明显的24小时季节性,建议使用SARIMA(季节性ARIMA),参数包含(p,d,q)(非季节性部分)和(P,D,Q,s)(季节性部分,s=24):

  • 自动选参(高效且准确):
    from pmdarima import auto_arima
    # m=24对应小时数据的日周期
    auto_model = auto_arima(df['Traffic'], seasonal=True, m=24, trace=True, suppress_warnings=True)
    print(auto_model.summary())
    
    运行后会输出最优参数组合,比如常见的(1,1,1)(1,1,1,24)。

四、模型训练与预测

  • 拆分训练集与测试集:
    train_size = int(len(df) * 0.8)
    train_df, test_df = df.iloc[:train_size], df.iloc[train_size:]
    
  • 训练SARIMA模型:
    from statsmodels.tsa.statespace.sarimax import SARIMAX
    # 替换为auto_arima给出的参数
    model = SARIMAX(train_df['Traffic'], order=(1,1,1), seasonal_order=(1,1,1,24))
    model_fit = model.fit(disp=False)
    
  • 预测与验证:
    # 预测测试集时段的流量
    predictions = model_fit.predict(start=len(train_df), end=len(train_df)+len(test_df)-1, typ='levels')
    # 可视化对比
    import matplotlib.pyplot as plt
    plt.figure(figsize=(12,6))
    plt.plot(test_df.index, test_df['Traffic'], label='实际流量')
    plt.plot(test_df.index, predictions, label='预测流量', color='red')
    plt.xlabel('时间')
    plt.ylabel('交通流量')
    plt.legend()
    plt.show()
    

五、常见报错排查

  • 时间索引错误:检查时间列是否有重复、格式是否正确,重采样后确认无时间断点
  • 未考虑季节性:普通ARIMA无法捕捉小时数据的24小时周期,必须用SARIMA
  • 数据量不足:至少需要1周(168小时)以上的数据,否则模型无法学习到周期规律
  • 差分不当:差分阶数过高会导致序列信息丢失,过低则无法达到平稳,需结合ADF检验调整

内容的提问来源于stack exchange,提问作者Atanasio Tembe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 17:20:27