Phase 3: CONSTRUCT — Multi-Manager Portfolio Construction Report
Date: 2026-03-24 Managers: pareto_diophan, persistent, quantstrat Common observation window: 2023-02-15 to 2024-12-31 (549 daily observations) Optimization method: Equal Risk Contribution (Risk Parity) via riskfolio-lib, Ledoit-Wolf covariance
1. Pre-Optimization Gates
Gate 1: N/T Ratio Validation (Ciliberti-Kondor-Mezard)
| Parameter | Value | Threshold | Result |
|---|---|---|---|
| N (managers) | 3 | — | — |
| T (observations) | 549 | >= 60 | PASS |
| N/T ratio | 0.0055 | < 0.50 | PASS |
| Min T needed | 6 | — | 549 >> 6 |
Interpretation: N/T = 0.0055 is far below the 0.50 threshold. Covariance estimation is highly feasible. All optimization methods (MVO, CVaR, risk parity) are viable. No need to fall back to HRP for statistical reasons. Anchor: [R5] Ciliberti-Kondor-Mezard — covariance estimation breaks down when N/T approaches 1.
Gate 2: Data Quality
| Check | Result |
|---|---|
| Observations >= 60 | PASS (549) |
| Missing values = 0 | PASS (0 NaN) |
2. Manager Return Profiles (Common Window)
| Metric | pareto_diophan | persistent | quantstrat |
|---|---|---|---|
| Ann. return | 89.38% | 25.65% | 28.99% |
| Ann. volatility | 34.78% | 4.20% | 15.14% |
| Sharpe ratio | 2.57 | 6.10 | 1.92 |
| Max drawdown | -19.14% | -1.46% | -10.08% |
| Skewness | -0.90 | +3.34 | -0.09 |
| Excess kurtosis | 2.59 | 40.70 | 32.35 |
| Cumulative return | 249.47% | 46.88% | 52.00% |
Key observations:
- persistent has the highest risk-adjusted return (Sharpe 6.10) but the lowest absolute return. Its extreme kurtosis (40.7) and positive skew (+3.34) suggest a strategy with frequent small gains and rare larger moves — consistent with a market-neutral or carry strategy.
- pareto_diophan is the highest absolute returner (89.4% ann.) but carries the most risk (34.8% vol, -19.1% max DD). Negative skew (-0.90) flags left-tail concern.
- quantstrat sits in the middle on both return and risk, with very high kurtosis (32.3) indicating fat tails despite near-zero skew.
Correlation Matrix
| pareto_diophan | persistent | quantstrat | |
|---|---|---|---|
| pareto_diophan | 1.000 | 0.007 | 0.048 |
| persistent | 0.007 | 1.000 | 0.178 |
| quantstrat | 0.048 | 0.178 | 1.000 |
Interpretation: Pairwise correlations are very low (all < 0.18). This is excellent — the three managers offer genuinely independent return streams. The diversification ratio of 1.61 confirms meaningful portfolio-level risk reduction.
3. Optimal Weights — Risk Parity (Equal Risk Contribution)
| Manager | Weight | Risk Contribution |
|---|---|---|
| pareto_diophan | 10.72% | 33.3% (target) |
| persistent | 66.59% | 33.3% (target) |
| quantstrat | 22.69% | 33.3% (target) |
| Total | 100.00% | 100.0% |
Rationale: Risk parity was selected as the default method because (a) we have no strong alpha views to justify mean-variance, and (b) the goal is to equalize marginal risk contributions across managers. The optimizer allocates heavily to persistent (66.6%) because its volatility is 8x lower than pareto_diophan — the only way to equalize risk contributions is to give it proportionally more capital. Anchor: [B5] Risk parity is the default when you don't trust expected returns.
Weight Comparison Across Methods
| Manager | Risk Parity | HRP | Equal Weight |
|---|---|---|---|
| pareto_diophan | 10.72% | 1.46% | 33.33% |
| persistent | 66.59% | 91.49% | 33.33% |
| quantstrat | 22.69% | 7.05% | 33.33% |
| Portfolio Metric | Risk Parity | HRP | Equal Weight |
|---|---|---|---|
| Ann. return | 33.24% | 26.82% | 48.01% |
| Ann. volatility | 6.19% | 4.21% | 13.05% |
| Sharpe ratio | 5.37 | 6.37 | 3.68 |
| Max drawdown | -3.27% | -1.32% | -6.53% |
Interpretation: HRP achieves the highest Sharpe (6.37) and shallowest drawdown (-1.32%) by concentrating even more into persistent (91.5%). Risk parity offers a better balance: Sharpe 5.37 with 33% return and only -3.27% max DD. Equal weight gives the highest return but the worst risk-adjusted performance due to pareto_diophan's volatility dominating.
4. Post-Optimization Diagnostics
D1: Effective Breadth (Inverse Herfindahl)
| Metric | Value | Flag |
|---|---|---|
| N_eff | 1.97 | CONCENTRATED |
| N (managers) | 3 | — |
| Herfindahl index | 0.506 | — |
| Concentration ratio | 0.66 | — |
Interpretation: N_eff = 1.97 means the portfolio behaves as if it holds ~2 independent bets rather than 3. This is structural — with persistent receiving 66.6% weight, the effective number of bets is reduced. However, with only 3 managers in the universe, this is not actionable. N_eff/N = 0.66 is reasonable for a risk-parity allocation with heterogeneous volatilities. Anchor: [B1 Eq 11.2] cc_B1_006 — effective number of stocks.
D2: Diversification Ratio
| Metric | Value | Threshold | Result |
|---|---|---|---|
| Weighted avg vol | 9.96% | — | — |
| Portfolio vol | 6.19% | — | — |
| Diversification ratio | 1.61 | >= 1.2 | PASS |
Interpretation: The portfolio captures a 38% volatility reduction from diversification. This is driven by the near-zero correlations between managers. A DR of 1.61 with only 3 managers is strong.
D3: Component VaR (99%, 252-day annualization)
| Manager | Weight | Marginal VaR | Component VaR | % Contribution | Flag |
|---|---|---|---|---|---|
| pareto_diophan | 10.72% | 0.4762 | 0.0510 | 53.6% | :warning: > 35% |
| persistent | 66.59% | 0.0502 | 0.0334 | 35.0% | borderline |
| quantstrat | 22.69% | 0.0479 | 0.0109 | 11.4% | OK |
| Portfolio | 100% | — | 0.0953 | 100% | — |
Interpretation: Despite only 10.7% capital weight, pareto_diophan contributes 53.6% of portfolio VaR due to its high volatility (34.8% ann.) and marginal VaR (0.476). This is the key risk concentration in the portfolio. The risk parity optimizer targets equal risk contribution in variance space, but Component VaR (parametric, 99% confidence) uses a different decomposition that highlights pareto_diophan's tail risk more aggressively.
Action item: If CIO is uncomfortable with 53.6% VaR contribution from a 10.7% position, consider (a) reducing pareto_diophan further, (b) switching to CVaR-based risk parity (rm='CVaR'), or (c) overlaying a tail-risk hedge. Anchor: [R3] cc_R3_003 — Component VaR for risk concentration monitoring.
D4: Robustness Check (100 Perturbation Trials)
| Manager | Original | Mean | Std | Min | Max | Range |
|---|---|---|---|---|---|---|
| pareto_diophan | 10.72% | 10.70% | 0.05% | 10.55% | 10.83% | 0.29pp |
| persistent | 66.59% | 66.62% | 0.13% | 66.28% | 66.93% | 0.65pp |
| quantstrat | 22.69% | 22.68% | 0.10% | 22.45% | 22.90% | 0.45pp |
| Metric | Value | Threshold | Result |
|---|---|---|---|
| Max weight range | 0.65pp | < 10pp | PASS |
| Max weight std | 0.13pp | — | — |
| Successful trials | 100/100 | — | — |
| Covariance condition number | 70.9 | — | well-conditioned |
Interpretation: The risk parity allocation is extremely robust. Under 10% noise perturbations to returns, the maximum weight shift is only 0.65 percentage points. This is far below the 10pp fragility threshold. The covariance condition number of 70.9 is well below problematic levels (>1000), confirming a well-conditioned estimation problem. Anchor: [R5, B2] Weight stability under perturbations — fragile if max Δ > 10pp.
D5: Conditional Correlation (Stress vs. Normal)
| Pair | Normal Corr | Stress Corr (Bottom 25%) | Delta |
|---|---|---|---|
| pareto_diophan / persistent | +0.007 | -0.399 | -0.407 |
| pareto_diophan / quantstrat | +0.048 | -0.094 | -0.143 |
| persistent / quantstrat | +0.178 | +0.129 | -0.049 |
Interpretation: Correlations decrease in stress periods — the opposite of the dangerous pattern. pareto_diophan becomes negatively correlated with persistent during drawdowns (r = -0.40), meaning persistent acts as a natural hedge when pareto_diophan sells off. No pairs show the dangerous pattern of rising correlation in stress. This is a highly favorable diversification profile.
5. Summary Judgment Table
| Decision | Inputs | Assessment | Source |
|---|---|---|---|
| Optimization method | N/T = 0.0055, no alpha views | Risk parity is appropriate. N/T allows any method but no views → RP | R5 |
| Diversification | N_eff = 1.97, DR = 1.61 | Adequate given N=3. DR > 1.2 confirms benefit. Structural concentration. | B1, B2 |
| Robustness | Max Δ = 0.65pp, cond# = 70.9 | ROBUST — weights are highly stable under perturbation | R5, B2 |
| Concentration risk | pareto_diophan = 53.6% VaR contribution | FLAG — disproportionate tail-risk contribution at 10.7% weight | R3 |
| Stress behavior | Correlations decrease in stress | FAVORABLE — natural hedging in drawdowns | R3 |
| Transaction costs | N/A (initial construction) | Monitor at rebalancing; corridor-based rebalancing recommended | R4 |
6. CIO Recommendations
Recommended Portfolio: Risk Parity Weights
| Manager | Allocation |
|---|---|
| pareto_diophan | 10.7% |
| persistent | 66.6% |
| quantstrat | 22.7% |
Expected portfolio characteristics (backtest):
- Annualized return: 33.2%
- Annualized volatility: 6.2%
- Sharpe ratio: 5.37
- Maximum drawdown: -3.27%
- Calmar ratio: 10.2
Action Items
-
VaR Concentration (pareto_diophan): The 53.6% VaR contribution from a 10.7% position warrants attention. Consider:
- Reducing to ~7-8% weight (accept lower return for lower tail risk)
- Running CVaR-based risk parity (
rm='CVaR') to explicitly minimize tail concentration - Implementing a stop-loss overlay on pareto_diophan (evaluate via Grossman-Zhou)
-
persistent Liquidity Check: With 66.6% allocated to persistent, verify that the strategy's liquidity terms (lock-up, gates, redemption frequency) support this concentration. A liquidity mismatch at 2/3 of portfolio would be critical.
-
Rebalancing Policy: Implement corridor-based rebalancing:
- pareto_diophan: ±2pp corridor (high vol → narrower band)
- persistent: ±5pp corridor (low vol → wider band)
- quantstrat: ±3pp corridor
-
Ongoing Monitoring: Re-run Phase 3 quarterly. Monitor for:
- Correlation regime changes (D5)
- Style drift in individual managers (rolling factor analysis)
- pareto_diophan drawdown exceeding -25% (stop-loss trigger evaluation)
Artifacts
| File | Description |
|---|---|
reports/portfolio/risk_parity_weights.json | Optimal weights |
reports/portfolio/risk_parity_weights.csv | Optimal weights (CSV) |
reports/portfolio/diagnostics.json | Portfolio-level diagnostics |
reports/portfolio/robustness_check.json | Perturbation test results |
reports/portfolio/nt_ratio_gate.json | N/T gate result |
reports/portfolio/component_var.json | Component VaR decomposition |
reports/portfolio/effective_breadth.json | Effective breadth metrics |
reports/portfolio/optimization_robustness.json | MCP robustness check |
output/ingest/phase3_merged_returns.csv | Aligned return series |