• 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
    confidencepvalueHistoryLength参数影响峰值的最终结果
    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
    ......
    

    示例代码

    CommodityPrice

    参考资料

    教程:使用 ML.NET 检测产品销售中的异常
    IidSpikeEstimator 类
    IidChangePointEstimator 类

  • 相关阅读:
    amq笔记:记一个关于PooledConnectionFactory的问题
    ganglia笔记:rrd数据库
    ganglia笔记:rrds目录
    golang笔记:unsupported driver -> Scan pair: <nil> -> *string
    golang笔记:cookie
    golang笔记:net/smtp
    spring笔记
    Qt坑点汇总
    QT自定义控件系列(二) --- Loading加载动画控件
    Qt自定义控件系列(一) --- 圆形进度条
  • 原文地址:https://www.cnblogs.com/Lulus/p/16046244.html
Copyright © 2020-2023  润新知