Files
2026-07-13 13:26:28 +08:00

2526 lines
136 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"cells": [
{
"cell_type": "markdown",
"id": "ce1323ac",
"metadata": {
"papermill": {
"duration": 0.001474,
"end_time": "2026-06-13T03:10:15.448687+00:00",
"exception": false,
"start_time": "2026-06-13T03:10:15.447213+00:00",
"status": "completed"
}
},
"source": [
"# SEC XBRL Fundamentals\n",
"\n",
"**Chapter 4: Fundamental and Alternative Data**\n",
"**Docker image**: `ml4t`\n",
"\n",
"This notebook analyzes quarterly fundamental data fetched by the canonical\n",
"downloader `data/equities/fundamentals/xbrl_download.py` from the SEC EDGAR XBRL\n",
"Frames API, for use in downstream factor engineering (Chapter 6).\n",
"\n",
"## Why Direct API vs edgartools?\n",
"\n",
"The `02_sec_filing_explorer.py` notebook demonstrates using the edgartools library for\n",
"**individual company analysis**: exploring filings, extracting financial statements,\n",
"and parsing 13F holdings. edgartools is excellent for deep dives into specific companies.\n",
"\n",
"This notebook takes a different approach: **bulk data retrieval** using the SEC's\n",
"XBRL Frames API, which provides aggregated data across all filers in a single request.\n",
"This is more efficient for building cross-sectional fundamental datasets.\n",
"\n",
"| Use Case | Best Tool |\n",
"|----------|-----------|\n",
"| Analyze a single company's filings | `02_sec_filing_explorer.py` |\n",
"| Build factor dataset for 20+ stocks | This notebook (XBRL Frames API) |\n",
"| Parse complex filing documents | `02_sec_filing_explorer.py` |\n",
"| Get quarterly aggregates across market | This notebook (XBRL Frames API) |\n",
"\n",
"## Point-in-Time (PIT) Correctness\n",
"\n",
"**Critical**: Fundamental data for backtesting must reflect only information\n",
"available at each historical date. Using fiscal quarter end dates causes\n",
"look-ahead bias because filings are released 30-60 days later.\n",
"\n",
"The downloader joins **filing dates** from the SEC Submissions API onto the\n",
"XBRL frames so each row carries both `fiscal_quarter_end` (valid time) and\n",
"`announcement_date` (knowledge time):\n",
"\n",
"| Date Type | Usage |\n",
"|-----------|-------|\n",
"| `fiscal_quarter_end` | Period the data describes (e.g., 2024-03-31) |\n",
"| `announcement_date` | When SEC filing was submitted (e.g., 2024-05-02) |\n",
"\n",
"For backtesting, use `announcement_date` as the point when data becomes available.\n",
"\n",
"## Data Sources\n",
"\n",
"The downloader uses two free, public SEC EDGAR APIs (no vendor subscription):\n",
"\n",
"1. **XBRL Frames API** — aggregated financial data across all filers:\n",
" `https://data.sec.gov/api/xbrl/frames/{taxonomy}/{concept}/{unit}/{period}.json`\n",
"\n",
" **CY vs FY Frames**: The API uses **CY** (calendar year) quarters, not fiscal year.\n",
" This is intentional: CY frames provide cross-sectional snapshots where all companies\n",
" report the same calendar period, enabling apples-to-apples comparisons.\n",
" Companies with non-calendar fiscal years (e.g., MSFT ends June 30) have their\n",
" data mapped to the appropriate CY quarter.\n",
"\n",
"2. **Submissions API** — per-company filing metadata cached per CIK on first\n",
" fetch so re-runs do not re-hit the endpoint:\n",
" `https://data.sec.gov/submissions/CIK{cik}.json`\n",
"\n",
"## Downloader\n",
"\n",
"```bash\n",
"# 20 large-cap US equities × 2022-2024 × 11 standard concepts (~2-3 min)\n",
"uv run python data/equities/fundamentals/xbrl_download.py\n",
"\n",
"# Custom year range or CIK list\n",
"uv run python data/equities/fundamentals/xbrl_download.py --years 2020,2021,2022,2023,2024\n",
"uv run python data/equities/fundamentals/xbrl_download.py --ciks 320193\n",
"```\n",
"\n",
"The loader raises `DataNotFoundError` with the exact command if the parquet\n",
"is missing — no hidden HTTP calls inside the notebook.\n",
"\n",
"## Cross-Reference\n",
"\n",
"- **Related**: `02_sec_filing_explorer.py` (individual company SEC filings)\n",
"- **Downstream**: Chapter 8 `04_fundamentals_macro_calendar.py` (factor engineering)"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "fd3b265a",
"metadata": {
"execution": {
"iopub.execute_input": "2026-06-13T03:10:15.451857Z",
"iopub.status.busy": "2026-06-13T03:10:15.451749Z",
"iopub.status.idle": "2026-06-13T03:10:16.959738Z",
"shell.execute_reply": "2026-06-13T03:10:16.959153Z"
},
"papermill": {
"duration": 1.510552,
"end_time": "2026-06-13T03:10:16.960675+00:00",
"exception": false,
"start_time": "2026-06-13T03:10:15.450123+00:00",
"status": "completed"
}
},
"outputs": [],
"source": [
"\"\"\"SEC XBRL Fundamentals — analyze quarterly fundamentals from the canonical xbrl_download.py output.\"\"\"\n",
"\n",
"import plotly.graph_objects as go\n",
"import polars as pl\n",
"\n",
"from data import load_sec_xbrl_fundamentals\n",
"from utils.style import COLORS"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "0e6bba02",
"metadata": {
"execution": {
"iopub.execute_input": "2026-06-13T03:10:16.964451Z",
"iopub.status.busy": "2026-06-13T03:10:16.964299Z",
"iopub.status.idle": "2026-06-13T03:10:16.965961Z",
"shell.execute_reply": "2026-06-13T03:10:16.965709Z"
},
"papermill": {
"duration": 0.00363,
"end_time": "2026-06-13T03:10:16.966290+00:00",
"exception": false,
"start_time": "2026-06-13T03:10:16.962660+00:00",
"status": "completed"
},
"tags": [
"parameters"
]
},
"outputs": [],
"source": [
"# Production defaults — Papermill injects overrides for CI\n",
"MAX_SYMBOLS = 0 # 0 = all"
]
},
{
"cell_type": "markdown",
"id": "d678d9d7",
"metadata": {
"papermill": {
"duration": 0.000947,
"end_time": "2026-06-13T03:10:16.968274+00:00",
"exception": false,
"start_time": "2026-06-13T03:10:16.967327+00:00",
"status": "completed"
}
},
"source": [
"## 1. Load the Fundamentals Panel\n",
"\n",
"The canonical downloader ships a default universe of 20 large-cap US equities\n",
"across 2022-2024 with 11 standard us-gaap concepts. Here we load the full panel\n",
"and inspect the schema."
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "7caf492a",
"metadata": {
"execution": {
"iopub.execute_input": "2026-06-13T03:10:16.970690Z",
"iopub.status.busy": "2026-06-13T03:10:16.970619Z",
"iopub.status.idle": "2026-06-13T03:10:16.989292Z",
"shell.execute_reply": "2026-06-13T03:10:16.988935Z"
},
"papermill": {
"duration": 0.020393,
"end_time": "2026-06-13T03:10:16.989673+00:00",
"exception": false,
"start_time": "2026-06-13T03:10:16.969280+00:00",
"status": "completed"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Rows: 240\n",
"CIKs: 20\n",
"Symbols: 20\n",
"Quarters: 49\n",
"Columns: ['symbol', 'cik', 'entity_name', 'fiscal_quarter_end', 'announcement_date', 'accession', 'assets', 'cashandcashequivalentsatcarryingvalue', 'grossprofit', 'liabilities', 'longtermdebt', 'netcashprovidedbyusedinoperatingactivities', 'netincomeloss', 'operatingincomeloss', 'paymentstoacquirepropertyplantandequipment', 'revenues', 'stockholdersequity']\n"
]
}
],
"source": [
"fundamentals = load_sec_xbrl_fundamentals()\n",
"\n",
"print(f\"Rows: {len(fundamentals):,}\")\n",
"print(f\"CIKs: {fundamentals.select('cik').n_unique()}\")\n",
"print(f\"Symbols: {fundamentals.select('symbol').n_unique()}\")\n",
"print(f\"Quarters: {fundamentals.select('fiscal_quarter_end').n_unique()}\")\n",
"print(f\"Columns: {fundamentals.columns}\")"
]
},
{
"cell_type": "markdown",
"id": "2abe3a6e",
"metadata": {
"papermill": {
"duration": 0.001033,
"end_time": "2026-06-13T03:10:16.991902+00:00",
"exception": false,
"start_time": "2026-06-13T03:10:16.990869+00:00",
"status": "completed"
}
},
"source": [
"Balance-sheet sample (8 rows):"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "2757b13a",
"metadata": {
"execution": {
"iopub.execute_input": "2026-06-13T03:10:16.994370Z",
"iopub.status.busy": "2026-06-13T03:10:16.994294Z",
"iopub.status.idle": "2026-06-13T03:10:16.999187Z",
"shell.execute_reply": "2026-06-13T03:10:16.998860Z"
},
"papermill": {
"duration": 0.006725,
"end_time": "2026-06-13T03:10:16.999667+00:00",
"exception": false,
"start_time": "2026-06-13T03:10:16.992942+00:00",
"status": "completed"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div><style>\n",
".dataframe > thead > tr,\n",
".dataframe > tbody > tr {\n",
" text-align: right;\n",
" white-space: pre-wrap;\n",
"}\n",
"</style>\n",
"<small>shape: (8, 7)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>symbol</th><th>entity_name</th><th>fiscal_quarter_end</th><th>announcement_date</th><th>assets</th><th>liabilities</th><th>stockholdersequity</th></tr><tr><td>str</td><td>str</td><td>date</td><td>date</td><td>i64</td><td>i64</td><td>i64</td></tr></thead><tbody><tr><td>&quot;AAPL&quot;</td><td>&quot;Apple Inc.&quot;</td><td>2022-03-26</td><td>2022-04-29</td><td>350662000000</td><td>283263000000</td><td>67399000000</td></tr><tr><td>&quot;AAPL&quot;</td><td>&quot;Apple Inc.&quot;</td><td>2022-06-25</td><td>2022-07-29</td><td>336309000000</td><td>278202000000</td><td>58107000000</td></tr><tr><td>&quot;AAPL&quot;</td><td>&quot;Apple Inc.&quot;</td><td>2022-09-24</td><td>2023-11-03</td><td>352755000000</td><td>302083000000</td><td>50672000000</td></tr><tr><td>&quot;AAPL&quot;</td><td>&quot;Apple Inc.&quot;</td><td>2022-12-31</td><td>2023-02-03</td><td>346747000000</td><td>290020000000</td><td>56727000000</td></tr><tr><td>&quot;AAPL&quot;</td><td>&quot;Apple Inc.&quot;</td><td>2023-04-01</td><td>2023-05-05</td><td>332160000000</td><td>270002000000</td><td>62158000000</td></tr><tr><td>&quot;AAPL&quot;</td><td>&quot;Apple Inc.&quot;</td><td>2023-07-01</td><td>2023-08-04</td><td>335038000000</td><td>274764000000</td><td>60274000000</td></tr><tr><td>&quot;AAPL&quot;</td><td>&quot;Apple Inc.&quot;</td><td>2023-09-30</td><td>2024-11-01</td><td>352583000000</td><td>290437000000</td><td>62146000000</td></tr><tr><td>&quot;AAPL&quot;</td><td>&quot;Apple Inc.&quot;</td><td>2023-12-30</td><td>2024-02-02</td><td>353514000000</td><td>279414000000</td><td>74100000000</td></tr></tbody></table></div>"
],
"text/plain": [
"shape: (8, 7)\n",
"┌────────┬─────────────┬───────────────┬──────────────┬──────────────┬──────────────┬──────────────┐\n",
"│ symbol ┆ entity_name ┆ fiscal_quarte ┆ announcement ┆ assets ┆ liabilities ┆ stockholders │\n",
"│ --- ┆ --- ┆ r_end ┆ _date ┆ --- ┆ --- ┆ equity │\n",
"│ str ┆ str ┆ --- ┆ --- ┆ i64 ┆ i64 ┆ --- │\n",
"│ ┆ ┆ date ┆ date ┆ ┆ ┆ i64 │\n",
"╞════════╪═════════════╪═══════════════╪══════════════╪══════════════╪══════════════╪══════════════╡\n",
"│ AAPL ┆ Apple Inc. ┆ 2022-03-26 ┆ 2022-04-29 ┆ 350662000000 ┆ 283263000000 ┆ 67399000000 │\n",
"│ AAPL ┆ Apple Inc. ┆ 2022-06-25 ┆ 2022-07-29 ┆ 336309000000 ┆ 278202000000 ┆ 58107000000 │\n",
"│ AAPL ┆ Apple Inc. ┆ 2022-09-24 ┆ 2023-11-03 ┆ 352755000000 ┆ 302083000000 ┆ 50672000000 │\n",
"│ AAPL ┆ Apple Inc. ┆ 2022-12-31 ┆ 2023-02-03 ┆ 346747000000 ┆ 290020000000 ┆ 56727000000 │\n",
"│ AAPL ┆ Apple Inc. ┆ 2023-04-01 ┆ 2023-05-05 ┆ 332160000000 ┆ 270002000000 ┆ 62158000000 │\n",
"│ AAPL ┆ Apple Inc. ┆ 2023-07-01 ┆ 2023-08-04 ┆ 335038000000 ┆ 274764000000 ┆ 60274000000 │\n",
"│ AAPL ┆ Apple Inc. ┆ 2023-09-30 ┆ 2024-11-01 ┆ 352583000000 ┆ 290437000000 ┆ 62146000000 │\n",
"│ AAPL ┆ Apple Inc. ┆ 2023-12-30 ┆ 2024-02-02 ┆ 353514000000 ┆ 279414000000 ┆ 74100000000 │\n",
"└────────┴─────────────┴───────────────┴──────────────┴──────────────┴──────────────┴──────────────┘"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"balance_cols = [\n",
" c\n",
" for c in [\n",
" \"symbol\",\n",
" \"entity_name\",\n",
" \"fiscal_quarter_end\",\n",
" \"announcement_date\",\n",
" \"assets\",\n",
" \"liabilities\",\n",
" \"stockholdersequity\",\n",
" ]\n",
" if c in fundamentals.columns\n",
"]\n",
"fundamentals.select(balance_cols).head(8)"
]
},
{
"cell_type": "markdown",
"id": "7cf3df44",
"metadata": {
"papermill": {
"duration": 0.001054,
"end_time": "2026-06-13T03:10:17.001891+00:00",
"exception": false,
"start_time": "2026-06-13T03:10:17.000837+00:00",
"status": "completed"
}
},
"source": [
"Income + cash-flow sample (8 rows). `revenues` is sparse here because Apple and several\n",
"other large filers report under the post-ASC-606 concept\n",
"`RevenueFromContractWithCustomerExcludingAssessedTax`, which the canonical downloader\n",
"pulls into a separate column rather than filling `revenues`."
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "c2d15fcf",
"metadata": {
"execution": {
"iopub.execute_input": "2026-06-13T03:10:17.004534Z",
"iopub.status.busy": "2026-06-13T03:10:17.004417Z",
"iopub.status.idle": "2026-06-13T03:10:17.007202Z",
"shell.execute_reply": "2026-06-13T03:10:17.006973Z"
},
"papermill": {
"duration": 0.004543,
"end_time": "2026-06-13T03:10:17.007477+00:00",
"exception": false,
"start_time": "2026-06-13T03:10:17.002934+00:00",
"status": "completed"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div><style>\n",
".dataframe > thead > tr,\n",
".dataframe > tbody > tr {\n",
" text-align: right;\n",
" white-space: pre-wrap;\n",
"}\n",
"</style>\n",
"<small>shape: (8, 6)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>symbol</th><th>fiscal_quarter_end</th><th>announcement_date</th><th>revenues</th><th>netincomeloss</th><th>netcashprovidedbyusedinoperatingactivities</th></tr><tr><td>str</td><td>date</td><td>date</td><td>i64</td><td>i64</td><td>i64</td></tr></thead><tbody><tr><td>&quot;AAPL&quot;</td><td>2022-03-26</td><td>2022-04-29</td><td>null</td><td>25010000000</td><td>null</td></tr><tr><td>&quot;AAPL&quot;</td><td>2022-06-25</td><td>2022-07-29</td><td>null</td><td>19442000000</td><td>null</td></tr><tr><td>&quot;AAPL&quot;</td><td>2022-09-24</td><td>2023-11-03</td><td>null</td><td>null</td><td>null</td></tr><tr><td>&quot;AAPL&quot;</td><td>2022-12-31</td><td>2023-02-03</td><td>null</td><td>29998000000</td><td>34005000000</td></tr><tr><td>&quot;AAPL&quot;</td><td>2023-04-01</td><td>2023-05-05</td><td>null</td><td>24160000000</td><td>null</td></tr><tr><td>&quot;AAPL&quot;</td><td>2023-07-01</td><td>2023-08-04</td><td>null</td><td>19881000000</td><td>null</td></tr><tr><td>&quot;AAPL&quot;</td><td>2023-09-30</td><td>2024-11-01</td><td>null</td><td>null</td><td>null</td></tr><tr><td>&quot;AAPL&quot;</td><td>2023-12-30</td><td>2024-02-02</td><td>null</td><td>33916000000</td><td>39895000000</td></tr></tbody></table></div>"
],
"text/plain": [
"shape: (8, 6)\n",
"┌────────┬────────────────────┬───────────────────┬──────────┬───────────────┬─────────────────────┐\n",
"│ symbol ┆ fiscal_quarter_end ┆ announcement_date ┆ revenues ┆ netincomeloss ┆ netcashprovidedbyus │\n",
"│ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ edinoperati… │\n",
"│ str ┆ date ┆ date ┆ i64 ┆ i64 ┆ --- │\n",
"│ ┆ ┆ ┆ ┆ ┆ i64 │\n",
"╞════════╪════════════════════╪═══════════════════╪══════════╪═══════════════╪═════════════════════╡\n",
"│ AAPL ┆ 2022-03-26 ┆ 2022-04-29 ┆ null ┆ 25010000000 ┆ null │\n",
"│ AAPL ┆ 2022-06-25 ┆ 2022-07-29 ┆ null ┆ 19442000000 ┆ null │\n",
"│ AAPL ┆ 2022-09-24 ┆ 2023-11-03 ┆ null ┆ null ┆ null │\n",
"│ AAPL ┆ 2022-12-31 ┆ 2023-02-03 ┆ null ┆ 29998000000 ┆ 34005000000 │\n",
"│ AAPL ┆ 2023-04-01 ┆ 2023-05-05 ┆ null ┆ 24160000000 ┆ null │\n",
"│ AAPL ┆ 2023-07-01 ┆ 2023-08-04 ┆ null ┆ 19881000000 ┆ null │\n",
"│ AAPL ┆ 2023-09-30 ┆ 2024-11-01 ┆ null ┆ null ┆ null │\n",
"│ AAPL ┆ 2023-12-30 ┆ 2024-02-02 ┆ null ┆ 33916000000 ┆ 39895000000 │\n",
"└────────┴────────────────────┴───────────────────┴──────────┴───────────────┴─────────────────────┘"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"flow_cols = [\n",
" c\n",
" for c in [\n",
" \"symbol\",\n",
" \"fiscal_quarter_end\",\n",
" \"announcement_date\",\n",
" \"revenues\",\n",
" \"netincomeloss\",\n",
" \"netcashprovidedbyusedinoperatingactivities\",\n",
" ]\n",
" if c in fundamentals.columns\n",
"]\n",
"fundamentals.select(flow_cols).head(8)"
]
},
{
"cell_type": "markdown",
"id": "f54ec941",
"metadata": {
"papermill": {
"duration": 0.001109,
"end_time": "2026-06-13T03:10:17.009899+00:00",
"exception": false,
"start_time": "2026-06-13T03:10:17.008790+00:00",
"status": "completed"
}
},
"source": [
"## 2. Data Coverage\n",
"\n",
"Not every concept is reported by every company every quarter. Banks and\n",
"some post-ASC-606 filers (e.g. AAPL, MSFT) report revenue under other\n",
"concepts like `RevenueFromContractWithCustomerExcludingAssessedTax`\n",
"rather than `Revenues`. Visualize coverage to understand the gaps before\n",
"using this data downstream."
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "09cf3a0e",
"metadata": {
"execution": {
"iopub.execute_input": "2026-06-13T03:10:17.012593Z",
"iopub.status.busy": "2026-06-13T03:10:17.012531Z",
"iopub.status.idle": "2026-06-13T03:10:17.020859Z",
"shell.execute_reply": "2026-06-13T03:10:17.020476Z"
},
"papermill": {
"duration": 0.010206,
"end_time": "2026-06-13T03:10:17.021235+00:00",
"exception": false,
"start_time": "2026-06-13T03:10:17.011029+00:00",
"status": "completed"
}
},
"outputs": [],
"source": [
"coverage_df = (\n",
" fundamentals.with_columns(\n",
" (\n",
" pl.col(\"fiscal_quarter_end\").dt.year().cast(pl.Utf8)\n",
" + \"Q\"\n",
" + ((pl.col(\"fiscal_quarter_end\").dt.month() - 1) // 3 + 1).cast(pl.Utf8)\n",
" ).alias(\"quarter\")\n",
" )\n",
" .group_by([\"symbol\", \"quarter\"])\n",
" .agg(\n",
" pl.col(\"assets\").is_not_null().sum().alias(\"assets_available\"),\n",
" )\n",
")\n",
"\n",
"coverage_pivot = coverage_df.pivot(\n",
" on=\"quarter\", index=\"symbol\", values=\"assets_available\"\n",
").fill_null(0)\n",
"\n",
"symbols = coverage_pivot[\"symbol\"].to_list()\n",
"quarters = sorted([c for c in coverage_pivot.columns if c != \"symbol\"])\n",
"\n",
"matrix = []\n",
"for symbol in symbols:\n",
" row = coverage_pivot.filter(pl.col(\"symbol\") == symbol)\n",
" values = [int(row[q].item()) if q in row.columns else 0 for q in quarters]\n",
" matrix.append(values)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "590d559e",
"metadata": {
"execution": {
"iopub.execute_input": "2026-06-13T03:10:17.024110Z",
"iopub.status.busy": "2026-06-13T03:10:17.024048Z",
"iopub.status.idle": "2026-06-13T03:10:17.910529Z",
"shell.execute_reply": "2026-06-13T03:10:17.910006Z"
},
"papermill": {
"duration": 0.888696,
"end_time": "2026-06-13T03:10:17.911185+00:00",
"exception": false,
"start_time": "2026-06-13T03:10:17.022489+00:00",
"status": "completed"
}
},
"outputs": [
{
"data": {
"application/vnd.plotly.v1+json": {
"config": {
"plotlyServerURL": "https://plot.ly"
},
"data": [
{
"colorscale": [
[
0,
"#F8F8F6"
],
[
1,
"#0a1628"
]
],
"showscale": false,
"text": [
[
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
""
],
[
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
""
],
[
"1",
"1",
"1",
"1",
"",
"1",
"2",
"1",
"1",
"1",
"1",
"1",
""
],
[
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
""
],
[
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
""
],
[
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
""
],
[
"1",
"1",
"1",
"1",
"",
"1",
"2",
"1",
"1",
"1",
"1",
"1",
""
],
[
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
""
],
[
"",
"1",
"2",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
""
],
[
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
""
],
[
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
""
],
[
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
""
],
[
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
""
],
[
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
""
],
[
"",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1"
],
[
"",
"1",
"1",
"2",
"",
"1",
"1",
"2",
"1",
"1",
"1",
"1",
""
],
[
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
""
],
[
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
""
],
[
"",
"1",
"1",
"1",
"1",
"1",
"1",
"2",
"1",
"1",
"1",
"1",
""
],
[
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
"1",
""
]
],
"textfont": {
"size": 10
},
"texttemplate": "%{text}",
"type": "heatmap",
"x": [
"2022Q1",
"2022Q2",
"2022Q3",
"2022Q4",
"2023Q1",
"2023Q2",
"2023Q3",
"2023Q4",
"2024Q1",
"2024Q2",
"2024Q3",
"2024Q4",
"2025Q1"
],
"y": [
"TSLA",
"GS",
"AMD",
"XOM",
"V",
"META",
"AAPL",
"ABT",
"KO",
"GOOGL",
"IBM",
"AMZN",
"JPM",
"COST",
"NVDA",
"PFE",
"BAC",
"CVX",
"JNJ",
"MSFT"
],
"z": [
[
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
0
],
[
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
0
],
[
1,
1,
1,
1,
0,
1,
2,
1,
1,
1,
1,
1,
0
],
[
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
0
],
[
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
0
],
[
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
0
],
[
1,
1,
1,
1,
0,
1,
2,
1,
1,
1,
1,
1,
0
],
[
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
0
],
[
0,
1,
2,
1,
1,
1,
1,
1,
1,
1,
1,
1,
0
],
[
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
0
],
[
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
0
],
[
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
0
],
[
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
0
],
[
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
0
],
[
0,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1
],
[
0,
1,
1,
2,
0,
1,
1,
2,
1,
1,
1,
1,
0
],
[
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
0
],
[
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
0
],
[
0,
1,
1,
1,
1,
1,
1,
2,
1,
1,
1,
1,
0
],
[
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
0
]
]
}
],
"layout": {
"height": 600,
"template": {
"data": {
"bar": [
{
"error_x": {
"color": "#2a3f5f"
},
"error_y": {
"color": "#2a3f5f"
},
"marker": {
"line": {
"color": "white",
"width": 0.5
},
"pattern": {
"fillmode": "overlay",
"size": 10,
"solidity": 0.2
}
},
"type": "bar"
}
],
"barpolar": [
{
"marker": {
"line": {
"color": "white",
"width": 0.5
},
"pattern": {
"fillmode": "overlay",
"size": 10,
"solidity": 0.2
}
},
"type": "barpolar"
}
],
"carpet": [
{
"aaxis": {
"endlinecolor": "#2a3f5f",
"gridcolor": "#C8D4E3",
"linecolor": "#C8D4E3",
"minorgridcolor": "#C8D4E3",
"startlinecolor": "#2a3f5f"
},
"baxis": {
"endlinecolor": "#2a3f5f",
"gridcolor": "#C8D4E3",
"linecolor": "#C8D4E3",
"minorgridcolor": "#C8D4E3",
"startlinecolor": "#2a3f5f"
},
"type": "carpet"
}
],
"choropleth": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"type": "choropleth"
}
],
"contour": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0.0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1.0,
"#f0f921"
]
],
"type": "contour"
}
],
"contourcarpet": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"type": "contourcarpet"
}
],
"heatmap": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0.0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1.0,
"#f0f921"
]
],
"type": "heatmap"
}
],
"histogram": [
{
"marker": {
"pattern": {
"fillmode": "overlay",
"size": 10,
"solidity": 0.2
}
},
"type": "histogram"
}
],
"histogram2d": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0.0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1.0,
"#f0f921"
]
],
"type": "histogram2d"
}
],
"histogram2dcontour": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0.0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1.0,
"#f0f921"
]
],
"type": "histogram2dcontour"
}
],
"mesh3d": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"type": "mesh3d"
}
],
"parcoords": [
{
"line": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "parcoords"
}
],
"pie": [
{
"automargin": true,
"type": "pie"
}
],
"scatter": [
{
"fillpattern": {
"fillmode": "overlay",
"size": 10,
"solidity": 0.2
},
"type": "scatter"
}
],
"scatter3d": [
{
"line": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scatter3d"
}
],
"scattercarpet": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scattercarpet"
}
],
"scattergeo": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scattergeo"
}
],
"scattergl": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scattergl"
}
],
"scattermap": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scattermap"
}
],
"scattermapbox": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scattermapbox"
}
],
"scatterpolar": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scatterpolar"
}
],
"scatterpolargl": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scatterpolargl"
}
],
"scatterternary": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scatterternary"
}
],
"surface": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0.0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1.0,
"#f0f921"
]
],
"type": "surface"
}
],
"table": [
{
"cells": {
"fill": {
"color": "#EBF0F8"
},
"line": {
"color": "white"
}
},
"header": {
"fill": {
"color": "#C8D4E3"
},
"line": {
"color": "white"
}
},
"type": "table"
}
]
},
"layout": {
"annotationdefaults": {
"arrowcolor": "#2a3f5f",
"arrowhead": 0,
"arrowwidth": 1
},
"autotypenumbers": "strict",
"coloraxis": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"colorscale": {
"diverging": [
[
0,
"#8e0152"
],
[
0.1,
"#c51b7d"
],
[
0.2,
"#de77ae"
],
[
0.3,
"#f1b6da"
],
[
0.4,
"#fde0ef"
],
[
0.5,
"#f7f7f7"
],
[
0.6,
"#e6f5d0"
],
[
0.7,
"#b8e186"
],
[
0.8,
"#7fbc41"
],
[
0.9,
"#4d9221"
],
[
1,
"#276419"
]
],
"sequential": [
[
0.0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1.0,
"#f0f921"
]
],
"sequentialminus": [
[
0.0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1.0,
"#f0f921"
]
]
},
"colorway": [
"#636efa",
"#EF553B",
"#00cc96",
"#ab63fa",
"#FFA15A",
"#19d3f3",
"#FF6692",
"#B6E880",
"#FF97FF",
"#FECB52"
],
"font": {
"color": "#2a3f5f"
},
"geo": {
"bgcolor": "white",
"lakecolor": "white",
"landcolor": "white",
"showlakes": true,
"showland": true,
"subunitcolor": "#C8D4E3"
},
"hoverlabel": {
"align": "left"
},
"hovermode": "closest",
"mapbox": {
"style": "light"
},
"paper_bgcolor": "white",
"plot_bgcolor": "white",
"polar": {
"angularaxis": {
"gridcolor": "#EBF0F8",
"linecolor": "#EBF0F8",
"ticks": ""
},
"bgcolor": "white",
"radialaxis": {
"gridcolor": "#EBF0F8",
"linecolor": "#EBF0F8",
"ticks": ""
}
},
"scene": {
"xaxis": {
"backgroundcolor": "white",
"gridcolor": "#DFE8F3",
"gridwidth": 2,
"linecolor": "#EBF0F8",
"showbackground": true,
"ticks": "",
"zerolinecolor": "#EBF0F8"
},
"yaxis": {
"backgroundcolor": "white",
"gridcolor": "#DFE8F3",
"gridwidth": 2,
"linecolor": "#EBF0F8",
"showbackground": true,
"ticks": "",
"zerolinecolor": "#EBF0F8"
},
"zaxis": {
"backgroundcolor": "white",
"gridcolor": "#DFE8F3",
"gridwidth": 2,
"linecolor": "#EBF0F8",
"showbackground": true,
"ticks": "",
"zerolinecolor": "#EBF0F8"
}
},
"shapedefaults": {
"line": {
"color": "#2a3f5f"
}
},
"ternary": {
"aaxis": {
"gridcolor": "#DFE8F3",
"linecolor": "#A2B1C6",
"ticks": ""
},
"baxis": {
"gridcolor": "#DFE8F3",
"linecolor": "#A2B1C6",
"ticks": ""
},
"bgcolor": "white",
"caxis": {
"gridcolor": "#DFE8F3",
"linecolor": "#A2B1C6",
"ticks": ""
}
},
"title": {
"x": 0.05
},
"xaxis": {
"automargin": true,
"gridcolor": "#EBF0F8",
"linecolor": "#EBF0F8",
"ticks": "",
"title": {
"standoff": 15
},
"zerolinecolor": "#EBF0F8",
"zerolinewidth": 2
},
"yaxis": {
"automargin": true,
"gridcolor": "#EBF0F8",
"linecolor": "#EBF0F8",
"ticks": "",
"title": {
"standoff": 15
},
"zerolinecolor": "#EBF0F8",
"zerolinewidth": 2
}
}
},
"title": {
"text": "Assets Reported by Company and Quarter"
},
"width": 800,
"xaxis": {
"title": {
"text": "Quarter"
}
},
"yaxis": {
"title": {
"text": "Symbol"
}
}
}
},
"image/png": "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I07s2MiUITVqNh+gJst3aFoNmV5PjSvX/8Hard+jXrVPUChfThoQf2y0zJkESMBvCNCA+I3UTJQESMDfCMhGhFPmr8MPh07gn9t3EBr6TG1EOKR7E9fyucJEjECfkXPVhoUJE7yCulU/UUOsUqd4VRkQmSA+evpyrN3yPR4/eYr3Cr6JPDkzY8aiDW4NiJQ/bNJibNi2F0+ehqo5HWJsxASNn70Ku/cewb937iFl8lfV0r7tm1RVdWMPiL+1VuZLAiTgTwRoQPxJbeZKAiTg1wRqtRyI/HmyI7D1F37NgcmTAAmQAAn4lgANiG/58+okQAIkYBkBmcvx1apv0LtDPcSLF0ftki6GhAcJkAAJkAAJWEmABsRK2rwWCZAACfiQwIOHj9QGhNu/+xGPHz9Br/ZfoupnxXxYI16aBEiABEjAHwnQgPij6syZBEiABEiABEiABEiABHxEgAbER+B5WRIgARIgARIgARIgARLwRwI0IP6oOnMmARIgARIgARIgARIgAR8RoAHxEXhelgRIgARIgARIgARIgAT8kQANiD+qzpxJgARIgARIgARIgARIwEcEaEB8BJ6XJQESIAESIAESIAESIAF/JEAD4o+qM2cSIAESIAESIAESIAES8BEBGhAfgedlSYAESIAESIAESIAESMAfCdCA+KPqzJkESIAESIAESIAESIAEfESABsRH4HlZEiABEiABEiABEiABEvBHAjQg/qg6cyYBEiABEiABEiABEiABHxGgAfEReF6WBEiABEiABEiABEiABPyRAA2IP6rOnEmABEiABEiABEiABEjARwRoQHwEnpclARIgARIgARIgARIgAX8k8H/8aIem+uBjxQAAAABJRU5ErkJggg=="
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"`assets` coverage: 240/260 (92.3%)\n"
]
}
],
"source": [
"fig = go.Figure(\n",
" data=go.Heatmap(\n",
" z=matrix,\n",
" x=quarters,\n",
" y=symbols,\n",
" colorscale=[[0, COLORS[\"silver\"]], [1, COLORS[\"blue\"]]],\n",
" showscale=False,\n",
" text=[[str(v) if v > 0 else \"\" for v in row] for row in matrix],\n",
" texttemplate=\"%{text}\",\n",
" textfont={\"size\": 10},\n",
" )\n",
")\n",
"fig.update_layout(\n",
" title=\"Assets Reported by Company and Quarter\",\n",
" xaxis_title=\"Quarter\",\n",
" yaxis_title=\"Symbol\",\n",
" height=600,\n",
" width=800,\n",
" template=\"plotly_white\",\n",
")\n",
"fig.show()\n",
"\n",
"total_cells = len(symbols) * len(quarters)\n",
"filled_cells = sum(sum(row) for row in matrix)\n",
"print(f\"`assets` coverage: {filled_cells}/{total_cells} ({100 * filled_cells / total_cells:.1f}%)\")"
]
},
{
"cell_type": "markdown",
"id": "f4056ca3",
"metadata": {
"papermill": {
"duration": 0.002074,
"end_time": "2026-06-13T03:10:17.916181+00:00",
"exception": false,
"start_time": "2026-06-13T03:10:17.914107+00:00",
"status": "completed"
}
},
"source": [
"## 3. Filing-Lag Statistics\n",
"\n",
"The gap between `fiscal_quarter_end` and `announcement_date` is the\n",
"window during which a company's fundamentals are unknown to the market\n",
"— critical for any PIT backtest."
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "20b24c3c",
"metadata": {
"execution": {
"iopub.execute_input": "2026-06-13T03:10:17.921737Z",
"iopub.status.busy": "2026-06-13T03:10:17.921621Z",
"iopub.status.idle": "2026-06-13T03:10:17.926748Z",
"shell.execute_reply": "2026-06-13T03:10:17.926265Z"
},
"papermill": {
"duration": 0.008947,
"end_time": "2026-06-13T03:10:17.927247+00:00",
"exception": false,
"start_time": "2026-06-13T03:10:17.918300+00:00",
"status": "completed"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div><style>\n",
".dataframe > thead > tr,\n",
".dataframe > tbody > tr {\n",
" text-align: right;\n",
" white-space: pre-wrap;\n",
"}\n",
"</style>\n",
"<small>shape: (9, 2)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>statistic</th><th>lag_days</th></tr><tr><td>str</td><td>f64</td></tr></thead><tbody><tr><td>&quot;count&quot;</td><td>204.0</td></tr><tr><td>&quot;null_count&quot;</td><td>0.0</td></tr><tr><td>&quot;mean&quot;</td><td>149.191176</td></tr><tr><td>&quot;std&quot;</td><td>192.045607</td></tr><tr><td>&quot;min&quot;</td><td>19.0</td></tr><tr><td>&quot;25%&quot;</td><td>27.0</td></tr><tr><td>&quot;50%&quot;</td><td>33.0</td></tr><tr><td>&quot;75%&quot;</td><td>395.0</td></tr><tr><td>&quot;max&quot;</td><td>781.0</td></tr></tbody></table></div>"
],
"text/plain": [
"shape: (9, 2)\n",
"┌────────────┬────────────┐\n",
"│ statistic ┆ lag_days │\n",
"│ --- ┆ --- │\n",
"│ str ┆ f64 │\n",
"╞════════════╪════════════╡\n",
"│ count ┆ 204.0 │\n",
"│ null_count ┆ 0.0 │\n",
"│ mean ┆ 149.191176 │\n",
"│ std ┆ 192.045607 │\n",
"│ min ┆ 19.0 │\n",
"│ 25% ┆ 27.0 │\n",
"│ 50% ┆ 33.0 │\n",
"│ 75% ┆ 395.0 │\n",
"│ max ┆ 781.0 │\n",
"└────────────┴────────────┘"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"filing_lag = (\n",
" fundamentals.filter(pl.col(\"announcement_date\").is_not_null())\n",
" .with_columns(\n",
" (pl.col(\"announcement_date\") - pl.col(\"fiscal_quarter_end\"))\n",
" .dt.total_days()\n",
" .alias(\"lag_days\")\n",
" )\n",
" .select([\"symbol\", \"fiscal_quarter_end\", \"lag_days\"])\n",
")\n",
"\n",
"filing_lag.select(\"lag_days\").describe()"
]
},
{
"cell_type": "markdown",
"id": "3f381a39",
"metadata": {
"papermill": {
"duration": 0.002815,
"end_time": "2026-06-13T03:10:17.934353+00:00",
"exception": false,
"start_time": "2026-06-13T03:10:17.931538+00:00",
"status": "completed"
}
},
"source": [
"The median filing lag (~30 days) reflects typical 10-Q timing. The elevated mean\n",
"and long tail arise from amended/restated filings — the XBRL Frames API may return\n",
"accession numbers for restated filings rather than original submissions. For PIT\n",
"backtesting, this is conservative (data appears later than reality)."
]
},
{
"cell_type": "markdown",
"id": "9dc08571",
"metadata": {
"lines_to_next_cell": 2,
"papermill": {
"duration": 0.002896,
"end_time": "2026-06-13T03:10:17.939913+00:00",
"exception": false,
"start_time": "2026-06-13T03:10:17.937017+00:00",
"status": "completed"
}
},
"source": [
"## 4. Bitemporal Query Patterns\n",
"\n",
"The fundamentals panel has two time dimensions:\n",
"- `fiscal_quarter_end`: the period the data describes (*valid time*)\n",
"- `announcement_date`: when the SEC filing was submitted (*knowledge time*)\n",
"\n",
"For backtesting, use `announcement_date` to avoid lookahead bias. The\n",
"**as-of query** pattern returns only data that was publicly available on\n",
"a given date."
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "9f191c87",
"metadata": {
"execution": {
"iopub.execute_input": "2026-06-13T03:10:17.946315Z",
"iopub.status.busy": "2026-06-13T03:10:17.946205Z",
"iopub.status.idle": "2026-06-13T03:10:17.948428Z",
"shell.execute_reply": "2026-06-13T03:10:17.948025Z"
},
"papermill": {
"duration": 0.005809,
"end_time": "2026-06-13T03:10:17.948759+00:00",
"exception": false,
"start_time": "2026-06-13T03:10:17.942950+00:00",
"status": "completed"
}
},
"outputs": [],
"source": [
"def query_fundamentals_as_of(df: pl.DataFrame, as_of_date: str) -> pl.DataFrame:\n",
" \"\"\"Return latest known fundamentals as of a specific date (PIT-correct).\"\"\"\n",
" query_date = pl.lit(as_of_date).str.to_date()\n",
" return (\n",
" df.filter(pl.col(\"announcement_date\") <= query_date)\n",
" .sort([\"symbol\", \"announcement_date\"])\n",
" .group_by(\"symbol\")\n",
" .last()\n",
" )"
]
},
{
"cell_type": "markdown",
"id": "a1646f02",
"metadata": {
"papermill": {
"duration": 0.004085,
"end_time": "2026-06-13T03:10:17.955777+00:00",
"exception": false,
"start_time": "2026-06-13T03:10:17.951692+00:00",
"status": "completed"
}
},
"source": [
"### Demonstration: Correct vs Incorrect Queries"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "94f99f49",
"metadata": {
"execution": {
"iopub.execute_input": "2026-06-13T03:10:17.963723Z",
"iopub.status.busy": "2026-06-13T03:10:17.963534Z",
"iopub.status.idle": "2026-06-13T03:10:17.966211Z",
"shell.execute_reply": "2026-06-13T03:10:17.965653Z"
},
"papermill": {
"duration": 0.006627,
"end_time": "2026-06-13T03:10:17.966683+00:00",
"exception": false,
"start_time": "2026-06-13T03:10:17.960056+00:00",
"status": "completed"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"As of 2023-06-30, the latest quarter known to the market for each symbol:\n"
]
}
],
"source": [
"as_of_date = \"2023-06-30\"\n",
"print(f\"As of {as_of_date}, the latest quarter known to the market for each symbol:\")"
]
},
{
"cell_type": "markdown",
"id": "7bbce8e0",
"metadata": {
"papermill": {
"duration": 0.004142,
"end_time": "2026-06-13T03:10:17.974612+00:00",
"exception": false,
"start_time": "2026-06-13T03:10:17.970470+00:00",
"status": "completed"
}
},
"source": [
"**Correct** — filter on `announcement_date <= as_of`:"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "4c49b822",
"metadata": {
"execution": {
"iopub.execute_input": "2026-06-13T03:10:17.986325Z",
"iopub.status.busy": "2026-06-13T03:10:17.986166Z",
"iopub.status.idle": "2026-06-13T03:10:17.991646Z",
"shell.execute_reply": "2026-06-13T03:10:17.991238Z"
},
"papermill": {
"duration": 0.012669,
"end_time": "2026-06-13T03:10:17.992195+00:00",
"exception": false,
"start_time": "2026-06-13T03:10:17.979526+00:00",
"status": "completed"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div><style>\n",
".dataframe > thead > tr,\n",
".dataframe > tbody > tr {\n",
" text-align: right;\n",
" white-space: pre-wrap;\n",
"}\n",
"</style>\n",
"<small>shape: (5, 4)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>symbol</th><th>fiscal_quarter_end</th><th>announcement_date</th><th>netincomeloss</th></tr><tr><td>str</td><td>date</td><td>date</td><td>i64</td></tr></thead><tbody><tr><td>&quot;AAPL&quot;</td><td>2023-04-01</td><td>2023-05-05</td><td>24160000000</td></tr><tr><td>&quot;ABT&quot;</td><td>2023-03-31</td><td>2023-05-04</td><td>1318000000</td></tr><tr><td>&quot;AMD&quot;</td><td>2023-04-01</td><td>2023-05-03</td><td>-139000000</td></tr><tr><td>&quot;AMZN&quot;</td><td>2023-03-31</td><td>2023-04-28</td><td>3172000000</td></tr><tr><td>&quot;COST&quot;</td><td>2023-03-31</td><td>2023-05-01</td><td>4228000000</td></tr></tbody></table></div>"
],
"text/plain": [
"shape: (5, 4)\n",
"┌────────┬────────────────────┬───────────────────┬───────────────┐\n",
"│ symbol ┆ fiscal_quarter_end ┆ announcement_date ┆ netincomeloss │\n",
"│ --- ┆ --- ┆ --- ┆ --- │\n",
"│ str ┆ date ┆ date ┆ i64 │\n",
"╞════════╪════════════════════╪═══════════════════╪═══════════════╡\n",
"│ AAPL ┆ 2023-04-01 ┆ 2023-05-05 ┆ 24160000000 │\n",
"│ ABT ┆ 2023-03-31 ┆ 2023-05-04 ┆ 1318000000 │\n",
"│ AMD ┆ 2023-04-01 ┆ 2023-05-03 ┆ -139000000 │\n",
"│ AMZN ┆ 2023-03-31 ┆ 2023-04-28 ┆ 3172000000 │\n",
"│ COST ┆ 2023-03-31 ┆ 2023-05-01 ┆ 4228000000 │\n",
"└────────┴────────────────────┴───────────────────┴───────────────┘"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"known_correct = query_fundamentals_as_of(fundamentals, as_of_date)\n",
"cols = [\n",
" c\n",
" for c in [\"symbol\", \"fiscal_quarter_end\", \"announcement_date\", \"netincomeloss\"]\n",
" if c in known_correct.columns\n",
"]\n",
"known_correct.select(cols).head(5)"
]
},
{
"cell_type": "markdown",
"id": "a7a63da2",
"metadata": {
"papermill": {
"duration": 0.004415,
"end_time": "2026-06-13T03:10:18.000783+00:00",
"exception": false,
"start_time": "2026-06-13T03:10:17.996368+00:00",
"status": "completed"
}
},
"source": [
"**Lookahead-biased** — filter on `fiscal_quarter_end <= as_of`. This includes\n",
"quarters whose filings hadn't been submitted yet on the as-of date:"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "dc14f3c9",
"metadata": {
"execution": {
"iopub.execute_input": "2026-06-13T03:10:18.012688Z",
"iopub.status.busy": "2026-06-13T03:10:18.012521Z",
"iopub.status.idle": "2026-06-13T03:10:18.020213Z",
"shell.execute_reply": "2026-06-13T03:10:18.019733Z"
},
"papermill": {
"duration": 0.014184,
"end_time": "2026-06-13T03:10:18.020868+00:00",
"exception": false,
"start_time": "2026-06-13T03:10:18.006684+00:00",
"status": "completed"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div><style>\n",
".dataframe > thead > tr,\n",
".dataframe > tbody > tr {\n",
" text-align: right;\n",
" white-space: pre-wrap;\n",
"}\n",
"</style>\n",
"<small>shape: (5, 4)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>symbol</th><th>fiscal_quarter_end</th><th>announcement_date</th><th>netincomeloss</th></tr><tr><td>str</td><td>date</td><td>date</td><td>i64</td></tr></thead><tbody><tr><td>&quot;AAPL&quot;</td><td>2023-04-01</td><td>2023-05-05</td><td>24160000000</td></tr><tr><td>&quot;ABT&quot;</td><td>2023-06-30</td><td>2023-08-03</td><td>1375000000</td></tr><tr><td>&quot;AMD&quot;</td><td>2023-04-01</td><td>2023-05-03</td><td>-139000000</td></tr><tr><td>&quot;AMZN&quot;</td><td>2023-06-30</td><td>2023-08-04</td><td>6750000000</td></tr><tr><td>&quot;BAC&quot;</td><td>2023-06-30</td><td>null</td><td>7408000000</td></tr></tbody></table></div>"
],
"text/plain": [
"shape: (5, 4)\n",
"┌────────┬────────────────────┬───────────────────┬───────────────┐\n",
"│ symbol ┆ fiscal_quarter_end ┆ announcement_date ┆ netincomeloss │\n",
"│ --- ┆ --- ┆ --- ┆ --- │\n",
"│ str ┆ date ┆ date ┆ i64 │\n",
"╞════════╪════════════════════╪═══════════════════╪═══════════════╡\n",
"│ AAPL ┆ 2023-04-01 ┆ 2023-05-05 ┆ 24160000000 │\n",
"│ ABT ┆ 2023-06-30 ┆ 2023-08-03 ┆ 1375000000 │\n",
"│ AMD ┆ 2023-04-01 ┆ 2023-05-03 ┆ -139000000 │\n",
"│ AMZN ┆ 2023-06-30 ┆ 2023-08-04 ┆ 6750000000 │\n",
"│ BAC ┆ 2023-06-30 ┆ null ┆ 7408000000 │\n",
"└────────┴────────────────────┴───────────────────┴───────────────┘"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"query_date = pl.lit(as_of_date).str.to_date()\n",
"known_wrong = (\n",
" fundamentals.filter(pl.col(\"fiscal_quarter_end\") <= query_date)\n",
" .sort([\"symbol\", \"fiscal_quarter_end\"])\n",
" .group_by(\"symbol\")\n",
" .last()\n",
")\n",
"known_wrong.select(cols).head(5)"
]
},
{
"cell_type": "markdown",
"id": "e5c13a2c",
"metadata": {
"papermill": {
"duration": 0.004937,
"end_time": "2026-06-13T03:10:18.031180+00:00",
"exception": false,
"start_time": "2026-06-13T03:10:18.026243+00:00",
"status": "completed"
}
},
"source": [
"Comparing the two — every row here is a symbol the lookahead-biased approach\n",
"would have used a fresher quarter than was actually available:"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "f12dbf27",
"metadata": {
"execution": {
"iopub.execute_input": "2026-06-13T03:10:18.041697Z",
"iopub.status.busy": "2026-06-13T03:10:18.041564Z",
"iopub.status.idle": "2026-06-13T03:10:18.046764Z",
"shell.execute_reply": "2026-06-13T03:10:18.045917Z"
},
"papermill": {
"duration": 0.011317,
"end_time": "2026-06-13T03:10:18.047410+00:00",
"exception": false,
"start_time": "2026-06-13T03:10:18.036093+00:00",
"status": "completed"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"11 symbols where lookahead bias would change the chosen quarter:\n"
]
},
{
"data": {
"text/html": [
"<div><style>\n",
".dataframe > thead > tr,\n",
".dataframe > tbody > tr {\n",
" text-align: right;\n",
" white-space: pre-wrap;\n",
"}\n",
"</style>\n",
"<small>shape: (11, 3)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>symbol</th><th>correct_qtr</th><th>wrong_qtr</th></tr><tr><td>str</td><td>date</td><td>date</td></tr></thead><tbody><tr><td>&quot;ABT&quot;</td><td>2023-03-31</td><td>2023-06-30</td></tr><tr><td>&quot;AMZN&quot;</td><td>2023-03-31</td><td>2023-06-30</td></tr><tr><td>&quot;COST&quot;</td><td>2023-03-31</td><td>2023-06-30</td></tr><tr><td>&quot;CVX&quot;</td><td>2023-03-31</td><td>2023-06-30</td></tr><tr><td>&quot;GOOGL&quot;</td><td>2023-03-31</td><td>2023-06-30</td></tr><tr><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td></tr><tr><td>&quot;KO&quot;</td><td>2023-03-31</td><td>2023-06-30</td></tr><tr><td>&quot;MSFT&quot;</td><td>2023-03-31</td><td>2023-06-30</td></tr><tr><td>&quot;TSLA&quot;</td><td>2023-03-31</td><td>2023-06-30</td></tr><tr><td>&quot;V&quot;</td><td>2023-03-31</td><td>2023-06-30</td></tr><tr><td>&quot;XOM&quot;</td><td>2023-03-31</td><td>2023-06-30</td></tr></tbody></table></div>"
],
"text/plain": [
"shape: (11, 3)\n",
"┌────────┬─────────────┬────────────┐\n",
"│ symbol ┆ correct_qtr ┆ wrong_qtr │\n",
"│ --- ┆ --- ┆ --- │\n",
"│ str ┆ date ┆ date │\n",
"╞════════╪═════════════╪════════════╡\n",
"│ ABT ┆ 2023-03-31 ┆ 2023-06-30 │\n",
"│ AMZN ┆ 2023-03-31 ┆ 2023-06-30 │\n",
"│ COST ┆ 2023-03-31 ┆ 2023-06-30 │\n",
"│ CVX ┆ 2023-03-31 ┆ 2023-06-30 │\n",
"│ GOOGL ┆ 2023-03-31 ┆ 2023-06-30 │\n",
"│ … ┆ … ┆ … │\n",
"│ KO ┆ 2023-03-31 ┆ 2023-06-30 │\n",
"│ MSFT ┆ 2023-03-31 ┆ 2023-06-30 │\n",
"│ TSLA ┆ 2023-03-31 ┆ 2023-06-30 │\n",
"│ V ┆ 2023-03-31 ┆ 2023-06-30 │\n",
"│ XOM ┆ 2023-03-31 ┆ 2023-06-30 │\n",
"└────────┴─────────────┴────────────┘"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"correct_dates = known_correct.select([\"symbol\", \"fiscal_quarter_end\"]).rename(\n",
" {\"fiscal_quarter_end\": \"correct_qtr\"}\n",
")\n",
"wrong_dates = known_wrong.select([\"symbol\", \"fiscal_quarter_end\"]).rename(\n",
" {\"fiscal_quarter_end\": \"wrong_qtr\"}\n",
")\n",
"mismatches = correct_dates.join(wrong_dates, on=\"symbol\").filter(\n",
" pl.col(\"correct_qtr\") != pl.col(\"wrong_qtr\")\n",
")\n",
"print(f\"{len(mismatches)} symbols where lookahead bias would change the chosen quarter:\")\n",
"mismatches"
]
},
{
"cell_type": "markdown",
"id": "87574e1d",
"metadata": {
"papermill": {
"duration": 0.003116,
"end_time": "2026-06-13T03:10:18.054973+00:00",
"exception": false,
"start_time": "2026-06-13T03:10:18.051857+00:00",
"status": "completed"
}
},
"source": [
"## Key Takeaways\n",
"\n",
"1. The SEC XBRL Frames API is sufficient to assemble a cross-sectional fundamentals panel without a vendor subscription. The default downloader output covers 20 large-cap US equities × 49 quarters × 11 us-gaap concepts (240 rows in this snapshot).\n",
"2. Coverage is concept-dependent. `assets` is reported by 92.3% of company × quarter cells in this universe; `revenues` is sparse for AAPL/MSFT/banks because they file under post-ASC-606 concepts.\n",
"3. Filing-lag stats expose two regimes: the median filing lands ~33 days after fiscal-quarter end (typical 10-Q timing), but the upper quartile starts at 395 days and the max reaches 781 days — that long tail is dominated by amended/restated filings returned by the XBRL Frames API.\n",
"4. Always filter on `announcement_date` for backtesting. In this 20-symbol panel, querying as of 2023-06-30 by `fiscal_quarter_end` would inject lookahead bias for 11 of 20 symbols — using Q2 2023 fundamentals that were not actually filed until August 2023.\n",
"5. The downloader and loader are the production interface; this notebook is a sanity-check + bitemporal-query template that downstream feature-engineering notebooks (Ch8) consume."
]
}
],
"metadata": {
"jupytext": {
"cell_metadata_filter": "tags,-all"
},
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.14.3"
},
"papermill": {
"default_parameters": {},
"duration": 5.864858,
"end_time": "2026-06-13T03:10:20.674683+00:00",
"environment_variables": {},
"exception": null,
"input_path": "04_fundamental_alternative_data/04_sec_xbrl_fundamentals.ipynb",
"output_path": "04_fundamental_alternative_data/04_sec_xbrl_fundamentals.ipynb",
"parameters": {},
"start_time": "2026-06-13T03:10:14.809825+00:00",
"version": "2.7.0"
},
"ml4t_provenance": {
"source_py_blob": "920d95913b12917cc6179ef66ed8f7f446097a38",
"executed_at": "2026-06-13T03:10:21.035296+00:00",
"executor": "cpu-local",
"production": true,
"parameters": {},
"notes": "executed-state finalization batch (2026-06-13 run)"
}
},
"nbformat": 4,
"nbformat_minor": 5
}