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

含间隙的股票时间序列数据在PyCaret中的建模方案咨询

带日期间隙的股票时间序列建模方案

一、PyCaret时间序列模块的适配方法

PyCaret时序模块默认要求序列为规则频率且无间隙,但股票交易日属于仅工作日的不规则频率,可通过以下两种方式适配:

1. 直接使用不规则频率序列

PyCaret支持标记不规则频率的时序数据,只需初始化时设置freq=None,同时确保日期列已排序:

from pycaret.time_series import TSForecastingExperiment

# 确保数据按日期排序
ps0pyc = ps0pyc.sort_values('Date').reset_index(drop=True)

# 初始化实验,指定不规则频率
exp = TSForecastingExperiment()
exp.setup(data=ps0pyc, target='PORTVAL', index='Date', freq=None)

此方法无需填充缺失值,适配XGBoost、LightGBM等天然支持不规则时序的模型。

2. 转换为工作日规则序列

若需使用ARIMA、Prophet这类依赖规则频率的模型,可将数据转换为B(工作日)频率,自动跳过周末/节假日,再通过填充处理非交易日的缺失:

# 将日期设为索引,按工作日频率对齐
ps0pyc = ps0pyc.set_index('Date').asfreq('B')

# 初始化实验,用迭代填充处理缺失值
exp = TSForecastingExperiment()
exp.setup(data=ps0pyc, target='PORTVAL', imputation_type='iterative')

二、替代建模方案

1. 使用支持不规则时序的工具直接建模

  • XGBoost/LightGBM:提取日期特征(年、月、星期几、是否月初/月末等),将时序问题转化为监督回归任务训练模型。
  • Prophet:天然适配带间隙的时序,直接传入原始日期和目标值即可:
    from prophet import Prophet
    
    # 转换为Prophet要求的列名:ds(日期)、y(目标值)
    df_prophet = ps0pyc.rename(columns={'Date':'ds', 'PORTVAL':'y'})
    model = Prophet()
    model.fit(df_prophet)
    # 生成未来30个工作日的预测数据
    future = model.make_future_dataframe(periods=30, freq='B')
    forecast = model.predict(future)
    

2. 降采样为低频率规则序列

若无需日度预测,可将数据降采样为周度、月度或季度数据,自然消除间隙:

# 降采样为月度数据,取每月最后一个交易日的数值
ps0_monthly = ps0pyc.set_index('Date').resample('M').last().reset_index()

# 直接用PyCaret建模
exp = TSForecastingExperiment()
exp.setup(data=ps0_monthly, target='PORTVAL', index='Date', freq='M')

3. 手动填充缺失值后使用PyCaret

若必须用连续日度序列,可手动填充非交易日的缺失值:

  • 前向填充(适合股票价格这类连续性数据):
    ps0_filled = ps0pyc.set_index('Date').asfreq('D').ffill().reset_index()
    
  • 线性插值(适合渐变趋势的数据):
    ps0_filled = ps0pyc.set_index('Date').asfreq('D').interpolate(method='linear').reset_index()
    

填充完成后即可正常使用PyCaret时序模块。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 07:05:28