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