more typos
This commit is contained in:
@@ -20,7 +20,7 @@
|
||||
"| Term | Meaning |\n",
|
||||
"|------|---------|\n",
|
||||
"| **Return** | Fractional price change: $r_{t} = p_t / p_{t-1} - 1$ |\n",
|
||||
"| **Return panel** $\\mathbf{R}$ | The $T \\times N$ matrix of monthly returns — months (rows) × stocks (columns); the project's central object |\n",
|
||||
"| **Return panel** $\\mathbf{R}$ | The $T \\times N$ matrix of monthly returns — months (rows) $\\times$ stocks (columns); the project's central object |\n",
|
||||
"| **Cross-section** | A row of $\\mathbf{R}$ — all stocks at one date |\n",
|
||||
"| **One stock's history** | A column of $\\mathbf{R}$ |\n",
|
||||
"| **Universe** | The set of stocks (columns) we're allowed to hold — here the S&P 500 |\n",
|
||||
|
||||
@@ -372,7 +372,7 @@
|
||||
"id": "5659b941",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Note that we added a sample size filter with `mask.sum() < 20`. The `mask` identifies stocks that have both a valid factor score and a valid forward return in a given month, and `mask.sum()` counts how many usable pairs you actually have. The `< 20` threshold prevents the code from computing a correlation on a tiny sample, which is statistically meaningless and numerically unstable (e.g., Spearman correlation on 2 stocks is always exactly ±1). If you don't gate this, early-history months, mass delistings, or data gaps inject garbage ±1.0 values into your IC time series, which then contaminate every downstream statistic like the mean IC, Information Ratio, and decay curves. Setting a floor of 20 filters out those degenerate months while retaining enough valid data to produce a reliable signal.\n",
|
||||
"Note that we added a sample size filter with `mask.sum() < 20`. The `mask` identifies stocks that have both a valid factor score and a valid forward return in a given month, and `mask.sum()` counts how many usable pairs you actually have. The `< 20` threshold prevents the code from computing a correlation on a tiny sample, which is statistically meaningless and numerically unstable (e.g., Spearman correlation on 2 stocks is always exactly $\\pm$1). If you don't gate this, early-history months, mass delistings, or data gaps inject garbage $\\pm 1.0$ values into your IC time series, which then contaminate every downstream statistic like the mean IC, Information Ratio, and decay curves. Setting a floor of 20 filters out those degenerate months while retaining enough valid data to produce a reliable signal.\n",
|
||||
"\n",
|
||||
"We do this sort of masking throughout."
|
||||
]
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
"\n",
|
||||
"| Term | Meaning |\n",
|
||||
"|------|---------|\n",
|
||||
"| **Winsorization** | Clipping extreme values at ±$k$ standard deviations — a soft truncation to limit outlier influence |\n",
|
||||
"| **Winsorization** | Clipping extreme values at $\\pm k$ standard deviations — a soft truncation to limit outlier influence |\n",
|
||||
"| **Z-scoring** | Centering to mean 0 and scaling to std 1, so each factor vector lives on the same scale |\n",
|
||||
"| **Neutralization** | Projecting out unwanted components (sector) — an orthogonal projection onto a complement subspace |\n",
|
||||
"| **Composite signal** | A linear combination $c_t = \\sum_k w_k f_{k,\\perp}$ of neutralized factor vectors |\n",
|
||||
@@ -125,7 +125,7 @@
|
||||
"source": [
|
||||
"## Winsorization and Z-Scoring\n",
|
||||
"\n",
|
||||
"**Winsorization** is a statistical technique for limiting the influence of extreme outliers in a dataset by capping them at a specified threshold rather than removing them entirely. Raw factor exposures can have extreme outliers — a stock that returned 500% in the trailing year, for instance. We **Winsorize** at ±3 standard deviations, so that we don't have to drop them.\n",
|
||||
"**Winsorization** is a statistical technique for limiting the influence of extreme outliers in a dataset by capping them at a specified threshold rather than removing them entirely. Raw factor exposures can have extreme outliers — a stock that returned 500% in the trailing year, for instance. We **Winsorize** at $\\pm 3$ standard deviations, so that we don't have to drop them.\n",
|
||||
"\n",
|
||||
"After winsorization we **z-score** cross-sectionally: for each date $t$, the factor vector $f_t$ is transformed to\n",
|
||||
"$$\\tilde{f}_t = (f_t - \\bar{f}_t) / \\text{std}(f_t),$$\n",
|
||||
@@ -268,7 +268,7 @@
|
||||
"id": "9740141a",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Much like in Notebook 02, we note that we added a sample size filter with `mask.sum() < 30`. The `mask` identifies stocks that have both a valid factor score and a valid forward return in a given month, and `mask.sum()` counts how many usable pairs you actually have. The `< 30` threshold prevents the code from computing a correlation on a tiny sample, which is statistically meaningless and numerically unstable (e.g., Spearman correlation on 2 stocks is always exactly ±1). If you don't gate this, early-history months, mass delistings, or data gaps inject garbage ±1.0 values into your IC time series, which then contaminate every downstream statistic like the mean IC, Information Ratio, and decay curves. Setting a floor of 30 filters out those degenerate months while retaining enough valid data to produce a reliable signal.\n",
|
||||
"Much like in Notebook 02, we note that we added a sample size filter with `mask.sum() < 30`. The `mask` identifies stocks that have both a valid factor score and a valid forward return in a given month, and `mask.sum()` counts how many usable pairs you actually have. The `< 30` threshold prevents the code from computing a correlation on a tiny sample, which is statistically meaningless and numerically unstable (e.g., Spearman correlation on 2 stocks is always exactly $\\pm$1). If you don't gate this, early-history months, mass delistings, or data gaps inject garbage $\\pm 1.0$ values into your IC time series, which then contaminate every downstream statistic like the mean IC, Information Ratio, and decay curves. Setting a floor of 30 filters out those degenerate months while retaining enough valid data to produce a reliable signal.\n",
|
||||
"\n",
|
||||
"We do this sort of masking throughout."
|
||||
]
|
||||
|
||||
@@ -787,7 +787,7 @@
|
||||
"\n",
|
||||
"### When Sortino > Sharpe\n",
|
||||
"\n",
|
||||
"A strategy with occasional large positive surprises will have Sortino noticeably higher than Sharpe. A strategy with symmetric volatility (gains and losses of similar magnitude) will have Sortino ≈ Sharpe. Big gap between them tells you the return distribution is positively skewed.\n",
|
||||
"A strategy with occasional large positive surprises will have Sortino noticeably higher than Sharpe. A strategy with symmetric volatility (gains and losses of similar magnitude) will have Sortino $\\approx$ Sharpe. Big gap between them tells you the return distribution is positively skewed.\n",
|
||||
"\n",
|
||||
"---\n",
|
||||
"\n",
|
||||
@@ -808,8 +808,8 @@
|
||||
"$$V_t = \\prod_{s=1}^{t}(1 + r_{p,s}) = (1+r_1)(1+r_2)\\cdots(1+r_t)$$\n",
|
||||
"\n",
|
||||
"This is **compounding**. Start with $\\$1$. Each month, multiply by $(1 + r_s)$:\n",
|
||||
"- Return $+5\\%$ → multiply by $1.05$\n",
|
||||
"- Return $-3\\%$ → multiply by $0.97$\n",
|
||||
"- Return $+5\\%$ $\\rightarrow$ multiply by $1.05$\n",
|
||||
"- Return $-3\\%$ $\\rightarrow$ multiply by $0.97$\n",
|
||||
"\n",
|
||||
"$V_t$ is the value of your $\\$1$ at the end of month $t$. If $V_t = 1.50$, your $\\$1$ has grown to $\\$1.50$.\n",
|
||||
"\n",
|
||||
|
||||
Reference in New Issue
Block a user