<?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"><channel><title><![CDATA[Arhan Canli]]></title><description><![CDATA[What public companies actually report, how AI answers finance questions, and statistics that tell skill from luck. Every number links to its source.]]></description><link>https://arhancanli.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Sat, 07 Nov 2026 10:05:32 GMT</lastBuildDate><atom:link href="https://arhancanli.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[What is lookahead bias in fundamental data?]]></title><description><![CDATA[Lookahead bias is when a backtest uses a number before anyone could have known it.]]></description><link>https://arhancanli.hashnode.dev/what-is-lookahead-bias-in-fundamental-data</link><guid isPermaLink="true">https://arhancanli.hashnode.dev/what-is-lookahead-bias-in-fundamental-data</guid><category><![CDATA[finance]]></category><category><![CDATA[Data Science]]></category><category><![CDATA[Investing]]></category><category><![CDATA[#Stock market]]></category><category><![CDATA[Machine Learning]]></category><dc:creator><![CDATA[Arhan Canli]]></dc:creator><pubDate>Fri, 06 Nov 2026 15:12:38 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/gql/6abaa9d683e0d47b672b3231/e9196568-74f3-4d5b-98d5-7cf19e861852.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Lookahead bias is when a backtest uses a number before anyone could have known it. In fundamental data it often happens without any bug in your code, because the value you download today is not always the value people saw then.</p>
<p>I build free tools for this, so weigh that. Updated 2 November 2026.</p>
<h2>Two real cases</h2>
<p><strong>A split rewrites history.</strong> Apple's diluted EPS for fiscal 2018 was 11.91 in its annual reports for 2018 and 2019, and 2.98 in the 2020 report, after its 4-for-1 split. A test of a 2018 decision that reads today's figure uses a number nobody saw in 2018.</p>
<p><strong>A spin-off rewrites the balance sheet.</strong> Aptiv separated a business on April 1, 2026, and its later report shows that business as discontinued in every period. Year-end cash went from $1.85 billion to $1.58 billion. From February to August 2026, every Aptiv filing put that cash at $1.85 billion. A test of a decision made in March should use $1.85 billion.</p>
<p>These are ordinary changes, not errors. The number changed for a good reason, and your data source may only keep the newest one.</p>
<h2>How often it happens</h2>
<p>I compared 3,250 figures from the latest annual reports of the 500 companies held by VOO, each reached by separate code from separate SEC files. Nine disagreed, at six companies, and I opened the later filing behind all nine. None of them describes fixing a mistake. <a href="https://canlicapital.com/notes/the-year-end-numbers-that-changed">The full list</a> says what each one did.</p>
<p>That covers seven headline figures in one annual report. Look at every reported line and many more can move. For Becton Dickinson, which spun off a business this year, 661 of 4,329 annual values in the SEC's company facts have changed since first being reported.</p>
<h2>How to avoid it</h2>
<ol>
<li>Use the date a figure was filed, not the date of the period it describes. An annual figure filed in February cannot inform a January decision.</li>
<li>Use the value as first reported, or as it stood on your decision date, not the latest one.</li>
<li>Treat a value as known from the next trading day after filing.</li>
<li>Keep a record of which filing each number came from, so you can check it.</li>
</ol>
<h2>A free way to do it</h2>
<p>SEC data has what you need, because each filing keeps its date. <a href="https://canlicapital.com/mcp-servers/fundamentals">canli-fundamentals-mcp</a> answers three questions for any reported value: what was first reported, what the latest filing says, and what was known on a given date. It costs $0. <a href="https://canlicapital.com/mcp-servers/backtest">canli-backtest-mcp</a> builds factors the same way and stops a backtest that reaches past its lag.</p>
<p>None of this makes a strategy work. It removes one way a backtest flatters itself.</p>
]]></content:encoded></item><item><title><![CDATA[Do companies usually beat their own guidance?]]></title><description><![CDATA[Yes. Among S&P 500 companies that give a numeric range in their results releases, the result landed above that range far more often than below it.]]></description><link>https://arhancanli.hashnode.dev/how-often-companies-beat-their-guidance</link><guid isPermaLink="true">https://arhancanli.hashnode.dev/how-often-companies-beat-their-guidance</guid><category><![CDATA[finance]]></category><category><![CDATA[Investing]]></category><category><![CDATA[#Stock market]]></category><category><![CDATA[Data Science]]></category><category><![CDATA[fintech]]></category><dc:creator><![CDATA[Arhan Canli]]></dc:creator><pubDate>Thu, 05 Nov 2026 15:10:06 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/gql/6abaa9d683e0d47b672b3231/2936cbc3-45ec-4d96-b34c-d51eb35538d8.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Yes. Among S&amp;P 500 companies that give a numeric range in their results releases, the result landed above that range far more often than below it. Revenue came in above 170 times and below 13 times. Earnings per share came in above 259 times and below 24 times. I built the free tool I used, so weigh that.</p>
<p>Updated 2 November 2026.</p>
<h2>What the counts say</h2>
<p>I read the results press releases of the 500 companies held by VOO, up to 12 quarters each, and set each guide against the next release. These counts are for companies with at least 4 guided quarters, where the guide was a range:</p>
<table>
<thead>
<tr>
<th>Measure</th>
<th>Guided quarters</th>
<th>Above the range</th>
<th>Within it</th>
<th>Below it</th>
</tr>
</thead>
<tbody><tr>
<td>Revenue</td>
<td>341</td>
<td>170 (49.9%)</td>
<td>158 (46.3%)</td>
<td>13 (3.8%)</td>
</tr>
<tr>
<td>Earnings per share</td>
<td>414</td>
<td>259 (62.6%)</td>
<td>131 (31.6%)</td>
<td>24 (5.8%)</td>
</tr>
</tbody></table>
<p>37 of 47 companies never fell short on revenue in what I read, and 35 of 54 never fell short on earnings per share.</p>
<h2>How to read a beat</h2>
<p>The company picks the range, and then it reports against it. So a beat is the usual result for a company that guides, and on its own it says little. A company that nearly always beats may simply set its range low. A result above guidance is also not the same as a result above what other people expected, and I did not measure what the share price did next.</p>
<h2>What this leaves out</h2>
<ul>
<li>Most companies are missing. Only 140 of the 498 I could read had a figure in their releases that could be matched. Apple has no line here, for example.</li>
<li>It covers companies in the index today, so ones that fell out after bad years are missing.</li>
<li>It covers guidance in the release itself, not on a call.</li>
<li>A program read it by rules. My random hand checks kept finding bugs, such as a range split across two lines and sales volumes read as revenue. I fixed those, and the last sample had 29 of 30 lines right. So expect a small share of lines to be wrong.</li>
</ul>
<h2>Check it yourself</h2>
<p><a href="https://canlicapital.com/notes/how-often-companies-beat-their-guidance">The full note</a> has a row for every company and a link to each release. To run one company yourself, connect <a href="https://canlicapital.com/mcp-servers">canli-mcp</a>, which costs $0, and ask your assistant how often that company has beaten its guidance.</p>
<p>This is a record of what was said and what came, not a forecast and not advice.</p>
]]></content:encoded></item></channel></rss>