Skip to content
View aydinmonavvari's full-sized avatar

Block or report aydinmonavvari

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
aydinmonavvari/README.md

👋 Aydin Monavvari — Quantitative Finance Research Portfolio

BSc Financial Management (final year) · Quant Finance × Econometrics × AI · Building an honest, reproducible Python research portfolio for graduate study in quantitative finance / financial engineering / econometrics.

I build small, end-to-end research studies on real public data — each repository is a complete cycle: data acquisition with provenance → methodology → offline-tested code → real run with committed results → cautious interpretation with explicit limitations. I care as much about documenting what doesn't work as about positive results, because that is what honest research looks like.

Timeline. Built in a focused sprint (October 2026) and released as v1.0.0; individual repositories document their own methodology and limitations. No fabricated history.

⚠️ Scope. Everything here is educational research — a record of methods I studied and evaluated on public data. Nothing is investment advice, nothing is a production trading system, and I make no claim that any method here "beats the market." Several of my headline results are honest null results.


🔭 The portfolio (10 repositories)

# Repository Focus Headline (real, committed result)
01 finance-data-analysis-lab Returns/risk analytics & diagnostics on 7 large caps + SPY (2018–2026) JB rejects normality for all 8 series; log returns stationary (ADF); SPY Sharpe 0.82
02 macro-forecasting-lab US inflation & unemployment forecasting (FRED), rolling-origin evaluation Inflation h=1: all 7 candidate models significantly beat seasonal-naive under the corrected (h−1) HAC bandwidth (raw DM p ≤ 0.00035, survives the 28-comparison family correction) · unemployment h=12: no model significantly beats seasonal-naive and OLS is significantly worse — both reported honestly
03 ml-market-prediction-study Leakage-free walk-forward ML on SPY direction (2010–2026) Null result: no model beats the majority baseline (best ROC-AUC 0.502); GBM significantly worse (Holm p=0.011)
04 portfolio-optimization-lab Mean-variance, risk parity, tangency; walk-forward OOS net of costs Equal-weight 1/n wins OOS net of costs (net Sharpe 1.005 vs 0.957 max-Sharpe) — replicates DeMiguel et al. (2009)
05 credit-risk-modeling Probability of default (UCI, 30k rows): calibration, cost-based thresholds, fairness GBM ROC-AUC 0.778 (raw) / KS 0.416 (calibrated; raw-model KS 0.419); calibration is an instructive null on ranking metrics
06 fraud-anomaly-detection Fraud detection under extreme imbalance (seeded synthetic + documented Kaggle path) ROC-AUC misleads under imbalance: all models 0.87–0.94 ROC but PR-AUC spans ≈6.5× (best: RF 0.61, with a cost-optimal threshold 0.13 selected on a dedicated validation split)
07 dl-financial-time-series LSTM/GRU/CNN/Transformer vs baselines, strict walk-forward Null result: every AUC ≤ 0.50; no-signal control proves a leak-free harness
08 financial-nlp-sentiment Financial PhraseBank benchmark: VADER → TF-IDF → embeddings → FinBERT FinBERT 0.865 macro-F1 vs embeddings 0.733 (McNemar p=2.3e-07)
09 fin-rag-research-assistant RAG over Fed Beige Book: BM25 vs dense vs hybrid, grounded generation, refusal Held-out BM25 Recall@5 0.83 (dev 1.00) vs dense 0.33; τ calibrated on dev, evaluated held-out; documented hallucination + refusal-failure findings
10 🚩 finscope-ai-research Flagship workbench unifying the portfolio's methods end-to-end Seasonal-naive beats OLS/ridge on inflation (direction-aware DM); tangency falls back in 31/31 OOS folds

Every repository ships with: an offline test suite (7–79 test functions per repository; 357 across the portfolio, recounted during the v1.0.0 remediation pass), ruff-clean code, GitHub Actions CI (light offline suites; heavy-model jobs documented per-repo), a 22–23-section README, a 13-section research report, real committed results (reports/), figures, CITATION.cff, MIT license.


🚩 Flagship: finscope-ai-research

The capstone that ties the portfolio together: a modular research workbench running the full cycle — ingestion (yfinance/FRED) → diagnostics → forecasting study → portfolio construction → VaR/ES risk reporting → an evidence-first research brief with a mandatory limitations section. It is explicitly not a trading system: it is a harness for evaluating methods and reporting findings honestly.

🧭 Methods I have implemented and evaluated

  • Statistics & econometrics: Jarque-Bera, ADF/KPSS, Ljung-Box, OLS/ridge, ARIMA/SARIMA, Diebold-Mariano with multiple-testing correction (Holm), rolling-origin backtesting (Tashman)
  • Machine learning: logistic/ridge/GBM/XGBoost/random forests, calibration (Platt/isotonic), cost-sensitive thresholds, permutation importance, McNemar tests
  • Deep learning: LSTM, GRU, temporal CNN, small Transformer encoders (CPU-reproducible), early stopping, no-leakage walk-forward
  • Portfolio theory: mean-variance (SLSQP), risk parity (cyclical coordinate descent), tangency + fallbacks, Ledoit-Wolf shrinkage, transaction-cost-aware backtests
  • Risk: historical/Gaussian VaR & ES, drawdown analysis
  • NLP/LLM: FinBERT, sentence embeddings, VADER, RAG (BM25/dense/RRF hybrid), citation-grounded generation, refusal policies, hallucination measurement
  • Engineering: pytest offline suites, ruff, GitHub Actions CI, deterministic pipelines, data provenance records, reproducible figures/reports

🔬 Research integrity rules I hold myself to

  1. No fabricated data, results, or references — every number in a README comes from a committed pipeline run.
  2. Cautious language — "evaluating whether…", "no reliable edge found", never "AI predicts the market".
  3. Strict chronology in time-series evaluation (no shuffling; embargoed walk-forward) and leakage controls verified by no-signal controls.
  4. Costs and limitations included — transaction costs, multiple-testing caveats, proxy-metric warnings.
  5. Real data with provenance (FRED, Yahoo Finance, SEC/EDGAR, World Bank, UCI, Federal Reserve) — and documented pivots when sources become unavailable.

📄 Documents

📫 Contact


© 2026 Aydin Monavvari · Code: MIT · Documents: CC BY 4.0

Pinned Loading

  1. finscope-ai-research finscope-ai-research Public

    Flagship research workbench: end-to-end financial research cycle on real public data — ingestion, diagnostics, honest forecasting study, portfolio construction, risk reporting.

    Python

  2. macro-forecasting-lab macro-forecasting-lab Public

    Chronological-validation forecasting of US inflation & unemployment (FRED): ARIMA/SARIMA vs ML against honest baselines, with Diebold–Mariano testing

    Python

  3. ml-market-prediction-study ml-market-prediction-study Public

    Leakage-free walk-forward study of ML signal in daily index direction: honest baselines, McNemar+Holm testing, permutation control, cost-adjusted backtest

    Python

  4. portfolio-optimization-lab portfolio-optimization-lab Public

    Mean-variance and risk-parity portfolio optimization with Ledoit-Wolf shrinkage and a leakage-free walk-forward evaluation (estimation error, quantified)

    Python

  5. credit-risk-modeling credit-risk-modeling Public

    Probability-of-default modeling (UCI credit default): calibration, cost-based thresholds, ROC/PR/KS evaluation, permutation importance, fairness diagnostics

    Python

  6. fin-rag-research-assistant fin-rag-research-assistant Public

    Retrieval-augmented QA over Federal Reserve Beige Book reports: BM25 vs dense vs hybrid retrieval, citation-grounded generation with a local 0.5B LLM, and an explicit refusal policy (with documente…

    Python 1