使用BigQuery ML的K-means聚类模型来检测异常情况。
数据集信息
date Datetrade_id INTtrade_name STRINGagent_id INTagent_name Stringtotal_item INT
映射 – 一个交易根据日期对应多个代理。
模型通过sum(total_iteam)
使用以下信息进行训练
trade_id trade_nameagent_idagent_name
聚类数量: 4
需要根据日期为每个交易和代理查找异常。模型使用给定的数据集进行训练,并计算distance_from_closest_centroid
。对于每个交易和代理,根据日期计算距离,最远的距离被视为异常。使用这些信息
问题1. 如何确定模型需要使用的聚类数量(例如:使用肘部方法选择最小的聚类数量)。
问题2. 当交易数据每天增加时,如何构建模型?是否可以每天以增量方式构建模型?
回答:
由于问题已更新,我将总结我们的讨论作为答案,以进一步为社区做出贡献。
- 关于你的第一个问题 “如何确定模型需要使用的聚类数量(例如:使用肘部方法选择最小的聚类数量)。”
根据文档,如果你省略num_clusters
选项,BigQuery ML将根据训练数据的总行数选择一个合理的默认值。然而,如果你想选择最优的数量,你可以进行超参数调优,这是为学习算法选择一个(或一组)最优超参数的过程,在你的案例中是BigQuery ML中的K-means。为了确定理想的聚类数量,你需要为不同的num_clusters
值运行CREATE MODEL
查询。然后,找到错误测量值并选择其最小值的点。你可以在训练标签的评估中选择错误测量值,它将显示戴维斯-波尔丁指数和均方距离。
- 你的第二个问题是 “当交易数据每天增加时,如何构建模型?是否可以每天以增量方式构建模型?”
K-means是一种无监督学习算法。因此,你将使用当前数据训练模型。然后将其存储在一个数据集中。这个模型已经训练好,并且可以使用新数据,使用ML.PREDICT。因此,它将使用模型预测新数据属于哪个聚类。
作为额外信息,我想分享这个链接,它解释了如何使用BigQuery ML中的K-means来检测数据异常。
更新:
关于你关于重新训练模型的问题:
问题: “我想重建模型,因为需要在现有模型中更新新的交易信息。在这种情况下,是否可以仅用两个月的数据追加到模型中,还是需要重建整个模型?”
回答: 如果有新的相关数据到达,你必须重新训练整个模型。没有可能仅用两个月的新数据追加到模型中的选项。不过,我必须提到,你可以并且应该使用warm_start
来重新训练你已有的模型,在这里。