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

tsfresh提取时间序列特征后select_features无相关特征返回

问题根因
  • 你构造的预测目标y和时间序列特征完全无关联。你生成的100条时间序列全部是f(x)=x²叠加10%以内的乘性噪声,所有序列的形态、统计特征高度趋同;但你定义的y是独立生成的随机值10000*(1+N(0,0.1)),和序列本身的属性没有任何相关关系,自然不存在能预测y波动的有效特征。
  • 你提到的“恒定二阶导数”类特征在你的数据集里属于近似常数:所有样本的二阶导数数值几乎完全一致,这类没有样本间区分度的常数特征,会被tsfresh直接标记为无预测价值。
  • 你观察到的低p值是多重比较带来的假阳性:你一共对789个特征做了显著性检验,就算所有特征和y完全独立,按照p<0.05的常规阈值,也会随机产生大概40个左右的假阳性结果。Benjamini-Hochberg过程的作用就是校正这类多重比较偏差,你看到的低p值全部是随机波动导致的,所以无论怎么调整fdr_level参数,都筛不出真正相关的特征。
修复方案

修改数据生成逻辑,让预测目标y和时间序列的真实属性绑定,再运行代码就能得到正常的特征筛选结果。举个可复现的修改示例:

def load_data(n, length, seed=None):
    if seed is not None:
        np.random.seed(seed)

    x = list(range(length))
    df = []
    y = []
    for i in range(n):
        # 每个序列随机取1~3之间的幂次,y值直接等于这个幂次
        power = np.random.uniform(1, 3)
        for x_0 in x:
            value = (x_0 ** power) * (1 + err())
            df.append([i, x_0, value])
        y.append(power)

    df = pd.DataFrame(df, columns=['id', 'time', 'value'])
    y = pd.Series(y)

    return df, y

运行修改后的代码,特征选择环节会保留大量和序列趋势、导数相关的显著特征,不会再返回空的特征集。

内容的提问来源于stack exchange,提问作者Aitor Pérez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 15:09:17