Coder Social home page Coder Social logo

egads's Introduction

Build Status

EGADS Java Library

EGADS (Extensible Generic Anomaly Detection System) is an open-source Java package to automatically detect anomalies in large scale time-series data. EGADS is meant to be a library that contains a number of anomaly detection techniques applicable to many use-cases in a single package with the only dependency being Java. EGADS works by first building a time-series model which is used to compute the expected value at time t. Then a number of errors E are computed by comparing the expected value with the actual value at time t. EGADS automatically determines thresholds on E and outputs the most probable anomalies. EGADS library can be used in a wide variety of contexts to detect outliers and change points in time-series that can have a various seasonal, trend and noise components.

How to get started

EGADS was designed as a self contained library that has a collection of time-series and anomaly detection models that are applicable to a wide-range of use cases. To compile the library into a single jar, clone the repo and type the following:

mvn clean compile assembly:single

You may have to set your JAVA_HOME variable to the appropriate JVM. To do this run:

export JAVA_HOME=/usr/lib/jvm/{JVM directory for desired version}

Usage

To run a simple example type:

java -Dlog4j.configurationFile=src/test/resources/log4j2.xml -cp target/egads-*-jar-with-dependencies.jar com.yahoo.egads.Egads src/test/resources/sample_config.ini src/test/resources/sample_input.csv

which produces the following picture (Note that you can enable this UI by setting OUTPUT config key to GUI in sample_config.ini).

gui

One can also specify config parameters on a command line. For example to do anomaly detection using Olympic Scoring as a time-series model and a density based method as an anomaly detection model use the following.

java -Dlog4j.configurationFile=src/test/resources/log4j2.xml -cp target/egads-*-jar-with-dependencies.jar com.yahoo.egads.Egads "MAX_ANOMALY_TIME_AGO:999999999;AGGREGATION:1;OP_TYPE:DETECT_ANOMALY;TS_MODEL:OlympicModel;AD_MODEL:ExtremeLowDensityModel;INPUT:CSV;OUTPUT:STD_OUT;BASE_WINDOWS:168;PERIOD:-1;NUM_WEEKS:3;NUM_TO_DROP:0;DYNAMIC_PARAMETERS:0;TIME_SHIFTS:0" src/test/resources/sample_input.csv

To run anomaly detection using no time-series model with an auto static threshold for anomaly detection, use the following:

java -Dlog4j.configurationFile=src/test/resources/log4j2.xml -cp target/egads-*-jar-with-dependencies.jar com.yahoo.egads.Egads "MAX_ANOMALY_TIME_AGO:999999999;AGGREGATION:1;OP_TYPE:DETECT_ANOMALY;TS_MODEL:NullModel;AD_MODEL:SimpleThresholdModel;SIMPLE_THRESHOLD_TYPE:AdaptiveMaxMinSigmaSensitivity;INPUT:CSV;OUTPUT:STD_OUT;AUTO_SENSITIVITY_ANOMALY_PCNT:0.2;AUTO_SENSITIVITY_SD:2.0" src/test/resources/sample_input.csv

To embed the EGADs library in an application, pull the compiled JAR from JCenter by adding the proper repository. For example in a Maven POM file add:

<repositories>
  <repository>
    <id>jcenter</id>
    <url>https://jcenter.bintray.com/</url>
  </repository>
</repositories>

Then import the dependency, e.g.:

<dependency>
  <groupId>com.yahoo.egads</groupId>
  <artifactId>egads</artifactId>
  <version>0.4.0</version>
</dependency>

Overview

While rapid advances in computing hardware and software have led to powerful applications, still hundreds of software bugs and hardware failures continue to happen in a large cluster compromising user experience and subsequently revenue. Non-stop systems have a strict uptime requirement and continuous monitoring of these systems is critical. From the data analysis point of view, this means non-stop monitoring of large volume of time-series data in order to detect potential faults or anomalies. Due to the large scale of the problem, human monitoring of this data is practically infeasible which leads us to automated anomaly detection. An anomaly, or an outlier, is a data point which is significantly different from the rest of the data. Generally, the data in most applications is created by one or more generating processes that reflect the functionality of a system.

When the underlying generating process behaves in an unusual way, it creates outliers. Fast and efficient identification of these outliers is useful for many applications including: intrusion detection, credit card fraud, sensor events, medical diagnoses, law enforcement and others. Current approaches in automated anomaly detection suffer from a large number of false positives which prohibit the usefulness of these systems in practice. Use-case, or category specific, anomaly detection models may enjoy a low false positive rate for a specific application, but when the characteristics of the time-series change, these techniques perform poorly without proper retraining.

EGADS (Extensible Generic Anomaly Detection System) enables the accurate and scalable detection of time-series anomalies. EGADS separates forecasting and anomaly detection two separate components which allows the person to add her own models into any of the components.

Architecture

The EGADS framework consists of two main components: the time-series modeling module (TMM), the anomaly detection module (ADM). Given a time-series the TMM component models the time-series producing an expected value later consumed by the ADM that computes anomaly scores. EGADS was built as a framework to be easily integrated into an existing monitoring infrastructure. At Yahoo, our internal Yahoo Monitoring Service (YMS) processes millions of data-points every second. Therefore, having a scalable, accurate and automated anomaly detection for YMS is critical. For this reason, EGADS can be compiled into a single light-weight jar and deployed easily at scale.

The TMM and ADM can be found under main/java/com/yahoo/egads/models.

The example of the models supported by TMM and ADM can be found in in the two table below. We expect this collection of models to grow as more contribution is put forward by the community.

List of current TimeSeries Models

models

List of current Anomaly Detection Models

admodels

Configuration

Below are the various configuration parameters supported by EGADS.

# Only show anomalies no older than this.
# If this is set to 0, then only output an anomaly
# if it occurs on the last time-stamp.
MAX_ANOMALY_TIME_AGO  99999

# Denotes how much should the time-series be aggregated by.
# If set to 1 or less, this setting is ignored.
AGGREGATION	1

# OP_TYPE specifies the operation type.
# Options: DETECT_ANOMALY,
#          UPDATE_MODEL,
#	   TRANSFORM_INPUT
OP_TYPE	DETECT_ANOMALY

# TS_MODEL specifies the time-series
# model type.
# Options: AutoForecastModel
#          DoubleExponentialSmoothingModel
#          MovingAverageModel
#          MultipleLinearRegressionModel
#          NaiveForecastingModel
#          OlympicModel
#          PolynomialRegressionModel
#          RegressionModel
#          SimpleExponentialSmoothingModel
#          TripleExponentialSmoothingModel
#          WeightedMovingAverageModel
# 	   SpectralSmoother
# 	   NullModel
TS_MODEL	OlympicModel

# AD_MODEL specifies the anomaly-detection
# model type.
# Options: ExtremeLowDensityModel
#          AdaptiveKernelDensityChangePointDetector
#          KSigmaModel
#          NaiveModel
#          DBScanModel
#          SimpleThresholdModel
AD_MODEL	ExtremeLowDensityModel

# Type of the simple threshold model.
# Options: AdaptiveMaxMinSigmaSensitivity
#          AdaptiveKSigmaSensitivity
# SIMPLE_THRESHOLD_TYPE

# Specifies the input src.
# Options: STDIN
#          CSV
INPUT	CSV

# Specifies the output src.
# Options: STD_OUT,
#          ANOMALY_DB
#          GUI
#          PLOT
OUTPUT  STD_OUT

# THRESHOLD specifies the threshold for the
# anomaly detection model.
# Comment to auto-detect all thresholds.
# Options: mapee,mae,smape,mape,mase.
# THRESHOLD mape#10,mase#15

#####################################
### Olympic Forecast Model Config ###
#####################################

# The possible time-shifts for Olympic Scoring.
TIME_SHIFTS 0,1

# The possible base windows for Olympic Scoring.
BASE_WINDOWS  24,168

# Period specifies the periodicity of the
# time-series (e.g., the difference between successive time-stamps).
# Options: (numeric)
#          0 - auto detect.
#          -1 - disable.
PERIOD	-1


# NUM_WEEKS specifies the number of weeks
# to use in OlympicScoring.
NUM_WEEKS 8

# NUM_TO_DROP specifies the number of
# highest and lowest points to drop.
NUM_TO_DROP 0

# If dynamic parameters is set to 1, then
# EGADS will dynamically vary parameters (NUM_WEEKS)
# to produce the best fit.
DYNAMIC_PARAMETERS  0

###################################################
### ExtremeLowDensityModel & DBScanModel Config ###
###################################################

# Denotes the expected % of anomalies
# in your data.
AUTO_SENSITIVITY_ANOMALY_PCNT	0.01

# Refers to the cluster standard deviation.
AUTO_SENSITIVITY_SD	3.0

############################
### NaiveModel Config ###
############################

# Window size where the spike is to be found.
WINDOW_SIZE	0.1

#######################################################
### AdaptiveKernelDensityChangePointDetector Config ###
#######################################################

# Change point detection parameters
PRE_WINDOW_SIZE	48
POST_WINDOW_SIZE	48
CONFIDENCE	0.8

###############################
### SpectralSmoother Config ###
###############################

# WINDOW_SIZE should be greater than the size of longest important seasonality.
# By default it is set to 192 = 8 * 24 which is worth of 8 days (> 1 week) for hourly time-series.
WINDOW_SIZE 192

# FILTERING_METHOD specifies the filtering method for Spectral Smoothing
# Options:  		GAP_RATIO		(Recommended: FILTERING_PARAM = 0.01)
#			EIGEN_RATIO		(Recommended: FILTERING_PARAM = 0.1)
#			EXPLICIT		(Recommended: FILTERING_PARAM = 10)
#			K_GAP			(Recommended: FILTERING_PARAM = 8)
#			VARIANCE		(Recommended: FILTERING_PARAM = 0.99)
#			SMOOTHNESS		(Recommended: FILTERING_PARAM = 0.97)
FILTERING_METHOD GAP_RATIO

FILTERING_PARAM 0.01

Contributions

  1. Clone your fork
  2. Hack away
  3. If you are adding new functionality, document it in the README
  4. Verify your code by running mvn package and adding additional tests.
  5. Push the branch up to GitHub
  6. Send a pull request to the yahoo/egads project.

We actively welcome contributions. If you don't know where to start, try checking out the issue list and fixing up the place. Or, you can add a model - a goal of this project is to have a robust, lightweight and dependency-free set of models to choose from that are ready to be deployed in production.

References

Generic and Scalable Framework for Automated Time-series Anomaly Detection by Nikolay Laptev, Saeed Amizadeh, Ian Flint , KDD 2015 (August 10, 2015)

Citation

If you use EGADS in your projects, please cite: Generic and Scalable Framework for Automated Time-series Anomaly Detection by Nikolay Laptev, Saeed Amizadeh, Ian Flint , KDD 2015

BibTeX:

@inproceedings{laptev2015generic,
		title={Generic and Scalable Framework for Automated Time-series Anomaly Detection},
		author={Laptev, Nikolay and Amizadeh, Saeed and Flint, Ian},
		booktitle={Proceedings of the 21th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining},
		pages={1939--1947},
		year={2015},
		organization={ACM}
}

License

Code licensed under the GPL License. See LICENSE file for terms.

egads's People

Contributors

amizadeh avatar dependabot[bot] avatar horia-calborean avatar ianflint avatar jigs1993 avatar karpada avatar kashif avatar kylecoffin avatar manolama avatar markgrover avatar nlaptev avatar skidder avatar varunagrawal avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

egads's Issues

About DBScanModel

I am reading the source code, but can't understand DBScanModel, the 'detect' method which judge a point whether or not an anomly in DBScanModel.java, it just judges observedValue != expectedValue, so I am confuse if it is useful for using DBScanClusterer to cluster the points.

if (observedSeries.get(p.getId()).value != expectedSeries.get(p.getId()).value && ((((unixTime - observedSeries.get(p.getId()).time) / 3600) < maxHrsAgo) || (maxHrsAgo == 0 && p.getId() == (n - 1)))) { output.add(new Interval(observedSeries.get(p.getId()).time, p.getId(), errors, thresholdErrors, observedSeries.get(p.getId()).value, expectedSeries.get(p.getId()).value)); }

UpdateModelProcessable

It does not appear the the ma.update() will do anything considering non of the tsmm model implement the update() method. Is it expected that when using this library it is always for just one off data anomaly detection? or should we implement the update() method yourself.

I would like to use this library a a backbone for some stream processing of data and update model and detect new anomalies in real time. Am i missing something about how the library should be used?

The best anomaly detection model for my case

Hi,

I try to detect anomaly detection in time-series with last sales and forecast sales for next x weeks.

The time-series have seasonality and holidays outliers.

I have 3 years of data and sales is grouped by week.

What the recommended AD_MODEL for this case?

[Security] Java (Maven): Use of insecure protocol to download/upload artifacts

Hi Security Team,

The build files indicate that this project is resolving dependencies over HTTP instead of HTTPS. Any of these artifacts could have been MITM to maliciously compromise them and infect the build artifacts that were produced. Additionally, if any of these JARs or other dependencies were compromised, any developers using these could continue to be infected past updating to fix this.

Description:

This attack leverages the build infrastructure loading dependencies over HTTP without any other sort of integrity check to allow them to be maliciously compromised.

POC code has existed since 2014 to maliciously compromise a JAR file inflight.
See:

https://max.computer/blog/how-to-take-over-the-computer-of-any-java-or-clojure-or-scala-developer/

https://github.com/mveytsman/dilettante

Source Locations :

https://github.com/yahoo/egads/blob/f14b898e3d343c2bc0318572e2c348aa9970ae74/pom.xml

  <pluginRepositories>
    <pluginRepository>
      <id>bintray-yahoo-maven</id>
      <name>bintray-plugins</name>
      <url>http://yahoo.bintray.com/maven</url>
    </pluginRepository>
  </pluginRepositories>

References :

  1. https://serverfault.com/a/153065
  2. https://security.stackexchange.com/a/12050
  3. https://thenextweb.com/insights/2017/12/11/comcast-continues-to-inject-its-own-code-into-websites-you-visit/#
  4. https://medium.com/bugbountywriteup/want-to-take-over-the-java-ecosystem-all-you-need-is-a-mitm-1fc329d898fb
  5. github/codeql#2413
  6. GHSA-rcj2-vvjx-87pm
  7. GHSA-jwqm-c9f2-2cq3

This vulnerability has a CVSS v3.0 Base Score of 8.1/10

https://nvd.nist.gov/vuln-metrics/cvss/v3-calculator?vector=AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H

Can this software be used in a mobile phone setting (e.g. Android)?

I would like to use this software as part of a backend to detect anomalies on data collected using the sensors of the phone. Apparently, this software package still does not support online anomaly detection. Anyway, what would be the advisable approach to use EGADS in the Android setting? I would like to detect anomalies in the GPS data, which is stored in a CSV file. Any suggestions?

Maven Build Error - Java 1.5+

I cloned the latest repository (main branch) and ran the maven build command as specified by the README. I get various build errors that say that Maven is using Java 1.3 and I should use Java 1.5 or greater.

Apache Maven 3.0.5
Maven home: /usr/share/maven
Java version: 1.8.0_60, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-8-oracle/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.16.0-31-generic", arch: "amd64", family: "unix"

Compilation not possible because of broken Link

Hi @ALL,

I was just trying to compile with the command "mvn clean compile assembly:single" and I got:

[INFO] Scanning for projects... Downloading from bintray-yahoo-maven: http://yahoo.bintray.com/maven/org/apache/maven/plugins/maven-assembly-plugin/2.2-beta-5/maven-assembly-plugin-2.2-beta-5.pom Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-assembly-plugin/2.2-beta-5/maven-assembly-plugin-2.2-beta-5.pom [WARNING] Failed to retrieve plugin descriptor for org.apache.maven.plugins:maven-assembly-plugin:2.2-beta-5: Plugin org.apache.maven.plugins:maven-assembly-plugin:2.2-beta-5 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-assembly-plugin:jar:2.2-beta-5 Downloading from bintray-yahoo-maven: http://yahoo.bintray.com/maven/org/apache/maven/plugins/maven-release-plugin/2.5.2/maven-release-plugin-2.5.2.pom Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-release-plugin/2.5.2/maven-release-plugin-2.5.2.pom [WARNING] Failed to retrieve plugin descriptor for org.apache.maven.plugins:maven-release-plugin:2.5.2: Plugin org.apache.maven.plugins:maven-release-plugin:2.5.2 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-release-plugin:jar:2.5.2 Downloading from bintray-yahoo-maven: http://yahoo.bintray.com/maven/org/apache/maven/plugins/maven-deploy-plugin/2.8.2/maven-deploy-plugin-2.8.2.pom Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-deploy-plugin/2.8.2/maven-deploy-plugin-2.8.2.pom [WARNING] Failed to retrieve plugin descriptor for org.apache.maven.plugins:maven-deploy-plugin:2.8.2: Plugin org.apache.maven.plugins:maven-deploy-plugin:2.8.2 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-deploy-plugin:jar:2.8.2 Downloading from bintray-yahoo-maven: http://yahoo.bintray.com/maven/org/apache/maven/plugins/maven-compiler-plugin/3.0/maven-compiler-plugin-3.0.pom Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-compiler-plugin/3.0/maven-compiler-plugin-3.0.pom [WARNING] Failed to retrieve plugin descriptor for org.apache.maven.plugins:maven-compiler-plugin:3.0: Plugin org.apache.maven.plugins:maven-compiler-plugin:3.0 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-compiler-plugin:jar:3.0 Downloading from bintray-yahoo-maven: http://yahoo.bintray.com/maven/org/apache/maven/plugins/maven-clean-plugin/2.5/maven-clean-plugin-2.5.pom Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.5/maven-clean-plugin-2.5.pom [WARNING] Failed to retrieve plugin descriptor for org.apache.maven.plugins:maven-clean-plugin:2.5: Plugin org.apache.maven.plugins:maven-clean-plugin:2.5 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-clean-plugin:jar:2.5 Downloading from bintray-yahoo-maven: http://yahoo.bintray.com/maven/org/apache/maven/plugins/maven-resources-plugin/2.6/maven-resources-plugin-2.6.pom Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-resources-plugin/2.6/maven-resources-plugin-2.6.pom [WARNING] Failed to retrieve plugin descriptor for org.apache.maven.plugins:maven-resources-plugin:2.6: Plugin org.apache.maven.plugins:maven-resources-plugin:2.6 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-resources-plugin:jar:2.6 Downloading from bintray-yahoo-maven: http://yahoo.bintray.com/maven/org/apache/maven/plugins/maven-jar-plugin/2.4/maven-jar-plugin-2.4.pom Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-jar-plugin/2.4/maven-jar-plugin-2.4.pom [WARNING] Failed to retrieve plugin descriptor for org.apache.maven.plugins:maven-jar-plugin:2.4: Plugin org.apache.maven.plugins:maven-jar-plugin:2.4 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-jar-plugin:jar:2.4 Downloading from bintray-yahoo-maven: http://yahoo.bintray.com/maven/org/apache/maven/plugins/maven-surefire-plugin/2.12.4/maven-surefire-plugin-2.12.4.pom Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-surefire-plugin/2.12.4/maven-surefire-plugin-2.12.4.pom [WARNING] Failed to retrieve plugin descriptor for org.apache.maven.plugins:maven-surefire-plugin:2.12.4: Plugin org.apache.maven.plugins:maven-surefire-plugin:2.12.4 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-surefire-plugin:jar:2.12.4 Downloading from bintray-yahoo-maven: http://yahoo.bintray.com/maven/org/apache/maven/plugins/maven-install-plugin/2.4/maven-install-plugin-2.4.pom Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-install-plugin/2.4/maven-install-plugin-2.4.pom [WARNING] Failed to retrieve plugin descriptor for org.apache.maven.plugins:maven-install-plugin:2.4: Plugin org.apache.maven.plugins:maven-install-plugin:2.4 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-install-plugin:jar:2.4 Downloading from bintray-yahoo-maven: http://yahoo.bintray.com/maven/org/apache/maven/plugins/maven-site-plugin/3.3/maven-site-plugin-3.3.pom Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-site-plugin/3.3/maven-site-plugin-3.3.pom [WARNING] Failed to retrieve plugin descriptor for org.apache.maven.plugins:maven-site-plugin:3.3: Plugin org.apache.maven.plugins:maven-site-plugin:3.3 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-site-plugin:jar:3.3 Downloading from bintray-yahoo-maven: http://yahoo.bintray.com/maven/org/apache/maven/plugins/maven-antrun-plugin/1.3/maven-antrun-plugin-1.3.pom Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-antrun-plugin/1.3/maven-antrun-plugin-1.3.pom [WARNING] Failed to retrieve plugin descriptor for org.apache.maven.plugins:maven-antrun-plugin:1.3: Plugin org.apache.maven.plugins:maven-antrun-plugin:1.3 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-antrun-plugin:jar:1.3 [WARNING] Failed to retrieve plugin descriptor for org.apache.maven.plugins:maven-assembly-plugin:2.2-beta-5: Plugin org.apache.maven.plugins:maven-assembly-plugin:2.2-beta-5 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-assembly-plugin:jar:2.2-beta-5 Downloading from bintray-yahoo-maven: http://yahoo.bintray.com/maven/org/apache/maven/plugins/maven-dependency-plugin/2.8/maven-dependency-plugin-2.8.pom Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-dependency-plugin/2.8/maven-dependency-plugin-2.8.pom [WARNING] Failed to retrieve plugin descriptor for org.apache.maven.plugins:maven-dependency-plugin:2.8: Plugin org.apache.maven.plugins:maven-dependency-plugin:2.8 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-dependency-plugin:jar:2.8 Downloading from bintray-yahoo-maven: http://yahoo.bintray.com/maven/org/apache/maven/plugins/maven-release-plugin/2.5.3/maven-release-plugin-2.5.3.pom Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-release-plugin/2.5.3/maven-release-plugin-2.5.3.pom [WARNING] Failed to retrieve plugin descriptor for org.apache.maven.plugins:maven-release-plugin:2.5.3: Plugin org.apache.maven.plugins:maven-release-plugin:2.5.3 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-release-plugin:jar:2.5.3 Downloading from bintray-yahoo-maven: http://yahoo.bintray.com/maven/org/apache/maven/plugins/maven-metadata.xml Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-metadata.xml Downloading from bintray-yahoo-maven: http://yahoo.bintray.com/maven/org/codehaus/mojo/maven-metadata.xml Downloading from central: https://repo.maven.apache.org/maven2/org/codehaus/mojo/maven-metadata.xml

Obviously maven trys to download something from http://yahoo.bintray.com.
I could follow the path until http://yahoo.bintray.com/maven/org/apache/ - The subdirectory "maven" and the following directorys are missing.

Is there any other way to compile this ?

Thanks a lot !

Bye, Dirk

Build error

I cant compile the code (java 1.7, ubuntu 14.04) due to a generics error (unchecked call) that, I think, was only a warning in previous java versions.

Is there a way to resolve this issue?

Remove Storage.java

Public static nonfinal fields are not conducive to a concurrent, enterprise-ready models. Refactoring the code to remove this class will bring this project one step closer to production-level quality.

Build Failed

I have tried making build and i am getting error i am attaching image of error and also my version information in the same picture. Can you please tell me what could be the problem.

error

Error: Could not find or load main class com.yahoo.egads.Egads

i installed the latest version of java JDK and maven on win10, then i successfully compiled using command mvn clean compile assembly:single, but when i type this
java -Dlog4j.configurationFile=src/test/resources/log4j2.xml -cp target/egads-*-jar-with-dependencies.jar com.yahoo.egads.Egads src/test/resources/sample_config.ini src/test/resources/sample_input.csv
an error occurs:
Error: Could not find or load main class com.yahoo.egads.Egads

[ERROR] No plugin found for prefix 'assembly'

Hello,
Trying to build the library using the command:

mvn clean compile assembly:single

But I got the following error:

image

I tried to follow with issue #36, but their solution does not work with me!
Any thought?
Thanks,

StackOverflowError on AutoForecastModel

When I change the TS_MODEL to AutoForecastModel in config and run it on my data, it got stack overflow like this:

Exception in thread "main" java.lang.StackOverflowError
    at net.sourceforge.openforecast.models.TripleExponentialSmoothingModel.forecast(TripleExponentialSmoothingModel.java:673)
    at net.sourceforge.openforecast.models.AbstractTimeBasedModel.initForecastValue(AbstractTimeBasedModel.java:261)
    at net.sourceforge.openforecast.models.AbstractTimeBasedModel.getForecastValue(AbstractTimeBasedModel.java:361)
    at net.sourceforge.openforecast.models.TripleExponentialSmoothingModel.getSeasonalIndex(TripleExponentialSmoothingModel.java:817)
    at net.sourceforge.openforecast.models.TripleExponentialSmoothingModel.getBase(TripleExponentialSmoothingModel.java:734)
    at net.sourceforge.openforecast.models.TripleExponentialSmoothingModel.forecast(TripleExponentialSmoothingModel.java:673)
    at net.sourceforge.openforecast.models.AbstractTimeBasedModel.initForecastValue(AbstractTimeBasedModel.java:261)
    at net.sourceforge.openforecast.models.AbstractTimeBasedModel.getForecastValue(AbstractTimeBasedModel.java:361)
    at net.sourceforge.openforecast.models.TripleExponentialSmoothingModel.getSeasonalIndex(TripleExponentialSmoothingModel.java:817)
    at net.sourceforge.openforecast.models.TripleExponentialSmoothingModel.getBase(TripleExponentialSmoothingModel.java:734)
    at net.sourceforge.openforecast.models.TripleExponentialSmoothingModel.forecast(TripleExponentialSmoothingModel.java:673)
    at net.sourceforge.openforecast.models.AbstractTimeBasedModel.initForecastValue(AbstractTimeBasedModel.java:261)
    at net.sourceforge.openforecast.models.AbstractTimeBasedModel.getForecastValue(AbstractTimeBasedModel.java:361)
    at net.sourceforge.openforecast.models.TripleExponentialSmoothingModel.getSeasonalIndex(TripleExponentialSmoothingModel.java:817)
    at net.sourceforge.openforecast.models.TripleExponentialSmoothingModel.getBase(TripleExponentialSmoothingModel.java:734)
    at net.sourceforge.openforecast.models.TripleExponentialSmoothingModel.forecast(TripleExponentialSmoothingModel.java:673)
    at net.sourceforge.openforecast.models.AbstractTimeBasedModel.initForecastValue(AbstractTimeBasedModel.java:261)
    at net.sourceforge.openforecast.models.AbstractTimeBasedModel.getForecastValue(AbstractTimeBasedModel.java:361)
    at net.sourceforge.openforecast.models.TripleExponentialSmoothingModel.getSeasonalIndex(TripleExponentialSmoothingModel.java:817)
    at net.sourceforge.openforecast.models.TripleExponentialSmoothingModel.getBase(TripleExponentialSmoothingModel.java:734)
    at net.sourceforge.openforecast.models.TripleExponentialSmoothingModel.forecast(TripleExponentialSmoothingModel.java:673)
    at net.sourceforge.openforecast.models.AbstractTimeBasedModel.initForecastValue(AbstractTimeBasedModel.java:261)
    at net.sourceforge.openforecast.models.AbstractTimeBasedModel.getForecastValue(AbstractTimeBasedModel.java:361)
    at net.sourceforge.openforecast.models.TripleExponentialSmoothingModel.getSeasonalIndex(TripleExponentialSmoothingModel.java:817)

.... 

at net.sourceforge.openforecast.models.AbstractTimeBasedModel.initForecastValue(AbstractTimeBasedModel.java:261)
    at net.sourceforge.openforecast.models.AbstractTimeBasedModel.getForecastValue(AbstractTimeBasedModel.java:361)
    at net.sourceforge.openforecast.models.TripleExponentialSmoothingModel.getSeasonalIndex(TripleExponentialSmoothingModel.java:817)

And it works correctly on other models.

Using an "expected" time-series for forecasting

Hi,

I am trying to specify a list of time-series that are my "normal" behavior and a list or an individual time-series which I want to check for anomalies against the "normal" list - is there a way to do this under the current release?
If not, is it preferable that I work on adding another TSMM model which takes in a list of .csv files as "normal" time-series and averages them at each time unit to calculate an "expected" time-series and then compares the other time-series with this?

Thanks.

can not find Filtering

I see 4.2 Filtering in paper -- Generic and Scalable Framework for Automated Time-series Anomaly Detection, but i can not find filter module in the code. So, is that i missed it?

Usage question: Working with streaming data sets

I'm considering this library for a project where I periodically fetch metric data and want to test each new data point against previous values to see if the latest value is an anomaly.

However, the configuration files and tests seem to use static data sets (CSV files). The entire data set is loaded upfront, and then the analysis is performed. For example:
https://github.com/yahoo/egads/blob/master/src/test/java/com/yahoo/egads/TestOlympicModel.java#L85

On the other hand, it appears that a TimeSeries object can be instantiated and values added without using a CSV. https://github.com/yahoo/egads/blob/master/src/test/java/com/yahoo/egads/TestTimeSeries.java#L23

I'm wondering if it makes sense to instantiate a Time Series object, and then recreate the model and perform the analysis each time I update it with a new data point, or if there is a preferred method for handling streaming data.

Thank you.

Auto forecast: resistant to model errors

Using the automatic forecasting option for a small dataset always results in an error from the TripleExponentialSmoothing model which states it needs 2 years of data, which is fair enough.

However, I don't think this should kill the automatic forecasting. Maybe errors from models could be caught, and only the models which successfully built could be assessed?

System integration

Hello
Is there anyone to give detailed information about System Integration ? 2.1 System Integration passage at this document ( https://s.yimg.com/ge/labs/v2/uploads/kdd2015.pdf ) there is a figure (Figure 1) . Is there anyone to explain other blue box at that figure ?
The question is how can we integrate our monitoring system. How can we use streaming data, anomaly db, config db, model db etc.

best regards
Murat

Format for StdInput?

How to input data using command line and not CSV? I want be able to pass the input data through the command line so I was wondering what format that should be in? A string, or something? What delimiters to use?

expected series - how to produce

it is not clear from the code how to use the engine. specifically - how to generate the expected series.

in the AnomalyDetectionModel there is the following method:

// detect anomalies.
public Anomaly.IntervalSequence detect(
        TimeSeries.DataSequence observedSeries,
        TimeSeries.DataSequence expectedSeries) throws Exception;

I'm not sure how the expectedSeries is produced?

in the unit tests it is loaded from a file: src/test/resources/model_output_" + refWindows[w] + "_" + drops[d] + ".csv" which is also - not understood.

any help is appreciated.

ClassNotFoundException

i installed the latest version of java JDK and maven on win10, then i successfully compiled using command mvn clean compile assembly:single, but when i type this
java -Dlog4j.configurationFile=src/test/resources/log4j2.xml -cp target/egads-*-jar-with-dependencies.jar com.yahoo.egads.Egads src/test/resources/sample_config.ini src/test/resources/sample_input.csv
an error occurs:
Error: Could not find or load main class com.yahoo.egads.Egads
Caused by: java.lang.ClassNotFoundException: com.yahoo.egads.Egads

Question about license

Hi,

Did you consider maybe releasing egads under different, less restrictive, license (preferably Apache)? The reason I’m asking is that right now, at least for me, egads is more like a library that I can plug into my code rather then “a tool”. And obviously, current GPL license, is problematic from this PoV.

Thanks

AdaptiveKernelDensityChangePointDetector.java cannot find symbol

I have tried to simply compile the code (on ubuntu 14.04) but fail :

Steps performed till now :

  1. git clone
  2. export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-amd64
  3. mvn clean compile assembly:single

This yields the following error:

[INFO] Compilation failure
/home/kiran/toolbox/egads-yahoo-AD/egads/src/main/java/com/yahoo/egads/models/adm/AdaptiveKernelDensityChangePointDetector.java:[172,82] cannot find symbol
symbol: method join(java.lang.String,java.lang.String)
location: class java.lang.String

I am not familiar with java code and do not understand what could be the problem.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.