Я использую Microsoft.ML
и Microsoft.ML.TimeSeries
для прогнозирования всплесков в наборе чисел. Мне трудно понять результаты, которые я вижу.
Вот мой код:
var counts = new[] { 1, 3, 0, 4, 5, 5, 4, 3, 3, 0, 13, 8, 1, 61, 21, 40, 7, 7, 5, 6, 8, 33, 11, 5, 2, 10, 11, 18,
14, 23, 8, 17, 15, 13, 24, 29, 15, 20, 29, 19, 18, 17, 23, 47, 7, 14, 26, 28, 5, 22, 47, 22, 20, 9, 40, 6, 8,
4, 10, 10, 1, 4, 27, 3, 3, 7, 6, 12, 8, 3, 1, 2, 0, 0, 2, 0, 2, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 2 };
var input = counts.Select(x => new Input { Count = x });
var mlContext = new MLContext();
IDataView data = mlContext.Data.LoadFromEnumerable(input);
var iidSpikeEstimator =
mlContext.Transforms.DetectIidSpike(nameof(Output.Prediction), nameof(Input.Count), 95, counts.Length / 4);
var empty = mlContext.Data.LoadFromEnumerable(new List<Input>());
ITransformer iidSpikeTransform = iidSpikeEstimator.Fit(empty);
IDataView transformedData = iidSpikeTransform.Transform(data);
var predictions = mlContext.Data.CreateEnumerable<Output>(transformedData, false);
foreach (var prediction in predictions)
{
Console.WriteLine($"{prediction.Prediction[0]}\t{prediction.Prediction[1]}\t{prediction.Prediction[2]}");
}
Я использую следующие классы ввода и прогнозирования:
class Input
{
public float Count { get; set; }
}
class Output
{
[VectorType(3)]
public double[] Prediction { get; set; }
}
Результат прогноза выглядит следующим образом:
0 1 0,5
0 3 0,0227500628872564
0 0 0,0800026155568392
0 4 0,0733626073142035
0 5 0,0932462626257468
0 5 0,190871542788827
0 4 0,379365893907011
0 3 0,452249112542357
0 3 0,454337555107054
0 0 0,0965646168807073
0 13 7,23183654849358E-07
0 8 0,162796225508786
0 1 0,26866445055949
0 61 1E-08 <-- why not a spike
0 21 0,195321812351945
0 40 0,0762898593217751
0 7 0,481418456206597
0 7 0,483562672962325
0 5 0,441585392014299
0 6 0,467300428950856
0 8 0,484291998890946
0 33 0,111856212216161
0 11 0,441518762773849
0 5 0,421979379033421
0 2 0,348450809756736
0 10 0,466840217502056
0 11 0,454355922201826
0 18 0,316468096964188
0 14 0,410908187378685
0 23 0,252048457884371
0 8 0,422207338357772
0 17 0,382816778395844
0 15 0,439773264257255
0 13 0,499329093726086
0 24 0,269983517311637
0 29 0,2086753725973
0 15 0,496567280529924
0 20 0,327020081694874
0 29 0,147369517489864
0 19 0,334164937331234
0 18 0,381759336027671
0 17 0,430897832263909
0 23 0,25778090864275
1 47 0,00250415226768458 <-- agree
0 7 0,200797162863148
0 14 0,421036850271146
0 26 0,230152726021095
0 28 0,202263299629237
0 5 0,107362758973973
0 22 0,385731992498547
1 47 0,0251788165486866 <-- agree
0 22 0,440930249298629
0 20 0,489012267971093
0 9 0,198173557199813
0 40 0,100577620435893
0 6 0,140406687351199
0 8 0,193919165630175
0 4 0,136113850848066
0 10 0,273471906906776
0 10 0,293134313053193
0 1 0,134665458845283
0 4 0,209906681773312
0 27 0,285741557145236
0 3 0,211526145085249
0 3 0,230972979939345
0 7 0,326126679501019
0 6 0,322283486761539
0 12 0,480655683498934
0 8 0,376885091334182
0 3 0,268871502200523
0 1 0,243880218497084
0 2 0,286817699304078
0 0 0,245658326315034
0 0 0,266308213133336
0 2 0,317490216757222
0 0 0,270180835461669
0 2 0,357761804545598
0 0 0,299759432885454
0 0 0,263204845258311
0 0 0,280257822339588
0 4 0,486752376815113
0 0 0,29899600168968
0 0 0,31785768842959
0 0 0,336269786978528
0 0 0,33962160591499
0 0 0,35130274405966
0 0 0,318196919735171
0 1 0,431070960185983
0 1 0,44131445885367
0 0 0,354063798338961
0 0 0,372226649193085
0 2 0,300492332964686
Как показано на чертеже, выявлены два всплеска. Похоже, довольно хорошие прогнозы для меня. Что я не понимаю, так это то, почему счет в строке 14 не помечен как всплеск. Счет идет от 0 до 13 до 14. числа. Затем внезапно переходит на 61. При просмотре данных на графике этот скачок определенно выглядит для меня как всплеск.
Может ли кто-нибудь помочь мне понять, что там происходит