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

如何用Python实现事件日志数据聚类,得到预期的案例分组结果?

事件日志Case ID聚类的Python实现方案

需要将事件日志中同一Case ID的所有事件归为同一聚类,现有K-means代码未得到正确结果,核心问题在于未对Case ID做聚合处理,且未对类别型特征进行编码。以下是可行的实现方案:


一、核心问题分析

现有代码直接对单条事件数据(每行一个事件)执行K-means,但聚类目标是Case级别(每个Case作为一个聚类样本),而非单事件级别。同时原始数据中的Activity、Source是类别型数据,无法直接用于距离计算,必须先转换为数值特征。


二、完整实现步骤与代码

1. 导入依赖库

import pandas as pd
from sklearn.cluster import KMeans, AgglomerativeClustering
from sklearn.feature_extraction.text import CountVectorizer

2. 加载并预处理数据

先将示例数据转为DataFrame,再按Case ID聚合,把每个Case的特征合并为单个聚类样本:

# 加载示例数据
data = pd.DataFrame({
    'Case ID': ['case 1', 'case 1', 'case 2', 'case 2', 'case 3'],
    'Activity': ['register request', 'decide', 'pay', 'check ticket', 'pay'],
    'Source': ['P1', 'A2', 'C5', 'B1', 'C3']
})

# 将每个Case的Activity合并为序列字符串,用词袋模型编码(适合基于活动序列的相似性聚类)
case_features = data.groupby('Case ID')['Activity'].apply(lambda x: ' '.join(x)).reset_index()
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(case_features['Activity']).toarray()

3. K-means聚类实现

# 根据预期设置聚类数,实际可通过肘部法确定
kmeans = KMeans(n_clusters=3, random_state=42)
case_clusters = kmeans.fit_predict(X)

# 构建Case与聚类的映射,合并回原始数据
case_cluster_map = pd.DataFrame({
    'Case ID': case_features['Case ID'],
    'Clusters': [f'cluster {c}' for c in case_clusters]
})
result = pd.merge(data, case_cluster_map, on='Case ID')
print(result)

4. 层次聚类实现

hier_clust = AgglomerativeClustering(n_clusters=3)
case_clusters_hier = hier_clust.fit_predict(X)

case_cluster_map_hier = pd.DataFrame({
    'Case ID': case_features['Case ID'],
    'Clusters': [f'cluster {c}' for c in case_clusters_hier]
})
result_hier = pd.merge(data, case_cluster_map_hier, on='Case ID')
print(result_hier)

三、预期输出

执行后将得到与需求一致的结果:

Case IDActivitySourceClusters
case 1register requestP1cluster 0
case 1decideA2cluster 0
case 2payC5cluster 1
case 2check ticketB1cluster 1
case 3payC3cluster 2

关键说明

  • 必须按Case ID聚合数据:每个Case是一个独立的聚类样本,确保同一Case的所有事件归属同一聚类。
  • 类别特征编码:可根据业务场景选择编码方式,词袋模型适合基于活动序列的相似性聚类,也可使用One-Hot编码后按Case求和(适合基于特征存在性的聚类)。
  • 聚类数选择:示例中根据预期设为3,实际场景可通过肘部法(K-means)或树状图(层次聚类)确定最优聚类数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 03:10:25