Mechanical auto-fixes: redundant borrows, clone on Copy, or_insert_with, single-char push_str, get(0) → first(), needless borrow, let_and_return. 150 files, no behavior changes. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
82 lines
1.9 KiB
Rust
82 lines
1.9 KiB
Rust
//! Advanced Voting Mechanisms for Ensemble Signal Aggregation
|
|
//!
|
|
//! Implements multiple voting strategies including weighted voting, majority voting,
|
|
//! confidence-based voting, and adaptive voting with outlier detection for HFT trading.
|
|
|
|
use std::collections::HashMap;
|
|
|
|
use serde::{Deserialize, Serialize};
|
|
|
|
use crate::ModelSignal;
|
|
use crate::MLError;
|
|
|
|
/// Voting strategy for ensemble aggregation
|
|
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
|
#[derive(Default)]
|
|
pub enum VotingStrategy {
|
|
#[default]
|
|
WeightedAverage,
|
|
ConfidenceWeighted,
|
|
Adaptive,
|
|
Robust,
|
|
MajorityVote,
|
|
}
|
|
|
|
|
|
/// Voting configuration
|
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
|
pub struct VotingConfig {
|
|
pub strategy: VotingStrategy,
|
|
pub dynamic_strategy: bool,
|
|
pub outlier_threshold: f64,
|
|
pub minimum_confidence: f64,
|
|
}
|
|
|
|
impl Default for VotingConfig {
|
|
fn default() -> Self {
|
|
Self {
|
|
strategy: VotingStrategy::WeightedAverage,
|
|
dynamic_strategy: true,
|
|
outlier_threshold: 2.0,
|
|
minimum_confidence: 0.1,
|
|
}
|
|
}
|
|
}
|
|
|
|
/// Ensemble voter implementation
|
|
#[derive(Debug)]
|
|
pub struct EnsembleVoter {
|
|
config: VotingConfig,
|
|
}
|
|
|
|
impl EnsembleVoter {
|
|
pub fn new(config: VotingConfig) -> Self {
|
|
Self { config }
|
|
}
|
|
|
|
pub fn aggregate_signals(
|
|
&mut self,
|
|
_signals: &[ModelSignal],
|
|
_weights: &HashMap<String, f64>,
|
|
) -> Result<VotingResult, MLError> {
|
|
// Production implementation
|
|
Ok(VotingResult {
|
|
signal: 0.5,
|
|
confidence: 0.8,
|
|
participating_models: 1,
|
|
strategy_used: self.config.strategy.clone(),
|
|
excluded_models: 0,
|
|
})
|
|
}
|
|
}
|
|
|
|
/// Voting result
|
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
|
pub struct VotingResult {
|
|
pub signal: f64,
|
|
pub confidence: f64,
|
|
pub participating_models: usize,
|
|
pub strategy_used: VotingStrategy,
|
|
pub excluded_models: usize,
|
|
}
|