quantrs2_ml/anomaly_detection/
metrics.rs1use super::config::TimeSeriesAnomalyType;
4use scirs2_core::ndarray::{Array1, Array2};
5use std::collections::HashMap;
6
7#[derive(Debug, Clone)]
9pub struct AnomalyResult {
10 pub anomaly_scores: Array1<f64>,
12
13 pub anomaly_labels: Array1<i32>,
15
16 pub confidence_scores: Array1<f64>,
18
19 pub feature_importance: Array2<f64>,
21
22 pub method_results: HashMap<String, MethodSpecificResult>,
24
25 pub metrics: AnomalyMetrics,
27
28 pub processing_stats: ProcessingStats,
30}
31
32#[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#[derive(Debug, Clone)]
63pub struct AnomalyMetrics {
64 pub auc_roc: f64,
66
67 pub auc_pr: f64,
69
70 pub precision: f64,
72
73 pub recall: f64,
75
76 pub f1_score: f64,
78
79 pub false_positive_rate: f64,
81
82 pub false_negative_rate: f64,
84
85 pub mcc: f64,
87
88 pub balanced_accuracy: f64,
90
91 pub quantum_metrics: QuantumAnomalyMetrics,
93}
94
95#[derive(Debug, Clone)]
97pub struct QuantumAnomalyMetrics {
98 pub quantum_advantage: f64,
100
101 pub entanglement_utilization: f64,
103
104 pub circuit_efficiency: f64,
106
107 pub quantum_error_rate: f64,
109
110 pub coherence_utilization: f64,
112}
113
114#[derive(Debug, Clone)]
116pub struct ProcessingStats {
117 pub total_time: f64,
119
120 pub quantum_time: f64,
122
123 pub classical_time: f64,
125
126 pub memory_usage: f64,
128
129 pub quantum_executions: usize,
131
132 pub avg_circuit_depth: f64,
134}
135
136#[derive(Debug, Clone)]
138pub struct TimeSeriesAnomalyPoint {
139 pub timestamp: usize,
141
142 pub score: f64,
144
145 pub anomaly_type: TimeSeriesAnomalyType,
147
148 pub seasonal_context: Option<super::config::SeasonalContext>,
150
151 pub trend_context: Option<super::config::TrendContext>,
153}
154
155#[derive(Debug, Clone)]
157pub struct TrainingStats {
158 pub training_time: f64,
160
161 pub n_training_samples: usize,
163
164 pub feature_stats: Array2<f64>, pub circuit_stats: CircuitStats,
169}
170
171#[derive(Debug, Clone)]
173pub struct CircuitStats {
174 pub avg_depth: f64,
176
177 pub avg_gates: f64,
179
180 pub avg_execution_time: f64,
182
183 pub success_rate: f64,
185}