Methodology
How portfolios are built, tracked, and evaluated
Overview
LLM Portfolio Lab tracks hypothetical equity portfolios constructed from the publicly disclosed stock picks of major large language models. Each portfolio is evaluated using standard quantitative finance methods including daily NAV tracking and Fama-French factor regression.
Portfolio Construction
- Each portfolio represents a set of ETF and stock allocations attributed to a specific LLM (e.g. ChatGPT, Claude, Gemini).
Daily NAV is computed as:
All portfolios start at a base value of $100. The first day return is set to zero so the NAV begins exactly at the base, and each subsequent day reflects the proportional price change of each holding from inception.
Data Sources & Update Frequency
| Source | Data | Refresh |
|---|---|---|
| Yahoo Finance (yfinance) | Daily OHLCV price data | Daily on request |
| Ken French Data Library | FF5 daily factor returns | On /api/ff5/sync |
| SQLite (local) | NAV series, FF5 factors, regression results | Persistent cache |
Fama-French 5-Factor Regression
Each portfolio's excess return is regressed against the five Fama-French factors to decompose performance into systematic risk exposures and idiosyncratic alpha.
+ β₄·RMW(t) + β₅·CMA(t) + ε(t)
Implementation notes:
- Regression is run using statsmodels OLS with a constant term
- Minimum 30 trading days of overlapping data required
- Results stored in the ff5_regressions table in SQLite
- Cross-validated against numpy.linalg.lstsq; max coefficient difference < 1×10⁻¹⁰
Radar Chart Score Methodology
Raw factor loadings are normalized to a 0–100 scale for visualization in the radar chart on the Outlook page. Each factor's expected range is mapped linearly to [0, 100] then clamped.
| Axis | Source | Raw Range | Formula |
|---|---|---|---|
| Market Beta | β_mkt | 0.5 – 1.5 | (β − 0.5) / 1.0 × 100 |
| Size Tilt (SMB) | β_smb | −0.5 – 0.5 | (β + 0.5) / 1.0 × 100 |
| Value Tilt (HML) | β_hml | −0.5 – 0.5 | (β + 0.5) / 1.0 × 100 |
| Profitability (RMW) | β_rmw | −0.5 – 0.5 | (β + 0.5) / 1.0 × 100 |
| Investment (CMA) | β_cma | −0.5 – 0.5 | (β + 0.5) / 1.0 × 100 |
| Alpha (annualized) | α × 252 | −5% – +5% | (α_ann + 0.05) / 0.10 × 100 |