Kechun Wu (KUH-chwun)

I study economics and computer science at Duke. At UBS Global Markets this summer I built a pre-open market dashboard that 30+ traders and salespeople used before each open. Now I build research tools that check their own numbers before they show them.

Email · LinkedIn · GitHub · Resume (PDF)

Selected work

Earnings Desk

How often can you trust an AI-written earnings note?

Finding: across 50 company-quarters and 1,001 claims, 99.6% of 734 numeric claims checked out: 494 of 497 recomputed from the SEC’s XBRL data, and 237 figures with no XBRL equivalent (non-GAAP, guidance) found as stated in the cited press-release paragraph. Quotes were weaker: 85.7% of 70 matched the press release word for word. As a test of the verifier’s own logic, it caught all 1,957 errors injected into verified claims.

A language model reads a company’s earnings release and writes a structured note in which every sentence is a claim tied to a source: an XBRL concept and period, or a numbered paragraph of the release. Then plain code, with no AI involved, checks each claim. Numbers are recomputed from XBRL, quotes must appear word for word, and every citation must point to a paragraph that exists and contains the claim’s figures.

Limitation: it reads filings and press releases, not earnings-call transcripts, so anything said only on the call is out of reach.

Watch it check a number. Palantir, FY2026 Q3 note · 8-K filed 2026-11-02

✓ Verified against XBRL

concept
RevenueFromContractWithCustomerExcludingAssessedTax
period
FY2026 Q3, ended 2026-09-30
filed value
$2,313,411,000
note says
$2.313 billion

10-Q for the quarter (accession 0001321655-26-000048) →

✓ Recomputed from XBRL

formula
OperatingIncomeLoss ÷ revenue × 100
period
FY2026 Q3, ended 2026-09-30
filed values
$1,084,845,000 ÷ $2,313,411,000
result
46.89%; note says 46.9%

10-Q for the quarter →

⚠︎ Mismatch: the note paraphrases a quote

Quotes must appear word for word. Paragraph P7 of the press release actually says:

“Our U.S. commercial revenue has surpassed our U.S. government revenue for the first time in our company’s history.”

Press release, Exhibit 99.1 →

◦ Sourced to press release paragraph P17

“Closed total contract value (“TCV”) of $2.918 billion, up 6% year-over-year”

Interpretive claims are checked for a real citation, not for whether the reading is fair.

Press release, Exhibit 99.1 →

✗ Unsupported: the number isn’t in the cited source

The note cites paragraph P19, which reports U.S. commercial remaining deal value of $6.517 billion. The figure $4.9 billion appears nowhere in it.

The fact itself is right: the 10-Q reports $4.9 billion at both June 30 and September 30. The citation is what fails, and a claim is only marked verified when its source supports it.

Press release, Exhibit 99.1 →

✓ verified · ⚠︎ mismatch · ◦ sourced · ✗ unsupported. Select a sentence to see its source.

python · pandas · sec edgar & xbrl apis · claude api · jinja2 · plotly.js · github actions & pages

AI Adoption Tracker

Do developer-adoption signals lead revenue for data-infrastructure companies?

Finding: no lead survives the pre-registered tests, but the data can’t rule one out. npm downloads move with revenue (r ≈ +0.5 with company fixed effects, flat across lags), mostly through a shared growth trend. Removing quarter-wide effects leaves a modest lead-shaped pattern (r ≈ +0.3 two to three quarters ahead) that doesn’t survive the correction for testing five lags. Company by company, 0 of 55 tests reach p < 0.05, and hiring-post share shows nothing at any lag.

The tracker lines up weekly npm and PyPI downloads, the share of Hacker News “Who is hiring?” posts that mention each tool, and GitHub activity against quarterly revenue from SEC XBRL for Snowflake, Datadog, MongoDB, Confluent, Elastic and Cloudflare. The tests and verdict rules were fixed in code before the data was pulled. P-values use an effective sample size because year-over-year series are strongly autocorrelated.

Limitation: samples are small. Each company-level correlation rests on an effective sample of roughly 3 to 11 observations, so a real but modest lead could be missed.

python · pandas · scipy · npm, pypi, hn algolia & github apis · sec xbrl · jinja2 · plotly.js · github actions & pages

Morning Brief

What would a pre-open brief look like if it checked its own data before showing it?

Finding: over 545 shared trading days (Sep 2024 to Oct 2026), Yahoo’s and FRED’s VIX closes matched on every day but one. On Feb 6, 2026 Yahoo said 20.37 and FRED said 17.76. The reconciliation check now fails on a gap like that, and the page replays the day so you can watch it happen.

A public rebuild of the dashboard from my internship, using only free public data. A scheduled job, meant to run each weekday before the open, pulls 21 instruments across equities, rates, FX and commodities and checks them for freshness, completeness, gaps, implausible moves, frozen feeds and disagreement with FRED or the ECB before anything is shown. A language model writes up to five news bullets, each linked to the official headlines it cites.

Limitation: 13 of the 21 instruments have only one source, so a wrong but plausible price there can’t be caught by reconciliation. And the pre-open trigger isn’t reliable yet: so far most refreshes have run after the open, as the page’s track record shows.

Morning Brief check summary: “All data checks passed”, 129 checks across 21 instruments with 8 cross-checked against FRED or the ECB, and six tiles with 20-day sparklines for S&P 500 futures, US 10-year yield, dollar index, WTI crude, gold and VIX.
The brief of Wed Nov 4, 2026: check summary and cross-asset tiles.

python · pandas · sqlite · yfinance, fred & ecb data · claude api · jinja2 · chart.js · github actions & pages · cloudflare workers

Experience

  1. Global Markets Sales & Trading Summer Intern, UBS, New York

    Analyzed 2.9M+ equity executions to find where an underperforming liquidation algorithm lost money; the desk implemented my recommendations.

  2. Research and Strategy Intern, SMILO (Small Islands Organisation), Marseille

    Benchmarked paid funding-tracking platforms against an in-house build, then built the in-house tracker with APIs, RSS feeds and scrapers.

  3. Public Markets Data Engineering Intern, China Resources Trust, Hong Kong

    Automated daily T/T+1 reporting across 1,000+ structured trust products and cut reporting errors by 70%.

  4. Legal Intern, Yingke Law Firm, Shenzhen

    Turned lawyers’ workflows into requirements for the firm’s first LLM-based legal tool, then tested its outputs with them.

Full detail in my resume →

About

I’ll graduate from Duke in May 2027 with a B.S. in Economics and a B.S. in Computer Science, concentrating in AI and machine learning. I’m most interested in technology itself: how AI products get built, how people actually adopt them, and what that changes for the companies involved. On campus I’m President of Duke Scholars of Finance and Co-President of Duke’s chapter of Alpha Kappa Psi.

I speak Mandarin natively and French proficiently. I studied in Aix-en-Provence and Paris, with all of my coursework in French, and in New York with Duke in New York. Away from a keyboard I train with Duke Club Triathlon, hike, and watch French cinema.