Data Models and Analysis Classes

This diagram shows the data structures and analysis models used throughout the system.

        classDiagram
    %% Ergodic Analysis Models
    class ErgodicAnalyzer {
        -convergence_threshold: float
        -min_paths: int
        -confidence_level: float
        +analyze_trajectory(trajectory: ndarray) ErgodicData
        +compare_scenarios(insured: List, uninsured: List) dict
        +calculate_ergodic_metrics(data: ErgodicData) dict
        +validate_insurance_impact() ValidationResults
        +plot_ergodic_comparison()
    }

    class ErgodicData {
        +trajectory: ndarray
        +time_points: ndarray
        +time_average: float
        +ensemble_average: float
        +growth_rate: float
        +volatility: float
        +survival_rate: float
        +calculate_time_average() float
        +calculate_ensemble_average() float
        +calculate_ergodic_divergence() float
    }

    class ErgodicAnalysisResults {
        +insured_metrics: dict
        +uninsured_metrics: dict
        +ergodic_advantage: dict
        +confidence_intervals: dict
        +convergence_metrics: ConvergenceMetrics
        +to_dataframe() DataFrame
        +plot_results()
    }

    %% Optimization Models
    class BusinessOptimizer {
        -objective: BusinessObjective
        -constraints: BusinessConstraints
        -algorithm: OptimizationAlgorithm
        +optimize(initial_guess: dict) OptimalStrategy
        +run_pareto_analysis() ParetoFrontier
        +sensitivity_analysis() SensitivityResult
    }

    class OptimalStrategy {
        +insurance_limit: float
        +retention: float
        +premium_budget: float
        +expected_growth: float
        +risk_metrics: dict
        +implementation_steps: List[str]
    }

    class BusinessObjective {
        +metric: str
        +target_value: float
        +weight: float
        +evaluate(simulation_results: SimulationResults) float
    }

    class BusinessConstraints {
        +min_equity: float
        +max_leverage: float
        +min_liquidity: float
        +max_premium_ratio: float
        +validate(state: dict) bool
    }

    %% Risk Metrics
    class RiskMetrics {
        +value_at_risk: float
        +conditional_value_at_risk: float
        +expected_shortfall: float
        +maximum_drawdown: float
        +sharpe_ratio: float
        +sortino_ratio: float
        +calculate_var(returns: ndarray, confidence: float) float
        +calculate_cvar(returns: ndarray, confidence: float) float
        +calculate_max_drawdown(equity: ndarray) float
    }

    class RuinProbability {
        +threshold: float
        +time_horizon: int
        +probability: float
        +expected_time_to_ruin: float
        +calculate_ruin_prob(trajectories: List) float
        +estimate_recovery_time() float
    }

    %% Convergence and Validation
    class ConvergenceMetrics {
        +mean_estimate: float
        +std_estimate: float
        +confidence_interval: tuple
        +effective_sample_size: int
        +gelman_rubin_stat: float
        +is_converged: bool
        +plot_convergence()
    }

    class ValidationResults {
        +accuracy_metrics: dict
        +statistical_tests: dict
        +edge_cases: List[dict]
        +performance_benchmarks: dict
        +is_valid: bool
        +generate_report() str
    }

    %% Sensitivity Analysis
    class SensitivityAnalyzer {
        -base_params: dict
        -param_ranges: dict
        -n_samples: int
        +run_one_way_analysis(param: str) SensitivityResult
        +run_two_way_analysis(param1: str, param2: str) TwoWaySensitivityResult
        +run_sobol_analysis() SobolIndices
        +plot_tornado_diagram()
    }

    class SensitivityResult {
        +parameter: str
        +values: ndarray
        +outputs: ndarray
        +elasticity: float
        +critical_threshold: float
        +plot()
    }

    %% Financial Statements
    class FinancialStatements {
        +balance_sheet: BalanceSheet
        +income_statement: IncomeStatement
        +cash_flow: CashFlowStatement
        +ratios: FinancialRatios
        +generate_statements(manufacturer: WidgetManufacturer)
        +export_to_excel(path: str)
    }

    class BalanceSheet {
        +assets: dict
        +liabilities: dict
        +equity: dict
        +total_assets: float
        +total_liabilities: float
        +total_equity: float
        +validate_balance() bool
    }

    class IncomeStatement {
        +revenue: float
        +operating_income: float
        +insurance_expense: float
        +tax_expense: float
        +net_income: float
        +ebitda: float
        +calculate_margins() dict
    }

    %% Loss Distributions
    class LossDistribution {
        +distribution_type: str
        +parameters: dict
        +fitted: bool
        +fit(data: ndarray)
        +sample(n: int) ndarray
        +pdf(x: float) float
        +cdf(x: float) float
        +quantile(p: float) float
    }

    class LossData {
        +historical_losses: DataFrame
        +frequency_data: ndarray
        +severity_data: ndarray
        +exposure_base: float
        +clean_data()
        +fit_distributions() dict
        +validate_fit() bool
    }

    %% Relationships
    ErgodicAnalyzer --> ErgodicData : creates
    ErgodicAnalyzer --> ErgodicAnalysisResults : produces
    ErgodicAnalyzer --> ValidationResults : validates with

    BusinessOptimizer --> OptimalStrategy : finds
    BusinessOptimizer --> BusinessObjective : uses
    BusinessOptimizer --> BusinessConstraints : respects

    OptimalStrategy --> RiskMetrics : includes

    SensitivityAnalyzer --> SensitivityResult : produces

    FinancialStatements --> BalanceSheet : contains
    FinancialStatements --> IncomeStatement : contains

    LossDistribution --> LossData : fitted from

    ErgodicAnalysisResults --> ConvergenceMetrics : includes
    ValidationResults --> RiskMetrics : uses
    

Data Flow Sequence

        sequenceDiagram
    participant Sim as Simulation
    participant EA as ErgodicAnalyzer
    participant BO as BusinessOptimizer
    participant SA as SensitivityAnalyzer
    participant RM as RiskMetrics
    participant FS as FinancialStatements

    Sim->>EA: Trajectory data
    EA->>EA: Calculate time averages
    EA->>EA: Calculate ensemble averages
    EA->>RM: Request risk metrics
    RM-->>EA: VaR, CVaR, Sharpe
    EA-->>BO: Ergodic metrics

    BO->>BO: Define objective
    BO->>BO: Set constraints
    BO->>SA: Request sensitivity
    SA->>SA: Parameter sweep
    SA-->>BO: Sensitivity results
    BO-->>BO: Find optimal strategy

    BO->>FS: Generate statements
    FS->>FS: Build balance sheet
    FS->>FS: Build income statement
    FS-->>BO: Financial reports
    

Key Data Patterns

1. Immutable Data Objects

  • Results objects are immutable after creation

  • Ensures data integrity through analysis pipeline

2. Lazy Evaluation

  • Metrics calculated on-demand

  • Caching of expensive computations

3. Composite Pattern

  • FinancialStatements composed of multiple statement types

  • ErgodicAnalysisResults aggregates multiple metric types

4. Template Method

  • Base distribution class with template methods

  • Subclasses implement specific distributions

5. Data Transfer Objects (DTO)

  • Result classes act as DTOs between modules

  • Clean separation of data and logic