求助:使用timetk包step_fourier函数时,time_series_split拆分后出现NaN
解决timetk::step_fourier在拆分面板时间序列后生成NaN的问题
问题原因
你的数据属于面板时间序列(每个symbol对应一条独立的时间序列),但未通过分组限制step_fourier的计算范围,直接对整个训练集执行傅里叶特征提取时,函数无法正确处理多组时间序列混合的情况,进而生成NaN值;完整数据集未触发问题仅为巧合,并非正确的处理方式。
解决方案
在Recipe中加入step_group_by(symbol),让step_fourier在每个股票分组内独立计算傅里叶特征,后续可根据需求用step_ungroup()取消分组。
修改后的代码
library(recipes) library(tidyverse) library(tidyquant) library(timetk) dados <- FANG %>% select(symbol, date, volume) splits <- dados %>% time_series_split( assess = "1 months", cumulative = TRUE ) # 按分组处理傅里叶特征的Recipe rec_obj <- recipe(volume ~ ., data = training(splits)) %>% step_group_by(symbol) %>% # 限制后续步骤在每个symbol分组内执行 step_fourier(date, period = 365, K = 1) %>% step_ungroup() # 取消分组(可选,适配多数建模流程) # 验证输出 rec_obj %>% prep() %>% juice() %>% glimpse()
说明
step_group_by()会将后续的特征工程步骤(此处为傅里叶特征计算)限定在每个symbol的子时间序列中,确保每个股票的时间周期特征是基于自身的时间轴计算的,彻底解决面板数据混合计算导致的NaN问题。
内容的提问来源于stack exchange,提问作者Mairon Chaves
相关产品推荐
相关产品推荐

