ML .NET 异常情况检测
场景
商品的价格会随时间发生变化,可以通过ML .NET
的异常情况检测
功能获得价格的拐点
和峰值
,为决策做参考
数据集
数据来自Every Cryptocurrency Daily Market Price
原始数据包含币种symbol、时间date、开盘价open、最高价high、最低价low、收盘价close等多种数据
这里只取Bitcoin在2013年4月28日至2018年11月29日的开盘价格,如图所示
训练
自动化ML尚不支持异常情况检测
,所以这里需要正常的写代码
根据教程:使用 ML.NET 检测产品销售中的异常的步骤,可以很简单的进行coding
峰值检测
关键代码如下
var iidSpikeEstimator = mlContext.Transforms.DetectIidSpike(
outputColumnName: nameof(CommodityPricePrediction.Prediction),
inputColumnName: nameof(CommodityPriceModel.open),
confidence: 95,
pvalueHistoryLength: _docsize/31);
检测峰值的关键方法是DetectIidSpike
有一个输出列outputColumnName
,一个输入列inputColumnName
confidence
和pvalueHistoryLength
参数影响峰值的最终结果
confidence
越低,算法检测到“较小”峰值的可能性就大
pvalueHistoryLength
越低,模型忘记之前的较大峰值的速度就越快,这里因为数据是按天递进的,_docsize为总数据量2042条,pvalueHistoryLength
取每个月,所以以_docsize除以31
详细资料见IidSpikeEstimator 类
更改点检测
关键代码如下
var iidChangePointEstimator = mlContext.Transforms.DetectIidChangePoint(
outputColumnName: nameof(CommodityPricePrediction.Prediction),
inputColumnName: nameof(CommodityPriceModel.open),
confidence: 95,
changeHistoryLength: _docsize/31);
检测峰值的关键方法是DetectIidChangePoint
参数与DetectIidSpike
类似
详细资料见IidChangePointEstimator 类
根据当前训练数据和设置的参数,可以得到以下结果
峰值检测
Alert Score P-Value
0 135.30 0.50
0 134.44 0.19
0 144.00 0.00
0 139.00 0.41
......
1 270.91 0.02 <-- Spike detected 检测到尖峰
0 261.86 0.07
0 263.57 0.06
1 269.31 0.03 <-- Spike detected 检测到尖峰
1 266.50 0.05 <-- Spike detected 检测到尖峰
1 273.65 0.03 <-- Spike detected 检测到尖峰
1 276.50 0.03 <-- Spike detected 检测到尖峰
1 281.45 0.02 <-- Spike detected 检测到尖峰
1 283.63 0.03 <-- Spike detected 检测到尖峰
1 285.18 0.03 <-- Spike detected 检测到尖峰
1 293.70 0.02 <-- Spike detected 检测到尖峰
1 304.32 0.01 <-- Spike detected 检测到尖峰
1 313.94 0.01 <-- Spike detected 检测到尖峰
1 328.51 0.01 <-- Spike detected 检测到尖峰
1 315.01 0.03 <-- Spike detected 检测到尖峰
1 325.94 0.02 <-- Spike detected 检测到尖峰
1 361.87 0.00 <-- Spike detected 检测到尖峰
1 403.66 0.00 <-- Spike detected 检测到尖峰
1 408.08 0.01 <-- Spike detected 检测到尖峰
1 388.05 0.03 <-- Spike detected 检测到尖峰
1 374.27 0.05 <-- Spike detected 检测到尖峰
1 384.28 0.05 <-- Spike detected 检测到尖峰
......
更改点检测
Alert Score P-Value Martingale value
0 135.30 0.50 0.00
0 134.44 0.19 0.00
0 144.00 0.00 0.00
0 139.00 0.41 0.00
0 116.38 0.00 0.00
0 106.25 0.03 0.00
0 98.10 0.06 0.00
......
0 419.41 0.02 93.13
0 417.28 0.03 289.14
0 440.96 0.03 1230.73
0 496.58 0.02 7860.61
0 712.76 0.00 3417895.47
0 577.98 0.02 20823140.67
0 594.32 0.03 104358445.48
0 724.07 0.01 1135503399.54
0 771.70 0.01 11511784560.11
0 795.63 0.02 101146411707.08
1 773.02 0.03 661588163070.51 <-- alert is on, predicted changepoint 警报开启,预测变化点
0 805.73 0.04 4050159523330.93
0 923.85 0.02 38568890913474.40
0 1003.38 0.02 499206959027848.12
0 1042.01 0.02 5059346677869355.00
0 1129.37 0.02 55327355244724032.00
0 1128.92 0.03 407440713595917504.00
0 951.42 0.08 916461290575384448.00
......
示例代码
参考资料
教程:使用 ML.NET 检测产品销售中的异常
IidSpikeEstimator 类
IidChangePointEstimator 类
学习技术最好的文档就是【官方文档】,没有之一。
还有学习资料【Microsoft Learn】、【CSharp Learn】、【My Note】。
如果,你认为阅读这篇博客让你有些收获,不妨点击一下右下角的【推荐】按钮。
如果,你希望更容易地发现我的新博客,不妨点击一下【关注】。