quantrs2_ml/anomaly_detection/
metrics.rs

1//! Metrics and results for quantum anomaly detection
2
3use super::config::TimeSeriesAnomalyType;
4use scirs2_core::ndarray::{Array1, Array2};
5use std::collections::HashMap;
6
7/// Anomaly detection results
8#[derive(Debug, Clone)]
9pub struct AnomalyResult {
10    /// Anomaly scores for each sample
11    pub anomaly_scores: Array1<f64>,
12
13    /// Binary anomaly labels (1 for anomaly, 0 for normal)
14    pub anomaly_labels: Array1<i32>,
15
16    /// Confidence scores
17    pub confidence_scores: Array1<f64>,
18
19    /// Explanation scores for each feature
20    pub feature_importance: Array2<f64>,
21
22    /// Method-specific results
23    pub method_results: HashMap<String, MethodSpecificResult>,
24
25    /// Performance metrics
26    pub metrics: AnomalyMetrics,
27
28    /// Processing statistics
29    pub processing_stats: ProcessingStats,
30}
31
32/// Method-specific results
33#[derive(Debug, Clone)]
34pub enum MethodSpecificResult {
35    IsolationForest {
36        path_lengths: Array1<f64>,
37        tree_depths: Array1<f64>,
38    },
39    Autoencoder {
40        reconstruction_errors: Array1<f64>,
41        latent_representations: Array2<f64>,
42    },
43    OneClassSVM {
44        support_vectors: Array2<f64>,
45        decision_function: Array1<f64>,
46    },
47    Clustering {
48        cluster_assignments: Array1<usize>,
49        cluster_distances: Array1<f64>,
50    },
51    LOF {
52        local_outlier_factors: Array1<f64>,
53        reachability_distances: Array1<f64>,
54    },
55    DBSCAN {
56        cluster_labels: Array1<i32>,
57        core_sample_indices: Vec<usize>,
58    },
59}
60
61/// Anomaly detection metrics
62#[derive(Debug, Clone)]
63pub struct AnomalyMetrics {
64    /// Area under ROC curve
65    pub auc_roc: f64,
66
67    /// Area under precision-recall curve
68    pub auc_pr: f64,
69
70    /// Precision at given contamination level
71    pub precision: f64,
72
73    /// Recall at given contamination level
74    pub recall: f64,
75
76    /// F1 score
77    pub f1_score: f64,
78
79    /// False positive rate
80    pub false_positive_rate: f64,
81
82    /// False negative rate
83    pub false_negative_rate: f64,
84
85    /// Matthews correlation coefficient
86    pub mcc: f64,
87
88    /// Balanced accuracy
89    pub balanced_accuracy: f64,
90
91    /// Quantum-specific metrics
92    pub quantum_metrics: QuantumAnomalyMetrics,
93}
94
95/// Quantum-specific anomaly metrics
96#[derive(Debug, Clone)]
97pub struct QuantumAnomalyMetrics {
98    /// Quantum advantage factor
99    pub quantum_advantage: f64,
100
101    /// Entanglement utilization
102    pub entanglement_utilization: f64,
103
104    /// Circuit depth efficiency
105    pub circuit_efficiency: f64,
106
107    /// Quantum error rate
108    pub quantum_error_rate: f64,
109
110    /// Coherence time utilization
111    pub coherence_utilization: f64,
112}
113
114/// Processing statistics
115#[derive(Debug, Clone)]
116pub struct ProcessingStats {
117    /// Total processing time (seconds)
118    pub total_time: f64,
119
120    /// Quantum processing time (seconds)
121    pub quantum_time: f64,
122
123    /// Classical processing time (seconds)
124    pub classical_time: f64,
125
126    /// Memory usage (MB)
127    pub memory_usage: f64,
128
129    /// Number of quantum circuit executions
130    pub quantum_executions: usize,
131
132    /// Average circuit depth
133    pub avg_circuit_depth: f64,
134}
135
136/// Time series anomaly point
137#[derive(Debug, Clone)]
138pub struct TimeSeriesAnomalyPoint {
139    /// Timestamp index
140    pub timestamp: usize,
141
142    /// Anomaly score
143    pub score: f64,
144
145    /// Anomaly type
146    pub anomaly_type: TimeSeriesAnomalyType,
147
148    /// Seasonal context
149    pub seasonal_context: Option<super::config::SeasonalContext>,
150
151    /// Trend context
152    pub trend_context: Option<super::config::TrendContext>,
153}
154
155/// Training statistics
156#[derive(Debug, Clone)]
157pub struct TrainingStats {
158    /// Training time
159    pub training_time: f64,
160
161    /// Number of training samples
162    pub n_training_samples: usize,
163
164    /// Feature statistics
165    pub feature_stats: Array2<f64>, // mean, std, min, max per feature
166
167    /// Quantum circuit statistics
168    pub circuit_stats: CircuitStats,
169}
170
171/// Quantum circuit statistics
172#[derive(Debug, Clone)]
173pub struct CircuitStats {
174    /// Average circuit depth
175    pub avg_depth: f64,
176
177    /// Average number of gates
178    pub avg_gates: f64,
179
180    /// Average execution time
181    pub avg_execution_time: f64,
182
183    /// Circuit success rate
184    pub success_rate: f64,
185}