Two clusters, one covariance

The tail a covariance cannot see — and what a race does about it.

Twelve synthetic assets. Cluster A is five names with Gaussian dependence. Cluster B is five names with a Clayton copula: they crash together — their joint lower tail is far heavier — but are constructed to have exactly the same marginals (standard normal) and the same pairwise correlation as cluster A, at every position of the slider. Two independent names round out the field. Any allocator that is a functional of the covariance is provably identical on the two clusters here: minimum variance, risk parity, HRP, Schur, and the Gaussian race all see two copies of the same block. The difference between the clusters is real — B's five names all fall by more than 1σ on the same day two to three times as often as A's — but it lives entirely above the second moment.

Try it: deepen the joint tail

The slider sets B's lower-tail dependence λL; A's Gaussian correlation is re-matched at each step so the two clusters' correlation matrices agree to within 0.004 (verified at build time; the shared correlation is shown in the readout). The tail-driven race — the Thurstone portfolio driven by the actual simulation rather than its correlation summary — is the only line that separates.

0.06 — barely tail-dependentcrashes as one — 0.96

What this shows

The two flat line-pairs are the covariance-based allocators: minimum variance, and the Gaussian race driven by the empirical correlation of the very same simulation. Each assigns clusters A and B the same weight at every λL — necessarily, since the inputs they are permitted to read are identical between the clusters. The race driven by the simulation itself gives cluster B up to a quarter less weight than its statistically indistinguishable twin: in the states that decide the extreme, B's five names behave as one or two names, and the race prices that effective headcount. This is the tail-consistency property: the effective number of bets is state-dependent — five in calm markets, closer to one in a crash — and a covariance, which averages over states, cannot represent the collapse.

Two honest notes. First, the shared within-cluster correlation rises along the slider (heavier joint tails at fixed margins force it); the comparison at each position is A versus B, which is exact. Second, in practice one rarely simulates the true tail: driving the race with a downside (lower-partial-moment) covariance recovers most of this effect, and the full tail-dependent simulation is the exact limit — that trade-off is quantified in the paper.

Reproducible: experiments/gen_tail_consistency_data.py builds the embedded weight curves with the allocation package (transport_weights for the Gaussian race; the loss-side argmin race for the tail-driven weights; correlation matching verified numerically). The scatter clouds are sampled live in the browser. Theory: the tail-consistency proposition in the paper.