Giter VIP home page Giter VIP logo

hawkular-datamining's Issues

Send AsyncResponse to Engine

  • Remove polling from RestPredictions. Async response should be sent over JMS and resumed in PredictionResultListener.
  • Add Async response object to predictionRequest

Metrics averaging before inserting to model.

Exponential smoothing models for metrics which are collected with high frequency (e.g. heap used metric) tend to work better for buckets. Therefore it is better to average N values and then use it as input to the model. Another solution could be use simple moving average to and use it as input for double exponential smoothing.

Rework ModelOptimizer

ModelOptimizer should be accessible from directly from TimeSeriesModel (builder).

There are issues with the calculation of CollectionInterval and timestamp

    /**
     * @param collectionInterval collection interval in seconds
     */
    void setCollectionInterval(Long collectionInterval);

As declared by this interface, the interval of Metric should be in seconds.
However, in subsequent use, the modification of timestamp values based on collectionInterval was not consistent.

@Override
    public List<DataPoint> forecast(int nAhead) {

        List<DataPoint> result = new ArrayList<>(nAhead);

        for (int i = 1; i <= nAhead; i++) {
            PredictionResult predictionResult = calculatePrediction(i, null, null);
            DataPoint predictedPoint = new DataPoint(predictionResult.value,
                    lastTimestamp + i*metricContext.getCollectionInterval()*1000,
                    predictionResult.value + predictionIntervalMultiplier*predictionResult.sdOfResiduals,
                    predictionResult.value - predictionIntervalMultiplier*predictionResult.sdOfResiduals);

            result.add(predictedPoint);
        }

        return result;
    }

In this interface implementation, lastTimestamp+i * metricContext. getCollectionInterval() * 1000 is used to calculate the timestamp of the prediction point, indicating that Timestamp is measured in milliseconds.

However, in the subsequent calculation of the timestamp, the CollectionInterval was directly added without converting it to a timestamp in milliseconds.

@Override
    public DataPoint forecast() {
        PredictionResult predictionResult = calculatePrediction(1, null, null);

        return new DataPoint(predictionResult.value, lastTimestamp + metricContext.getCollectionInterval(),
                predictionResult.value + predictionIntervalMultiplier*predictionResult.sdOfResiduals,
                predictionResult.value - predictionIntervalMultiplier*predictionResult.sdOfResiduals);
    }

I am puzzled by the above phenomenon and hope to help answer it. If there is indeed an inconsistency issue, I am willing to assist with the modification.

Get number positivity

I have a rule that throws numbers between -50 and 50 randomly, is there any way to predict the sign (positive or negative) of the next release with at least 90% accuracy based on a historical record?

Persist model metadata

Model weights should be probably persisted on application shutdown or on every update?

Remove duplicate log messages

In the log there are duplicate log messages which should be removed.

This is probably caused by

12:16:49,140 ERROR [stderr] (ServerService Thread Pool -- 59) Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties 

https://github.com/apache/spark/blob/master/core/src/main/resources/org/apache/spark/log4j-defaults.properties

Log example:

12:16:49,370 INFO  [org.apache.spark.SecurityManager] (ServerService Thread Pool -- 59) Changing view acls to: pavol
15/09/23 12:16:49 INFO SecurityManager: Changing view acls to: pavol

Specify end time of precition

Currently it s possible to ask for n steps ahead predictions.

API should offer functionality for asking for predictions for any time in the future. Prediction time could be specified as future timestamp or time in seconds.

Slim down distribution

At the moment app is deployed and distributed as wildfly server. The project uses only REST API, therefore it makes sense to use something "smaller" for example spring boot or wildfly swarm.

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.