← Home
Research

Results and findings.

Selected work with methods, metrics, and the actual outcomes, including the ones that did not go as planned. I treat negative and unexpected results as findings worth reporting, not noise to hide.

Bard College · Undergraduate Senior Project · Sep 2025 to Apr 2026 · advisor recommended for journal submission

Distributional Forecasting with GANs

I asked whether borrowing TimeGAN's autoencoder structure and adding attention could improve a financial GAN's distributional forecasts of ETF excess log returns. The answer turned out to be no, and working out why was the part that mattered.

Method
  • Architecture. Extended FinGAN with TimeGAN's embedder and recovery network, plus attention over the latent context vector.
  • Training. Two phases: autoencoder pre-training with Gradient Norm Matching, then adversarial fine-tuning under combined Sharpe and PnL losses.
  • Data. Sharadar prices through ArcticDB, covering 28 equities across 9 sectors.
  • Benchmarks. FinGAN, LSTM-Fin, ARIMA, and Ridge AR(10), evaluated on Sharpe, PnL, directional accuracy, and distributional metrics.
  • Validation. A layer of statistical tests on the generated return distributions, challenging the model's distributional accuracy directly rather than assuming it. The full battery is detailed in the Evaluation, Baseline, and Diagnostics section of the thesis.
Key findings

The TimeGAN extension degraded out of sample performance against the FinGAN baseline rather than improving it. The added structure did not help on this data.

The reference FinGAN codebase held an implementation error that understated its reported Sharpe ratios. Correcting it produced a stronger and more honest baseline than the published one.

Results
ModelSharpe
FinGAN (corrected baseline)+3.17
This work (TimeGAN extension)+1.083
LSTM-Fin+1.370
ARIMA+0.642
Ridge AR(10)+0.227

Reported on held out data across 28 equities in 9 sectors.

Poster
Inline PDF preview is not supported in this browser.
Open the poster (PDF) →
The senior project poster: architecture, benchmarks, and key findings on one page. Open full size →
TensorFlow / KerasGANsTimeGANArcticDBTime Series
Independent Project · PCA-Based Risk Models for U.S. Equity Portfolio Construction

PCA as a Covariance Filter, Not a Labeler

I applied PCA and clustering to daily S&P 500 returns from 2000 to 2026 to ask two things: does unsupervised clustering recover the GICS sector taxonomy, and does the resulting risk model beat standard baselines on a risk adjusted basis. The headline result was one the project prospectus did not predict. PCA wins, but as a covariance filter feeding a minimum variance optimizer, not as a cluster labeler.

Method
  • Universe. Survivorship bias free, point in time S&P 500, roughly 1,099 historical members across 290 monthly rebalances, with prices from Sharadar stored in ArcticDB.
  • Residual panels. Three input panels, raw returns, a CAPM market residual, and a sector beta residual, to separate market, sector, and idiosyncratic structure.
  • Walk forward PCA. Refit each month on a trailing 252 day window, with the Marchenko-Pastur edge setting how many principal components count as real factors rather than noise.
  • Clustering and portfolios. Compared k-means, Ward, average, and single linkage against GICS, then built and benchmarked nine portfolios, from naive cluster picks to minimum variance on a filtered covariance matrix.
Three correlation matrices side by side, showing mean off-diagonal correlation falling from 0.30 on raw returns to 0.09 after the market residual and 0.06 after the sector residual
Figure 1. The residualization at work. Mean off diagonal correlation falls from 0.30 on raw returns to 0.09 once the market is stripped, leaving the GICS sector blocks visible, and to 0.06 once the sector is stripped, leaving mostly noise.
Key findings

Clustering on market residualized returns partially recovered GICS sectors at an Adjusted Rand Index of 0.244, real but limited agreement reached with no information about company business lines. Stripping the sector signal too dropped agreement roughly fivefold, confirming the residualization did what it was designed to do.

The naive one stock per cluster portfolios underperformed every baseline, including plain equal weight. The winner was minimum variance on a Marchenko-Pastur filtered covariance matrix, at Sharpe 0.94 against 0.51 for equal weight, with the lowest drawdown of the set. PCA's real value here is as a covariance filter.

Results
0.94
Sharpe, Marchenko-Pastur filtered minimum variance
0.51
Sharpe, equal weight baseline
-32%
Max drawdown for the winner, against -87% for equal weight
PortfolioCAGRVolSharpeMax DD
Best cluster portfolio+11.0%27.1%0.41-121%
Equal weight S&P 500+10.5%20.8%0.51-87%
GICS stratified+10.8%20.6%0.53-84%
HRP (Lopez de Prado)+10.3%16.7%0.61-66%
MV, cluster filtered (Tola)+8.2%12.8%0.64-46%
MV, RMT filtered (this work)+10.4%11.1%0.94-32%

Selected portfolios from the nine tested, monthly rebalance, 2002 to 2026.

Cumulative log return and drawdown for the baseline portfolios from 2002 to 2026, with the RMT filtered minimum variance portfolio showing the shallowest drawdowns
Figure 2. Cumulative return and drawdown across baselines. The RMT filtered minimum variance portfolio (green) matches the market on return while taking far shallower drawdowns through the 2008, 2020, and 2022 stress periods.

A crisis period check supports the same conclusion: the RMT filtered portfolio's predicted risk contributions tracked its realized losses more reliably than any baseline across both the 2020 and 2022 drawdowns. The number of real factors itself compresses during crises, falling from roughly 18 to as few as 11, which the walk forward pipeline captures directly.

Number of statistically real principal components over time, dropping sharply during the 2008, 2020, and 2022 crisis periods
Figure 3. How many real factors live in the data over time. The count drops during the 2008, 2020, and 2022 stress periods, the regime compression effect, with crisis markers shown.
PythonNumPyPandasscikit-learnRandom Matrix TheoryArcticDBBacktesting
Bard College · ASCLab · Research Assistant · Jun 2024 – Aug 2024

Algebraic Computation and Knot Theory

Co-developed a Prolog program to determine the decidability of the unification problem on right quasi terms, letting users input algebraic expressions and compute valid substitutions. Also contributed to classifying knots from the Tait-Rolfsen table by formulating algebraic colorings and exploring tractability.

PrologAlgebraTheory