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

如何在含缺失值的时间序列上适配pmdarima auto_arima?

处理含缺失值时间序列的auto_arima替代方案(无需插补)

如果你不想使用插补值,又要利用pmdarima的自动参数搜索能力处理含NaN的周粒度时间序列,有以下几个可行方案:

方案1:用pmdarima选参数,statsmodels状态空间ARIMA拟合

pmdarima的auto_arima核心是自动搜索最优ARIMA阶数(包括季节性参数),而statsmodels的状态空间ARIMA支持直接拟合含缺失值的数据。可以拆分两步操作:

  • 第一步:临时清理数据中的NaN(比如删除含缺失值的行),用这部分干净数据跑auto_arima,得到最优的order和seasonal_order参数。
  • 第二步:将原始含NaN的完整时间序列传入statsmodels的ARIMA模型,指定method='statespace',并用第一步得到的参数进行拟合。

示例代码:

import pmdarima as pm
import statsmodels.api as sm

# 假设ts是含NaN的周粒度时间序列
ts_clean = ts.dropna()

# 用干净数据自动搜索最优参数
auto_model = pm.auto_arima(ts_clean, seasonal=True, m=52)  # m=52对应周粒度季节性
best_order = auto_model.order
best_seasonal_order = auto_model.seasonal_order

# 用原始含NaN数据拟合状态空间ARIMA
final_model = sm.tsa.ARIMA(ts, order=best_order, seasonal_order=best_seasonal_order)
results = final_model.fit(method='statespace')

方案2:自定义带缺失值支持的自动参数搜索

如果担心临时清理数据会影响参数选择的准确性,可以基于pmdarima的搜索逻辑,替换内部的拟合函数为statsmodels的状态空间ARIMA,让整个搜索过程直接处理含缺失值的数据。

  • 复用pmdarima的stepwise或random搜索策略,将每一步的模型拟合替换为支持NaN的statsmodels实现,无需预处理数据就能完成参数搜索和模型拟合。

示例思路(简化版):

from pmdarima.arima import StepwiseContext
import statsmodels.api as sm

# 自定义拟合函数,使用statsmodels状态空间ARIMA
def fit_statespace_arima(y, order, seasonal_order):
    model = sm.tsa.ARIMA(y, order=order, seasonal_order=seasonal_order)
    return model.fit(method='statespace')

# 替换pmdarima默认拟合逻辑,直接处理含NaN的数据
with StepwiseContext(fit=fit_statespace_arima):
    auto_model = pm.auto_arima(ts, seasonal=True, m=52)  # ts为含NaN的原始数据

方案3:仅删除连续缺失段,保留单点缺失

如果缺失值是分散的单点(而非连续多周缺失),可以仅删除连续缺失的极端情况,保留单点缺失的数据集来跑auto_arima。单点缺失对ARIMA参数选择的影响极小,后续用statsmodels状态空间ARIMA拟合时仍能处理这些单点缺失。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 00:22:14