lib/blazer/result.rb in blazer-2.4.2 vs lib/blazer/result.rb in blazer-2.4.3
- old
+ new
@@ -172,10 +172,22 @@
end
def anomaly?(series)
series = series.reject { |v| v[0].nil? }.sort_by { |v| v[0] }
- if Blazer.anomaly_checks == "trend"
+ case Blazer.anomaly_checks
+ when "prophet"
+ df = Rover::DataFrame.new(series[0..-2].map { |v| {"ds" => v[0], "y" => v[1]} })
+ m = Prophet.new(interval_width: 0.99)
+ m.logger.level = ::Logger::FATAL # no logging
+ m.fit(df)
+ future = Rover::DataFrame.new(series[-1..-1].map { |v| {"ds" => v[0]} })
+ forecast = m.predict(future).to_a[0]
+ lower = forecast["yhat_lower"]
+ upper = forecast["yhat_upper"]
+ value = series.last[1]
+ value < lower || value > upper
+ when "trend"
anomalies = Trend.anomalies(Hash[series])
anomalies.include?(series.last[0])
else
csv_str =
CSV.generate do |csv|