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

时间序列模型验证集特定格式滞后项生成实现求助

解决方案:生成验证集时间序列滞后项

问题分析

你需要为验证集生成特定格式的滞后项:首行使用训练集末尾的真实值(按最新到最旧对应lag_q1到lag_qn),后续每行向左空出一列,保留可由真实值推导的部分,空列用于后续填充预测值。之前的代码仅处理了首行,未覆盖后续行的填充逻辑。

实现代码

import pandas as pd

# 假设n是你的滞后项数量(示例中n=5)
n = 5

# 提取训练集末尾n个quantity值,反转顺序让最新值排在最前
train_last_vals = df_train['quantity'].tail(n).values[::-1]

# 构建验证集滞后项数据
val_lag_rows = []
# 这里假设验证集行数等于滞后项数量,可替换为实际验证集行数
for row_num in range(len(train_last_vals)):
    current_row = []
    for col_num in range(n):
        # 列索引 >= 行索引时,填充对应真实值,否则留空
        if col_num >= row_num:
            current_row.append(train_last_vals[col_num - row_num])
        else:
            current_row.append('')  # 若需要用NaN填充,替换为pd.NA或np.nan
    val_lag_rows.append(current_row)

# 转换为DataFrame并设置列名
lag_columns = [f'lag_q{i+1}' for i in range(n)]
df_val = pd.DataFrame(val_lag_rows, columns=lag_columns)

代码说明

  1. 提取并反转训练集末尾值:df_train['quantity'].tail(n).values[::-1] 获取训练集最后n个quantity,反转后让最新的数值(训练集最后一行)对应首行的lag_q1,以此类推。
  2. 逐行构建滞后项:通过双重循环,对每一行row_num,仅填充列索引col_num >= row_num的位置,确保每行向左空出对应数量的列,符合你需要的格式。
  3. 生成验证集DataFrame:将构建好的行数据转换为DataFrame,设置对应的滞后列名。

适配分组场景

如果你的数据是按['strain','sex','genotype']分组处理的(如训练集代码所示),只需在提取训练集末尾值时加入分组逻辑:

# 按分组提取每个组的最后n个quantity值
grouped_train = df_train.groupby(['strain','sex','genotype'], dropna=False)['quantity']
train_group_lags = grouped_train.tail(n)

# 后续针对每个组生成对应的验证集滞后项,逻辑与上述一致,需循环处理每个组
for (strain, sex, genotype), group_vals in train_group_lags.groupby(level=[0,1,2]):
    # 复用前面的行构建逻辑生成当前组的验证集滞后项
    group_last_vals = group_vals.values[::-1]
    # ... 后续代码同基础版

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 07:15:52