Skip to content

● Quant · ML · Credit risk  /  NWU Potchefstroom, ZA

Tjay Burger

I build models for decisions under uncertainty. Credit scorecards written from scratch, causal uplift models, quantile volatility forecasts for JSE banks. Each one tested against the ways it can fail.

01 · Work

Every metric comes from the repo it links to. Where a repo has no committed result, the page says so. The particles behind each chapter are built from the same data or formula.

01/05Credit scorecard · ML

Two WOE scorecards on 307,511 real applications, one with bureau data and one without. The interesting part is where they disagree.

Holdout AUC, bureau scorecard
0.737
Gini
0.473
Holdout in the inclusion gap
14.7%
Illustrative missed lending
≈R4.9bn
Holdout default rate by agreement segment● repo data

From the repo README, seed 42 holdout. Hover a bar for the rate.

02/05Causal inference · ML

Who changes because you treated them? T-learner vs CausalForestDML on a real email RCT, then on synthetic credit data where the true effect is known.

corr(pred, true CATE), causal forest
0.927
PEHE, causal forest
0.0015
Persuadables in its top decile
100%
Qini, T-learner on Hillstrom
7.74
Qini curves, T-learner vs CausalForestDML● repo data

Real curves from dashboard/public/data/phase1.json and phase2.json. Toggle the phase.

Qini coefficient: T-learner 91.34 · CausalForestDML 87.66

03/05Volatility forecasting · Quant

Distributional forecasts of 5-day realized volatility for six JSE banking groups. A band, not a point, scored with pinball loss and coverage.

JSE banks: SBK, FSR, ABG, NED, CPI, INL
6
Quantiles forecast
q10 · q50 · q90
Horizon, annualized RV
5d
Target interval coverage
80%
Pinball loss, the scoring rule behind every forecast● repo data

Drag τ. This is the loss function from the repo's methodology, plotted exactly. No model output.

Lτ(y, q) = max(τ(y − q), (τ − 1)(y − q)). At τ = 0.90, under-forecasting volatility costs 9.0x as much as over-forecasting by the same amount.

04/05Market regimes · Quant

Labels the current regime for crypto, US ETFs and JSE stocks from volatility, trend and drawdown, then has an LLM explain the structured output, never predict prices.

Assets: BTC, ETH, SOL, SPY, QQQ, NPN, SOL.JO, SBK, MTN
9
Trend-strength threshold
±3%
Drawdown regime cut-offs
−5/−10/−20%
KMeans clusters (optional)
4
The regime classifier, live● repo data

Move the sliders. The labels follow the exact rules in models/regimes.py.

risk_regime

medium_volatility_sideways

volatility
medium
trend
sideways
drawdown
normal

05/05Data engineering · Quant + ML

How long do South African job listings really stay open? A daily scraper over ten employers' career sites, POPIA-safe by design, running at R0.

Employers, 5 Workday + 5 SuccessFactors
10
Scrapes returned ok
336/340
Days of daily runs
34
Infrastructure cost
R0
Open listings per employer, daily● repo data

From history/runlog.json. Gaps are failed scrapes. Click an employer to isolate it.

02 · Approach

How the work is built

Credit and market risk punish confident mistakes. So the order is fixed: explain the model, try to break it, then put it behind an API.

  1. 01

    Interpretable first

    Start with a scorecard a committee can sign: WOE bins, IV, points, PDO. If a black-box model wins, it has to win on the same features, with SHAP showing where.

  2. 02

    Causal when the decision is a treatment

    Default classifiers answer the wrong question for limit increases, collections, and offers. Uplift models answer who the treatment moves, and who it harms.

  3. 03

    Shipped, not notebooked

    FastAPI, Streamlit, or a Vercel front-end. The model is not done until someone who is not me can run an applicant through it.

Default rate by scorecard agreement · Home Credit holdout

The inclusion gap defaults at 12.1%. Riskier than agreed accepts, far safer than agreed rejects. A bureau-only model treats them as one group.

03 · Quant projects

Smaller work

A hackathon trading agent and two university group projects. Less polish than the case studies, same rule about numbers.

  • Options agent on the volatility risk premium

    Hackathon build, paper trading only. Sells premium when implied vol is more than 2 points above 20-day realized vol, buys when it is cheaper, and sits out in between. A separate risk gate prices spreads at worst-case fills and caps loss at 2% of equity per trade. In a proxy backtest on six tickers over about 2.1 years, vol mean-reverted after 67.9% of 53 sell signals and 58.0% of 69 buy signals. No options P&L is claimed.

    • alpaca-py
    • Volatility
    • Risk gate
  • SO₂ across 41 US cities

    STTN327 group project, five people, and I led it. I built the mixed-effects and random forest models and presented the comparison.

    • Mixed effects
    • Random forest
    • R
  • Ride-hailing cancellations in SQL

    CMPG321 research project. I wrote the SQL behind a study of trip cancellations, safety metrics and fleet quality.

    • SQL
Portrait of Tjay Burger

04 · Contact

Tjay Burger

Final-year BSc Computer Science and Statistics at North-West University, Potchefstroom. Exams finish 16 November 2026. Moving to the Western Cape and looking for junior quant, ML or credit-risk roles in Stellenbosch, Cape Town or remote. Python, R and SAS, plus SQL.

tjayburger2004@gmail.comMore about how I work