安装
npx skills add https://github.com/sickn33/antigravity-awesome-skills --skill azure-ai-anomalydetector-java
复制
Azure AI Anomaly Detector SDK for Java
Build anomaly detection applications using the Azure AI Anomaly Detector SDK for Java.
Installation
<
dependency
>
<
groupId
>
com.azure
</
groupId
>
<
artifactId
>
azure-ai-anomalydetector
</
artifactId
>
<
version
>
3.0.0-beta.6
</
version
>
</
dependency
>
Client Creation
Sync and Async Clients
import
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
(
)
;
With DefaultAzureCredential
import
com
.
azure
.
identity
.
DefaultAzureCredentialBuilder
;
MultivariateClient
client
=
new
AnomalyDetectorClientBuilder
(
)
.
credential
(
new
DefaultAzureCredentialBuilder
(
)
.
build
(
)
)
.
endpoint
(
endpoint
)
.
buildMultivariateClient
(
)
;
Key Concepts
Univariate Anomaly Detection
Batch Detection
Analyze entire time series at once
Streaming Detection
Real-time detection on latest data point
Change Point Detection
Detect trend changes in time series
Multivariate Anomaly Detection
Detect anomalies across 300+ correlated signals
Uses Graph Attention Network for inter-correlations
Three-step process: Train → Inference → Results
Core Patterns
Univariate Batch Detection
import
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
(
)
)
;
}
}
Univariate Last Point Detection (Streaming)
UnivariateLastDetectionResult
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
(
)
)
;
}
Change Point Detection
UnivariateChangePointDetectionOptions
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
)
)
;
}
}
Multivariate Model Training
import
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
(
)
)
;
Multivariate Batch Inference
MultivariateBatchDetectionOptions
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
(
)
)
;
}
}
Multivariate Last Point Detection
MultivariateLastDetectionOptions
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
(
)
)
;
}
}
Model Management
// 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
)
;
Error Handling
import
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
(
)
)
;
}
Environment Variables
AZURE_ANOMALY_DETECTOR_ENDPOINT
=
https://
<
resource
>
.cognitiveservices.azure.com/
AZURE_ANOMALY_DETECTOR_API_KEY
=
<
your-api-key
>
Best Practices
Minimum Data Points
Univariate requires at least 12 points; more data improves accuracy
Granularity Alignment
Match
TimeGranularity
to your actual data frequency
Sensitivity Tuning
Higher values (0-99) detect more anomalies
Multivariate Training
Use 200-1000 sliding window based on pattern complexity
Error Handling
Always handle
HttpResponseException
for API errors
Trigger Phrases
"anomaly detection Java"
"detect anomalies time series"
"multivariate anomaly Java"
"univariate anomaly detection"
"streaming anomaly detection"
"change point detection"
"Azure AI Anomaly Detector"
When to Use
This skill is applicable to execute the workflow or actions described in the overview.
← 返回排行榜