Highlights Experience Projects Skills Education Certifications Get in touch ›

Rishik Kasula

ML & data engineering. Shipped and measured.

ML and data systems, measured honestly — in dollars, against SEC filings, by what they prevent. Every project number on this site traces to a public repo.

Get in touch Download Resume Get the highlights ›
Rishik Kasula

Get the highlights.

Three shipped systems.

fraudscore, filinglens, tickflow — public repos that grade themselves against verifiable ground truth and publish the intervals.

Graduate research.

~3,500 lines of verified code on RefExp — structural explainability for code refactorings, built on Joern and RefactoringMiner.1

M.S. Computer Science.

Data Science concentration at UNC Charlotte. 3.80 GPA. Eight A's across ten graduate courses.

Industry pipelines.

Kafka + ZooKeeper real-time ingestion and Power BI dashboards for banking IT at Inspirisys Solutions.

Verified credentials.

8 certifications — AWS Data Engineering, DeepLearning.AI mathematics, IBM Python, Docker. All independently verifiable.

Experience

Research. Teaching.
Real pipelines.

Two graduate appointments at UNC Charlotte and an industry internship in Chennai — each one shipping working systems, from a research pipeline over code property graphs to real-time data ingestion in banking IT.

Jan 2026 — May 2026

A big leap for refactoring.

Graduate Research Assistant · RefExp · UNC Charlotte, College of Computing & Informatics · PI: Prof. Rrezarta Krasniqi, Ph.D.

Existing tools detect that a refactoring happened. RefExp answers the structural question none of them do: which other changes in the same commit are connected to it — via call paths, shared types, or data flow — built over RefactoringMiner and Joern Code Property Graphs. Joint research with a second RA — the contributions below are git-verified as mine.

Roughly
0
lines of verified contributions1
Repaired scores across
0
evaluation rows — 3 Joern bugs fixed
A
0
LOC influence-clustering module, solo-authored
MI-derived dynamic scoring. Designed an information-gain weight-derivation module with adaptive discretization for zero-inflated MI estimates, integrated into the composite influence score.
Influence clustering. A multi-level post-narrowing step that reduces raw ranked output to a compact, explainable subset — authorship corroborated in the co-RA's integration commit.
Pipeline automation. A single-command pipeline runner (573 LOC) and terminal results display (710 LOC) — turning a multi-step research workflow into one command.
LLM explanations. Authored an LLM-based refactoring-explanation module on a feature branch, plus evaluation tables, an annotation guide, and a literature review.
PythonJoern / CPGRefactoringMinerMutual informationGit-diff parsing
Sep 2025 — Dec 2025

Teaching the engineers of AI.

Instructional Assistant · ITIS/ITCS/DSBA 6010/8010, Software Engineering for AI-Enabled Systems · UNC Charlotte · Prof. Rrezarta Krasniqi, Ph.D.

Supported a graduate course spanning ML/DL model development, architecture for AI systems, data quality and provenance, explainability, and testing for AI. Weekly office hours; guided teams through a six-deliverable, GitHub-based research project — proposal to data collection to training, evaluation, and final report — and assisted with grading across the weekly paper-reading series.

Jan 2024 — May 2024

Real-time data. Real bank.

Intern · Inspirisys Solutions Ltd. · Chennai, India · Internship credit graded S — Outstanding2

Implemented an Apache Kafka + ZooKeeper pipeline architecture for real-time ingestion in a banking-IT context. Built Power BI dashboards tracking banking-IT KPIs. Deployed PrivateGPT in two modes — fully local LLM and OpenAI-API-backed — with Hugging Face, CUDA, and Poetry on Windows 11.

Apache KafkaZooKeeperPower BIPrivateGPTHugging FaceETL
Projects

Measured. Not asserted.

The three shipped projects share one thesis: a system should evaluate itself against verifiable ground truth — and publish what that evaluation actually shows, intervals and failures included. fraudscore prices fraud decisions in dollars with calibrated probabilities. filinglens grades LLM extraction against companies' own XBRL filings. tickflow is a streaming quality gate measured by the corrupted bars it prevents. Each has a full case study below; earlier academic work follows in brief.

Machine Learning · Live on GitHub

fraudscore

Shipped · v1.0.0
Fraud decisions in dollars. Not accuracy.

A calibrated card-fraud scoring service that prices every decision: a transaction is reviewed when fraud probability × amount exceeds the cost of reviewing it. Served over FastAPI, evaluated on a chronological hold-out in dollars with bootstrap confidence intervals. One honest finding worth reading: a plain logistic model beat gradient boosting under honest chronological evaluation.

$84.87
saved per 10k transactions vs the best single threshold3
~13%
cheaper than the single-threshold policy
v1.0.0
released · CI green · MIT
Pythonscikit-learnFastAPIDuckDBDockerBootstrap CIs
View code ›
LLM Evaluation · Live on GitHub

filinglens

Shipped · v0.1.0
The company's own filing grades the model.

An evaluation harness measuring whether small local LLMs can be trusted to pull financial figures out of SEC 10-Ks. The trick: every US filer publishes its numbers twice — prose and structured XBRL — so the filing grades the extraction automatically, no human answer key. A 600-call deterministic grid (10 filers × 5 KPIs × 3 local models × 2×2 strategy ablation), every failure hand-labeled. It ships a measurement, not an extractor.

87.8%
llama3.1-8B on headline figures, statements in context [95% CI 81.5–93.8]4
600
graded calls — 588 scored, 12 excluded as no-ground-truth
230
failures hand-labeled into a six-label taxonomy
PythonOllamaXBRL / EDGARBM25Cluster bootstrapmypy strict
View code ›
Streaming Data Quality · Live on GitHub

tickflow

Shipped · v0.9
A quality gate measured by what it prevents.

A contract-enforcement layer for Kafka-compatible streams: declarative per-topic contracts (Avro + six semantic rules in YAML) enforced inline, violations quarantined with self-describing envelopes, a downstream bar builder protected by a measurable SLO. Every quality claim is graded by seeded fault-injection replay against a ground-truth manifest in CI — deliberately uncatchable faults counted as misses, not excluded. All results are fixture-scale, and labeled as such.

0 vs 1,076
violated bars of 15,061 — gates on vs off, fixture-scale5
1,677
labeled faults planted by the seeded injector
99.4%
coverage on core modules · 194 tests · mypy strict
Python 3.12Kafka / RedpandaAvroDuckDBBootstrap CIsGitHub Actions
View code ›
Case studies

The full story behind each shipped system — problem, approach, measured result, and the honest caveat. Click to expand.

fraudscoreThe right threshold is a price.+
ULB card-fraud dataset · 284,807 transactions, 0.172% fraud · chronological train/calibrate/test split
Problem. Most fraud models ship an uncalibrated score and a 0.5 threshold. But a missed $800 fraud and a missed $8 fraud are not the same mistake — accuracy can't see the difference; dollars can.
Approach. Train plain, calibrate on a held-out split, then decide per transaction: review when p̂ × amount ≥ the $10 review cost. No fitted threshold — the economics are the threshold. A tuned single-threshold policy serves as the baseline.
Measured result. The amount-aware rule saved $84.87 per 10,000 transactions against the best single-threshold baseline — about 13% cheaper — with a bootstrap 95% CI of $20.08 to $187.47.3 Wide interval, stated plainly: 75 frauds in the held-out test split is a small sample, and pretending otherwise would be the real error.
The honest finding. Under chronological evaluation, plain logistic regression beat gradient boosting. Boring models with honest evaluation over exciting models with leaky evaluation — that result stayed in the README.
Isotonic / Platt calibrationExpected-cost decisionsCluster bootstrapFastAPI serving
Read the code and eval report ›
filinglensGround truth is already filed.+
10 large-cap us-gaap annual filers · 5 KPIs · llama3.1-8B, qwen2.5-7B, llama3.2-3B · temp 0, seeded, weights digests pinned
Problem. Teams that must run LLMs on-prem need to know whether a small local model can be trusted on financial documents — and you can't benchmark that on confidential documents in public. Nobody had graded local models on extraction against XBRL at scale.
Approach. SEC filings state every figure twice — as prose and as machine-readable XBRL — so the harness resolves each KPI through a frozen tag chain and grades the model against the number the company itself asserted. A blocking sanity gate verified the XBRL-to-text linkage (10/10) before any model ran; a preflight guard refuses to spend calls on an invalid context.
Measured result. With the financial statements already in the model's context, llama3.1-8B extracts headline figures at 87.8% [95% CI 81.5–93.8]; qwen2.5-7B lands at 50.5% [40.8, 60.5] and llama3.2-3B at 44.4% [35.6, 53.6] — and the gap between those two is statistically inconclusive, printed in that word in the report. Statements-section context beats BM25 retrieval by 15.6 pts [9.0, 22.3]; schema-constrained output beats free-form by 4.8 [1.3, 8.5]. CIs from a cluster bootstrap by company, B = 10,000.4 This is extraction with the document supplied — not comparable to any reasoning benchmark, and the README says so before its first number.
The failure taxonomy. All 230 failures hand-labeled into six categories. The dominant mode: right digits, wrong scale — qwen2.5-7B drops to 7.5% [0.0, 15.0] on diluted EPS, with correct digits and a mis-tagged scale in 32 of 37 failures. Two harness-invalidating bugs were caught and ADR-documented along the way, one fixed against the grader's own favor.
XBRL ground truthCluster bootstrap by company2×2 strategy ablationHand-labeled taxonomy
Read the code and eval report ›
tickflowGreen gates prove nothing.+
Kafka-compatible streams · 100,477-frame seeded fixture, 1,677 labeled faults · all results fixture-scale · v0.9 · MIT
Problem. Streaming quality gates are usually asserted, not measured — "we validate messages," with no number for what would have gone wrong without the gate. And a check that has never failed looks identical to a check that cannot fail.
Approach. A seeded injector plants 1,677 labeled faults — boundary probes and deliberately uncatchable misses included — into a checksum-pinned 100,000-message synthetic fixture, producing a ground-truth manifest the real engine is graded against in CI on every push. Value is measured by prevention: the same faulted fixture through the same bar builder, gates on vs gates off.
Measured result (fixture-scale). Gates on: 0 violated bars of 15,061; gates off: 1,076 — with gates-on bars bit-identical (SHA-256) to the ground-truth valid projection.5 Duplicate recall is 0.8407 [0.8071, 0.8721], below 1.0 by design: planted beyond-window duplicates count as misses rather than being excluded. The perfect-looking 100% rows are the ones the README tells you to read skeptically.
The honest finding. Found and fixed three release gates that looked green but could not fail — by planting violations and demanding a block. A measured throughput figure was removed, not caveated, after varying 1.6× between runs on the same CI runner class: a number whose spread exceeds its signal measures the machine, not the code. And the quarantine-replay CLI was cut under a pre-frozen slip valve — which is why the release says v0.9, stated rather than hidden.
Seeded fault injectionEvent-time watermarksBit-identity (SHA-256)Two-denominator false-quarantine6 ADRs
Read the code and telemetry ›
Earlier work
RefExp — structural explainability for code refactorings
Graduate research over Joern code property graphs and RefactoringMiner · UNC Charlotte · detailed under Experience
AI Express Pay — offline product-recognition checkout on a Raspberry Pi
Edge Impulse transfer learning, fully on-device inference, QR-based UPI payment · B.Tech capstone
Skills

New dimensions in data.

Every skill below is backed by shipped code, graduate coursework, or a verified certification. Nothing padded. Nothing borrowed.

Python. Home turf — 3,500+ LOC of research contributions, ML projects, and pipeline tooling. With SQL for analytics, plus Java, C, and JavaScript.
PythonSQLJavaCJavaScript
Machine learning. Classical ML, feature selection, and optimization with a research bent toward explainability.
scikit-learnPandasNumPySVMGA / PSOMutual information
Data engineering. Real-time ingestion and ETL in industry; AWS data tooling at certification level.
KafkaZooKeeperETLAWS GlueS3
Code intelligence. Static and structural analysis from graduate research — code property graphs, refactoring detection, git-diff analysis.
Joern / CPGRefactoringMinerGit-diff analysis
LLMs & local AI. Local and API-backed LLM deployment — a fully local PrivateGPT install in industry, and local models served via Ollama for evaluation in filinglens. Separately, prototyped an LLM explanation module on a feature branch in research.
PrivateGPTOllamaHugging FaceOpenAI API
Analytics, tools & edge. Power BI in industry; containers to microcontrollers on the side.
Power BIDockerGitpytestFastAPIRaspberry PiArduino
Education

GPA. All-time high.

3.80

M.S. Computer Science
Data Science Concentration

University of North Carolina at Charlotte · May 2026
8 A's across 10 graduate courses — AI, Big Data Analytics, Visual Analytics, Knowledge Discovery, Database Systems, Information Security
8.31/10

B.Tech Computer Science & Engineering
Networking & Security

VIT-AP University, Amaravati, India · May 2024
163 credits · Top grade (S) in Raspberry Pi with Python and the industry internship credit
Certifications

Credentials? Verified.

All certifications independently verifiable via Credly, Coursera, and Cognitive Class.

Contact

Hiring? Let's talk.

Open to ML and data engineering roles. Based in Charlotte, NC — happy to relocate or work remote.

1. Contribution volume verified against git commit history (author-attributed commits, RefExp v1 repository), corroborated by the co-RA's integration commit.

2. Internship credited as BIC4002 (10 credits) at VIT-AP University, graded S (Outstanding).

3. Measured on the held-out chronological test split of the ULB dataset; percentile bootstrap, B = 10,000, seeded. Full methodology and eval report in the fraudscore repository.

4. filinglens: headline-figure extraction with the financial statements already in the model's context; N = 10 large-cap us-gaap annual filers; cluster bootstrap by company, B = 10,000, seeded. Extraction with the document supplied is the easy end of the task — not comparable to any reasoning benchmark. Full methodology in the filinglens eval report.

5. tickflow: all figures are fixture-scale — produced from a committed, checksum-pinned synthetic fixture with a chosen ~2% fault mix, never live traffic. The project publishes no throughput or latency figure. Provenance for every number in the repository's committed telemetry artifact.