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

基于RNN的流程挖掘事件预测:如何按CaseID拆分数组为多批次输入

核心问题说明

你当前的输入形状错误是因为没有将事件日志按CaseID拆分独立流程实例,而是把所有日志行当成了单一连续序列。流程挖掘中每个CaseID对应一个独立的业务流程实例,RNN需要将每个实例作为独立样本输入。

实现步骤

1. 特征预处理

10种Activity属于类别特征,先做标签编码转为数值类型;若需保留Timestamp特征,可额外计算每个事件与同Case下前一事件的时间间隔作为补充特征。

2. 按CaseID提取序列

按CaseID分组后,每组内按Timestamp升序排序,保证流程事件的先后顺序正确,提取每个Case对应的活动序列。

3. 序列长度统一

不同Case的流程步骤数不同,通过填充/截断操作将所有序列统一为固定长度10。

4. 维度调整

将处理好的序列调整为(样本数, 时间步, 特征数)的RNN标准输入格式,即可得到你需要的(2000,10,1)形状。

可运行代码示例

import pandas as pd
import numpy as np
from sklearn.preprocessing import LabelEncoder
from tensorflow.keras.preprocessing.sequence import pad_sequences

# 加载数据集
dataset_train = pd.read_csv('minieventlog.csv')
# 对10种Activity做标签编码,转为0-9的数值
le = LabelEncoder()
dataset_train['Activity_encoded'] = le.fit_transform(dataset_train['Activity'])

# 按CaseID分组提取有序活动序列
sequences = []
for case_id, group in dataset_train.groupby('CaseID'):
    # 按时间戳排序保证流程顺序正确
    group_sorted = group.sort_values('Timestamp')
    seq = group_sorted['Activity_encoded'].values.tolist()
    sequences.append(seq)

# 统一序列长度为10:短序列前补0,长序列截断后半部分
max_seq_len = 10
padded_sequences = pad_sequences(sequences, maxlen=max_seq_len, padding='pre', truncating='post')

# 调整为RNN所需的输入形状 (2000,10,1)
X_train = padded_sequences.reshape(padded_sequences.shape[0], max_seq_len, 1)

# 标签构造示例:若预测下一个活动,可将每个序列的第t+1位作为第t位的标签,按需调整即可

注意事项

  • 填充/截断策略可根据业务调整:若流程前序步骤更重要可选择截断后序、填充后序,反之可调整参数padding='post'、truncating='pre'
  • 若需加入时间戳特征,可将同Case内相邻事件的时间间隔作为第二维特征,调整后输入形状为(2000,10,2)即可
  • 标签Y的构造需匹配预测目标:单步预测下一个活动、多步预测剩余全流程对应的标签构造逻辑不同,可按需调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 16:48:03