Skip to content

Navigation Menu

Sign in
Sign up
@bradca0
bradca0
Follow
Math + CS @ Columbia

Block or report bradca0

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
bradca0 /README.md

Brad Cao

Interested in quant research, market microstructure, statistical inference, and reproducible experiments. Always excited to meet other really ambitious people!


orderbook-sim — queue position vs. your backtest

Most backtests fill your order the moment a trade prints at your price. Real exchanges make you wait in a queue. I built an event-driven limit order book with exact price-time priority to price that assumption.

A strategy worth +214 ticks/episode under the standard assumption is worth +2.8 with the queue modelled. 98.7% of the edge was the assumption, not the strategy.

Market is synthetic but validated — 9/11 published stylized facts inside empirical bands, measured with the agent switched off. Paired bootstrap CIs, Holm–Bonferroni, deflated Sharpe charged for all 24 configs tried across development.

Python · NumPy · scikit-learn · 263 tests · 95.7% coverage · mypy --strict · CI


polymarket-pnl — is prediction-market skill real or variance?

Rebuilds per-wallet PnL from Polymarket on-chain activity and validates it against the exchange: 92% of positions match exactly, 43 of 51 wallets reconcile perfectly. Scores trader skill net of variance — population raw edge +0.126 collapses to −0.095 once shrunk, so the apparent edge is mostly luck.

Then backtests it point-in-time. The signal does not beat the price: Brier 0.2088 vs the market's 0.2046, ROI −3.3% after costs. That's the result, reported as-is.

Python · three public APIs, no auth · data and backtests, no execution


threshold — bigger models get worse, then better

Everyone learns that bigger models overfit. Past a certain size they stop. I swept model size through the interpolation threshold on MNIST and measured where the turn happens.

Test error peaks at exactly p = n — 88.8% there against 24.4% at five times the size — because the feature matrix goes nearly singular and the fitted weights blow up ×ばつ. A measured bias–variance decomposition puts 90.0% of the peak on variance, and a ridge penalty tuned per model size removes it entirely (0.888 → 0.123).

Ensembling was supposed to help and doesn't, at the threshold exactly. The members' output scales differ by ×ばつ there against ×ばつ beside it, so averaging is dominated by the worst-conditioned one. That's measured, not hand-waved.

NumPy float64 · one decomposition per model, reused for every ridge and diagnostic · 85 tests · 94% coverage · CI


induction-heads — switching off the part of GPT-2 that learns from context

An induction head looks back for the last time it saw the current token and predicts what came next. I scored all 144 heads in GPT-2 Small, found them, and turned them off.

Loss on a repeated random sequence goes from 0.23 to 7.83 nats with the top 4 ablated — while ablating 4 matched control heads in the same layers leaves it at 0.27. That's 86 standard errors of separation.

On aggregate in-context learning over natural prose the same ablation is much weaker (t = 1.19, not decisive), and the repo says so rather than leading with the number that looked better.

PyTorch · TransformerLens · verified against the reference HuggingFace models · CI


Notes

  • orderbook-sim's learned policy loses to a five-line heuristic. It's in the README.
  • Two of its stylized facts fail. Also in the README.
  • One modelling improvement was pre-registered, failed its acceptance test, reverted.
  • threshold predicted double descent would show up in a trained MLP too. It didn't, at that scale. The prediction was written down first, so the null result stands.
  • Every number in all four is regenerated from committed JSON by a make target, and CI fails if the prose and the results drift apart. None are typed by hand.

bradca0.vercel.app

Pinned Loading

  1. induction-heads induction-heads Public

    Locating the attention heads behind in-context learning in GPT-2, switching them off, and measuring what breaks — against matched-layer controls and bootstrap intervals.

    Python

AltStyle によって変換されたページ (->オリジナル) /