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

使用DeterministicProcess时Fourier series列未生成的问题排查

时间序列Fourier项未生成问题排查

问题描述

我正在复习时间序列技能,已完成数据加载、基于DeterministicProcess构建趋势项并通过线性回归完成时间序列去趋势。现在尝试用Fourier级数捕捉季节性:通过CalendarFourier定义freq="M"、order=4的Fourier项,将其加入DeterministicProcess的additional_terms参数中,但调用in_sample()后仅返回常数列,Fourier系列列未生成。该操作在其他数据集上可正常执行,请问问题原因是什么?

相关代码片段

fourier = CalendarFourier(freq="M", order=4)
dp = DeterministicProcess(
        index=y_detrended.index,
        constant=True,
        order=0,
        seasonal=False,
        additional_terms=[fourier],
        drop=True,
    )
dp.in_sample().head()

问题原因与解决方法

  • 核心原因:索引频率与Fourier定义的freq不匹配
    CalendarFourier(freq="M")要求传入的时间索引必须是明确的月度频率(比如pandas的MonthEnd或MonthBegin类型索引)。如果你的y_detrended.index没有设置正确的频率属性,或者实际频率不是月度,CalendarFourier无法生成对应的Fourier项,最终只返回常数项。

  • 验证索引频率
    先检查索引的频率属性,确认是否符合要求:

    print(y_detrended.index.freq)
    

    若输出为None,或不是<MonthEnd>/<MonthBegin>,则说明频率不匹配。

  • 修复步骤

    1. 修正索引频率:
      如果索引是datetime类型但未设置频率,重新指定:
      y_detrended.index = pd.DatetimeIndex(y_detrended.index, freq='M')
      
      如果原数据是其他频率(比如日度),先转换为月度频率(以均值为例):
      y_detrended = y_detrended.resample('M').mean()
      
    2. 重新运行原代码,此时dp.in_sample()会生成8列Fourier项(4组sin/cos对)加上常数项。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 04:06:26