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

3382 lines
170 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": "a8d32d3b",
"metadata": {
"papermill": {
"duration": 0.003366,
"end_time": "2026-06-13T03:16:48.194929+00:00",
"exception": false,
"start_time": "2026-06-13T03:16:48.191563+00:00",
"status": "completed"
}
},
"source": [
"# IC Inference: HAC Adjustment and Block Bootstrap\n",
"\n",
"**Docker image**: `ml4t`\n",
"\n",
"**Chapter 7: Defining the Learning Task**\n",
"**Section Reference**: 7.3 - Feature and Label Evaluation as Triage\n",
"\n",
"## Purpose\n",
"\n",
"This notebook addresses **statistical inference for IC**: how confident should we\n",
"be that a signal's IC is not just noise? We cover HAC adjustment for autocorrelated\n",
"IC series and block bootstrap for robust confidence intervals.\n",
"\n",
"## Learning Objectives\n",
"\n",
"1. Understand why naive t-statistics fail for IC inference\n",
"2. Apply HAC (Newey-West) adjustment for proper standard errors\n",
"3. Implement block bootstrap for distribution-free confidence intervals\n",
"4. Distinguish practical vs statistical significance\n",
"5. Plan track records using HAC-adjusted effective sample size\n",
"\n",
"## Data Policy\n",
"\n",
"Examples use **real ETF data** from the case study store.\n",
"\n",
"## Prerequisites\n",
"\n",
"- `05_signal_evaluation` — produces the IC time series whose inference we\n",
" formalize here.\n",
"- Familiarity with autocorrelation, the Newey-West HAC estimator, and\n",
" block bootstrap."
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "270cb428",
"metadata": {
"execution": {
"iopub.execute_input": "2026-06-13T03:16:48.199440Z",
"iopub.status.busy": "2026-06-13T03:16:48.199251Z",
"iopub.status.idle": "2026-06-13T03:16:50.537407Z",
"shell.execute_reply": "2026-06-13T03:16:50.536827Z"
},
"papermill": {
"duration": 2.341657,
"end_time": "2026-06-13T03:16:50.538399+00:00",
"exception": false,
"start_time": "2026-06-13T03:16:48.196742+00:00",
"status": "completed"
}
},
"outputs": [],
"source": [
"\"\"\"IC Inference — statistical testing and confidence intervals for information coefficients.\"\"\"\n",
"\n",
"from __future__ import annotations\n",
"\n",
"import json\n",
"import warnings\n",
"\n",
"import numpy as np\n",
"import plotly.graph_objects as go\n",
"import polars as pl\n",
"from arch.bootstrap import StationaryBootstrap\n",
"from IPython.display import display\n",
"from ml4t.diagnostic.evaluation.autocorrelation import analyze_autocorrelation\n",
"from ml4t.diagnostic.metrics import compute_ic_hac_stats\n",
"from ml4t.diagnostic.signal import analyze_signal\n",
"from plotly.subplots import make_subplots\n",
"from scipy import stats\n",
"\n",
"from data import load_etfs\n",
"from utils.reproducibility import set_global_seeds\n",
"\n",
"warnings.filterwarnings(\"ignore\")"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "eddc024d",
"metadata": {
"execution": {
"iopub.execute_input": "2026-06-13T03:16:50.543821Z",
"iopub.status.busy": "2026-06-13T03:16:50.543677Z",
"iopub.status.idle": "2026-06-13T03:16:50.545785Z",
"shell.execute_reply": "2026-06-13T03:16:50.545375Z"
},
"papermill": {
"duration": 0.004987,
"end_time": "2026-06-13T03:16:50.546030+00:00",
"exception": false,
"start_time": "2026-06-13T03:16:50.541043+00:00",
"status": "completed"
},
"tags": [
"parameters"
]
},
"outputs": [],
"source": [
"SEED = 42\n",
"START_DATE = \"\"\n",
"N_BOOT = 2000"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "e3fdf566",
"metadata": {
"execution": {
"iopub.execute_input": "2026-06-13T03:16:50.549701Z",
"iopub.status.busy": "2026-06-13T03:16:50.549589Z",
"iopub.status.idle": "2026-06-13T03:16:50.575011Z",
"shell.execute_reply": "2026-06-13T03:16:50.574573Z"
},
"lines_to_next_cell": 2,
"papermill": {
"duration": 0.027981,
"end_time": "2026-06-13T03:16:50.575435+00:00",
"exception": false,
"start_time": "2026-06-13T03:16:50.547454+00:00",
"status": "completed"
}
},
"outputs": [],
"source": [
"set_global_seeds(SEED)"
]
},
{
"cell_type": "markdown",
"id": "1f8d2fd1",
"metadata": {
"papermill": {
"duration": 0.001289,
"end_time": "2026-06-13T03:16:50.578201+00:00",
"exception": false,
"start_time": "2026-06-13T03:16:50.576912+00:00",
"status": "completed"
}
},
"source": [
"## 1. The Autocorrelation Problem\n",
"\n",
"IC time series exhibit **autocorrelation** due to:\n",
"\n",
"1. **Overlapping forward returns** at longer horizons\n",
"2. **Persistent signal values** (momentum doesn't flip daily)\n",
"3. **Regime persistence** (markets stay in trends/ranges)\n",
"\n",
"Naive t-statistics assume iid observations and **underestimate standard errors**,\n",
"leading to inflated significance."
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "2eb09d0c",
"metadata": {
"execution": {
"iopub.execute_input": "2026-06-13T03:16:50.581522Z",
"iopub.status.busy": "2026-06-13T03:16:50.581416Z",
"iopub.status.idle": "2026-06-13T03:17:43.940487Z",
"shell.execute_reply": "2026-06-13T03:17:43.939481Z"
},
"papermill": {
"duration": 53.362683,
"end_time": "2026-06-13T03:17:43.942180+00:00",
"exception": false,
"start_time": "2026-06-13T03:16:50.579497+00:00",
"status": "completed"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"IC series length: 4989\n",
"Mean IC: 0.0008\n"
]
}
],
"source": [
"# Load real ETF data and compute momentum signal\n",
"etfs = load_etfs()\n",
"\n",
"if START_DATE:\n",
" etfs = etfs.filter(pl.col(\"timestamp\") >= pl.lit(START_DATE).str.to_date())\n",
"\n",
"# Compute 21-day momentum\n",
"factor_df = (\n",
" etfs.sort([\"symbol\", \"timestamp\"])\n",
" .with_columns(\n",
" [(pl.col(\"close\") / pl.col(\"close\").shift(21).over(\"symbol\") - 1).alias(\"factor\")]\n",
" )\n",
" .filter(pl.col(\"factor\").is_not_null())\n",
" .select([\"timestamp\", \"symbol\", \"factor\"])\n",
")\n",
"\n",
"prices_df = etfs.select([\"timestamp\", \"symbol\", \"close\"]).rename({\"close\": \"price\"})\n",
"\n",
"# Run signal analysis to get IC series\n",
"result = analyze_signal(\n",
" factor_df,\n",
" prices_df,\n",
" periods=(21,),\n",
" quantiles=5,\n",
" ic_method=\"spearman\",\n",
" date_col=\"timestamp\",\n",
" asset_col=\"symbol\",\n",
")\n",
"\n",
"ic_series = np.array(result.ic_series.get(\"21D\", []))\n",
"print(f\"IC series length: {len(ic_series)}\")\n",
"print(f\"Mean IC: {np.mean(ic_series):.4f}\")"
]
},
{
"cell_type": "markdown",
"id": "b30ae014",
"metadata": {
"lines_to_next_cell": 2,
"papermill": {
"duration": 0.004396,
"end_time": "2026-06-13T03:17:43.950330+00:00",
"exception": false,
"start_time": "2026-06-13T03:17:43.945934+00:00",
"status": "completed"
}
},
"source": [
"### Autocorrelation in IC Series\n",
"\n",
"Let's examine the autocorrelation structure directly."
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "5f56e73f",
"metadata": {
"execution": {
"iopub.execute_input": "2026-06-13T03:17:43.955119Z",
"iopub.status.busy": "2026-06-13T03:17:43.954838Z",
"iopub.status.idle": "2026-06-13T03:17:44.963332Z",
"shell.execute_reply": "2026-06-13T03:17:44.962675Z"
},
"papermill": {
"duration": 1.011648,
"end_time": "2026-06-13T03:17:44.963924+00:00",
"exception": false,
"start_time": "2026-06-13T03:17:43.952276+00:00",
"status": "completed"
}
},
"outputs": [
{
"data": {
"application/vnd.plotly.v1+json": {
"config": {
"plotlyServerURL": "https://plot.ly"
},
"data": [
{
"marker": {
"color": [
"#d62728",
"#d62728",
"#d62728",
"#d62728",
"#d62728",
"#d62728",
"#d62728",
"#d62728",
"#d62728",
"#d62728",
"#d62728",
"#d62728",
"#d62728",
"#d62728",
"#d62728",
"#d62728",
"#1f77b4",
"#1f77b4",
"#1f77b4",
"#1f77b4"
]
},
"name": "ACF",
"type": "bar",
"x": [
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20
],
"y": {
"bdata": "m8Pstu6p6z+6QkE4NBDoP2oP4PInsOQ/2xHwTcaw4T+Gpzkw84DdP70BiML+tdg/AOstZMQU1T8Vi1ImjtbRP47407ELT84/vMYV2AlMyT+Qrh46XYDEP4qcTcq9/MA/iO+XMrPeuj8369h4jdazP9dugvtl7Ks/RWwCVRyioT/2av9fw1iTP5TvYnki64A/Wm85iecUbb/rxvCZeVePvw==",
"dtype": "f8"
}
}
],
"layout": {
"annotations": [
{
"showarrow": false,
"text": "95% CI",
"x": 1,
"xanchor": "right",
"xref": "x domain",
"y": 0.02774912666856219,
"yanchor": "bottom",
"yref": "y"
}
],
"height": 350,
"shapes": [
{
"line": {
"color": "red",
"dash": "dash"
},
"type": "line",
"x0": 0,
"x1": 1,
"xref": "x domain",
"y0": 0.02774912666856219,
"y1": 0.02774912666856219,
"yref": "y"
},
{
"line": {
"color": "red",
"dash": "dash"
},
"type": "line",
"x0": 0,
"x1": 1,
"xref": "x domain",
"y0": -0.02774912666856219,
"y1": -0.02774912666856219,
"yref": "y"
},
{
"line": {
"color": "gray"
},
"type": "line",
"x0": 0,
"x1": 1,
"xref": "x domain",
"y0": 0,
"y1": 0,
"yref": "y"
}
],
"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": "IC Autocorrelation Function"
},
"xaxis": {
"title": {
"text": "Lag"
}
},
"yaxis": {
"title": {
"text": "Autocorrelation"
}
}
}
},
"image/png": "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fZFV5vqLJ7Jb232Zr8Fv3LkhpYHXXMN8NW9mZk2Q/uf4KSvQFS2UTzWr36dGTzxsba2VUMAa/O4H2vLrbmXKmMEKsS88U0tPtXw9VuA111i9fpPGTJ2vPw//Y223ZcK/6b/4Xjxht82eDLzmFwMzI28CaUjatHq82r3W2wHNK6ZTGniNi1kuMXnWUmvpSlSUrG8FzF7NZk9k84uUWSISPnqWtV/zlatXVbliGY0d0jXBbeLsjD0Cr/s/YKkRAQQQQMA3BHwu8PoGC3eBAAIIIIAAAggg4BQBAq9TepJ2IIAAAggggAACCMQrQOBlYCCAAAIIIIAAAgg4WoDA6+jupXEIIIAAAggggAACBF7GAAIIIIAAAggggICjBQi8ju5eGocAAggggAACCCBA4GUMIIAAAggggAACCDhagMDr6O6lcQgggAACCCCAAAIEXsYAAggggAACCCCAgKMFCLyO7l4ahwACCCCAAAIIIEDgZQwggAACCCCAAAIIOFqAwOvo7qVxCCCAAAIIIIAAAgRexgACCCCAAAIIIICAowUIvI7uXhqHAAIIIIAAAgggQOBlDCCAAAIIIIAAAgg4WoDA6+jupXEIIIAAAggggAACBF7GAAIIIIAAAggggICjBQi8ju5eGocAAggggAACCCBA4GUMIIAAAggggAACCDhagMDr6O6lcQgggAACCCCAAAIEXsYAAggggAACCCCAgKMFCLyO7l4ahwACCCCAAAIIIEDgZQwggAACCCCAAAIIOFqAwOvo7qVxCCCAAAIIIIAAAgRexgACCCCAAAIIIICAowUIvI7uXhqHAAIIIIAAAgggQOBlDCCAAAIIIIAAAgg4WoDA6+jupXEIIIAAAggggAACBF7GAAIIIIAAAggggICjBQi8ju5eGocAAggggAACCCBA4GUMIIAAAggggAACCDhagMDr6O6lcQgggAACCCCAAAIEXsYAAggggAACCCCAgKMFCLyO7l4ahwACCCCAAAIIIEDgZQwggAACCCCAAAIIOFqAwOvo7qVxCCCAAAIIIIAAAgRexgACCCCAAAIIIICAowUIvI7uXhqHAAIIIIAAAgggQOBlDCCAAAIIIIAAAgg4WoDA6+jupXEIIIAAAggggAACBF7GAAIIIIAAAggggICjBQi8ju5eGocAAggggAACCCBA4GUMIIAAAggggAACCDha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"
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Significant autocorrelation lags: 16/20\n",
"\n",
"This means naive t-statistics will overstate significance!\n"
]
}
],
"source": [
"# Compute autocorrelation function\n",
"def compute_acf(series, nlags=20):\n",
" \"\"\"Compute autocorrelation function.\"\"\"\n",
" n = len(series)\n",
" series = series - np.mean(series)\n",
" acf = []\n",
" for lag in range(nlags + 1):\n",
" if lag == 0:\n",
" acf.append(1.0)\n",
" else:\n",
" acf.append(np.corrcoef(series[lag:], series[:-lag])[0, 1])\n",
" return np.array(acf)\n",
"\n",
"\n",
"acf_values = compute_acf(ic_series, nlags=20)\n",
"\n",
"# Significance bounds for white noise\n",
"n = len(ic_series)\n",
"sig_bound = 1.96 / np.sqrt(n)\n",
"\n",
"# Visualize ACF\n",
"fig = go.Figure()\n",
"\n",
"fig.add_trace(\n",
" go.Bar(\n",
" x=list(range(1, 21)),\n",
" y=acf_values[1:],\n",
" name=\"ACF\",\n",
" marker_color=[\"#d62728\" if abs(v) > sig_bound else \"#1f77b4\" for v in acf_values[1:]],\n",
" )\n",
")\n",
"\n",
"fig.add_hline(y=sig_bound, line_dash=\"dash\", line_color=\"red\", annotation_text=\"95% CI\")\n",
"fig.add_hline(y=-sig_bound, line_dash=\"dash\", line_color=\"red\")\n",
"fig.add_hline(y=0, line_color=\"gray\")\n",
"\n",
"fig.update_layout(\n",
" title=\"IC Autocorrelation Function\",\n",
" xaxis_title=\"Lag\",\n",
" yaxis_title=\"Autocorrelation\",\n",
" template=\"plotly_white\",\n",
" height=350,\n",
")\n",
"fig.show()\n",
"\n",
"# Count significant lags\n",
"n_significant_lags = sum(abs(acf_values[1:]) > sig_bound)\n",
"print(f\"\\nSignificant autocorrelation lags: {n_significant_lags}/20\")\n",
"print(\"\\nThis means naive t-statistics will overstate significance!\")"
]
},
{
"cell_type": "markdown",
"id": "2706dd35",
"metadata": {
"papermill": {
"duration": 0.003976,
"end_time": "2026-06-13T03:17:44.972741+00:00",
"exception": false,
"start_time": "2026-06-13T03:17:44.968765+00:00",
"status": "completed"
}
},
"source": [
"### 1.1 Library Autocorrelation Analysis\n",
"\n",
"The library version includes PACF and the **Ljung-Box portmanteau test**,\n",
"which tests the joint null that all autocorrelations up to lag $L$ are zero."
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "8384a2e8",
"metadata": {
"execution": {
"iopub.execute_input": "2026-06-13T03:17:44.980273Z",
"iopub.status.busy": "2026-06-13T03:17:44.979997Z",
"iopub.status.idle": "2026-06-13T03:17:44.999417Z",
"shell.execute_reply": "2026-06-13T03:17:44.998989Z"
},
"papermill": {
"duration": 0.024356,
"end_time": "2026-06-13T03:17:45.000080+00:00",
"exception": false,
"start_time": "2026-06-13T03:17:44.975724+00:00",
"status": "completed"
}
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"2026-06-12 23:17:44,981 - ml4t.diagnostic.evaluation.autocorrelation - INFO - Starting autocorrelation analysis\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"2026-06-12 23:17:44,988 - ml4t.diagnostic.evaluation.autocorrelation - INFO - ACF computed (n_obs=4989 nlags=20 significant=14)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"2026-06-12 23:17:44,994 - ml4t.diagnostic.evaluation.autocorrelation - INFO - PACF computed (n_obs=4989 nlags=20 significant=4)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"2026-06-12 23:17:44,996 - ml4t.diagnostic.evaluation.autocorrelation - INFO - Autocorrelation analysis completed (arima_order=(1, 0, 14) white_noise=False)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"=== ml4t-diagnostic Autocorrelation Analysis ===\n",
"\n",
"Significant ACF lags: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]\n",
"Significant PACF lags: [1, 3, 5, 7]\n",
"Is white noise: False\n",
"Suggested ARIMA order: (1, 0, 14)\n"
]
}
],
"source": [
"acf_analysis = analyze_autocorrelation(ic_series, max_lags=20, alpha=0.05)\n",
"\n",
"print(\"=== ml4t-diagnostic Autocorrelation Analysis ===\\n\")\n",
"print(f\"Significant ACF lags: {acf_analysis.significant_acf_lags}\")\n",
"print(f\"Significant PACF lags: {acf_analysis.significant_pacf_lags}\")\n",
"print(f\"Is white noise: {acf_analysis.is_white_noise}\")\n",
"print(f\"Suggested ARIMA order: {acf_analysis.suggested_arima_order}\")"
]
},
{
"cell_type": "markdown",
"id": "a21c9cb5",
"metadata": {
"papermill": {
"duration": 0.005623,
"end_time": "2026-06-13T03:17:45.013698+00:00",
"exception": false,
"start_time": "2026-06-13T03:17:45.008075+00:00",
"status": "completed"
}
},
"source": [
"## 2. HAC (Newey-West) Adjustment\n",
"\n",
"HAC (Heteroskedasticity and Autocorrelation Consistent) standard errors account\n",
"for serial correlation in the IC series.\n",
"\n",
"The Newey-West estimator uses a weighted sum of autocovariances:\n",
"\n",
"$$\\hat{\\sigma}^2_{HAC} = \\hat{\\gamma}_0 + 2\\sum_{j=1}^{L} w_j \\hat{\\gamma}_j$$\n",
"\n",
"Where $w_j = 1 - j/(L+1)$ (Bartlett kernel) and $L$ is the lag truncation."
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "ff840017",
"metadata": {
"execution": {
"iopub.execute_input": "2026-06-13T03:17:45.021530Z",
"iopub.status.busy": "2026-06-13T03:17:45.021289Z",
"iopub.status.idle": "2026-06-13T03:17:45.030903Z",
"shell.execute_reply": "2026-06-13T03:17:45.029821Z"
},
"papermill": {
"duration": 0.013656,
"end_time": "2026-06-13T03:17:45.031976+00:00",
"exception": false,
"start_time": "2026-06-13T03:17:45.018320+00:00",
"status": "completed"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"=== Naive vs HAC Inference ===\n",
"\n",
"Mean IC: 0.0008\n",
"\n",
"Standard Errors:\n",
" Naive SE: 0.0044\n",
" HAC SE: 0.0112\n",
" Inflation: 2.54x\n",
"\n",
"t-Statistics:\n",
" Naive t: 0.19\n",
" HAC t: 0.07\n",
"\n",
"p-Values:\n",
" Naive p: 0.8524\n",
" HAC p: 0.9416\n",
"\n",
"Significant at α=0.05?\n",
" Naive: No\n",
" HAC: No\n"
]
}
],
"source": [
"# Compute HAC-adjusted statistics\n",
"hac_result = compute_ic_hac_stats(ic_series)\n",
"\n",
"# Compare naive vs HAC\n",
"naive_se = np.std(ic_series, ddof=1) / np.sqrt(len(ic_series))\n",
"naive_t = np.mean(ic_series) / naive_se\n",
"\n",
"print(\"=== Naive vs HAC Inference ===\\n\")\n",
"print(f\"Mean IC: {hac_result['mean_ic']:.4f}\")\n",
"print(\"\\nStandard Errors:\")\n",
"print(f\" Naive SE: {naive_se:.4f}\")\n",
"print(f\" HAC SE: {hac_result['hac_se']:.4f}\")\n",
"print(f\" Inflation: {hac_result['hac_se'] / naive_se:.2f}x\")\n",
"\n",
"print(\"\\nt-Statistics:\")\n",
"print(f\" Naive t: {naive_t:.2f}\")\n",
"print(f\" HAC t: {hac_result['t_stat']:.2f}\")\n",
"\n",
"print(\"\\np-Values:\")\n",
"print(f\" Naive p: {2 * (1 - stats.t.cdf(abs(naive_t), len(ic_series) - 1)):.4f}\")\n",
"print(f\" HAC p: {hac_result['p_value']:.4f}\")\n",
"\n",
"# Significance conclusion\n",
"alpha = 0.05\n",
"naive_sig = \"Yes\" if abs(naive_t) > stats.t.ppf(1 - alpha / 2, len(ic_series) - 1) else \"No\"\n",
"hac_sig = \"Yes\" if hac_result[\"p_value\"] < alpha else \"No\"\n",
"\n",
"print(\"\\nSignificant at α=0.05?\")\n",
"print(f\" Naive: {naive_sig}\")\n",
"print(f\" HAC: {hac_sig}\")\n",
"\n",
"if naive_sig == \"Yes\" and hac_sig == \"No\":\n",
" print(\"\\n WARNING: Naive test finds significance that HAC adjustment removes!\")"
]
},
{
"cell_type": "markdown",
"id": "a343e0cc",
"metadata": {
"papermill": {
"duration": 0.003005,
"end_time": "2026-06-13T03:17:45.042976+00:00",
"exception": false,
"start_time": "2026-06-13T03:17:45.039971+00:00",
"status": "completed"
}
},
"source": [
"### Effective Sample Size\n",
"\n",
"The HAC SE inflation factor tells us how much the autocorrelation reduces our\n",
"effective sample size:\n",
"\n",
"$$T_{eff} = T \\times \\left(\\frac{\\sigma_{naive}}{\\sigma_{HAC}}\\right)^2$$"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "4de6033a",
"metadata": {
"execution": {
"iopub.execute_input": "2026-06-13T03:17:45.050383Z",
"iopub.status.busy": "2026-06-13T03:17:45.050256Z",
"iopub.status.idle": "2026-06-13T03:17:45.053864Z",
"shell.execute_reply": "2026-06-13T03:17:45.052901Z"
},
"papermill": {
"duration": 0.008762,
"end_time": "2026-06-13T03:17:45.055009+00:00",
"exception": false,
"start_time": "2026-06-13T03:17:45.046247+00:00",
"status": "completed"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"=== Effective Sample Size ===\n",
"\n",
"Actual observations: 4989\n",
"HAC inflation factor: 2.54x\n",
"Effective sample size: 773\n",
"Efficiency loss: 85%\n"
]
}
],
"source": [
"# Compute effective sample size\n",
"inflation_factor = hac_result[\"hac_se\"] / naive_se\n",
"effective_n = len(ic_series) / (inflation_factor**2)\n",
"\n",
"print(\"=== Effective Sample Size ===\\n\")\n",
"print(f\"Actual observations: {len(ic_series)}\")\n",
"print(f\"HAC inflation factor: {inflation_factor:.2f}x\")\n",
"print(f\"Effective sample size: {effective_n:.0f}\")\n",
"print(f\"Efficiency loss: {(1 - effective_n / len(ic_series)) * 100:.0f}%\")"
]
},
{
"cell_type": "markdown",
"id": "492c366b",
"metadata": {
"lines_to_next_cell": 2,
"papermill": {
"duration": 0.002746,
"end_time": "2026-06-13T03:17:45.064130+00:00",
"exception": false,
"start_time": "2026-06-13T03:17:45.061384+00:00",
"status": "completed"
}
},
"source": [
"## 3. Block Bootstrap for Robust CI\n",
"\n",
"When IC series has autocorrelation, **iid bootstrap is invalid**. We use\n",
"**block bootstrap** which preserves the dependence structure by resampling\n",
"contiguous blocks of observations.\n",
"\n",
"Two common approaches:\n",
"1. **Moving Block Bootstrap (MBB)**: Fixed block length\n",
"2. **Stationary Bootstrap**: Random block lengths (geometric distribution)\n",
"\n",
"We use the `arch` library's `StationaryBootstrap` for robust inference."
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "494d0593",
"metadata": {
"execution": {
"iopub.execute_input": "2026-06-13T03:17:45.075197Z",
"iopub.status.busy": "2026-06-13T03:17:45.074926Z",
"iopub.status.idle": "2026-06-13T03:17:45.081861Z",
"shell.execute_reply": "2026-06-13T03:17:45.080735Z"
},
"papermill": {
"duration": 0.013185,
"end_time": "2026-06-13T03:17:45.082690+00:00",
"exception": false,
"start_time": "2026-06-13T03:17:45.069505+00:00",
"status": "completed"
}
},
"outputs": [],
"source": [
"# Block bootstrap implementation\n",
"def block_bootstrap_ic_ci(\n",
" ic_series: np.ndarray,\n",
" n_bootstrap: int = 1000,\n",
" block_length: int = 21,\n",
" alpha: float = 0.05,\n",
" random_state: int = 42,\n",
") -> dict:\n",
" \"\"\"\n",
" Compute block bootstrap confidence interval for mean IC.\n",
"\n",
" Uses the Politis-Romano stationary bootstrap from `arch.bootstrap`:\n",
" random block lengths drawn from a geometric distribution with\n",
" expected length equal to ``block_length``.\n",
"\n",
" Parameters\n",
" ----------\n",
" ic_series : array\n",
" Time series of IC values\n",
" n_bootstrap : int\n",
" Number of bootstrap replications\n",
" block_length : int\n",
" Expected block length (mean of the geometric distribution)\n",
" alpha : float\n",
" Significance level (default 0.05 for 95% CI)\n",
" random_state : int\n",
" Random seed for reproducibility\n",
"\n",
" Returns\n",
" -------\n",
" dict with mean, CI bounds, and bootstrap distribution\n",
" \"\"\"\n",
" ic_series = np.array(ic_series)\n",
"\n",
" bs = StationaryBootstrap(block_length, ic_series, seed=random_state)\n",
" bootstrap_means = np.array([np.mean(data[0][0]) for data in bs.bootstrap(n_bootstrap)])\n",
"\n",
" # Percentile confidence interval\n",
" ci_lower = np.percentile(bootstrap_means, 100 * alpha / 2)\n",
" ci_upper = np.percentile(bootstrap_means, 100 * (1 - alpha / 2))\n",
"\n",
" return {\n",
" \"mean\": np.mean(ic_series),\n",
" \"ci_lower\": ci_lower,\n",
" \"ci_upper\": ci_upper,\n",
" \"bootstrap_std\": np.std(bootstrap_means),\n",
" \"bootstrap_means\": bootstrap_means,\n",
" \"method\": \"Stationary Bootstrap\",\n",
" \"block_length\": block_length,\n",
" }"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "d305de74",
"metadata": {
"execution": {
"iopub.execute_input": "2026-06-13T03:17:45.092057Z",
"iopub.status.busy": "2026-06-13T03:17:45.091946Z",
"iopub.status.idle": "2026-06-13T03:17:45.167791Z",
"shell.execute_reply": "2026-06-13T03:17:45.167140Z"
},
"papermill": {
"duration": 0.080842,
"end_time": "2026-06-13T03:17:45.168281+00:00",
"exception": false,
"start_time": "2026-06-13T03:17:45.087439+00:00",
"status": "completed"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"=== Block Bootstrap vs HAC Confidence Intervals ===\n",
"\n",
"Method: Stationary Bootstrap (block length=21)\n",
"Bootstrap replications: 2000\n",
"\n",
"Mean IC: 0.0008\n",
"\n",
"95% Confidence Intervals:\n",
" Block Bootstrap: [-0.0253, 0.0271]\n",
" HAC (Newey-West): [-0.0212, 0.0228]\n",
"\n",
"Standard Errors:\n",
" Block Bootstrap: 0.0132\n",
" HAC: 0.0112\n",
"\n",
"Block Bootstrap CI includes zero: Yes\n"
]
}
],
"source": [
"# Run block bootstrap\n",
"n_boot = N_BOOT\n",
"block_result = block_bootstrap_ic_ci(\n",
" ic_series, n_bootstrap=n_boot, block_length=21, random_state=SEED\n",
")\n",
"\n",
"# Compare with HAC CI\n",
"hac_ci_lower = hac_result[\"mean_ic\"] - 1.96 * hac_result[\"hac_se\"]\n",
"hac_ci_upper = hac_result[\"mean_ic\"] + 1.96 * hac_result[\"hac_se\"]\n",
"\n",
"print(\"=== Block Bootstrap vs HAC Confidence Intervals ===\\n\")\n",
"print(f\"Method: {block_result['method']} (block length={block_result['block_length']})\")\n",
"print(f\"Bootstrap replications: {n_boot}\")\n",
"print(f\"\\nMean IC: {block_result['mean']:.4f}\")\n",
"print(\"\\n95% Confidence Intervals:\")\n",
"print(f\" Block Bootstrap: [{block_result['ci_lower']:.4f}, {block_result['ci_upper']:.4f}]\")\n",
"print(f\" HAC (Newey-West): [{hac_ci_lower:.4f}, {hac_ci_upper:.4f}]\")\n",
"print(\"\\nStandard Errors:\")\n",
"print(f\" Block Bootstrap: {block_result['bootstrap_std']:.4f}\")\n",
"print(f\" HAC: {hac_result['hac_se']:.4f}\")\n",
"\n",
"# Does CI include zero?\n",
"ci_includes_zero = block_result[\"ci_lower\"] <= 0 <= block_result[\"ci_upper\"]\n",
"print(f\"\\nBlock Bootstrap CI includes zero: {'Yes' if ci_includes_zero else 'No'}\")"
]
},
{
"cell_type": "markdown",
"id": "6bc713ea",
"metadata": {
"papermill": {
"duration": 0.003812,
"end_time": "2026-06-13T03:17:45.176665+00:00",
"exception": false,
"start_time": "2026-06-13T03:17:45.172853+00:00",
"status": "completed"
}
},
"source": [
"### 3.1 Library vs Manual Bootstrap: When to Use Each\n",
"\n",
"The `ml4t-diagnostic` library provides `stationary_bootstrap_ic()` for\n",
"**cross-sectional** bootstrap: given arrays of predictions and returns for a\n",
"single date, it resamples asset pairs and recomputes Spearman IC. This is useful\n",
"when you want a confidence interval for a single cross-section's IC.\n",
"\n",
"For **time-series** inference on the IC series itself — \"is the mean IC over\n",
"many dates significantly different from zero?\" — the correct tool is the\n",
"block bootstrap from Section 3 above, which preserves temporal dependence.\n",
"\n",
"```python\n",
"# Cross-sectional bootstrap (library) — CI for one date's IC\n",
"from ml4t.diagnostic.evaluation.stats.hac_standard_errors import stationary_bootstrap_ic\n",
"result = stationary_bootstrap_ic(signals_t, returns_t, n_samples=1000)\n",
"\n",
"# Time-series bootstrap (manual) — CI for mean IC across dates\n",
"block_bootstrap_ic_ci(ic_series, n_bootstrap=2000, block_length=21)\n",
"```\n",
"\n",
"Throughout this notebook we use the manual block bootstrap because we are\n",
"testing whether the *time-averaged* IC is significantly positive."
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "0767050a",
"metadata": {
"execution": {
"iopub.execute_input": "2026-06-13T03:17:45.185759Z",
"iopub.status.busy": "2026-06-13T03:17:45.185511Z",
"iopub.status.idle": "2026-06-13T03:17:45.189452Z",
"shell.execute_reply": "2026-06-13T03:17:45.189014Z"
},
"papermill": {
"duration": 0.010018,
"end_time": "2026-06-13T03:17:45.190299+00:00",
"exception": false,
"start_time": "2026-06-13T03:17:45.180281+00:00",
"status": "completed"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"=== Block Bootstrap Summary (recommended for IC time series) ===\n",
"\n",
" IC: 0.0008\n",
" Bootstrap SE: 0.0132\n",
" 95% CI: [-0.0253, 0.0271]\n",
" HAC CI: [-0.0212, 0.0228]\n"
]
}
],
"source": [
"print(\"=== Block Bootstrap Summary (recommended for IC time series) ===\\n\")\n",
"print(f\" IC: {block_result['mean']:.4f}\")\n",
"print(f\" Bootstrap SE: {block_result['bootstrap_std']:.4f}\")\n",
"print(f\" 95% CI: [{block_result['ci_lower']:.4f}, {block_result['ci_upper']:.4f}]\")\n",
"print(f\" HAC CI: [{hac_ci_lower:.4f}, {hac_ci_upper:.4f}]\")"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "8e522f7f",
"metadata": {
"execution": {
"iopub.execute_input": "2026-06-13T03:17:45.198704Z",
"iopub.status.busy": "2026-06-13T03:17:45.198492Z",
"iopub.status.idle": "2026-06-13T03:17:45.335862Z",
"shell.execute_reply": "2026-06-13T03:17:45.335370Z"
},
"papermill": {
"duration": 0.141825,
"end_time": "2026-06-13T03:17:45.336812+00:00",
"exception": false,
"start_time": "2026-06-13T03:17:45.194987+00:00",
"status": "completed"
}
},
"outputs": [
{
"data": {
"application/vnd.plotly.v1+json": {
"config": {
"plotlyServerURL": "https://plot.ly"
},
"data": [
{
"marker": {
"color": "#1f77b4"
},
"name": "Bootstrap means",
"nbinsx": 50,
"opacity": 0.7,
"type": "histogram",
"x": {
"bdata": "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",
"dtype": "f8"
},
"xaxis": "x",
"yaxis": "y"
},
{
"error_y": {
"array": [
0.026296103863814035
],
"arrayminus": [
0.02610493866243982
],
"symmetric": false,
"type": "data"
},
"marker": {
"color": "#1f77b4",
"size": 12
},
"mode": "markers",
"name": "Block Bootstrap",
"type": "scatter",
"x": [
"Block Bootstrap"
],
"xaxis": "x2",
"y": [
0.0008216757810428136
],
"yaxis": "y2"
},
{
"error_y": {
"array": [
0.0219868622442164
],
"arrayminus": [
0.0219868622442164
],
"symmetric": false,
"type": "data"
},
"marker": {
"color": "#ff7f0e",
"size": 12
},
"mode": "markers",
"name": "HAC",
"type": "scatter",
"x": [
"HAC"
],
"xaxis": "x2",
"y": [
0.0008216757810428136
],
"yaxis": "y2"
}
],
"layout": {
"annotations": [
{
"font": {
"size": 16
},
"showarrow": false,
"text": "Bootstrap Distribution",
"x": 0.225,
"xanchor": "center",
"xref": "paper",
"y": 1.0,
"yanchor": "bottom",
"yref": "paper"
},
{
"font": {
"size": 16
},
"showarrow": false,
"text": "CI Comparison",
"x": 0.775,
"xanchor": "center",
"xref": "paper",
"y": 1.0,
"yanchor": "bottom",
"yref": "paper"
},
{
"showarrow": false,
"text": "2.5%",
"x": -0.025283262881397005,
"xanchor": "left",
"xref": "x",
"y": 1,
"yanchor": "top",
"yref": "y domain"
},
{
"showarrow": false,
"text": "97.5%",
"x": 0.02711777964485685,
"xanchor": "left",
"xref": "x",
"y": 1,
"yanchor": "top",
"yref": "y domain"
},
{
"showarrow": false,
"text": "Null",
"x": 0,
"xanchor": "left",
"xref": "x",
"y": 1,
"yanchor": "top",
"yref": "y domain"
}
],
"height": 350,
"shapes": [
{
"line": {
"color": "red",
"dash": "dash"
},
"type": "line",
"x0": -0.025283262881397005,
"x1": -0.025283262881397005,
"xref": "x",
"y0": 0,
"y1": 1,
"yref": "y domain"
},
{
"line": {
"color": "red",
"dash": "dash"
},
"type": "line",
"x0": 0.02711777964485685,
"x1": 0.02711777964485685,
"xref": "x",
"y0": 0,
"y1": 1,
"yref": "y domain"
},
{
"line": {
"color": "gray",
"dash": "dot"
},
"type": "line",
"x0": 0,
"x1": 0,
"xref": "x",
"y0": 0,
"y1": 1,
"yref": "y domain"
},
{
"line": {
"color": "gray",
"dash": "dot"
},
"type": "line",
"x0": 0,
"x1": 1,
"xref": "x2 domain",
"y0": 0,
"y1": 0,
"yref": "y2"
}
],
"showlegend": false,
"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
}
}
},
"xaxis": {
"anchor": "y",
"domain": [
0.0,
0.45
],
"title": {
"text": "Mean IC"
}
},
"xaxis2": {
"anchor": "y2",
"domain": [
0.55,
1.0
]
},
"yaxis": {
"anchor": "x",
"domain": [
0.0,
1.0
]
},
"yaxis2": {
"anchor": "x2",
"domain": [
0.0,
1.0
],
"title": {
"text": "Mean IC"
}
}
}
},
"image/png": "iVBORw0KGgoAAAANSUhEUgAAArwAAAFeCAYAAABn3sxXAAAgAElEQVR4XuyddXwUxx+G3yCB4F6kULxoKUXb4q7F3d2KJ7i7u7t7kBQLRUuB4m6FQrECxR2iv88Mv7sml0uyl5zM7b37T2kyO/Od5zu7eW5udtYtODg4GDxIgARIgARIgARIgARIQKcE3Ci8Os0su0UCJEACJEACJEACJCAJUHg5EEiABEiABEiABEiABHRNgMKr6/SycyRAAiRAAiRAAiRAAhRejgESIAESIAESIAESIAFdE6Dw6jq97BwJkAAJkAAJkAAJkACFl2OABEiABEiABEiABEhA1wQovLpOLztHAiRAAiRAAiRAAiRA4eUYIAESIAESIAESIAES0DUBCq+u08vOkQAJkAAJkAAJkAAJUHg5BkiABEiABEiABEiABHRNgMKr6/SycyRAAiRAAiRAAiRAAhRejgESIAESIAESIAESIAFdE6Dw6jq97BwJkAAJkAAJkAAJkACFl2OABEiABEiABEiABEhA1wQovLpOLztHAiRAAiRAAiRAAiRA4eUYIAESIAESIAESIAES0DUBCq+u08vOkQAJkAAJkAAJkAAJUHg5BkiABEiABEiABEiABHRNgMKr6/SycyRAAiRAAiRAAiRAAhRejgESIAESIAESIAESIAFdE6Dw6jq97BwJkAAJkAAJkAAJkACFl2OABEiABEiABEiABEhA1wQovLpOLztHAiRAAiRAAiRAAiRA4eUYIAESIAESIAESIAES0DUBCq+u08vOkQAJkAAJkAAJkAAJUHg5BkiABEiABEiABEiABHRNgMKr6/SycyRAAiRAAiRAAiRAAhRejgESIAESIAESIAESIAFdE6Dw6jq97BwJkAAJkAAJkAAJkACFl2OABEiABEiABEiABEhA1wQovLpOLztHAiRAAiRAAiRAAiRA4eUYIAESIAESIAESIAES0DUBCq+u08vOkQAJkAAJkAAJkAAJUHg5BkiABEiABEiABEiABHRNgMKr6/SycyRAAiRAAiRAAiRAAhRejgESIAESIAESIAESIAFdE6Dw6jq97BwJkAAJkAAJkAAJkACFl2OABEiABEiABEiABEhA1wQovLpOLztHAiRAAiRAAiRAAiRA4eUYIAESIAESIAESIAES0DUBCq+u08vOkQAJkAAJkAAJkAAJUHg5BkiABEiABEiABEiABHRNgMKr6/SycyRAAiRAAiRAAiRAAhRejgESIAESIAESIAESIAFdE6Dw6jq97BwJkAAJkAAJkAAJkACFl2OABEiABEiABEiABEhA1wQovLpOLztHAiRAAiRAAiRAAiRA4eUYIAESIAESIAESIAES0DUBCq+u08vOkQAJkAAJkAAJkAAJUHg5BkiABEiABEiABEiABHRNgMKr6/SycyRAAiRAAiRAAiRAAhRejgESIAESIAESIAESIAFdE6Dw6jq97BwJkAAJkAAJkAAJkACFl2OABEiABEiABEiABEhA1wQovLpOLztHAiRAAiRAAiRAAiRA4eUYIAESIAESIAESIAES0DUBCq+u08vOkQAJkAAJkAAJkAAJUHg5BkiABEiABEiABEiABHRNgMKr6/SycyRAAiRAAiRAAiRAAhRejgESIAESIAESIAESIAFdE6Dw6jq97BwJkAAJkAAJkAAJkACFl2OABEiABEiABEiABEhA1wQovLpOLztHAiRAAiRAAiRAAiRA4eUYIAESIAESIAESIAES0DUBCq+u08vOkQAJkAAJkAAJkAAJUHg5BkiABEiABEiABEiABHRNgMKr6/SycyRAAiRAAiRAAiRAAhRejgESIAESIAESIAESIAFdE6Dw6jq97BwJkAAJkAAJkAAJkACFl2OABEiABEiABEiABEhA1wQovLpOLztHAiRAAiRAAiRAAiRA4eUYIAESIAESIAESIAES0DUBCq+u08vOkQAJkAAJkAAJkAAJUHg5BkiABEiABEiABEiABHRNgMKr6/SycyRAAiRAAiRAAiRAAhRejgESIAESIAESIAESIAFdE6Dw6jq97BwJkAAJkAAJkAAJkACFl2OABEiABEiABEiABEhA1wQovLpOLztHAiRAAiRAAiRAAiRA4eUYIAESIAESIAESIAES0DUBCq+u08vOkQAJkAAJkAAJkAAJUHg5BkiABEiABEiABEiABHRNgMKro/Su2OiL8bPXGnsUI4YbEsTzQMF8X6Ntk2rIlyuLTXobFBSMucu34odCeZA/TzaL2vjjzBVcuPIX2jetbtF5ti5sytIjrju+SJlMMqxbrSS+y5s9VAgPHj1FhYaeaNOoCnp1qK8pvHv//Asf3yOoV700UqVIoumcLbsOY9D4xZg3vjeKF8krz6nXfhjSpU6BaSN+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bz227Pxfe3ds0lAYBWD0rpIiEIhpJKQQwQFSZrqAnbiAuEF6mzSSJqtIXMBCSPFxJnjcc2/xFQ/+09wi9Wm7nofVYo5vH/8K3r8enjh/X+f1/XO+zpff/4ZvD2k8bpZz2L/M825zZ1WfI0CAAAECXQHB292tyQgQIECAAAECBGZG8DoDAgQIECBAgACBtIDgTa/XcAQIECBAgAABAoLXDRAgQIAAAQIECKQFBG96vYYjQIAAAQIECBAQvG6AAAECBAgQIEAgLSB40+s1HAECBAgQIECAgOB1AwQIECBAgAABAmkBwZter+EIECBAgAABAgQErxsgQIAAAQIECBBICwje9HoNR4AAAQIECBAgIHjdAAECBAgQIECAQFpA8KbXazgCBAgQIECAAAHB6wYIECBAgAABAgTSAoI3vV7DESBAgAABAgQICF43QIAAAQIECBAgkBbU9S2oAAABWklEQVQQvOn1Go4AAQIECBAgQEDwugECBAgQIECAAIG0gOBNr9dwBAgQIECAAAECgtcNECBAgAABAgQIpAUEb3q9hiNAgAABAgQIEBC8boAAAQIECBAgQCAtIHjT6zUcAQIECBAgQICA4HUDBAgQIECAAAECaQHBm16v4QgQIECAAAECBASvGyBAgAABAgQIEEgLCN70eg1HgAABAgQIECAgeN0AAQIECBAgQIBAWkDwptdrOAIECBAgQIAAAcHrBggQIECAAAECBNICgje9XsMRIECAAAECBAgIXjdAgAABAgQIECCQFhC86fUajgABAgQIECBAQPC6AQIECBAgQIAAgbSA4E2v13AECBAgQIAAAQKC1w0QIECAAAECBAikBQRver2GI0CAAAECBAgQELxugAABAgQIECBAIC0geNPrNRwBAgQIECBAgIDgdQMECBAgQIAAAQJpgR+5H3MRMR29yAAAAABJRU5ErkJggg=="
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Visualize bootstrap distribution\n",
"fig = make_subplots(rows=1, cols=2, subplot_titles=[\"Bootstrap Distribution\", \"CI Comparison\"])\n",
"\n",
"# Bootstrap distribution\n",
"fig.add_trace(\n",
" go.Histogram(\n",
" x=block_result[\"bootstrap_means\"],\n",
" nbinsx=50,\n",
" name=\"Bootstrap means\",\n",
" marker_color=\"#1f77b4\",\n",
" opacity=0.7,\n",
" ),\n",
" row=1,\n",
" col=1,\n",
")\n",
"\n",
"# Mark CIs\n",
"fig.add_vline(\n",
" x=block_result[\"ci_lower\"],\n",
" line_dash=\"dash\",\n",
" line_color=\"red\",\n",
" annotation_text=\"2.5%\",\n",
" row=1,\n",
" col=1,\n",
")\n",
"fig.add_vline(\n",
" x=block_result[\"ci_upper\"],\n",
" line_dash=\"dash\",\n",
" line_color=\"red\",\n",
" annotation_text=\"97.5%\",\n",
" row=1,\n",
" col=1,\n",
")\n",
"fig.add_vline(x=0, line_dash=\"dot\", line_color=\"gray\", annotation_text=\"Null\", row=1, col=1)\n",
"\n",
"# CI comparison\n",
"methods = [\"Block Bootstrap\", \"HAC\"]\n",
"ci_lowers = [block_result[\"ci_lower\"], hac_ci_lower]\n",
"ci_uppers = [block_result[\"ci_upper\"], hac_ci_upper]\n",
"means = [block_result[\"mean\"], hac_result[\"mean_ic\"]]\n",
"\n",
"for i, method in enumerate(methods):\n",
" # CI as error bars\n",
" fig.add_trace(\n",
" go.Scatter(\n",
" x=[method],\n",
" y=[means[i]],\n",
" error_y=dict(\n",
" type=\"data\",\n",
" symmetric=False,\n",
" array=[ci_uppers[i] - means[i]],\n",
" arrayminus=[means[i] - ci_lowers[i]],\n",
" ),\n",
" mode=\"markers\",\n",
" marker=dict(size=12, color=[\"#1f77b4\", \"#ff7f0e\"][i]),\n",
" name=method,\n",
" ),\n",
" row=1,\n",
" col=2,\n",
" )\n",
"\n",
"fig.add_hline(y=0, line_dash=\"dot\", line_color=\"gray\", row=1, col=2)\n",
"\n",
"fig.update_layout(height=350, template=\"plotly_white\", showlegend=False)\n",
"fig.update_xaxes(title_text=\"Mean IC\", row=1, col=1)\n",
"fig.update_yaxes(title_text=\"Mean IC\", row=1, col=2)\n",
"\n",
"fig.show()"
]
},
{
"cell_type": "markdown",
"id": "3e5f9fe1",
"metadata": {
"papermill": {
"duration": 0.003138,
"end_time": "2026-06-13T03:17:45.343688+00:00",
"exception": false,
"start_time": "2026-06-13T03:17:45.340550+00:00",
"status": "completed"
}
},
"source": [
"## 4. Practical vs Statistical Significance\n",
"\n",
"Statistical significance of an IC time-series mean is a separate question\n",
"from whether the signal is economically tradeable. The table below summarises\n",
"typical detectability of a mean IC at the indicated magnitudes; net P&L\n",
"after costs is a separate calculation handled in `05_signal_evaluation`\n",
"(break-even cost analysis) and the case-study cost models (Ch16-18).\n",
"\n",
"| $\\bar{\\text{IC}}$ | Statistical detectability on multi-year daily samples |\n",
"|----|------------------------------------|\n",
"| 0.02 | At the boundary of HAC detectability; requires large $T$ |\n",
"| 0.03 | Typically detectable with HAC-adjusted inference |\n",
"| 0.05 | Comfortably above the HAC standard error in published equity-factor studies |\n",
"| 0.10 | Outside the published cross-sectional range; prior is leakage until ruled out |\n",
"\n",
"Whether any of these magnitudes survives transaction costs depends on\n",
"rebalancing frequency, turnover, and capacity — see the break-even\n",
"analysis in `05_signal_evaluation`."
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "f21c8eb9",
"metadata": {
"execution": {
"iopub.execute_input": "2026-06-13T03:17:45.353592Z",
"iopub.status.busy": "2026-06-13T03:17:45.353392Z",
"iopub.status.idle": "2026-06-13T03:17:45.358685Z",
"shell.execute_reply": "2026-06-13T03:17:45.358146Z"
},
"papermill": {
"duration": 0.012366,
"end_time": "2026-06-13T03:17:45.359953+00:00",
"exception": false,
"start_time": "2026-06-13T03:17:45.347587+00:00",
"status": "completed"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"=== Practical Significance Analysis ===\n",
"\n",
"Observed IC: 0.0008\n",
"HAC t-stat: 0.07\n",
"HAC p-value: 0.9416\n",
"\n",
"Cost assumptions:\n",
" Monthly turnover: 50%\n",
" Round-trip cost: 10 bps\n",
" Annual cost drag: 0.60%\n",
"\n",
"Grinold IR approximation (raw): 0.01\n",
" (This is a raw, pre-cost upper bound — net IR depends on turnover and costs;\n",
" the break-even cost analysis in `05_signal_evaluation` evaluates feasibility.)\n"
]
}
],
"source": [
"# Practical significance analysis\n",
"print(\"=== Practical Significance Analysis ===\\n\")\n",
"\n",
"observed_ic = np.mean(ic_series)\n",
"print(f\"Observed IC: {observed_ic:.4f}\")\n",
"print(f\"HAC t-stat: {hac_result['t_stat']:.2f}\")\n",
"print(f\"HAC p-value: {hac_result['p_value']:.4f}\")\n",
"\n",
"# Cost-adjusted interpretation\n",
"# Simplified model: Net IC ≈ IC - cost_factor × turnover\n",
"# Assuming ~50% monthly turnover and 10bps round-trip cost\n",
"turnover_assumption = 0.5 # 50% monthly turnover\n",
"cost_per_trade = 0.001 # 10bps\n",
"cost_impact = turnover_assumption * cost_per_trade * 12 # Annualized\n",
"\n",
"print(\"\\nCost assumptions:\")\n",
"print(f\" Monthly turnover: {turnover_assumption:.0%}\")\n",
"print(f\" Round-trip cost: {cost_per_trade * 10000:.0f} bps\")\n",
"print(f\" Annual cost drag: {cost_impact:.2%}\")\n",
"\n",
"# Rough IR approximation: IR ≈ IC × √(252) × some multiplier\n",
"# This is a simplified Grinold approximation\n",
"ir_approx = observed_ic * np.sqrt(252)\n",
"print(f\"\\nGrinold IR approximation (raw): {ir_approx:.2f}\")\n",
"print(\" (This is a raw, pre-cost upper bound — net IR depends on turnover and costs;\")\n",
"print(\" the break-even cost analysis in `05_signal_evaluation` evaluates feasibility.)\")"
]
},
{
"cell_type": "markdown",
"id": "6348da56",
"metadata": {
"lines_to_next_cell": 2,
"papermill": {
"duration": 0.00655,
"end_time": "2026-06-13T03:17:45.372338+00:00",
"exception": false,
"start_time": "2026-06-13T03:17:45.365788+00:00",
"status": "completed"
}
},
"source": [
"## 5. Track Record Planning\n",
"\n",
"How many observations do we need to be confident in our IC estimate?\n",
"\n",
"Using HAC-adjusted effective sample size:\n",
"\n",
"$$T_{required} = \\left(\\frac{z_{\\alpha/2} \\times \\sigma_{IC}}{IC_{target}}\\right)^2 \\times \\text{HAC inflation}^2$$"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "bfc039f6",
"metadata": {
"execution": {
"iopub.execute_input": "2026-06-13T03:17:45.381083Z",
"iopub.status.busy": "2026-06-13T03:17:45.380908Z",
"iopub.status.idle": "2026-06-13T03:17:45.383285Z",
"shell.execute_reply": "2026-06-13T03:17:45.382898Z"
},
"papermill": {
"duration": 0.007285,
"end_time": "2026-06-13T03:17:45.383731+00:00",
"exception": false,
"start_time": "2026-06-13T03:17:45.376446+00:00",
"status": "completed"
}
},
"outputs": [],
"source": [
"def min_track_record_ic(\n",
" target_ic: float,\n",
" ic_std: float,\n",
" confidence: float = 0.95,\n",
" hac_inflation: float = 1.5,\n",
") -> int:\n",
" \"\"\"\n",
" Minimum track record to confirm IC with given confidence.\n",
"\n",
" Uses HAC-adjusted effective sample size.\n",
"\n",
" Parameters\n",
" ----------\n",
" target_ic : float\n",
" Minimum IC we want to detect\n",
" ic_std : float\n",
" Standard deviation of IC series\n",
" confidence : float\n",
" Required confidence level\n",
" hac_inflation : float\n",
" HAC SE inflation factor (typically 1.5-2.5 for daily IC)\n",
"\n",
" Returns\n",
" -------\n",
" int : minimum periods needed (actual, not effective)\n",
" \"\"\"\n",
" z = stats.norm.ppf((1 + confidence) / 2)\n",
"\n",
" # Base formula without HAC\n",
" base_n = (z * ic_std / target_ic) ** 2\n",
"\n",
" # Adjust for autocorrelation\n",
" actual_n = base_n * (hac_inflation**2)\n",
"\n",
" return int(np.ceil(actual_n))"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "41d6b48f",
"metadata": {
"execution": {
"iopub.execute_input": "2026-06-13T03:17:45.392777Z",
"iopub.status.busy": "2026-06-13T03:17:45.392546Z",
"iopub.status.idle": "2026-06-13T03:17:45.401026Z",
"shell.execute_reply": "2026-06-13T03:17:45.400463Z"
},
"papermill": {
"duration": 0.015068,
"end_time": "2026-06-13T03:17:45.402156+00:00",
"exception": false,
"start_time": "2026-06-13T03:17:45.387088+00:00",
"status": "completed"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"=== Minimum Track Record for IC Detection ===\n",
"\n",
"Observed IC std: 0.3119\n",
"HAC inflation factor: 2.54x\n",
"\n",
"Days of cross-sectional IC observations needed at each confidence level:\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: (4, 7)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>target_ic</th><th>days_90pct</th><th>years_90pct</th><th>days_95pct</th><th>years_95pct</th><th>days_99pct</th><th>years_99pct</th></tr><tr><td>f64</td><td>i64</td><td>f64</td><td>i64</td><td>f64</td><td>i64</td><td>f64</td></tr></thead><tbody><tr><td>0.01</td><td>16983</td><td>67.4</td><td>24113</td><td>95.7</td><td>41647</td><td>165.3</td></tr><tr><td>0.02</td><td>4246</td><td>16.8</td><td>6029</td><td>23.9</td><td>10412</td><td>41.3</td></tr><tr><td>0.03</td><td>1887</td><td>7.5</td><td>2680</td><td>10.6</td><td>4628</td><td>18.4</td></tr><tr><td>0.05</td><td>680</td><td>2.7</td><td>965</td><td>3.8</td><td>1666</td><td>6.6</td></tr></tbody></table></div>"
],
"text/plain": [
"shape: (4, 7)\n",
"┌───────────┬────────────┬─────────────┬────────────┬─────────────┬────────────┬─────────────┐\n",
"│ target_ic ┆ days_90pct ┆ years_90pct ┆ days_95pct ┆ years_95pct ┆ days_99pct ┆ years_99pct │\n",
"│ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- │\n",
"│ f64 ┆ i64 ┆ f64 ┆ i64 ┆ f64 ┆ i64 ┆ f64 │\n",
"╞═══════════╪════════════╪═════════════╪════════════╪═════════════╪════════════╪═════════════╡\n",
"│ 0.01 ┆ 16983 ┆ 67.4 ┆ 24113 ┆ 95.7 ┆ 41647 ┆ 165.3 │\n",
"│ 0.02 ┆ 4246 ┆ 16.8 ┆ 6029 ┆ 23.9 ┆ 10412 ┆ 41.3 │\n",
"│ 0.03 ┆ 1887 ┆ 7.5 ┆ 2680 ┆ 10.6 ┆ 4628 ┆ 18.4 │\n",
"│ 0.05 ┆ 680 ┆ 2.7 ┆ 965 ┆ 3.8 ┆ 1666 ┆ 6.6 │\n",
"└───────────┴────────────┴─────────────┴────────────┴─────────────┴────────────┴─────────────┘"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Track record requirements\n",
"ic_std_observed = np.std(ic_series)\n",
"hac_inflation = hac_result[\"hac_se\"] / naive_se\n",
"\n",
"print(\"=== Minimum Track Record for IC Detection ===\\n\")\n",
"print(f\"Observed IC std: {ic_std_observed:.4f}\")\n",
"print(f\"HAC inflation factor: {hac_inflation:.2f}x\")\n",
"print()\n",
"\n",
"target_ics = [0.01, 0.02, 0.03, 0.05]\n",
"track_record_rows = []\n",
"for target in target_ics:\n",
" min_90 = min_track_record_ic(target, ic_std_observed, 0.90, hac_inflation)\n",
" min_95 = min_track_record_ic(target, ic_std_observed, 0.95, hac_inflation)\n",
" min_99 = min_track_record_ic(target, ic_std_observed, 0.99, hac_inflation)\n",
" track_record_rows.append(\n",
" {\n",
" \"target_ic\": target,\n",
" \"days_90pct\": min_90,\n",
" \"years_90pct\": round(min_90 / 252, 1),\n",
" \"days_95pct\": min_95,\n",
" \"years_95pct\": round(min_95 / 252, 1),\n",
" \"days_99pct\": min_99,\n",
" \"years_99pct\": round(min_99 / 252, 1),\n",
" }\n",
" )\n",
"\n",
"track_record_df = pl.DataFrame(track_record_rows)\n",
"print(\"Days of cross-sectional IC observations needed at each confidence level:\")\n",
"display(track_record_df)"
]
},
{
"cell_type": "markdown",
"id": "5d6a4cf3",
"metadata": {
"papermill": {
"duration": 0.005341,
"end_time": "2026-06-13T03:17:45.414312+00:00",
"exception": false,
"start_time": "2026-06-13T03:17:45.408971+00:00",
"status": "completed"
}
},
"source": [
"### Interpretation\n",
"\n",
"The track record requirements are substantial because:\n",
"\n",
"1. **IC is noisy**: Daily cross-sectional IC has high variance\n",
"2. **Autocorrelation reduces effective sample**: HAC inflation factor of 1.5-2.5x\n",
"3. **Small effects need large samples**: IC of 0.02 is hard to distinguish from 0\n",
"\n",
"**Implication**: Claims of \"predictive\" factors from 1-2 years of data should be\n",
"treated with skepticism, especially if IC is below 0.03."
]
},
{
"cell_type": "markdown",
"id": "69f92402",
"metadata": {
"papermill": {
"duration": 0.003279,
"end_time": "2026-06-13T03:17:45.422763+00:00",
"exception": false,
"start_time": "2026-06-13T03:17:45.419484+00:00",
"status": "completed"
}
},
"source": [
"## 6. IC Inference Report\n",
"\n",
"Export a structured report for downstream use."
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "874d718d",
"metadata": {
"execution": {
"iopub.execute_input": "2026-06-13T03:17:45.430262Z",
"iopub.status.busy": "2026-06-13T03:17:45.430146Z",
"iopub.status.idle": "2026-06-13T03:17:45.434487Z",
"shell.execute_reply": "2026-06-13T03:17:45.433696Z"
},
"papermill": {
"duration": 0.009069,
"end_time": "2026-06-13T03:17:45.435093+00:00",
"exception": false,
"start_time": "2026-06-13T03:17:45.426024+00:00",
"status": "completed"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"=== IC Inference Report ===\n",
"\n",
"{\n",
" \"signal_name\": \"momentum_21d\",\n",
" \"n_observations\": 4989,\n",
" \"mean_ic\": 0.0008,\n",
" \"ic_std\": 0.3119,\n",
" \"inference\": {\n",
" \"naive\": {\n",
" \"se\": 0.0044,\n",
" \"t_stat\": 0.19,\n",
" \"p_value\": 0.8524\n",
" },\n",
" \"hac\": {\n",
" \"se\": 0.0112,\n",
" \"t_stat\": 0.07,\n",
" \"p_value\": 0.9416,\n",
" \"inflation_factor\": 2.54\n",
" },\n",
" \"block_bootstrap\": {\n",
" \"method\": \"Stationary Bootstrap\",\n",
" \"block_length\": 21,\n",
" \"n_replications\": 2000,\n",
" \"se\": 0.0132,\n",
" \"ci_95_lower\": -0.0253,\n",
" \"ci_95_upper\": 0.0271\n",
" }\n",
" },\n",
" \"effective_sample_size\": 773.0,\n",
" \"ci_includes_zero\": true,\n",
" \"autocorrelation_lags_significant\": 16\n",
"}\n"
]
}
],
"source": [
"# Build IC inference report\n",
"inference_report = {\n",
" \"signal_name\": \"momentum_21d\",\n",
" \"n_observations\": len(ic_series),\n",
" \"mean_ic\": round(float(np.mean(ic_series)), 4),\n",
" \"ic_std\": round(float(np.std(ic_series)), 4),\n",
" \"inference\": {\n",
" \"naive\": {\n",
" \"se\": round(float(naive_se), 4),\n",
" \"t_stat\": round(float(naive_t), 2),\n",
" \"p_value\": round(float(2 * (1 - stats.t.cdf(abs(naive_t), len(ic_series) - 1))), 4),\n",
" },\n",
" \"hac\": {\n",
" \"se\": round(float(hac_result[\"hac_se\"]), 4),\n",
" \"t_stat\": round(float(hac_result[\"t_stat\"]), 2),\n",
" \"p_value\": round(float(hac_result[\"p_value\"]), 4),\n",
" \"inflation_factor\": round(float(hac_inflation), 2),\n",
" },\n",
" \"block_bootstrap\": {\n",
" \"method\": block_result[\"method\"],\n",
" \"block_length\": block_result[\"block_length\"],\n",
" \"n_replications\": n_boot,\n",
" \"se\": round(float(block_result[\"bootstrap_std\"]), 4),\n",
" \"ci_95_lower\": round(float(block_result[\"ci_lower\"]), 4),\n",
" \"ci_95_upper\": round(float(block_result[\"ci_upper\"]), 4),\n",
" },\n",
" },\n",
" \"effective_sample_size\": round(float(effective_n), 0),\n",
" \"ci_includes_zero\": bool(ci_includes_zero),\n",
" \"autocorrelation_lags_significant\": int(n_significant_lags),\n",
"}\n",
"\n",
"print(\"=== IC Inference Report ===\\n\")\n",
"print(json.dumps(inference_report, indent=2))"
]
},
{
"cell_type": "markdown",
"id": "de5b50a2",
"metadata": {
"papermill": {
"duration": 0.006623,
"end_time": "2026-06-13T03:17:45.449681+00:00",
"exception": false,
"start_time": "2026-06-13T03:17:45.443058+00:00",
"status": "completed"
}
},
"source": [
"## Summary\n",
"\n",
"### Key Concepts\n",
"\n",
"| Concept | Description |\n",
"|---------|-------------|\n",
"| **HAC SE** | Newey-West adjustment for autocorrelated IC |\n",
"| **Block Bootstrap** | Preserves dependence structure via block resampling |\n",
"| **Effective N** | True sample size after accounting for autocorrelation |\n",
"| **Track Record** | Minimum observations to detect a given IC |\n",
"\n",
"### Best Practices\n",
"\n",
"1. **Always use HAC-adjusted t-statistics** - naive t-stats overstate significance\n",
"2. **Report block bootstrap CIs** - distribution-free and robust\n",
"3. **Consider practical significance** - IC must exceed cost drag\n",
"4. **Plan for adequate track records** - 1-2 years rarely sufficient for small IC\n",
"5. **Check effective sample size** - may be much smaller than actual observations\n",
"\n",
"### API Reference\n",
"\n",
"```python\n",
"from ml4t.diagnostic.metrics import compute_ic_hac_stats\n",
"\n",
"# HAC-adjusted statistics\n",
"hac = compute_ic_hac_stats(ic_series)\n",
"print(f\"HAC t-stat: {hac['t_stat']:.2f}\")\n",
"print(f\"HAC p-value: {hac['p_value']:.4f}\")\n",
"\n",
"# Block bootstrap (requires arch library)\n",
"from arch.bootstrap import StationaryBootstrap\n",
"bs = StationaryBootstrap(21, ic_series) # 21-day blocks\n",
"ci = bs.conf_int(np.mean, 1000, method='percentile')\n",
"```\n",
"\n",
"### Next Notebooks\n",
"\n",
"- [`07_multiple_testing`](07_multiple_testing.ipynb) - FDR control when evaluating many factors\n",
"- [`08_causal_sanity_checks`](08_causal_sanity_checks.ipynb) - Causal falsification tests"
]
}
],
"metadata": {
"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": 60.648447,
"end_time": "2026-06-13T03:17:48.073069+00:00",
"environment_variables": {},
"exception": null,
"input_path": "07_defining_the_learning_task/06_ic_inference.ipynb",
"output_path": "07_defining_the_learning_task/06_ic_inference.ipynb",
"parameters": {},
"start_time": "2026-06-13T03:16:47.424622+00:00",
"version": "2.7.0"
},
"jupytext": {
"cell_metadata_filter": "tags,-all"
},
"ml4t_provenance": {
"source_py_blob": "0632bd552b2b12427079082b2681bc3e3f320e71",
"executed_at": "2026-06-13T03:17:48.314316+00:00",
"executor": "cpu-local",
"production": true,
"parameters": {},
"notes": "executed-state finalization batch (2026-06-13 run)"
}
},
"nbformat": 4,
"nbformat_minor": 5
}