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

如何对多索引/嵌套DataFrame使用Sklearn train_test_split适配sktime分类任务

操作步骤如下

你当前生成的df_nested就是sktime多变量时间序列分类任务所需的特征集格式,每一行对应一个独立样本(即单个SKU),每列对应一个时间序列变量(units_ordered、sessions、conversion_rate),每个单元格存储对应SKU对应变量的全量时间序列。你可以按照以下步骤生成训练测试拆分所需的X、y数据集:

  1. 构造标签集y
    你需要先根据分类任务的目标,为每个SKU匹配对应的分类标签,保证标签顺序和df_nested的行顺序(即SKU顺序)一一对应。示例代码如下:
import pandas as pd

# 替换为你自己的SKU-标签映射规则,比如按历史销量划分畅销/平销/滞销
sku_to_label = {
    "A1": "high_sales",
    "A2": "mid_sales",
    # 补充其余SKU的对应标签
}
y = pd.Series(
    [sku_to_label[sku] for sku in df_nested.index],
    index=df_nested.index
)
  1. 拆分训练集和测试集
    sktime提供了适配时间序列特征的拆分工具,你可以根据任务场景选择拆分逻辑:
from sktime.split import StratifiedTrainTestSplitter, temporal_train_test_split

# 场景1:分类目标为对全新SKU做分类,按SKU样本做分层拆分,保证训练/测试集标签分布一致
splitter = StratifiedTrainTestSplitter(test_size=0.3, random_state=42)
X_train, X_test = splitter.split_X_y(df_nested, y)
y_train, y_test = y.loc[X_train.index], y.loc[X_test.index]

# 场景2:分类目标为对同一SKU的未来时间段做分类,按时间维度拆分每个SKU的序列
# 取每个序列前70%的时间步为训练集,后30%为测试集
X_train, X_test = temporal_train_test_split(df_nested, test_size=0.3)
# 此场景下y也需要同步按时间拆分,保证每个时间步的标签和特征对应

注意事项

  • 拆分前可以用sktime.datatypes.check_raise(df_nested, mtype="nested_univ")验证你的嵌套DataFrame格式是否符合sktime的输入要求
  • 多变量分类任务默认要求所有样本的所有变量时间序列长度一致,若存在长度不一致的情况,可以先使用插值、截断等方法做统一处理
  • 如果你的分类标签是按时间步给出的(即每个时间步对应一个标签,而非每个SKU对应一个标签),属于逐点时间序列分类任务,需要调整y的结构为和特征时间步长度匹配的序列格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 13:54:08