Loading skill
Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Build anomaly detection applications with Azure AI Anomaly Detector SDK for Java. Use when implementing univariate/multivariate anomaly detection, time-series analysis, or AI-powered monitoring.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-11 | ✗→✓ | ▲ Improved | 255% | 0% |
| case-01 | ✗→✓ | ▲ Improved | 56% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 53% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 187% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 135% | 0% |
Build anomaly detection applications using the Azure AI Anomaly Detector SDK for Java.
xml<dependency> <groupId>com.azure</groupId> <artifactId>azure-ai-anomalydetector</artifactId> <version>3.0.0-beta.6</version> </dependency>
javaimport com.azure.ai.anomalydetector.AnomalyDetectorClientBuilder; import com.azure.ai.anomalydetector.MultivariateClient; import com.azure.ai.anomalydetector.UnivariateClient; import com.azure.core.credential.AzureKeyCredential; String endpoint = System.getenv("AZURE_ANOMALY_DETECTOR_ENDPOINT"); String key = System.getenv("AZURE_ANOMALY_DETECTOR_API_KEY"); // Multivariate client for multiple correlated signals MultivariateClient multivariateClient = new AnomalyDetectorClientBuilder() .credential(new AzureKeyCredential(key)) .endpoint(endpoint) .buildMultivariateClient(); // Univariate client for single variable analysis UnivariateClient univariateClient = new AnomalyDetectorClientBuilder() .credential(new AzureKeyCredential(key)) .endpoint(endpoint) .buildUnivariateClient();
javaimport com.azure.core.credential.TokenCredential; import com.azure.identity.AzureIdentityEnvVars; import com.azure.identity.DefaultAzureCredentialBuilder; import com.azure.identity.ManagedIdentityCredentialBuilder; TokenCredential credential = new DefaultAzureCredentialBuilder() .requireEnvVars(AzureIdentityEnvVars.AZURE_TOKEN_CREDENTIALS) .build(); // Or use a specific credential directly in production: // See https://learn.microsoft.com/java/api/overview/azure/identity-readme?view=azure-java-stable#credential-classes // TokenCredential credential = new ManagedIdentityCredentialBuilder().build(); MultivariateClient client = new AnomalyDetectorClientBuilder() .credential(credential) .endpoint(endpoint) .buildMultivariateClient();
javaimport com.azure.ai.anomalydetector.models.*; import java.time.OffsetDateTime; import java.util.List; List<TimeSeriesPoint> series = List.of( new TimeSeriesPoint(OffsetDateTime.parse("2023-01-01T00:00:00Z"), 1.0), new TimeSeriesPoint(OffsetDateTime.parse("2023-01-02T00:00:00Z"), 2.5), // ... more data points (minimum 12 points required) ); UnivariateDetectionOptions options = new UnivariateDetectionOptions(series) .setGranularity(TimeGranularity.DAILY) .setSensitivity(95); UnivariateEntireDetectionResult result = univariateClient.detectUnivariateEntireSeries(options); // Check for anomalies for (int i = 0; i < result.getIsAnomaly().size(); i++) { if (result.getIsAnomaly().get(i)) { System.out.printf("Anomaly detected at index %d with value %.2f%n", i, series.get(i).getValue()); } }
javaUnivariateLastDetectionResult lastResult = univariateClient.detectUnivariateLastPoint(options); if (lastResult.isAnomaly()) { System.out.println("Latest point is an anomaly!"); System.out.printf("Expected: %.2f, Upper: %.2f, Lower: %.2f%n", lastResult.getExpectedValue(), lastResult.getUpperMargin(), lastResult.getLowerMargin()); }
javaUnivariateChangePointDetectionOptions changeOptions = new UnivariateChangePointDetectionOptions(series, TimeGranularity.DAILY); UnivariateChangePointDetectionResult changeResult = univariateClient.detectUnivariateChangePoint(changeOptions); for (int i = 0; i < changeResult.getIsChangePoint().size(); i++) { if (changeResult.getIsChangePoint().get(i)) { System.out.printf("Change point at index %d with confidence %.2f%n", i, changeResult.getConfidenceScores().get(i)); } }
javaimport com.azure.ai.anomalydetector.models.*; import com.azure.core.util.polling.SyncPoller; // Prepare training request with blob storage data ModelInfo modelInfo = new ModelInfo() .setDataSource("https://storage.blob.core.windows.net/container/data.zip?sasToken") .setStartTime(OffsetDateTime.parse("2023-01-01T00:00:00Z")) .setEndTime(OffsetDateTime.parse("2023-06-01T00:00:00Z")) .setSlidingWindow(200) .setDisplayName("MyMultivariateModel"); // Train model (long-running operation) AnomalyDetectionModel trainedModel = multivariateClient.trainMultivariateModel(modelInfo); String modelId = trainedModel.getModelId(); System.out.println("Model ID: " + modelId); // Check training status AnomalyDetectionModel model = multivariateClient.getMultivariateModel(modelId); System.out.println("Status: " + model.getModelInfo().getStatus());
javaMultivariateBatchDetectionOptions detectionOptions = new MultivariateBatchDetectionOptions() .setDataSource("https://storage.blob.core.windows.net/container/inference-data.zip?sasToken") .setStartTime(OffsetDateTime.parse("2023-07-01T00:00:00Z")) .setEndTime(OffsetDateTime.parse("2023-07-31T00:00:00Z")) .setTopContributorCount(10); MultivariateDetectionResult detectionResult = multivariateClient.detectMultivariateBatchAnomaly(modelId, detectionOptions); String resultId = detectionResult.getResultId(); // Poll for results MultivariateDetectionResult result = multivariateClient.getBatchDetectionResult(resultId); for (AnomalyState state : result.getResults()) { if (state.getValue().isAnomaly()) { System.out.printf("Anomaly at %s, severity: %.2f%n", state.getTimestamp(), state.getValue().getSeverity()); } }
javaMultivariateLastDetectionOptions lastOptions = new MultivariateLastDetectionOptions() .setVariables(List.of( new VariableValues("variable1", List.of("timestamp1"), List.of(1.0f)), new VariableValues("variable2", List.of("timestamp1"), List.of(2.5f)) )) .setTopContributorCount(5); MultivariateLastDetectionResult lastResult = multivariateClient.detectMultivariateLastAnomaly(modelId, lastOptions); if (lastResult.getValue().isAnomaly()) { System.out.println("Anomaly detected!"); // Check contributing variables for (AnomalyContributor contributor : lastResult.getValue().getInterpretation()) { System.out.printf("Variable: %s, Contribution: %.2f%n", contributor.getVariable(), contributor.getContributionScore()); } }
java// List all models PagedIterable<AnomalyDetectionModel> models = multivariateClient.listMultivariateModels(); for (AnomalyDetectionModel m : models) { System.out.printf("Model: %s, Status: %s%n", m.getModelId(), m.getModelInfo().getStatus()); } // Delete a model multivariateClient.deleteMultivariateModel(modelId);
javaimport com.azure.core.exception.HttpResponseException; try { univariateClient.detectUnivariateEntireSeries(options); } catch (HttpResponseException e) { System.out.println("Status code: " + e.getResponse().getStatusCode()); System.out.println("Error: " + e.getMessage()); }
bashAZURE_ANOMALY_DETECTOR_ENDPOINT=https://<resource>.cognitiveservices.azure.com/ # Required for all auth methods AZURE_ANOMALY_DETECTOR_API_KEY=<your-api-key> # Only required for AzureKeyCredential auth AZURE_TOKEN_CREDENTIALS=prod # Required only if DefaultAzureCredential is used in production
TimeGranularity to your actual data frequencyHttpResponseException for API errorsOther measured skills in the registry, with their headline benchmark lift.