withSpikes method

List<TimeSeriesPoint> withSpikes({
  1. required DateTime start,
  2. required DateTime end,
  3. required Duration interval,
  4. double baseValue = 100,
  5. double spikeProbability = 0.05,
  6. double spikeMultiplier = 3,
  7. double noise = 5,
})

Generates data with spikes/anomalies.

Implementation

List<TimeSeriesPoint> withSpikes({
  required DateTime start,
  required DateTime end,
  required Duration interval,
  double baseValue = 100,
  double spikeProbability = 0.05,
  double spikeMultiplier = 3,
  double noise = 5,
}) {
  final points = <TimeSeriesPoint>[];
  var current = start;

  while (!current.isAfter(end)) {
    var value = baseValue + _random.normal(0, noise);

    if (_random.boolean(spikeProbability)) {
      value += _random.uniform(1, spikeMultiplier) *
          (_random.boolean() ? 1 : -1) *
          noise *
          3;
    }

    points.add(TimeSeriesPoint(timestamp: current, value: value));
    current = current.add(interval);
  }

  return points;
}