use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ModelArtifact {
pub model: String,
pub version: u32,
pub fitted_at: DateTime<Utc>,
pub parameters: HawkesParams,
#[serde(skip_serializing_if = "Option::is_none")]
pub diagnostics: Option<Diagnostics>,
pub data: DataMeta,
#[serde(skip_serializing_if = "Option::is_none")]
pub baseline: Option<PoissonBaseline>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct HawkesParams {
pub mu: f64,
pub alpha: f64,
pub beta: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Diagnostics {
pub branching_ratio: f64,
pub log_likelihood: f64,
pub aic: f64,
pub bic: f64,
pub converged: bool,
pub iterations: usize,
pub residuals_mean: f64,
pub residuals_std: f64,
pub compensator_ratio: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DataMeta {
pub source: String,
pub n_events_train: usize,
pub n_events_test: usize,
pub observation_window_ms: f64,
pub time_resolution: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PoissonBaseline {
pub model: String,
pub lambda: f64,
pub aic: f64,
pub lr_statistic: f64,
pub lr_reject_h0: bool,
}