Files
foxhunt/crates/ml-ensemble/src/voting.rs
jgrusewski 7ef92983f9 fix(clippy): apply cargo clippy --fix across workspace
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>
2026-03-10 11:17:51 +01:00

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,
}