<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[ML for Trading Insights]]></title><description><![CDATA[Notes on ML for trading — and applied AI more broadly — from the author of the third edition.]]></description><link>https://insights.ml4trading.io</link><image><url>https://substackcdn.com/image/fetch/$s_!5KbB!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7c2e3b8-b91b-41ba-a42d-a371f6359359_800x800.png</url><title>ML for Trading Insights</title><link>https://insights.ml4trading.io</link></image><generator>Substack</generator><lastBuildDate>Wed, 21 Oct 2026 22:33:47 GMT</lastBuildDate><atom:link href="https://insights.ml4trading.io/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Stefan Jansen]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[ml4t@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[ml4t@substack.com]]></itunes:email><itunes:name><![CDATA[Stefan Jansen]]></itunes:name></itunes:owner><itunes:author><![CDATA[Stefan Jansen]]></itunes:author><googleplay:owner><![CDATA[ml4t@substack.com]]></googleplay:owner><googleplay:email><![CDATA[ml4t@substack.com]]></googleplay:email><googleplay:author><![CDATA[Stefan Jansen]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[How to Evaluate a Financial Research Agent]]></title><description><![CDATA[From prediction metrics to completed research: what financial benchmarks test, who builds them, and how to select one for your task.]]></description><link>https://insights.ml4trading.io/p/how-to-evaluate-a-financial-research</link><guid isPermaLink="false">https://insights.ml4trading.io/p/how-to-evaluate-a-financial-research</guid><dc:creator><![CDATA[Stefan Jansen]]></dc:creator><pubDate>Tue, 20 Oct 2026 13:52:23 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/fd2cfc6e-0211-4ffd-a525-0adf1326a351_2400x1260.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Evaluating a financial research agent means deciding whether it can complete work you would otherwise assign to an analyst. That might be a calculation backed by filings, an assessment of a company&#8217;s funding risk, an editable valuation model, or code that reproduces a strategy paper. Each requires a different test.</p><p>We already know how to compare model predictions with observed outcomes. LLMs broadened the problem to answers that can be wrong in different ways. Agents broaden it again: they choose sources, call tools, revise their work, and deliver a result after many steps. Evaluation must now account for the environment in which those steps occur, the path chosen, and the evidence behind the result.</p><p>Financial agent benchmarks are beginning to address these problems. Some isolate retrieval or numerical reasoning. Others ask agents to conduct research, build spreadsheets, reproduce code, or interpret news. This article explains how those evaluations work, who builds them, and how to select them for your own system.</p><h2>New on ML4T: find and inspect financial AI evaluations</h2><p>Alongside this issue, we are launching a <a href="https://ml4trading.io/agent-lab/evaluation/#ae-cat">financial AI evaluation resource</a> to help you choose tests for the system you are building. The searchable catalog covers 91 overlapping evaluation resources, including 66 classified as benchmarks, alongside suites, component datasets, and studies.</p><p>Open an individual evaluation page to see who built it, what the system is asked to do, what inputs and tools it receives, what it must produce, and how the result is graded. Where public examples are available, the page shows sourced tasks, marked as quotations or paraphrases, along with limitations and conditions for data and code access. You can inspect the work behind a benchmark score before deciding whether the test fits your own research process.</p><p>The accompanying background paper, <em><a href="https://ml4trading.io/agent-lab/evaluation/#ae-paper">Choosing Evaluations for Financial AI Systems</a></em>, develops the framework in more detail, including evidence requirements, grader validation, repeated runs, and the cost of checking and repairing work.</p><p>For hands-on practice, my <a href="https://maven.com/stefan-jansen/agent-engineering?utm_source=substack&amp;utm_medium=newsletter&amp;utm_campaign=agent_workshop_20261121&amp;utm_content=issue034_closing">Agent Engineering workshop</a> on November 21 covers building, evaluating, and deploying a multi-agent forecasting system. Subscribe to my <a href="https://maven.com/stefan-jansen">Maven profile</a> for updates on courses and workshops, incl. early-bird discounts through October 31.</p><h2>From predictions to answers to completed work</h2><p>In a conventional supervised-learning task, we specify an output and compare it with a target. A classifier predicts a label; a forecaster predicts a value or distribution. Accuracy, forecast error, calibration, and related metrics summarize particular aspects of performance. Choosing the target, validation period, and economic objective still requires judgment, but the scoring operation is often straightforward.</p><p>An LLM can produce a paragraph containing facts, calculations, qualifications, and a conclusion. Exact matching will reject many valid answers. A fluent response can also contain an unsupported claim that a similarity score overlooks. Evaluation therefore needs to separate requirements: whether facts are correct, evidence supports them, the calculation follows, and the conclusion answers the question. Reference answers, executable checks, expert review, and task-specific rubrics address different parts of that problem.</p><p>An agent adds decisions about how to do the work. It might search for filings, download a report, extract a table, run Python, discover an inconsistency, and search again. The model operates inside a <em>harness</em>: the software that supplies instructions and tools, maintains working state, and controls execution. Changing its search service, document parser, or time budget can change the result even when the model stays the same.</p><p>A benchmark for that system needs a task, an environment, and a definition of success. The environment determines which documents and tools are available, what actions are permitted, and when execution stops. The evaluator may inspect the final answer, the generated workbook or code, and the recorded tool calls and outputs. A frozen document collection supports repeatable comparisons; live web research tests a changing information environment.</p><p>We need both completion measures and ways to diagnose failures. A wrong answer could follow from failed retrieval, incorrect interpretation, a coding error, or an unsupported conclusion. Intermediate checks can distinguish those failures. They should enforce requirements while allowing valid alternative ways of completing the task. Requiring an agent to imitate one reference sequence would confuse agreement with that sequence and successful research.</p><h2>What finance adds to the evaluation</h2><p>Financial research combines several kinds of correctness. Sources must refer to the right entity and period. Accounting definitions and units must be compatible. Assumptions must be explicit, and conclusions must follow from the evidence. For historical decisions, the information must also have been available at the time.</p><p>Some requests have a bounded answer, such as an adjusted earnings figure. Others require judgment about liquidity, competitive position, or materiality. An editable model adds requirements about formulas and dependencies. A trading decision introduces realized outcomes, transaction costs, risk, and the possibility that an apparently good result came from favorable market conditions.</p><p>The relevant evaluation depends on which of these jobs the agent performs. A broad financial-knowledge score can help diagnose domain knowledge. It provides limited evidence that a configured agent can produce a research deliverable. Louis Bertucci and Murad Nuriyev&#8217;s <em><a href="https://papers.ssrn.com/sol3/papers.cfm?abstract_id=6815399">Evaluating AI in Finance</a></em> provides the broader taxonomy behind the catalog; the comparisons below focus on methods that change a practitioner&#8217;s evaluation choice.</p><h2>How much of the catalog evaluates agents?</h2><p>Of the 66 benchmark records, we classify 15 as evaluations of agents or configured research, search, and decision products. Another three mix protocols or leave the execution boundary unclear. The remaining 48 test bounded answers, fixed pipelines, or components such as retrieval. These tests can diagnose an agent&#8217;s capabilities. The protocols we inspected do not evaluate an adaptive workflow from request to completed work.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7R4q!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f25f84a-b4b0-436d-85e6-c986b76a5001_666x556.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7R4q!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f25f84a-b4b0-436d-85e6-c986b76a5001_666x556.png 424w, https://substackcdn.com/image/fetch/$s_!7R4q!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f25f84a-b4b0-436d-85e6-c986b76a5001_666x556.png 848w, https://substackcdn.com/image/fetch/$s_!7R4q!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f25f84a-b4b0-436d-85e6-c986b76a5001_666x556.png 1272w, https://substackcdn.com/image/fetch/$s_!7R4q!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f25f84a-b4b0-436d-85e6-c986b76a5001_666x556.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!7R4q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f25f84a-b4b0-436d-85e6-c986b76a5001_666x556.png" width="380" height="317.23723723723725" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0f25f84a-b4b0-436d-85e6-c986b76a5001_666x556.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:556,&quot;width&quot;:666,&quot;resizeWidth&quot;:380,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;66 benchmark records: 15 agents or research products, three mixed cases, and 48 bounded answer or component tests.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="66 benchmark records: 15 agents or research products, three mixed cases, and 48 bounded answer or component tests." title="66 benchmark records: 15 agents or research products, three mixed cases, and 48 bounded answer or component tests." srcset="https://substackcdn.com/image/fetch/$s_!7R4q!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f25f84a-b4b0-436d-85e6-c986b76a5001_666x556.png 424w, https://substackcdn.com/image/fetch/$s_!7R4q!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f25f84a-b4b0-436d-85e6-c986b76a5001_666x556.png 848w, https://substackcdn.com/image/fetch/$s_!7R4q!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f25f84a-b4b0-436d-85e6-c986b76a5001_666x556.png 1272w, https://substackcdn.com/image/fetch/$s_!7R4q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f25f84a-b4b0-436d-85e6-c986b76a5001_666x556.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Classification of the inspected protocols in the 91-resource catalog, excluding suites, nested component-dataset entries, and studies. Counts describe what the published evaluations run, not every possible use of their datasets.</em></p><p>Names alone can mislead. FinAgentBench grades document and passage rankings without external tools in its published experiments. Conversely, Fin-RATE includes hosted web-search configurations alongside bounded QA and retrieval tests. We keep it in the mixed group with BizFinBench.v2 and CNFinBench, rather than treating every configuration as either a model test or a complete agent evaluation.</p><h2>Who builds financial evaluations?</h2><p>Of the 66 benchmark records, 49 list publication dates of 2024 or later, including 20 in 2026. Dates attached to suite adaptations do not establish when their underlying datasets first appeared. The newer research benchmarks also bring different builders into the field.</p><p>Most of the older resources come from academic language-processing research: sentiment labels such as Financial PhraseBank, financial opinion question answering such as FiQA, and numerical reasoning such as FinQA, which researchers at JPMorgan Chase built with university collaborators. Academic consortia then packaged many of these datasets into suites. FinBen, released in February 2024, gathers stock-movement, credit-scoring, fraud, and bankruptcy datasets under one evaluation. The catalog includes its component datasets as separate entries.</p><p>The newer benchmarks that grade completed research increasingly come from companies. Patronus AI built FinanceBench; Vals AI and Stanford researchers built the Finance Agent Benchmark; Kensho and S&amp;P Global built BizBench and FrontierFinance; and Rogo, Samaya AI, Paper Instruments, and Sonto built the research and judgment benchmarks discussed below. These builders have access to realistic tasks and to experts who can grade them. Several, such as Rogo and Samaya AI, also sell AI systems for the work their benchmarks grade.</p><p>Who built a test doesn&#8217;t determine whether it is sound, but it should shape how you interpret the results. Check whether the builder&#8217;s own system appears in them, whether the full task set is public or only a sample, and whether the data sits behind an access agreement. Each evaluation page lists the authors, their affiliations (where the sources report them), and the data, code, and license terms.</p><h2>What does a benchmark score establish?</h2><p>The benchmark&#8217;s task and the evidence available to its grader determine what its score can establish. Running a multi-step agent does not require the evaluator to inspect every step. A response rubric can grade the delivered analysis while leaving its tool execution unexamined.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!SC4P!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5cbe378-1caa-41f8-8f37-b2c97c662c2f_666x1320.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SC4P!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5cbe378-1caa-41f8-8f37-b2c97c662c2f_666x1320.png 424w, https://substackcdn.com/image/fetch/$s_!SC4P!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5cbe378-1caa-41f8-8f37-b2c97c662c2f_666x1320.png 848w, https://substackcdn.com/image/fetch/$s_!SC4P!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5cbe378-1caa-41f8-8f37-b2c97c662c2f_666x1320.png 1272w, https://substackcdn.com/image/fetch/$s_!SC4P!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5cbe378-1caa-41f8-8f37-b2c97c662c2f_666x1320.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!SC4P!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5cbe378-1caa-41f8-8f37-b2c97c662c2f_666x1320.png" width="380" height="753.1531531531532" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f5cbe378-1caa-41f8-8f37-b2c97c662c2f_666x1320.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1320,&quot;width&quot;:666,&quot;resizeWidth&quot;:380,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;What the score establishes&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="What the score establishes" title="What the score establishes" srcset="https://substackcdn.com/image/fetch/$s_!SC4P!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5cbe378-1caa-41f8-8f37-b2c97c662c2f_666x1320.png 424w, https://substackcdn.com/image/fetch/$s_!SC4P!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5cbe378-1caa-41f8-8f37-b2c97c662c2f_666x1320.png 848w, https://substackcdn.com/image/fetch/$s_!SC4P!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5cbe378-1caa-41f8-8f37-b2c97c662c2f_666x1320.png 1272w, https://substackcdn.com/image/fetch/$s_!SC4P!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5cbe378-1caa-41f8-8f37-b2c97c662c2f_666x1320.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Each score answers a different question. Each row identifies a claim that the score alone cannot support; it does not imply that the benchmark is defective.</em></p><h2>Component tests explain where research fails</h2><p><a href="https://github.com/patronus-ai/financebench">FinanceBench</a> supplies financial questions with reference answers, justifications, and evidence pages. Its public subset contains 150 questions. It is a useful starting point for testing answers grounded in company disclosures. Run a question with retrieved context, then with verified, sufficient evidence. Errors that remain in the second condition warrant investigating interpretation or calculation; a performance gap warrants inspecting retrieval and context selection.</p><p><a href="https://arxiv.org/abs/2504.15800">FinDER</a> and <a href="https://arxiv.org/abs/2508.14052">FinAgentBench</a> examine financial evidence retrieval. Ranking metrics measure whether relevant passages appear near the top. They help diagnose search, but a well-ranked passage can still be used incorrectly in the answer.</p><p><a href="https://arxiv.org/html/2109.00122v3">FinQA</a> evaluates numerical reasoning using executable programs and their results. That distinction exposes cases where the wrong derivation still produces the right number. <a href="https://github.com/NExTplusplus/TAT-QA">TAT-QA</a> combines tables and text, while <a href="https://github.com/czyssrs/ConvFinQA">ConvFinQA</a> adds dependent calculations across conversational turns.</p><p>These resources isolate capabilities that an agent needs. They are especially useful during development, when a single end-to-end failure rate gives little guidance about what to improve. Passing them leaves the entire research workflow untested.</p><h2>Research benchmarks differ in what the grader can see</h2><h3>BigFinanceBench checks the research derivation</h3><p><a href="https://arxiv.org/html/2606.03829v1">BigFinanceBench</a> contains 928 difficult financial-research tasks authored by 52 experts. Agents use a common harness with web search, EDGAR access, page fetching, and Python, limited to 50 steps. Judges inspect the answer and visible trajectory, including tool calls, outputs, and calculations. Weighted criteria grade the derivation; judges score final-answer correctness separately.</p><p>One task asks whether Dayforce&#8217;s management-adjusted EBIT is overstated when it treats capitalized software development as a real cost. Resolving it requires finding disclosures, understanding the adjustment, and calculating its effect. That is substantially richer than retrieving a reported number.</p><p>Choose this approach when you need to evaluate multi-source calculations and locate failures within the supporting work. The benchmark authors deliberately selected these questions to challenge existing agents, so the score does not estimate error frequency on ordinary analyst requests. The <a href="https://github.com/Rogo-Technologies/big-finance-benchmark">public release</a> includes 50 tasks with references, rubrics, and traces; the full 928-task evaluation is larger.</p><h3>DiligenceBench checks the completed analysis</h3><p><a href="https://www.paperinstruments.com/blog/diligence-bench">DiligenceBench</a> contains 150 equity-research tasks across 143 companies. Questions ask for judgments about cash-flow quality, funding, reserves, concentration, and other research concerns. Task-specific rubrics cover factual accuracy, analytical reasoning, and risk awareness, with negative weights for active errors.</p><p>The judge receives the task, the full response, and the criteria together. The benchmark permits different agent harnesses and supplies reference configurations with progressively more tooling, from web search to a writable Python workspace and finance-specific tools.</p><p>This design helps compare the research output of complete systems. It also makes attribution harder. A stronger result after adding tools and instructions reflects the changed configuration; it does not isolate a model improvement. Because grading centers on the response, retain the underlying evidence and calculations separately when you need to audit the research process.</p><h3>Samaya&#8217;s FrontierFinance checks investor research against detailed rubrics</h3><p><a href="https://arxiv.org/html/2608.11683v1">Samaya&#8217;s FrontierFinance</a> reports 220 research questions across six investor workflows, with 11,543 binary grading criteria. Its evaluator uses a majority vote from three model judges. Judges receive the question, date, response, and rubric batches, not a separate source corpus or the full tool trajectory.</p><p>Choose this design when the deliverable is an investor-research response with many explicit requirements. Its grading code lets you inspect how those requirements translate into scores. Agreement among model judges differs from validation by financial experts. The <a href="https://huggingface.co/datasets/samaya-ai/FrontierFinance">dataset</a> also requires an access agreement, so inspect availability before planning a local run.</p><p>These benchmarks examine related work at different resolutions. BigFinanceBench exposes derivation evidence, DiligenceBench emphasizes the completed analysis, and Samaya&#8217;s FrontierFinance applies detailed investor-research criteria. Their percentages have different meanings. Combining them into a single ranking would conceal those differences.</p><h2>Workbooks and code need tests of the artifact</h2><p>Kensho and S&amp;P Global, with MIT collaborators, use the same name for a different <a href="https://arxiv.org/html/2604.05912v1">FrontierFinance</a>. Its 25 computer-use tasks require agents to build three-statement, discounted-cash-flow, leveraged-buyout, merger, and lender models. The deliverable is a workbook that someone can inspect and change.</p><p>Its rubrics include validity checks for periods, sources, and formula logic. The automated judge has SEC access and tools to inspect workbooks. Human graders graded a ten-task subset; even with detailed rubrics, the automated judge overestimated AI-generated work relative to human graders.</p><p>For spreadsheet agents, apply the same focus to the usable model. A correct displayed valuation can conceal hardcoded cells or broken dependencies. Check whether changing an assumption updates the intended outputs, whether statements reconcile, and whether another analyst can repair the workbook. Validate the grader too.</p><p><a href="https://www.quantcodeeval.cloud/">QuantCode-Eval</a> targets another artifact: code reproducing quantitative strategies from 30 papers. It uses 572 executable property checkers to test requirements across data handling, modeling, signals, and portfolio construction. An attempt passes only when the task&#8217;s complete checker suite passes.</p><p>The evaluation separates successful attempts from tasks solved at least once in five attempts. The latter tells you whether retries found a correct implementation. It does not mean the agent is consistently correct or that you can select the good attempt without checking it. The <a href="https://huggingface.co/datasets/quantcodeeval/task_data">release</a> includes contracts and checkers; twenty original data panels require WRDS access. Reproduction correctness and future strategy profitability remain separate questions.</p><h2>Judgment and investment outcomes require different references</h2><p><a href="https://arxiv.org/html/2607.20645v1">Frontier Financial Judgment</a> asks agents whether news is new, important, and positive or negative for valuation. It combines 82 analyst-designed synthetic events with real news and historical documents for four semiconductor and supply-chain companies. The reference is analyst judgment about the events.</p><p>Scoring each label separately differs from requiring all three labels to be correct for an event. The study&#8217;s background-escalation measure also lacks exhaustive expert negative labels, limiting its interpretation as a false-positive rate. For a monitoring agent, add adjudicated negative cases and the normal stream of duplicates and irrelevant articles. The costs of missed events and unnecessary escalation depend on that stream. Agreement with analyst labels does not measure realized price moves.</p><p><a href="https://arxiv.org/abs/2412.18174">InvestorBench</a> and <a href="https://arxiv.org/abs/2510.02209">StockBench</a> instead evaluate agents making sequential investment decisions through simulated portfolio outcomes. These tests connect decisions across time and expose the agent to a market environment. Interpreting the result requires examining the universe, period, available information, execution assumptions, costs, and comparison portfolio. A favorable return in one setting provides different evidence than a well-researched answer or a reproducible strategy implementation.</p><h2>What can you inspect and rerun?</h2><p>Public tasks let you examine whether a benchmark resembles your work. A local rerun also needs grading code, source data, tools, and access rights. Public code and a permissive license in one repository don&#8217;t show you can reproduce the full evaluation.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!KSqS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1400565b-fd82-4b26-a200-1aea5134a550_666x1002.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KSqS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1400565b-fd82-4b26-a200-1aea5134a550_666x1002.png 424w, https://substackcdn.com/image/fetch/$s_!KSqS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1400565b-fd82-4b26-a200-1aea5134a550_666x1002.png 848w, https://substackcdn.com/image/fetch/$s_!KSqS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1400565b-fd82-4b26-a200-1aea5134a550_666x1002.png 1272w, https://substackcdn.com/image/fetch/$s_!KSqS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1400565b-fd82-4b26-a200-1aea5134a550_666x1002.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!KSqS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1400565b-fd82-4b26-a200-1aea5134a550_666x1002.png" width="380" height="571.7117117117117" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1400565b-fd82-4b26-a200-1aea5134a550_666x1002.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1002,&quot;width&quot;:666,&quot;resizeWidth&quot;:380,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;What can you inspect and rerun?&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="What can you inspect and rerun?" title="What can you inspect and rerun?" srcset="https://substackcdn.com/image/fetch/$s_!KSqS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1400565b-fd82-4b26-a200-1aea5134a550_666x1002.png 424w, https://substackcdn.com/image/fetch/$s_!KSqS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1400565b-fd82-4b26-a200-1aea5134a550_666x1002.png 848w, https://substackcdn.com/image/fetch/$s_!KSqS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1400565b-fd82-4b26-a200-1aea5134a550_666x1002.png 1272w, https://substackcdn.com/image/fetch/$s_!KSqS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1400565b-fd82-4b26-a200-1aea5134a550_666x1002.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Selected release inventories inspected through October 20, 2026. These are access and artifact checks, not independent replications. A public subset supports a different run from the full reported evaluation.</em></p><p>The catalog also includes <a href="https://huggingface.co/datasets/BeliefLens/FinGovBench">FinGovBench</a>, which adds a governance target. Given a declared financial workflow and a change, a method identifies affected components, chooses an action and revalidation scope, and decides whether release is permitted. Its public development and validation labels allow local scoring; test labels are withheld. The release remains a candidate pending independent expert adjudication. This tests governance decisions over supplied workflow records, rather than an agent independently conducting the underlying financial research.</p><h2>Choose tests for the work you will assign</h2><p>Start with the deliverable and the decision you need to make about the system.</p><ul><li><p><strong>For a filing-based question-answering assistant</strong>, combine FinanceBench-style grounded answers with retrieval diagnostics and FinQA-style calculation checks. Add complete requests using the sources, periods, and missing-information cases your analysts encounter.</p></li><li><p><strong>For multi-source research and memos</strong>, inspect BigFinanceBench, DiligenceBench, and Samaya&#8217;s FrontierFinance. Choose whether your evaluation needs the derivation, the final analysis, or both. Adapt the rubrics to the actual research brief.</p></li><li><p><strong>For spreadsheet construction or strategy reproduction</strong>, test the generated artifact. Use workbook behavior or executable properties alongside expert review of financial interpretation.</p></li><li><p><strong>For news monitoring or investment decisions</strong>, use the relevant event or market environment. Include ordinary negative cases for monitoring and appropriate risk and execution assumptions for portfolio evaluation.</p></li></ul><p>A brief filing example shows why these tests need to connect. Amazon&#8217;s <a href="https://www.sec.gov/Archives/edgar/data/1018724/000101872423000012/amzn-20230630.htm">June 2023 filing</a> contains twelve-month operating cash flow of 61,841 and quarterly net income of 6,750. An agent can retrieve the document and divide correctly, yet report a misleading quarterly ratio of 9.16. Using the three-month cash flow of 16,476 gives 2.44. The retrieval and arithmetic pass the first answer; the reporting-interval check rejects it. This is a constructed candidate answer using real filing values.</p><p>For system selection, keep the tasks and grading fixed, record tools and budgets, and repeat runs. If you are comparing models, hold the harness fixed as well. If you compare complete systems, treat tooling differences as part of the comparison. Public subsets, licenses, data entitlements, and access gates determine what you can actually run.</p><p>Before relying on an automated grade, check its decisions against held-out expert judgments. Keep consequential requirements mandatory for acceptance; a high average rubric score can coexist with a wrong entity, period, or accounting treatment. Then evaluate representative requests, recording completion, escalation, errors in accepted work, and total effort including retries and human repair.</p><p>Use the <a href="https://ml4trading.io/agent-lab/evaluation/#ae-cat">catalog and individual evaluation pages</a> to shortlist tests, inspect their tasks and grading, and check which materials you can access. Choose the evaluations whose work products and success conditions match the work you expect your agent to complete.</p><p>For hands-on practice, my <a href="https://maven.com/stefan-jansen/agent-engineering?utm_source=substack&amp;utm_medium=newsletter&amp;utm_campaign=agent_workshop_20261121&amp;utm_content=issue034_closing">Agent Engineering workshop</a> on November 21 covers building, evaluating, and deploying a multi-agent forecasting system. You&#8217;ll modify agents and compare configurations on the same questions.</p>]]></content:encoded></item><item><title><![CDATA[Testing Jev on Financial Documents]]></title><description><![CDATA[Jev identifies earnings changes more accurately than the tested classifiers. Trained models do better on filing categories and further SEC comments.]]></description><link>https://insights.ml4trading.io/p/testing-jev-on-financial-documents</link><guid isPermaLink="false">https://insights.ml4trading.io/p/testing-jev-on-financial-documents</guid><dc:creator><![CDATA[Stefan Jansen]]></dc:creator><pubDate>Tue, 13 Oct 2026 12:31:14 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/610421a4-669f-42ef-9bf9-68cbf80740fa_2400x1260.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><a href="https://docs.typesafe.ai/introduction">Jev</a>, TypeSafe&#8217;s decision model, identified changes in revenue and earnings per share in company releases more accurately than classifiers trained for these tasks. Jev takes text and questions with predefined answers, then returns an answer and probabilities for the options. Here, it had to decide whether each financial measure had risen from the same quarter a year earlier.</p><p>The tests cover earnings releases, company event disclosures filed on Form 8-K, and responses to Securities and Exchange Commission (SEC) comment letters. For the event disclosures, Jev had to choose the filing category. For the letters, it had to predict whether SEC staff would issue further comments after the company&#8217;s response.</p><p>The classifiers learned from filings paired with the answers for each task. Those answers came from reported financial figures, the company&#8217;s chosen filing category, or subsequent staff correspondence. Jev received the text and questions without task-specific training examples.</p><p>Jev identified revenue changes with 98.5% accuracy and earnings-per-share changes with 99.0%. No trained classifier in these tests passed 73% or 64%, respectively. Trained classifiers were more accurate at assigning filing categories and predicting further SEC comments. Adding information about investment-company filings improved Jev&#8217;s SEC forecasts, but the trained text models still led.</p><p><em>Disclosure: TypeSafe provided API access for this unpaid evaluation and suggested the domain-information addition tested below.</em></p><h2>Jev identified earnings changes more accurately than trained classifiers</h2><p>For the earnings test, each model received a 2023 filing. It had to decide whether total revenue and diluted earnings per share under US generally accepted accounting principles (GAAP) rose from the same quarter a year earlier, and whether the company reported a net loss. The questions specified the requested figures and comparison period.</p><p><a href="https://www.sec.gov/Archives/edgar/data/1045810/000104581023000087/q1fy24pr.htm">NVIDIA&#8217;s first-quarter fiscal 2024 release</a>, filed May 24, 2023, illustrates the task. Its opening headline reports quarterly revenue up 19%. Revenue was $7.19 billion, compared with $8.29 billion a year earlier. The headline compares with the previous quarter. Year-on-year revenue fell 13%.</p><p>GAAP diluted EPS rose from $0.64 to $0.82, while adjusted EPS fell 20%. The release shows both growth and decline. Correct answers require the GAAP figures and the year-on-year comparison specified in the questions.</p><p>Jev answered revenue down, GAAP EPS up, and no net loss, assigning probabilities of 0.95, 0.98, and 0.97 to those answers. One fine-tuned text model, ModernBERT, got EPS right but predicted revenue growth and a net loss. SEC-BERT got EPS and net loss right but also predicted revenue growth.</p><p>The reference answers came from financial figures tagged in each company&#8217;s quarterly or annual report. Comparing the current and prior-year figures supplied both the training labels and the answers used for scoring. We trained and tested the classifiers on separate groups of companies.</p><p>Some releases omit the figures needed for the comparison. The headline results cover 802 revenue and 833 EPS comparisons for which both report numbers were found in the release text. This retrospective check uses reports that can arrive after the release and matches number strings without verifying their meaning. It cannot serve as an automatic eligibility test when new releases arrive.</p><p>On those selected releases, Jev scored 98.5% for revenue and 99.0% for EPS. The strongest trained classifier, TF-IDF with LightGBM, reached 72.6% and 63.6%. Always choosing the more common answer would score 56.6% and 51.1%, so class imbalance does not explain the earnings result. TF-IDF represents words and word pairs as weighted counts; LightGBM fits decision trees to that representation.</p><p>AUC measures how well the probabilities rank positive answers above negative ones across cutoffs. Jev scored 0.998 for revenue and 0.999 for EPS, compared with LightGBM&#8217;s 0.806 and 0.668. All methods&#8217; AUCs appear in the appendix.</p><p>Without the number check, Jev&#8217;s accuracy was 95.4% on 887 revenue comparisons and 94.9% on 948 EPS comparisons. It scored 97.3% on 1,044 net-loss observations, which had no equivalent check.</p><p>Jev received the full release, while the fine-tuned text models received roughly the first 4,000 tokens. Those models were trained as document classifiers with untuned settings. The test did not include a system that extracts and compares the requested figures.</p><p>The tested questions offered only yes/no answers, so Jev had to choose even when a release omitted the requested comparison. A research system using these questions would need to handle unavailable comparisons separately.</p><h2>Trained classifiers assigned 8-K categories more accurately than Jev</h2><p>Form 8-K gives companies numbered categories for reporting significant events. Each model had to identify the category the company selected when submitting its filing to the SEC. The test covers January-September 2023 filings with one substantive item, in eleven categories. Models received the narrative and relevant exhibits after removing item numbers and category headings.</p><p><a href="https://www.sec.gov/Archives/edgar/data/1318605/000095017023038779/tsla-20230804.htm">Tesla&#8217;s August 7, 2023 filing</a> reports that Vaibhav Taneja became CFO after Zachary Kirkhorn stepped down. The answer key is Item 5.02, the category for specified director and officer changes. Jev selected it under three question wordings, with probabilities of 0.97-0.99. Both fine-tuned encoders selected it too.</p><p>Across 3,006 usable filings, Jev scored 79.3%. TF-IDF with logistic regression reached 89.4%; LightGBM reached 91.3%. The fine-tuned encoders scored about 88%. Training on public labels was more effective at reproducing the filer&#8217;s category across these eleven categories.</p><p>Jev&#8217;s errors concentrate in Item 7.01 (Regulation FD disclosure) and Item 8.01 (other events). <a href="https://www.sec.gov/files/form8-k.pdf">Form 8-K&#8217;s instructions</a> permit Regulation FD information under either item, with different furnished/filed treatment. Reproducing the company&#8217;s choice requires distinguishing categories that can describe the same event. Trained classifiers may learn drafting cues such as furnished/filed language; these runs did not isolate the cues responsible for their advantage.</p><p>On the other nine categories, Jev was correct on 98.6% of 1,876 filings, ahead of the strongest trained baseline&#8217;s 95.1%. On the 1,130 Item 7.01/8.01 filings, Jev scored 47.3%, versus 77.6% for fine-tuned ModernBERT and 75.5% for SEC-BERT. We selected that split after examining errors and using the <em>true</em> category. A researcher cannot achieve that result by filtering on Jev&#8217;s prediction. When Jev predicted one of the nine categories in this mixed feed, it was right 83.1% of the time.</p><p>A system could use answer probabilities to reserve uncertain category assignments for manual review. Retaining only the most confident predictions gave Jev 47.9% coverage of the evaluated filings at 99% observed precision; fine-tuned ModernBERT covered 55.5%. The cutoffs were chosen after the outcomes were known, so a live system would need to validate them on new filings.</p><h2>Trained classifiers predicted further SEC comments more accurately than Jev</h2><p>SEC staff use comment letters to ask companies to clarify their filings or add disclosure. In this test, Jev and the classifiers had to predict whether the staff would issue further comments after a company responded.</p><p><a href="https://www.sec.gov/Archives/edgar/data/1477449/000110465922011369/filename1.htm">Teladoc&#8217;s February 3, 2022 response</a> answers a request to explain a 15.7-year useful life for acquired customer relationships. Teladoc committed to expanding disclosure in its next annual report. The staff closed the review on February 8.</p><p>Whether the response fully resolves every issue on its face differs from whether the staff will issue another comment. The closing outcome requires forecasting the staff&#8217;s next action. A response can satisfy that process by committing to future disclosure.</p><p>On Teladoc, Jev assigned a 0.42 probability to further comments when asked directly about that outcome. Asking whether the staff would be satisfied and close the review implied 0.43. Asking whether the response fully resolved every comment implied 0.76. Fine-tuned ModernBERT and SEC-BERT predicted 0.24 and 0.01, respectively. The observed outcome was no further comments.</p><p>The broader test used 2,261 distinct response letters from 2022-2023. The outcome labels mark 925 (40.9%) as drawing substantive further comments within 90 days. A letter closing the review counts as no further comments. The forecast concerns another round of substantive questions within that window, rather than eventual resolution of the filing review.</p><p>Jev&#8217;s accuracy was 67.0% under the direct &#8220;further comments&#8221; question, 58.8% under &#8220;satisfied&#8221; and 41.5% under &#8220;fully resolves every comment&#8221;. The full-resolution question asks for a more demanding judgment about the response than the future staff action used for scoring.</p><p>Always predicting no further comments would score 59.1% accuracy, since that was the more common outcome. AUC measures how well the probabilities rank letters that drew further comments above those that did not. Brier score measures squared probability error, with lower values better. A model can rank the letters correctly while assigning probabilities that overstate the risk of further comments.</p><p>The direct Jev question scored AUC 0.713 and Brier 0.2204. Fine-tuned ModernBERT reached 80.6% accuracy, AUC 0.890, and Brier 0.1346. Every trained text classifier beat the direct Jev question on all three metrics.</p><h3>A hint about investment-company filings improved Jev&#8217;s SEC forecasts</h3><p>Following TypeSafe&#8217;s suggestion, we added a new question that stated investment-company filings rarely draw another round of comments. We added it after examining the initial results and testing it on the same letters. Its improvement therefore needs confirmation on new letters.</p><p>Jev&#8217;s accuracy rose to 67.9%, AUC to 0.831, and Brier improved to 0.1878. The probability improvement was concentrated in investment-company filings. Predictions also changed outside that group, worsening probability error for S-4 and F-4 responses, where further comments were common.</p><p>The augmented question ranked outcomes better than the simple form-plus-length comparator, whose AUC was 0.814. That comparator had a lower Brier score of 0.1711. All trained text classifiers beat the augmented Jev question on accuracy, AUC, and Brier.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!NkQ-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05c6fdda-0bfb-4c8e-b940-7875e7459c13_666x1210.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NkQ-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05c6fdda-0bfb-4c8e-b940-7875e7459c13_666x1210.png 424w, https://substackcdn.com/image/fetch/$s_!NkQ-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05c6fdda-0bfb-4c8e-b940-7875e7459c13_666x1210.png 848w, https://substackcdn.com/image/fetch/$s_!NkQ-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05c6fdda-0bfb-4c8e-b940-7875e7459c13_666x1210.png 1272w, https://substackcdn.com/image/fetch/$s_!NkQ-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05c6fdda-0bfb-4c8e-b940-7875e7459c13_666x1210.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!NkQ-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05c6fdda-0bfb-4c8e-b940-7875e7459c13_666x1210.png" width="380" height="690.3903903903904" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/05c6fdda-0bfb-4c8e-b940-7875e7459c13_666x1210.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1210,&quot;width&quot;:666,&quot;resizeWidth&quot;:380,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Comment-letter Brier scores. The direct outcome question improves on the full-resolution question; post hoc domain information improves it further. The trained ModernBERT row still has the lowest error. Lower is better; all rows use 2,261 letters.&quot;,&quot;title&quot;:&quot;Comment-letter Brier scores. The direct outcome question improves on the full-resolution question; post hoc domain information improves it further. The trained ModernBERT row still has the lowest error. Lower is better; all rows use 2,261 letters.&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Comment-letter Brier scores. The direct outcome question improves on the full-resolution question; post hoc domain information improves it further. The trained ModernBERT row still has the lowest error. Lower is better; all rows use 2,261 letters." title="Comment-letter Brier scores. The direct outcome question improves on the full-resolution question; post hoc domain information improves it further. The trained ModernBERT row still has the lowest error. Lower is better; all rows use 2,261 letters." srcset="https://substackcdn.com/image/fetch/$s_!NkQ-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05c6fdda-0bfb-4c8e-b940-7875e7459c13_666x1210.png 424w, https://substackcdn.com/image/fetch/$s_!NkQ-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05c6fdda-0bfb-4c8e-b940-7875e7459c13_666x1210.png 848w, https://substackcdn.com/image/fetch/$s_!NkQ-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05c6fdda-0bfb-4c8e-b940-7875e7459c13_666x1210.png 1272w, https://substackcdn.com/image/fetch/$s_!NkQ-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05c6fdda-0bfb-4c8e-b940-7875e7459c13_666x1210.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Comment-letter Brier scores. The direct outcome question improves on the full-resolution question; post hoc domain information improves it further. The trained ModernBERT row still has the lowest error. Lower is better; all rows use 2,261 letters.</em></p><h2>Full results for earnings changes, filing categories, and SEC follow-up</h2><p>The tables use the same Jev-answered documents within each task. Revenue, EPS, and loss have different denominators and checking rules. ModernBERT and SEC-BERT are text encoders; we fine-tune them on the task&#8217;s labeled documents. The two zero-shot natural-language-inference (NLI) models instead score candidate answers as hypotheses against the text.</p><p><strong>Earnings accuracy (%)</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mEjz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf4a97f0-6b84-46eb-aeee-2d13cb54cdae_666x1064.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mEjz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf4a97f0-6b84-46eb-aeee-2d13cb54cdae_666x1064.png 424w, https://substackcdn.com/image/fetch/$s_!mEjz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf4a97f0-6b84-46eb-aeee-2d13cb54cdae_666x1064.png 848w, https://substackcdn.com/image/fetch/$s_!mEjz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf4a97f0-6b84-46eb-aeee-2d13cb54cdae_666x1064.png 1272w, https://substackcdn.com/image/fetch/$s_!mEjz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf4a97f0-6b84-46eb-aeee-2d13cb54cdae_666x1064.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!mEjz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf4a97f0-6b84-46eb-aeee-2d13cb54cdae_666x1064.png" width="380" height="607.0870870870871" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/df4a97f0-6b84-46eb-aeee-2d13cb54cdae_666x1064.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1064,&quot;width&quot;:666,&quot;resizeWidth&quot;:380,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Earnings accuracy (%)&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Earnings accuracy (%)" title="Earnings accuracy (%)" srcset="https://substackcdn.com/image/fetch/$s_!mEjz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf4a97f0-6b84-46eb-aeee-2d13cb54cdae_666x1064.png 424w, https://substackcdn.com/image/fetch/$s_!mEjz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf4a97f0-6b84-46eb-aeee-2d13cb54cdae_666x1064.png 848w, https://substackcdn.com/image/fetch/$s_!mEjz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf4a97f0-6b84-46eb-aeee-2d13cb54cdae_666x1064.png 1272w, https://substackcdn.com/image/fetch/$s_!mEjz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf4a97f0-6b84-46eb-aeee-2d13cb54cdae_666x1064.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Revenue n = 802; EPS n = 833; net loss n = 1,044. Only revenue and EPS use the number check.</p><p><strong>Filing-category accuracy (%)</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!P6u2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cd216de-12bb-4456-879a-27deabff8b79_666x840.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!P6u2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cd216de-12bb-4456-879a-27deabff8b79_666x840.png 424w, https://substackcdn.com/image/fetch/$s_!P6u2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cd216de-12bb-4456-879a-27deabff8b79_666x840.png 848w, https://substackcdn.com/image/fetch/$s_!P6u2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cd216de-12bb-4456-879a-27deabff8b79_666x840.png 1272w, https://substackcdn.com/image/fetch/$s_!P6u2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cd216de-12bb-4456-879a-27deabff8b79_666x840.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!P6u2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cd216de-12bb-4456-879a-27deabff8b79_666x840.png" width="380" height="479.27927927927925" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3cd216de-12bb-4456-879a-27deabff8b79_666x840.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:840,&quot;width&quot;:666,&quot;resizeWidth&quot;:380,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Filing-category accuracy (%)&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Filing-category accuracy (%)" title="Filing-category accuracy (%)" srcset="https://substackcdn.com/image/fetch/$s_!P6u2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cd216de-12bb-4456-879a-27deabff8b79_666x840.png 424w, https://substackcdn.com/image/fetch/$s_!P6u2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cd216de-12bb-4456-879a-27deabff8b79_666x840.png 848w, https://substackcdn.com/image/fetch/$s_!P6u2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cd216de-12bb-4456-879a-27deabff8b79_666x840.png 1272w, https://substackcdn.com/image/fetch/$s_!P6u2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cd216de-12bb-4456-879a-27deabff8b79_666x840.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>n = 3,006. Jev averages three question wordings. BART uses plain category descriptions; formal item-title hypotheses scored 26.8%.</p><p><strong>Further SEC comments: accuracy and probability error</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Xqfc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd367f989-d2bd-4883-8c24-11d5fb197954_666x1436.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Xqfc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd367f989-d2bd-4883-8c24-11d5fb197954_666x1436.png 424w, https://substackcdn.com/image/fetch/$s_!Xqfc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd367f989-d2bd-4883-8c24-11d5fb197954_666x1436.png 848w, https://substackcdn.com/image/fetch/$s_!Xqfc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd367f989-d2bd-4883-8c24-11d5fb197954_666x1436.png 1272w, https://substackcdn.com/image/fetch/$s_!Xqfc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd367f989-d2bd-4883-8c24-11d5fb197954_666x1436.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!Xqfc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd367f989-d2bd-4883-8c24-11d5fb197954_666x1436.png" width="380" height="819.3393393393393" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d367f989-d2bd-4883-8c24-11d5fb197954_666x1436.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1436,&quot;width&quot;:666,&quot;resizeWidth&quot;:380,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Further SEC comments&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Further SEC comments" title="Further SEC comments" srcset="https://substackcdn.com/image/fetch/$s_!Xqfc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd367f989-d2bd-4883-8c24-11d5fb197954_666x1436.png 424w, https://substackcdn.com/image/fetch/$s_!Xqfc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd367f989-d2bd-4883-8c24-11d5fb197954_666x1436.png 848w, https://substackcdn.com/image/fetch/$s_!Xqfc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd367f989-d2bd-4883-8c24-11d5fb197954_666x1436.png 1272w, https://substackcdn.com/image/fetch/$s_!Xqfc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd367f989-d2bd-4883-8c24-11d5fb197954_666x1436.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>n = 2,261. Higher AUC and lower Brier are better. We chose to add domain information after examining the results. The form-plus-length comparator uses a different split. Sample majority and constant-rate predictions use evaluated outcomes as diagnostics, rather than prospective forecasts.</p><p>Company grouping keeps test labels out of training, with qualifications detailed in the appendix: TF-IDF uses test text when building its vocabulary, and some letters share co-registrant companies across the split.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!UfO5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5b427d7-90e5-4ee7-8393-1a1532eb675b_666x1280.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UfO5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5b427d7-90e5-4ee7-8393-1a1532eb675b_666x1280.png 424w, https://substackcdn.com/image/fetch/$s_!UfO5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5b427d7-90e5-4ee7-8393-1a1532eb675b_666x1280.png 848w, https://substackcdn.com/image/fetch/$s_!UfO5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5b427d7-90e5-4ee7-8393-1a1532eb675b_666x1280.png 1272w, https://substackcdn.com/image/fetch/$s_!UfO5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5b427d7-90e5-4ee7-8393-1a1532eb675b_666x1280.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!UfO5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5b427d7-90e5-4ee7-8393-1a1532eb675b_666x1280.png" width="380" height="730.3303303303303" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a5b427d7-90e5-4ee7-8393-1a1532eb675b_666x1280.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1280,&quot;width&quot;:666,&quot;resizeWidth&quot;:380,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Jev leads the tested classifiers on earnings; the strongest trained baseline leads across all eleven evaluated 8-K categories and on further SEC comments. Task-specific denominators and validation limits apply.&quot;,&quot;title&quot;:&quot;Jev leads the tested classifiers on earnings; the strongest trained baseline leads across all eleven evaluated 8-K categories and on further SEC comments. Task-specific denominators and validation limits apply.&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Jev leads the tested classifiers on earnings; the strongest trained baseline leads across all eleven evaluated 8-K categories and on further SEC comments. Task-specific denominators and validation limits apply." title="Jev leads the tested classifiers on earnings; the strongest trained baseline leads across all eleven evaluated 8-K categories and on further SEC comments. Task-specific denominators and validation limits apply." srcset="https://substackcdn.com/image/fetch/$s_!UfO5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5b427d7-90e5-4ee7-8393-1a1532eb675b_666x1280.png 424w, https://substackcdn.com/image/fetch/$s_!UfO5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5b427d7-90e5-4ee7-8393-1a1532eb675b_666x1280.png 848w, https://substackcdn.com/image/fetch/$s_!UfO5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5b427d7-90e5-4ee7-8393-1a1532eb675b_666x1280.png 1272w, https://substackcdn.com/image/fetch/$s_!UfO5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5b427d7-90e5-4ee7-8393-1a1532eb675b_666x1280.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Jev leads the tested classifiers on earnings; the strongest trained baseline leads across all eleven evaluated 8-K categories and on further SEC comments. Task-specific denominators and validation limits apply.</em></p><h2>Classifiers beat Jev on 8-K categories with 400-1,600 training filings</h2><p>Jev&#8217;s category assignments require no task-specific training set. To measure how much supervision would beat them, we trained the classifiers on increasing numbers of labeled filings, excluding the tested companies. Each point averages two fixed evaluation halves, without uncertainty estimates, so the crossing ranges are approximate training budgets.</p><p>Across the eleven evaluated 8-K categories, logistic regression and SEC-BERT were below Jev at 400 labeled training documents and above it at 800. ModernBERT crossed between 800 and 1,600. At 1,600, logistic regression and ModernBERT also exceeded Jev&#8217;s evaluated-feed reference coverage of 47.9% at empirical 99% precision. SEC-BERT did not.</p><p>For comment letters, logistic regression and SEC-BERT exceeded the original Jev question at the smallest tested size, 200 letters. ModernBERT crossed between 200 and 800.</p><p>None reached Jev on earnings at the tested 100, 200, or 400 releases drawn. The earnings pools include unlabeled releases, so a 400-release draw supplies only 198-220 revenue labels. These curves compare against Jev&#8217;s 95.4% revenue accuracy before the number check.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Oqjj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18e01f37-81ab-4086-9848-bc5dcc41ccab_666x1700.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Oqjj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18e01f37-81ab-4086-9848-bc5dcc41ccab_666x1700.png 424w, https://substackcdn.com/image/fetch/$s_!Oqjj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18e01f37-81ab-4086-9848-bc5dcc41ccab_666x1700.png 848w, https://substackcdn.com/image/fetch/$s_!Oqjj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18e01f37-81ab-4086-9848-bc5dcc41ccab_666x1700.png 1272w, https://substackcdn.com/image/fetch/$s_!Oqjj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18e01f37-81ab-4086-9848-bc5dcc41ccab_666x1700.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!Oqjj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18e01f37-81ab-4086-9848-bc5dcc41ccab_666x1700.png" width="380" height="969.96996996997" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/18e01f37-81ab-4086-9848-bc5dcc41ccab_666x1700.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1700,&quot;width&quot;:666,&quot;resizeWidth&quot;:380,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Fixed company-excluding learning curves. Earnings counts are documents drawn, including unlabeled releases, and use unfiltered revenue accuracy. Appendix tables give effective label counts. No uncertainty bands or LightGBM curve were produced.&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Fixed company-excluding learning curves. Earnings counts are documents drawn, including unlabeled releases, and use unfiltered revenue accuracy. Appendix tables give effective label counts. No uncertainty bands or LightGBM curve were produced." title="Fixed company-excluding learning curves. Earnings counts are documents drawn, including unlabeled releases, and use unfiltered revenue accuracy. Appendix tables give effective label counts. No uncertainty bands or LightGBM curve were produced." srcset="https://substackcdn.com/image/fetch/$s_!Oqjj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18e01f37-81ab-4086-9848-bc5dcc41ccab_666x1700.png 424w, https://substackcdn.com/image/fetch/$s_!Oqjj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18e01f37-81ab-4086-9848-bc5dcc41ccab_666x1700.png 848w, https://substackcdn.com/image/fetch/$s_!Oqjj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18e01f37-81ab-4086-9848-bc5dcc41ccab_666x1700.png 1272w, https://substackcdn.com/image/fetch/$s_!Oqjj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18e01f37-81ab-4086-9848-bc5dcc41ccab_666x1700.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Fixed company-excluding learning curves. Earnings counts are drawn from documents, including unlabeled releases, and use unfiltered revenue accuracy. Appendix tables give effective label counts. No uncertainty bands or LightGBM curve were produced.</em></p><h2>Jev did not produce useful merger forecasts from contract terms alone</h2><p>A separate experiment asked Jev whether a merger would complete, using the contract&#8217;s closing conditions. On 3,106 resolved deals, its AUC was 0.504, close to chance ranking. Forecasts from structured deal summaries depended heavily on the market-implied probability supplied alongside them. The inputs omitted news, regulatory developments, and financing research. The appendix gives the separate and paired sample results.</p><h2>Earnings decisions were Jev&#8217;s strongest financial result</h2><p>For a researcher extracting earnings-direction features, Jev produced more accurate answers than the tested classifiers without requiring task-specific training examples. NVIDIA&#8217;s release illustrates what that decision entails: selecting the requested metric and comparison period among several reported measures.</p><p>For reproducing SEC filing categories or predicting further staff comments, labeled examples gave the trained models an advantage. The category learning curves put the cost of matching Jev at roughly 400-1,600 labeled filings, depending on the classifier. The earnings result therefore does not settle the choice for every financial-text task.</p><p>These tests compare Jev with document classifiers, including two language models used for zero-shot classification. They do not compare it with other generative language or decision models, and it is unclear how much exposure to historical filings it received during pretraining.</p><h2>Methods appendix</h2><h3>Which filings were used and how their scoring labels were constructed</h3><p><strong>Earnings.</strong> Start with 2023 Item 2.02 filings and extract the primary narrative plus EX-99 exhibits. The available sample contains 1,391 release bodies. Match each to the earliest qualifying 10-Q/10-K filed from ten days before to 100 days after the release, carrying an 80-100-day quarter ending no more than 100 days earlier. Use US-GAAP XBRL revenue, EPS, and net-income facts from that report and the corresponding prior-year quarter. The matching/tag-precedence rules can select a minor line or the wrong EPS basis. Equal comparison figures, zero net income, and absent facts produce missing labels. XBRL labels are later evidence for scoring, not inputs available to the model at release time.</p><p>Of 1,391 releases, 328 have no qualifying report match. Of 1,063 matches, two supply no nonmissing task label, leaving 1,061 releases submitted to Jev; five failed the service&#8217;s token limit. The 1,056 usable releases yield 887 revenue labels, 948 EPS labels and 1,044 loss labels. The number check retains 802 revenue and 833 EPS cases. It checks magnitude strings, not table meaning or signs, and the audit found false matches. The 20 audited discrepancies cover revenue/EPS only; no complete corrected key exists. The matching rule selects discrete quarterly facts; performance on unmatched releases and other reporting structures is unknown.</p><p>The source&#8217;s audit of the 20 remaining revenue/EPS disagreements attributed thirteen to scoring-label errors, four to metric definitions and three to unavailable comparisons. Ten labels used a minor revenue line: nine bank fee lines and one other-revenue line. Another bank case depended on gross revenue versus net interest income plus noninterest income. Three EPS labels lost a loss&#8217;s minus sign; three used total EPS where the release headlined continuing-operations EPS. The three unavailable comparisons passed the number check, and Jev&#8217;s answer probabilities were 0.57-0.74.</p><p>The source audit found no clear wrong Jev answer based on the requested figures in the release. The reported scores nevertheless retain the original labels. We did not compute a complete corrected-label score, and we did not audit agreement cases; the disagreement audit does not establish 100% accuracy.</p><p>Majority-class accuracy on the displayed revenue/EPS/loss populations is 56.6% / 51.1% / 54.7%.</p><p><strong>8-K.</strong> The original random sample of 6,000 entries from EDGAR&#8217;s 2023 Form 8-K quarterly indexes yielded 5,704 retained rows, 4,049 single substantive-item reports, and 3,976 rows in eleven classes with at least 30 members. Accession deduplication leaves 3,967 eligible documents in the current training loader. Remove official item numbers/titles and section headings, check for surviving headings, and include EX-99 exhibits. The reported result covers 3,006 usable documents from 3,011 requests; five documents failed, producing fifteen unusable question rows. The budget-limited run processed date-ordered filings from January 3 through September 27, 2023. It excludes multiple substantive items and rare/unlisted categories. The nine-category analysis is a post hoc split by true label.</p><p><strong>Letters.</strong> Sequence 2022-2023 UPLOAD and CORRESP filings by company. Decode staff letters and classify their content; an UPLOAD closing the review is not a positive outcome. A response is positive if substantive further comments occur within 90 days. Closing letters, silence, and unrelated declinations count as negative. Unreadable or unclassified follow-ups and responses without a full observation window are excluded. The last labeled response date is September 29, 2023. Company-level sequencing can link concurrent reviews, and not all regex classifications have been manually adjudicated.</p><p>The corpus contains 18,419 rows and 16,428 distinct readable accessions, with 287 accessions repeated for co-registrants. Restrict to responses between 3,000 and 90,000 characters and take an evenly spaced 2,500-row sample. It resolves to 2,261 unique letters, with 925 positives and no unusable answers. Duplicated answer accessions are pooled by wording. Their stored labels agree in the available outputs. The training loader keeps the first CIK per unique letter and the labels carried by answered rows.</p><h3>Exact questions and answer options</h3><p>These are the exact tested Jev instructions. Each earnings question has a true/false answer, with the criteria stated below. The three filing-category questions use the same eleven numbered options. None of the letter questions specify the 90-day scoring horizon.</p><p><strong>Revenue up</strong></p><blockquote><p>Is the company&#8217;s total revenue for the most recent fiscal quarter reported here higher than its total revenue for the same quarter of the prior year?</p></blockquote><p>True: Revenue for the latest quarter is higher than a year earlier. False: Revenue for the latest quarter is lower than a year earlier.</p><p><strong>GAAP diluted EPS up</strong></p><blockquote><p>Is the company&#8217;s diluted earnings per share under GAAP for the most recent fiscal quarter reported here higher than for the same quarter of the prior year?</p></blockquote><p>True: GAAP diluted EPS for the latest quarter is higher than a year earlier (a smaller loss per share counts as higher). False: GAAP diluted EPS for the latest quarter is lower than a year earlier.</p><p><strong>GAAP net loss</strong></p><blockquote><p>Did the company report a GAAP net loss for the most recent fiscal quarter reported here?</p></blockquote><p>True: The latest quarter&#8217;s GAAP net result is a loss. False: The latest quarter&#8217;s GAAP net result is a profit.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!FoSJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F193c9012-fc6a-48eb-bec0-3765e882d224_666x662.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FoSJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F193c9012-fc6a-48eb-bec0-3765e882d224_666x662.png 424w, https://substackcdn.com/image/fetch/$s_!FoSJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F193c9012-fc6a-48eb-bec0-3765e882d224_666x662.png 848w, https://substackcdn.com/image/fetch/$s_!FoSJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F193c9012-fc6a-48eb-bec0-3765e882d224_666x662.png 1272w, https://substackcdn.com/image/fetch/$s_!FoSJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F193c9012-fc6a-48eb-bec0-3765e882d224_666x662.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!FoSJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F193c9012-fc6a-48eb-bec0-3765e882d224_666x662.png" width="380" height="377.71771771771773" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/193c9012-fc6a-48eb-bec0-3765e882d224_666x662.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:662,&quot;width&quot;:666,&quot;resizeWidth&quot;:380,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Filing-category questions&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Filing-category questions" title="Filing-category questions" srcset="https://substackcdn.com/image/fetch/$s_!FoSJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F193c9012-fc6a-48eb-bec0-3765e882d224_666x662.png 424w, https://substackcdn.com/image/fetch/$s_!FoSJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F193c9012-fc6a-48eb-bec0-3765e882d224_666x662.png 848w, https://substackcdn.com/image/fetch/$s_!FoSJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F193c9012-fc6a-48eb-bec0-3765e882d224_666x662.png 1272w, https://substackcdn.com/image/fetch/$s_!FoSJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F193c9012-fc6a-48eb-bec0-3765e882d224_666x662.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YnT5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F714ec9f3-f115-4a63-8c78-52bcab731d49_666x1382.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YnT5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F714ec9f3-f115-4a63-8c78-52bcab731d49_666x1382.png 424w, https://substackcdn.com/image/fetch/$s_!YnT5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F714ec9f3-f115-4a63-8c78-52bcab731d49_666x1382.png 848w, https://substackcdn.com/image/fetch/$s_!YnT5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F714ec9f3-f115-4a63-8c78-52bcab731d49_666x1382.png 1272w, https://substackcdn.com/image/fetch/$s_!YnT5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F714ec9f3-f115-4a63-8c78-52bcab731d49_666x1382.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!YnT5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F714ec9f3-f115-4a63-8c78-52bcab731d49_666x1382.png" width="380" height="788.5285285285286" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/714ec9f3-f115-4a63-8c78-52bcab731d49_666x1382.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1382,&quot;width&quot;:666,&quot;resizeWidth&quot;:380,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Filing-category answer options&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Filing-category answer options" title="Filing-category answer options" srcset="https://substackcdn.com/image/fetch/$s_!YnT5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F714ec9f3-f115-4a63-8c78-52bcab731d49_666x1382.png 424w, https://substackcdn.com/image/fetch/$s_!YnT5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F714ec9f3-f115-4a63-8c78-52bcab731d49_666x1382.png 848w, https://substackcdn.com/image/fetch/$s_!YnT5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F714ec9f3-f115-4a63-8c78-52bcab731d49_666x1382.png 1272w, https://substackcdn.com/image/fetch/$s_!YnT5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F714ec9f3-f115-4a63-8c78-52bcab731d49_666x1382.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3XKm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0a18f27-1977-4550-bbdd-aa39c41d959c_666x630.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3XKm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0a18f27-1977-4550-bbdd-aa39c41d959c_666x630.png 424w, https://substackcdn.com/image/fetch/$s_!3XKm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0a18f27-1977-4550-bbdd-aa39c41d959c_666x630.png 848w, https://substackcdn.com/image/fetch/$s_!3XKm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0a18f27-1977-4550-bbdd-aa39c41d959c_666x630.png 1272w, https://substackcdn.com/image/fetch/$s_!3XKm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0a18f27-1977-4550-bbdd-aa39c41d959c_666x630.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!3XKm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0a18f27-1977-4550-bbdd-aa39c41d959c_666x630.png" width="380" height="359.4594594594595" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b0a18f27-1977-4550-bbdd-aa39c41d959c_666x630.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:630,&quot;width&quot;:666,&quot;resizeWidth&quot;:380,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Comment-letter questions&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Comment-letter questions" title="Comment-letter questions" srcset="https://substackcdn.com/image/fetch/$s_!3XKm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0a18f27-1977-4550-bbdd-aa39c41d959c_666x630.png 424w, https://substackcdn.com/image/fetch/$s_!3XKm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0a18f27-1977-4550-bbdd-aa39c41d959c_666x630.png 848w, https://substackcdn.com/image/fetch/$s_!3XKm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0a18f27-1977-4550-bbdd-aa39c41d959c_666x630.png 1272w, https://substackcdn.com/image/fetch/$s_!3XKm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0a18f27-1977-4550-bbdd-aa39c41d959c_666x630.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The post hoc domain run appends this exact text to the direct further-comments question:</p><blockquote><p>Background: when the filing under review is an investment-company form (N-1A, N-2, N-CSR, N-14, N-4, N-CEN), the staff almost never issues a further round of comments.</p></blockquote><p>The added statement is an intervention based on this sample, not an independently validated general fact about the SEC.</p><h3>Which models were tested, what text they received, and how they were trained</h3><p><a href="https://docs.typesafe.ai/introduction">Jev</a> receives full supplied text and typed questions without labeled examples. All measured runs are recorded as <code>jev-1.13.0</code>, September 21-October 7, 2026. Original compact task files lack version fields; the experiment record and October 7 sampled recheck supply the attribution. Of 591 earnings and 456 event answers compared in that recheck, 2 and 5 changed. This sampled agreement does not establish identical responses on the entire corpus.</p><p>BART is <code>facebook/bart-large-mnli</code>; zero-shot ModernBERT is <code>MoritzLaurer/ModernBERT-large-zeroshot-v2.0</code>. Candidate answers are hypotheses. Consecutive text windows reserve space for hypotheses within nominal contexts of 1,024 and 8,192 tokens. For each hypothesis, take its maximum entailment logit across the full document&#8217;s windows, then softmax over the alternatives. Thus, the two answer hypotheses can obtain their strongest evidence from different windows. BART item-title and plain-description variants are reported separately.</p><p>TF-IDF uses words/word pairs, sublinear term frequency, document-frequency limits of 2 and 0.9, and at most 50,000 features. Logistic regression uses C = 10 and at most 2,000 iterations. LightGBM uses 400 trees, learning rate 0.05, 31 leaves, minimum child size 10, and column fraction 0.3. We did not tune these settings for this article. Vocabulary and IDF are fitted before splitting, on the whole task corpus. Only classifier labels are held out.</p><p>The fine-tuned general encoder is <code>answerdotai/ModernBERT-large</code>; the finance encoder is <a href="https://huggingface.co/nlpaueb/sec-bert-base">SEC-BERT</a>, pretrained on 260,773 10-Ks from 1993-2019. ModernBERT uses two epochs, a learning rate of 2e-5, and a batch size of 2 with eight-step accumulation, for an effective batch of 16. SEC-BERT uses three epochs, a learning rate of 3e-5, and a batch size of 16. Both use weight decay 0.01, a linear schedule, and 10% warm-up. The runs used one RTX 3090.</p><p>ModernBERT uses a single nominal 4,096-token window, including special tokens. SEC-BERT processes up to eight 512-token windows, then averages probabilities. Content limits are 4,094 and 4,080 tokens, respectively, using different tokenizers; later text is dropped. Each SEC-BERT window inherits the document label, which may depend on information elsewhere. Earnings models have three outputs and mask missing labels. The limited training and window averaging are consequential design choices, not optimality claims. A one-fold ModernBERT check using five epochs and learning rate 5e-5 did not improve revenue accuracy; it was not a full tuning search.</p><h3>How companies were separated between training and testing</h3><p>For earnings and filing categories, companies are divided into five groups. Each classifier trains on four groups and is tested on the fifth, repeating until each group has been tested. This is GroupKFold splitting by CIK, the SEC&#8217;s company identifier. The earnings pool includes all 1,391 bodies: 330 have no task label, comprising 328 unmatched releases and the two matched but unlabeled releases. TF-IDF fitting masks missing labels separately for each question; the encoders mask missing output targets. Documents drawn therefore overstate supervision. The tables show the training counts for each split. Splits 1-5 correspond to stored fold IDs 0-4. Every 8-K training document is labeled, with 3,173-3,174 per fold.</p><p><strong>Earnings training documents</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cZ2d!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e37b6b9-4084-457d-b0df-86dde577b9d7_666x522.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cZ2d!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e37b6b9-4084-457d-b0df-86dde577b9d7_666x522.png 424w, https://substackcdn.com/image/fetch/$s_!cZ2d!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e37b6b9-4084-457d-b0df-86dde577b9d7_666x522.png 848w, https://substackcdn.com/image/fetch/$s_!cZ2d!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e37b6b9-4084-457d-b0df-86dde577b9d7_666x522.png 1272w, https://substackcdn.com/image/fetch/$s_!cZ2d!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e37b6b9-4084-457d-b0df-86dde577b9d7_666x522.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!cZ2d!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e37b6b9-4084-457d-b0df-86dde577b9d7_666x522.png" width="380" height="297.8378378378378" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8e37b6b9-4084-457d-b0df-86dde577b9d7_666x522.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:522,&quot;width&quot;:666,&quot;resizeWidth&quot;:380,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Earnings training documents&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Earnings training documents" title="Earnings training documents" srcset="https://substackcdn.com/image/fetch/$s_!cZ2d!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e37b6b9-4084-457d-b0df-86dde577b9d7_666x522.png 424w, https://substackcdn.com/image/fetch/$s_!cZ2d!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e37b6b9-4084-457d-b0df-86dde577b9d7_666x522.png 848w, https://substackcdn.com/image/fetch/$s_!cZ2d!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e37b6b9-4084-457d-b0df-86dde577b9d7_666x522.png 1272w, https://substackcdn.com/image/fetch/$s_!cZ2d!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e37b6b9-4084-457d-b0df-86dde577b9d7_666x522.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>Earnings training labels by question</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mJVB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1567ee15-e679-4ce4-a7e4-fed5330e21d5_666x522.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mJVB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1567ee15-e679-4ce4-a7e4-fed5330e21d5_666x522.png 424w, https://substackcdn.com/image/fetch/$s_!mJVB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1567ee15-e679-4ce4-a7e4-fed5330e21d5_666x522.png 848w, https://substackcdn.com/image/fetch/$s_!mJVB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1567ee15-e679-4ce4-a7e4-fed5330e21d5_666x522.png 1272w, https://substackcdn.com/image/fetch/$s_!mJVB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1567ee15-e679-4ce4-a7e4-fed5330e21d5_666x522.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!mJVB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1567ee15-e679-4ce4-a7e4-fed5330e21d5_666x522.png" width="380" height="297.8378378378378" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1567ee15-e679-4ce4-a7e4-fed5330e21d5_666x522.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:522,&quot;width&quot;:666,&quot;resizeWidth&quot;:380,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Earnings training labels&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Earnings training labels" title="Earnings training labels" srcset="https://substackcdn.com/image/fetch/$s_!mJVB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1567ee15-e679-4ce4-a7e4-fed5330e21d5_666x522.png 424w, https://substackcdn.com/image/fetch/$s_!mJVB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1567ee15-e679-4ce4-a7e4-fed5330e21d5_666x522.png 848w, https://substackcdn.com/image/fetch/$s_!mJVB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1567ee15-e679-4ce4-a7e4-fed5330e21d5_666x522.png 1272w, https://substackcdn.com/image/fetch/$s_!mJVB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1567ee15-e679-4ce4-a7e4-fed5330e21d5_666x522.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Letter text models train on 8,875 unique letters outside the test letters&#8217; first-recorded CIKs. A local audit confirms disjoint recorded CIK sets. Checking all co-registrant associations instead finds 86 letter-company IDs on both sides. These are nominal company-grouped tests, with residual issuer-association overlap for letters and full-corpus TF-IDF preprocessing.</p><p>The form-plus-length baseline instead excludes evaluated accessions and estimates outcome rates by subject form and length decile, using a minimum cell size of 20 and form/overall fallbacks. It trains on 14,961 corpus rows, retains co-registrant repetition and shares 1,727 company IDs with the evaluated letters. Its result is a simpler comparator with a different split, not an equally isolated-company model.</p><p>Learning curves randomly divide answered documents into two evaluation halves with seed zero. For each half, draw training documents from the other half plus unanswered documents, excluding evaluated recorded CIKs. Points are unweighted means of the two half scores; no repeated-seed uncertainty was measured. Earnings scores use all nonmissing labels, before the number check. We skipped the 800-document earnings draws because only 780 and 777 eligible documents remained. No grouped LightGBM curve was produced.</p><p>The eligible earnings pool ranges from 777 to 780 documents. Separate full-data folds draw 1,112-1,113 documents, with 845-853 carrying any label and 701-722 carrying revenue labels. The 400-document curve draws supply 198-220 revenue labels and uses Jev&#8217;s unfiltered 95.4% revenue reference, rather than the selected-release 98.5%. For comment letters, the 200-letter logistic-regression margin over Jev was 1.7 accuracy points.</p><p>The curve tables use &#8220;Logistic&#8221; for logistic regression. Training n counts documents used for fitting; earnings draw n also includes documents without labels.</p><p><strong>Filing-category learning curve: accuracy (%)</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!L0jP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F950c92e6-da12-413d-9232-f3eabeb3447d_666x554.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!L0jP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F950c92e6-da12-413d-9232-f3eabeb3447d_666x554.png 424w, https://substackcdn.com/image/fetch/$s_!L0jP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F950c92e6-da12-413d-9232-f3eabeb3447d_666x554.png 848w, https://substackcdn.com/image/fetch/$s_!L0jP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F950c92e6-da12-413d-9232-f3eabeb3447d_666x554.png 1272w, https://substackcdn.com/image/fetch/$s_!L0jP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F950c92e6-da12-413d-9232-f3eabeb3447d_666x554.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!L0jP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F950c92e6-da12-413d-9232-f3eabeb3447d_666x554.png" width="380" height="316.0960960960961" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/950c92e6-da12-413d-9232-f3eabeb3447d_666x554.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:554,&quot;width&quot;:666,&quot;resizeWidth&quot;:380,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Filing-category learning curve (%)&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Filing-category learning curve (%)" title="Filing-category learning curve (%)" srcset="https://substackcdn.com/image/fetch/$s_!L0jP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F950c92e6-da12-413d-9232-f3eabeb3447d_666x554.png 424w, https://substackcdn.com/image/fetch/$s_!L0jP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F950c92e6-da12-413d-9232-f3eabeb3447d_666x554.png 848w, https://substackcdn.com/image/fetch/$s_!L0jP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F950c92e6-da12-413d-9232-f3eabeb3447d_666x554.png 1272w, https://substackcdn.com/image/fetch/$s_!L0jP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F950c92e6-da12-413d-9232-f3eabeb3447d_666x554.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>Comment-letter learning curve: accuracy (%)</strong></p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wOJX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe16989be-39c9-48d7-9be3-72a4e0fa7be1_666x406.png 424w, https://substackcdn.com/image/fetch/$s_!wOJX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe16989be-39c9-48d7-9be3-72a4e0fa7be1_666x406.png 848w, https://substackcdn.com/image/fetch/$s_!wOJX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe16989be-39c9-48d7-9be3-72a4e0fa7be1_666x406.png 1272w, https://substackcdn.com/image/fetch/$s_!wOJX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe16989be-39c9-48d7-9be3-72a4e0fa7be1_666x406.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!wOJX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe16989be-39c9-48d7-9be3-72a4e0fa7be1_666x406.png" width="380" height="231.65165165165166" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e16989be-39c9-48d7-9be3-72a4e0fa7be1_666x406.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:406,&quot;width&quot;:666,&quot;resizeWidth&quot;:380,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Comment-letter learning curve (%)&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Comment-letter learning curve (%)" title="Comment-letter learning curve (%)" srcset="https://substackcdn.com/image/fetch/$s_!wOJX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe16989be-39c9-48d7-9be3-72a4e0fa7be1_666x406.png 424w, https://substackcdn.com/image/fetch/$s_!wOJX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe16989be-39c9-48d7-9be3-72a4e0fa7be1_666x406.png 848w, https://substackcdn.com/image/fetch/$s_!wOJX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe16989be-39c9-48d7-9be3-72a4e0fa7be1_666x406.png 1272w, https://substackcdn.com/image/fetch/$s_!wOJX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe16989be-39c9-48d7-9be3-72a4e0fa7be1_666x406.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div></figure></div><p>We did not test the 3,200-document filing point or the 100-, 400-, and 1,600-letter points. ModernBERT and SEC-BERT are fine-tuned in all learning curves.</p><p><strong>Earnings learning curves: accuracy (%)</strong></p><p>Revenue:</p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!it_6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fd81141-e106-40f3-b987-6b0869cec622_666x406.png 424w, https://substackcdn.com/image/fetch/$s_!it_6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fd81141-e106-40f3-b987-6b0869cec622_666x406.png 848w, https://substackcdn.com/image/fetch/$s_!it_6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fd81141-e106-40f3-b987-6b0869cec622_666x406.png 1272w, https://substackcdn.com/image/fetch/$s_!it_6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fd81141-e106-40f3-b987-6b0869cec622_666x406.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!it_6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fd81141-e106-40f3-b987-6b0869cec622_666x406.png" width="380" height="231.65165165165166" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2fd81141-e106-40f3-b987-6b0869cec622_666x406.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:406,&quot;width&quot;:666,&quot;resizeWidth&quot;:380,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Revenue learning curve (%)&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Revenue learning curve (%)" title="Revenue learning curve (%)" srcset="https://substackcdn.com/image/fetch/$s_!it_6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fd81141-e106-40f3-b987-6b0869cec622_666x406.png 424w, https://substackcdn.com/image/fetch/$s_!it_6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fd81141-e106-40f3-b987-6b0869cec622_666x406.png 848w, https://substackcdn.com/image/fetch/$s_!it_6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fd81141-e106-40f3-b987-6b0869cec622_666x406.png 1272w, https://substackcdn.com/image/fetch/$s_!it_6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fd81141-e106-40f3-b987-6b0869cec622_666x406.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div></figure></div><p>EPS:</p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1wnK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F796a3abc-3c7a-4aab-9a9b-b411bd3cd1ae_666x406.png 424w, https://substackcdn.com/image/fetch/$s_!1wnK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F796a3abc-3c7a-4aab-9a9b-b411bd3cd1ae_666x406.png 848w, https://substackcdn.com/image/fetch/$s_!1wnK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F796a3abc-3c7a-4aab-9a9b-b411bd3cd1ae_666x406.png 1272w, https://substackcdn.com/image/fetch/$s_!1wnK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F796a3abc-3c7a-4aab-9a9b-b411bd3cd1ae_666x406.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!1wnK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F796a3abc-3c7a-4aab-9a9b-b411bd3cd1ae_666x406.png" width="380" height="231.65165165165166" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/796a3abc-3c7a-4aab-9a9b-b411bd3cd1ae_666x406.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:406,&quot;width&quot;:666,&quot;resizeWidth&quot;:380,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;EPS learning curve (%)&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="EPS learning curve (%)" title="EPS learning curve (%)" srcset="https://substackcdn.com/image/fetch/$s_!1wnK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F796a3abc-3c7a-4aab-9a9b-b411bd3cd1ae_666x406.png 424w, https://substackcdn.com/image/fetch/$s_!1wnK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F796a3abc-3c7a-4aab-9a9b-b411bd3cd1ae_666x406.png 848w, https://substackcdn.com/image/fetch/$s_!1wnK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F796a3abc-3c7a-4aab-9a9b-b411bd3cd1ae_666x406.png 1272w, https://substackcdn.com/image/fetch/$s_!1wnK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F796a3abc-3c7a-4aab-9a9b-b411bd3cd1ae_666x406.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div></figure></div><p>Net loss:</p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0UUk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45b54104-951f-46a1-8217-7547495e6c07_666x406.png 424w, https://substackcdn.com/image/fetch/$s_!0UUk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45b54104-951f-46a1-8217-7547495e6c07_666x406.png 848w, https://substackcdn.com/image/fetch/$s_!0UUk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45b54104-951f-46a1-8217-7547495e6c07_666x406.png 1272w, https://substackcdn.com/image/fetch/$s_!0UUk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45b54104-951f-46a1-8217-7547495e6c07_666x406.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!0UUk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45b54104-951f-46a1-8217-7547495e6c07_666x406.png" width="380" height="231.65165165165166" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/45b54104-951f-46a1-8217-7547495e6c07_666x406.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:406,&quot;width&quot;:666,&quot;resizeWidth&quot;:380,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Net-loss learning curve (%)&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Net-loss learning curve (%)" title="Net-loss learning curve (%)" srcset="https://substackcdn.com/image/fetch/$s_!0UUk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45b54104-951f-46a1-8217-7547495e6c07_666x406.png 424w, https://substackcdn.com/image/fetch/$s_!0UUk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45b54104-951f-46a1-8217-7547495e6c07_666x406.png 848w, https://substackcdn.com/image/fetch/$s_!0UUk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45b54104-951f-46a1-8217-7547495e6c07_666x406.png 1272w, https://substackcdn.com/image/fetch/$s_!0UUk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45b54104-951f-46a1-8217-7547495e6c07_666x406.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div></figure></div><p><strong>Effective supervision in the earnings curves</strong></p><p>Each point averages two separate tests, groups A and B (stored half IDs 0 and 1). Documents without the required answer do not train that question.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!W47d!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8ff8def-9c95-43e8-a479-764525fcfeab_666x628.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!W47d!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8ff8def-9c95-43e8-a479-764525fcfeab_666x628.png 424w, https://substackcdn.com/image/fetch/$s_!W47d!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8ff8def-9c95-43e8-a479-764525fcfeab_666x628.png 848w, https://substackcdn.com/image/fetch/$s_!W47d!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8ff8def-9c95-43e8-a479-764525fcfeab_666x628.png 1272w, https://substackcdn.com/image/fetch/$s_!W47d!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8ff8def-9c95-43e8-a479-764525fcfeab_666x628.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!W47d!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8ff8def-9c95-43e8-a479-764525fcfeab_666x628.png" width="380" height="358.3183183183183" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a8ff8def-9c95-43e8-a479-764525fcfeab_666x628.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:628,&quot;width&quot;:666,&quot;resizeWidth&quot;:380,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Earnings curve: labeled documents&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Earnings curve: labeled documents" title="Earnings curve: labeled documents" srcset="https://substackcdn.com/image/fetch/$s_!W47d!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8ff8def-9c95-43e8-a479-764525fcfeab_666x628.png 424w, https://substackcdn.com/image/fetch/$s_!W47d!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8ff8def-9c95-43e8-a479-764525fcfeab_666x628.png 848w, https://substackcdn.com/image/fetch/$s_!W47d!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8ff8def-9c95-43e8-a479-764525fcfeab_666x628.png 1272w, https://substackcdn.com/image/fetch/$s_!W47d!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8ff8def-9c95-43e8-a479-764525fcfeab_666x628.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4FQb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50d3bd57-4ca5-4eac-8dc6-63dd2dfd8e1c_666x852.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4FQb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50d3bd57-4ca5-4eac-8dc6-63dd2dfd8e1c_666x852.png 424w, https://substackcdn.com/image/fetch/$s_!4FQb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50d3bd57-4ca5-4eac-8dc6-63dd2dfd8e1c_666x852.png 848w, https://substackcdn.com/image/fetch/$s_!4FQb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50d3bd57-4ca5-4eac-8dc6-63dd2dfd8e1c_666x852.png 1272w, https://substackcdn.com/image/fetch/$s_!4FQb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50d3bd57-4ca5-4eac-8dc6-63dd2dfd8e1c_666x852.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!4FQb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50d3bd57-4ca5-4eac-8dc6-63dd2dfd8e1c_666x852.png" width="380" height="486.1261261261261" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/50d3bd57-4ca5-4eac-8dc6-63dd2dfd8e1c_666x852.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:852,&quot;width&quot;:666,&quot;resizeWidth&quot;:380,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Earnings curve: labels by question&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Earnings curve: labels by question" title="Earnings curve: labels by question" srcset="https://substackcdn.com/image/fetch/$s_!4FQb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50d3bd57-4ca5-4eac-8dc6-63dd2dfd8e1c_666x852.png 424w, https://substackcdn.com/image/fetch/$s_!4FQb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50d3bd57-4ca5-4eac-8dc6-63dd2dfd8e1c_666x852.png 848w, https://substackcdn.com/image/fetch/$s_!4FQb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50d3bd57-4ca5-4eac-8dc6-63dd2dfd8e1c_666x852.png 1272w, https://substackcdn.com/image/fetch/$s_!4FQb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50d3bd57-4ca5-4eac-8dc6-63dd2dfd8e1c_666x852.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Curve sizes count documents drawn; only nonmissing earnings labels provide supervision. Full-data fits and curve points are separate experiments. Historical company grouping is not a forward time split. Neither company-size strata nor this design rules out prior exposure to the public filings. No after-training-cutoff test was performed.</p><h3>How well the earnings probabilities ranked positive and negative answers</h3><p>These scores use the main accuracy table&#8217;s populations: selected revenue and EPS releases, and all labeled net-loss observations. AUCs for Jev and the language-model baselines were recomputed from retained probabilities, with half credit for ties. TF-IDF AUCs come from the saved score table; its per-document predictions were not retained. The constant-score reference has AUC 0.500.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YNQ7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F780ad254-5045-4b12-89da-2742992817fe_666x958.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YNQ7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F780ad254-5045-4b12-89da-2742992817fe_666x958.png 424w, https://substackcdn.com/image/fetch/$s_!YNQ7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F780ad254-5045-4b12-89da-2742992817fe_666x958.png 848w, https://substackcdn.com/image/fetch/$s_!YNQ7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F780ad254-5045-4b12-89da-2742992817fe_666x958.png 1272w, https://substackcdn.com/image/fetch/$s_!YNQ7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F780ad254-5045-4b12-89da-2742992817fe_666x958.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!YNQ7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F780ad254-5045-4b12-89da-2742992817fe_666x958.png" width="380" height="546.6066066066066" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/780ad254-5045-4b12-89da-2742992817fe_666x958.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:958,&quot;width&quot;:666,&quot;resizeWidth&quot;:380,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Earnings AUC&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Earnings AUC" title="Earnings AUC" srcset="https://substackcdn.com/image/fetch/$s_!YNQ7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F780ad254-5045-4b12-89da-2742992817fe_666x958.png 424w, https://substackcdn.com/image/fetch/$s_!YNQ7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F780ad254-5045-4b12-89da-2742992817fe_666x958.png 848w, https://substackcdn.com/image/fetch/$s_!YNQ7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F780ad254-5045-4b12-89da-2742992817fe_666x958.png 1272w, https://substackcdn.com/image/fetch/$s_!YNQ7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F780ad254-5045-4b12-89da-2742992817fe_666x958.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>How probabilities were scored and answers selected for high precision</h3><p>Binary decisions use P(yes) at 0.5; multiclass decisions choose the largest probability. Letter questions phrased positively about resolution are complemented into P(further comments). AUC gives tied probabilities half credit. A strictly increasing recalibration preserves ranking, though mappings that create ties can alter AUC. Brier measures probability error and does not alone establish calibration.</p><p><strong>Effect of the letter question</strong></p><p>Short row names refer to the exact questions above.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!UJAk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17375bdd-cb87-423c-9715-e2c418924f05_666x640.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UJAk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17375bdd-cb87-423c-9715-e2c418924f05_666x640.png 424w, https://substackcdn.com/image/fetch/$s_!UJAk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17375bdd-cb87-423c-9715-e2c418924f05_666x640.png 848w, https://substackcdn.com/image/fetch/$s_!UJAk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17375bdd-cb87-423c-9715-e2c418924f05_666x640.png 1272w, https://substackcdn.com/image/fetch/$s_!UJAk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17375bdd-cb87-423c-9715-e2c418924f05_666x640.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!UJAk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17375bdd-cb87-423c-9715-e2c418924f05_666x640.png" width="380" height="365.16516516516515" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/17375bdd-cb87-423c-9715-e2c418924f05_666x640.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:640,&quot;width&quot;:666,&quot;resizeWidth&quot;:380,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Effect of the letter question&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Effect of the letter question" title="Effect of the letter question" srcset="https://substackcdn.com/image/fetch/$s_!UJAk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17375bdd-cb87-423c-9715-e2c418924f05_666x640.png 424w, https://substackcdn.com/image/fetch/$s_!UJAk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17375bdd-cb87-423c-9715-e2c418924f05_666x640.png 848w, https://substackcdn.com/image/fetch/$s_!UJAk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17375bdd-cb87-423c-9715-e2c418924f05_666x640.png 1272w, https://substackcdn.com/image/fetch/$s_!UJAk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17375bdd-cb87-423c-9715-e2c418924f05_666x640.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ezR9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72147c89-a2d8-4e79-9619-e04c10dab3ff_666x512.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ezR9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72147c89-a2d8-4e79-9619-e04c10dab3ff_666x512.png 424w, https://substackcdn.com/image/fetch/$s_!ezR9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72147c89-a2d8-4e79-9619-e04c10dab3ff_666x512.png 848w, https://substackcdn.com/image/fetch/$s_!ezR9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72147c89-a2d8-4e79-9619-e04c10dab3ff_666x512.png 1272w, https://substackcdn.com/image/fetch/$s_!ezR9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72147c89-a2d8-4e79-9619-e04c10dab3ff_666x512.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!ezR9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72147c89-a2d8-4e79-9619-e04c10dab3ff_666x512.png" width="380" height="292.13213213213214" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/72147c89-a2d8-4e79-9619-e04c10dab3ff_666x512.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:512,&quot;width&quot;:666,&quot;resizeWidth&quot;:380,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Mean probability of further comments&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Mean probability of further comments" title="Mean probability of further comments" srcset="https://substackcdn.com/image/fetch/$s_!ezR9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72147c89-a2d8-4e79-9619-e04c10dab3ff_666x512.png 424w, https://substackcdn.com/image/fetch/$s_!ezR9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72147c89-a2d8-4e79-9619-e04c10dab3ff_666x512.png 848w, https://substackcdn.com/image/fetch/$s_!ezR9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72147c89-a2d8-4e79-9619-e04c10dab3ff_666x512.png 1272w, https://substackcdn.com/image/fetch/$s_!ezR9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72147c89-a2d8-4e79-9619-e04c10dab3ff_666x512.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>Probability error outside investment-company forms</strong></p><p>The full-sample letter accuracy, AUC, and Brier scores are in the main results table. This table adds the Brier scores after excluding fund forms.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zwSO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4739592f-7f42-436e-9785-a42f2d22fe1e_666x946.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zwSO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4739592f-7f42-436e-9785-a42f2d22fe1e_666x946.png 424w, https://substackcdn.com/image/fetch/$s_!zwSO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4739592f-7f42-436e-9785-a42f2d22fe1e_666x946.png 848w, https://substackcdn.com/image/fetch/$s_!zwSO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4739592f-7f42-436e-9785-a42f2d22fe1e_666x946.png 1272w, https://substackcdn.com/image/fetch/$s_!zwSO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4739592f-7f42-436e-9785-a42f2d22fe1e_666x946.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!zwSO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4739592f-7f42-436e-9785-a42f2d22fe1e_666x946.png" width="380" height="539.7597597597597" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4739592f-7f42-436e-9785-a42f2d22fe1e_666x946.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:946,&quot;width&quot;:666,&quot;resizeWidth&quot;:380,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Brier excluding investment-company forms&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Brier excluding investment-company forms" title="Brier excluding investment-company forms" srcset="https://substackcdn.com/image/fetch/$s_!zwSO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4739592f-7f42-436e-9785-a42f2d22fe1e_666x946.png 424w, https://substackcdn.com/image/fetch/$s_!zwSO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4739592f-7f42-436e-9785-a42f2d22fe1e_666x946.png 848w, https://substackcdn.com/image/fetch/$s_!zwSO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4739592f-7f42-436e-9785-a42f2d22fe1e_666x946.png 1272w, https://substackcdn.com/image/fetch/$s_!zwSO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4739592f-7f42-436e-9785-a42f2d22fe1e_666x946.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The three original letter questions imply mean probabilities of further comments of 0.44, 0.60, and 0.82. Adding domain information lowers the overall mean of the direct question from 0.44 to 0.35. The four sizeable fund-form groups&#8217; Brier ranges change from 0.1003-0.2132 to 0.0131-0.0356, or roughly 0.10-0.21 to 0.013-0.036. For S-4 responses, Brier worsens from 0.2391 to 0.2631; for F-4, from 0.2624 to 0.2923. The pooled improvement from 0.2204 to 0.1878 closes 66% of the gap to the form-plus-length comparator&#8217;s 0.1711, while leaving the trained text models ahead.</p><p>Brier includes both reliability and resolution effects; a lower Brier score alone does not prove calibration. Pooled results combine different filing-form populations. After examining the original results, we selected the domain-information run and nine-category event analysis.</p><p>For coverage, rank the top answer probability for all methods, accept whole ties together, and select the widest evaluated set at or above 99% observed precision. Jev&#8217;s separately documented confidence output was not retained in these compact task files. All submitted usable documents receive answers; this metric adds selective acceptance afterward. It is neither class recall nor a prospectively fixed operating threshold. The tables below retain original keys.</p><p><strong>Earnings coverage at 99% observed precision (%)</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4F-T!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d25854d-7803-48e9-8733-ed7c3d0acecf_666x958.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4F-T!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d25854d-7803-48e9-8733-ed7c3d0acecf_666x958.png 424w, https://substackcdn.com/image/fetch/$s_!4F-T!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d25854d-7803-48e9-8733-ed7c3d0acecf_666x958.png 848w, https://substackcdn.com/image/fetch/$s_!4F-T!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d25854d-7803-48e9-8733-ed7c3d0acecf_666x958.png 1272w, https://substackcdn.com/image/fetch/$s_!4F-T!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d25854d-7803-48e9-8733-ed7c3d0acecf_666x958.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!4F-T!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d25854d-7803-48e9-8733-ed7c3d0acecf_666x958.png" width="380" height="546.6066066066066" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4d25854d-7803-48e9-8733-ed7c3d0acecf_666x958.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:958,&quot;width&quot;:666,&quot;resizeWidth&quot;:380,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Earnings coverage at 99% precision (%)&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Earnings coverage at 99% precision (%)" title="Earnings coverage at 99% precision (%)" srcset="https://substackcdn.com/image/fetch/$s_!4F-T!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d25854d-7803-48e9-8733-ed7c3d0acecf_666x958.png 424w, https://substackcdn.com/image/fetch/$s_!4F-T!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d25854d-7803-48e9-8733-ed7c3d0acecf_666x958.png 848w, https://substackcdn.com/image/fetch/$s_!4F-T!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d25854d-7803-48e9-8733-ed7c3d0acecf_666x958.png 1272w, https://substackcdn.com/image/fetch/$s_!4F-T!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d25854d-7803-48e9-8733-ed7c3d0acecf_666x958.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The nine-class accuracy uses filings whose true item is outside 7.01/8.01. Coverage uses all 3,006 filings at 99% observed precision.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!TSTg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F113a2ee5-2a13-4a22-a2e5-5a4a724d8ebc_666x968.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!TSTg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F113a2ee5-2a13-4a22-a2e5-5a4a724d8ebc_666x968.png 424w, https://substackcdn.com/image/fetch/$s_!TSTg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F113a2ee5-2a13-4a22-a2e5-5a4a724d8ebc_666x968.png 848w, https://substackcdn.com/image/fetch/$s_!TSTg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F113a2ee5-2a13-4a22-a2e5-5a4a724d8ebc_666x968.png 1272w, https://substackcdn.com/image/fetch/$s_!TSTg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F113a2ee5-2a13-4a22-a2e5-5a4a724d8ebc_666x968.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!TSTg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F113a2ee5-2a13-4a22-a2e5-5a4a724d8ebc_666x968.png" width="380" height="552.3123123123123" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/113a2ee5-2a13-4a22-a2e5-5a4a724d8ebc_666x968.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:968,&quot;width&quot;:666,&quot;resizeWidth&quot;:380,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Filing-category accuracy and coverage (%)&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Filing-category accuracy and coverage (%)" title="Filing-category accuracy and coverage (%)" srcset="https://substackcdn.com/image/fetch/$s_!TSTg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F113a2ee5-2a13-4a22-a2e5-5a4a724d8ebc_666x968.png 424w, https://substackcdn.com/image/fetch/$s_!TSTg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F113a2ee5-2a13-4a22-a2e5-5a4a724d8ebc_666x968.png 848w, https://substackcdn.com/image/fetch/$s_!TSTg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F113a2ee5-2a13-4a22-a2e5-5a4a724d8ebc_666x968.png 1272w, https://substackcdn.com/image/fetch/$s_!TSTg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F113a2ee5-2a13-4a22-a2e5-5a4a724d8ebc_666x968.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Original-key scores do not resolve label ambiguities, omitted comparisons, or missing inputs observed in the data. The evidence supports method comparisons on the selected historical documents. It does not measure live research acceptance, probability portability, or investment returns.</p><h3>Merger samples and the effect of including market probabilities</h3><p>The raw closing-conditions run includes 3,106 resolved deals announced in 2005-2026, with 234 breaks (7.5%). AUC is 0.504, and Brier is 0.2151, versus 0.0697 for the constant sample-rate forecast. Extracted deal cards with market-implied probabilities cover 1,956 deals and score AUC 0.601. On 393 paired deals, including 22 breaks, removing the market input lowers AUC from 0.551 to 0.386 and produces a mean completion probability of 0.5006. Probability standard deviation falls from 0.1060 to 0.0321. On 770 paired cards, a separately tested riskier wording changes the mean completion probability by -0.0093. These are different selected samples; their AUCs are not a paired estimate of the gain from adding market information.</p>]]></content:encoded></item><item><title><![CDATA[What Leading Hedge Funds Disclose About AI For Investment Research]]></title><description><![CDATA[What funds delegate, where investment expertise enters, and what their reported results measure.]]></description><link>https://insights.ml4trading.io/p/what-leading-hedge-funds-disclose</link><guid isPermaLink="false">https://insights.ml4trading.io/p/what-leading-hedge-funds-disclose</guid><dc:creator><![CDATA[Stefan Jansen]]></dc:creator><pubDate>Tue, 06 Oct 2026 15:02:42 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/7bf95e3f-bb9a-4982-bfb0-4abdcf37fd3d_2400x1260.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>When a takeover is announced, agents at Balyasny extract the economic and legal terms, review closing conditions, and estimate whether and when it will close. Chief AI Officer <a href="https://claude.com/blog/working-at-the-frontier-how-balyasny-asset-management-evaluates-and-governs-claude-fable-5">Charlie Flanagan</a> says this research package now takes less than a day, including human review, compared with three to five days previously. The agent&#8217;s run takes about 30 minutes.</p><p>The assignment continues after the first assessment. Agents <a href="https://openai.com/index/balyasny-asset-management/">update deal probabilities</a> as filings and press releases arrive. Balyasny&#8217;s central Applied AI team supplies infrastructure that investment teams customize around their strategies. Investors retain judgment over the conclusions they use.</p><p>My comparison of these accounts examines how funds specify the work they delegate and decide whether to accept the result. Investment expertise enters through data and labels, definitions and instructions, executable tools, and acceptance criteria. Bridgewater provides the broadest technical record in this selection, along with a live investment program.</p><div id="datawrapper-iframe" class="datawrapper-wrap outer" data-attrs="{&quot;url&quot;:&quot;https://datawrapper.dwcdn.net/TYOra/2/&quot;,&quot;thumbnail_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8b930554-4afd-40f8-97be-dd8f79411e5f_1220x808.png&quot;,&quot;thumbnail_url_full&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8d985e64-7218-493a-8e24-b51f2311fb4f_1220x878.png&quot;,&quot;height&quot;:400,&quot;title&quot;:&quot;How funds delegate research&quot;,&quot;description&quot;:&quot;&quot;,&quot;belowTheFold&quot;:false}" data-component-name="DatawrapperToDOM"><iframe id="iframe-datawrapper" class="datawrapper-iframe" src="https://datawrapper.dwcdn.net/TYOra/2/" width="730" height="400" frameborder="0" scrolling="no"></iframe><script type="text/javascript">!function(){"use strict";window.addEventListener("message",(function(e){if(void 0!==e.data["datawrapper-height"]){var t=document.querySelectorAll("iframe");for(var a in e.data["datawrapper-height"])for(var r=0;r<t.length;r++){if(t[r].contentWindow===e.source)t[r].style.height=e.data["datawrapper-height"][a]+"px"}}}))}();</script></div><p><em>Public disclosures through October 1, 2026. Sources and dates at the end.</em></p><div class="callout-block" data-callout="true"><p>I&#8217;m launching a new workshop, <strong>Saturday, October 10, 10:00 AM-2:30 PM ET</strong>, <a href="https://maven.com/stefan-jansen/ml4t-ai-agents?promoCode=ML4T-WORKSHOP">ML for Trading in the Age of AI Agents</a>, on how coding and research agents change strategy research. </p><p>Tomorrow&#8217;s free lesson, <a href="https://maven.com/p/222e36">How AI Agents Change the ML for Trading Workflow</a>, introduces the workflow. Register for the lesson to receive a workshop discount.</p></div><h2>Investment models predate research agents</h2><p>Hedge funds were using machine learning before conversational LLMs. In a <a href="https://www.man.com/insights/intro-machine-learning">2019 interview</a>, Man AHL&#8217;s Anthony Ledford described ML in daily and intraday strategies, execution algorithms, and smart order routing, including deployed text-based strategies. AQR states that it <a href="https://www.aqr.com/learning-center/machine-learning">actively uses ML</a> across its investment process. Its <a href="https://www.aqr.com/Insights/Research/Alternative-Thinking/Can-Machines-Build-Better-Stock-Portfolios">November 2024 portfolio study</a> illustrates learning nonlinear relationships between stock predictors and returns, separately from a managed portfolio&#8217;s performance.</p><p>Research agents add activities around those models. They can prepare data, investigate documents, write experiments, and revisit an analysis. The distinction helps locate responsibility. An agent that implements a candidate signal still depends on the research criteria used to accept it and the portfolio process used to trade it.</p><h2>Millennium retains assignments and employee permissions</h2><p>Millennium reports <a href="https://www.mlp.com/life-at-millennium/qa-with-diana-meditz-digital-twins-at-millennium/">more than 1,600 personalized assistants</a>, called Digital Twins, in use across the firm. Employees delegate recurring research, meeting preparation, and scheduled work through email. AI Product Manager Diana Meditz gives a specific example. Her assistant reviews overnight AI news and relevant inbox updates, then delivers a morning report without another prompt. Each assistant has its own identity and retained context. It starts with no access, receives permissions system by system, and cannot exceed its employee&#8217;s entitlements. The count measures adoption across employees; the firm supplies no measured gain in research quality.</p><p>Balyasny&#8217;s deal agent revisits an assessment when evidence changes. Millennium&#8217;s morning assistant carries a standing assignment into the next scheduled run. A team borrowing either approach has to specify what persists. For deal research, that includes the current assessment and evidence that could change it. For a morning report, it includes the employee&#8217;s instructions, relevant sources, and delivery schedule. Retained conversation alone would leave those requirements ambiguous.</p><p>Millennium separately announced a project with Anthropic to build, pilot, and optimize a <a href="https://www.mlp.com/life-at-millennium/millennium-and-anthropic-to-co-develop-ai-powered-digital-risk-analyst/">digital risk analyst</a>. It would explain daily changes in risk positions and retain context across questions to support human risk managers. The risk analyst remains a development announcement, separate from the deployed Digital Twins.</p><p>D. E. Shaw&#8217;s <a href="https://www.businessinsider.com/wall-street-top-technology-projects-goldman-blackstone-morgan-stanley-2024-8">Neil Katz</a> described a similar infrastructure approach in 2024: Assistants, an LLM Gateway, and DocLab for querying documents. Teams could connect models to their own data and software. D. E. Shaw and Balyasny both provide common infrastructure with local customization, enabling investment teams to specify work for their own strategies.</p><h2>Citadel replicates papers; Man generates signal candidates</h2><p>Citadel&#8217;s Ken Griffin described an agent that reads a finance paper, reproduces its results, and produces out-of-sample results. He reported an average of <a href="https://www.goldmansachs.com/insights/goldman-sachs-exchanges/citadels-ken-griffin-on-ai-us-china-tensions-and-us-data-centers">two to three hours per paper</a>, against a human process taking six to eight weeks. The transcript supplies no paper list, failure rate, or accounting of human review time. Griffin also said the automation had not reduced headcount. Citadel had more problems for its existing people to pursue.</p><p><a href="https://www.man.com/insights/what-ai-can-do-for-alpha">Man&#8217;s AlphaGPT</a> starts earlier in research. Separate components propose hypotheses, translate them into code using internal tools and databases, and evaluate candidate signals against statistical, risk, and economic criteria. Man reports its greatest success so far in systematic equity research. Its investment committee reviews hypotheses and economic reasoning, while technology teams review implementation and tests before live use. The account establishes candidates passing internal research thresholds, without attributing live returns to AlphaGPT.</p><p>The comparison exposes a shared implementation problem. Citadel starts with a published method that the experiment must preserve. Man starts with a proposed relationship that the generated code must measure. Man explicitly warns that an agent can <a href="https://www.man.com/insights/what-ai-can-do-for-alpha">propose one idea and implement another</a>. Its example asks whether stocks with more buy orders than sell orders tend to outperform. To implement that idea, a researcher would need to specify whether &#8220;more&#8221; means order counts or submitted share volume, over which interval, and when the information becomes available. A successful backtest using a different definition would still answer a different research question. Man also identifies the multiple-testing risk from producing many candidate signals and describes expanding monitoring infrastructure to maintain oversight quality as signal volume grows.</p><p>Man also describes using Claude Skills to express workflows in plain English. Its <a href="https://www.man.com/news-centre/man-group-anthropic-partnership">partnership announcement with Anthropic</a> names AlphaGPT as an existing tool.</p><h2>Two Sigma lowers the cost of preparing research ideas</h2><p>Two Sigma&#8217;s <a href="https://www.twosigma.com/articles/anything-can-be-language-now-my-thoughts-on-the-future-of-features-research/">Ben Wellington</a> explains a different output. An LLM can generate descriptions of companies or events, which researchers can analyze as datasets. He uses CEO microexpressions during earnings calls as an example of an idea whose technical preparation had previously made it expensive to explore. The example illustrates a research possibility, without identifying a deployed predictor. Researchers supply the question and test whether the generated data contains predictive information. Wellington warns that poorly designed automation can make their results increasingly homogeneous.</p><p>Wellington reports <a href="https://www.twosigma.com/articles/ai-in-investment-management-2026-outlook-part-ii/">feature-research insights arriving in days</a> where the work previously took months, without supplying a controlled timing sample. CTO Jeff Wecker describes adapting AI tools to internal platforms. Cheaper preparation can reopen ideas researchers had previously set aside. Citadel&#8217;s account similarly describes using existing staff to investigate more problems.</p><p>Generated research data introduces a historical-information problem. Two Sigma&#8217;s Jin Choi explicitly warns about trusting <a href="https://www.twosigma.com/articles/ai-in-investment-management-2026-outlook-part-ii/">backtests that predate an LLM&#8217;s knowledge cutoff</a>. A model labeling an old earnings call may know events that occurred afterward. For a team adopting the method, the source date, model version, and prompt version belong in the research record. Those records help investigate leakage, although recording them alone cannot remove knowledge already in the model.</p><h2>Bridgewater uses investor judgment in data, plans and tests</h2><p>Bridgewater describes <a href="https://www.bridgewater.com/aia-labs">AIA Labs&#8217; ambition</a> as an artificial investor capable of the range of activities human investors perform. The firm&#8217;s account also describes AI research and tools feeding back into Pure Alpha, with experienced investors supplying feedback. Its resources include macroeconomic data, recorded investment reasoning, and investor expertise. Its public studies show different ways of using those resources.</p><h3>Investor labels define what is worth reading</h3><p>Bridgewater and Thinking Machines examined <a href="https://www.bridgewater.com/aia-labs/learning-to-replicate-expert-judgment-in-financial-tasks">six document-filtering and segmentation tasks</a> on data cleared for public release. Relevance depends on the investor&#8217;s question and responsibilities. The researchers first improved prompts by asking experts to articulate distinctions such as financially relevant versus useful to a macro investor. Expert prompting raised frontier-model accuracy from roughly 50% into the mid-to-high 70s.</p><p>Training examples supplied further judgment. The team initially trained on non-expert vendor labels, then sent examples where the model disagreed with its training label to investors for correction. Final evaluation used a held-out set. A trained Qwen3-235B model reached <a href="https://thinkingmachines.ai/news/learning-to-replicate-expert-judgment-in-financial-tasks/">84.7% average accuracy</a>, versus 78.2% for the best prompted frontier comparator. The 13.8-fold saving concerns inference cost per task, excluding annotation, training, and integration. Ablations show that training choices also affect accuracy.</p><p>The method uses expert attention to settle contested examples and expert instructions to define the task. The result measures agreement with investor labels on the disclosed tasks. It does not isolate the effect of labels from the training procedure or compare with a closed model fine-tuned on the same data.</p><h3>PAT turns a research question into inspectable computation</h3><p>The <a href="https://www.bridgewater.com/aia-labs/how-bridgewaters-aia-labs-built-pat-the-ai-pocket-analyst-tool">Pocket Analyst Tool</a>, or PAT, performs exploratory research. Bridgewater&#8217;s applied AI team describes an internally deployed analyst used by hundreds of investors. PAT retrieves proprietary documents and series, clarifies the question, and plans dataframe outputs with <a href="https://www.youtube.com/watch?v=lXZb21CfeIY">declared schemas and dependencies</a>. Its execution architecture enforces validation and caches intermediate calculations. User corrections can become human-audited benchmarks and reviewed changes to context or implementation.</p><p>PAT makes the intended analysis explicit before generating code. That addresses the same relationship between research intent and implementation raised by Citadel and Man. The analyst can inspect the plan and revise the analysis. The presenters scope PAT as exploratory research, separate from trading. I covered the architecture in <a href="https://insights.ml4trading.io/p/how-bridgewater-engineers-a-research">How Bridgewater Engineers a Research Agent</a>.</p><h3>SQL execution can succeed while the calculation is wrong</h3><p>A <a href="https://www.bridgewater.com/aia-labs/putting-task-expertise-into-rl-to-achieves-state-of-the-art-on-text-to-sql">text-to-SQL study</a> by researchers at UIUC and Bridgewater AIA Labs, in collaboration with Thinking Machines, shows how successful execution can mislead. The researchers combine expert-checked training data with rewards that examine query behavior.</p><p>In the study&#8217;s example, a generated query averages line-item prices when the question requires average order totals. The result happens to match because every order in that database has one line item. With multi-item orders, the queries can return different averages. In a pilot training run, <a href="https://www.bridgewater.com/aia-labs/putting-task-expertise-into-rl-to-achieves-state-of-the-art-on-text-to-sql">32.8% of positive execution-match rewards</a> went to queries that failed the additional equivalence check. The authors downweighted those rewards using bounded verification of query equivalence. Task definitions therefore enter the training objective as well as the prompt. This is database-query research, with no disclosed internal rollout.</p><h3>A forecaster can add information while trailing the market</h3><p>The AIA Forecaster report studies probability forecasts. Multiple agents search news, a supervisor investigates disagreements with further searches, and a statistical correction calibrates the combined forecast. The authors report no statistically significant difference from <a href="https://arxiv.org/html/2511.07678v1#S4.SS2">expert superforecasters</a> on the two ForecastBench sets with those comparisons. That result concerns those tests, not general forecasting equivalence.</p><p>On MarketLiquid, the report gives <a href="https://arxiv.org/html/2511.07678v1#S5.SS3">rounded Brier scores</a> of 0.126 for AIA and 0.111 for market consensus, where lower is better. A fitted combination scored 0.106 under leave-one-out evaluation. The benchmark covers 322 events at five forecast dates each, yielding 1,610 questions. These events resolved in April- May 2025. A forecast can contribute information even when it performs worse alone than the forecast already available. This results from combining probabilities before portfolio sizing, costs, and risk constraints.</p><div class="callout-block" data-callout="true"><p>My <a href="https://maven.com/stefan-jansen/agent-engineering">Agent Engineering: Build, Evaluate, and Deploy AI Agents</a> workshop (4th session on November 21) covers the architecture described by Bridgewater's AIA Forecaster and teaches multi-agent system design, evaluation, and deployment. Use the link for an <strong>early-bird discount through October 31.</strong></p></div><h2>AIA Macro: returns and investment history</h2><p>Reuters dates Bridgewater&#8217;s AI-strategy work to 2018 and <a href="https://www.channelnewsasia.com/business/bridgewaters-flagship-macro-fund-gains-81-in-first-half-amid-market-volatility-sources-say-6226001">AIA Macro&#8217;s inception to late 2023</a>. Bridgewater&#8217;s July 2024 statement then described a vehicle with external-client capital that combines tabular learning, reasoning tools, and LLMs. It specified <a href="https://www.bridgewater.com/in-the-news/bloomberg-on-bridgewaters-latest-innovations-in-ai-ml">$1.6 billion in AUM</a> raised in nominal terms.</p><p><a href="https://www.investing.com/news/stock-market-news/bridgewaters-flagship-macro-fund-posts-robust-doubledigit-gains-this-year-sources-say-4927855">Reuters reports AIA Macro&#8217;s</a> 16.4% January-September gain beside Pure Alpha&#8217;s 18.4% for the same interval. One unnamed source supplied the AIA figures, including 13.2% annualized since inception and over $4.5 billion in current AUM. Current AUM and the earlier nominal raised-AUM disclosure have different measurement bases. The report does not specify the fee basis, risk exposures, or tool-level return attribution.</p><p>The same-period comparison describes two strategy outcomes. According to Bridgewater, Pure Alpha also uses <a href="https://www.bridgewater.com/aia-labs">research and tools developed with AIA Labs</a>. It cannot serve as an AI-disabled control. Nor does the public record connect AIA Macro&#8217;s return to PAT, the document filter, the SQL model, or this particular forecaster.</p><h2>What a research team must specify before delegating work</h2><p>For a team adapting these methods, the work product determines the first check. A document filter needs examples of what this investor would read and what it must not discard. A deal-monitoring agent needs the evidence behind its current probability and rules for revisiting it. A paper-replication or signal agent needs an inspectable link from the stated hypothesis to the variables and code that test it.</p><p>Balyasny explains how it tests those dependencies. Flanagan describes evaluating models both alone and within the <a href="https://claude.com/blog/working-at-the-frontier-how-balyasny-asset-management-evaluates-and-governs-claude-fable-5">full agent environment</a>, with users&#8217; tools, files, and requirements. The tests examine numerical mistakes, missed coverage, unsupported conclusions, and retrieval failures. When an economics result improved unexpectedly, the team reran the evaluation and checked the tasks and scoring before accepting it. A team adapting this method can test the research deliverable with its actual dependencies, alongside the model&#8217;s isolated performance.</p><p>Cheaper preparation and implementation can expand the research agenda. The constraint may then become the team&#8217;s ability to distinguish useful results from errors and statistical accidents. A useful adoption test measures reliable research accepted for use, at a total cost that includes expert review. Where the output informs forecasts or portfolio decisions, evaluate its incremental contribution to the existing process.</p><h2>Sources</h2><p>Dates below identify publication or announcement, except where a recording, submission or investment event is specified. Dates without a year are in 2026.</p><ul><li><p><strong>Balyasny:</strong> <a href="https://openai.com/index/balyasny-asset-management/">Deal monitoring and shared infrastructure</a> (March 6); <a href="https://claude.com/blog/working-at-the-frontier-how-balyasny-asset-management-evaluates-and-governs-claude-fable-5">deal research and evaluation, Charlie Flanagan interview</a> (September 17).</p></li><li><p><strong>Citadel:</strong> <a href="https://www.goldmansachs.com/insights/goldman-sachs-exchanges/citadels-ken-griffin-on-ai-us-china-tensions-and-us-data-centers">Ken Griffin interview and transcript</a> (recorded June 2; published July 9).</p></li><li><p><strong>Man Group:</strong> <a href="https://www.man.com/insights/what-ai-can-do-for-alpha">AlphaGPT&#8217;s research workflow</a> (November 13, 2025); <a href="https://www.man.com/news-centre/man-group-anthropic-partnership">Anthropic partnership, naming the existing AlphaGPT</a> (February 11); <a href="https://www.man.com/insights/intro-machine-learning">Man AHL&#8217;s earlier ML applications</a> (2019).</p></li><li><p><strong>Millennium:</strong> <a href="https://www.mlp.com/life-at-millennium/qa-with-diana-meditz-digital-twins-at-millennium/">Diana Meditz on Digital Twins</a> (September); <a href="https://www.mlp.com/life-at-millennium/millennium-and-anthropic-to-co-develop-ai-powered-digital-risk-analyst/">digital risk analyst development announcement</a> (August). The pages disclose months, without exact days.</p></li><li><p><strong>Two Sigma:</strong> <a href="https://www.twosigma.com/articles/ai-in-investment-management-2026-outlook-part-ii/">Feature-research productivity and historical-data risks</a> (January 21); <a href="https://www.twosigma.com/articles/anything-can-be-language-now-my-thoughts-on-the-future-of-features-research/">Ben Wellington on generating research datasets</a> (July 9).</p></li><li><p><strong>Bridgewater, investor labels and PAT:</strong> <a href="https://www.bridgewater.com/aia-labs">AIA Labs&#8217; research program</a>; <a href="https://www.bridgewater.com/aia-labs/learning-to-replicate-expert-judgment-in-financial-tasks">expert-judgment study and original PDF</a> and <a href="https://thinkingmachines.ai/news/learning-to-replicate-expert-judgment-in-financial-tasks/">Thinking Machines&#8217; account</a> (June 30); <a href="https://www.bridgewater.com/aia-labs/how-bridgewaters-aia-labs-built-pat-the-ai-pocket-analyst-tool">PAT presentation page</a> (Bridgewater reports recording on May 19) and <a href="https://www.youtube.com/watch?v=lXZb21CfeIY">original video</a> (published July 24).</p></li><li><p><strong>Bridgewater, SQL and forecasts:</strong> <a href="https://www.bridgewater.com/aia-labs/putting-task-expertise-into-rl-to-achieves-state-of-the-art-on-text-to-sql">UIUC/AIA Labs text-to-SQL study</a> (August 27); AIA Forecaster technical report, <a href="https://arxiv.org/html/2511.07678v1#S4.SS2">ForecastBench comparisons</a> and <a href="https://arxiv.org/html/2511.07678v1#S5.SS3">MarketLiquid results, Table 7</a> (first submitted November 10, 2025).</p></li><li><p><strong>Bridgewater, investment history and returns:</strong> <a href="https://www.bridgewater.com/in-the-news/bloomberg-on-bridgewaters-latest-innovations-in-ai-ml">External-capital disclosure</a> (July 1, 2024); Reuters&#8217; <a href="https://www.channelnewsasia.com/business/bridgewaters-flagship-macro-fund-gains-81-in-first-half-amid-market-volatility-sources-say-6226001">first-half account and strategy history</a>; Reuters&#8217; <a href="https://www.investing.com/news/stock-market-news/bridgewaters-flagship-macro-fund-posts-robust-doubledigit-gains-this-year-sources-say-4927855">January-September returns</a> (October 1).</p></li><li><p><strong>Historical comparisons:</strong> AQR&#8217;s <a href="https://www.aqr.com/learning-center/machine-learning">active use of ML</a> and <a href="https://www.aqr.com/Insights/Research/Alternative-Thinking/Can-Machines-Build-Better-Stock-Portfolios">stock-portfolio study</a> (November 2024); <a href="https://www.businessinsider.com/wall-street-top-technology-projects-goldman-blackstone-morgan-stanley-2024-8">D. E. Shaw&#8217;s Neil Katz on shared AI infrastructure</a> (September 10, 2024).</p></li></ul>]]></content:encoded></item><item><title><![CDATA[How AI Labs Build Training Environments for Agents]]></title><description><![CDATA[Three research systems construct tasks, tools and evaluators together. Their experiments show why solving a problem and executing it through tools need separate training.]]></description><link>https://insights.ml4trading.io/p/how-ai-labs-build-training-environments</link><guid isPermaLink="false">https://insights.ml4trading.io/p/how-ai-labs-build-training-environments</guid><dc:creator><![CDATA[Stefan Jansen]]></dc:creator><pubDate>Wed, 30 Sep 2026 18:39:39 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/d7602bf0-f5b8-45ca-b4d0-1925cf3c94ef_2400x1260.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Amazon AGI&#8217;s <a href="https://arxiv.org/html/2609.22592v1">AutoGym</a> generated 350 productivity tasks; 57% fell into its hard band for Claude Opus 4.6. After three repair passes, 280 remained, and 39% were hard. Defects had contributed to the initial failures. Repair also changed the task population, so this is not a fixed-sample difficulty comparison.</p><p>Generating an agent&#8217;s practice tasks creates another engineering problem: the tools must work, the requested outcome must be reachable, and the evaluator must recognize it. Otherwise, training can reward an incorrect result or penalize a valid one.</p><p>Three published research systems approach that problem differently: Snowflake and UNC&#8217;s Agent World Model, Amazon AGI&#8217;s AutoGym, and Alibaba&#8217;s Qwen team with Georgia Tech&#8217;s VHD-Play. Their papers describe environment-generation methods and experiments, rather than each company&#8217;s production training pipeline.</p><div class="callout-block" data-callout="true"><p>On <strong>Thursday, October 1, at 11 am Eastern</strong>, the free lightning lesson <a href="https://maven.com/p/cf1c90/can-ai-agents-improve-themselves?utm_source=substack&amp;utm_medium=article&amp;utm_campaign=rsi_lesson_20261001&amp;utm_content=issue_031">Can AI agents improve themselves?</a> examines what changes persist between runs and how to evaluate them.</p><p>On <strong>Saturday, October 3, 10 am-3:30 pm Eastern</strong>, <a href="https://maven.com/stefan-jansen/agent-engineering?utm_source=substack&amp;utm_medium=article&amp;utm_campaign=agent_workshop_20261003&amp;utm_content=issue_031">Engineering a Multi-Agent Forecasting System</a> teaches agent engineering principles by replicating <a href="https://arxiv.org/html/2511.07678v1">Bridgewater&#8217;s AIA Forecasting Agent</a>. </p></div><h2>What happens in one training episode</h2><p>A task begins from a saved initial state: documents, database records, inventory, or other objects the agent can inspect and change. The model issues tool calls. Executable software returns observations and records their consequences. The agent&#8217;s sequence of actions and observations forms a trajectory; an evaluator scores the attempt using that record and the resulting state.</p><p>In reinforcement learning, the training procedure collects multiple attempts and uses their rewards to update model weights. The next batch runs with the updated model. Environment generation is the separate process that supplies the tasks, tools, starting states, and evaluators.</p><p>Recorded demonstrations can teach a successful tool-use sequence. An executable environment also lets the model try alternative actions and experience their consequences.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!NjhD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F364654ab-8b34-4b08-8021-7395647befe7_1620x1800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NjhD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F364654ab-8b34-4b08-8021-7395647befe7_1620x1800.png 424w, https://substackcdn.com/image/fetch/$s_!NjhD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F364654ab-8b34-4b08-8021-7395647befe7_1620x1800.png 848w, https://substackcdn.com/image/fetch/$s_!NjhD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F364654ab-8b34-4b08-8021-7395647befe7_1620x1800.png 1272w, https://substackcdn.com/image/fetch/$s_!NjhD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F364654ab-8b34-4b08-8021-7395647befe7_1620x1800.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!NjhD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F364654ab-8b34-4b08-8021-7395647befe7_1620x1800.png" width="1456" height="1618" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/364654ab-8b34-4b08-8021-7395647befe7_1620x1800.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1618,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:178285,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://insights.ml4trading.io/i/218064986?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F364654ab-8b34-4b08-8021-7395647befe7_1620x1800.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!NjhD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F364654ab-8b34-4b08-8021-7395647befe7_1620x1800.png 424w, https://substackcdn.com/image/fetch/$s_!NjhD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F364654ab-8b34-4b08-8021-7395647befe7_1620x1800.png 848w, https://substackcdn.com/image/fetch/$s_!NjhD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F364654ab-8b34-4b08-8021-7395647befe7_1620x1800.png 1272w, https://substackcdn.com/image/fetch/$s_!NjhD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F364654ab-8b34-4b08-8021-7395647befe7_1620x1800.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Environment generation produces agent-facing tasks and tools plus a separate evaluator. Training resets the task, collects tool interactions, scores the attempt, and updates model weights.</em></p><p><a href="https://mlcommons.org/2026/09/mlperf-training-llm-post-training/">MLCommons&#8217; September 24 announcement</a> describes this integrated workload for MLPerf Training v6.1&#8217;s October submission round: inference, executable software-repair tasks and reinforcement-learning updates, measured by time to a quality target. Results from that round have not yet been reported.</p><h2>Agent World Model builds database-backed software</h2><p><a href="https://arxiv.org/html/2602.10090v2">Agent World Model</a>, released in February, constructs scenarios and tasks, then SQLite databases, tool interfaces and verification components. Its 1,000 environments execute state changes in code. The <a href="https://github.com/Snowflake-Labs/agent-world-model">released implementation</a> supports resetting the database for another attempt.</p><p>One Spotify-like task asks the agent to add a track to a playlist. The verifier can inspect the relevant records before and after the attempt. A successful tool call that changes the wrong playlist leaves evidence in the database.</p><p>The reported training setup uses <strong>code-augmented model judgment</strong>: verification code extracts database evidence, and an LLM judge assesses completion using that evidence and the trajectory. Step-level checks also reward valid tool-call format. The repository offers a code-only verification option, but executable state transitions alone do not make the reported outcome judgment deterministic.</p><h2>AutoGym derives answers from the constructed environment</h2><p>AutoGym starts with a solution blueprint, materializes the environment, then executes the blueprint&#8217;s derivation against it to compute ground truth. Deterministic checks handle explicit constraints; open-ended outcomes also use process, outcome, and meta-judges. All retained productivity tasks received human validation.</p><p>Here, <strong>hard</strong> means a mean verifier score below 0.30 across eight attempts. In the authors&#8217; seven-tool productivity setup, 217 of 300 AWM-generated tasks survived review; 4% were hard and 90% easy, versus 39% hard for AutoGym&#8217;s retained harder configuration. This compares generated task difficulty under one protocol, not overall system performance. <a href="https://arxiv.org/html/2609.22592v1">Tables 1-2.</a></p><p>Reported generation costs are $2-8 per task, excluding human validation. Learning evidence remains limited to one 8B model trained for 500 GRPO steps. <a href="https://arxiv.org/html/2609.22592v1">Appendix F and limitations.</a></p><h2>VHD-Play separates solving from tool-mediated execution</h2><p><a href="https://arxiv.org/html/2609.27321v1">VHD-Play</a> derives dynamics and a scoring reference from a mathematical mechanism, then generates the scenario and tools. Its outcome reward normalizes achieved utility between a baseline and a solver-derived upper reference, clips it to 0-1, and does so without an LLM judge.</p><p>Its five-family diagnostic compares Qwen3.6-35B-A3B before and after 34 training steps:</p><ul><li><p><strong>Written problem, complete information:</strong> 0.962 to 0.992.</p></li><li><p><strong>Stateful tools, parameters supplied:</strong> 0.231 to 0.875.</p></li><li><p><strong>Stateful tools, parameters discovered through interaction:</strong> 0.204 to 0.815.</p></li></ul><p>These are mean normalized outcome scores, not success percentages. The starting model struggled with execution even when the parameters were supplied. <a href="https://arxiv.org/html/2609.27321v1">Table 2.</a></p><p>Of 3,300 admitted environments, 2,200 were assigned to training and 1,100 to evaluation. Marginal generation costs are reconstructed at roughly $0.01-0.03 per admitted environment using public model rates. The upper reference can be unattainable under partial observation, and replay checks vary by family. <a href="https://arxiv.org/html/2609.27321v1">Sections 3-4 and appendices.</a></p><p>For research systems, the diagnostic suggests an evaluation distinction worth preserving. A model might calculate an optimal allocation from a complete specification yet fail to retrieve the relevant data, maintain state, and commit the right action through an interface. A test that supplies everything in one prompt misses those execution demands.</p><h2>How construction affects the experiment</h2><p>Each method places a different requirement on the generated implementation:</p><ul><li><p><strong>Database-backed generation:</strong> state changes and verifier evidence must refer to the same records and task.</p></li><li><p><strong>Blueprint-first generation:</strong> the materialized documents and tools must support the solution derivation.</p></li><li><p><strong>Mechanism-first generation:</strong> the tool interface must preserve the dynamics and information restrictions used to compute the scoring reference.</p></li></ul><p>Generation cost also depends on the task contract. The two cost estimates above cover different task families and exclude different parts of the work. A cheap generated record can still require substantial validation before it belongs in an evaluation suite.</p><h2>A point-in-time data task becomes an agent environment</h2><p>Consider a proposed retrospective reconstruction task: produce a feature table containing the financial information publicly available on a specified decision date. The agent can inspect the full revision history, including later restatements, but must select only eligible versions. This differs from simulating a historical decision, where future documents should be hidden entirely.</p><p>The agent&#8217;s tools would let it discover filings, retrieve dated versions, resolve identifiers, inspect revision metadata, and write a feature-table artifact. Define availability in the fixture as the public SEC filing date; a fiscal period&#8217;s end and a vendor&#8217;s ingestion date are separate timestamps.</p><p>The Chapter 4 <a href="https://github.com/stefan-jansen/machine-learning-for-trading/blob/main/04_fundamental_alternative_data/04_sec_xbrl_fundamentals.ipynb">SEC XBRL fundamentals notebook</a> already illustrates an as-of query using filing dates. Turning it into this agent test would require a versioned fixture, restricted tools, and an independently checked reference table.</p><p>The evaluator would inspect values, entity mapping, decision dates, and source-version lineage in the output artifact. Before testing an agent, challenge the evaluator with a later restatement substituted for an original value, a missing observation, and a correct value assigned to the wrong security. Equivalent row ordering should pass.</p><p>This checks information reconstruction. Whether those features predict returns requires a separate market-data experiment with held-out periods and implementation costs.</p><p>Start with a small collection of such executable tasks. Preserve their initial states and expected outcomes, test the checkers, and use the collection to compare frozen models or configurations. It can support a training decision later, after the evaluation itself is dependable.</p><h2>Free lesson Thursday; hands-on workshop Saturday</h2><p>On <strong>Thursday, October 1, at 11 am Eastern</strong>, the free <a href="https://maven.com/p/cf1c90/can-ai-agents-improve-themselves?utm_source=substack&amp;utm_medium=article&amp;utm_campaign=rsi_lesson_20261001&amp;utm_content=issue_031">Can AI agents improve themselves? lightning lesson</a> examines what changes persist between runs and how to evaluate them.</p><p>On <strong>Saturday, October 3, 10 am-3:30 pm Eastern</strong>, <a href="https://maven.com/stefan-jansen/agent-engineering?utm_source=substack&amp;utm_medium=article&amp;utm_campaign=agent_workshop_20261003&amp;utm_content=issue_031">Engineering a Multi-Agent Forecasting System</a> applies the evaluation side to a working implementation. We&#8217;ll inspect traces, compare agent-count and aggregation choices in the ablation lab, and calculate Brier scores and calibration curves on resolved questions, keeping model weights fixed.</p>]]></content:encoded></item><item><title><![CDATA[Measuring Self-Improvement in AI Agents]]></title><description><![CDATA[From better outputs to systems that improve their own improvement process.]]></description><link>https://insights.ml4trading.io/p/measuring-self-improvement-in-ai</link><guid isPermaLink="false">https://insights.ml4trading.io/p/measuring-self-improvement-in-ai</guid><dc:creator><![CDATA[Stefan Jansen]]></dc:creator><pubDate>Thu, 24 Sep 2026 18:54:19 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/efc8f923-3774-4261-a1d8-12e187a23dcb_2400x1260.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><a href="https://arxiv.org/abs/2606.20657v3">A-Evolve-Training</a> reports four autonomous post-training rounds in which a <strong>meta-agent</strong>, an agent that revises research procedures, updated the policy used by later workers. In round three, the development score reached 0.93 while the public leaderboard score was 0.85. A collector fetched leaderboard feedback between rounds, and the meta-agent used the discrepancy to redirect search.</p><p>The system recognized a misleading development metric and changed its research policy. But the public leaderboard also guided later choices, so it cannot serve as an untouched final test of the policy change.</p><p>For a quantitative researcher, the distinction is familiar. Finding a better strategy and improving the procedure that finds strategies are different achievements. To measure self-improvement, we need to follow the changes from the current result into the agent&#8217;s later work.</p><div class="callout-block" data-callout="true"><p>On Thursday, October 1 at 11:00 a.m. Eastern, my <a href="https://maven.com/p/cf1c90/can-ai-agents-improve-themselves">Lightning Lesson, </a><em><a href="https://maven.com/p/cf1c90/can-ai-agents-improve-themselves">Can AI agents improve themselves?</a></em>, maps the improvement loop onto a forecasting agent and examines how to measure performance changes.</p><p>For hands-on practice with an auditable multi-agent architecture, <em><a href="https://maven.com/stefan-jansen/agent-engineering">Engineering a Multi-Agent Forecasting System</a></em> on Saturday, October 3 compares configuration profiles on the same questions.</p></div><h2>What gets better?</h2><p>Self-improvement can reach progressively further into the system producing a result:</p><ul><li><p><strong>The output improves.</strong> The system revises an answer, program, or research result. Evaluation compares the original and revised outputs.</p></li><li><p><strong>The agent improves.</strong> It retains changes to its memory, tools, code, or model. Evaluation tests whether those changes help on later tasks.</p></li><li><p><strong>The improvement process improves.</strong> The system revises how it proposes, tests, or selects subsequent changes, then reuses that procedure. Evaluation compares the successors produced by the original and revised procedures under comparable resources.</p></li></ul><p>The experimental standards remain consistent: appropriate controls, protected evaluation, resource accounting, and repeated runs. As the object of improvement expands, the experiment must explain more. A better answer alone cannot show that the agent acquired a reusable skill, or became better at developing skills.</p><p>Recursion concerns how a retained change feeds back into subsequent improvement. When an agent revises its improvement procedure, later rounds inherit a different way of producing changes. Reuse establishes that feedback; a controlled comparison tests whether it helps. Acceleration measures progress across cycles, rather than serving as a prerequisite for useful recursive improvement.</p><h3>How much does the agent control?</h3><p>Duan and colleagues&#8217; survey, <em><a href="https://arxiv.org/abs/2609.11873v3">The Last AI Built by Humans</a></em>, organizes recursive self-improvement around five levels of autonomy. L1 covers executing prescribed improvements, and L2 covers selecting improvement strategies. L3 chooses what experience to learn from, and L4 adapts through deployment feedback. L5 changes the mechanisms governing subsequent improvement. The survey also separates the ability to modify a procedure from evidence that the modification helps under comparable budgets and independent evaluation.</p><p>The autonomy levels describe which decisions a system controls. The improvement targets above describe what gets better. An agent can control more of its own development without making better decisions. Both its responsibilities and its measured performance need to be described.</p><h2>Improving the output</h2><p><a href="https://arxiv.org/abs/2303.17651v2">Self-Refine</a> illustrates the simplest case. A model drafts an answer, critiques it, and revises it. The paper reports improvements across seven tasks without additional training. A later task need not inherit any change to the system that produced the revised answer.</p><p>Consider a hypothetical factor-research agent that tests 50 variants and selects one. A higher independently validated score for that factor measures an improvement in the output. It leaves open whether the agent will perform better in its next research campaign.</p><h2>Improving the agent</h2><p>A lasting improvement requires a change that survives the current task and helps in later work. The change may reside outside the model&#8217;s weights.</p><p><a href="https://arxiv.org/abs/2303.11366v4">Reflexion</a> retains linguistic reflections in episodic memory and retrieves them during later trials. Its model weights stay fixed, while the retained reflections can change later behavior. To assess persistent improvement, compare performance with and without those reflections under comparable resources.</p><p><a href="https://arxiv.org/abs/2609.15364v1">RSIAgent</a> makes memory reuse explicit. Its exploration phase writes memory from practice and verification. The reference evaluation resets the environment, freezes the memory, and disables curriculum decisions and memory writeback. The official evaluator&#8217;s feedback stays outside the learning agents.</p><p>Freezing memory separates learning from evaluation-time reuse. It does not by itself establish transfer to unseen tasks. RSIAgent&#8217;s target-conditioned exploration can practice on the target itself. The retained memory also leaves the underlying model and memory-learning mechanism fixed.</p><p>To track the agent&#8217;s development, identify its <strong>mutable boundary</strong>: the components it can edit. Record <strong>persistence</strong>, whether a change survives, and <strong>inheritance</strong>, whether a later process uses it. Each retained artifact needs a version and a record of the processes that loaded it. The model, evaluator, and selection rules should also be identified, including which remain fixed.</p><p>Suppose the factor agent also writes a revised search policy. Loading that policy in the next campaign establishes inheritance. Whether it improves the campaign remains an experimental question.</p><h3>Isolating the contribution of a retained change</h3><p><strong>Causal attribution</strong> concerns what caused the improvement. <strong>Transfer</strong> tests where it holds. <strong>Evaluator independence</strong> requires keeping the final test outside the feedback used during selection.</p><p>For the factor agent, compare the original and revised policies using the same model, data access, and candidate budget. Give both access to the accumulated research archive. Otherwise, the revised policy may benefit from knowing which ideas already failed while the original policy repeats them.</p><p>An <strong>ablation</strong> removes a candidate cause while keeping the rest of the experiment comparable. A memory ablation might remove retained reflections or replace them with irrelevant ones. A policy ablation restores the earlier procedure. State what each comparison isolates.</p><p>Resources belong in the comparison. <a href="https://arxiv.org/abs/2411.15114v2">RE-Bench</a>, which evaluates AI research and engineering work, compares performance at different time budgets. Equal iteration counts can hide differences in token use, tool calls, or human assistance. For a research agent, count candidate strategies and backtests as well as model expenditure. Report the cost of producing inherited state separately from the cost of using it.</p><p>Repeat each condition and report uncertainty across runs. Shared tasks and paired seeds can reduce comparison noise, but repeated runs do not replace evaluation on new tasks. Preserve failed candidates and rejected updates; reporting only the winning run hides how much search produced it.</p><p>Transfer asks whether the retained change helps beyond its selection setting. That might mean new tasks from the same distribution, another domain, or a later market period. A later random seed tests repeatability under stochastic variation, not cross-domain transfer.</p><p><a href="https://arxiv.org/abs/2609.24972v1">RRSI</a>, by Peng Xia and colleagues, supplies a concrete transfer test. It evolves an agent&#8217;s <strong>harness</strong>, the prompts, tools, and control logic around a frozen model. The method limits proposed edits, screens benchmark-specific changes, and prunes changes with insufficient benefit. In its workspace ablation, unregularized evolution scores 92.8 on the optimization set versus RRSI&#8217;s 90.5. Their average scores on three unseen benchmarks are 40.3 and 43.6, respectively. RRSI uses fewer policy tokens than unregularized evolution, but more than the starting harness. The result supports transfer from a designer-specified improvement procedure; it does not establish that the system autonomously improved that procedure.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!B0il!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67853997-5063-426e-bc6e-376fce28e90a_2400x1680.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!B0il!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67853997-5063-426e-bc6e-376fce28e90a_2400x1680.png 424w, https://substackcdn.com/image/fetch/$s_!B0il!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67853997-5063-426e-bc6e-376fce28e90a_2400x1680.png 848w, https://substackcdn.com/image/fetch/$s_!B0il!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67853997-5063-426e-bc6e-376fce28e90a_2400x1680.png 1272w, https://substackcdn.com/image/fetch/$s_!B0il!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67853997-5063-426e-bc6e-376fce28e90a_2400x1680.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!B0il!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67853997-5063-426e-bc6e-376fce28e90a_2400x1680.png" width="1456" height="1019" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/67853997-5063-426e-bc6e-376fce28e90a_2400x1680.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1019,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;RRSI: optimization score 90.5, unseen-benchmark average 43.6, 2.42 million policy tokens per trial. Unregularized evolution: 92.8, 40.3, 3.80 million. Initial harness: 89.4, 39.7, 1.56 million.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="RRSI: optimization score 90.5, unseen-benchmark average 43.6, 2.42 million policy tokens per trial. Unregularized evolution: 92.8, 40.3, 3.80 million. Initial harness: 89.4, 39.7, 1.56 million." title="RRSI: optimization score 90.5, unseen-benchmark average 43.6, 2.42 million policy tokens per trial. Unregularized evolution: 92.8, 40.3, 3.80 million. Initial harness: 89.4, 39.7, 1.56 million." srcset="https://substackcdn.com/image/fetch/$s_!B0il!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67853997-5063-426e-bc6e-376fce28e90a_2400x1680.png 424w, https://substackcdn.com/image/fetch/$s_!B0il!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67853997-5063-426e-bc6e-376fce28e90a_2400x1680.png 848w, https://substackcdn.com/image/fetch/$s_!B0il!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67853997-5063-426e-bc6e-376fce28e90a_2400x1680.png 1272w, https://substackcdn.com/image/fetch/$s_!B0il!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67853997-5063-426e-bc6e-376fce28e90a_2400x1680.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>RRSI trades a lower optimization-set score for better results on unseen benchmarks. Token counts measure inference per trial, not the full search budget. Source: RRSI v1, Table 2.</em></p><p>For the factor agent, select the policy on development data, freeze it, and compare policies on a later period. Record whether performance persists across instruments or market conditions. A gain confined to one regime leaves its usefulness in other regimes untested.</p><p>The final test must also remain outside the feedback used to select the policy. If an agent repeatedly queries a nominal test grader and adapts to its scores, the grader participates in development. Indirect feedback through a verifier or a human selector can create the same problem.</p><p>Anthropic&#8217;s <a href="https://alignment.anthropic.com/2026/automated-w2s-researcher/">Automated Weak-to-Strong Researcher</a> provides a documented example. Nine agents worked for five days with unlimited submissions to an outcome grader. Anthropic reports that this effectively turned the test set into a validation set. Agents exploited the access through seed selection and, in one case, probing uncertain examples with both labels.</p><p>A sealed final benchmark or prospective outcomes can limit that exposure. An independent review team helps only if its evidence and feedback are protected too. Changing the people who score a reused dataset does not restore its independence. Record who could query each evaluator, what feedback they received, and when selection stopped.</p><h2>Improving the improvement process</h2><p><strong>Meta-improvement</strong> means improving the procedure that produces later changes. An agent might revise its experiment-selection rule, then use that rule to direct subsequent research. Measuring the effect requires comparing the research produced by the original and revised procedures.</p><p>One strong design compares three conditions under matched resources:</p><ol><li><p>The original procedure with its original evidence.</p></li><li><p>The revised procedure with accumulated evidence.</p></li><li><p>The original procedure with that same accumulated evidence.</p></li></ol><p>The third condition helps separate a procedural improvement from access to a better archive. For the factor agent, it asks whether a new experiment-selection rule helps after both policies know which factors were already tried. Other controlled interventions can isolate the same effect.</p><p><a href="https://arxiv.org/abs/2603.19461v1">Hyperagents</a> tests a changed improvement procedure directly. Its transfer experiment freezes evolved meta-agents and lets them generate agents for Olympiad math grading. After 50 iterations, the reported <code>imp@50</code>, the test-score gain of the best validation-selected descendant over its starting agent, is 0.630 (confidence interval 0.540-0.630). The initial-meta-agent comparison has a gain of zero. This supports transfer of improvement ability under the experiment&#8217;s fixed iteration budget.</p><p>A separate 200-iteration experiment allows the meta-agent to keep evolving. Starting from transferred agents yields 0.640 versus 0.610 from the initial agent, a difference the authors report as statistically insignificant. These are different protocols, not successive observations on one learning curve. Faster learning after transfer does not by itself establish a sustained increase in the rate of improvement across cycles.</p><p>A-Evolve&#8217;s inherited policy bundles a standing hyperparameter recipe with search instructions. Its baseline worker controls noise against a fixed training substrate, but does not isolate the effect of the revised policy given the same accumulated evidence. The reported four-round campaign supports policy inheritance and adaptive search; attributing its gains specifically to meta-improvement needs a further controlled comparison.</p><h2>Measuring acceleration</h2><p>A better improvement procedure can yield a one-time gain or continuing gains that diminish as the remaining problems get harder. Recursion describes the feedback into later improvement; acceleration measures whether progress per unit of resources increases across cycles.</p><p>Measuring acceleration requires a sequence of comparable cycles, with each cycle&#8217;s gain related to its resource use. Specify the performance measure and resource unit before interpreting the trend. Report raw scores alongside normalized gains, and account for changes in models, tools, task difficulty, and human intervention.</p><p>The measurement scale also matters. Bounded scores leave less headroom as performance rises. Transforming the scale can change the apparent curvature, so a headroom or log-odds transformation needs justification. Neither a flattening score curve nor a favorable transformation alone settles whether the improvement process is accelerating.</p><p>The experiments discussed here support different forms of retained improvement and procedure transfer. They do not establish a sustained increase in resource-adjusted improvement rate across comparable recursive cycles.</p><h2>Comparing the experiments</h2><ul><li><p><strong>Self-Refine</strong></p><p>Retained change: None required across tasks.<br>Demonstrated result: Better current outputs.<br>Remaining question: Does a later task benefit from retained state?</p></li><li><p><strong>RSIAgent</strong></p><p>Retained change: Frozen exploration memory.<br>Demonstrated result: Later execution uses learned memory.<br>Remaining question: What transfers beyond target-conditioned practice?</p></li><li><p><strong>RRSI</strong></p><p>Retained change: Agent harness.<br>Demonstrated result: Gains on unseen benchmarks.<br>Remaining question: Does the improvement procedure itself improve?</p></li><li><p><strong>Hyperagents</strong></p><p>Retained change: Task-agent and meta-agent code.<br>Demonstrated result: Procedure transfer at a fixed iteration budget.<br>Remaining question: Does improvement per resource unit accelerate?</p></li><li><p><strong>A-Evolve-Training</strong></p><p>Retained change: Recipe and search policy.<br>Demonstrated result: Inherited policy revision.<br>Remaining question: Does the revised procedure help under matched evidence?</p></li></ul><p>The comparison summarizes the specific experiments described above. It does not assign a general capability level to each system.</p><h2>What to report</h2><p>Before optimization, specify whether the experiment measures changes in the output, the agent, or its improvement process. Define the performance measure, fixed components, resource budget, and protected final test. A useful run record covers:</p><ol><li><p><strong>Mutable boundary:</strong> what could change, what stayed fixed, and who could intervene.</p></li><li><p><strong>Persistence:</strong> the retained artifacts and when each was frozen.</p></li><li><p><strong>Inheritance:</strong> the later runs that loaded those artifacts and the decisions they affected.</p></li><li><p><strong>Causal attribution:</strong> ablations, resources by condition, repeated runs, and uncertainty estimates.</p></li><li><p><strong>Transfer:</strong> tasks, domains, or periods excluded from selecting the change, with results reported separately.</p></li><li><p><strong>Evaluator independence:</strong> all feedback available during search, query counts, access controls, and the final evaluation procedure.</p></li><li><p><strong>Meta-improvement:</strong> the comparison isolating the revised procedure from accumulated evidence and extra resources.</p></li><li><p><strong>Progress across cycles:</strong> scores, resource use, and inherited changes, including unsuccessful updates. A study of acceleration also compares the rate of improvement across those cycles.</p></li></ol><p>A study of output quality need not demonstrate meta-improvement. Reporting which parts of the system were evaluated keeps a useful result interpretable without implying that every part improved.</p><h2>Measure a forecasting agent</h2><p>On Thursday, October 1 at 11:00 a.m. Eastern, my <a href="https://maven.com/p/cf1c90/can-ai-agents-improve-themselves">Lightning Lesson, </a><em><a href="https://maven.com/p/cf1c90/can-ai-agents-improve-themselves">Can AI agents improve themselves?</a></em>, maps the improvement loop onto a forecasting agent and examines how to measure changes in its performance and research process.</p><p>For hands-on practice with an auditable multi-agent architecture, <em><a href="https://maven.com/stefan-jansen/agent-engineering">Engineering a Multi-Agent Forecasting System</a></em> on Saturday, October 3 compares configuration profiles on the same questions. You will toggle the supervisor, change aggregation methods, and examine Brier scores and calibration on resolved questions.</p>]]></content:encoded></item><item><title><![CDATA[Recursive Self-Improvement: A Reading List]]></title><description><![CDATA[A practical route through feedback, memory, code evolution, automated research, and the limits of current evidence.]]></description><link>https://insights.ml4trading.io/p/recursive-self-improvement-a-reading</link><guid isPermaLink="false">https://insights.ml4trading.io/p/recursive-self-improvement-a-reading</guid><dc:creator><![CDATA[Stefan Jansen]]></dc:creator><pubDate>Tue, 22 Sep 2026 15:23:23 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/6d9b1494-562c-4dfc-a0d3-70f5f121e7c6_2400x1260.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Recursive self-improvement (RSI) refers to an AI system's ability to boost its own performance by redesigning itself. Originally, RSI was concerned with an &#8220;<a href="https://web.archive.org/web/20120501043117/http://www.stat.vt.edu/tech_reports/2005/GoodTechReport.pdf">intelligence explosion</a>&#8221; (I. J. Good, 1965) that would leave humans behind. Recently, both <a href="https://openai.com/index/research-acceleration-view-inside-openai/">OpenAI (2026)</a> and <a href="https://www.anthropic.com/institute/measuring-pace-of-ai-development">Anthropic (2026)</a> have reported substantially increased AI contributions to accelerate their internal research. While not yet fully autonomous, the progress is undeniable, and further advances are likely soon, creating large opportunities and risks on the horizon. To help navigate this vital discussion, we&#8217;ve put together a reading list that traces where the idea comes from and how it has evolved to its current state.</p><p>Today, multiple systems claim different degrees of RSI success using different approaches, for example, by revising an answer before returning it, storing lessons for the next attempt, or evolving executable programs against a score. Stronger claims involve systems that edit agent code, update model weights, revise the research policy used by a later round, or change the evaluator between selection periods. Each result requires different evidence and has different implications.</p><p>Current experiments support real progress: agents can persistently modify memory, code, research policies, harnesses, and weights. Some of these changes produce downstream performance gains. Recent experiments also change the procedure that produces later improvements. However, public evidence has yet to establish a fully autonomous self-accelerating successor process.</p><p>A fully autonomous successor process would control proposal, evaluation, selection, persistence, and modification of the machinery that produces its next successor. It would test final capability on evidence withheld from every adaptive step and report the compute, samples, tools, and human input used along the way. Self-acceleration requires one more result. Inherited changes must increase the rate of later improvement under comparable external inputs. No paper below demonstrates this entire process.</p><p>For quantitative researchers, the evaluation problem is already immediate. An agent can generate more factor expressions, model configurations, and backtests than a human team can inspect. Repeated access to a score can reward research progress, additional search, leakage, or adaptation to the evaluator. Persistent memory can preserve the error as easily as the insight.</p><p>The reading path therefore follows four questions: what changed, what persisted, what stayed fixed, and which evidence remained unavailable during selection?</p><div class="callout-block" data-callout="true"><p>On Thursday, October 1 at 11:00 AM ET, I am teaching a free 30-minute lightning lesson: <a href="https://maven.com/p/cf1c90/can-ai-agents-improve-themselves">Can AI agents improve themselves?</a>. We will map current systems by what they change, what they keep fixed, and what their experiments establish.</p><p>The <a href="https://maven.com/stefan-jansen/agent-engineering">Agent Engineering workshop</a> follows on Saturday, October 3. Participants build and evaluate an auditable multi-agent forecasting system with traces, ablations, probabilistic scores, and calibration checks.</p></div><h2>How self-improvement became more recursive</h2><p>The first dividing line is persistence. Revising one answer can improve the current output while leaving the next attempt unchanged. Memory, code, or weights can carry an improvement into later work. The stronger recursive cases also change part of the procedure that proposes, tests, or selects the next change.</p><p>Selection and final evaluation need separate labels. A search metric directly selects candidates. An external metric becomes part of the adaptive loop when later rounds respond to it. The strongest test remains unavailable until the system and its learned state have been frozen.</p><h3>From intelligence explosion to formal self-rewrite</h3><p>The modern argument traces back to <a href="https://web.archive.org/web/20120501043117/http://www.stat.vt.edu/tech_reports/2005/GoodTechReport.pdf">I. J. Good&#8217;s 1965</a> intelligence-explosion argument. If designing intelligent machines is an intellectual activity, Good reasoned, a sufficiently capable machine could help design a more capable successor. The argument did not specify how a system should decide that a proposed self-modification is an improvement.</p><p>J&#252;rgen Schmidhuber&#8217;s <a href="https://arxiv.org/abs/cs/0309048v5">Goedel Machine</a> (2003) supplied a formal answer. A utility-maximizing program searches for a self-rewrite and executes it only after proving that the rewrite has higher expected utility than continuing the search. The permitted rewrite can include the proof searcher itself.</p><p>Modern systems replace proof with experiment. They propose changes, run an evaluator, retain promising results, and repeat. This makes self-improvement practical, but places much of the epistemic burden on evaluation. A system can become better at optimizing a benchmark without improving the broader capability the benchmark is meant to measure.</p><h3>From revision to persistent experience</h3><p><a href="https://arxiv.org/abs/2303.17651v2">Self-Refine</a> (2023) provides a useful lower bound. The same language model generates an answer, critiques it, and revises it. The paper reports an average absolute improvement of about 20 percentage points across seven tasks, but nothing needs to persist after a task ends.</p><p><a href="https://arxiv.org/abs/2303.11366v4">Reflexion</a> (2023) crosses that boundary. It stores natural-language reflections from earlier attempts and retrieves them in later trials while model weights remain fixed. Useful lessons can compound across trials, and misleading reflections can trap later behavior in a local optimum.</p><p><a href="https://arxiv.org/abs/2609.15364v1">RSIAgent</a> (2026) also adapts the experience used to construct persistent memory. Its final evaluation freezes that memory, resets the environment, and disables curriculum decisions and writeback. The system therefore adapts future context without adapting the fixed mechanisms that select practice, verify outcomes, and update memory. The survey <a href="https://arxiv.org/abs/2609.11873v1">The Last AI Built by Humans</a> (2026) offers a useful taxonomy for such degrees of autonomy, but does not independently validate the systems it classifies.</p><h3>From better artifacts to better improvers</h3><p><a href="https://arxiv.org/abs/2310.02304">Self-Taught Optimizer</a> (2023) starts with an &#8220;improver&#8221; program that uses a language model to improve other programs, then asks that improver to improve itself. The model stays fixed, but the program that proposes later improvements becomes mutable. <a href="https://arxiv.org/abs/2309.16797">Promptbreeder</a> (2023) explores a related mechanism by evolving both task prompts and the mutation prompts that generate them.</p><p><a href="https://www.nature.com/articles/s41586-023-06924-6">FunSearch</a> (2024) and <a href="https://arxiv.org/abs/2506.13131v1">AlphaEvolve</a> (2025) follow a different route. Models propose executable programs, automated evaluators score them, and successful programs become material for later generations. FunSearch pairs a frozen model with a fixed evaluator and program database. AlphaEvolve extends that pattern across mathematics, algorithm design, and production systems. In both cases, the models, evaluators, and outer evolutionary procedure remain externally specified. Andrej Karpathy&#8217;s <a href="https://github.com/karpathy/autoresearch">autoresearch</a> (2026) makes a compact version of this workflow inspectable, but it is not a controlled study.</p><p>The <a href="https://arxiv.org/abs/2505.22954v3">Darwin Goedel Machine</a> (2025) moves the mutable boundary from a task program to agent code. Selected descendants enter an archive and can help produce later descendants. The paper reports gains from 20.0 to 50.0 percent on its SWE-bench evaluation and from 14.2 to 30.7 percent on Polyglot. Foundation models, archive operations, parent selection, and benchmark validation remain outside the recursive relation.</p><p><a href="https://arxiv.org/abs/2603.19461v1">Hyperagents</a> (2026) places the task agent and meta-agent inside one editable program. Its transfer experiment freezes an evolved meta-agent and tests whether it can produce better task agents in a different domain under a fixed iteration budget. The result tests whether a changed improvement procedure transfers, while tasks, budgets, validation, and outer selection remain fixed.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ZgJX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff60e2596-2240-4dc7-9b2d-46a0170d0127_1800x1440.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZgJX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff60e2596-2240-4dc7-9b2d-46a0170d0127_1800x1440.png 424w, https://substackcdn.com/image/fetch/$s_!ZgJX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff60e2596-2240-4dc7-9b2d-46a0170d0127_1800x1440.png 848w, https://substackcdn.com/image/fetch/$s_!ZgJX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff60e2596-2240-4dc7-9b2d-46a0170d0127_1800x1440.png 1272w, https://substackcdn.com/image/fetch/$s_!ZgJX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff60e2596-2240-4dc7-9b2d-46a0170d0127_1800x1440.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZgJX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff60e2596-2240-4dc7-9b2d-46a0170d0127_1800x1440.png" width="1456" height="1165" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f60e2596-2240-4dc7-9b2d-46a0170d0127_1800x1440.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1165,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:304066,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://insights.ml4trading.io/i/216828037?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff60e2596-2240-4dc7-9b2d-46a0170d0127_1800x1440.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ZgJX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff60e2596-2240-4dc7-9b2d-46a0170d0127_1800x1440.png 424w, https://substackcdn.com/image/fetch/$s_!ZgJX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff60e2596-2240-4dc7-9b2d-46a0170d0127_1800x1440.png 848w, https://substackcdn.com/image/fetch/$s_!ZgJX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff60e2596-2240-4dc7-9b2d-46a0170d0127_1800x1440.png 1272w, https://substackcdn.com/image/fetch/$s_!ZgJX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff60e2596-2240-4dc7-9b2d-46a0170d0127_1800x1440.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Figure 1. Selected systems differ in the artifact they retain and in the distance between selection and final evaluation. Freezing learned state, transferring an improver, and withholding the final test support progressively stronger claims.</em></p><h2>Autonomous research exposes the evaluation path</h2><p>Automating a research cycle does not establish that the research process is improving itself. <a href="https://arxiv.org/abs/2408.06292">The AI Scientist</a> (2024), for example, automates idea generation, experiments, paper writing, and simulated review under a fixed workflow. Evidence for recursive improvement requires a later research round to inherit a changed research procedure.</p><p><a href="https://arxiv.org/abs/2606.20657v3">A-Evolve-Training</a> (2026) reports four autonomous post-training rounds on a 30B model with eight workers per round. A collector aggregates results, and a meta-agent revises the research policy for the next round. The final model scored 0.86 on the public leaderboard against 0.87 for the top human submission and ranked eighth among roughly 4,000 entries at the reported snapshot.</p><p>The collector fetched that leaderboard between rounds, and the meta-agent used the development-to-leaderboard gap to redirect later search. The leaderboard was therefore an adaptive selection signal, not an untouched final test. The campaign shows inherited policy revision under a fixed substrate, constitution, objective, worker structure, and evaluation harness.</p><p><a href="https://arxiv.org/abs/2605.27276v2">SIA: Self-Improving AI with Harness &amp; Weight Updates</a> (2026) alternates changes to the task harness and model weights, but its inspected LawBench test grader also optimizes. <a href="https://arxiv.org/abs/2606.26294v2">Red Queen Goedel Machine</a> (2026) changes the evaluator between epochs while holding it fixed within an epoch. Both expose the same requirement: an independent criterion is needed to show that optimizing or changing an evaluator improved the intended objective.</p><p>Research comparisons also depend on budget and evaluator access. <a href="https://arxiv.org/abs/2411.15114v2">RE-Bench</a> (2024) shows that relative human-agent performance changes with the time horizon. Anthropic&#8217;s <a href="https://alignment.anthropic.com/2026/automated-w2s-researcher/">Automated Weak-to-Strong Researcher</a> (2026) used nine agents for 800 cumulative hours and allowed repeated queries to the remote score. Its headline result demonstrates productive automated search, but part of the nominal test signal became validation.</p><p>OpenAI&#8217;s <a href="https://openai.com/index/research-acceleration-view-inside-openai/">internal report</a> (2026) records 3.1 agent workdays per human workday by mid-August. Researchers wrote more code and ran more experiments while available compute also increased. High-level planning remained a small fraction of agent activity, and more than half of successful four-to-eight-hour tasks involved at least one human intervention. These measurements establish greater automation of research execution without isolating its effect on model progress.</p><h2>Finance turns evaluation into a statistical problem</h2><p><a href="https://arxiv.org/abs/2608.12841v1">AQuA</a> (2026) contains separate systems for symbolic-factor search and model-configuration search. Each retains validated evidence and uses it to guide later proposals. The sandboxes fix data splits, features, labels, evaluator logic, and allowed actions. Because the experiments do not include a compute-matched condition without persistent memory, later gains can reflect retained evidence, additional search, or both.</p><p><a href="https://arxiv.org/abs/2609.00731v1">Agentic Empirical Asset Pricing</a> (2026) makes a valuable methodological distinction. An output backtest evaluates one factor or strategy selected after a search. A system backtest reruns the full discovery process at historical decision dates and asks whether that process could repeatedly produce usable outputs.</p><p>Its SEADS implementation retains attempt logs, reflector lessons, and an admitted-factor library. Component ablations show that these mechanisms affect performance, but the rolling comparison does not isolate persistence from other system differences. Mutation retries add unmatched compute, historical runs use a current model, headline Sharpe is gross of costs, and most cross-system differences are not reliably distinguishable at the reported sample size.</p><p><a href="https://arxiv.org/abs/2604.02279v1">The Self-Driving Portfolio</a> (2026) describes a meta-agent that compares forecasts with realized returns and can revise prompts, skills, and Python code. The authors report insufficient out-of-sample evidence to determine whether those revisions improve later allocation. The paper specifies an update mechanism without establishing its downstream effect.</p><p>Markets add non-stationarity, multiple testing, revised-data leakage, and transaction costs to every evaluation path. An adaptive research system needs an independent final test and a record of failed trials. Otherwise, it can become a more efficient optimizer of the historical score it repeatedly sees.</p><h2>Economic acceleration is a separate claim</h2><p><a href="https://elasticity.institute/rsi-paper.pdf">The Economics of Recursive Self-Improvement</a> (2026) models feedback between research capability and later improvement. Its calibration depends on assumptions about research production, compute, substitution, transfer, and diminishing returns. The model identifies conditions that could support sustained acceleration, but does not measure a universal empirical growth law.</p><p>Numerical takeoff probabilities require a separate analysis. They depend on which research tasks become automatable, how human judgment and compute enter the production function, and whether improvement procedures transfer to the systems that create later models.</p><h2>What current evidence establishes</h2><p>Current systems can:</p><ul><li><p>retain changes in memory, code, research policies, and weights beyond a single attempt;</p></li><li><p>improve executable artifacts under automated evaluation;</p></li><li><p>modify parts of the machinery that produces later improvements and transfer a modified procedure in bounded experiments; and</p></li><li><p>automate bounded research loops on human-selected, outcome-gradable problems.</p></li></ul><p>Public evidence does not yet establish:</p><ul><li><p>repeated construction and independent validation of more capable foundation model successors;</p></li><li><p>improvement of the full outer loop, including agenda selection, objectives, and final evaluation;</p></li><li><p>sustained transfer beyond the optimization environment; or</p></li><li><p>acceleration caused by inherited system changes after accounting for human labor, compute, data, and task selection.</p></li></ul><p>The next issue will turn these distinctions into an audit for self-improvement claims.</p><h2>A compact reading path</h2><p>Eight sources provide the shortest route through the technical progression:</p><ol><li><p><strong><a href="https://web.archive.org/web/20120501043117/http://www.stat.vt.edu/tech_reports/2005/GoodTechReport.pdf">I. J. Good, &#8220;Speculations Concerning the First Ultraintelligent Machine&#8221;</a> (1965)</strong> for the intelligence-explosion argument.</p></li><li><p><strong><a href="https://arxiv.org/abs/cs/0309048v5">Goedel Machines</a> (2003)</strong> for the formal self-rewrite problem.</p></li><li><p><strong><a href="https://arxiv.org/abs/2303.11366v4">Reflexion</a> (2023)</strong> for persistent linguistic memory without weight updates.</p></li><li><p><strong><a href="https://arxiv.org/abs/2310.02304">Self-Taught Optimizer</a> (2023)</strong> for a program that improves its own improvement procedure while the model stays fixed.</p></li><li><p><strong><a href="https://arxiv.org/abs/2506.13131v1">AlphaEvolve</a> (2025)</strong> for evaluator-driven evolution of executable programs.</p></li><li><p><strong><a href="https://arxiv.org/abs/2505.22954v3">Darwin Goedel Machine</a> (2025)</strong> for inherited changes to agent code.</p></li><li><p><strong><a href="https://arxiv.org/abs/2603.19461v1">Hyperagents</a> (2026)</strong> for an editable meta-agent and transfer test.</p></li><li><p><strong><a href="https://arxiv.org/abs/2606.20657v3">A-Evolve-Training</a> (2026)</strong> for inherited research-policy revision across post-training rounds.</p></li></ol><p>For quantitative research, add <strong><a href="https://arxiv.org/abs/2608.12841v1">AQuA</a> (2026)</strong> for persistent experimental evidence and <strong><a href="https://arxiv.org/abs/2609.00731v1">Agentic Empirical Asset Pricing</a> (2026)</strong> for rolling evaluation of the discovery system itself.</p><h2>Learn how to inspect the system</h2><p>On Thursday, October 1 at 11:00 AM ET, I am teaching a free 30-minute lightning lesson: <a href="https://maven.com/p/cf1c90/can-ai-agents-improve-themselves">Can AI agents improve themselves?</a>. We will map current systems by what they change, what they keep fixed, and what their experiments establish.</p><p>The <a href="https://maven.com/stefan-jansen/agent-engineering">Agent Engineering workshop</a> follows on Saturday, October 3. Participants build and evaluate an auditable multi-agent forecasting system with traces, ablations, probabilistic scores, and calibration checks.</p>]]></content:encoded></item><item><title><![CDATA[How to Design and Evaluate Skills for Research Agents - and the ML4T Skills Release]]></title><description><![CDATA[We are releasing 61 open-source ML4T skills for quantitative research. Two new benchmarks show where written procedures help and why strong verification matters.]]></description><link>https://insights.ml4trading.io/p/how-to-design-and-evaluate-skills</link><guid isPermaLink="false">https://insights.ml4trading.io/p/how-to-design-and-evaluate-skills</guid><dc:creator><![CDATA[Stefan Jansen]]></dc:creator><pubDate>Tue, 01 Sep 2026 18:34:29 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/20a14017-7874-4ae0-b1dd-38516b9a4826_2400x1260.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In March, SWE-Skills-Bench tested whether skills improve the quality of agent work on software repositories. The authors evaluated 49 skills across 565 task instances. The average pass rate rose from 89.8% without skills to 91.0% with them. 39 skills produced no improvement, three made results worse, and seven improved them.</p><p>The largest gain came from <code>risk-metrics-calculation</code>. The skill covers drawdown, value at risk, and other standard risk measures. It took ten tasks from 70.0% to 100.0% and reduced token use by 34.8%.</p><h2>The ML4T skills are now public</h2><p>We built the <a href="https://www.ml4trading.io/skills/">ML4T skill collection</a> around procedures that can fail silently, producing wrong results rather than throwing errors. Today, we are making all 61 skills <a href="https://github.com/ml4t/skills">public on GitHub</a> under the Apache 2.0 license. They cover the end-to-end research process, from point-in-time data and feature engineering to validation, backtesting, portfolio construction, production, and agent engineering.</p><div class="pullquote"><p>Join us for a free 30-minute intro on Sep 2, &#8220;<a href="https://maven.com/p/bc9fd4/managing-your-strategy-research-process">Managing your Strategy Research Process</a>&#8221;. <br>I am also teaching on September 9, <a href="https://maven.com/p/c7565e/how-to-engineer-a-multi-agent-system">How to Engineer a Multi-Agent System</a>, covering task decomposition, deterministic harnesses, and the decisions that still require human approval.</p></div><p>The ten-task result for the  <code>risk-metrics-calculation</code> skill does not establish a general effect. It supports a useful hypothesis: skills help when an agent does not reliably know the required procedure. Quantitative research adds a second possibility. A skill may help more when the environment does not expose a procedural mistake. A wrong risk calculation still returns a number.</p><h2>What an agent skill contains</h2><p>A skill is a Markdown file with a name, a routing description, and a procedure. The agent reads the description first and loads the full procedure when it judges the skill relevant. Anthropic calls the approach progressive disclosure. The company <a href="https://www.anthropic.com/engineering/equipping-agents-for-the-real-world-with-agent-skills">introduced Agent Skills in October 2025</a> and published the format as an open standard in December.</p><p>Reusable procedures predate the current file format by decades. Korf&#8217;s 1985 <a href="https://www.sciencedirect.com/science/article/abs/pii/0004370285900128">macro-operators</a> gave search algorithms reusable sequences of moves. Sutton, Precup, and Singh&#8217;s 1999 <a href="https://www.sciencedirect.com/science/article/pii/S0004370299000521">options framework</a> did the same for extended actions in reinforcement learning. Researchers can now inspect, share, and test a procedure in a standard, readable file.</p><h2>Why two benchmarks report different gains</h2><p><a href="https://www.skillsbench.ai/blogs/skillsbench-1-1">SkillsBench 1.1</a> contains 87 tasks across eight domains. Benchmark authors wrote a relevant skill for each task and used deterministic checks to score the result. Across 18 model/harness combinations, the average pass rate rose from 33.9% to 50.5%, a gain of 16.6 points.</p><p><a href="https://arxiv.org/abs/2603.15401">SWE-Skills-Bench</a> tests a different setting. It evaluates public skills in repositories that their authors did not target. The benchmark generates each requirement from the skill, then selects a repository with the relevant technology. A fixed prompt generates the pytest verifier. The resulting test runs deterministically, although a model wrote it.</p><p>SkillsBench asks how much a task-specific skill can help. SWE-Skills-Bench asks how well a public skill transfers to a new repository. Skill authorship, task mix, model, harness, baseline, and scoring method all differ.</p><p>The starting pass rate also matters. SWE-Skills-Bench began at 89.8%, leaving 10.2 percentage points available to improve. Its 1.2-point gain closes about 12% of that gap. SkillsBench began at 33.9% and closes about 25% of the available gap. The apparent fourteen-fold difference falls to roughly twofold after this adjustment. The studies remain too different for a direct comparison.</p><p>Results also vary within the same benchmark. In SkillsBench 1.1, average gains range from 9.7 points in Mathematics and OR to 28.8 in Natural Science. Thirteen of the 87 tasks get worse with a skill. In SWE-Skills-Bench, broad or version-specific guidance sometimes distracts the agent from the immediate task.</p><p>NVIDIA reports larger gains on a third type of evaluation. Its <a href="https://developer.nvidia.com/blog/evaluating-ai-agent-skill-performance-with-nvidia-skillevaluator/">SkillEvaluator benchmark</a> covers more than 300 skills for over 30 NVIDIA products. Average correctness rose from 46 to 87 on a 0-100 rubric. NVIDIA writes the skills, owns the product documentation, and builds the evaluation. The post reports no confidence intervals, and most skills use one attempt per task.</p><div id="datawrapper-iframe" class="datawrapper-wrap outer" data-attrs="{&quot;url&quot;:&quot;https://www.datawrapper.de/_/bifHr/&quot;,&quot;thumbnail_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2155a205-18af-464a-9498-4ed70fab17f9_1220x776.png&quot;,&quot;thumbnail_url_full&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fb2bf6ac-d127-4761-b33b-379798c98eed_1220x900.png&quot;,&quot;height&quot;:400,&quot;title&quot;:&quot;Three skill benchmarks measure different conditions&quot;,&quot;description&quot;:&quot;Skill authorship, task design, baseline, and scoring method all affect the headline result.&quot;,&quot;belowTheFold&quot;:true}" data-component-name="DatawrapperToDOM"><iframe id="iframe-datawrapper" class="datawrapper-iframe" src="https://www.datawrapper.de/_/bifHr/" width="730" height="400" frameborder="0" scrolling="no" loading="lazy"></iframe><script type="text/javascript">!function(){"use strict";window.addEventListener("message",(function(e){if(void 0!==e.data["datawrapper-height"]){var t=document.querySelectorAll("iframe");for(var a in e.data["datawrapper-height"])for(var r=0;r<t.length;r++){if(t[r].contentWindow===e.source)t[r].style.height=e.data["datawrapper-height"][a]+"px"}}}))}();</script></div><h2>Quantitative research has silent failures</h2><p>Software agents receive feedback while they work. A compiler rejects a type error, a test fails, or a service does not start. The agent can use the signal to revise its work.</p><p>Many research errors produce valid code and plausible output:</p><ul><li><p><strong>Cross-validation leakage.</strong> Training labels or feature windows overlap the test period. The backtest runs and the estimated Sharpe ratio can rise.</p></li><li><p><strong>Pre-split standardization.</strong> A scaler fitted on the full dataset puts future information into the training data. No runtime error identifies the leak.</p></li><li><p><strong>Current index membership.</strong> Applying today&#8217;s constituents to earlier dates excludes many firms that later left the index. The resulting backtest contains survivorship and constituent-selection bias.</p></li><li><p><strong>The wrong cost base.</strong> Charging costs on the position instead of the trade overstates costs in a 4% to 5% rebalance. Other denominator errors can understate them. The tearsheet still renders.</p></li></ul><p>A researcher has to state the relevant invariant and test whether it held.</p><h2>Skills, libraries, and verifiers serve different roles</h2><p>A skill gives the agent a procedure before it starts. A library provides a tested implementation while the agent works. A verifier checks the process or result. Repeated failures may require all three.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2le2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f8cde05-f570-447c-a3c1-87bf62ee5618_1600x900.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2le2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f8cde05-f570-447c-a3c1-87bf62ee5618_1600x900.png 424w, https://substackcdn.com/image/fetch/$s_!2le2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f8cde05-f570-447c-a3c1-87bf62ee5618_1600x900.png 848w, https://substackcdn.com/image/fetch/$s_!2le2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f8cde05-f570-447c-a3c1-87bf62ee5618_1600x900.png 1272w, https://substackcdn.com/image/fetch/$s_!2le2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f8cde05-f570-447c-a3c1-87bf62ee5618_1600x900.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!2le2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f8cde05-f570-447c-a3c1-87bf62ee5618_1600x900.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8f8cde05-f570-447c-a3c1-87bf62ee5618_1600x900.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:131310,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://insights.ml4trading.io/i/213744082?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f8cde05-f570-447c-a3c1-87bf62ee5618_1600x900.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!2le2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f8cde05-f570-447c-a3c1-87bf62ee5618_1600x900.png 424w, https://substackcdn.com/image/fetch/$s_!2le2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f8cde05-f570-447c-a3c1-87bf62ee5618_1600x900.png 848w, https://substackcdn.com/image/fetch/$s_!2le2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f8cde05-f570-447c-a3c1-87bf62ee5618_1600x900.png 1272w, https://substackcdn.com/image/fetch/$s_!2le2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f8cde05-f570-447c-a3c1-87bf62ee5618_1600x900.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>A skill instructs before execution, a library constrains implementation, and a verifier detects violations.</em></p><p>For example, a skill can tell the agent to fit a scaler inside each training fold. A library can expose an API that accepts fold-local data. A verifier can record which rows reached <code>fit</code> and reject any call that included test data.</p><h2>How we designed the ML4T skills</h2><p>We applied the benchmark findings directly:</p><ul><li><p><strong>Narrow scope.</strong> Each skill covers one research procedure and stays within 120 lines. Short files reduce irrelevant context.</p></li><li><p><strong>Explicit routing.</strong> Every description states when the agent should load the skill, so the agent can select it before loading the full procedure.</p></li><li><p><strong>Concrete failure examples.</strong> Every skill shows a plausible wrong approach and a corrected one. The examples focus on stable research invariants rather than fixed API versions or parameter values.</p></li><li><p><strong>Library integration.</strong> Fifty skills include a Production Implementation section that shows the relevant ML4T library. CI can check the imports and function signatures against the library source.</p></li><li><p><strong>Instruction-only skill directories.</strong> Each directory contains one <code>SKILL.md</code>, with no executable hooks or companion scripts.</p></li></ul><p>The collection includes procedures for leakage, lookahead bias, point-in-time data, non-stationarity, feature validation, backtest costs, portfolio risk, and live-trading controls. It also includes end-to-end research workflows and skills for building reliable research agents.</p><h2>How we are evaluating the collection</h2><p>Our March pilot tested five paired tasks, with one run per condition. All ten runs passed. Runs with skills used 1,253,830 tokens, compared with 1,212,535 without skills. The pilot established a cost baseline and showed that the next benchmark needs harder tasks and stronger verifiers.</p><p>The next evaluation starts from silent research failures. Each task will require the relevant procedure. Deterministic checks will inspect data splits, training inputs, or point-in-time records where possible. Research decisions that resist a deterministic rule will need a judge calibrated against human labels.</p><p>We will run repeated skill and no-skill trials on the same tasks. The report will show where each skill improves correctness, how consistently it does so, and what it costs in tokens. The results will also show when a library constraint or verifier is more effective than written guidance.</p><h2>Get the skills</h2><p>Inspect any public skill before installing it. One marketplace study analyzed 31,132 skills and estimated that <a href="https://arxiv.org/abs/2601.10338">26.1% contained at least one vulnerability</a>. Executable scripts increased the observed risk, but harmful instructions can also live in Markdown.</p><p>The ML4T skills are public under Apache 2.0:</p><pre><code><code>git clone https://github.com/ml4t/skills.git ~/.ml4t-skills
~/.ml4t-skills/scripts/install.sh</code></code></pre><p>Install the collection, inspect the files, and use the skills that fit your research workflow. We will publish the evaluation results as we measure each skill&#8217;s effect on correctness, consistency, and cost.</p><div class="pullquote"><p>Join us for a free 30-minute session on Sep 2, &#8220;<a href="https://maven.com/p/bc9fd4/managing-your-strategy-research-process">Managing your Strategy Research Process</a>&#8221;. <br>I am also teaching on September 9, <a href="https://maven.com/p/c7565e/how-to-engineer-a-multi-agent-system">How to Engineer a Multi-Agent System</a>, covering task decomposition, deterministic harnesses, and the decisions that still require human approval.</p></div><p></p>]]></content:encoded></item><item><title><![CDATA[How to Evaluate a Financial Research Agent as a System]]></title><description><![CDATA[From task interpretation and evidence retrieval to calculation, judgment, synthesis, and repeated-run reliability.]]></description><link>https://insights.ml4trading.io/p/how-to-evaluate-a-financial-research-agent-as-a-system</link><guid isPermaLink="false">https://insights.ml4trading.io/p/how-to-evaluate-a-financial-research-agent-as-a-system</guid><dc:creator><![CDATA[Stefan Jansen]]></dc:creator><pubDate>Thu, 27 Aug 2026 05:15:43 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/2c0189c2-5e5d-4906-aa74-57e43a7ac67f_2400x1260.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>A financial research agent can return a polished report with plausible conclusions, working citations, and calculations that appear to reconcile. That establishes something about the output. It says much less about how reliably the system produced it.</p><p>Consider an agent asked to screen a US equity universe for companies with material exposure to data-center power demand and recommend two for further underwriting. The system has to interpret &#8220;material exposure,&#8221; establish the universe and period, and identify companies and sources. It then retrieves documents and data, extracts comparable evidence, calculates relevant quantities, resolves contradictions, decides when it has enough evidence, and synthesizes the result.</p><p>A failure anywhere in that sequence can change the recommendation. The agent can search the wrong period, miss a filing, or retrieve the right evidence but exclude it from working state. It can confuse reported and adjusted figures, calculate a ratio with inconsistent denominators, or stop before investigating a contradiction. Its conclusion may fail to reflect the evidence it collected.</p><p>The language model is one component. The useful unit for evaluation is the running research system: models, prompts, orchestration, tools, data sources, retrieval, working state, computation, runtime policies, and the mechanisms that turn all of these into analysis or decision support.</p><p>This system view changes the evaluation problem. The questions become whether each part of the research process works reliably, whether failures can be localized, and whether an observed failure points toward a controlled next experiment.</p><div class="pullquote"><p>On September 2, I&#8217;ll discuss <a href="https://maven.com/p/bc9fd4/managing-your-strategy-research-process">the adjacent problem in trading strategy research</a>: <br>how to identify key design decisions, diagnose constraints exposed by the evidence, <br>and select experiments to improve strategy performance. Free registration <a href="https://maven.com/p/bc9fd4/managing-your-strategy-research-process">here</a>.</p></div><h2>What a financial research agent actually does</h2><p>Implementations differ. Some systems use one model repeatedly inside a tool loop. Others route work among specialized agents for research, financial analysis, valuation, review, and report generation. The distinction matters less for evaluation than the functions the system has to perform.</p><p>A useful functional decomposition has six stages.</p><p>The first is <strong>task interpretation and planning</strong>. The system translates a research request into an operational task: universe, period, subquestions, required evidence, analytical operations, and a stopping condition. A request such as &#8220;compare the economics of these companies&#8221; requires decisions about peer definitions, business segments, time periods, accounting measures, and which economic differences matter.</p><p>The second is <strong>information acquisition</strong>. The agent searches filings, earnings materials, transcripts, market data, company disclosures, economic series, industry sources, internal research, or other approved data. It also has to find the right document, parse it, identify the relevant passage or table, and respect the date when information became available.</p><p>The third is an <strong>evidence workspace</strong>. Useful research requires more than appending retrieved text to a context window. The system needs a representation of what it has established: extracted facts, source provenance, dates, unresolved questions, conflicting observations, intermediate calculations, and hypotheses that require additional evidence.</p><p>The fourth is <strong>computation and tool use</strong>. Financial research routinely requires deterministic operations that should be inspectable outside the language model: ratios, growth rates, valuation calculations, time-series transformations, reconciliations, screening operations, table extraction, and sometimes code execution. The inputs, transformation, and output should be preserved wherever practical.</p><p>The fifth is <strong>analysis and judgment</strong>. The system compares evidence, reconciles discrepancies, considers alternative explanations, applies the relevant financial concepts, and decides what the evidence supports. This stage may send the agent back for another filing, another calculation, or evidence on a competing hypothesis.</p><p>The sixth is <strong>verification and synthesis</strong>. Before returning the result, the system checks coverage of the original request, connects claims to sources, surfaces relevant uncertainty or disagreement, and produces the report, recommendation, estimate, or other decision support.</p><p>The resulting system is iterative. Analysis creates new research questions. Calculations expose missing inputs. Conflicting sources require another retrieval pass. The orchestrator selects the next operation and decides when to stop.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!enOc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F235329d6-a396-4329-876a-5969962e5eb6_2592x1498.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!enOc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F235329d6-a396-4329-876a-5969962e5eb6_2592x1498.png 424w, https://substackcdn.com/image/fetch/$s_!enOc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F235329d6-a396-4329-876a-5969962e5eb6_2592x1498.png 848w, https://substackcdn.com/image/fetch/$s_!enOc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F235329d6-a396-4329-876a-5969962e5eb6_2592x1498.png 1272w, https://substackcdn.com/image/fetch/$s_!enOc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F235329d6-a396-4329-876a-5969962e5eb6_2592x1498.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!enOc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F235329d6-a396-4329-876a-5969962e5eb6_2592x1498.png" width="1456" height="841" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/235329d6-a396-4329-876a-5969962e5eb6_2592x1498.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:841,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!enOc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F235329d6-a396-4329-876a-5969962e5eb6_2592x1498.png 424w, https://substackcdn.com/image/fetch/$s_!enOc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F235329d6-a396-4329-876a-5969962e5eb6_2592x1498.png 848w, https://substackcdn.com/image/fetch/$s_!enOc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F235329d6-a396-4329-876a-5969962e5eb6_2592x1498.png 1272w, https://substackcdn.com/image/fetch/$s_!enOc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F235329d6-a396-4329-876a-5969962e5eb6_2592x1498.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>A financial research agent runs an iterative workflow over shared state and configuration. Instrumentation spans every stage so the team can evaluate components, trajectories, and repeated runs.</em></p><p>The figure is a functional model rather than a prescription for one implementation. A recent <a href="https://arxiv.org/html/2506.18096">survey of deep research agents</a> describes planning, multi-hop retrieval, iterative tool use, code execution, memory, and structured report generation across static and dynamic workflows and single-agent and multi-agent systems. The open <a href="https://github.com/vals-ai/finance-agent-v2">Finance Agent v2 harness</a> provides one concrete financial example, with web search, SEC EDGAR access, page parsing, stored-information retrieval, price history, and a calculator.</p><p>The architecture provides an evaluation map because each function introduces a different class of failure.</p><h2>Evaluate the system where it can fail</h2><p>A single aggregate score cannot distinguish these failures.</p><ul><li><p><strong>Task interpretation:</strong> Verify the universe, period, definitions, and requested output with coverage checks and explicit task decomposition. Otherwise, the agent may screen the wrong companies or answer only part of the request.</p></li><li><p><strong>Retrieval:</strong> Measure required-source recall, retrieval success, and date validity. A missed filing or transcript leaves downstream components without required evidence.</p></li><li><p><strong>Evidence selection and state:</strong> Inspect lineage, workspace contents, and provenance coverage. A relevant fact may be retrieved and then discarded or buried.</p></li><li><p><strong>Calculation:</strong> Recompute results independently and test formulas, units, and tolerances. Correct revenue figures can still produce the wrong growth rate.</p></li><li><p><strong>Analysis and judgment:</strong> Use counterfactual and sensitivity tests. A material risk disclosure should affect the risk assessment in a defensible direction.</p></li><li><p><strong>Orchestration:</strong> Analyze trajectories, tool errors, and stopping behavior. Repeated searches can consume the budget while a missing calculation remains undone.</p></li><li><p><strong>Synthesis:</strong> Grade required criteria and check citations. Correct research can still omit a requested company or material qualification.</p></li><li><p><strong>Repeated execution:</strong> Run repeated trials and record failure frequency and decision variance. Similar tasks should succeed consistently.</p></li><li><p><strong>Evaluator:</strong> Compare automated scores with independent finance-expert judgments and adjudicate consequential disagreements.</p></li></ul><p>The metric depends on the task. A retrieval test can measure whether required sources or facts were recovered. A valuation task can reproduce calculations and impose numerical tolerances. A company screen can test coverage of the eligible universe and verify inclusion criteria. A forecast can be evaluated with proper scoring rules and calibration. A long report can be decomposed into required claims. A recommendation can be subjected to scenario or evidence-sensitivity tests.</p><p>These operations require different metrics. They share one engineering requirement: observability.</p><h2>Instrument the research process before evaluating it</h2><p>A research team cannot diagnose a system from the final answer alone.</p><p>For each run, preserve enough information to reconstruct what happened. Record the model and version, system and task prompts, tool definitions, query date, source access rules, searches, retrieved documents, extracted passages, API data, and calculations with their inputs. Also record errors, time and token budgets, tool-call limits, stopping reason, total cost, and final output.</p><p>This does not require exposing a model&#8217;s private internal reasoning. It requires recording the system&#8217;s observable actions and artifacts.</p><p>Suppose an agent&#8217;s report omits Intel&#8217;s decline in notebook volume while explaining its revenue slowdown. The system may never have found the relevant filing. It may have retrieved the filing but failed to identify the passage. It may have extracted the fact but failed to retain it in the evidence passed to analysis. The analysis may have had the evidence and given it no weight.</p><p>The final report looks the same in all four cases. The next experiment should be different.</p><p><a href="https://arxiv.org/html/2401.13178">AgentBoard</a> provides useful methodological precedent. Its authors argue that final success rates reveal little about intermediate agent behavior, then add a progress-rate metric over intermediate states or annotated subgoals and trajectory analysis. Its environments cover embodied, game, web, and tool tasks rather than financial research. The engineering implication still applies: intermediate observations distinguish systems that receive the same final score after materially different runs.</p><h2>Use report-level grading for what it can measure</h2><p><a href="https://arxiv.org/html/2608.11683">FrontierFinance</a>, released in August 2026 by seven Samaya AI researchers, addresses one part of the architecture: evaluating whether a long financial research report covers the facts, calculations, and qualifications required by the task.</p><p>The benchmark contains 220 open-ended finance research tasks spanning six parts of the investor workflow. The authors decompose them into 11,543 binary rubrics written and reviewed by finance professionals.</p><p>One released question asks what caused Intel&#8217;s revenue slowdown. The rubric separately checks reported revenue for 2023 and 2024, notebook and desktop volumes, demand explanations, pricing, and other evidence needed for the causal account. Must-have labels identify especially consequential criteria.</p><p>The public questions average 52.5 rubrics, with a median of 27 and a range from 3 to 475. Each report receives the fraction of its criteria that it satisfies, and the benchmark averages those scores by question. A screening problem containing several hundred checks therefore does not dominate a smaller company-research question because it has more rubric items.</p><p>This decomposition has support outside finance. <a href="https://aclanthology.org/2025.emnlp-main.796/">CheckEval</a>, an EMNLP 2025 study across 12 evaluator models, reports stronger correlation with human judgments, higher evaluator agreement, lower variance, and more traceable decisions from checklist-based evaluation.</p><p><a href="https://arxiv.org/html/2506.11763">DeepResearch Bench</a> makes a related separation. Its RACE framework evaluates report quality against task-specific criteria and a reference report. Its FACT framework separately examines factual abundance and citation trustworthiness. The benchmark supplies methodological support for keeping report quality and information acquisition in separate scores. It does not provide evidence about financial-agent performance.</p><p>Criterion-level grading tells the team which required claims or calculations are missing. It does not identify why they are missing.</p><h2>The model and the agent are different units of comparison</h2><p>The system view also changes how leaderboard results should be interpreted.</p><p>FrontierFinance compares models using native web search, models inside the open Finance Agent v2 harness, and Samaya&#8217;s in-house system, which uses its own models, tools, retrieval engines, and financial data index.</p><p>The strongest reported native-search configuration satisfies 33.0% of all criteria. The leading Finance Agent v2 configuration reaches 49.2%. Samaya&#8217;s high-effort system reaches 56.0%.</p><p>Those results show that system configuration affects performance. They provide limited evidence about which component caused the difference.</p><p>Samaya&#8217;s 6.8-point advantage over the strongest Finance Agent v2 configuration combines changes in models, retrieval, tools, and data infrastructure. A team deciding whether to change its retriever, tool interface, model, context construction, or stopping policy needs controlled comparisons within its own system.</p><p>The configuration therefore belongs in the result. Record the model and version, prompts, tools, data providers, retrieval settings, inference parameters, orchestration rules, context limits, tool-call budgets, query date, evaluation date, and cost.</p><p>Finance adds an important temporal requirement. A system answering a historical investment question must exclude information that became available afterward. FrontierFinance gives every system the query date in its prompt, while Samaya also applies that date as a retrieval cutoff to its data index. These mechanisms provide different controls, and a model may have absorbed later information during training.</p><h2>Diagnose the trajectory, not the tool-call count</h2><p>Execution traces become useful once a report misses a criterion.</p><p>FrontierFinance provides a simple example. Claude Fable 5 leads the Finance Agent v2 group at 49.2% while averaging 16.6 tool calls per question. GPT 5.6 Sol averages 46.3 tool calls and scores 46.8%. More activity does not imply more complete research.</p><p>The benchmark also examines failed page retrievals. It classifies a URL as originating from parametric knowledge when its domain did not previously appear in the run&#8217;s search history. Those direct attempts have higher access-error rates than search-discovered URLs. Invalid addresses and pages that block crawlers consume the same finite execution budget as useful research.</p><p>A trajectory diagnostic should ask what the actions accomplished. Did searches add relevant evidence? Did the system return repeatedly to the same sources? Did tool failures trigger a sensible alternative? Was a calculation attempted once the required inputs were available? Did the agent identify unresolved questions? Did it stop because the requested evidence had been collected or because the run budget expired?</p><p>For the Intel example, suppose the trace shows that the filing and notebook-volume decline were both retrieved before the report was written. Another retrieval query is unlikely to fix the omission. The failure has moved downstream.</p><h2>Retrieval and evidence use are separate tests</h2><p>A source appearing in a report does not establish that its contents affected the analysis.</p><p><a href="https://arxiv.org/html/2408.08067">RAGChecker</a> separates retriever properties such as claim recall and context precision from generator properties such as context utilization, faithfulness, and sensitivity to irrelevant information. Its experiments cover general retrieval-augmented generation, so the metrics require validation on financial research tasks.</p><p><a href="https://arxiv.org/html/2307.03172">Lost in the Middle</a> shows that models&#8217; use of relevant information can depend on where it appears in a long context. Access to the document does not imply uniform use of its contents. The experiments use multi-document question answering and key-value retrieval rather than investment research, but they identify a component behavior worth testing.</p><p>A new finance-specific preprint makes the distinction more consequential. <a href="https://arxiv.org/html/2608.24842">Reading Is Not Using</a> holds a focal risk disclosure constant while expanding unrelated filing context from 2,000 to 128,000 tokens. The authors report that direct retrieval of the disclosure remains strong while its influence on a downstream judgment approaches their experimental noise floor.</p><p>In their experiments, placing a targeted structured extraction immediately beside the decision restores more of that influence. Chunk-then-aggregate processing and instructions to reason further do not.</p><p>The paper is explicitly a very preliminary draft. Its primary experiments use constructed disclosures, its tests on actual filings are exploratory and capability-dependent, and a public replication package is still pending. The result is best treated as a hypothesis for evaluation.</p><p>First determine whether the agent can retrieve and identify the relevant evidence. Then change one material fact under controlled conditions and measure whether the downstream estimate, ranking, recommendation, or risk assessment moves in the expected direction.</p><p>A system can pass the first test and fail the second.</p><h2>Test the same system more than once</h2><p>Agent trajectories are stochastic. Search results vary, models sample different actions, sources become temporarily inaccessible, and an early choice can redirect the rest of a long run.</p><p>One successful execution provides weak evidence of reliability. Run important evaluation tasks repeatedly and measure the distribution of results. At minimum, record task success, criterion coverage, critical failures, cost, tool-call count, and whether the final decision changes.</p><p><a href="https://arxiv.org/html/2406.12045">&#964;-bench</a> introduced <code>pass^k</code> to estimate the chance that an agent succeeds on all <em>k</em> repeated trials of the same task. Its retail and airline customer-service domains are far removed from investment research. The reliability principle applies directly: average single-run success can conceal a system that fails intermittently under the same underlying task.</p><p>Suppose an agent recommends Company A in seven runs and Company B in three despite having access to the same source set and evaluation date. The variation may reflect a close call supported by the evidence. It may instead come from one run missing a filing, another using a different denominator, and a third stopping before completing the peer comparison. The evaluation should reveal which case occurred.</p><p>This also changes how small benchmark differences should be interpreted. A one-run comparison between two configurations provides less information than repeated runs that estimate failure frequency and outcome variance on the same tasks.</p><h2>Validate the evaluator too</h2><p>Once long reports are decomposed into criteria, another system still has to determine whether each criterion was satisfied.</p><p>FrontierFinance uses majority vote across GPT 5.4, Gemini 3.1 Pro, and Claude Sonnet 4.6. The authors report that this three-model panel closely matched a nine-model committee in preliminary experiments. The paper does not report agreement with finance experts on the released tasks.</p><p>That leaves one component of the evaluation system unvalidated against the intended professional standard.</p><p>Model-based graders have documented failure modes. The <a href="https://arxiv.org/html/2306.05685">MT-Bench and Chatbot Arena study</a>, for example, found position and verbosity biases and weaknesses on some reasoning tasks. Its pairwise evaluation setup differs from FrontierFinance&#8217;s binary pointwise grading, so those findings do not establish that FrontierFinance has the same biases.</p><p>The appropriate test is local. Sample tasks across research types and difficulty levels. Have finance professionals grade the same criteria independently. Measure agreement, inspect disagreements that would change a deployment decision, and revise ambiguous rubrics or grading prompts before relying on the automated evaluator at scale.</p><p>The grader is another component of the system.</p><h2>Define the evaluation contract before the run</h2><p>These tests become easier to manage when the research team specifies them before comparing systems.</p><ul><li><p><strong>Task and decision:</strong> The research task, universe, output, and decision it informs.</p></li><li><p><strong>Required evidence and behavior:</strong> Required claims, sources, calculations, tolerances, coverage, temporal rules, and sensitivity tests.</p></li><li><p><strong>System configuration:</strong> Models, prompts, tools, data, retrieval, orchestration, budgets, dates, versions, and cost.</p></li><li><p><strong>Component observations:</strong> Retrieval, evidence state, calculation, analysis, trajectory, synthesis, repeatability, and grader results.</p></li><li><p><strong>Follow-up experiment:</strong> One component change, the controls held fixed, and the result that would change the decision.</p></li></ul><p>Return to the data-center-power screen.</p><p>Before the run, define the equity universe and what qualifies as material exposure. Specify the evidence required to advance a company, the allowed source hierarchy, the relevant date, and calculations that must reconcile. Decide which omissions invalidate the result.</p><p>Then instrument the system. If a company is missing because its filing was never discovered, test retrieval. If the filing was found but the relevant segment disclosure was not extracted, test document processing. If the correct inputs were preserved but the exposure calculation was wrong, test computation. If the evidence was available and correctly calculated but the ranking barely responds when the material input changes, test analysis. If identical runs produce different selections because the agent stops at different points, test orchestration and repeatability.</p><p>Choose one intervention that addresses the observed failure and hold the rest of the configuration fixed.</p><p>A benchmark score describes how a configuration performs on a defined task set. An instrumented evaluation identifies what to change.</p><p>FrontierFinance makes one difficult part of that process unusually concrete: it turns long, open-ended financial reports into thousands of inspectable claim-level criteria. The broader evaluation begins with task interpretation and continues through evidence retrieval, computation, judgment, synthesis, repeated runs, and validation of the evaluator.</p><p>My free 30-minute Lightning Lesson on Wednesday, September 2, <em><a href="https://maven.com/p/bc9fd4/managing-your-strategy-research-process">Managing Your Strategy Research Process</a></em>, covers the adjacent problem in empirical ML and strategy research. We will identify the decision a result informs, diagnose the constraint exposed by the evidence, and select a controlled experiment that could change a proceed, revise, monitor, or stop decision.</p><p><a href="https://maven.com/p/bc9fd4/managing-your-strategy-research-process">Register for the September 2 Lightning Lesson</a></p>]]></content:encoded></item><item><title><![CDATA[Six Libraries for Quantitative Research in the Age of Agents]]></title><description><![CDATA[Data, features, models, diagnostics, backtesting, and live trading are now stable on PyPI. Why we built them, and why coding agents make a tested tool layer more valuable rather than less.]]></description><link>https://insights.ml4trading.io/p/six-libraries-for-quantitative-research</link><guid isPermaLink="false">https://insights.ml4trading.io/p/six-libraries-for-quantitative-research</guid><dc:creator><![CDATA[Stefan Jansen]]></dc:creator><pubDate>Thu, 13 Aug 2026 20:28:07 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/60b2390c-c09b-4b0c-af7b-2cffc48d80c2_2400x1260.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Every quantitative research team rebuilds the same scaffolding. Somebody writes the loader that returns prices as they stood on the day of the decision rather than as they were later restated. Somebody writes the split that keeps a label&#8217;s future window out of the training data. Somebody writes the fill logic that decides whether an order executes at today&#8217;s close or tomorrow&#8217;s open, and the accounting that charges commission and slippage against it. None of this is the interesting part of anyone&#8217;s research. All of it is where the errors that invalidate a result actually live.</p><p>We turned that scaffolding into libraries while writing the third edition of <em>Machine Learning for Trading</em> because nine end-to-end case studies need a single implementation of these decisions rather than nine. This week the last of them reached a stable release. Six packages now cover the workflow from raw market data through live trading.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!eKSS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ed85041-4785-46a9-a502-10a5b85e141f_3200x1840.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eKSS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ed85041-4785-46a9-a502-10a5b85e141f_3200x1840.png 424w, https://substackcdn.com/image/fetch/$s_!eKSS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ed85041-4785-46a9-a502-10a5b85e141f_3200x1840.png 848w, https://substackcdn.com/image/fetch/$s_!eKSS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ed85041-4785-46a9-a502-10a5b85e141f_3200x1840.png 1272w, https://substackcdn.com/image/fetch/$s_!eKSS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ed85041-4785-46a9-a502-10a5b85e141f_3200x1840.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!eKSS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ed85041-4785-46a9-a502-10a5b85e141f_3200x1840.png" width="1456" height="837" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5ed85041-4785-46a9-a502-10a5b85e141f_3200x1840.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:837,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!eKSS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ed85041-4785-46a9-a502-10a5b85e141f_3200x1840.png 424w, https://substackcdn.com/image/fetch/$s_!eKSS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ed85041-4785-46a9-a502-10a5b85e141f_3200x1840.png 848w, https://substackcdn.com/image/fetch/$s_!eKSS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ed85041-4785-46a9-a502-10a5b85e141f_3200x1840.png 1272w, https://substackcdn.com/image/fetch/$s_!eKSS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ed85041-4785-46a9-a502-10a5b85e141f_3200x1840.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>The six ML4T libraries across the research workflow</em></p><p>That is the release. The rest of this piece is about why the timing turned out to matter more than we expected.</p><div class="callout-block" data-callout="true"><p>Deciding how to organize your strategy research is the part that no library automates. It is also what I am teaching in a free 30-minute session on Wednesday, August 26, <em><a href="https://maven.com/p/bc9fd4/managing-your-strategy-research-process">Managing Your Strategy Research Process</a></em>.</p></div><h2>Coding agents changed the argument for domain libraries</h2><p>For most of the time we were building these, the case was ordinary. Shared, tested infrastructure beats six private copies of the same fragile code, the same way it does in any other field.</p><p>Coding agents made the case sharper, and in a direction that surprised us. The obvious prediction was that agents reduce the value of libraries: if a model can write a backtest in thirty seconds, why maintain one? What actually happens is the reverse.</p><p>An agent will write you that backtest. It will be clean, it will run, and it will produce a Sharpe ratio. What it will not tell you is that it filled orders at a price nobody could have traded at, that it scored the model on data containing the answer, or that the number it reported is the best of forty variants it tried and discarded. The code being correct Python says nothing about whether the experiment was sound.</p><p>The deeper problem is continuity. When a person writes that code, the assumptions live in their head, and they carry them from one experiment to the next. When an agent generates it, nothing carries them. The next run regenerates the file from scratch and may resolve a dozen small questions differently: how missing assets are handled, how ties are broken, which lag count goes into a standard error. Two results you intended to compare are then answering slightly different questions, and nothing in either output says so.</p><p>So the division of labor we settled on is this. The agent decides which experiment is worth running. The library decides what a fill is. Speed of generation is exactly why the second half has to be fixed: an agent can produce forty variants in an afternoon, and forty variants are only informative if they differ in the way you intended and in no other way.</p><h2>What each library decides for you</h2><p>The point of each package is not that it has functions for a topic. It is that it settles a specific question the same way every time, so that two experiments remain comparable.</p><ul><li><p><a href="https://github.com/ml4t/data">ml4t-data</a> settles what the data looked like at the moment of the decision. It covers more than 20 market, macro, factor, and prediction-market sources, stores them locally as Parquet with metadata, and handles incremental updates, gap detection, and validation. Getting this wrong is the single most common way a backtest ends up trading on information that did not exist yet.</p></li><li><p><a href="https://github.com/ml4t/engineer">ml4t-engineer</a> settles how a feature or a label is constructed, and where the boundary sits between what a model may see and what it is predicting. Its registry holds 120 features, 60 of them validated against TA-Lib to a tolerance of <code>1e-6</code>.</p></li><li><p><a href="https://github.com/ml4t/models">ml4t-models</a> settles what the model is actually fitted to. Financial data arrives as a panel of many assets over time, and whether you are predicting the cross-section on a given day or a single asset&#8217;s path changes the model contract. The library makes that explicit rather than leaving it to a reshape.</p></li><li><p><a href="https://github.com/ml4t/diagnostic">ml4t-diagnostic</a> settles how a result is scored: the lag count in a standard error when returns overlap, the purge and embargo that stop a validation split from leaking, the trial count that goes into a multiple-testing correction. These are the adjustments that separate a real edge from a well-dressed one.</p></li><li><p><a href="https://github.com/ml4t/backtest">ml4t-backtest</a> settles when an order fills, at what price, and what it costs, along with account rules, risk limits, and an exported record of the run.</p></li><li><p><a href="https://github.com/ml4t/live">ml4t-live</a> settles what happens between a validated strategy and a funded account: shadow and paper modes, risk limits, reconciliation against the broker, and execution journals. Its adapters for Alpaca, Interactive Brokers, DataBento, and CCXT sit outside the stable contract and require an explicit experimental opt-in.</p></li></ul><p>All six are MIT-licensed and on PyPI, with documentation at <a href="https://www.ml4trading.io/docs/">ml4trading.io/docs</a>.</p><h2>Putting it to work: an agent that runs experiments</h2><p>Chapter 24 of the third edition builds a research operator on top of these libraries. It is worth describing plainly, because the architecture is the point rather than the code.</p><p>The operator is a single Python module. It gives a language model ten general-purpose tools, none of them financial: run a shell command, read and write files, read Parquet, query a database, search for a methodology document, and declare the task finished. It contains no sequence of financial calculations at all.</p><p>Three things sit outside it.</p><p>The first is a corpus of about sixty short methodology notes, each describing one method such as walk-forward validation or a deflated Sharpe ratio, and naming the library function that implements it. The model retrieves these at run time. The methodology can be improved without touching the operator.</p><p>The second is the libraries, which the model calls through the shell like any other user.</p><p>The third is a research registry, which is simply a database of previous experiments: what configuration was trained, what predictions it produced, what backtest was run on them, and what the metrics were. This is what makes a new experiment comparable to an old one, because the agent can look up exactly how the earlier run was configured instead of guessing.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!FmJ2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76a92ce5-eda1-4e3c-9ffb-993e5f42bc81_2620x1556.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FmJ2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76a92ce5-eda1-4e3c-9ffb-993e5f42bc81_2620x1556.png 424w, https://substackcdn.com/image/fetch/$s_!FmJ2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76a92ce5-eda1-4e3c-9ffb-993e5f42bc81_2620x1556.png 848w, https://substackcdn.com/image/fetch/$s_!FmJ2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76a92ce5-eda1-4e3c-9ffb-993e5f42bc81_2620x1556.png 1272w, https://substackcdn.com/image/fetch/$s_!FmJ2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76a92ce5-eda1-4e3c-9ffb-993e5f42bc81_2620x1556.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!FmJ2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76a92ce5-eda1-4e3c-9ffb-993e5f42bc81_2620x1556.png" width="1456" height="865" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/76a92ce5-eda1-4e3c-9ffb-993e5f42bc81_2620x1556.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:865,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!FmJ2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76a92ce5-eda1-4e3c-9ffb-993e5f42bc81_2620x1556.png 424w, https://substackcdn.com/image/fetch/$s_!FmJ2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76a92ce5-eda1-4e3c-9ffb-993e5f42bc81_2620x1556.png 848w, https://substackcdn.com/image/fetch/$s_!FmJ2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76a92ce5-eda1-4e3c-9ffb-993e5f42bc81_2620x1556.png 1272w, https://substackcdn.com/image/fetch/$s_!FmJ2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76a92ce5-eda1-4e3c-9ffb-993e5f42bc81_2620x1556.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>The agent decides which experiment to run; the libraries decide how it is computed</em></p><p>That last piece turns out to matter more than it sounds. When I asked the operator whether an ensemble could improve one of the book&#8217;s ETF case studies, the specification it recovered from the registry was four fields: <code>score_weighted_top_k</code>, <code>top_k=20</code>, monthly rebalancing, long-only. Those four fields are the entire reason its result could be compared with the baseline at all.</p><h2>Two runs</h2><p>The ensemble run combined the strongest predictions from three model families and reran the cost-aware backtest under the baseline&#8217;s recovered configuration. Mean information coefficient, the rank correlation between predictions and subsequent returns, rose from 0.052 to 0.065. Portfolio Sharpe fell from 0.92 to 0.56, with three of eight validation folds showing negative IC.</p><p>The agent recommended against adopting the ensemble, and identified why. Its fold-level instability, amplified by an allocator that concentrates on the highest-scoring names, is what costs portfolio performance even as rank correlation improves. That is one of the case study&#8217;s own teaching points, reached in 39 turns without being pointed at it. The comparison runs on the validation window, since the registry holds holdout predictions for the baseline alone, and the chapter notebook records that scope against the original run artifact.</p><p>A second run tested how much of a US firm-characteristics strategy depended on its smallest names. Filtering the existing validation predictions to the top three market-cap quartiles cut Sharpe from 4.27 to 2.24, lowered IC from 0.074 to 0.048, and deepened maximum drawdown from 15% to 52%. Turnover was nearly unchanged, 1.77 against 1.80, because the filter screens signals without retraining. That makes it a sensitivity screen rather than a capacity estimate: it shows the result leans heavily on small caps, and it does not separate that from reduced breadth, nor say what a capacity-constrained implementation would earn.</p><p>Neither run produced a stronger strategy. Both produced a specified experiment, a recorded configuration, and a result that the next iteration can build against, which is most of what research actually consists of.</p><h2>Where the tools stop</h2><p>The libraries constrain what gets computed. They do not constrain what gets concluded from it. Which evaluation window supports which claim, whether a specification answers the question that was actually asked, and whether a result justifies a decision are review judgments, and no package boundary reaches them. That is why the operator records the evaluation window, the fold-level statistics, and every generated script rather than only the final recommendation.</p><p>There is also a security boundary worth stating plainly, because it is easy to get wrong. The operator restricts file edits to a designated output directory, but that is a guardrail for a cooperative model rather than a sandbox. Its shell tool runs commands with the host user&#8217;s privileges, so a confused or jailbroken model can write outside that directory or reach the network. The published notebook replays a recorded trace by default and executes nothing the model supplies. Running it live against an external model needs real isolation: a container, dropped privileges, read-only mounts, and no network egress unless you mean to allow it.</p><p>An unattended system needs more still: deterministic seeds, contamination tracking, explicit approval points, and limits on what may act downstream of a research note.</p><h2>What this adds up to</h2><p>A research agent is only as trustworthy as the tools it calls. Give it a shell and a prompt and it will reimplement finance from memory, differently each time. Give it versioned libraries that have already settled how a fill works, where a validation boundary sits, and how a trial count enters a correction, and its output becomes something a reviewer can check and a second run can reproduce.</p><p>That is what these six libraries are for, and it is why finishing them mattered more in 2026 than it would have in 2023.</p><p>All six are on PyPI now, and the Chapter 24 operator is <a href="https://github.com/stefan-jansen/machine-learning-for-trading/tree/main/24_autonomous_agents">public</a>.</p>]]></content:encoded></item><item><title><![CDATA[How Bridgewater Engineers a Research Agent]]></title><description><![CDATA[Five design decisions from PAT that do not need a 50-year archive, and the point-in-time test the talk leaves open.]]></description><link>https://insights.ml4trading.io/p/how-bridgewater-engineers-a-research</link><guid isPermaLink="false">https://insights.ml4trading.io/p/how-bridgewater-engineers-a-research</guid><dc:creator><![CDATA[Stefan Jansen]]></dc:creator><pubDate>Wed, 29 Jul 2026 17:41:51 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/a2eb333c-f2fe-4a7f-9cee-14e811d56b5d_2400x1260.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Bridgewater&#8217;s applied AI team <a href="https://youtu.be/lXZb21CfeIY?si=AX8_1O66ycl84S1m">published a talk</a> on the Pocket Analyst Tool (PAT), a research analyst deployed internally to hundreds of their investors for several months. Brendan McManus, Michael Ran, and Santi Weight spent 25 minutes on how it is built, with architecture diagrams and accuracy numbers. Most of what they describe is not about models.</p><p>McManus sets the scope before the demo runs:</p><blockquote><p>PAT is not about how we trade. It&#8217;s really about performing deep exploratory research, enabling our investors to go after questions that they never would have had the bandwidth to pursue before.</p></blockquote><p>Asked in the comments what the return has been, Weight replied that exact numbers are hard, then named time saved on analyses, &#8220;expected multiple man-years in first few months&#8221;, and investors trying things they would otherwise have dropped, which he marks as value-add rather than efficiency gain.</p><p>Their roadmap is a set of discrete sub-agents covering a research cycle: perceiving what is happening, forming questions, investigating, synthesizing, and folding what was learned back into shared memory. PAT is the investigation piece. Its outputs land in the same database its inputs came from, so one analysis becomes an input to the next, and human and agent work accumulate in one place.</p><div class="pullquote"><p>The AIA lab has also published the <a href="https://arxiv.org/html/2511.07678v1">AIA Forecaster</a>. On Saturday, August 1, I introduce agent engineering by demonstrating how to <a href="https://maven.com/stefan-jansen/agent-engineering">design and build this multi-agent forecasting architecture end-to-end for production deployment</a>.</p></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!PJav!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a71c64f-c120-4886-857a-f9053b036904_3200x1800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PJav!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a71c64f-c120-4886-857a-f9053b036904_3200x1800.png 424w, https://substackcdn.com/image/fetch/$s_!PJav!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a71c64f-c120-4886-857a-f9053b036904_3200x1800.png 848w, https://substackcdn.com/image/fetch/$s_!PJav!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a71c64f-c120-4886-857a-f9053b036904_3200x1800.png 1272w, https://substackcdn.com/image/fetch/$s_!PJav!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a71c64f-c120-4886-857a-f9053b036904_3200x1800.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!PJav!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a71c64f-c120-4886-857a-f9053b036904_3200x1800.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2a71c64f-c120-4886-857a-f9053b036904_3200x1800.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:357561,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://insights.ml4trading.io/i/209002476?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a71c64f-c120-4886-857a-f9053b036904_3200x1800.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!PJav!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a71c64f-c120-4886-857a-f9053b036904_3200x1800.png 424w, https://substackcdn.com/image/fetch/$s_!PJav!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a71c64f-c120-4886-857a-f9053b036904_3200x1800.png 848w, https://substackcdn.com/image/fetch/$s_!PJav!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a71c64f-c120-4886-857a-f9053b036904_3200x1800.png 1272w, https://substackcdn.com/image/fetch/$s_!PJav!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a71c64f-c120-4886-857a-f9053b036904_3200x1800.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>PAT&#8217;s pipeline: clarify, plan, generate, analyze dependencies, execute, validate, with a Teach loop feeding corrections back into context and harness</em></p><h2>Domain inspection took retrieval from 50% to 90%</h2><p>PAT searches a time series database holding tens of millions of series, some external like the price of oil, some internal like their own 12-month-forward inflation estimate. The search agent starts with what you would expect. Ran:</p><blockquote><p>The search agents use traditional search techniques like RAG, re-ranking, et cetera, but the thing we found to be a huge difference-maker was layering on an element of human-like inspection.</p></blockquote><p>The inspection is what a researcher does without narrating it. You do not accept a series because its name matched. You look at the frequency, you look at the currency, and you check whether the values agree with what you already believe about the world.</p><blockquote><p>So embedding this sort of reasoning into our search agent is something that got us up from roughly 50% accuracy all the way to 90%.</p></blockquote><p>Fifty to ninety, from encoding domain judgment as search logic. Both numbers are Bridgewater&#8217;s own; in the evaluation, the talk does not describe how many queries, what counted as correct, or whether the two measurements share a test set. The direction is the transferable part. The reflex when retrieval underperforms is to reach for a better embedding model or a reranker. Their gain came from writing down what an analyst checks before trusting a series.</p><h2>The dataframe plan is an intermediate representation</h2><p>PAT resolves ambiguity with the user first, then plans. The planning phase names every dataframe the analysis will produce, the schema of each one, and how they connect. Ran calls the cost deliberate, and it buys something specific.</p><p>Because every task declares its output schema up front, code generation for all of them runs in parallel. A visualization task at the end of the plan already knows the shape of data produced by a loading task whose code does not exist yet.</p><blockquote><p>So this lets an analysis with three data frames or a medium-sized one with something like 30 data frames take roughly the same amount of time to generate code in both scenarios.</p></blockquote><p>Their benchmark names its comparison. For the same context and the same plan, PAT generates code about four times faster than Claude Code, and a 20-task plan costs what a three-task plan costs.</p><p>The structure has a published analog. LLMCompiler (<a href="https://arxiv.org/abs/2312.04511">Kim et al., ICML 2024</a>) plans a directed acyclic graph of tasks with their dependencies and dispatches them to a parallel executor, reporting up to 3.7x lower latency and roughly 9% better accuracy than ReAct on its benchmarks. LLMCompiler&#8217;s graph is over function calls. Bridgewater&#8217;s is over dataframe schemas, which makes the plan a domain-specific intermediate representation: code generation lowers it into Python, and the unit being compiled is an entire analysis. What the schema buys is that downstream work can start before upstream implementations exist.</p><p>Weight pushes the framing further. The plan is a natural language Python project, not the to-do list a coding agent keeps, and two agents compiling the same task should produce code that computes the same values.</p><h2>Validation is mandatory, not discretionary</h2><p>Weight&#8217;s background is compiler theory. A compiler lowers user code to something executable, and it treats determinism and correctness as requirements rather than aspirations. A coding agent lowers a plan to Python. He argues for building the second the way the industry already knows how to build the first.</p><p>Concretely: after generation, static analysis builds the dependency graph, and validation agents run in parallel across its layers. A five-task plan collapses to three layers, a twenty-task plan to four or five. The orchestration is ordinary Python.</p><blockquote><p>The main point I want you to take away from this part of the slides is that we enforce correctness in the architecture. Again, no agentic orchestration. This is regular Python code, so the guardrails are really hard, and the agents cannot forget to validate. They are forced to validate.</p></blockquote><p>Their phrasing is worth reading narrowly, because the narrow version is the useful one. Ordinary Python control flow guarantees that every generated task passes through the prescribed validation stages, which removes the failure mode of an agent deciding this particular output does not need checking. It guarantees nothing about whether the validators test the right properties, whether the expected values are right, or whether a task and its validator share a common-mode error. The architecture makes validation happen; whether the validation is sufficient is a question for the test suite.</p><p>There is evidence behind putting the check outside the agent&#8217;s discretion. <a href="https://arxiv.org/abs/2310.01798">Huang et al. (ICLR 2024)</a> tested intrinsic self-correction, where a model revises its own answer using nothing but its own judgment, and found that reasoning performance fails to improve and, in their experiments, frequently degrades. They frame that setting as the one that matters in practice, since high-quality external feedback is often unavailable. PAT does inspect its own output, which Ran compares to a junior analyst double-checking work before handing it over, and that inspection at least has computed values and rendered charts to work against. The paper&#8217;s finding applies to the case the architecture removes: judgment as the only check.</p><p>The result:</p><blockquote><p>The result is that when we run our test suite on any plan, 95% of the time, the code that comes out is exactly the same for two different agents. So it&#8217;s essentially a deterministic coding agent.</p></blockquote><p>&#8220;Exactly the same&#8221; is doing unexamined work here. Identical source, identical computed values, and semantically equivalent code are three different claims, and the talk names neither which one it measured nor how large the suite is. Read as high reproducibility on their internal suite, it still buys something. Evaluation survives nondeterminism; it just costs more runs: when two runs of the same plan can disagree, attributing a change to your prompt means averaging over enough runs to separate the effect from generation variance. Their phrase for the alternative is &#8220;vibes-based or LLM-as-judge evals.&#8221;</p><p>That aside is fairer to judges than it reads. Zheng et al. (2023), the work that popularized the method, report agreement with human preferences above 80% and document in the same paper that judges exhibit position bias, verbosity bias, and self-enhancement bias, the last being a model&#8217;s preference for its own output. Where a property can be checked by an executable test, the test is the more direct instrument. Open-ended qualities still need a judge, with that drift priced in.</p><h2>Incremental execution on a runtime they own</h2><p>PAT does not invoke its own generated code through a terminal. Bridgewater runs it for the model, injecting caching annotations by static analysis so intermediates are never recomputed. Their second benchmark takes the last chart in a plan and changes its name. Claude Code reruns the lot; PAT re-executes essentially instantly. Small edits to a finished analysis stop carrying the cost of a full iteration, so an investor can keep adjusting one while still thinking about it.</p><p>This is available to Bridgewater because they own the execution environment. An agent shelling out to a terminal cannot inject caching into a runtime it does not control, which is the same point as treating the harness as context plus tools.</p><p>The transferable idea is incremental execution over an explicit dependency graph, and it arrives with the problem every build system has. A renamed chart is the easy case. The graph tells you what to recompute only if the cache key captures code changes, data versions, parameters, and the relevant environment; get invalidation wrong and stale intermediates survive an edit that should have killed them.</p><h2>Observed failures become regression benchmarks</h2><p>A user who thinks PAT should have done better presses a Teach button, and an agent reads the conversation for behavioral mistakes, context gaps, or steering that could have been anticipated. Then, in order: it writes a benchmark <strong>expected to fail</strong>, confirming the bad behavior reproduces. It edits the context repositories or the harness until that benchmark passes. It verifies the rest of the suite still passes, so the fix cannot silently break an earlier one. It opens a pull request, which arrives in Slack for a human.</p><p>This is test-driven development pointed at agent behavior. Writing the failing test first is what ties the change to the behavior a user actually reported. Who defines the expected behavior decides whether the loop is worth anything, because a conversation can reveal a user&#8217;s preference as readily as an objective error. The human holds that step twice: the user can revise the proposed lesson before it becomes a benchmark, and a reviewer decides whether the pull request changes PAT for everyone. Agents also mine completed conversations for the same material without being asked, and a correction reaches every investor at the firm rather than only the one who hit the problem.</p><h2>One PAT per investor, differing by context and tools</h2><p>Different investors at Bridgewater see different things. Someone with access to firm positions needs a PAT that knows them; an analyst without that access needs a PAT that cannot leak them. Ran describes the resolution in one line:</p><blockquote><p>Practically speaking, this uniqueness is just a function of what context and what tools each person&#8217;s PAT has.</p></blockquote><p>Every investor runs their own PAT, and the difference between any two is which context is loaded and which tools are exposed. That is a clean account of personalization, and it is not a security boundary. The data and tool layers still have to enforce each investor&#8217;s permissions, because a context-assembly rule that is too broad, or a tool that reaches further than intended, exposes data whether or not the model was told to respect the limit.</p><h2>What the team says it learned</h2><p>Weight leaves the audience with three things: specialize agents instead of building generic, powerful ones; benchmark narrow workflows heavily and hill climb them; and treat agentic coding as a compiler problem. The first comes with a warning.</p><blockquote><p>We don&#8217;t really believe in generic, powerful agents. They make really cool demos. I&#8217;m sure many of us have given them. But it&#8217;s really hard to make that a daily workflow that you can depend on.</p></blockquote><h2>What does not carry over</h2><p>Bridgewater has been writing down the causal logic behind every trade since a 1980 bond system on a yellow legal pad, and codifying it into machine-readable form ever since. McManus is direct about the advantage:</p><blockquote><p>We didn&#8217;t have to go back and write down everything for agents. It was already there for us to draw upon.</p></blockquote><p>Fifty years of codified investment logic, tens of millions of modeled series, and millions of documents arriving at thousands a day. Few teams can reproduce that, and the talk says plainly that it is the foundation the rest sits on. The second advantage is how the work is staffed. McManus describes multi-archetype teams with investors, technologists and scientists sitting side by side: &#8220;Investors bring the context and the domain-specific expertise. Technologists bring the architectural capability. And scientists bring the rigor.&#8221;</p><p>Five things carry over without a hedge fund&#8217;s archive: encoding domain inspection into retrieval, planning in enough detail that generation parallelizes, enforcing validation structurally so it cannot be skipped, converting observed mistakes into failing benchmarks, and treating the harness as context plus tools. Each still needs schemas, metadata, and access rules of your own, which is real work. None of them needs fifty years of it.</p><h2>The unanswered point-in-time test</h2><p>The highest-rated comment on the talk proposes a test: reconstruct a past thesis &#8220;using only information available on that date,&#8221; which would &#8220;separate fluent retrieval from genuine research discipline.&#8221; That is point-in-time correctness, and it decides whether a research system is measuring anything at all. Nothing in the talk says how PAT handles it.</p><p>The same firm&#8217;s AIA Labs has published on exactly that problem for a different system. The <a href="https://arxiv.org/abs/2511.07678">AIA Forecaster technical report</a> treats foreknowledge bias, information reaching the model from past its intended cutoff, as a first-class evaluation target. They built an LLM judge that flags search results implying knowledge beyond the cutoff, hand-audited 502 sampled traces to calibrate it, and estimate that about 1.65% of search results carry some leakage. Bounding the worst case moves their headline Brier score from 0.1159 to 0.1166. They also built MarketNightly, a live benchmark drawing only on active prediction markets, where foreknowledge is impossible by construction rather than merely detected.</p><p>The forecasting results are worth stating precisely, because the direction changes with the benchmark. On ForecastBench, the AIA Forecaster is statistically indistinguishable from expert superforecasters, scoring 0.1076 against their 0.1110 on one variant and 0.1099 against 0.1152 on the other, where lower is better. On MarketLiquid, a harder benchmark sourced from liquid prediction markets, it trails the market consensus, 0.1258 against 0.1106; a regression ensemble of the two reaches 0.106 and beats both. Matching superforecasters on one benchmark and losing to a liquid market on a harder one both appear in the same paper. That is the standard of reporting to want before believing an agent result.</p><div><hr></div><p><em>On Saturday, August 1, I teach this architecture by building it: a forecasting agent end-to-end, working from my own implementation of the AIA Forecaster above. Prompt, context, harness, loop. Typed tool contracts, agent state and replay, point-in-time research agents running in parallel, a supervisor that reconciles their disagreement, and evaluation with proper scoring. 10:00 am to 3:30 pm ET, live. <a href="https://maven.com/stefan-jansen/agent-engineering">Details and registration</a>.</em></p>]]></content:encoded></item><item><title><![CDATA[The Third Edition Publishes Tomorrow]]></title><description><![CDATA[What is new since 2020: the research process front and center, nine cross-asset case studies, six open libraries, 459 notebooks, 112 primers, and 61 agent skills.]]></description><link>https://insights.ml4trading.io/p/the-third-edition-publishes-tomorrow</link><guid isPermaLink="false">https://insights.ml4trading.io/p/the-third-edition-publishes-tomorrow</guid><dc:creator><![CDATA[Stefan Jansen]]></dc:creator><pubDate>Thu, 23 Jul 2026 15:06:31 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/b5f95a31-18b4-4161-a0dd-84de5600450c_2400x1260.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The third edition of <em>Machine Learning for Trading</em> will be available tomorrow. Six years in the making, it is a rebuild from th ground up: one research-to-production workflow, applied across nine markets, with an open ecosystem of libraries, notebooks, primers, and agent skills that provide an all-around learning experience and implementation support. </p><p><a href="https://www.linkedin.com/in/searchguy/">Antonio Gulli</a>, Senior Engineering Director in Google&#8217;s Office of the CTO, and author of the excellent book <a href="https://link.springer.com/book/10.1007/978-3-032-01402-3was">Agentic Design Patterns</a> (among many others) wrote the foreword: &#8220;I definitely recommend this book if you want to understand finance in the modern AI and agentic world. It&#8217;s a definitive guide.&#8221;</p><p><strong>I am walking through the new edition in a 30-minute session next Thursday, July 30 at 11:00 a.m. ET</strong>: how the <a href="https://ml4trading.io/chapters/">27 chapters</a> map to the research workflow, how the <a href="https://ml4trading.io/case-studies/">nine case studies</a> and the companion code fit together, and which route through the material fits which goal. <a href="https://maven.com/p/c6e0e7/navigate-ml-for-trading-3rd-edition?utm_source=substack&amp;utm_medium=newsletter&amp;utm_campaign=ml4t_3e_launch&amp;utm_content=issue_019">Register here</a>.</p><p>Here is what is new.</p><h2>The research process, front and center</h2><p>The second edition had a workflow. The third puts it front and center.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Xq07!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d5a634b-1404-4fc4-93a5-9420bd28e8d2_1024x459.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Xq07!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d5a634b-1404-4fc4-93a5-9420bd28e8d2_1024x459.png 424w, https://substackcdn.com/image/fetch/$s_!Xq07!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d5a634b-1404-4fc4-93a5-9420bd28e8d2_1024x459.png 848w, https://substackcdn.com/image/fetch/$s_!Xq07!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d5a634b-1404-4fc4-93a5-9420bd28e8d2_1024x459.png 1272w, https://substackcdn.com/image/fetch/$s_!Xq07!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d5a634b-1404-4fc4-93a5-9420bd28e8d2_1024x459.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Xq07!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d5a634b-1404-4fc4-93a5-9420bd28e8d2_1024x459.png" width="1024" height="459" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0d5a634b-1404-4fc4-93a5-9420bd28e8d2_1024x459.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:459,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:341882,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://insights.ml4trading.io/i/208210634?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d5a634b-1404-4fc4-93a5-9420bd28e8d2_1024x459.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Xq07!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d5a634b-1404-4fc4-93a5-9420bd28e8d2_1024x459.png 424w, https://substackcdn.com/image/fetch/$s_!Xq07!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d5a634b-1404-4fc4-93a5-9420bd28e8d2_1024x459.png 848w, https://substackcdn.com/image/fetch/$s_!Xq07!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d5a634b-1404-4fc4-93a5-9420bd28e8d2_1024x459.png 1272w, https://substackcdn.com/image/fetch/$s_!Xq07!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d5a634b-1404-4fc4-93a5-9420bd28e8d2_1024x459.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>The ML4T research workflow: data acquisition, feature engineering, model training and selection, strategy simulation, portfolio construction, cost and risk analysis, and live deployment, with an iterate-and-redeploy loop back to data.</em></p><p>The stages before modeling now get real treatment: how to turn a trading idea into a specification with an economic hypothesis, a universe, a horizon, and constraints; how to define the learning task, because the label choice determines what a model can learn; how to build financial features, model-based features, and text features without leaking the answer.</p><p>The stages after modeling are separated into four dedicated chapters. The second edition covered backtesting as historical simulation. The third splits the decisions that produce a simulation worth running into <a href="https://ml4trading.io/chapters/">strategy simulation</a>, portfolio construction, transaction costs, and risk management, then adds a fifth chapter that analyzes the nine case studies side by side to show how different design choices behave.</p><h2>Nine cross-asset case studies</h2><p>Each <a href="https://ml4trading.io/case-studies/">case study</a> carries a research question from raw data through labels, features, models, backtests, costs, and risk to a deployment assessment. They are complete research projects, organized as pipelines instead of isolated demonstrations of one method.</p><p>US firm characteristics, a US equities panel, S&amp;P 500 equities plus options analytics, CME futures, ETFs, crypto perpetuals, S&amp;P 500 options, FX pairs, and NASDAQ-100 intraday microstructure. The studies range from 15-minute intraday data to monthly equity panels.</p><p>All nine follow the same sequence of research phases, while the model families, features, and horizons vary where the market requires it. That shared phase order is what makes it possible to see where market structure, data availability, and trading costs actually differ across asset classes.</p><h2>The new chapters</h2><p>Everything below is either new to this edition or rebuilt from the ground up. Each links to its <a href="https://ml4trading.io/chapters/">chapter guide</a>.</p><ul><li><p><strong><a href="https://ml4trading.io/chapters/">5. Synthetic Financial Data</a></strong> for the situation where you do not have enough history to test what you want to test.</p></li><li><p><strong><a href="https://ml4trading.io/chapters/">6. Strategy Research Framework</a></strong>, turning a trading idea into a testable specification.</p></li><li><p><strong><a href="https://ml4trading.io/chapters/">9. Model-Based Feature Extraction</a></strong>, features that are themselves model output, with the leakage discipline that requires.</p></li><li><p><strong><a href="https://ml4trading.io/chapters/">13. Deep Learning for Time Series</a></strong>, greatly expanded to the architectures that now matter.</p></li><li><p><strong><a href="https://ml4trading.io/chapters/">15. Causal Machine Learning</a></strong>, in this book for the first time. Most of what a researcher wants to know about a strategy is a causal question, and this chapter treats it as one.</p></li><li><p><strong><a href="https://ml4trading.io/chapters/">16-19. Strategy Simulation, Portfolio Construction, Transaction Costs, Risk Management</a></strong>, four chapters where the second edition had one on backtesting.</p></li><li><p><strong><a href="https://ml4trading.io/chapters/">21. Reinforcement Learning for Execution and Hedging</a></strong>. The second edition trained a deep Q-learning agent to trade the stock market. The third shifts the emphasis to optimal execution, market making, and deep hedging.</p></li><li><p><strong><a href="https://ml4trading.io/chapters/">22. RAG for Financial Research</a></strong>, retrieval over filings, research, and news.</p></li><li><p><strong><a href="https://ml4trading.io/chapters/">23. Knowledge Graphs</a></strong>, for the questions where relational structure earns its cost.</p></li><li><p><strong><a href="https://ml4trading.io/chapters/">24. Autonomous Agents</a></strong>, for both forecasting and research.</p></li><li><p><strong><a href="https://ml4trading.io/chapters/">25. Live Trading Systems</a></strong> and <strong><a href="https://ml4trading.io/chapters/">26. MLOps and Governance</a></strong>, carrying the workflow into production, monitoring, and the two sources of live failure.</p></li></ul><h2>20,000 stars</h2><p>The <a href="https://github.com/stefan-jansen/machine-learning-for-trading">companion repository</a> passed 20,000 stars this month, with more than 5,400 forks. It went through GitHub Trending in June alongside <code>karpathy/nn-zero-to-hero</code> and <code>microsoft/ai-agents-for-beginners</code>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_nHg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd12ff096-aead-479c-b030-7de518f31fc1_1920x1080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_nHg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd12ff096-aead-479c-b030-7de518f31fc1_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!_nHg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd12ff096-aead-479c-b030-7de518f31fc1_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!_nHg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd12ff096-aead-479c-b030-7de518f31fc1_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!_nHg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd12ff096-aead-479c-b030-7de518f31fc1_1920x1080.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!_nHg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd12ff096-aead-479c-b030-7de518f31fc1_1920x1080.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d12ff096-aead-479c-b030-7de518f31fc1_1920x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:80414,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://insights.ml4trading.io/i/208210634?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd12ff096-aead-479c-b030-7de518f31fc1_1920x1080.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!_nHg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd12ff096-aead-479c-b030-7de518f31fc1_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!_nHg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd12ff096-aead-479c-b030-7de518f31fc1_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!_nHg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd12ff096-aead-479c-b030-7de518f31fc1_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!_nHg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd12ff096-aead-479c-b030-7de518f31fc1_1920x1080.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>That repository is where the book actually lives. Everything below is in it.</p><h2>Six open Python libraries</h2><p>The workflow as installable code, one package per stage, each <a href="https://ml4trading.io/libraries/">documented</a> and usable on its own:</p><ul><li><p><a href="https://ml4trading.io/docs/data/">ml4t-data</a> (<a href="https://github.com/ml4t/data">repo</a>), unified market-data acquisition from 19+ providers behind one interface</p></li><li><p><a href="https://ml4trading.io/docs/engineer/">ml4t-engineer</a> (<a href="https://github.com/ml4t/engineer">repo</a>), features, labels, alternative bars, and leakage-safe dataset preparation</p></li><li><p><a href="https://ml4trading.io/docs/models/">ml4t-models</a> (<a href="https://github.com/ml4t/models">repo</a>), finance-native latent factors, stochastic discount factors, direct prediction, and portfolio learning</p></li><li><p><a href="https://ml4trading.io/docs/diagnostic/">ml4t-diagnostic</a> (<a href="https://github.com/ml4t/diagnostic">repo</a>), feature validation, strategy diagnostics, and the Deflated Sharpe Ratio</p></li><li><p><a href="https://ml4trading.io/docs/backtest/">ml4t-backtest</a> (<a href="https://github.com/ml4t/backtest">repo</a>), event-driven backtesting with realistic execution</p></li><li><p><a href="https://ml4trading.io/docs/live/">ml4t-live</a> (<a href="https://github.com/ml4t/live">repo</a>), production trading with broker integrations</p></li></ul><p>What makes them finance-native is specific: point-in-time data contracts, financial labels, purged and embargoed validation, transaction-cost models, and broker parity.</p><h2>459 notebooks</h2><p>Every chapter and every case study is executable, and all of it goes live today in the <a href="https://github.com/stefan-jansen/machine-learning-for-trading">companion repository</a>.</p><p>The data stack has moved from pandas to Polars, which cuts memory use and execution time in the larger research pipelines.</p><h2>112 primers and 61 agent skills</h2><p>The <a href="https://ml4trading.io/primer/">primers</a> hold the prerequisites and specialized extensions that would otherwise interrupt the chapters, so the book can assume a concept and link to its explanation.</p><p>The <a href="https://ml4trading.io/skills/">agent skills</a> encode repeatable research tasks together with their checks, covering lookahead bias, data leakage, walk-forward validation with purging and embargo, cost models, position sizing, and production workflows. They are for readers running a coding agent inside their research loop.</p><h2>Courses</h2><p><a href="https://ml4trading.io/courses/">Live cohorts and workshops</a> that apply the process to your own research with feedback, for readers who want more than a description.</p><h2>Where to start</h2><p>Choosing a market: open the <a href="https://ml4trading.io/case-studies/">case study</a> closest to what you trade and follow it through the workflow chapters.</p><p>Building infrastructure: start with <a href="https://ml4trading.io/docs/data/">ml4t-data</a> and <a href="https://ml4trading.io/docs/backtest/">ml4t-backtest</a>. Both are usable without adopting the rest of the stack.</p><p>Here for what changed since 2020: causal machine learning, the four strategy-design chapters, then reinforcement learning through live trading.</p><p>Or come to the <a href="https://maven.com/p/c6e0e7/navigate-ml-for-trading-3rd-edition?utm_source=substack&amp;utm_medium=newsletter&amp;utm_campaign=ml4t_3e_launch&amp;utm_content=issue_019_footer">free reader&#8217;s guide on July 30</a>, and I will walk you through it.</p><p>The book is available from <a href="https://amzn.to/44FVkGq">Amazon</a> and <a href="https://www.packtpub.com/en-us/product/machine-learning-for-trading-9781803246970">Packt</a>. The code is on <a href="https://github.com/stefan-jansen/machine-learning-for-trading">GitHub</a>, and everything else is at <a href="https://ml4trading.io/">ml4trading.io</a>.</p><h2>The full chapter map</h2><p>Every chapter has a <a href="https://ml4trading.io/chapters/">guide on the site</a>.</p><ol><li><p>The Process Is Your Edge</p></li><li><p>The Financial Data Universe</p></li><li><p>Market Microstructure</p></li><li><p>Fundamental and Alternative Data</p></li><li><p>Synthetic Financial Data</p></li><li><p>Strategy Research Framework</p></li><li><p>Defining the Learning Task</p></li><li><p>Financial Feature Engineering</p></li><li><p>Model-Based Feature Extraction</p></li><li><p>Text Feature Engineering</p></li><li><p>The ML Pipeline</p></li><li><p>Gradient Boosting and Advanced Tabular Models</p></li><li><p>Deep Learning for Time Series</p></li><li><p>Latent Factor Models</p></li><li><p>Causal Machine Learning</p></li><li><p>Strategy Simulation</p></li><li><p>Portfolio Construction</p></li><li><p>Transaction Costs</p></li><li><p>Risk Management</p></li><li><p>Strategy Synthesis</p></li><li><p>Reinforcement Learning for Execution and Hedging</p></li><li><p>RAG for Financial Research</p></li><li><p>Knowledge Graphs</p></li><li><p>Autonomous Agents</p></li><li><p>Live Trading Systems</p></li><li><p>MLOps and Governance</p></li><li><p>The Systematic Edge</p></li></ol><p>My thanks to Antonio Gulli for the generous foreword, to the editors, reviewers, and technical contributors, and to the readers of the second edition, whose questions, issues, and pull requests shaped what this one became.</p>]]></content:encoded></item><item><title><![CDATA[The Coding-Agent Toolkit: A Workflow Loop You Can Install]]></title><description><![CDATA[Seven host-neutral steps to improve agent productivity, now public, that run the same on Claude Code and OpenAI Codex.]]></description><link>https://insights.ml4trading.io/p/the-coding-agent-toolkit-a-workflow</link><guid isPermaLink="false">https://insights.ml4trading.io/p/the-coding-agent-toolkit-a-workflow</guid><dc:creator><![CDATA[Stefan Jansen]]></dc:creator><pubDate>Tue, 07 Jul 2026 17:57:24 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/d78b4951-e2e5-4feb-85da-b6440587cce7_2400x1260.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The <a href="https://insights.ml4trading.io/p/a-coding-agent-reading-list-behind">previous issue</a> was a reading list on coding agents. It separated three loops that run around one: </p><ul><li><p>the <strong>agent loop</strong> that writes or edits code, </p></li><li><p>the <strong>harness loop</strong> that decides whether the work is acceptable, and </p></li><li><p>the <strong>workflow loop</strong> that decides what work should exist, who reviews it, and what state survives into the next run. </p></li></ul><p>The argument was that the workflow loop is where the engineer stays. The issue closed on a design rule &#8212; decide what the agent may change, define how the harness checks it, preserve the evidence needed for review, and keep the research claim outside the automation boundary &#8212; and then stopped, because a reading list describes a loop without handing you one.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!sr_A!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb56db89a-9cb5-468f-ae24-e3a1d48979a8_3000x1875.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!sr_A!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb56db89a-9cb5-468f-ae24-e3a1d48979a8_3000x1875.png 424w, https://substackcdn.com/image/fetch/$s_!sr_A!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb56db89a-9cb5-468f-ae24-e3a1d48979a8_3000x1875.png 848w, https://substackcdn.com/image/fetch/$s_!sr_A!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb56db89a-9cb5-468f-ae24-e3a1d48979a8_3000x1875.png 1272w, https://substackcdn.com/image/fetch/$s_!sr_A!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb56db89a-9cb5-468f-ae24-e3a1d48979a8_3000x1875.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!sr_A!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb56db89a-9cb5-468f-ae24-e3a1d48979a8_3000x1875.png" width="1456" height="910" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b56db89a-9cb5-468f-ae24-e3a1d48979a8_3000x1875.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:910,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:110304,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://insights.ml4trading.io/i/205851940?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb56db89a-9cb5-468f-ae24-e3a1d48979a8_3000x1875.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!sr_A!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb56db89a-9cb5-468f-ae24-e3a1d48979a8_3000x1875.png 424w, https://substackcdn.com/image/fetch/$s_!sr_A!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb56db89a-9cb5-468f-ae24-e3a1d48979a8_3000x1875.png 848w, https://substackcdn.com/image/fetch/$s_!sr_A!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb56db89a-9cb5-468f-ae24-e3a1d48979a8_3000x1875.png 1272w, https://substackcdn.com/image/fetch/$s_!sr_A!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb56db89a-9cb5-468f-ae24-e3a1d48979a8_3000x1875.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>The three loops from the last issue. The agent loop writes code; the harness loop checks whether the work is acceptable; the workflow loop decides whether the work should exist, who reviews it, and how state persists. This release is one implementation of that outer loop.</em></p><p><code>coding-agent-toolkit</code> <a href="https://github.com/stefan-jansen/coding-agent-toolkit">is now public</a>: seven host-neutral steps that take a piece of work from a rough idea to a merged pull request, on both Claude Code and OpenAI Codex. It is the specific workflow loop I run daily, released now because the shape has stopped moving. The agent does the work; the toolkit keeps the state.</p><p>A concrete case for what &#8220;keeps the state&#8221; buys you. An agent starts a data-loader fix, patches the imports, and gets three tests green before it runs out of context. The next morning, a fresh session &#8212; maybe on the other host &#8212; picks up the branch. With nothing durable on disk, it re-reads the repo, guesses at what was in flight, and quietly widens a loader fix into a refactor of the ingestion layer. With a spec, a plan, an open issue, and a handoff snapshot to read first, it resumes the same scoped task: finish the loader fix, keep the diff reviewable, and stop. The workflow loop is what makes the second outcome the default.</p><h2>What The Seven Steps Do</h2><p>Five steps carry a piece of work forward &#8212; <code>align</code>, <code>plan</code>, <code>plan-issues</code>, <code>next-issue</code>, <code>ship</code> &#8212; and two, <code>handoff</code> and <code>continue</code>, carry state across the gaps between sessions. Each writes one file the next step reads, so state lives on disk rather than in a conversation, and each exists to head off a specific way delegated work goes wrong.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!C779!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e950934-111b-4226-959d-a7b1871d24f3_3200x1520.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!C779!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e950934-111b-4226-959d-a7b1871d24f3_3200x1520.png 424w, https://substackcdn.com/image/fetch/$s_!C779!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e950934-111b-4226-959d-a7b1871d24f3_3200x1520.png 848w, https://substackcdn.com/image/fetch/$s_!C779!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e950934-111b-4226-959d-a7b1871d24f3_3200x1520.png 1272w, https://substackcdn.com/image/fetch/$s_!C779!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e950934-111b-4226-959d-a7b1871d24f3_3200x1520.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!C779!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e950934-111b-4226-959d-a7b1871d24f3_3200x1520.png" width="1456" height="692" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6e950934-111b-4226-959d-a7b1871d24f3_3200x1520.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:692,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:192752,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://insights.ml4trading.io/i/205851940?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e950934-111b-4226-959d-a7b1871d24f3_3200x1520.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!C779!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e950934-111b-4226-959d-a7b1871d24f3_3200x1520.png 424w, https://substackcdn.com/image/fetch/$s_!C779!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e950934-111b-4226-959d-a7b1871d24f3_3200x1520.png 848w, https://substackcdn.com/image/fetch/$s_!C779!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e950934-111b-4226-959d-a7b1871d24f3_3200x1520.png 1272w, https://substackcdn.com/image/fetch/$s_!C779!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e950934-111b-4226-959d-a7b1871d24f3_3200x1520.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>The five delivery steps, the file or GitHub object each writes, and the two transition steps that carry state across boundaries. The file on disk is the contract that the next step reads.</em></p><ul><li><p><code>align</code><strong> &#8594; </strong><code>spec.md</code><strong>.</strong> Interrogates a rough request into a verifiable end-state, one question at a time, before any code is written &#8212; so the agent is not optimizing toward an implicit, private definition of done.</p></li><li><p><code>plan</code><strong> &#8594; </strong><code>plan.md</code><strong>.</strong> Breaks the spec into issue-sized chunks with dependencies, so one request does not arrive as a single sprawling change that no one can review.</p></li><li><p><code>plan-issues</code><strong> &#8594; a GitHub milestone and one issue per chunk.</strong> Dry-run by default; <code>--apply</code> writes. The work becomes reviewable units under version control, not lines in a chat transcript.</p></li><li><p><code>next-issue</code><strong> &#8594; a branch, an implementation, tests, and a PR.</strong> Takes the lowest-numbered open issue in the active milestone, so the agent works the next scoped unit instead of whatever is convenient.</p></li><li><p><code>ship</code><strong> &#8594; a squash-merge and a closed milestone.</strong> Runs only after verifying that every issue has a commit with a closing footer, so nothing merges while leaving the work graph half-open.</p></li><li><p><code>handoff</code><strong> / </strong><code>continue</code><strong> &#8594; a durable session transition.</strong> <code>handoff</code> writes a snapshot; <code>continue</code> replays it and flags drift &#8212; so the next session does not trust stale prose, and drift does not stay invisible until it corrupts the next task.</p></li></ul><p>Six of the seven ship as a Claude skill and a mirrored Codex prompt. <code>plan</code> is the exception: it delegates to each host&#8217;s native plan mode and a capture hook, because re-implementing plan mode as a shell command would discard the structured output the host already produces.</p><p><code>Closes #N</code> in a PR body is the signal that bubbles state up: a merged PR closes its issue, and <code>ship</code> closes the milestone once every issue is closed by a commit footer. GitHub is the projection; the file each step writes to disk is the contract the next step &#8212; or the next agent &#8212; reads, rather than re-deriving where things stand.</p><p>The same steps apply to non-code work when the deliverable consists of reviewable files. <code>Closes #N</code> closes an issue about a chapter draft or a research report as cleanly as one about a bug fix.</p><h2>How It Answers The Design Rule</h2><p>The last issue&#8217;s rule had four clauses. The toolkit maps onto three directly; the harness clause it leaves to your existing tests and review.</p><ul><li><p><strong>Decide what the agent may change.</strong> <code>align</code> produces a spec with acceptance criteria before the agent touches a file. The scope is written down and reviewable in advance, so &#8220;the agent wrote something&#8221; and &#8220;the agent did the agreed work&#8221; become separate, checkable claims.</p></li><li><p><strong>Preserve the evidence needed for review.</strong> The chain produces a milestone, issues, branches, and a merged PR &#8212; a trail a human reads, rather than an agent transcript to reconstruct afterward. The diff arrives scoped to one issue, tied to a stated spec, with a closing footer.</p></li><li><p><strong>Keep the research claim outside the automation boundary.</strong> The last issue&#8217;s sharpest example was a data-loader test made to pass by dropping the tickers that had stopped returning history: the suite goes green, and the backtest quietly runs on survivors only. The code is correct; the research claim has changed. A host-neutral workflow layer does not prevent that edit by itself &#8212; domain checks do that: a frozen universe, a survivorship guard, an invariant test.</p></li></ul><p>What the workflow changes is visibility. The edit arrives as a scoped PR against a spec that stated what the loader was for, so a reviewer sees a change to the ticker universe instead of a green checkmark, and the domain checks have somewhere to run. The same reading list noted that many agent failures are workflow failures &#8212; abandoned reviews, duplicate work, task mismatches &#8212; rather than syntax errors, and that this is the layer this works on.</p><p>The toolkit does not make the model write better code, nor does it replace tests, domain invariants, data checks, cost models, or review. It makes the agent work legible enough that those checks &#8212; and a human &#8212; can still own the result.</p><h2>Cross-Host State</h2><p>The same workflow runs on Claude Code and OpenAI Codex because there is no orchestrator between them. The cross-host primitive is a shared durable state under <code>.workspace/</code>, read natively by both.</p><div id="datawrapper-iframe" class="datawrapper-wrap outer" data-attrs="{&quot;url&quot;:&quot;https://datawrapper.dwcdn.net/a7xTr/1/&quot;,&quot;thumbnail_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/958d3cc3-9d96-4a3c-b30b-f8bf22b89a4b_1220x628.png&quot;,&quot;thumbnail_url_full&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ce7077c2-01b1-4bbc-83cf-9678deb0146b_1220x752.png&quot;,&quot;height&quot;:400,&quot;title&quot;:&quot;What lives under .workspace/&quot;,&quot;description&quot;:&quot;Shared, host-neutral state that both Claude Code and Codex read.&quot;,&quot;belowTheFold&quot;:true}" data-component-name="DatawrapperToDOM"><iframe id="iframe-datawrapper" class="datawrapper-iframe" src="https://datawrapper.dwcdn.net/a7xTr/1/" width="730" height="400" frameborder="0" scrolling="no" loading="lazy"></iframe><script type="text/javascript">!function(){"use strict";window.addEventListener("message",(function(e){if(void 0!==e.data["datawrapper-height"]){var t=document.querySelectorAll("iframe");for(var a in e.data["datawrapper-height"])for(var r=0;r<t.length;r++){if(t[r].contentWindow===e.source)t[r].style.height=e.data["datawrapper-height"][a]+"px"}}}))}();</script></div><p>Swapping hosts mid-feature works because the next session &#8212; whichever host it runs on &#8212; picks up where the last one left off by reading what the last one wrote. There is deliberately no &#8220;execute as the other host&#8221; command; the file is the swap.</p><p>Session continuity has one refinement worth calling out. A prose handoff goes stale silently: the next session cannot tell whether what it describes is still true. <code>handoff</code> pairs the summary with a fenced block of read-only commands, each carrying an inline <code># expect: &lt;value&gt;</code>. <code>continue</code> runs each command, compares the output to the expected value, and flags every divergence. Drift is information: a repo one commit ahead is fine; a milestone that has since closed may matter. <code>continue</code> surfaces suggested next steps and does not act on them.</p><p>This release supersedes <code>claude-code-toolkit</code>, the broader, Claude-only predecessor &#8212; a wide collection of patterns and plugins. This one is narrower: seven steps, two hosts, one job. It is a sibling, not a competitor, to code review: if you run <a href="https://github.com/kenn-io/roborev">roborev</a>, open reviews on the current branch surface when a session starts, and stay silent when it is not installed. One reviews code, one drives work, and they compose.</p><h2>Installing It</h2><p><strong>Claude Code.</strong> Copy or symlink <code>skills/</code> into your project&#8217;s <code>.claude/skills/</code>, or install the <code>workflow</code> plugin from the <a href="https://github.com/stefan-jansen/coding-agent-plugins">coding-agent-plugins</a> marketplace, which mirrors the same steps. The marketplace is Claude-side; the toolkit itself is cross-host.</p><p><strong>OpenAI Codex.</strong> Point your prompts directory at <code>codex/prompts/</code>, or copy the files in.</p><p>Then invoke the steps in order on a new piece of work, and <code>handoff</code> / <code>continue</code> at the boundaries of anything long-running. The <code>SKILL.md</code> in each step directory is that step&#8217;s authoritative documentation; there is no separate runtime to install.</p><p>The toolkit is pre-1.0 and MIT-licensed. The step contracts are stable enough for daily use, but their shape may still shift in response to friction encountered in real work. Issues and PRs are welcome. Repository: <a href="https://github.com/stefan-jansen/coding-agent-toolkit">github.com/stefan-jansen/coding-agent-toolkit</a>.</p><h2>Where This Sits In The ML4T Work</h2><p>The near-term value of coding agents for ML4T readers is the bounded, checkable work: environment repair, notebook maintenance, data-loader fixes, test scaffolding, CI triage, reproducible experiment plumbing. The workflow loop is what keeps that work reviewable as you delegate more of it, and what draws the line the last issue insisted on &#8212; between the changes you hand to the loop and the ones that decide whether a result is real.</p><p>Today I am teaching a free Maven Lightning Lesson, <a href="https://maven.com/p/8394ac/getting-stuff-done-with-coding-agents">Getting stuff done with coding agents</a> (4:00 PM UTC), which walks through this chain end-to-end: turning an ambiguous goal into a scoped work unit, keeping state across sessions, and using review gates so a human still owns the result.</p><p>For the hands-on version, I am running a workshop, <a href="https://maven.com/stefan-jansen/loop-engineering">Loop Engineering: Reliable Work From Coding Agents</a>, on July 18 (10 am&#8211;2 pm EDT). It builds what this issue describes, on your own keyboard: turn a vague goal into a verifiable spec, project the plan onto GitHub issues, and write a handoff that survives the session boundary. It also puts you in front of the green-but-wrong failure &#8212; the suite passes while the result is corrupted &#8212; and has you write a verification skill the agent cannot satisfy by quietly dropping the tickers that stopped reporting.</p><p>The same division of labor &#8212; what you hand to the loop, what stays with you because it decides whether the result is real &#8212; runs through the <a href="https://maven.com/stefan-jansen/research-to-production">Machine Learning for Trading: From Research to Production</a> cohort across nine case studies; the current summer cohort is full, with a waitlist for the next.</p>]]></content:encoded></item><item><title><![CDATA[A Coding-Agent Reading List: Behind the Loops]]></title><description><![CDATA[Loop engineering is only the surface. A reading path through the older control problems underneath &#8212; and the line between what a coding agent may change and the experimental decisions that determine whether a result is valid.]]></description><link>https://insights.ml4trading.io/p/a-coding-agent-reading-list-behind</link><guid isPermaLink="false">https://insights.ml4trading.io/p/a-coding-agent-reading-list-behind</guid><dc:creator><![CDATA[Stefan Jansen]]></dc:creator><pubDate>Thu, 02 Jul 2026 13:45:26 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/52e7b314-049a-4002-946d-75f670c095e0_1200x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This is a sourced reading list on coding agents, split into six kinds of source &#8212; practitioner essays, control-theory foundations, LLM-agent primitives, systems and harness papers, field studies, and benchmarks &#8212; so you can match a question to the evidence that can settle it. The through-line: &#8220;loop engineering&#8221; is the visible surface; the problems underneath &#8212; bounded search, partial observability, delegation, verification &#8212; are older and better studied.</p><p>&#8220;Loop engineering&#8221; names a real shift in practice: developers spend less time on single prompts and more time designing the system around the agent &#8212; context, tools, state, branches, tests, permissions, review, and stop rules. That is worth naming.</p><p>But a serious reading list cannot stop with the current discourse. The current labels give new names to problems that control theory, planning, and human-automation research have studied for decades: bounded search, partial observability, shared state, reusable actions, delegation, verification, and supervisory control. The newer work matters because LLMs made these problems operational in software repositories, where the agent can change files and the environment can push back through tests, logs, compilers, benchmarks, diffs, and code review.</p><p>This list separates six kinds of sources:</p><ol><li><p>practitioner pieces that explain why &#8220;loops&#8221; became the current label;</p></li><li><p>older control and agent foundations that give the label depth;</p></li><li><p>LLM-agent primitives that explain the mechanism;</p></li><li><p>coding-agent systems and harness papers;</p></li><li><p>empirical studies of adoption, review, refactoring, context, and test quality;</p></li><li><p>benchmarks and safety work that measure task completion or risk.</p></li></ol><p>That separation matters. A benchmark is not the same as a field study. A product essay is not the same as evidence. A context-file study is not the same as a repository-level benchmark. Mixing them into one bucket makes the field look thinner than it is.</p><p>Match your question to the bucket, and note what that kind of source can and cannot settle:</p><div id="datawrapper-iframe" class="datawrapper-wrap outer" data-attrs="{&quot;url&quot;:&quot;https://datawrapper.dwcdn.net/Fi7uo/1/&quot;,&quot;thumbnail_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9c3b57bc-15d1-4897-964f-c8aefbd812f1_1220x808.png&quot;,&quot;thumbnail_url_full&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bd6b77f0-fa9d-40b8-b7bc-699634ccd1a7_1220x932.png&quot;,&quot;height&quot;:400,&quot;title&quot;:&quot;What each kind of source can and cannot settle&quot;,&quot;description&quot;:&quot;Match your reading to the question you actually have.&quot;,&quot;belowTheFold&quot;:false}" data-component-name="DatawrapperToDOM"><iframe id="iframe-datawrapper" class="datawrapper-iframe" src="https://datawrapper.dwcdn.net/Fi7uo/1/" width="730" height="400" frameborder="0" scrolling="no"></iframe><script type="text/javascript">!function(){"use strict";window.addEventListener("message",(function(e){if(void 0!==e.data["datawrapper-height"]){var t=document.querySelectorAll("iframe");for(var a in e.data["datawrapper-height"])for(var r=0;r<t.length;r++){if(t[r].contentWindow===e.source)t[r].style.height=e.data["datawrapper-height"][a]+"px"}}}))}();</script></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!grXV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc716092b-cd26-4ece-bfb7-96bcc144101e_3000x1687.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!grXV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc716092b-cd26-4ece-bfb7-96bcc144101e_3000x1687.png 424w, https://substackcdn.com/image/fetch/$s_!grXV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc716092b-cd26-4ece-bfb7-96bcc144101e_3000x1687.png 848w, https://substackcdn.com/image/fetch/$s_!grXV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc716092b-cd26-4ece-bfb7-96bcc144101e_3000x1687.png 1272w, https://substackcdn.com/image/fetch/$s_!grXV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc716092b-cd26-4ece-bfb7-96bcc144101e_3000x1687.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!grXV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc716092b-cd26-4ece-bfb7-96bcc144101e_3000x1687.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c716092b-cd26-4ece-bfb7-96bcc144101e_3000x1687.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:103293,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://insights.ml4trading.io/i/204557345?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc716092b-cd26-4ece-bfb7-96bcc144101e_3000x1687.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!grXV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc716092b-cd26-4ece-bfb7-96bcc144101e_3000x1687.png 424w, https://substackcdn.com/image/fetch/$s_!grXV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc716092b-cd26-4ece-bfb7-96bcc144101e_3000x1687.png 848w, https://substackcdn.com/image/fetch/$s_!grXV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc716092b-cd26-4ece-bfb7-96bcc144101e_3000x1687.png 1272w, https://substackcdn.com/image/fetch/$s_!grXV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc716092b-cd26-4ece-bfb7-96bcc144101e_3000x1687.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Prompt quality still matters, but the engineering surface expands as agents gain context, tools, state, permissions, verification, and persistence.</em></p><h2>From Prompting To Loop Engineering: The Current Discourse</h2><p>Read these first to understand the vocabulary. Then move on.</p><ul><li><p><strong><a href="https://addyosmani.com/blog/loop-engineering/">Addy Osmani, &#8220;Loop Engineering&#8221;</a>.</strong> The term&#8217;s current anchor. Osmani frames loop engineering as designing the system that prompts, monitors, and resumes the agent. The useful primitives are automations, worktrees, skills, plugins or connectors, subagents, and external memory. Read it for language, not for empirical proof.</p></li><li><p><strong><a href="https://www.deeplearning.ai/the-batch/issue-359">Andrew Ng on three product-building loops (The Batch #359, June 2026)</a>.</strong> The highest-profile statement of the frame, published as the naming wave crested. Ng separates three loops by timescale and who acts: an agentic coding loop (minutes), a developer-feedback loop (tens of minutes to hours), and an external-feedback loop (days to weeks). That is a different cut than Figure 2 below, which separates loops by what each one validates &#8212; evidence, not contradiction, that &#8220;loops&#8221; already names several things. Ng also traces the phrase&#8217;s spread to Boris Cherny (Claude Code) and Peter Steinberger (OpenClaw).</p></li><li><p><strong><a href="https://lucumr.pocoo.org/2026/6/23/the-coming-loop/">Armin Ronacher, &#8220;The Coming Loop&#8221;</a>.</strong> The skeptical counterpart. Ronacher separates the model&#8217;s tool-result cycle from the external harness that restarts, redirects, or escalates work. Read it for comprehension debt: the risk that code becomes easier for machines to change than for humans to understand.</p></li><li><p><strong><a href="https://simonwillison.net/2025/Sep/30/designing-agentic-loops/">Simon Willison, &#8220;Designing agentic loops&#8221;</a>.</strong> A cleaner earlier statement of the loop idea: agents run tools in a loop to achieve a goal. The value is that it predates the June 2026 naming wave.</p></li><li><p><strong><a href="https://martinfowler.com/articles/harness-engineering.html">Birgitta B&#246;ckeler, &#8220;Harness engineering for coding agent users&#8221;</a>.</strong> Published on martinfowler.com. Note the pieces around the model: guides, sensors, tests, feedback, and the boundaries that make delegated work reviewable.</p></li><li><p><strong><a href="https://ghuntley.com/loop/">Geoffrey Huntley, &#8220;everything is a ralph loop&#8221;</a>.</strong> A reminder that the external while-loop around a coding agent existed before the current name. The practice predates the label.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jOVn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8311203a-1dde-4907-a019-e3bad47f2911_3000x1875.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jOVn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8311203a-1dde-4907-a019-e3bad47f2911_3000x1875.png 424w, https://substackcdn.com/image/fetch/$s_!jOVn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8311203a-1dde-4907-a019-e3bad47f2911_3000x1875.png 848w, https://substackcdn.com/image/fetch/$s_!jOVn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8311203a-1dde-4907-a019-e3bad47f2911_3000x1875.png 1272w, https://substackcdn.com/image/fetch/$s_!jOVn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8311203a-1dde-4907-a019-e3bad47f2911_3000x1875.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!jOVn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8311203a-1dde-4907-a019-e3bad47f2911_3000x1875.png" width="1456" height="910" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8311203a-1dde-4907-a019-e3bad47f2911_3000x1875.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:910,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:110304,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://insights.ml4trading.io/i/204557345?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8311203a-1dde-4907-a019-e3bad47f2911_3000x1875.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!jOVn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8311203a-1dde-4907-a019-e3bad47f2911_3000x1875.png 424w, https://substackcdn.com/image/fetch/$s_!jOVn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8311203a-1dde-4907-a019-e3bad47f2911_3000x1875.png 848w, https://substackcdn.com/image/fetch/$s_!jOVn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8311203a-1dde-4907-a019-e3bad47f2911_3000x1875.png 1272w, https://substackcdn.com/image/fetch/$s_!jOVn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8311203a-1dde-4907-a019-e3bad47f2911_3000x1875.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>The agent loop writes code; the harness loop checks whether the work is acceptable; the workflow loop decides whether the work should exist, who reviews it, and how state persists.</em></p><h2>Older Agent And Control Foundations</h2><p>This is the layer the previous draft underdeveloped. These sources are not ornaments. They are the reason the current vocabulary makes sense.</p><ul><li><p><strong><a href="https://archive.org/details/humanproblemsolv0000newe">Newell and Simon, </a></strong><em><strong><a href="https://archive.org/details/humanproblemsolv0000newe">Human Problem Solving</a></strong></em><strong>.</strong> The starting point for problem solving as search through a structured problem space under bounded computation. Coding agents explore repo states, command outputs, and patch candidates under similar limits.</p></li><li><p><strong><a href="https://ai.stanford.edu/~nilsson/OnlinePubs-Nils/PublishedPapers/astar.pdf">Hart, Nilsson, and Raphael, &#8220;A Formal Basis for the Heuristic Determination of Minimum Cost Paths&#8221;</a>.</strong> The A* paper. It belongs here because loop design is partly about spending search budget intelligently: which branch, which tool call, which retry, which stop condition.</p></li><li><p><strong><a href="https://ai.stanford.edu/~nilsson/OnlinePubs-Nils/PublishedPapers/strips.pdf">Fikes and Nilsson, &#8220;STRIPS&#8221;</a>.</strong> Preconditions, operators, and effects. Modern tool calls look different, but safe agent design still asks what must be true before an action runs and what the action changes.</p></li><li><p><strong><a href="https://projects.laas.fr/planning/">Ghallab, Nau, and Traverso, </a></strong><em><strong><a href="https://projects.laas.fr/planning/">Automated Planning: Theory and Practice</a></strong></em><strong>.</strong> A broad synthesis of planning, decomposition, actions, goals, temporal structure, and uncertainty. It gives a broader frame than &#8220;prompt a model to make a plan.&#8221;</p></li><li><p><strong><a href="https://people.csail.mit.edu/lpk/papers/aij98-pomdp.pdf">Kaelbling, Littman, and Cassandra, &#8220;Planning and Acting in Partially Observable Stochastic Domains&#8221;</a>.</strong> A coding agent never sees the full system. Files, logs, tests, prior runs, and issue text are observations. Context engineering is better belief-state maintenance, not larger prompts.</p></li><li><p><strong><a href="https://stacks.stanford.edu/file/druid%3Ats923xj4709/ts923xj4709.pdf">Erman, Hayes-Roth, Lesser, and Reddy, &#8220;The Hearsay-II Speech-Understanding System&#8221;</a>.</strong> The canonical blackboard architecture. Multiple specialized knowledge sources coordinate through shared state. Modern versions include issue trackers, state files, memory logs, CI summaries, and review artifacts.</p></li><li><p><strong><a href="https://aaai.org/papers/icmas95-042-bdi-agents-from-theory-to-practice/">Rao and Georgeff, &#8220;BDI Agents: From Theory to Practice&#8221;</a>.</strong> The belief-desire-intention model is still useful for separating what an agent knows, what it is trying to achieve, and what course of action it has committed to.</p></li><li><p><strong><a href="https://www-anw.cs.umass.edu/~barto/courses/cs687/Sutton-Precup-Singh-AIJ99.pdf">Sutton, Precup, and Singh, &#8220;Between MDPs and Semi-MDPs&#8221;</a>.</strong> The options framework gives the clean lineage for skills: reusable, temporally extended actions that can be selected like primitives.</p></li><li><p><strong><a href="https://erichorvitz.com/chi99horvitz.pdf">Horvitz, &#8220;Principles of Mixed-Initiative User Interfaces&#8221;</a>.</strong> Good agent systems need rules for initiative: when the system proceeds, asks, pauses, escalates, or hands control back.</p></li><li><p><strong><a href="https://web.mit.edu/16.459/www/parasuraman.pdf">Parasuraman and Riley, &#8220;Humans and Automation: Use, Misuse, Disuse, Abuse&#8221;</a>.</strong> The automation-trust paper to read before giving agents more authority. Coding-agent failures often come from overtrust, under-specification, or weak supervision rather than local syntax errors.</p></li><li><p><strong><a href="https://archive.org/details/teleroboticsauto0000sher">Sheridan, </a></strong><em><strong><a href="https://archive.org/details/teleroboticsauto0000sher">Telerobotics, Automation, and Supervisory Control</a></strong></em><strong>.</strong> A durable treatment of human supervision over semi-autonomous systems. It is directly relevant to agent loops that operate while a human reviews only the artifacts.</p></li></ul><h2>LLM-Agent Primitives</h2><p>This layer is closer to the earlier agent canon, but here the emphasis is on what each source adds to coding-agent loops.</p><ul><li><p><strong><a href="https://arxiv.org/abs/2112.09332">WebGPT</a>.</strong> Browse, gather evidence, cite. It is an early template for language models acting through tools rather than answering from memory.</p></li><li><p><strong><a href="https://arxiv.org/abs/2205.00445">MRKL</a>.</strong> Modular routing across tools and symbolic systems. It foreshadows the connector/plugin layer.</p></li><li><p><strong><a href="https://arxiv.org/abs/2210.03629">ReAct</a>.</strong> The atom of the modern agent loop: reason, act, observe.</p></li><li><p><strong><a href="https://arxiv.org/abs/2302.04761">Toolformer</a>.</strong> Tool use as a learnable behavior, not only an inference-time wrapper.</p></li><li><p><strong><a href="https://arxiv.org/abs/2303.11366">Reflexion</a>.</strong> Actor, evaluator, self-reflection, and memory. Coding agents need the same separation between making a change and judging it.</p></li><li><p><strong><a href="https://arxiv.org/abs/2305.10601">Tree of Thoughts</a>.</strong> Branch, score, and backtrack. Maps onto parallel worktrees, alternate patches, and explicit search over candidate plans.</p></li><li><p><strong><a href="https://arxiv.org/abs/2305.16291">Voyager</a>.</strong> Executable skills that accumulate over time. It is the clearest ancestor for practical skill libraries.</p></li><li><p><strong><a href="https://arxiv.org/abs/2402.01030">CodeAct</a>.</strong> Executable code as the action language. This is central to why coding agents feel different from generic chat agents.</p></li><li><p><strong><a href="https://arxiv.org/abs/2405.15793">SWE-agent</a>.</strong> The agent-computer interface becomes a first-class variable. The environment and harness shape the observed capability.</p></li><li><p><strong><a href="https://arxiv.org/abs/2407.01502">AI Agents That Matter</a>.</strong> Cost, holdout validity, benchmark shortcuts, and complexity discipline. Read this before believing any agent leaderboard.</p></li></ul><h2>Coding-Agent Systems, Harnesses, And Configuration</h2><p>This group is about the engineering layer between the model and the repo.</p><ul><li><p><strong><a href="https://arxiv.org/abs/2310.06770">SWE-bench</a>.</strong> The most widely cited benchmark for repository-level issue resolution. It belongs in this section as the benchmark that shaped coding-agent systems, not as a field study about adoption.</p></li><li><p><strong><a href="https://arxiv.org/abs/2405.15793">SWE-agent</a>.</strong> Also belongs here because it showed that the agent-computer interface changes performance. The same model can behave differently under a different scaffold.</p></li><li><p><strong><a href="https://arxiv.org/abs/2401.07339">CodeAgent</a>.</strong> Early repo-level, tool-integrated code generation. Useful for seeing how tool use entered repository work before the current loop vocabulary.</p></li><li><p><strong><a href="https://arxiv.org/abs/2504.15228">SICA: A Self-Improving Coding Agent</a>.</strong> A coding agent modifies its own codebase and improves from 17 to 53 percent on a random SWE-bench Verified subset. Read it as a harness/self-improvement result, not as proof of open-ended autonomy.</p></li><li><p><strong><a href="https://arxiv.org/abs/2605.18747">Code as Agent Harness</a>.</strong> A synthesis of the idea that code is not only the agent output; it is also part of the harness that structures reasoning, action, and verification.</p></li><li><p><strong><a href="https://arxiv.org/abs/2602.14690">Configuring Agentic AI Coding Tools</a>.</strong> A practical taxonomy of configuration mechanisms across coding tools.</p></li><li><p><strong><a href="https://arxiv.org/abs/2605.08435">A Dataset of Agentic AI Coding Tool Configurations</a>.</strong> Shows what configuration patterns appear in real repositories, rather than only in vendor docs.</p></li><li><p><strong><a href="https://arxiv.org/abs/2511.12884">Agent READMEs</a>.</strong> Descriptive evidence on context files in the wild: what teams put in them, how they vary, and why they behave more like configuration than prose.</p></li><li><p><strong><a href="https://arxiv.org/abs/2602.11988">Evaluating AGENTS.md</a>.</strong> The corrective to context-file enthusiasm. Repository instructions can reduce success and increase cost if they add irrelevant or distracting guidance.</p></li></ul><h2>Empirical Studies Of Use, Review, And Maintenance</h2><p>This section is distinct from benchmarks. These studies look at adoption, pull requests, review, refactoring, context use, and test quality in practice.</p><ul><li><p><strong><a href="https://arxiv.org/abs/2601.18341">Agentic Much?</a>.</strong> A GitHub-scale adoption study. The current arXiv version reports 22.20 to 28.66 percent adoption across 128,018 GitHub projects. It measures traces of use, not net value.</p></li><li><p><strong><a href="https://arxiv.org/abs/2602.09185">AIDev</a>.</strong> A dataset of agent-authored pull requests &#8212; 932,791 PRs across 116,211 repositories, produced by five agents. Keep it separate from companion studies that analyze acceptance or failure.</p></li><li><p><strong><a href="https://arxiv.org/abs/2507.15003">The Rise of AI Teammates in SE 3.0</a>.</strong> Uses an earlier AIDev slice to study agentic PR behavior. Read for the acceptance gap and the difference between speed and accepted contribution.</p></li><li><p><strong><a href="https://arxiv.org/abs/2601.15195">Where Do AI Coding Agents Fail?</a>.</strong> A failure study of agent-authored PRs. It is valuable because many failures are workflow failures: abandoned review, duplicate work, CI/test failures, or task mismatch.</p></li><li><p><strong><a href="https://arxiv.org/abs/2511.04824">Agentic Refactoring</a>.</strong> Refactoring is not one thing. Agents can make local structural changes while leaving deeper design issues intact.</p></li><li><p><strong><a href="https://arxiv.org/abs/2602.00409">Are Coding Agents Generating Over-Mocked Tests?</a>.</strong> Test quality matters because shallow verification is easy to satisfy. Agent commits change tests more often than non-agent commits (23 versus 13 percent) and add mocks more often (36 versus 26 percent).</p></li><li><p><strong><a href="https://arxiv.org/abs/2602.05892">ContextBench</a>.</strong> Process-oriented evidence that finding relevant code and using it correctly are different skills.</p></li><li><p><strong><a href="https://arxiv.org/abs/2602.08316">SWE-ContextBench</a>.</strong> Prior experience can help, but only when retrieved and summarized correctly. This is the right paper to read before building memory-heavy loops.</p></li><li><p><strong><a href="https://arxiv.org/abs/2603.20432">Coding Agents Are Effective Long-Context Processors</a>.</strong> Supports the idea that agents can externalize long-context processing through filesystems and tools. Do not generalize it to all long-horizon maintenance.</p></li></ul><h2>Benchmarks, Stress Tests, And Safety</h2><p>Benchmarks are not field studies. They measure task performance under a protocol. They are useful when the protocol is visible.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wr_3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6879bb89-1cde-4cd4-be2a-2665e5dcf84e_3375x2100.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wr_3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6879bb89-1cde-4cd4-be2a-2665e5dcf84e_3375x2100.png 424w, https://substackcdn.com/image/fetch/$s_!wr_3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6879bb89-1cde-4cd4-be2a-2665e5dcf84e_3375x2100.png 848w, https://substackcdn.com/image/fetch/$s_!wr_3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6879bb89-1cde-4cd4-be2a-2665e5dcf84e_3375x2100.png 1272w, https://substackcdn.com/image/fetch/$s_!wr_3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6879bb89-1cde-4cd4-be2a-2665e5dcf84e_3375x2100.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!wr_3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6879bb89-1cde-4cd4-be2a-2665e5dcf84e_3375x2100.png" width="1456" height="906" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6879bb89-1cde-4cd4-be2a-2665e5dcf84e_3375x2100.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:906,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:163168,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://insights.ml4trading.io/i/204557345?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6879bb89-1cde-4cd4-be2a-2665e5dcf84e_3375x2100.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!wr_3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6879bb89-1cde-4cd4-be2a-2665e5dcf84e_3375x2100.png 424w, https://substackcdn.com/image/fetch/$s_!wr_3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6879bb89-1cde-4cd4-be2a-2665e5dcf84e_3375x2100.png 848w, https://substackcdn.com/image/fetch/$s_!wr_3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6879bb89-1cde-4cd4-be2a-2665e5dcf84e_3375x2100.png 1272w, https://substackcdn.com/image/fetch/$s_!wr_3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6879bb89-1cde-4cd4-be2a-2665e5dcf84e_3375x2100.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Read benchmark scores as protocol results. A benchmark can say what an agent did under a task set, scaffold, tool policy, and evaluation rule. It does not by itself establish production value, review cost, or research validity.</p><ul><li><p><strong><a href="https://arxiv.org/abs/2310.06770">SWE-bench</a>.</strong> Real GitHub issues as repository-level tasks. Essential, but easy to overread once leaderboards saturate or scaffolds diverge.</p></li><li><p><strong><a href="https://arxiv.org/abs/2504.08703">SWE-PolyBench</a>.</strong> Multi-language repository-level evaluation. It helps counter Python-only benchmark bias.</p></li><li><p><strong><a href="https://arxiv.org/abs/2506.22598">RExBench</a>.</strong> Research-extension tasks in real repositories. A useful ceiling check for hard, novel work.</p></li><li><p><strong><a href="https://arxiv.org/abs/2605.17526">SaaSBench</a>.</strong> Long-horizon enterprise SaaS engineering. Its main lesson is integration: failures often happen before agents reach deep business logic.</p></li><li><p><strong><a href="https://arxiv.org/abs/2411.07781">RedCode</a>.</strong> Risky code execution and generation. This belongs in the core path because coding agents operate tools, shells, files, and sometimes networks.</p></li><li><p><strong><a href="https://owasp.org/www-project-top-10-for-large-language-model-applications/">OWASP Top 10 for LLM Applications</a>.</strong> The security frame for prompt injection, supply chain risk, sensitive data, and excessive agency.</p></li></ul><p>When reading a benchmark score, ask: which task set, which date, which model, which scaffold, which tools, which permissions, and which evaluation protocol? A model score without the harness is not a product capability claim.</p><h2>What This Means For ML4T Work</h2><p>For ML4T readers, the near-term value of coding agents is practical: environment repair, notebook maintenance, data-loader fixes, test scaffolding, documentation updates, CI triage, and reproducible experiment plumbing. These tasks are useful because they are bounded and checkable. To make the work more reliable, we published <a href="https://ml4trading.io/skills/">60+ ML4T agent skills</a>.</p><p>The risky step is letting an agent mutate the research claim. In trading and ML, the dangerous errors are often leakage, wrong timestamps, stale data assumptions, broken evaluation windows, accidental survivorship, weak baselines, or transaction-cost assumptions that no longer match the text.</p><p>The failure is rarely a syntax error. A more typical case: an agent makes a failing data-loader test pass by dropping the tickers that stopped returning history. The suite goes green, and the backtest quietly runs on survivors only. The code is correct; the research claim has changed.</p><p>For an ML4T notebook, loader, or backtest change, an agent-generated patch should record:</p><ul><li><p>data source and snapshot date;</p></li><li><p>timestamp convention and decision-time availability;</p></li><li><p>label definition;</p></li><li><p>train/test split or walk-forward window;</p></li><li><p>baseline comparison;</p></li><li><p>transaction-cost assumption where relevant;</p></li><li><p>exact command to reproduce the result;</p></li><li><p>files changed and why;</p></li><li><p>tests added or modified;</p></li><li><p>reviewer note on whether the research claim changed.</p></li></ul><p>Do not delegate changes that redefine the target variable, change the backtest window, select the best run after repeated iteration, add data that would not have been known at decision time, or rewrite the published claim to fit the new output. Those choices belong to the research process, not to the coding loop.</p><p>On Tuesday, July 7, I am teaching a free Maven Lightning Lesson, <a href="https://maven.com/p/8394ac/getting-stuff-done-with-coding-agents">Getting stuff done with coding agents</a>. The lesson is the practical companion to this reading list: how to turn an ambiguous goal into a scoped work unit, keep state across sessions, use review gates, and make agent work legible enough that a human can still own the result.</p><p>The same boundary sits at the center of <em><a href="http://maven.com/stefan-jansen/research-to-production">Machine Learning for Trading: From Research to Production</a></em>, the cohort course I am running this summer: it works nine case studies through that exact division of labor &#8212; what you can hand to the loop, and what stays with you because it decides whether the result is real. Watch the <a href="https://youtu.be/Ksxv9QVZSOo?si=IxUZVO3j1enFEzVJ">video overview</a>.</p><h2>Compressed Reading Path</h2><p>If the full list is too much, start here:</p><ol><li><p>Osmani, Ronacher, Willison, B&#246;ckeler, and Huntley for the current loop and harness debate.</p></li><li><p>Newell/Simon, POMDPs, Hearsay-II, options, mixed initiative, automation misuse, and supervisory control for the older design problems.</p></li><li><p>ReAct, Reflexion, Voyager, CodeAct, SWE-agent, and AI Agents That Matter for the LLM-agent mechanism.</p></li><li><p>Evaluating AGENTS.md, Agentic Much?, AIDev, Where Do AI Coding Agents Fail?, Agentic Refactoring, Over-mocked Tests, and ContextBench for field evidence.</p></li><li><p>SWE-bench, RExBench, SaaSBench, SWE-PolyBench, and RedCode for benchmark and safety constraints.</p></li></ol><p>The practical result is a design rule: decide what the agent may change, define how the harness checks it, preserve the evidence needed for review, and keep the research claim outside the automation boundary.</p>]]></content:encoded></item><item><title><![CDATA[From Research to Production with Nine Case Studies]]></title><description><![CDATA[A hands-on ML4T course built on nine case studies: one research workflow from feasibility through deployment &#8212; equities, options, futures, FX, and crypto.]]></description><link>https://insights.ml4trading.io/p/from-research-to-production-with</link><guid isPermaLink="false">https://insights.ml4trading.io/p/from-research-to-production-with</guid><dc:creator><![CDATA[Stefan Jansen]]></dc:creator><pubDate>Wed, 01 Jul 2026 12:42:07 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/1fe4b3ec-a8b9-4531-9e07-bd9eb9674849_1200x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This summer we&#8217;re opening the first cohort of <em>Machine Learning for Trading: From Research to Production</em> &#8212; a hands-on course built around nine case studies, where you take one trading strategy from a first feasibility check all the way through deployment. See <a href="https://maven.com/stefan-jansen/research-to-production">course page</a> and <a href="https://youtu.be/Ksxv9QVZSOo">overview video</a> for more details.</p><p>Here is the kind of problem that workflow has to handle.</p><p>One of those nine case studies runs the ML4T workflow on thirty CME futures, daily, from 2011 through 2025. The model is a gradient-boosted ranker on a five-day forward return, traded as a long-short book &#8212; long the top-ranked contracts, short the bottom, inverse-volatility weighted across both sides. The label that feeds it is built on a ratio-adjusted continuous price series: back-adjusting the price level at each contract roll keeps the roll gap from registering as a price move, so it never lands in the forward returns the model trains on. Leave the series unadjusted and every roll embeds that artifact. Both decisions matter, and so does the validation around them: the result is measured on a holdout never touched during model selection, and against a long-only equal-weight basket of the same contracts.</p><p>Put together, they hold up. The validation Sharpe &#8212; the inverse-vol book under a 5% trailing-stop overlay &#8212; is 1.36, and on the 2024&#8211;2025 holdout it comes in at 1.11 &#8212; close enough that the profile carries, though the window is short enough that the gap between the two is not statistically resolved. The robust part is the signal itself: a daily information coefficient near 0.03 that clears the 5% significance threshold on both windows (on autocorrelation-robust standard errors, since the five-day labels overlap), and a result that survives the cost model &#8212; a Sharpe near 1.0 net of a tick-implied trading cost of about 10 basis points of notional per leg (modeled, not realized fills), against a breakeven near 30 basis points per leg, a roughly threefold cushion. It sits above the long-only basket too (about 0.6 in validation, 0.8 on the holdout), though a long-short book against a long-only directional basket is a floor rather than a risk-matched comparison. In this market the data construction shapes the result just as much as the model family does: get the roll handling wrong and even the cleanest model trains on a price path you could never have held. The case works because the data, the model, the cost model, and the holdout each carry their weight, and the workflow is built to show which stage carries how much.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!OIqc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e8402ed-5205-4124-8cae-660bb87c9fd4_3017x2104.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OIqc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e8402ed-5205-4124-8cae-660bb87c9fd4_3017x2104.png 424w, https://substackcdn.com/image/fetch/$s_!OIqc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e8402ed-5205-4124-8cae-660bb87c9fd4_3017x2104.png 848w, https://substackcdn.com/image/fetch/$s_!OIqc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e8402ed-5205-4124-8cae-660bb87c9fd4_3017x2104.png 1272w, https://substackcdn.com/image/fetch/$s_!OIqc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e8402ed-5205-4124-8cae-660bb87c9fd4_3017x2104.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!OIqc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e8402ed-5205-4124-8cae-660bb87c9fd4_3017x2104.png" width="1456" height="1015" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4e8402ed-5205-4124-8cae-660bb87c9fd4_3017x2104.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1015,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:437026,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://insights.ml4trading.io/i/204355791?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e8402ed-5205-4124-8cae-660bb87c9fd4_3017x2104.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!OIqc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e8402ed-5205-4124-8cae-660bb87c9fd4_3017x2104.png 424w, https://substackcdn.com/image/fetch/$s_!OIqc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e8402ed-5205-4124-8cae-660bb87c9fd4_3017x2104.png 848w, https://substackcdn.com/image/fetch/$s_!OIqc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e8402ed-5205-4124-8cae-660bb87c9fd4_3017x2104.png 1272w, https://substackcdn.com/image/fetch/$s_!OIqc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e8402ed-5205-4124-8cae-660bb87c9fd4_3017x2104.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p><em>Validation (left) and a holdout the model never saw (right), each against a long-only equal-weight basket of the same thirty contracts. Validation Sharpe 1.36; holdout 1.11 &#8212; the profile carries across the split.</em></p><p>None of those decisions is glamorous on its own: most of a strategy&#8217;s fate is settled in the handoffs between stages, not in the choice of model. We ran this loop nine times, and the new cohort is built so you run it too: you walk away with the workflow and one case you took all the way through yourself.</p><p>That workflow is the same on every case: a feasibility check, labels and features, a ladder of models, backtesting, portfolio construction, cost and risk analysis, an out-of-sample holdout, the deployment path, and the monitoring after. Running it nine times is what makes the handoffs visible: the decision that carries each case moves from one market to the next, so you learn the pattern instead of one example. Every run is logged, and you keep the notebooks, the run registry, and the deployment scaffold.</p><h2>The comparative lab</h2><p>The pipeline is fixed; what it has to handle changes with the market. ETFs anchor the set as a shared reference &#8212; daily frequency, an inspectable universe, a cost model you can reason about, an allocator you can deploy &#8212; and the other eight show how the same workflow adapts when the market does.</p><div id="datawrapper-iframe" class="datawrapper-wrap outer" data-attrs="{&quot;url&quot;:&quot;https://datawrapper.dwcdn.net/07mtd/2/&quot;,&quot;thumbnail_url&quot;:&quot;https://datawrapper.dwcdn.net/07mtd/full.png&quot;,&quot;thumbnail_url_full&quot;:&quot;https://datawrapper.dwcdn.net/07mtd/full.png&quot;,&quot;height&quot;:600,&quot;title&quot;:&quot;&quot;,&quot;description&quot;:&quot;One research workflow across nine markets, and what each case teaches.&quot;,&quot;belowTheFold&quot;:true}" data-component-name="DatawrapperToDOM"><iframe id="iframe-datawrapper" class="datawrapper-iframe" src="https://datawrapper.dwcdn.net/07mtd/2/" width="730" height="600" frameborder="0" scrolling="no" loading="lazy"></iframe><script type="text/javascript">!function(){"use strict";window.addEventListener("message",(function(e){if(void 0!==e.data["datawrapper-height"]){var t=document.querySelectorAll("iframe");for(var a in e.data["datawrapper-height"])for(var r=0;r<t.length;r++){if(t[r].contentWindow===e.source)t[r].style.height=e.data["datawrapper-height"][a]+"px"}}}))}();</script></div><p>The two S&amp;P rows describe different problems on the same underlying: one uses options data as side information to forecast equities; the other trades the options directly &#8212; the same instrument posed as two different trading problems. Each setting shows where an edge comes from, and how much of it survives once costs and capacity are real.</p><h2>What the workflow forces you to confront</h2><p>A working pipeline, stage by stage, in the same numbered sequence on every case &#8212; one notebook per stage, mapped to the chapter that teaches it:</p><ul><li><p><strong>Feasibility</strong> &#8212; confirm the universe and its cost structure can support a strategy before you model anything; the straddle case is a feasibility problem before it is a modeling one.</p></li><li><p><strong>Labels and features</strong> &#8212; forward returns at the horizon you actually trade, walk-forward splits, and features from momentum and carry to model-based ones: walk-forward GARCH, HMM regimes, particle-filtered stochastic volatility.</p></li><li><p><strong>A model ladder</strong> &#8212; linear baselines, Optuna-tuned gradient boosting, neural tabular and sequence models, latent-factor methods, and double machine learning for the causal question.</p></li><li><p><strong>Strategy construction</strong> &#8212; backtest, covariance cleaning with random-matrix methods (following Paleologo&#8217;s treatment), an instrument-appropriate cost model, and risk overlays.</p></li><li><p><strong>Validation</strong> &#8212; an out-of-sample holdout scored with deflated performance measures and multiple-testing corrections.</p></li><li><p><strong>Production</strong> &#8212; a deployment loop, then drift monitoring once it is running.</p></li></ul><p>The work that decides the outcome lives in the handoffs between these stages, and one principle keeps reappearing: use only data you would have known at decision time. In the CME opener it was building the label on a roll-adjusted series, so the model never learns from a continuation no one could have traded. In NASDAQ microstructure it is bar-close timestamps &#8212; whether an order-book feature was observable when the 15-minute bar closed. In the firm-characteristics panel it is reporting lags and restatements, aligning each fundamental field to the date it was actually known. Different markets, same decision, and it separates a tradable result from a notebook artifact &#8212; which you only learn by working the case.</p><h2>The record, and the right to deploy</h2><p>Model work is where people expect the course to get technical. It does, and the discipline that makes it pay off is being able to prove, six weeks later, exactly what you ran.</p><p>Every training run, prediction set, causal estimate, and backtest is written to a run log: a SQLite registry where each entry is content-addressed by a hash of its full configuration, with its artifacts and results recorded against that hash. A hyperparameter sweep becomes an auditable archive you can query rather than a folder of guesses. That is what makes a model comparison honest: the synthesis step reads the registry to recover how many configurations you effectively tried, then scores each candidate against that count &#8212; deflated and probabilistic Sharpe ratios, multiple-testing corrections, the probability of backtest overfitting, and a block-bootstrap comparison against an equal-weight benchmark. (The deflated-Sharpe and overfitting measures are L&#243;pez de Prado&#8217;s.) Your best result is judged against the number of attempts it took to find it, and then it meets an out-of-sample holdout it has never touched.</p><p>When validation and the holdout agree, you have evidence to carry the strategy forward: paper trading, limited deployment, or further monitoring. The firm-characteristics case is the cleanest version of that agreement: a monthly cross-sectional ranker over roughly 2,500 US stocks whose validation Sharpe of 2.75 carries to 1.77 on a holdout the model never saw, with its drawdown profile holding intact alongside the Sharpe &#8212; the cleanest such transfer of the nine. When validation and the holdout disagree instead, the course teaches you to read why &#8212; whether the prediction degraded, the portfolio translation lost it, or the regime changed. Where a causal question is well defined, a double-ML treatment-effect estimate with a refutation test asks whether the relationship survives a different specification &#8212; a separate question from whether the strategy is tradable after costs. That diagnostic ability is what lets you tell the strategies worth more of your time from the ones that are not.</p><h2>Through deployment, and after</h2><p>A research result is not the finish line. The deployment chapters run the strategy as a live loop: a unified framework that shares feature and signal code between research and live paths so they cannot silently diverge, a verification step that checks that parity, an order state machine, broker integrations for paper and live trading, and runtime safety controls. In the cohort, deployment means standing up that loop and its controls; committing capital stays your decision. The monitoring chapters cover what happens once it is running: drift detection on features and predictions, circuit breakers, safe model rollout, and a feature store so the live system reads the same features it was trained on. This is running code &#8212; the ETF, crypto-funding, and FX cases each have a working deployment loop.</p><h2>In the cohort</h2><p>You take one case study &#8212; or your own data, if it fits the scope &#8212; and run the arc end to end: a clean baseline, a hypothesis about its binding constraint, two or three targeted cycles, each change tested against an out-of-sample holdout under the same protocol. Some changes hold up; some do not, and the cohort is built around learning to tell them apart. What you produce is a research package and the verdict it earns &#8212; advance, revise, or retire &#8212; scored against a rubric you see on day one.</p><p>Coding agents work inside that same protocol. The third edition ships an <code>ml4t-skills</code> companion &#8212; 61 skills mapping specific failure modes (leakage, lookahead, purging, cost models, capacity, deployment) to checks an agent runs in your editor, browsable now with a free account at https://www.ml4trading.io/skills/. Agents speed up loaders, tests, and ablations; the skills keep that speed inside the research protocol so the code stays correct as it gets faster.</p><h2>Logistics</h2><p>The first cohort starts Monday, July 6, 2026, and the first live session is Thursday, July 9, at 4 PM UTC. The format is eight weekly 90-minute cohort sessions on Thursdays &#8212; twelve hours of live class &#8212; plus four biweekly 60-minute office-hours sessions, and a final 30-minute one-on-one discussion with me about your project. Every session is recorded and posted within a day, so nothing is lost if you miss a live hour. Between sessions, support runs through a dedicated Discord server, so questions on your case do not have to wait for the next session.</p><p>The book publishes in the coming weeks: chapters one through ten are already public, with the case-study code rolling out after, and cohort members get everything they need from day one. Several cases run on free, open data; the intraday microstructure work uses institutional AlgoSeek data, provided to every cohort member along with the rest of the course material.</p><p>The best fit is a reader who can already build a complete strategy and wants to get better at the research itself. By the end you have a complete case-study research package &#8212; the workflow, the diagnosis and experiments behind your result, your out-of-sample evidence, and the means to repeat all of it on your own data.</p><p>See <a href="https://maven.com/stefan-jansen/research-to-production">course page</a> and <a href="https://youtu.be/Ksxv9QVZSOo">overview video</a> for more details.</p>]]></content:encoded></item><item><title><![CDATA[New Release: From Data to Model-Ready Evidence]]></title><description><![CDATA[The ML4T code release for Chapters 6-10 covers the research framework, labels, feature engineering, model-based features, and text features.]]></description><link>https://insights.ml4trading.io/p/new-release-from-data-to-model-ready</link><guid isPermaLink="false">https://insights.ml4trading.io/p/new-release-from-data-to-model-ready</guid><dc:creator><![CDATA[Stefan Jansen]]></dc:creator><pubDate>Mon, 29 Jun 2026 12:18:05 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/6b6ff878-df7e-4726-a256-ee1187df726c_1200x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This <a href="https://github.com/stefan-jansen/machine-learning-for-trading/tree/main">ML4T code release</a> covers Chapters 6-10 of the third edition. These chapters sit between the data layer and the model chapters.</p><p>The first release covered the data side: market data, microstructure, alternative data, synthetic data, and the <code>data/</code> package. This release adds the next layer: the trading setup, labels, features, diagnostics, validation checks, and point-in-time inputs.</p><p>Here, model-ready evidence means something practical: the target, feature timing, validation split, and search history are explicit enough to inspect before model selection starts. A lot can go wrong before an estimator enters the workflow: the label can use the wrong horizon, the feature can belong to the wrong decision time, the cross-validation split can mismatch the trading cadence, or the result can come from too many uncounted trials.</p><p>Across the five chapters, the release adds 43 notebooks:</p><ul><li><p><a href="https://github.com/stefan-jansen/machine-learning-for-trading/tree/main/06_strategy_definition">Chapter 6: Strategy Research Framework</a> &#8212; 2 notebooks</p></li><li><p><a href="https://github.com/stefan-jansen/machine-learning-for-trading/tree/main/07_defining_the_learning_task">Chapter 7: Defining the Learning Task</a> &#8212; 9 notebooks</p></li><li><p><a href="https://github.com/stefan-jansen/machine-learning-for-trading/tree/main/08_financial_features">Chapter 8: Financial Feature Engineering</a> &#8212; 8 notebooks</p></li><li><p><a href="https://github.com/stefan-jansen/machine-learning-for-trading/tree/main/09_model_based_features">Chapter 9: Model-Based Feature Extraction</a> &#8212; 15 notebooks</p></li><li><p><a href="https://github.com/stefan-jansen/machine-learning-for-trading/tree/main/10_text_feature_engineering">Chapter 10: Text Feature Engineering</a> &#8212; 9 notebooks</p></li></ul><p>The release also updates the <a href="https://github.com/stefan-jansen/machine-learning-for-trading/tree/main/case_studies">case-study directory</a> with shared utilities and each case study&#8217;s <code>config/setup.yaml</code>: universe, costs, walk-forward CV, and labels.</p><p>We will work through the same research-to-production workflow as in the live Machine Learning for Trading: From Research to Production course, which starts Monday, July 6.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7ZS4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8f90e68-72ec-4aa8-abd4-a843e02afd1e_1409x752.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7ZS4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8f90e68-72ec-4aa8-abd4-a843e02afd1e_1409x752.png 424w, https://substackcdn.com/image/fetch/$s_!7ZS4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8f90e68-72ec-4aa8-abd4-a843e02afd1e_1409x752.png 848w, https://substackcdn.com/image/fetch/$s_!7ZS4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8f90e68-72ec-4aa8-abd4-a843e02afd1e_1409x752.png 1272w, https://substackcdn.com/image/fetch/$s_!7ZS4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8f90e68-72ec-4aa8-abd4-a843e02afd1e_1409x752.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7ZS4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8f90e68-72ec-4aa8-abd4-a843e02afd1e_1409x752.png" width="1409" height="752" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e8f90e68-72ec-4aa8-abd4-a843e02afd1e_1409x752.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:752,&quot;width&quot;:1409,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:202185,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://insights.ml4trading.io/i/204103460?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f18ca1a-a721-4d52-b257-b67e87cf2f45_1600x900.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!7ZS4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8f90e68-72ec-4aa8-abd4-a843e02afd1e_1409x752.png 424w, https://substackcdn.com/image/fetch/$s_!7ZS4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8f90e68-72ec-4aa8-abd4-a843e02afd1e_1409x752.png 848w, https://substackcdn.com/image/fetch/$s_!7ZS4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8f90e68-72ec-4aa8-abd4-a843e02afd1e_1409x752.png 1272w, https://substackcdn.com/image/fetch/$s_!7ZS4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8f90e68-72ec-4aa8-abd4-a843e02afd1e_1409x752.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Part II connects the data chapters to the model chapters: research setup, labels, features, validation, and model-ready inputs.</em></p><h2>Where to start</h2><p>If you want the shortest path through the release:</p><ul><li><p>Start with <code>06_strategy_definition/01_cv_foundations</code> for walk-forward validation, purging, embargo, and nested CV.</p></li><li><p>Start with <code>07_defining_the_learning_task/03_label_methods</code> if the prediction target is still unclear.</p></li><li><p>Start with <code>08_financial_features/05_feature_selection</code> if the feature set is too broad.</p></li><li><p>Start with <code>09_model_based_features/11_hmm_regimes</code> if the regime state is part of the signal story.</p></li><li><p>Start with <code>10_text_feature_engineering/09_filing_text_signals</code> if you need point-in-time NLP alignment.</p></li></ul><h2><a href="https://github.com/stefan-jansen/machine-learning-for-trading/tree/main/06_strategy_definition">Chapter 6: Strategy Research Framework</a></h2><p>Chapter 6 defines a trading strategy as an executable decision process, not just a signal or model. It specifies the market, universe, decision schedule, tradability rules, score-to-position mapping, costs, constraints, evaluation metrics, and run logging.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Uwuk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9422c6be-17c4-4346-87ca-03354ced3b22_1600x853.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Uwuk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9422c6be-17c4-4346-87ca-03354ced3b22_1600x853.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Uwuk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9422c6be-17c4-4346-87ca-03354ced3b22_1600x853.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Uwuk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9422c6be-17c4-4346-87ca-03354ced3b22_1600x853.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Uwuk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9422c6be-17c4-4346-87ca-03354ced3b22_1600x853.jpeg 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!Uwuk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9422c6be-17c4-4346-87ca-03354ced3b22_1600x853.jpeg" width="1456" height="776" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9422c6be-17c4-4346-87ca-03354ced3b22_1600x853.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:776,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:242351,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://insights.ml4trading.io/i/204103460?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9422c6be-17c4-4346-87ca-03354ced3b22_1600x853.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Uwuk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9422c6be-17c4-4346-87ca-03354ced3b22_1600x853.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Uwuk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9422c6be-17c4-4346-87ca-03354ced3b22_1600x853.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Uwuk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9422c6be-17c4-4346-87ca-03354ced3b22_1600x853.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Uwuk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9422c6be-17c4-4346-87ca-03354ced3b22_1600x853.jpeg 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Chapter 6 separates the live trading loop from the research loop: one runs the strategy on a fixed cadence, the other improves the pipeline under a fixed setup and evaluation protocol.</em></p><p>The chapter also introduces the nine case studies used throughout the book, enabling strategy research to be compared across asset classes, trading cadences, and market structures.</p><p>Notebook highlights:</p><ul><li><p><code>01_cv_foundations</code> builds walk-forward cross-validation from first principles, including decision-time admissibility, purging, embargo, calendar-aware splits, nested walk-forward validation, and combinatorial purged CV.</p></li><li><p><code>02_case_study_overview</code> summarizes the nine case studies, including datasets, asset classes, constraints, evaluation protocols, and prediction coverage across time.</p></li></ul><h2><a href="https://github.com/stefan-jansen/machine-learning-for-trading/tree/main/07_defining_the_learning_task">Chapter 7: Defining the Learning Task</a></h2><p>Chapter 7 turns raw but validated data into a learning problem. It builds split-aware preprocessing, label engineering, feature-label evaluation, multiple-testing checks, and lightweight causal falsification.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!nUgu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff986a319-b75c-42e4-bc9a-c0110c3b4b8a_1600x896.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nUgu!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff986a319-b75c-42e4-bc9a-c0110c3b4b8a_1600x896.jpeg 424w, https://substackcdn.com/image/fetch/$s_!nUgu!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff986a319-b75c-42e4-bc9a-c0110c3b4b8a_1600x896.jpeg 848w, https://substackcdn.com/image/fetch/$s_!nUgu!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff986a319-b75c-42e4-bc9a-c0110c3b4b8a_1600x896.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!nUgu!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff986a319-b75c-42e4-bc9a-c0110c3b4b8a_1600x896.jpeg 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!nUgu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff986a319-b75c-42e4-bc9a-c0110c3b4b8a_1600x896.jpeg" width="1456" height="815" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f986a319-b75c-42e4-bc9a-c0110c3b4b8a_1600x896.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:815,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:353186,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://insights.ml4trading.io/i/204103460?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff986a319-b75c-42e4-bc9a-c0110c3b4b8a_1600x896.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!nUgu!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff986a319-b75c-42e4-bc9a-c0110c3b4b8a_1600x896.jpeg 424w, https://substackcdn.com/image/fetch/$s_!nUgu!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff986a319-b75c-42e4-bc9a-c0110c3b4b8a_1600x896.jpeg 848w, https://substackcdn.com/image/fetch/$s_!nUgu!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff986a319-b75c-42e4-bc9a-c0110c3b4b8a_1600x896.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!nUgu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff986a319-b75c-42e4-bc9a-c0110c3b4b8a_1600x896.jpeg 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Chapter 7 uses the triple-barrier method to label an event by whichever barrier is hit first: the profit target, the stop-loss, or the maximum holding period.</em></p><p>The useful move is that labels are treated as trading decisions, not just target columns. Horizon, overlap, resolution time, and implied trading intensity all contribute to the target definition.</p><p>Notebook highlights:</p><ul><li><p><code>01_data_quality_diagnostics</code> checks the ML4T datasets for index integrity, missing values, duplicates, outliers, and temporal gaps.</p></li><li><p><code>02_preprocessing_pipeline</code> implements split-aware preprocessing, including a <code>SplitAwarePreprocessor</code> method that fits scalers and encoders on training data only.</p></li><li><p><code>03_label_methods</code> implements fixed-horizon, percentile, triple-barrier, ATR-based, trend-scanning, meta-label, and sequential-bootstrap labels on ETF data.</p></li><li><p><code>05_signal_evaluation</code> and <code>06_ic_inference</code> use Information Coefficients, quantile returns, signal decay, HAC standard errors, and block bootstrap to evaluate single-factor signals.</p></li><li><p><code>07_multiple_testing</code> covers factor-zoo selection bias, Benjamini-Hochberg FDR control, complexity-aware corrections, the Deflated Sharpe Ratio, and the Probability of Backtest Overfitting.</p></li><li><p><code>08_causal_sanity_checks</code> uses timing placebos, shared-driver checks, and VIX regime heterogeneity tests to ask whether a signal story survives basic falsification.</p></li><li><p><code>10_ml4t_library_ecosystem</code> shows the <code>ml4t-data</code>, <code>ml4t-engineer</code>, and <code>ml4t-diagnostic</code> libraries used across Chapters 7-12.</p></li></ul><h2><a href="https://github.com/stefan-jansen/machine-learning-for-trading/tree/main/08_financial_features">Chapter 8: Financial Feature Engineering</a></h2><p>Chapter 8 moves from a trading idea to a documented feature specification: what the feature is supposed to capture, which horizon it belongs to, which reference frame it uses, and how it should be lagged.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!QrsF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F527f155d-7d28-4e64-9891-93d133aa8283_1600x888.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QrsF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F527f155d-7d28-4e64-9891-93d133aa8283_1600x888.jpeg 424w, https://substackcdn.com/image/fetch/$s_!QrsF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F527f155d-7d28-4e64-9891-93d133aa8283_1600x888.jpeg 848w, https://substackcdn.com/image/fetch/$s_!QrsF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F527f155d-7d28-4e64-9891-93d133aa8283_1600x888.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!QrsF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F527f155d-7d28-4e64-9891-93d133aa8283_1600x888.jpeg 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!QrsF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F527f155d-7d28-4e64-9891-93d133aa8283_1600x888.jpeg" width="1456" height="808" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/527f155d-7d28-4e64-9891-93d133aa8283_1600x888.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:808,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:443200,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://insights.ml4trading.io/i/204103460?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F527f155d-7d28-4e64-9891-93d133aa8283_1600x888.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!QrsF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F527f155d-7d28-4e64-9891-93d133aa8283_1600x888.jpeg 424w, https://substackcdn.com/image/fetch/$s_!QrsF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F527f155d-7d28-4e64-9891-93d133aa8283_1600x888.jpeg 848w, https://substackcdn.com/image/fetch/$s_!QrsF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F527f155d-7d28-4e64-9891-93d133aa8283_1600x888.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!QrsF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F527f155d-7d28-4e64-9891-93d133aa8283_1600x888.jpeg 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Chapter 8 organizes feature families by data requirement and role: direct signals, state variables, feasibility inputs, and context.</em></p><p>The chapter builds direct financial features from prices, volume, liquidity, microstructure, term structure, cross-asset relationships, options markets, fundamentals, macro data, calendars, and events. It also includes feature selection and sensitivity checks, so it is not just a catalog of indicators.</p><p>Notebook highlights:</p><ul><li><p><code>01_price_volume_features</code> builds multi-horizon returns, trend features, volatility estimators, volume-liquidity features, ranks, and z-scores from ETF data.</p></li><li><p><code>02_microstructure_features</code> computes Kyle lambda, Amihud illiquidity, Roll spread, and order-flow imbalance from NASDAQ ITCH data.</p></li><li><p><code>03_structural_cross_instrument_features</code> builds carry and roll-yield features from CME futures, rolling beta and lead-lag features from ETFs, and options-implied features from S&amp;P 500 options.</p></li><li><p><code>04_fundamentals_macro_calendar</code> builds value, quality, and growth features from point-in-time financial statements, plus yield-curve, credit-spread, VIX, and calendar features.</p></li><li><p><code>05_feature_selection</code> reduces a large ETF feature set using IC ranking, correlation deduplication, hierarchical clustering, BH-FDR filtering, bootstrap stability, and LightGBM importance.</p></li><li><p><code>06_robustness_sensitivity</code> sweeps momentum parameters, checks IC by VIX regime, and builds signal-times-state interaction features.</p></li><li><p><code>07_event_studies</code> implements event studies around ETF momentum breakouts, including normal-return estimation and CAAR confidence bands.</p></li><li><p><code>case_study_feature_summary</code> compares feature results across case studies, including IC distributions, FDR survival rates, and feature-family effectiveness by asset class.</p></li></ul><h2><a href="https://github.com/stefan-jansen/machine-learning-for-trading/tree/main/09_model_based_features">Chapter 9: Model-Based Feature Extraction</a></h2><p>Chapter 9 turns fitted models into features. These are not the final supervised models being compared later. They are inputs: filtered states, residuals, volatility estimates, uncertainty summaries, regime probabilities, and panel-level relationships.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Joly!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36698f2f-8839-4ed9-945e-199846da4d47_1600x828.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Joly!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36698f2f-8839-4ed9-945e-199846da4d47_1600x828.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Joly!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36698f2f-8839-4ed9-945e-199846da4d47_1600x828.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Joly!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36698f2f-8839-4ed9-945e-199846da4d47_1600x828.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Joly!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36698f2f-8839-4ed9-945e-199846da4d47_1600x828.jpeg 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!Joly!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36698f2f-8839-4ed9-945e-199846da4d47_1600x828.jpeg" width="1456" height="753" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/36698f2f-8839-4ed9-945e-199846da4d47_1600x828.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:753,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:172047,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://insights.ml4trading.io/i/204103460?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36698f2f-8839-4ed9-945e-199846da4d47_1600x828.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Joly!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36698f2f-8839-4ed9-945e-199846da4d47_1600x828.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Joly!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36698f2f-8839-4ed9-945e-199846da4d47_1600x828.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Joly!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36698f2f-8839-4ed9-945e-199846da4d47_1600x828.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Joly!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36698f2f-8839-4ed9-945e-199846da4d47_1600x828.jpeg 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Chapter 9 turns fitted models into features, including filtered regime probabilities from Hidden Markov Models without using future observations.</em></p><p>A fitted model can compress structure that raw rolling features miss: latent state, changing volatility, structural breaks, uncertainty, cycles, and pairwise relationships. The point-in-time distinction matters here: filtered regime probabilities use only information available up to the decision time, whereas smoothed probabilities incorporate future observations and would leak.</p><p>Notebook highlights:</p><ul><li><p><code>01_visual_diagnostics</code>, <code>02_structural_breaks</code>, and <code>03_fractional_differencing</code> cover stationarity tests, ACF/PACF analysis, rolling diagnostics, break detection, and fixed-width fractional differencing.</p></li><li><p><code>04_kalman_filter</code> extracts level, slope, innovation, and uncertainty features, and estimates time-varying hedge ratios for pairs trading.</p></li><li><p><code>05_spectral_features</code> uses wavelets, rolling FFT features, Welch power spectral density, and spectral heatmaps.</p></li><li><p><code>07_arima_features</code>, <code>08_garch_volatility</code>, and <code>09_har_rough_volatility</code> turn time-series models into residual, forecast, uncertainty, conditional volatility, persistence, leverage, and rough volatility features.</p></li><li><p><code>10_uncertainty_features</code> uses PyMC stochastic-volatility models and ARIMA forecast uncertainty to build uncertainty inputs.</p></li><li><p><code>11_hmm_regimes</code>, <code>12_wasserstein_regimes</code>, and <code>13_regime_as_feature</code> compare parametric and distribution-based regime features, including the difference between filtered and smoothed probabilities.</p></li><li><p><code>14_panel_features</code> builds cointegration, Kalman hedge ratio, Ornstein-Uhlenbeck half-life, ranking, sector-relative, and universe aggregation features.</p></li><li><p><code>case_study_temporal_summary</code> compares model-based feature inventories and incremental IC contributions across case studies.</p></li></ul><h2><a href="https://github.com/stefan-jansen/machine-learning-for-trading/tree/main/10_text_feature_engineering">Chapter 10: Text Feature Engineering</a></h2><p>Chapter 10 treats financial NLP as feature engineering. It starts with lexicons, bag-of-words, TF-IDF, and static embeddings, then moves through sequential models, Transformers, domain adaptation, fine-tuning, and text-derived trading signals.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GG2P!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F025f8e04-4351-473e-a09f-0e2bda9a6850_1600x730.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GG2P!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F025f8e04-4351-473e-a09f-0e2bda9a6850_1600x730.jpeg 424w, https://substackcdn.com/image/fetch/$s_!GG2P!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F025f8e04-4351-473e-a09f-0e2bda9a6850_1600x730.jpeg 848w, https://substackcdn.com/image/fetch/$s_!GG2P!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F025f8e04-4351-473e-a09f-0e2bda9a6850_1600x730.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!GG2P!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F025f8e04-4351-473e-a09f-0e2bda9a6850_1600x730.jpeg 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!GG2P!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F025f8e04-4351-473e-a09f-0e2bda9a6850_1600x730.jpeg" width="1456" height="664" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/025f8e04-4351-473e-a09f-0e2bda9a6850_1600x730.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:664,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:134589,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://insights.ml4trading.io/i/204103460?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F025f8e04-4351-473e-a09f-0e2bda9a6850_1600x730.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!GG2P!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F025f8e04-4351-473e-a09f-0e2bda9a6850_1600x730.jpeg 424w, https://substackcdn.com/image/fetch/$s_!GG2P!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F025f8e04-4351-473e-a09f-0e2bda9a6850_1600x730.jpeg 848w, https://substackcdn.com/image/fetch/$s_!GG2P!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F025f8e04-4351-473e-a09f-0e2bda9a6850_1600x730.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!GG2P!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F025f8e04-4351-473e-a09f-0e2bda9a6850_1600x730.jpeg 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Chapter 10 moves from dictionaries and bag-of-words to contextual Transformer representations such as BERT and FinBERT.</em></p><p>The practical focus is timestamp-safe text features: when the text was available, which entity or asset it maps to, how the signal is aggregated, and how it is evaluated against future returns.</p><p>Notebook highlights:</p><ul><li><p><code>01_word2vec_training</code> trains Word2Vec on Financial PhraseBank text and evaluates embeddings with similarity, analogies, and t-SNE.</p></li><li><p><code>02_asset_embeddings</code> applies Word2Vec to SEC 13F holdings, treating portfolios as sentences and stocks as words.</p></li><li><p><code>03_sentiment_evolution</code> compares TF-IDF, GloVe, and FinBERT on Financial PhraseBank and shows why distribution shift matters.</p></li><li><p><code>04_bert_finetuning</code> fine-tunes FinBERT, DeBERTa-v3, and ModernBERT for financial sentiment classification.</p></li><li><p><code>05_financial_ner_finetuning</code> fine-tunes a FinBERT-based named-entity recognizer for companies, amounts, and dates.</p></li><li><p><code>07_news_return_signals</code> builds news surprise and sentiment factors from FNSPID news and evaluates them against S&amp;P 500 forward returns.</p></li><li><p><code>08_text_feature_evaluation</code> evaluates text-derived alpha signals with IC, ICIR, t-statistics, and quintile spreads across 1-day, 5-day, and 20-day horizons.</p></li><li><p><code>09_filing_text_signals</code> builds 10-Q MD&amp;A sentiment and narrative-change signals and joins them to S&amp;P 500 returns with point-in-time alignment.</p></li></ul><p>These notebooks prepare research inputs and diagnostics. They do not claim that a feature survives full strategy simulation, transaction costs, portfolio construction, risk controls, or live deployment; those checks come in later releases.</p><h2>Learn the workflow live</h2><p>The full live-course and workshop schedule is on the <a href="https://ml4trading.io/courses/">ML4T courses page</a>.</p><p>The <a href="https://maven.com/stefan-jansen/research-to-production">Machine Learning for Trading: From Research to Production</a> course starts Monday, July 6. The course uses the same workflow in live work: start with a strategy idea, build a baseline, diagnose what failed, and decide what to try next without quietly reusing the holdout.</p><p>The repository gives you the code. The course adds review and pace.</p><p>You can <a href="https://github.com/stefan-jansen/machine-learning-for-trading">watch or star the ML4T repository</a> to follow the staged release. The next releases move into model comparison, simulation, portfolio construction, transaction costs, risk, and live deployment.</p>]]></content:encoded></item><item><title><![CDATA[How to build a Multi-Agent Forecasting System]]></title><description><![CDATA[They can turn current unstructured evidence into scorable probabilities, but the output has to compete with a model, market, or human baseline.]]></description><link>https://insights.ml4trading.io/p/how-to-build-a-multi-agent-forecasting</link><guid isPermaLink="false">https://insights.ml4trading.io/p/how-to-build-a-multi-agent-forecasting</guid><dc:creator><![CDATA[Stefan Jansen]]></dc:creator><pubDate>Thu, 25 Jun 2026 16:09:43 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/4309c9b7-1128-4ae4-b0ba-045857424117_1200x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Most forecasting work in ML4T starts with structured data.</p><p>A panel of returns. A table of fundamentals. A calendar of releases. A cross-section of firm characteristics. A feature matrix that tries to preserve what the model could have known at the decision time.</p><p>That remains the center of gravity. The third edition still treats data design, labels, baselines, backtests, costs, and monitoring as the hard parts of the workflow. Forecasting agents add an evidence-processing layer to that workflow.</p><p>The layer is specific: it can process current unstructured evidence on the fly and turn the result into a structured forecast artifact.</p><p>For finance, that evidence might be a central bank statement, company guidance, a filing, a research note, macro commentary, or market chatter that has not yet become a stable feature history. For sports, it might be squad news, injuries, lineup changes, travel, form, or match reports. The domains differ. The pattern is the same: some relevant information arrives as text, search results, or messy context before it arrives as a clean panel.</p><p>This Saturday, June 27, we are building this pattern in a live Maven workshop: <a href="https://maven.com/stefan-jansen/forecasting-agents">Building Multi-Agent Forecasting Systems</a>. The  workshop uses an AIA-style multi-agent forecaster inspired by Bridgewater AIA Labs: research agents gather evidence; an aggregation layer combines their probabilities; a supervisor checks the result; calibration adjusts the final number; and every run is stored so it can be scored later.</p><p>The system should read evidence that a conventional model may miss, produce a probability, and then have that probability compete with a baseline.</p><h2>The missing input is often not another price series</h2><p>In a clean modeling setup, the training panel defines the world. If the feature is not in the panel, the model cannot use it. That discipline is important because it prevents hindsight from leaking into the experiment.</p><p>But real decisions often happen before the relevant information has been converted into a feature. A company may update guidance, a regulator may change tone, a central bank may revise its language, or a prediction market may move before the event has resolved. Some of that evidence would be hard to reconstruct across twenty years of history.</p><p>The same issue appears outside finance. In the World Cup forecaster, a statistical model can estimate the probabilities of a win, draw, or loss from historical match data. Match-specific information is a different kind of input: squad updates, recent form narratives, injury reports, expected lineups, conditions, and tournament context.</p><p>An agent can put that evidence into the workflow without pretending it has already become a clean historical feature.</p><p>The agent can search, read, summarize, compare sources, reason over contradictions, and emit a probability with a trace of what it used. That output is not automatically correct. It is a candidate input.</p><p>The test is whether the candidate input improves the forecast record, the diagnosis, or the decision process when compared with a baseline.</p><h2>Web search is the easy version</h2><p>The simplest forecasting agent uses a web search.</p><p>Give the agent a binary question, a cutoff date, a search tool, and a prompt that asks for evidence, uncertainty, and a probability. Let several agents search independently. Aggregate their probabilities. Ask a supervisor to check the disagreement. Store the trace. Score the result when the event resolves.</p><p>That already teaches most of the system design: resolvable questions, cutoff-aware retrieval, source metadata, schema-bound outputs, aggregation policy, calibration, and baseline scoring.</p><p>The current search is convenient but not replayable. Search rankings change. Pages move. Articles update. Snippets may reflect information unavailable as of the forecast date. Date filters help, but they do not create a clean historical archive. If you want to tune the system rather than merely demo it, a point-in-time evidence archive becomes much more attractive.</p><p>For finance, that might mean timestamped news, filings, transcripts, macro releases, prediction-market snapshots, and internal research notes. For sports, it might mean dated match previews, squad announcements, injury updates, odds, and official lineups. The important feature is not that all of this is text. It is that the system can know what was available at the time.</p><p>Once the evidence is archived point-in-time, the agent becomes easier to improve:</p><ul><li><p>You can backtest retrieval policies without letting the agent read the future;</p></li><li><p>You can compare prompts, tools, and agent counts on the same historical evidence;</p></li><li><p>You can run prompt or program optimization against resolved outcomes;</p></li><li><p>You can measure whether a supervisor helps or merely adds cost;</p></li><li><p>You can decide whether debate improves calibration or only produces longer traces.</p></li></ul><p>A live demo can run on the current search. A system that improves over time needs evidence that it can replay.</p><h2>Two practical ways to use the forecast</h2><p>Two deployment patterns cover most practical use cases.</p><p>The first is to build the agent in isolation as an additional forecast. It reads evidence, produces a probability, and gets compared with a market price, a statistical baseline, or a human forecast. If it provides incremental information, the output can be ensembled with the baseline or used as a feature in a downstream model.</p><p>That is the restrained interpretation of the <a href="https://arxiv.org/abs/2511.07678">AIA Forecaster</a> result. On ForecastBench, the report finds that performance is statistically indistinguishable from that of human superforecasters. On MarketLiquid, the paper evaluates 322 liquid prediction-market questions at five forecast dates each, producing 1,610 forecast instances from April 2 to May 23, 2025. The agent alone trails the market consensus there. The practical result is that combining the agent forecast with market consensus beats either source alone on that benchmark.</p><p>That is a realistic role: independent, inspectable evidence processing that can add information when combined with a strong baseline.</p><p>The second pattern is to enrich the agent with structured inputs from the start. It receives a model prior, market odds, recent structured data, and the current evidence it should inspect.</p><p>That is what we are doing in the World Cup agent: model the prior first, current evidence second, and a separate forecast surface throughout.</p><p>The World Cup app illustrates this second pattern. A Poisson-style team-strength model provides the prior; the agent reads the current football context and publishes its own win/draw/loss forecast alongside the model. In one pre-match validation run, changing the prompt increased the agent&#8217;s mean maximum swing from the model by 3.5 percentage points across eight group-opener fixtures. The goal was to keep the model prior visible while allowing the agent to move when supplied evidence justified it.</p><p>If the agent simply rubber-stamps the model, it adds little. If it makes large moves without evidence, it adds noise. Evidence-driven deviations are the cases to track and evaluate.</p><h2>The AIA-style architecture</h2><p>Chapter 24 of <a href="https://www.ml4trading.io/third-edition/chapters/24_autonomous_agents/">Machine Learning for Trading</a> uses forecasting because the output can be scored. A forecast has a timestamp, a probability, a resolution rule, and an eventual outcome.</p><p>For prediction-market questions, the target is usually a binary event. For match forecasts, the outcomes are mutually exclusive. The architecture is similar, but the scoring layer changes.</p><p>The architecture we use in the workshop follows the same practical sequence:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cDxE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfc7b296-aaf1-471a-954f-56246b0e14ba_3168x1344.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cDxE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfc7b296-aaf1-471a-954f-56246b0e14ba_3168x1344.png 424w, https://substackcdn.com/image/fetch/$s_!cDxE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfc7b296-aaf1-471a-954f-56246b0e14ba_3168x1344.png 848w, https://substackcdn.com/image/fetch/$s_!cDxE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfc7b296-aaf1-471a-954f-56246b0e14ba_3168x1344.png 1272w, https://substackcdn.com/image/fetch/$s_!cDxE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfc7b296-aaf1-471a-954f-56246b0e14ba_3168x1344.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!cDxE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfc7b296-aaf1-471a-954f-56246b0e14ba_3168x1344.png" width="1456" height="618" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dfc7b296-aaf1-471a-954f-56246b0e14ba_3168x1344.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:618,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4662865,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://insights.ml4trading.io/i/203574336?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfc7b296-aaf1-471a-954f-56246b0e14ba_3168x1344.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!cDxE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfc7b296-aaf1-471a-954f-56246b0e14ba_3168x1344.png 424w, https://substackcdn.com/image/fetch/$s_!cDxE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfc7b296-aaf1-471a-954f-56246b0e14ba_3168x1344.png 848w, https://substackcdn.com/image/fetch/$s_!cDxE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfc7b296-aaf1-471a-954f-56246b0e14ba_3168x1344.png 1272w, https://substackcdn.com/image/fetch/$s_!cDxE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfc7b296-aaf1-471a-954f-56246b0e14ba_3168x1344.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>An AIA-style forecasting system turns a question into research-agent traces, an aggregate forecast, supervisor review, calibration, and a persisted probability that can be scored later.</em></p><ol><li><p>Define the forecast target and cutoff policy.</p></li><li><p>Run several research agents that search and reason independently under the same cutoff policy.</p></li><li><p>Aggregate their probabilities under an explicit rule.</p></li><li><p>Optionally run a debate or specialist review stage when the question set warrants the cost.</p></li><li><p>Let a supervisor inspect disagreements and perform clarifying searches when needed.</p></li><li><p>Calibrate the final probability.</p></li><li><p>Persist the run: question, inputs, traces, configuration, token usage, probabilities, and later scores.</p></li></ol><p>This is a read-only forecasting system. It can pull questions, prices, search results, and evidence. It does not place trades or bets.</p><p>That boundary makes the system easier to evaluate. A read-only agent can be wrong without also creating an execution problem. The first product of the system is a probability and a record. Action comes later, if the probability survives comparison with the rest of the workflow.</p><h2>What has to be measured</h2><p>Forecasting agents invite a familiar mistake: treating a good explanation as evidence of a good forecast.</p><p>The explanation may be useful. It may help diagnose what the system saw. It may reveal a stale source, a missing counterargument, or a brittle prompt. But the forecast has to be judged by scoring rules and baselines.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!N4ED!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d31e83e-f5ef-4fc1-898e-738e6f6b7ef8_1600x992.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!N4ED!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d31e83e-f5ef-4fc1-898e-738e6f6b7ef8_1600x992.png 424w, https://substackcdn.com/image/fetch/$s_!N4ED!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d31e83e-f5ef-4fc1-898e-738e6f6b7ef8_1600x992.png 848w, https://substackcdn.com/image/fetch/$s_!N4ED!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d31e83e-f5ef-4fc1-898e-738e6f6b7ef8_1600x992.png 1272w, https://substackcdn.com/image/fetch/$s_!N4ED!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d31e83e-f5ef-4fc1-898e-738e6f6b7ef8_1600x992.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!N4ED!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d31e83e-f5ef-4fc1-898e-738e6f6b7ef8_1600x992.png" width="1456" height="903" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9d31e83e-f5ef-4fc1-898e-738e6f6b7ef8_1600x992.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:903,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:152298,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://insights.ml4trading.io/i/203574336?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d31e83e-f5ef-4fc1-898e-738e6f6b7ef8_1600x992.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!N4ED!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d31e83e-f5ef-4fc1-898e-738e6f6b7ef8_1600x992.png 424w, https://substackcdn.com/image/fetch/$s_!N4ED!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d31e83e-f5ef-4fc1-898e-738e6f6b7ef8_1600x992.png 848w, https://substackcdn.com/image/fetch/$s_!N4ED!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d31e83e-f5ef-4fc1-898e-738e6f6b7ef8_1600x992.png 1272w, https://substackcdn.com/image/fetch/$s_!N4ED!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d31e83e-f5ef-4fc1-898e-738e6f6b7ef8_1600x992.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Calibration remaps probabilities based on past forecast errors. It cannot add evidence the agent missed, and it should be evaluated on a disjoint set of resolved forecasts.</em></p><p>At a minimum, the evaluation should ask:</p><ul><li><p>Does the agent improve Brier score, log score, calibration, or sharpness relative to the baseline?</p></li><li><p>Does the improvement survive time-disjoint evaluation?</p></li><li><p>Does the agent add information when combined with market consensus or a statistical model?</p></li><li><p>Which component actually helps: search, more agents, debate, supervisor, calibration, or a better evidence archive?</p></li><li><p>Does the benefit justify the cost and latency?</p></li></ul><p>A negative result still tells you which component not to keep. An agent may fail to beat a baseline on its own and still improve an ensemble or help diagnose model blind spots. If it only produces plausible prose, it should not survive the ablation.</p><p>This is also why point-in-time evidence matters. Without it, a backtest can become a story about leakage. With it, the same architecture can become a repeatable experiment: the same question, the same cutoff, the same archive, different prompt or tool policy, scored after resolution.</p><h2>What we will build on Saturday</h2><p>The workshop is built around a working AIA-style forecaster.</p><p>Students run a CLI and dashboard, inspect individual agent traces, change profiles, compare single-agent and multi-agent runs, look at aggregation and calibration, and see how forecast runs are stored for later scoring. The deterministic replay path works without API keys. Live model and search providers are optional upgrades.</p><p>The day is deliberately practical:</p><ul><li><p>start from a resolvable question;</p></li><li><p>run one research agent and inspect its evidence trail;</p></li><li><p>move from one agent to several;</p></li><li><p>aggregate and calibrate the probabilities;</p></li><li><p>store the run so it can be evaluated later;</p></li><li><p>discuss how the same pattern generalizes from prediction markets to finance, sports, and other decision workflows.</p></li></ul><p>The ML4T link is the evaluation habit: preserve the timestamp, compare with a baseline, and remove components that do not improve the record. Forecasting agents make a new class of inputs available to that workflow.</p><p>The live workshop is this Saturday: <a href="https://maven.com/stefan-jansen/forecasting-agents">Building Multi-Agent Forecasting Systems</a>.</p><p>The free Lightning Lesson page is here: <a href="https://maven.com/p/6c2609/build-multi-agent-systems-you-can-audit">Build Multi-Agent Systems You Can Audit</a>.</p><p>In the workshop, a component earns its place only if the stored runs show that it improves the forecast record, the diagnosis, or the evaluation against the baseline.</p>]]></content:encoded></item><item><title><![CDATA[New Release: The ML4T Data Layer Is Now Public]]></title><description><![CDATA[This release makes the Chapters 1-5 code public and focuses on the data foundation: data loaders, market microstructure, as well as alternative and synthetic data.]]></description><link>https://insights.ml4trading.io/p/new-release-the-ml4t-data-layer-is</link><guid isPermaLink="false">https://insights.ml4trading.io/p/new-release-the-ml4t-data-layer-is</guid><dc:creator><![CDATA[Stefan Jansen]]></dc:creator><pubDate>Mon, 22 Jun 2026 12:30:49 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/856566a8-3b99-4554-baf6-c7b138ebd08c_1200x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Today, we are releasing the code for the first five chapters of the third edition of <a href="https://github.com/stefan-jansen/machine-learning-for-trading">Machine Learning for Trading</a>.</p><p>Chapter 1, <a href="https://github.com/stefan-jansen/machine-learning-for-trading/tree/main/01_process_is_edge">The Process Is Your Edge</a>, sets up the workflow: define the research problem, keep exploration separate from confirmation, and treat live degradation as something the process has to handle. Chapters 2-5 then make the data foundation inspectable.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!LL4E!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd52279d-f630-4e38-a84c-79f86842919f_3168x1344.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!LL4E!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd52279d-f630-4e38-a84c-79f86842919f_3168x1344.jpeg 424w, https://substackcdn.com/image/fetch/$s_!LL4E!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd52279d-f630-4e38-a84c-79f86842919f_3168x1344.jpeg 848w, https://substackcdn.com/image/fetch/$s_!LL4E!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd52279d-f630-4e38-a84c-79f86842919f_3168x1344.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!LL4E!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd52279d-f630-4e38-a84c-79f86842919f_3168x1344.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!LL4E!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd52279d-f630-4e38-a84c-79f86842919f_3168x1344.jpeg" width="1456" height="618" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cd52279d-f630-4e38-a84c-79f86842919f_3168x1344.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:618,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2012163,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://insights.ml4trading.io/i/203079892?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd52279d-f630-4e38-a84c-79f86842919f_3168x1344.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!LL4E!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd52279d-f630-4e38-a84c-79f86842919f_3168x1344.jpeg 424w, https://substackcdn.com/image/fetch/$s_!LL4E!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd52279d-f630-4e38-a84c-79f86842919f_3168x1344.jpeg 848w, https://substackcdn.com/image/fetch/$s_!LL4E!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd52279d-f630-4e38-a84c-79f86842919f_3168x1344.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!LL4E!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd52279d-f630-4e38-a84c-79f86842919f_3168x1344.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Data infrastructure supports strategy research and live deployment. This release provides access to the book's coverage of the infrastructure layer: the data and chapter notebooks that later case studies build on.</em></p><p>This release also arrives as we start teaching the ML4T workflow live. The free <a href="https://maven.com/p/7a8c60/from-trading-idea-to-validated-strategy">From trading idea to validated strategy</a> Lightning Lesson runs Wednesday, June 24, at 16:00 UTC / noon ET; the full <a href="https://maven.com/stefan-jansen/research-to-production">Machine Learning for Trading: From Research to Production</a> course starts July 6. The course is organized around this loop: start with a research question, build the data contract, cross the evidence boundary only when the experiment deserves it, and carefully track the live feedback loop.</p><p>In trading research, few things are more important than the information contained in data, and how to handle it properly: clocks, sessions, adjustments, revisions, identifiers, contract rolls, venue rules, licensing limits, and the question of what a strategy could have known at the time of the decision. A later model result only means something once those choices are visible.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gMH_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe11b8905-e8c2-4a4d-97af-6f5486211fa5_2729x1174.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gMH_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe11b8905-e8c2-4a4d-97af-6f5486211fa5_2729x1174.jpeg 424w, https://substackcdn.com/image/fetch/$s_!gMH_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe11b8905-e8c2-4a4d-97af-6f5486211fa5_2729x1174.jpeg 848w, https://substackcdn.com/image/fetch/$s_!gMH_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe11b8905-e8c2-4a4d-97af-6f5486211fa5_2729x1174.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!gMH_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe11b8905-e8c2-4a4d-97af-6f5486211fa5_2729x1174.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gMH_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe11b8905-e8c2-4a4d-97af-6f5486211fa5_2729x1174.jpeg" width="1456" height="626" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e11b8905-e8c2-4a4d-97af-6f5486211fa5_2729x1174.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:626,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:425171,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://insights.ml4trading.io/i/203079892?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe11b8905-e8c2-4a4d-97af-6f5486211fa5_2729x1174.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!gMH_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe11b8905-e8c2-4a4d-97af-6f5486211fa5_2729x1174.jpeg 424w, https://substackcdn.com/image/fetch/$s_!gMH_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe11b8905-e8c2-4a4d-97af-6f5486211fa5_2729x1174.jpeg 848w, https://substackcdn.com/image/fetch/$s_!gMH_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe11b8905-e8c2-4a4d-97af-6f5486211fa5_2729x1174.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!gMH_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe11b8905-e8c2-4a4d-97af-6f5486211fa5_2729x1174.jpeg 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>A point-in-time accounting example from Chapter 4. The final database view shows the same $100M revenue value across the year; the lower track shows what was actually available after the original filing and later restatements.</em></p><p>This release adds the first five chapter directories and the central <code>data/</code> package that later case-study work builds on:</p><ul><li><p><a href="https://github.com/stefan-jansen/machine-learning-for-trading/tree/main/01_process_is_edge">Chapter 1: The Process Is Your Edge</a></p></li><li><p><a href="https://github.com/stefan-jansen/machine-learning-for-trading/tree/main/02_financial_data_universe">Chapter 2: The Financial Data Universe</a></p></li><li><p><a href="https://github.com/stefan-jansen/machine-learning-for-trading/tree/main/03_market_microstructure">Chapter 3: Market Microstructure</a></p></li><li><p><a href="https://github.com/stefan-jansen/machine-learning-for-trading/tree/main/04_fundamental_alternative_data">Chapter 4: Fundamental and Alternative Data</a></p></li><li><p><a href="https://github.com/stefan-jansen/machine-learning-for-trading/tree/main/05_synthetic_data">Chapter 5: Synthetic Financial Data</a></p></li><li><p><a href="https://github.com/stefan-jansen/machine-learning-for-trading/tree/main/data">The data download package</a></p></li></ul><p>Chapter 1 adds the workflow frame. The four data chapters contain 62 notebooks. The <code>data/</code> directory adds the catalog, download scripts, loaders, configs, and access notes that turn the chapter examples into something a reader can inspect and run. The implementation detail worth checking first: loaders return Polars DataFrames through a consistent API, and missing data raises setup instructions with explicit download guidance.</p><h2>What the data layer contains</h2><p>The top-level data catalog currently lists 31 dataset entries. Financial data does not fit cleanly into one giant downloadable bundle. Some sources can be fetched without an API key. Some need a free key. Some are paid. Some require a manual provider download. Some reduced licensed packages are still being prepared for hosting.</p><p>The catalog groups entries around the constraints a research workflow inherits: daily market data, microstructure feeds, options data, fundamentals, positioning, macro series, prediction markets, on-chain metrics, news, and text. That structure makes setup expectations and redistribution limits visible before a reader spends time trying to reproduce a notebook.</p><p>The synthetic-data chapter takes a different angle. It asks how to create alternative histories for robustness analysis when one realized market path is not enough. The notebooks start with classical simulation and move through TimeGAN, Tail-GAN, Sig-CWGAN, GT-GAN, Diffusion-TS, LLM-based tabular generation, and differentially private GAN training. The diagnostics focus on stylized facts, dependence structure, downstream task utility, and privacy constraints.</p><h2>Chapters 2-5 in one pass</h2><p>Chapter 2 gives the map. It covers the financial data universe by asset class and source type, then moves into due diligence and storage. The practical thread is that provider data already contains research choices: corporate actions, survivorship, contract construction, point-in-time availability, storage format, and update policy.</p><p>Chapter 3 gets closer to the tape. Market data is the output of market design: sessions, order types, venue rules, visible liquidity, and timestamp conventions. The notebooks parse NASDAQ TotalView-ITCH, reconstruct limit order books, validate trade-direction classification, compare bar-sampling rules, and show why the sampling clock changes the return distribution a model sees.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MuI9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11a12324-d9e6-4732-9971-128a0241f5c2_3000x1950.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MuI9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11a12324-d9e6-4732-9971-128a0241f5c2_3000x1950.png 424w, https://substackcdn.com/image/fetch/$s_!MuI9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11a12324-d9e6-4732-9971-128a0241f5c2_3000x1950.png 848w, https://substackcdn.com/image/fetch/$s_!MuI9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11a12324-d9e6-4732-9971-128a0241f5c2_3000x1950.png 1272w, https://substackcdn.com/image/fetch/$s_!MuI9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11a12324-d9e6-4732-9971-128a0241f5c2_3000x1950.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!MuI9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11a12324-d9e6-4732-9971-128a0241f5c2_3000x1950.png" width="1456" height="946" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/11a12324-d9e6-4732-9971-128a0241f5c2_3000x1950.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:946,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:201240,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://insights.ml4trading.io/i/203079892?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11a12324-d9e6-4732-9971-128a0241f5c2_3000x1950.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!MuI9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11a12324-d9e6-4732-9971-128a0241f5c2_3000x1950.png 424w, https://substackcdn.com/image/fetch/$s_!MuI9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11a12324-d9e6-4732-9971-128a0241f5c2_3000x1950.png 848w, https://substackcdn.com/image/fetch/$s_!MuI9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11a12324-d9e6-4732-9971-128a0241f5c2_3000x1950.png 1272w, https://substackcdn.com/image/fetch/$s_!MuI9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11a12324-d9e6-4732-9971-128a0241f5c2_3000x1950.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>A Chapter 3 notebook turns the same AAPL trading day into one-minute bars, 10,000-share volume bars, and tick imbalance bars. The choice of sampling clock changes the observations a model receives before feature engineering begins.</em></p><p>Chapter 4 turns point-in-time correctness into implementation work. It covers SEC EDGAR and XBRL data, Form 4 insider transactions, 13F holdings, entity resolution, macro release alignment, CFTC futures positioning, on-chain fundamentals, prediction markets, and the extraction of filing text for later NLP work. Financial information must be aligned with the time it became available, as well as the fiscal period or event it describes.</p><p>Chapter 5 handles synthetic data with a practical standard: fidelity, utility, and privacy. Generated histories are useful when they stress robustness claims and privacy constraints; extra sample count alone cannot make a backtest more convincing.</p><h2>From dataset to case study</h2><p>The third-edition case studies begin with a market, a universe, a decision schedule, and a data definition. The case-study table in the main README is already public; the detailed case-study notebooks will be included in later release batches.</p><p>The futures path shows the point. A CME futures example starts with contracts, sessions, UTC timestamps, roll rules, continuous-series construction, and positioning data that arrives on its own schedule. A term-structure signal built on that data depends on each of those choices before any model sees a feature matrix.</p><p>The firm-characteristics case has a different failure mode. A monthly cross-sectional result only means something if the accounting data is lagged and aligned to a point-in-time before labels and features are built. The README lists the remaining nine case studies, including the distinct S&amp;P 500 equity-plus-options and options-only tracks.</p><p>That is why the data release comes before the model chapters. Later chapters can ask whether a model improves a score. This release sets up the prior check: whether the score was computed on a dataset whose timing, universe, costs, and availability rules would have held up against the actual research problem.</p><h2>How to inspect the release</h2><p>A narrow first pass works better than browsing every notebook.</p><p>Start with <code>data/README.md</code>. It explains the dataset catalog, access categories, loader names, storage tiers, and the quick-start commands. The repo expects the data path in a root <code>.env</code> file:</p><pre><code><code># In the repository root .env file
ML4T_DATA_PATH=/path/to/your/data

# Then download free datasets
uv run python data/download_all.py --free-only</code></code></pre><p>Then pick one path.</p><p>If you want the lightest local setup, start with ETFs, factors, and crypto. The minimum tier is about 70 MB. Adding macro and FX data still leaves the standard tier around 75 MB, assuming the free API keys are configured. Adding the broad US-equities dataset takes the footprint to roughly 740 MB. Adding CME futures brings it to roughly 825 MB. The full setup, including the larger microstructure and reduced licensed packages, is closer to 7 GB.</p><p>That separation matters because a reproducible notebook is only reproducible within the data rights and access assumptions it declares.</p><p>A practical first pass is:</p><ul><li><p>open the <code>data/</code> README;</p></li><li><p>run one free dataset download;</p></li><li><p>open the matching chapter notebook;</p></li><li><p>inspect the loader output and canonical timestamp/entity columns;</p></li><li><p>trace that dataset into the case-study table in the main README;</p></li><li><p>then move to the Chapter 6 feasibility notebook when that batch lands.</p></li></ul><p>The next ML4T Insights issues will follow the same sequence: data first, then strategy definition, labels, features, model comparison, backtesting, costs, risk, and deployment.</p><h2>For the walkthrough</h2><p>The <a href="https://maven.com/p/7a8c60/from-trading-idea-to-validated-strategy?utm_medium=ll_share_link&amp;utm_source=instructor">June 24 Lightning Lesson</a> starts from this data contract: choose a market, define the decision problem, build a first baseline, diagnose what failed, and make the next iteration measurable without quietly reusing the holdout.</p><p>The <a href="https://maven.com/stefan-jansen/research-to-production">July 6 cohort</a> uses the same case-study structure as the book and repo, with sequencing, feedback, and live review.</p><p>The repo gives readers the artifacts. The course adds the working cadence: turn the artifacts into a baseline, read what the baseline says, and decide what deserves the next experiment.</p><p>You can <a href="https://github.com/stefan-jansen/machine-learning-for-trading">watch or star the repo</a> to follow the staged release. The lesson is a short live walkthrough of why the release starts with the data contract before moving to models.</p>]]></content:encoded></item><item><title><![CDATA[The ML4T Third-Edition Code Rollout Starts Today]]></title><description><![CDATA[Between now and launch, the public repo will fill in stages: workflow, case studies, libraries, and the checks that turn model forecasts into trading decisions.]]></description><link>https://insights.ml4trading.io/p/the-ml4t-third-edition-code-rollout</link><guid isPermaLink="false">https://insights.ml4trading.io/p/the-ml4t-third-edition-code-rollout</guid><dc:creator><![CDATA[Stefan Jansen]]></dc:creator><pubDate>Fri, 19 Jun 2026 15:12:24 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/564273b3-5244-4968-af80-dd0dc717d80b_1200x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The <a href="https://github.com/stefan-jansen/machine-learning-for-trading">Machine Learning for Trading repository</a> has carried much of the practical load for ML4T. Some readers used it to run notebooks alongside the chapters. Others found the book through the code first. With more than 19,000 stars and 5,300 forks, it has become the public memory of the first two editions. It also showed up again recently on GitHub Trending for Jupyter Notebook repositories, which is a useful reminder that the old repo is still being discovered while the new edition is being prepared.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!c9Xj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c589a29-0b53-4be6-a1da-7d970df41bd0_1832x1404.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!c9Xj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c589a29-0b53-4be6-a1da-7d970df41bd0_1832x1404.png 424w, https://substackcdn.com/image/fetch/$s_!c9Xj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c589a29-0b53-4be6-a1da-7d970df41bd0_1832x1404.png 848w, https://substackcdn.com/image/fetch/$s_!c9Xj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c589a29-0b53-4be6-a1da-7d970df41bd0_1832x1404.png 1272w, https://substackcdn.com/image/fetch/$s_!c9Xj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c589a29-0b53-4be6-a1da-7d970df41bd0_1832x1404.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!c9Xj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c589a29-0b53-4be6-a1da-7d970df41bd0_1832x1404.png" width="1456" height="1116" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3c589a29-0b53-4be6-a1da-7d970df41bd0_1832x1404.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1116,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:159320,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://insights.ml4trading.io/i/202731499?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c589a29-0b53-4be6-a1da-7d970df41bd0_1832x1404.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!c9Xj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c589a29-0b53-4be6-a1da-7d970df41bd0_1832x1404.png 424w, https://substackcdn.com/image/fetch/$s_!c9Xj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c589a29-0b53-4be6-a1da-7d970df41bd0_1832x1404.png 848w, https://substackcdn.com/image/fetch/$s_!c9Xj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c589a29-0b53-4be6-a1da-7d970df41bd0_1832x1404.png 1272w, https://substackcdn.com/image/fetch/$s_!c9Xj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c589a29-0b53-4be6-a1da-7d970df41bd0_1832x1404.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Star history for the public ML4T repository, showing steady growth from 2019 through 2026. The third-edition rebuild starts from an existing reader base that has accumulated over several years.</em></p><p>The third-edition README is now live on the main branch. The older material is preserved on the <code>first-edition</code> and <code>second-edition</code> branches. The new code will be rolled out in stages over the next few weeks leading up to the July launch.</p><p>That staged release has a practical reason. A large trading-ML repo can easily turn into a larger notebook archive: more models, more datasets, more examples, more ways to get lost. The third-edition rebuild is organized around a different question:</p><p>When a forecast looks promising, what has to be checked before it becomes a trading decision?</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4G3X!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F812a6c55-0e02-4a4c-b546-4e4fe7c98663_1024x459.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4G3X!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F812a6c55-0e02-4a4c-b546-4e4fe7c98663_1024x459.png 424w, https://substackcdn.com/image/fetch/$s_!4G3X!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F812a6c55-0e02-4a4c-b546-4e4fe7c98663_1024x459.png 848w, https://substackcdn.com/image/fetch/$s_!4G3X!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F812a6c55-0e02-4a4c-b546-4e4fe7c98663_1024x459.png 1272w, https://substackcdn.com/image/fetch/$s_!4G3X!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F812a6c55-0e02-4a4c-b546-4e4fe7c98663_1024x459.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4G3X!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F812a6c55-0e02-4a4c-b546-4e4fe7c98663_1024x459.png" width="1024" height="459" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/812a6c55-0e02-4a4c-b546-4e4fe7c98663_1024x459.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:459,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:341882,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://insights.ml4trading.io/i/202731499?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F812a6c55-0e02-4a4c-b546-4e4fe7c98663_1024x459.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!4G3X!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F812a6c55-0e02-4a4c-b546-4e4fe7c98663_1024x459.png 424w, https://substackcdn.com/image/fetch/$s_!4G3X!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F812a6c55-0e02-4a4c-b546-4e4fe7c98663_1024x459.png 848w, https://substackcdn.com/image/fetch/$s_!4G3X!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F812a6c55-0e02-4a4c-b546-4e4fe7c98663_1024x459.png 1272w, https://substackcdn.com/image/fetch/$s_!4G3X!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F812a6c55-0e02-4a4c-b546-4e4fe7c98663_1024x459.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>The third-edition workflow separates strategy research from evaluation with an evidence boundary, then closes the loop through deployment, monitoring, and the decision to retrain, pause, or retire a strategy.</em></p><p>That is also the question behind next Wednesday&#8217;s free Lightning Lesson &#8220;<a href="https://maven.com/p/7a8c60/from-trading-idea-to-validated-strategy">From trading idea to validated strategy</a>&#8221;. The repo is the public resource; the lesson is the short guided walkthrough.</p><h2>The work after the forecast</h2><p>A familiar research sequence goes like this. A model produces a plausible return forecast. The validation IC improves. A backtest looks better than the baseline. Then the harder checks begin.</p><p>Was the asset universe fixed before the test? Did the label line up with what was knowable at the time of the decision? Were overlapping labels handled correctly? How many variants were tried before this one survived? Did the result clear the cost model? Did turnover make the signal unusable? Does the portfolio rule amplify a weak forecast or diversify it? What happens after position limits, drawdown rules, and execution assumptions are applied?</p><p>The book calls one part of this the evidence boundary: the line between exploration and confirmation. On one side, you search, tune, compare labels, test feature families, and improve the baseline. On the other side, you spend a holdout on a result that was already specified well enough to deserve the test.</p><p>That boundary changes the decision a result can support. A strategy can meet a naive Sharpe threshold and still fail once the number of variants tested is taken into account. A feature can look predictive until its timestamp is checked. A model can improve rank correlation and still lose once costs and turnover are factored in.</p><p>At that point, the right response is to return to exploration, narrow the claim, or stop. The holdout has already answered the question it was allowed to answer.</p><p>That is the practical center of the third-edition workflow.</p><h2>Three ways into the repo</h2><p>The new README is the route map for the staged code release. It shows three useful ways to enter the material as the directories fill in.</p><p>First, enter by workflow stage. If the problem is data reliability, start with the financial data layer. If the problem is label design, feature triage, or leakage, start with research design and feature engineering. If the problem is model comparison, start with the model chapters. If the backtest looks too clean to believe, start with portfolio construction, costs, risk, and strategy synthesis. If you are working with RAG, knowledge graphs, or agents, start with the advanced-AI chapters. If the issue is live operation, start with deployment, monitoring, and the retrain-pause-retire loop.</p><p>Second, enter by case study. The <a href="https://www.ml4trading.io/case-studies/">case-study page</a> lists nine studies across seven asset classes, 168 notebooks, and six pipeline stages. Each one puts pressure on a different part of the process:</p><ul><li><p>ETFs are a cleaner daily cross-asset setting for following the full loop.</p></li><li><p>Crypto perpetuals introduce funding rates, shorter decision intervals, and a market structure that differs sharply from equities.</p></li><li><p>NASDAQ-100 microstructure makes bar construction, order flow, and intraday costs part of the modeling problem.</p></li><li><p>S&amp;P 500 equity plus options uses implied-volatility information to improve equity selection.</p></li><li><p>US firm characteristics revisit the canonical monthly cross-sectional factor problem, where point-in-time data discipline does much of the work.</p></li><li><p>FX pairs expose the limits of a small cross-section when shared macro and dollar factors are present.</p></li><li><p>CME futures force rolls, term structure, and sector structure into the foreground.</p></li><li><p>S&amp;P 500 options test whether an options-only strategy can survive labels, hedging, and instrument-specific costs.</p></li><li><p>The broad US equities panel asks whether weak individual signals become useful when scaled across thousands of names.</p></li></ul><p>Third, enter by library layer. The current <a href="https://www.ml4trading.io/libraries/">library page</a> lists six workflow-aligned packages: <code>ml4t-data</code>, <code>ml4t-engineer</code>, <code>ml4t-models</code>, <code>ml4t-diagnostic</code>, <code>ml4t-backtest</code>, and <code>ml4t-live</code>. A reader can use a single layer without adopting the entire stack. A data team may only need acquisition and storage. A researcher may only need labels, features, and diagnostics. A course participant may start with a baseline and then decide whether the next change belongs in data, labels, validation, costs, allocation, or execution.</p><h2>What to inspect first</h2><p>The first release wave is the data and research foundation. That is less fashionable than agents or deep learning, but it is where many strategy problems start.</p><p>The data chapter spans market, fundamental, and alternative data; corporate actions; futures and continuous contracts; options; crypto; FX; point-in-time validation; survivorship; provider comparison; incremental updates; and storage benchmarks.</p><p>The microstructure chapter moves from raw exchange messages to feature-ready bars: NASDAQ ITCH parsing, limit-order-book reconstruction, order lifecycle analysis, TAQ-style examples, Lee-Ready validation, alternative bar sampling, and intraday jump detection.</p><p>The synthetic-data chapter is another natural deep dive. Since the second edition, the topic has moved well past &#8220;can a GAN produce realistic-looking prices?&#8221; The current problem is more practical: whether a generator preserves the structure a downstream research task needs, without leaking the original data or creating a world that is easier than the real one. The chapter covers classical simulation, TimeGAN, Tail-GAN, Sig-CWGAN, diffusion-based generators, LLM-based tabular generation, and privacy-aware variants.</p><p>If you open the repo as the release unfolds, a reasonable first inspection path is:</p><ul><li><p>pick one case study instead of browsing every notebook;</p></li><li><p>read the data construction before the model notebook;</p></li><li><p>locate the label definition, horizon, and decision timestamp;</p></li><li><p>check the validation split, purge, embargo, and holdout rule;</p></li><li><p>inspect cost assumptions before performance statistics;</p></li><li><p>treat the first backtest as a diagnostic, not evidence;</p></li><li><p>look for the handoff from forecast output to portfolio rule, risk limit, and deployment decision.</p></li></ul><p>That is also the editorial path for the next set of ML4T Insights issues. The useful issues will turn the release into resources readers can keep: a financial-data failure-mode map, a guide to when tick data changes the research problem, an update on synthetic financial data after GANs and diffusion, a case-study access map, and a checklist for when a backtest should count as evidence.</p><h2>For the first time: live course and workshop</h2><p>The repo is the public resource. The course and workshop are the guided version of the same workflow. They aim to help you improve your ML4T research and trading practice, not just repeat what&#8217;s in the book.</p><p>On Wednesday, June 24, there are two free Maven Lightning Lessons:</p><ul><li><p><a href="https://maven.com/p/7a8c60/from-trading-idea-to-validated-strategy">From trading idea to validated strategy</a> at 16:00 UTC</p></li><li><p><a href="https://maven.com/p/6c2609/build-multi-agent-systems-you-can-audit">Build Multi-Agent Systems You Can Audit</a> at 15:00 UTC</p></li></ul><p>The first lesson is the closest companion to this release. It walks through the same transition from idea to baseline, from baseline to diagnosis, and from diagnosis to a cleaner second version without quietly reusing the holdout.</p><p>The second lesson connects to the agent material in the later chapters and to the forecasting-agent workshop. It uses the same discipline in a narrower setting: define the task, preserve the trace, compare against a baseline, and score the output.</p><p>The full <a href="https://maven.com/stefan-jansen/research-to-production">Machine Learning for Trading: From Research to Production</a> course runs July 6 to August 29. It is the live cohort version of the workflow: choose a case-study path, build a baseline, diagnose failure modes, iterate honestly, and defend the result against a published rubric.</p><p>The <a href="https://maven.com/stefan-jansen/forecasting-agents">Building Multi-Agent Forecasting Systems</a> workshop runs June 27. It is the hands-on route through the agent side: multi-agent forecasting, trace capture, ablations, and scoring.</p><p>Neither course is required to use the public repo. The reason to take one is sequencing, feedback, and time spent applying the workflow with other people.</p><h2>Start with the map</h2><p>The practical next step is to <a href="https://github.com/stefan-jansen/machine-learning-for-trading">watch or star the repo</a> if you want to follow the code release as it unfolds.</p><p>The useful test for this release is simple: can a reader open the repo, pick a market, and understand what has to be checked before a model result becomes strategy evidence?</p><p><a href="https://github.com/stefan-jansen/machine-learning-for-trading">Machine Learning for Trading, 3rd Edition on GitHub</a></p>]]></content:encoded></item><item><title><![CDATA[Watching the World Cup With a Forecasting Agent]]></title><description><![CDATA[A live World Cup lab for model priors, noisy match news, market comparisons, and scoreable agent calls.]]></description><link>https://insights.ml4trading.io/p/watching-the-world-cup-with-a-forecasting</link><guid isPermaLink="false">https://insights.ml4trading.io/p/watching-the-world-cup-with-a-forecasting</guid><dc:creator><![CDATA[Stefan Jansen]]></dc:creator><pubDate>Tue, 16 Jun 2026 14:36:30 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/7debfe99-d602-4579-8746-34f7b73acc9b_1200x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The World Cup is one of the few forecasting problems people argue about for pleasure, and it rarely lets a confident prior off the hook.</p><p>Morocco reached the semifinal in 2022. Costa Rica topped a 2014 group that included Uruguay, Italy, and England. Germany won the tournament in 2014, then went out in the group stage in 2018 and again in 2022. The tournament has a long record of embarrassing anyone too sure about it.</p><p>That is exactly what makes it a fun public forecasting lab. The questions are the ones everyone already has an opinion on, the answers come back within hours, and once the match is over, a forecast has very little room to talk its way out of a bad call.</p><p>By the morning of June 16, the <a href="https://applied-ai.com/agent-lab/world-cup-2026/live/">World Cup Forecast Agent</a> had already built a record worth picking apart. Spain was a 75.6% favorite in the model and an 80.0% favorite in the agent&#8217;s call; Cape Verde held Spain to 0-0. Saudi Arabia-Uruguay and Iran-New Zealand ran the same way: the agent nudged the favorite higher, and both matches finished level.</p><p>That is the reason for publishing the lab while the tournament is still underway. Every pre-match number is locked, the trace behind the agent&#8217;s adjustment is stored, and the call is scored once the result is in.</p><div id="datawrapper-iframe" class="datawrapper-wrap outer" data-attrs="{&quot;url&quot;:&quot;https://datawrapper.dwcdn.net/PZxso/2/&quot;,&quot;thumbnail_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/849ffdda-a9b4-4da5-bdc0-9414456b094b_1220x764.png&quot;,&quot;thumbnail_url_full&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/87c18ff4-3da0-4332-8aa6-765449c1c4bf_1220x914.png&quot;,&quot;height&quot;:468,&quot;title&quot;:&quot;World Cup Forecast Agent: June 16 live record&quot;,&quot;description&quot;:&quot;Selected model and agent calls from the June 16 morning snapshot, shown with the match result or pending status.&quot;,&quot;belowTheFold&quot;:false}" data-component-name="DatawrapperToDOM"><iframe id="iframe-datawrapper" class="datawrapper-iframe" src="https://datawrapper.dwcdn.net/PZxso/2/" width="730" height="468" frameborder="0" scrolling="no"></iframe><script type="text/javascript">!function(){"use strict";window.addEventListener("message",(function(e){if(void 0!==e.data["datawrapper-height"]){var t=document.querySelectorAll("iframe");for(var a in e.data["datawrapper-height"])for(var r=0;r<t.length;r++){if(t[r].contentWindow===e.source)t[r].style.height=e.data["datawrapper-height"][a]+"px"}}}))}();</script></div><p>Before kickoff, the traces can read sensibly. A few hours later, the scoreboard may have a different opinion.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!msRU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d71b33f-6bc8-4ac2-8b50-b8dc1bb259cd_1226x497.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!msRU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d71b33f-6bc8-4ac2-8b50-b8dc1bb259cd_1226x497.png 424w, https://substackcdn.com/image/fetch/$s_!msRU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d71b33f-6bc8-4ac2-8b50-b8dc1bb259cd_1226x497.png 848w, https://substackcdn.com/image/fetch/$s_!msRU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d71b33f-6bc8-4ac2-8b50-b8dc1bb259cd_1226x497.png 1272w, https://substackcdn.com/image/fetch/$s_!msRU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d71b33f-6bc8-4ac2-8b50-b8dc1bb259cd_1226x497.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!msRU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d71b33f-6bc8-4ac2-8b50-b8dc1bb259cd_1226x497.png" width="1226" height="497" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7d71b33f-6bc8-4ac2-8b50-b8dc1bb259cd_1226x497.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:497,&quot;width&quot;:1226,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:48434,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://insights.ml4trading.io/i/202289999?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d71b33f-6bc8-4ac2-8b50-b8dc1bb259cd_1226x497.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!msRU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d71b33f-6bc8-4ac2-8b50-b8dc1bb259cd_1226x497.png 424w, https://substackcdn.com/image/fetch/$s_!msRU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d71b33f-6bc8-4ac2-8b50-b8dc1bb259cd_1226x497.png 848w, https://substackcdn.com/image/fetch/$s_!msRU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d71b33f-6bc8-4ac2-8b50-b8dc1bb259cd_1226x497.png 1272w, https://substackcdn.com/image/fetch/$s_!msRU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d71b33f-6bc8-4ac2-8b50-b8dc1bb259cd_1226x497.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>A June 16 fixture strip from the live app. Each row shows the model call and the agent call before kickoff, so readers can see the adjustment before the result arrives.</em></p><p>See below for a free <a href="https://maven.com/stefan-jansen/forecasting-agents">lightning lesson about building multi-agent forecasting systems</a>.</p><h2>The model gives the prior</h2><p>The baseline starts with a familiar statistical idea: estimate each team&#8217;s attacking and defensive strength from international results, weight those results by competition and recency, then simulate the tournament bracket.</p><p>As of the current public run, the model&#8217;s leading champion probabilities are:</p><ul><li><p>Spain: 14.2%</p></li><li><p>Brazil: 12.9%</p></li><li><p>Argentina: 11.8%</p></li><li><p>England: 9.3%</p></li><li><p>France: 6.5%</p></li><li><p>Portugal: 6.5%</p></li><li><p>Germany: 5.0%</p></li><li><p>Colombia: 4.6%</p></li></ul><p>Treat those as a dated snapshot. They are where the forecast starts, not where it ends.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MNEa!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97a43203-f660-400a-b82b-79d5fb1ad831_1241x537.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MNEa!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97a43203-f660-400a-b82b-79d5fb1ad831_1241x537.png 424w, https://substackcdn.com/image/fetch/$s_!MNEa!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97a43203-f660-400a-b82b-79d5fb1ad831_1241x537.png 848w, https://substackcdn.com/image/fetch/$s_!MNEa!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97a43203-f660-400a-b82b-79d5fb1ad831_1241x537.png 1272w, https://substackcdn.com/image/fetch/$s_!MNEa!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97a43203-f660-400a-b82b-79d5fb1ad831_1241x537.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!MNEa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97a43203-f660-400a-b82b-79d5fb1ad831_1241x537.png" width="1241" height="537" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/97a43203-f660-400a-b82b-79d5fb1ad831_1241x537.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:537,&quot;width&quot;:1241,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:117320,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://insights.ml4trading.io/i/202289999?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97a43203-f660-400a-b82b-79d5fb1ad831_1241x537.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!MNEa!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97a43203-f660-400a-b82b-79d5fb1ad831_1241x537.png 424w, https://substackcdn.com/image/fetch/$s_!MNEa!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97a43203-f660-400a-b82b-79d5fb1ad831_1241x537.png 848w, https://substackcdn.com/image/fetch/$s_!MNEa!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97a43203-f660-400a-b82b-79d5fb1ad831_1241x537.png 1272w, https://substackcdn.com/image/fetch/$s_!MNEa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97a43203-f660-400a-b82b-79d5fb1ad831_1241x537.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>The live forecast table keeps model champion probabilities alongside Polymarket and Kalshi prices, rather than blending them into a single consensus number.</em></p><p>The baseline is useful because it is systematic. It is fit on more than 47,000 international results, checked in walk-forward tests, and straightforward to score after the fact. The forecast table sets the model&#8217;s champion odds next to Polymarket and Kalshi prices without averaging the three, which keeps the disagreement on the page rather than dissolving it into a single tidy consensus figure.</p><p>The baseline is also restricted to variables we can reconstruct over time. Injuries, lineup news, weather, travel, squad value, current form: a model could use all of it if each input were a clean, point-in-time history. Most of it does not. Some arrives as prose; some is patchy; and for many variables, there is no decades-long archive of comparable snapshots from the past. Pour today&#8217;s headline into a model that was never trained on yesterday&#8217;s headlines, and you have introduced a new bias, not improved the prior.</p><p>That gap is the agent&#8217;s job. It can work with current, partly structured information without demanding a 50-year feature history. In production, the next step would be to rebuild richer point-in-time datasets and tune prompts, tools, and aggregation rules against historical cases. This app runs the lighter version: hold the quantitative prior steady, let the agent make a separate context adjustment, and score that adjustment on its own.</p><h2>The agent calls the matchup</h2><p>Before each match, the agent receives the model&#8217;s win/draw/loss probabilities, expected goals, recent form, head-to-head history, availability signals, key players, match conditions, a relative squad-value signal, and, when available, recent search results.</p><p>The part closest to Bridgewater AIA Labs&#8217; AIA Forecaster is the research step. The agent first decides what is actually worth checking for a fixture: a late fitness scare, a suspension, a venue condition, a question about one specific player. It then runs a brief Tavily search, retains the sources relevant to the question, and files the query trace alongside the forecast.</p><p>The squad-value signal is kept relative by design: rank within the 48-team field, percentile, value ratio, and marquee names rather than raw euro totals. That gives the agent a current-talent check against a prior built from results, without pretending a transfer-market price tag is a starting eleven. It is a serviceable proxy that still carries the usual biases around age, league, club brand, and the transfer market itself.</p><p>The trace is what turns &#8220;the agent looked into the match&#8221; into something a reader can examine. For the June 16 France-Senegal call, the agent ran three searches, kept nine sources, and moved France from 50.3% to 61.7%. The source list included a piece flagging William Saliba as doubtful and a later one that walked some of that worry back. The agent is reading a noisy evidence stream, not the truth; the trace lets a reader see what it leaned on and judge whether the move was earned.</p><p>The forecast itself comes from a small ensemble of language model calls. Each one returns win/draw/loss probabilities, a scoreline distribution, and a factor-by-factor account of its reasoning. The system aggregates those passes into a single forecast and publishes it as the agent&#8217;s call, set beside the statistical model rather than folded into it.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GbCG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4c42600-2eb9-4347-9a31-2aa12a504840_538x298.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GbCG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4c42600-2eb9-4347-9a31-2aa12a504840_538x298.png 424w, https://substackcdn.com/image/fetch/$s_!GbCG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4c42600-2eb9-4347-9a31-2aa12a504840_538x298.png 848w, https://substackcdn.com/image/fetch/$s_!GbCG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4c42600-2eb9-4347-9a31-2aa12a504840_538x298.png 1272w, https://substackcdn.com/image/fetch/$s_!GbCG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4c42600-2eb9-4347-9a31-2aa12a504840_538x298.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!GbCG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4c42600-2eb9-4347-9a31-2aa12a504840_538x298.png" width="538" height="298" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c4c42600-2eb9-4347-9a31-2aa12a504840_538x298.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:298,&quot;width&quot;:538,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:36735,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://insights.ml4trading.io/i/202289999?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4c42600-2eb9-4347-9a31-2aa12a504840_538x298.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!GbCG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4c42600-2eb9-4347-9a31-2aa12a504840_538x298.png 424w, https://substackcdn.com/image/fetch/$s_!GbCG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4c42600-2eb9-4347-9a31-2aa12a504840_538x298.png 848w, https://substackcdn.com/image/fetch/$s_!GbCG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4c42600-2eb9-4347-9a31-2aa12a504840_538x298.png 1272w, https://substackcdn.com/image/fetch/$s_!GbCG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4c42600-2eb9-4347-9a31-2aa12a504840_538x298.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>A single agent call card from the live app. The card exposes the model-to-agent shift, likely score, short rationale, source count, and grading status.</em></p><h2>What the live record adds</h2><p>A tournament forecast table is easy to publish and easy to forget by the weekend. The World Cup Forecast Agent pulls apart the pieces such tables usually blend:</p><ul><li><p>the model prior</p></li><li><p>the market&#8217;s outside view</p></li><li><p>the match&#8217;s current context</p></li><li><p>the agent&#8217;s reading of it</p></li><li><p>the eventual score</p></li></ul><p>A market disagreement is not an injury note. A model probability, a research summary, and a language model&#8217;s explanation are three different objects. Holding them apart makes the forecast inspectable and scoreable.</p><p>That turns the World Cup into a gentle version of a harder ML4T problem. Many forecasting workflows begin with a quantitative prior and then have to wrap it in messy, recent, and largely unstructured information. The question that matters is whether the agent contributes a distinct, reviewable adjustment around the model or just restates it in livelier language.</p><p>Football makes that concrete. The match is played. The call can be checked. The scoreboard does the rest.</p><p>The live app is already showing its shape. As of the June 16 morning snapshot, 16 calls had been graded, with agent and model tied at 37.5% top-pick accuracy. The model&#8217;s live Brier score was 0.7271 against 0.704 for the naive-prior floor. Lower is better, so the model had not yet pulled clear of the floor, which itself was hitting 43.8% on the same 16 matches. Sixteen games is far too few to render a verdict, but the machinery is already doing its work: publish the call, score the result, let the record stack up.</p><p>The scorecard uses multiclass Brier for match outcomes, with signed per-call deltas showing whether each agent adjustment helped or hurt the model&#8217;s score. By the end of the tournament, the bar should be higher than &#8220;the agent sounded informed.&#8221; The adjustment has to improve the scoring record, sharpen the diagnosis, or both.</p><h2>Why this belongs with the forecasting-agent workshop</h2><p>The World Cup build is intentionally lightweight. It is the playful cousin of Bridgewater AIA Labs&#8217; <a href="https://arxiv.org/abs/2511.07678">AIA Forecaster</a>: start from a prior, pull current evidence, run independent forecast passes, aggregate them, store the trace, and score the call once it resolves.</p><p>The differences are worth being explicit about. The AIA technical report includes supervisor reconciliation and statistical calibration that this app does not claim to reproduce. AIA&#8217;s result is also more interesting than the usual &#8220;agent beats the market&#8221; story: on a liquid-markets benchmark, the agent underperformed market consensus on its own, while an ensemble of AIA forecasts and that same consensus beat the consensus alone. That is why this app keeps model, market, and agent in view at the same time.</p><p>Inside ML4T, this is the second live forecasting-agent surface. The <a href="https://www.ml4trading.io/agent-lab/">ML4T Agent Lab</a> tracks AIA-style questions across Polymarket and Kalshi; the World Cup app brings the same discipline, logged priors, sourced adjustments, and scored outcomes, to a tournament anyone can follow.</p><p>The workshop pushes these choices in a less-forgiving setting: independent research, reconciliation, calibration, ablations, and replayable traces. The World Cup app is the easy way in. You can pull up a match, disagree with the number, and look at exactly what the agent checked before kickoff.</p><h2>How to read the live app</h2><p>There are a few good places to start. The model view carries champion odds, match probabilities, team ratings, and market comparisons. The agent view holds the upcoming and resolved calls: the model-to-agent shift, the factor trace, the searches and sources, the date each was generated. The scorecard is where the misses surface. Once a result lands, every pre-match call is graded against both the outcome and the model.</p><p>It will be wrong, and often. Football is low-scoring, noisy, and decided by small events that can swamp reasonable priors. That is most of the reason to publish the record at all.</p><p>Watch the matches, argue with the numbers, and check back as the scoreboard fills in.</p><p><a href="https://applied-ai.com/agent-lab/world-cup-2026/live/">World Cup Forecast Agent live app</a></p><h2>Learn how to build multi-agent forecasting systems</h2><p>If you want to see how the architecture travels beyond football, next week&#8217;s free Maven Lightning Lesson walks through the design of auditable multi-agent systems: <a href="https://maven.com/p/6c2609/build-multi-agent-systems-you-can-audit">Build Multi-Agent Systems You Can Audit</a>.</p><p>The full hands-on workshop is here: <a href="https://maven.com/stefan-jansen/forecasting-agents">Building Multi-Agent Forecasting Systems</a>.</p>]]></content:encoded></item><item><title><![CDATA[When multi-agent systems are worth the overhead]]></title><description><![CDATA[A multi-agent panel only helps when the agents disagree for real reasons. Forecasting is where you can check.]]></description><link>https://insights.ml4trading.io/p/when-multi-agent-systems-are-worth</link><guid isPermaLink="false">https://insights.ml4trading.io/p/when-multi-agent-systems-are-worth</guid><dc:creator><![CDATA[Stefan Jansen]]></dc:creator><pubDate>Wed, 10 Jun 2026 16:19:25 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/14e60be2-2979-492d-b1cd-7b043afd9169_1200x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><a href="https://www.ml4trading.io/third-edition/chapters/24_autonomous_agents/">Chapter 24</a> of <em>Machine Learning for Trading</em> treats agents as engineering systems rather than chat interfaces. One of its capstones is a multi-agent forecasting system: several research agents gather evidence, an aggregation rule combines their probabilities, a supervisor reconciles disagreement, and the final forecast can later be scored.</p><p>The accompanying notebooks test where this architecture helps, where it adds cost, and where a simpler baseline would have been enough.</p><p>One example is the adversarial-debate notebook. A bull-bear debate ran for three rounds on a Fed-rate question. The bull ended at 0.78, the bear at 0.35, and the gap stayed fixed at 0.43 across all three rounds. The debate added more than 6,000 tokens and moved the blended forecast by one percentage point.</p><p>The result provides a practical lesson for multi-agent systems: the extra-agent stage has to justify its cost.</p><p>Multi-agent systems are easy to make look sophisticated. Add several model calls, assign roles to them, ask them to debate, and place a supervisor at the end. The harder question is whether the added structure produces independent evidence, actionable disagreement, better reconciliation, or a better-scored output than a simpler baseline.</p><p>Forecasting is a good lab for that question because the output is hard to hide. A probability can be timestamped, compared with a market price or base rate, calibrated, ablated, and scored after the event resolves.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!OLCV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffd13a79-6a58-450a-8512-01186279bcbb_2752x1171.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OLCV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffd13a79-6a58-450a-8512-01186279bcbb_2752x1171.jpeg 424w, https://substackcdn.com/image/fetch/$s_!OLCV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffd13a79-6a58-450a-8512-01186279bcbb_2752x1171.jpeg 848w, https://substackcdn.com/image/fetch/$s_!OLCV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffd13a79-6a58-450a-8512-01186279bcbb_2752x1171.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!OLCV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffd13a79-6a58-450a-8512-01186279bcbb_2752x1171.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!OLCV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffd13a79-6a58-450a-8512-01186279bcbb_2752x1171.jpeg" width="1456" height="620" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ffd13a79-6a58-450a-8512-01186279bcbb_2752x1171.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:620,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:422740,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://insights.ml4trading.io/i/201475442?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffd13a79-6a58-450a-8512-01186279bcbb_2752x1171.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!OLCV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffd13a79-6a58-450a-8512-01186279bcbb_2752x1171.jpeg 424w, https://substackcdn.com/image/fetch/$s_!OLCV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffd13a79-6a58-450a-8512-01186279bcbb_2752x1171.jpeg 848w, https://substackcdn.com/image/fetch/$s_!OLCV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffd13a79-6a58-450a-8512-01186279bcbb_2752x1171.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!OLCV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffd13a79-6a58-450a-8512-01186279bcbb_2752x1171.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Chapter 24&#8217;s full multi-agent forecasting pipeline: specialist research agents feed aggregation, optional debate, supervisor reconciliation, a forecast artifact, and audit artifacts. The question for this issue is which stages earn their cost.</em></p><h2>The realistic standard</h2><p>Bridgewater AIA Labs&#8217; <a href="https://doi.org/10.48550/arXiv.2511.07678">AIA Forecaster technical report</a> is one of the clearest public blueprints for this pattern.</p><p>The report describes a multi-agent forecasting system with agentic search, supervisor reconciliation, and statistical calibration. It reports performance that is statistically indistinguishable from human superforecasters on ForecastBench, but it also reports a more sobering result on liquid prediction-market questions: AIA Forecaster underperforms the market consensus on its own. The interesting result is the ensemble. On that harder benchmark, combining market prices with AIA forecasts performs better than either source alone.</p><p>The standard for agent systems in this setting is narrower than market replacement. The agent has to add information that survives comparison with a strong baseline.</p><p>The Chapter 24 implementation starts with a single ReAct research loop, then adds tool contracts, explicit state, multi-agent forecasting, evaluation, governance, and a separate ML4T research operator. This issue focuses on the forecasting system because it most clearly exposes the multi-agent design.</p><h2>The pipeline</h2><p>The forecasting agent example starts with a question that can be resolved - on a prediction market, at a later stage.</p><p>&#8220;Will inflation be high?&#8221; is not enough. A resolved example from the Lightning Lesson is precise enough to score: &#8220;Will US core PCE for April 2026 exceed 0.3% month over month in the BEA Personal Income and Outlays release scheduled for May 28, 2026?&#8221; The <a href="https://www.bea.gov/news/2026/personal-income-and-outlays-april-2026">BEA release</a> reported core PCE at 0.2% month over month, so the event resolved &#8220;no.&#8221;</p><p>After the question is fixed, several research agents work independently. Each agent searches for evidence, records what it finds, reasons about the result, and returns a probability with supporting evidence. In the AIA design, these agents are parallel evidence-gathering runs rather than role-playing characters.</p><p>The system then combines the probabilities. The simple mean is the reference point. The median and trimmed mean reduce the influence of outliers. Extremization pushes an aggregate away from 0.5 when forecasters are treated as sufficiently independent.</p><p>One diversity adjustment used in the Chapter 24 notebooks is:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;D(n,\\rho)=\\sqrt{\\frac{n}{1+(n-1)\\rho}}&quot;,&quot;id&quot;:&quot;MYNPEDFGMQ&quot;}" data-component-name="LatexBlockToDOM"></div><p>Here, <em>D</em> quantifies how far the aggregate can deviate from 0.5 after accounting for dependence among forecasters. With three independent forecasters, <em>D</em>&#8196;=&#8196;1.73. At pairwise correlation 0.7, it falls to 1.12. Three correlated agents are only marginally more informative than a single agent.</p><p>A supervisor can inspect disagreement after aggregation. The supervisor policy is narrow: identify the source of disagreement, run clarifying searches when evidence is missing, and override the aggregate only when the new evidence clears a stated confidence threshold. Otherwise the aggregate remains the forecast.</p><p>Calibration comes last. It can correct systematic probability bias only when estimated on resolved forecasts outside the run being scored. It cannot repair a contaminated question, a weak evidence process, or three agents that all missed the same fact.</p><p>The stored forecast record should contain the question, resolution source, cutoff, evidence references, agent forecasts, aggregate, supervisor action, calibration setting, model configuration, market or base-rate baseline, final probability, outcome, and score.</p><h2>What the notebooks show</h2><p>The Chapter 24 notebooks include weak results rather than only clean demonstrations to show the reality of agent system development (notebooks will be released closer to publication, late June/early July).</p><p>In the notebook <code>research_agent</code>, two identical research agents working on the same Fed-rate question returned 0.75 and 0.72. In the notebook <code>multi_agent_research</code>, three agents on a pinned Fed-hike question all returned 0.25, even though their search paths differed slightly. Temperature alone did not create an informative panel.</p><p>In the notebook <code>aggregation_math</code>, the diversity factor makes the cost of correlation explicit. Adding agents helps only if they bring different information. If they share the same model, tools, retrieval sources, and priors, the panel can appear broad while behaving like a single repeated forecast.</p><p>In <code>adversarial_debate</code>, debate lengthened the trace without narrowing the gap. The notebook shows why debate needs an ablation rather than just a transcript. If the debate does not move beliefs, reveal missing evidence, or improve resolved-outcome scores, it is theater with a token bill.</p><p>In <code>evaluation_and_governance</code>, the evaluation panel compares the pipeline with simpler variants using Brier score, log score, expected calibration error, sharpness, ablations, and a market baseline. The panel is small and carries contamination caveats, so it illustrates the scoring workflow rather than a performance claim.</p><p>The design rule is simple: keep a component only when it improves the forecast record, the diagnosis, or the evaluation.</p><h2>What adjacent work adds</h2><p>The relevant papers add design lessons rather than slogans.</p><p>Bridgewater&#8217;s AIA Forecaster supplies the forecasting blueprint: agentic search, multiple independent forecasts, supervisor reconciliation, calibration, and comparison with market consensus.</p><p><a href="https://doi.org/10.48550/arXiv.2508.11152">AlphaAgents</a> matters here less for its reported portfolio results than for its role-structured design: fundamental, sentiment, and valuation agents with debate as the reconciliation mechanism.</p><p><a href="https://doi.org/10.48550/arXiv.2512.08296">Recent work on scaling agent systems</a> makes the general point explicit: more agents can help on decomposable tasks and hurt on sequential ones. Coordination overhead, redundancy, and error amplification are design variables.</p><h2>Where the pattern fits</h2><p>The workshop uses forecasting because the work is measurable. That does not make forecasting a universal test case for agents.</p><p>Sequential execution tasks usually need a workflow, not a panel of agents. A deterministic data-cleaning step, for example, should not become a debate among models. Evidence-gathering tasks may require one strong research agent at first, but several later. Multi-agent design becomes more plausible when the task has competing interpretations, missing evidence, and a decision artifact that can be compared with a baseline.</p><p>Forecasting gives that problem a disciplined form. The artifact is a probability. The baseline may be a market price, base rate, consensus forecast, or simpler model. The outcome eventually resolves. The system can be wrong in a measurable way.</p><p>That is why this topic belongs in <a href="https://www.ml4trading.io/">ML4T</a>. It is close enough to trading and research to matter, but constrained enough to evaluate.</p><h2>What we are building</h2><p>The companion forecasting-agent codebase turns the AIA pattern into a runnable system, including a CLI, configuration profiles, read-only prediction-market connectors, SQLite persistence, a Streamlit dashboard, deterministic replay mode, local and hosted model profiles, and ablation settings.</p><p>The free <a href="https://maven.com/p/6c2609/build-multi-agent-systems-you-can-audit">Lightning Lesson</a> on <strong>Thursday, June 18, 2026,</strong> walks through this architecture: independent research agents, aggregation, supervisor reconciliation, calibration, and scoring. The practical goal is to inspect, test, ablate, and score the system rather than trust the final paragraph.</p><p>The full <a href="https://maven.com/stefan-jansen/forecasting-agents">hands-on workshop</a>, Building Multi-Agent Forecasting Systems, runs Saturday, June 27, 2026, 10am-5pm ET. Participants work with config profiles, replay traces, aggregation settings, supervisor policy, calibration diagnostics, and resolved-outcome scores. The guaranteed path uses deterministic replay, so the exercises do not depend on API keys or live network access. The connectors are read-only.</p><p>Use five questions to judge the result:</p><ul><li><p>Did independent agents produce independent evidence?</p></li><li><p>Did aggregation improve on the simple mean?</p></li><li><p>Did the supervisor find missing evidence or merely override?</p></li><li><p>Did calibration improve reliability without hiding a weak evidence process?</p></li><li><p>Did the system improve on a market price, base rate, or simpler model?</p></li></ul><p>Tomorrow&#8217;s issue uses the World Cup Forecast Lab as a public forecasting surface. Later issues go deeper into AIA Forecaster, multi-agent diversity, and the ML4T research operator.</p><p><a href="https://maven.com/p/6c2609/build-multi-agent-systems-you-can-audit">Register for the free Lightning Lesson: Build Multi-Agent Systems You Can Audit</a></p><p><a href="https://maven.com/stefan-jansen/forecasting-agents">Register for the workshop: Building Multi-Agent Forecasting Systems</a></p>]]></content:encoded></item></channel></rss>