SPB Git

spb/wp39_uqo

Public

WP39 v1.0: full pipeline run (phases 2-7), results, figures, manuscript PDF, referee reports

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Simon-Pierre Boucher committed (Nov 2, 2026) parent 9c1ba37 Browse files

27 changed files +19,992 −0

modified .gitignore +7 −0
@@ -33,3 +33,10 @@ logs/
33 33
34 # macOS 34 # macOS
35 .DS_Store 35 .DS_Store
36+
37+# WP39 additions
38+artifacts/evaluation/preds/
39+artifacts/models/
40+artifacts/logs/*.jsonl
41+artifacts/logs/*.out
42+*.pyc
modified LIMITATIONS.md +12 −0
@@ -29,3 +29,15 @@
29 ## To be completed as results arrive 29 ## To be completed as results arrive
30 - (Phase 3) achieved sample sizes, base rates, coverage gaps by year/size. 30 - (Phase 3) achieved sample sizes, base rates, coverage gaps by year/size.
31 - (Phase 5) which placebo/stress tests failed or were inconclusive. 31 - (Phase 5) which placebo/stress tests failed or were inconclusive.
32+
33+## Completed from results (2026-11-02)
34+- Achieved sample: 3,796 firms, 102,522 firm-quarters (2013–2026); the sample starts in 2013 because eight prior quarters
35+ are needed for the seasonal expectation; 2020 lies in the validation period, so the COVID subgroup is not part of the test.
36+- The logistic-family confidence interval around the 1-minute increment (±0.0027) is comparable to, not narrower than,
37+ the pre-registered MDE (0.0025); the precise-null claim rests on the boosted family (±0.0006) and on the consistency of
38+ the sign across horizons, targets and subgroups.
39+- The announcement-window CAR coefficient on the incremental 1-minute component is positive and nominally significant
40+ (t = 2.9); it is one of several H5 tests, has the "wrong" sign for an information story, and is reported, not exploited.
41+- The placebo differential on shuffled labels is of the same order (−0.0004) as the primary LightGBM differential
42+ (+0.0016), so differences of this size should be read as zero.
43+- Delisted-firm stress tests and as-originally-reported specifications were not run (data not available from the vendor).
modified PROGRESS.md +46 −0
@@ -20,3 +20,49 @@
20 - Owner review pending; nothing in Phases 2–5 depends on test-period data until the Phase 3 gate. 20 - Owner review pending; nothing in Phases 2–5 depends on test-period data until the Phase 3 gate.
21 21
22 ## Phase 2 — Data acquisition and verification — IN PROGRESS 22 ## Phase 2 — Data acquisition and verification — IN PROGRESS
23+- 2026-11-02 13:31 — `01a_extract_node_tables.sh`: entities 5,451 · earnings_events 364,783 · corporate_actions 249,340 (raw format
24+ `firstrate:stock:<SYM>` / `<SYM>_DIVS`, loader adapted). `00_probe`: health ok, 67 datasets, schema v1 ok, no earnings route.
25+- 13:33–13:50 — `01_audit_universe`: 5,451 entities → 5,018 with ≥ 8 quarters → **4,568 eligible** (1m coverage ≥ 250 sessions);
26+ CIK matched 5,073, SIC 5,029 (SEC submissions fetched with a 6-thread, 8 req/s limiter after a sequential first attempt
27+ at ~1 req/s was restarted); 2,522 firms have former names (ticker-reuse audit input). `results/universe_audit.json`.
28+- 13:50–14:01 — `02_build_pit_panel`: first run hit the API rate limit (HTTP 429, 600 req/min) with 6 unthrottled threads →
29+ client now has a process-wide token bucket (`WP39_RATE`, default 6 req/s) and honours `Retry-After`; rerun succeeded:
30+ 13,052,739 facts (all revision 1), **194,817 firm-quarters**, release match ok 172,328 (88.5 %), lag > 30 d 15,242,
31+ no release 6,020, filing before release 1,227; release timing after_close 76,752 / before_open 66,719 / unknown 51,346;
32+ base rates: adverse op-inc 31.2 %, adverse NI 32.7 %, ROA decline 29.4 %, OCF negative 25.9 %, liquidity 47.7 %,
33+ |S| ≥ 0.5 % 61.4 %; S_opinc quartiles −0.87 % / 0.00 % / +0.82 % (heavy tails, winsorised in continuous models).
34+ Design freeze hash written to `artifacts/manifests/design_freeze.json` before any model fit.
35+- 14:01 — `03_build_features --workers 8` (WP39_RATE=1 per process) running: streaming export → features → windows.
36+- 14:01–14:59 — `03_build_features`: 4,568/4,568 symbols ok, 0 errors (58 min, 8 workers, ≈1.3 symbols/s); raw exports
37+ deleted after use; `~/wp39-cache/features` 5.1 GB + `windows` 5.9 GB. `04_build_labels` (28 s): event sample
38+ **481,159** observations (3,796 firms, 102,522 firm-quarters; h = 20: 97,788, base rate 30.1 %), calendar sample 258,480
39+ firm-months; cascade in `results/table_sample_cascade_event.csv`. **Phase 2 gate passed**: zero known forward-looking
40+ features (tests + live as-of equivalence), coverage gaps explained (2013 start = 8 prior quarters required).
41+
42+## Phase 3 — Descriptives and baselines (2026-11-02 15:00–15:01) — GATE PASSED
43+- `05_train_baselines` (30 s): B0–B5 logistic (C tuned on validation only), ridge continuous target, firm hold-out,
44+ walk-forward OOF 2016–2026 (86,791 rows per set). Validation log loss h=20: B1 0.5938 → B2 0.5691 → B3 0.5695 /
45+ B4 0.5688 / B5 0.5706. Test set opened only after this gate (results in Phase 4/5).
46+
47+## Phase 4 — Advanced models (15:01–15:30) — GATE PASSED
48+- `06_train_advanced` (29 min): LightGBM, 24-trial equal budget per information set (LB1–LB5, LB5all), secondary targets,
49+ horizon ladder with a fixed configuration, firm hold-out, walk-forward OOF (event + calendar). Validation: LB1 0.5447 →
50+ LB2 0.5214 → LB3 0.5234 / LB4 0.5239 / LB5 0.5245 / all 0.5259.
51+- `07_evaluate`: first run failed on a dtype mismatch (Int32/Int64 `fold`), fixed, rerun ok. **Test period 2021–2026,
52+ 53,667 obs**: Δ log loss B5−B2 = +0.0013 [−0.0013, +0.0041] (GW p = 0.52); LB5−LB2 = +0.0016 [+0.0010, +0.0023]
53+ (p = 0.0008, a deterioration); LB2−LB1 = −0.0068 [−0.0095, −0.0042]; AUC LB2 0.803, LB5 0.801. H1 and H2 rejected.
54+ H4: no horizon gradient (Spearman −0.5, p = 0.39/0.33). Secondary targets, firm hold-out, continuous target: same null.
55+ MDE (80 % power, 7 validation quarters): 0.0025.
56+
57+## Phase 5 — Robustness and interpretation (15:30–15:58)
58+- `08_run_robustness`: first run stuck 28 min in a row-wise pandas loop (CAR window) → vectorised in Polars, rerun in 25 s.
59+ Placebo (shuffled labels, 3 draws): AUC 0.50, Δ ≈ −0.0004 (noise floor). Subgroups: no gain anywhere; deterioration
60+ smallest for small/illiquid/loss firms. Panel: LFDS_B2 β = −0.0765 (t = −32.2); incremental d_lfds β = −0.0129
61+ (t = −1.76); interactions opposite to H3 (less informative for small and low-leverage firms). H5: CAR on LFDS5 β ≈ 0
62+ (t = 0.01); d_lfds +0.060 (t = 2.9, sign opposite to a deterioration signal); portfolios L/S alpha −0.59 %/mo (t = −1.85)
63+ gross, −0.62 % net for LB5; −0.49 % (t = −1.64) for LB2 → no economic value.
64+
65+## Phase 6 — Manuscript (15:58–16:10)
66+- `09_make_manuscript`: 15 LaTeX tables, 9 figures (validated palette), 206 macros in `paper/results_macros.tex`
67+ (fixes: NaN subgroup in figure, LaTeX escaping of math labels, Unicode in bib). `paper/main.pdf` compiled with
68+ `latexmk` on the laptop: 33 pages, 0 undefined references/citations.
added README.md +163 −0
@@ -0,0 +1,163 @@
1+<!-- Author: Simon-Pierre Boucher — simon-pierre.boucher@uqo.ca -->
2+# 🕰️ The Invisible Balance Sheet
3+
4+**UQO Working Paper No. 39** — *Can Intraday Financial Markets Detect Corporate Deterioration Before Accounting Disclosures?*
5+
6+[![Paper](https://img.shields.io/badge/paper-PDF%20(33%20p.)-b31b1b?logo=latex&logoColor=white)](paper/main.pdf)
7+[![Python](https://img.shields.io/badge/python-3.12%2B%20·%20uv-3776AB?logo=python&logoColor=white)](pyproject.toml)
8+[![Data](https://img.shields.io/badge/data-FinData%20OS%20·%206.7%20bn%201--min%20bars%20·%204%2C568%20firms-4051b5)](DATA_AUDIT.md)
9+[![Reproducible](https://img.shields.io/badge/reproducible-10%20scripts%20·%2029%20tests%20·%20frozen%20design-2e7d32)](docs/REPLICATION.md)
10+[![Institution](https://img.shields.io/badge/UQO-D%C3%A9pt.%20des%20sciences%20administratives-16365c)](https://uqo.ca)
11+[![Author](https://img.shields.io/badge/author-Simon--Pierre%20Boucher-16365c)](mailto:simon-pierre.boucher@uqo.ca)
12+
13+> **TL;DR** — Do one-minute markets see a firm's forthcoming accounting deterioration before daily markets do? On a
14+> strictly point-in-time panel of 3,796 U.S. firms and 102,522 firm-quarters (2013–2026) built from 6.7 billion raw
15+> 1-minute bars and quarterly statements with release dates, we forecast an adverse operating-income surprise 20 trading
16+> days before the earnings release with nested information sets of equal capacity. Fundamentals do most of the work,
17+> daily OHLCV adds a clear increment (Δ log loss −0.0068 with boosted trees), and 1-minute families add nothing:
18+> +0.0013 [−0.0013, +0.0041] (logistic) and +0.0016 [+0.0010, +0.0023] (trees) on an untouched 2021–2026 test period.
19+> The null holds at five horizons, for five accounting targets, a volatility placebo, unseen firms, every refit year and
20+> every subgroup; the signal is already in prices at the cutoff and has no factor-adjusted economic value.
21+> **A precise null**: the minute-by-minute tape adds noise, not foresight — on survivors (see Limitations).
22+
23+---
24+
25+## 📌 Status
26+
27+| Item | Value |
28+|---|---|
29+| Version | **1.0 (November 2026)** — built autonomously on 2026-11-02 under the owner's brief (`CLAUDE.md`); phases 0–7 complete |
30+| SSRN | not yet submitted |
31+| Journal | target: JAR / JFE / RFS (finance–accounting interface); internal referee reports in `docs/REFEREE_REPORTS.md` list the v1.1 revisions |
32+| Code & data | reproducible from `scripts/` against FinData OS (private FirstRate Data lakehouse); raw records not redistributed |
33+
34+## 🎯 What this paper does
35+
36+Anticipation is not the question — prices lead earnings at daily horizons and we reproduce it. The question is the
37+**marginal information value of sampling frequency**: holding the universe, calendar, cutoff, horizon, feature families
38+and tuning budget fixed, do 30-minute, 5-minute and 1-minute OHLCV bars add forecasting content about the accounting
39+outcome beyond point-in-time fundamentals and daily bars? Targets are accounting surprises against a seasonal random
40+walk with drift (never prices); the reveal date is the earnings press release; the information set at cutoff `c` holds
41+bars with session ≤ `c` and facts with `available_at ≤ c` only, with twelve leakage guards as unit tests.
42+
43+```
44+S_{i,q} = (X_{i,q} − E_c[X_{i,q}]) / TA_{i,q−1}, D_{i,q} = 1[S_{i,q} ≤ −0.5 %]
45+E_c[X_q] = X_{q−4} + ¼ Σ_{k=0..3} (X_{q−1−k} − X_{q−5−k}) (quarters available at c only)
46+```
47+
48+## 🏆 Headline results (test period 2021–2026, h = 20, N = 53,667)
49+
50+| Object | Estimate |
51+|---|---|
52+| Base rate of adverse surprise | 31.5 % |
53+| Log loss: base rate / fundamentals / + daily (LightGBM) | 0.628 / 0.494 / 0.487 (AUC 0.797 / 0.803) |
54+| Daily increment LB2 − LB1 | −0.0068 [−0.0095, −0.0042] |
55+| **1-minute increment** B5 − B2 (logistic) | **+0.0013 [−0.0013, +0.0041]**, GW p = 0.52 |
56+| **1-minute increment** LB5 − LB2 (LightGBM) | **+0.0016 [+0.0010, +0.0023]** (a deterioration) |
57+| 30-min / 5-min increments (LightGBM) | +0.0017 / +0.0021 |
58+| Pre-registered MDE (80 % power) | 0.0025 |
59+| Horizon gradient (H4) | none (Spearman −0.5, p ≈ 0.35) |
60+| Panel: surprise on LFDS_B2 / incremental LFDS_B5−B2 | β = −0.0765 (t = −32) / −0.0129 (t = −1.8) |
61+| Announcement CAR on LFDS_B5 | β ≈ 0 (t = 0.01): signal already in prices |
62+| L/S decile alpha (FF5+MOM), LB5 scores | −0.59 %/mo (t = −1.85) gross, −0.62 % net of 20 bps |
63+
64+## 🗂 Repository layout
65+
66+```
67+invisible-balance-sheet/ # project id wp39_uqo
68+├── CLAUDE.md · README.md · PROGRESS.md · DECISIONS.md · DATA_AUDIT.md · LIMITATIONS.md
69+├── configs/ research.yaml (frozen design) · data_contract.yaml · models.yaml
70+├── docs/ RESEARCH_DESIGN.md · PIT_PROTOCOL.md · NOVELTY_MEMO.md · API_INTEGRATION.md · COMPUTE_BUDGET.md · REPLICATION.md · REFEREE_REPORTS.md
71+├── literature/ RELATED_WORK_MATRIX.csv · references.bib (94 entries verified on Crossref)
72+├── src/wp39/ api_client · provenance · calendar · instruments · pit_fundamentals · corporate_actions · ingest · features · labels · samples · splits · models · inference · portfolio · robustness · figures · pipeline
73+├── scripts/ 00_probe … 09_make_manuscript (+ 01a node extracts)
74+├── tests/ 29 tests (timestamps/DST, PIT leakage, labels, splits, train-only transforms, corporate actions, ids, reproducibility, API contract incl. live as-of equivalence, features)
75+├── artifacts/ manifests (hashes, dataset versions, design freeze) · evaluation (csv/json) · logs
76+├── results/ audits, cascades, metrics, contrasts, regressions
77+├── paper/ main.tex · sections/ · tables/ (generated) · figures/ (generated) · results_macros.tex (206 macros) · main.pdf
78+└── data/ README only (no licensed records committed)
79+```
80+
81+## 🚀 Quick start
82+
83+```bash
84+uv venv -p 3.12 .venv && uv pip install -e ".[dev]"
85+export FINDATA_BASE_URL=http://127.0.0.1:8600/api/v1 WP39_CACHE=~/wp39-cache # on the FinData node
86+bash scripts/01a_extract_node_tables.sh && for s in 00 01 02 03 04 05 06 07 08 09; do .venv/bin/python scripts/${s}_*.py; done
87+pytest -q # WP39_LIVE=1 adds the live API tests
88+cd paper && make # latexmk → main.pdf
89+```
90+Measured wall-times (Mac Studio M3 Ultra, 28 cores): universe audit 17 min (SEC), PIT panel 8 min, features 58 min
91+(8 workers), sample 30 s, baselines 30 s, LightGBM 29 min, evaluation 1 min, robustness 25 s, manuscript 10 s.
92+
93+## 🗃 Data
94+
95+FinData OS (`findata.spboucher.ai/api/v1`), the owner's private lakehouse of FirstRate Data: raw 1-minute bars
96+(2000–2026, 16,195 symbols incl. 8,069 delisted), quarterly fundamentals (5,451 entities, 67 metrics, filing dates
97+2012–2026), 364,783 earnings-release events (node extract), splits/dividends (node extract). Public: SEC
98+`company_tickers.json` + `submissions` (CIK/SIC), Kenneth French daily factors. Universe cascade: 5,451 → 5,018 (≥ 8
99+quarters) → 4,568 (1-minute coverage); event sample 481,159 observations after admissibility and exclusions
100+(`results/table_sample_cascade_event.csv`). Full audit: `DATA_AUDIT.md`.
101+
102+## 🔬 Methodology
103+
104+1. Clocks and cutoffs (`samples.py`, `calendar.py`): `c = A_q − h`, h ∈ {40, 20, 10, 5, 1}; `c < min(A_q, F_q)`, `c > A_{q−1}`.
105+2. PIT fundamentals (`pit_fundamentals.py`): local as-of join on `available_at`, verified live against the API.
106+3. Labels (`labels.py`): seasonal-random-walk-with-drift surprises, primary and secondary targets, symmetric placebo.
107+4. Features (`features.py`): same 19 families from 1m/5m/30m buckets of the regular session, daily block, split/dividend-adjusted returns.
108+5. Ladder (`models.py`): B0–B5 logistic (C on validation), LB1–LB5 LightGBM (24-trial equal budget), ridge for the continuous target.
109+6. Validation (`splits.py`): chronological with purge/embargo, expanding-window annual refits, 20 % firm hold-out.
110+7. Inference (`inference.py`): block bootstrap by calendar quarter, Giacomini–White, Holm, two-way clustered panels.
111+8. Robustness and pricing (`robustness.py`, `portfolio.py`): shuffled labels, subgroups, CAR regressions, decile sorts with FF5+MOM and costs.
112+
113+## 🖼 Figures & tables inventory
114+
115+| Figure | Content |
116+|---|---|
117+| `fig01_timeline` | event-time design and no-leakage rule (schematic) |
118+| `fig02_coverage` | firms and adverse rate by year |
119+| `fig03_prevalence` | conditional prevalence by size, illiquidity, leverage, release timing |
120+| `fig04_frequency_gains` | Δ log loss vs B2 for 30m/5m/1m/all, logistic and LightGBM, 95 % block-bootstrap CIs |
121+| `fig05_reliability` | calibration deciles |
122+| `fig06_signal_evolution` | AUC and Δ by horizon (H4) |
123+| `fig07_heterogeneity` | Δ by pre-specified subgroup (H3) |
124+| `fig08_rolling` | annual refits: AUC and Δ by year |
125+| `fig09_economic` | decile returns and alphas |
126+
127+Tables (`paper/tables/*.tex`): universe and sample cascades, summary statistics, information sets, headline metrics,
128+paired contrasts, horizon ladder, secondary targets, firm hold-out, panel regressions, subgroups, placebo, continuous
129+target, economic value, CAR regressions.
130+
131+## ⚠️ Limitations
132+
133+- Accounting panel conditioned on firms listed in November 2026 (no delisted entities from the vendor): survivorship.
134+- `available_at = filing_date + 1` is a vendor policy; all facts are revision 1 (current values): PIT proxy, no as-originally-reported history.
135+- OHLCV bars only: no quotes, trades or order flow; bar statistics are not interpreted as informed trading.
136+- Logistic-family CI (±0.0027) is comparable to the MDE (0.0025); the precise-null claim rests mainly on the boosted family (±0.0006).
137+- No neural/text models (owner instruction to minimise AI use). Full list: `LIMITATIONS.md`; planned v1.1 revisions: `docs/REFEREE_REPORTS.md`.
138+
139+## 📝 Citation
140+
141+```bibtex
142+@techreport{boucher2026invisible,
143+ author = {Boucher, Simon-Pierre},
144+ title = {The Invisible Balance Sheet: Can Intraday Financial Markets Detect Corporate Deterioration Before Accounting Disclosures?},
145+ institution = {Universit\'e du Qu\'ebec en Outaouais, D\'epartement des sciences administratives},
146+ type = {Working Paper},
147+ number = {39},
148+ year = {2026},
149+ month = {November}
150+}
151+```
152+
153+## 👤 Author & contact
154+
155+**Simon-Pierre Boucher** — Département des sciences administratives, Université du Québec en Outaouais (UQO), Gatineau, QC.
156+📧 [simon-pierre.boucher@uqo.ca](mailto:simon-pierre.boucher@uqo.ca)
157+
158+## 🗒 Notes
159+
160+- Built in one autonomous Claude Code session on 2026-11-02 (phases 0–7 of `CLAUDE.md`); gates requiring owner
161+ approval are recorded as self-approved under the autonomous mandate (DECISIONS D-010) and remain open to veto.
162+- Directory name follows the series convention (`finance/<slug>`); project id and spbgit repository are `wp39_uqo`.
163+- Data attribution: FirstRate Data via FinData OS (private license; no raw records in this repository).
added artifacts/evaluation/advanced_fit_log.json +1218 −0
@@ -0,0 +1,1218 @@
1+{
2+ "fits": [
3+ {
4+ "design": "event",
5+ "h": 20,
6+ "importance_gain": {
7+ "f_accruals": 0.0255,
8+ "f_capex_assets": 0.0311,
9+ "f_cash_assets": 0.0402,
10+ "f_current_ratio": 0.0357,
11+ "f_gross_margin": 0.0288,
12+ "f_int_cover": 0.0183,
13+ "f_leverage": 0.0248,
14+ "f_log_assets": 0.0495,
15+ "f_log_mcap": 0.0311,
16+ "f_loss": 0.0007,
17+ "f_net_issuance": 0.0266,
18+ "f_ni_assets": 0.0308,
19+ "f_ocf_assets": 0.0235,
20+ "f_op_margin": 0.0051,
21+ "f_rd_rev": 0.0007,
22+ "f_rev_growth": 0.0332,
23+ "f_roa": 0.0069,
24+ "hist_adverse_rate": 0.0571,
25+ "info_age_td": 0.0257,
26+ "last_surprise": 0.3155,
27+ "mean_surprise4": 0.1891
28+ },
29+ "model": "LB1",
30+ "n_features": 21,
31+ "params": {
32+ "bagging_fraction": 1.0,
33+ "best_iteration": 658,
34+ "feature_fraction": 0.5,
35+ "lambda_l2": 10.0,
36+ "learning_rate": 0.01,
37+ "min_child_samples": 200,
38+ "num_leaves": 63
39+ },
40+ "tag": "chrono",
41+ "target": "y_adverse_opinc",
42+ "trials": 24,
43+ "val_score": 0.5446817024655795
44+ },
45+ {
46+ "design": "event",
47+ "h": 20,
48+ "importance_gain": {
49+ "f_accruals": 0.0214,
50+ "f_capex_assets": 0.0227,
51+ "f_cash_assets": 0.0263,
52+ "f_current_ratio": 0.0178,
53+ "f_gross_margin": 0.0234,
54+ "f_int_cover": 0.0155,
55+ "f_leverage": 0.0188,
56+ "f_log_assets": 0.0248,
57+ "f_log_mcap": 0.0145,
58+ "f_loss": 0.0001,
59+ "f_net_issuance": 0.0189,
60+ "f_ni_assets": 0.0266,
61+ "f_ocf_assets": 0.0175,
62+ "f_op_margin": 0.0049,
63+ "f_rd_rev": 0.0005,
64+ "f_rev_growth": 0.0248,
65+ "f_roa": 0.003,
66+ "hist_adverse_rate": 0.0375,
67+ "info_age_td": 0.0231,
68+ "last_surprise": 0.2557,
69+ "mean_surprise4": 0.1608,
70+ "wd_amihud60": 0.0084,
71+ "wd_bars20": 0.0124,
72+ "wd_intraday20": 0.0101,
73+ "wd_kurt60": 0.0131,
74+ "wd_log_dollar_vol60": 0.0105,
75+ "wd_maxdd60": 0.0345,
76+ "wd_overnight20": 0.0179,
77+ "wd_parkinson20": 0.016,
78+ "wd_ret20": 0.0117,
79+ "wd_ret60": 0.0227,
80+ "wd_skew60": 0.0137,
81+ "wd_vol20": 0.0146,
82+ "wd_vol60": 0.0241,
83+ "wd_volratio20": 0.0132,
84+ "wd_volratio5": 0.016,
85+ "wd_zeroret60": 0.0023
86+ },
87+ "model": "LB2",
88+ "n_features": 37,
89+ "params": {
90+ "bagging_fraction": 0.8,
91+ "best_iteration": 752,
92+ "feature_fraction": 0.9,
93+ "lambda_l2": 10.0,
94+ "learning_rate": 0.01,
95+ "min_child_samples": 100,
96+ "num_leaves": 63
97+ },
98+ "tag": "chrono",
99+ "target": "y_adverse_opinc",
100+ "trials": 24,
101+ "val_score": 0.521392195867179
102+ },
103+ {
104+ "design": "event",
105+ "h": 20,
106+ "importance_gain": {
107+ "f_accruals": 0.0148,
108+ "f_capex_assets": 0.017,
109+ "f_cash_assets": 0.0222,
110+ "f_current_ratio": 0.0127,
111+ "f_gross_margin": 0.0175,
112+ "f_int_cover": 0.0112,
113+ "f_leverage": 0.0122,
114+ "f_log_assets": 0.0191,
115+ "f_log_mcap": 0.0103,
116+ "f_loss": 0.0,
117+ "f_net_issuance": 0.0129,
118+ "f_ni_assets": 0.0239,
119+ "f_ocf_assets": 0.0119,
120+ "f_op_margin": 0.0051,
121+ "f_rd_rev": 0.0001,
122+ "f_rev_growth": 0.0192,
123+ "f_roa": 0.0029,
124+ "hist_adverse_rate": 0.038,
125+ "info_age_td": 0.0194,
126+ "last_surprise": 0.282,
127+ "mean_surprise4": 0.1734,
128+ "w30m_ac1": 0.0089,
129+ "w30m_beta": 0.0114,
130+ "w30m_bpv": 0.0047,
131+ "w30m_down_vol_share": 0.0072,
132+ "w30m_drift": 0.0033,
133+ "w30m_max_share": 0.0057,
134+ "w30m_present_share": 0.0002,
135+ "w30m_rj": 0.0081,
136+ "w30m_rkurt": 0.0055,
137+ "w30m_rskew": 0.0044,
138+ "w30m_rsneg_share": 0.0036,
139+ "w30m_rv": 0.0093,
140+ "w30m_rv_mktdown_share": 0.0084,
141+ "w30m_sjv": 0.0017,
142+ "w30m_vol_first30": 0.0086,
143+ "w30m_vol_gini": 0.0097,
144+ "w30m_vol_last30": 0.0037,
145+ "w30m_volofvol": 0.0102,
146+ "w30m_vratio": 0.0087,
147+ "wd_amihud60": 0.0045,
148+ "wd_bars20": 0.0072,
149+ "wd_intraday20": 0.003,
150+ "wd_kurt60": 0.0079,
151+ "wd_log_dollar_vol60": 0.0048,
152+ "wd_maxdd60": 0.031,
153+ "wd_overnight20": 0.0107,
154+ "wd_parkinson20": 0.0065,
155+ "wd_ret20": 0.0061,
156+ "wd_ret60": 0.0179,
157+ "wd_skew60": 0.0078,
158+ "wd_vol20": 0.0082,
159+ "wd_vol60": 0.0167,
160+ "wd_volratio20": 0.0077,
161+ "wd_volratio5": 0.0094,
162+ "wd_zeroret60": 0.0012
163+ },
164+ "model": "LB3",
165+ "n_features": 56,
166+ "params": {
167+ "bagging_fraction": 1.0,
168+ "best_iteration": 676,
169+ "feature_fraction": 0.9,
170+ "lambda_l2": 10.0,
171+ "learning_rate": 0.01,
172+ "min_child_samples": 100,
173+ "num_leaves": 63
174+ },
175+ "tag": "chrono",
176+ "target": "y_adverse_opinc",
177+ "trials": 24,
178+ "val_score": 0.5234194050086942
179+ },
180+ {
181+ "design": "event",
182+ "h": 20,
183+ "importance_gain": {
184+ "f_accruals": 0.015,
185+ "f_capex_assets": 0.0178,
186+ "f_cash_assets": 0.0218,
187+ "f_current_ratio": 0.0138,
188+ "f_gross_margin": 0.0176,
189+ "f_int_cover": 0.0112,
190+ "f_leverage": 0.014,
191+ "f_log_assets": 0.0202,
192+ "f_log_mcap": 0.0096,
193+ "f_loss": 0.0001,
194+ "f_net_issuance": 0.014,
195+ "f_ni_assets": 0.0234,
196+ "f_ocf_assets": 0.0131,
197+ "f_op_margin": 0.0044,
198+ "f_rd_rev": 0.0002,
199+ "f_rev_growth": 0.0204,
200+ "f_roa": 0.0027,
201+ "hist_adverse_rate": 0.0345,
202+ "info_age_td": 0.019,
203+ "last_surprise": 0.2544,
204+ "mean_surprise4": 0.1575,
205+ "w5m_ac1": 0.0082,
206+ "w5m_beta": 0.0139,
207+ "w5m_bpv": 0.0068,
208+ "w5m_down_vol_share": 0.008,
209+ "w5m_drift": 0.004,
210+ "w5m_max_share": 0.0084,
211+ "w5m_present_share": 0.0038,
212+ "w5m_rj": 0.0108,
213+ "w5m_rkurt": 0.0095,
214+ "w5m_rskew": 0.0075,
215+ "w5m_rsneg_share": 0.0051,
216+ "w5m_rv": 0.005,
217+ "w5m_rv_mktdown_share": 0.0103,
218+ "w5m_sjv": 0.0021,
219+ "w5m_vol_first30": 0.009,
220+ "w5m_vol_gini": 0.0086,
221+ "w5m_vol_last30": 0.012,
222+ "w5m_volofvol": 0.0087,
223+ "w5m_vratio": 0.0099,
224+ "wd_amihud60": 0.0056,
225+ "wd_bars20": 0.0067,
226+ "wd_intraday20": 0.0043,
227+ "wd_kurt60": 0.0097,
228+ "wd_log_dollar_vol60": 0.0053,
229+ "wd_maxdd60": 0.0309,
230+ "wd_overnight20": 0.0127,
231+ "wd_parkinson20": 0.0067,
232+ "wd_ret20": 0.0076,
233+ "wd_ret60": 0.0183,
234+ "wd_skew60": 0.0092,
235+ "wd_vol20": 0.0089,
236+ "wd_vol60": 0.0176,
237+ "wd_volratio20": 0.009,
238+ "wd_volratio5": 0.0103,
239+ "wd_zeroret60": 0.0011
240+ },
241+ "model": "LB4",
242+ "n_features": 56,
243+ "params": {
244+ "bagging_fraction": 1.0,
245+ "best_iteration": 915,
246+ "feature_fraction": 0.9,
247+ "lambda_l2": 10.0,
248+ "learning_rate": 0.01,
249+ "min_child_samples": 100,
250+ "num_leaves": 63
251+ },
252+ "tag": "chrono",
253+ "target": "y_adverse_opinc",
254+ "trials": 24,
255+ "val_score": 0.5238692601234577
256+ },
257+ {
258+ "design": "event",
259+ "h": 20,
260+ "importance_gain": {
261+ "f_accruals": 0.0144,
262+ "f_capex_assets": 0.0181,
263+ "f_cash_assets": 0.0222,
264+ "f_current_ratio": 0.012,
265+ "f_gross_margin": 0.016,
266+ "f_int_cover": 0.0105,
267+ "f_leverage": 0.0137,
268+ "f_log_assets": 0.0206,
269+ "f_log_mcap": 0.0087,
270+ "f_loss": 0.0001,
271+ "f_net_issuance": 0.0131,
272+ "f_ni_assets": 0.0227,
273+ "f_ocf_assets": 0.0118,
274+ "f_op_margin": 0.0045,
275+ "f_rd_rev": 0.0002,
276+ "f_rev_growth": 0.0187,
277+ "f_roa": 0.0022,
278+ "hist_adverse_rate": 0.0382,
279+ "info_age_td": 0.0189,
280+ "last_surprise": 0.2797,
281+ "mean_surprise4": 0.1727,
282+ "w1m_ac1": 0.0058,
283+ "w1m_beta": 0.0109,
284+ "w1m_bpv": 0.0038,
285+ "w1m_down_vol_share": 0.0083,
286+ "w1m_drift": 0.0034,
287+ "w1m_max_share": 0.0075,
288+ "w1m_present_share": 0.0045,
289+ "w1m_rj": 0.0089,
290+ "w1m_rkurt": 0.0095,
291+ "w1m_rskew": 0.0066,
292+ "w1m_rsneg_share": 0.0048,
293+ "w1m_rv": 0.0043,
294+ "w1m_rv_mktdown_share": 0.0065,
295+ "w1m_sjv": 0.0019,
296+ "w1m_vol_first30": 0.008,
297+ "w1m_vol_gini": 0.0091,
298+ "w1m_vol_last30": 0.0106,
299+ "w1m_volofvol": 0.007,
300+ "w1m_vratio": 0.0076,
301+ "wd_amihud60": 0.0043,
302+ "wd_bars20": 0.0042,
303+ "wd_intraday20": 0.0036,
304+ "wd_kurt60": 0.0077,
305+ "wd_log_dollar_vol60": 0.0043,
306+ "wd_maxdd60": 0.0318,
307+ "wd_overnight20": 0.0119,
308+ "wd_parkinson20": 0.0072,
309+ "wd_ret20": 0.0066,
310+ "wd_ret60": 0.0175,
311+ "wd_skew60": 0.0082,
312+ "wd_vol20": 0.0086,
313+ "wd_vol60": 0.0184,
314+ "wd_volratio20": 0.0077,
315+ "wd_volratio5": 0.0097,
316+ "wd_zeroret60": 0.0006
317+ },
318+ "model": "LB5",
319+ "n_features": 56,
320+ "params": {
321+ "bagging_fraction": 1.0,
322+ "best_iteration": 682,
323+ "feature_fraction": 0.9,
324+ "lambda_l2": 10.0,
325+ "learning_rate": 0.01,
326+ "min_child_samples": 100,
327+ "num_leaves": 63
328+ },
329+ "tag": "chrono",
330+ "target": "y_adverse_opinc",
331+ "trials": 24,
332+ "val_score": 0.5244906882234781
333+ },
334+ {
335+ "design": "event",
336+ "h": 20,
337+ "importance_gain": {
338+ "f_accruals": 0.0118,
339+ "f_capex_assets": 0.0133,
340+ "f_cash_assets": 0.0198,
341+ "f_current_ratio": 0.0103,
342+ "f_gross_margin": 0.0144,
343+ "f_int_cover": 0.0086,
344+ "f_leverage": 0.0105,
345+ "f_log_assets": 0.0175,
346+ "f_log_mcap": 0.0076,
347+ "f_loss": 0.0,
348+ "f_net_issuance": 0.0094,
349+ "f_ni_assets": 0.021,
350+ "f_ocf_assets": 0.0097,
351+ "f_op_margin": 0.0045,
352+ "f_rd_rev": 0.0001,
353+ "f_rev_growth": 0.0159,
354+ "f_roa": 0.0021,
355+ "hist_adverse_rate": 0.0378,
356+ "info_age_td": 0.0167,
357+ "last_surprise": 0.2697,
358+ "mean_surprise4": 0.1701,
359+ "w1m_ac1": 0.0039,
360+ "w1m_beta": 0.0049,
361+ "w1m_bpv": 0.0016,
362+ "w1m_down_vol_share": 0.0054,
363+ "w1m_drift": 0.0,
364+ "w1m_max_share": 0.0045,
365+ "w1m_present_share": 0.0019,
366+ "w1m_rj": 0.0071,
367+ "w1m_rkurt": 0.0069,
368+ "w1m_rskew": 0.0048,
369+ "w1m_rsneg_share": 0.0031,
370+ "w1m_rv": 0.0019,
371+ "w1m_rv_mktdown_share": 0.004,
372+ "w1m_sjv": 0.0012,
373+ "w1m_vol_first30": 0.0,
374+ "w1m_vol_gini": 0.0056,
375+ "w1m_vol_last30": 0.0051,
376+ "w1m_volofvol": 0.0024,
377+ "w1m_vratio": 0.0043,
378+ "w30m_ac1": 0.0063,
379+ "w30m_beta": 0.0072,
380+ "w30m_bpv": 0.0028,
381+ "w30m_down_vol_share": 0.0051,
382+ "w30m_drift": 0.0019,
383+ "w30m_max_share": 0.0037,
384+ "w30m_present_share": 0.0001,
385+ "w30m_rj": 0.0066,
386+ "w30m_rkurt": 0.0036,
387+ "w30m_rskew": 0.0023,
388+ "w30m_rsneg_share": 0.0022,
389+ "w30m_rv": 0.0047,
390+ "w30m_rv_mktdown_share": 0.0066,
391+ "w30m_sjv": 0.0009,
392+ "w30m_vol_first30": 0.005,
393+ "w30m_vol_gini": 0.0054,
394+ "w30m_vol_last30": 0.0021,
395+ "w30m_volofvol": 0.0068,
396+ "w30m_vratio": 0.0054,
397+ "w5m_ac1": 0.0043,
398+ "w5m_beta": 0.006,
399+ "w5m_bpv": 0.0024,
400+ "w5m_down_vol_share": 0.0031,
401+ "w5m_drift": 0.0001,
402+ "w5m_max_share": 0.0057,
403+ "w5m_present_share": 0.0015,
404+ "w5m_rj": 0.0069,
405+ "w5m_rkurt": 0.0058,
406+ "w5m_rskew": 0.0034,
407+ "w5m_rsneg_share": 0.0022,
408+ "w5m_rv": 0.0015,
409+ "w5m_rv_mktdown_share": 0.0049,
410+ "w5m_sjv": 0.0009,
411+ "w5m_vol_first30": 0.0006,
412+ "w5m_vol_gini": 0.0037,
413+ "w5m_vol_last30": 0.0047,
414+ "w5m_volofvol": 0.0051,
415+ "w5m_vratio": 0.0036,
416+ "wd_amihud60": 0.0026,
417+ "wd_bars20": 0.0022,
418+ "wd_intraday20": 0.0017,
419+ "wd_kurt60": 0.0057,
420+ "wd_log_dollar_vol60": 0.0025,
421+ "wd_maxdd60": 0.0292,
422+ "wd_overnight20": 0.0092,
423+ "wd_parkinson20": 0.0033,
424+ "wd_ret20": 0.0043,
425+ "wd_ret60": 0.0163,
426+ "wd_skew60": 0.0064,
427+ "wd_vol20": 0.0052,
428+ "wd_vol60": 0.0147,
429+ "wd_volratio20": 0.0052,
430+ "wd_volratio5": 0.0065,
431+ "wd_zeroret60": 0.0005
432+ },
433+ "model": "LB5all",
434+ "n_features": 94,
435+ "params": {
436+ "bagging_fraction": 1.0,
437+ "best_iteration": 635,
438+ "feature_fraction": 0.9,
439+ "lambda_l2": 10.0,
440+ "learning_rate": 0.01,
441+ "min_child_samples": 100,
442+ "num_leaves": 63
443+ },
444+ "tag": "chrono",
445+ "target": "y_adverse_opinc",
446+ "trials": 24,
447+ "val_score": 0.5259176970288985
448+ },
449+ {
450+ "design": "event",
451+ "h": 20,
452+ "importance_gain": {
453+ "f_accruals": 0.0329,
454+ "f_capex_assets": 0.0197,
455+ "f_cash_assets": 0.0288,
456+ "f_current_ratio": 0.0105,
457+ "f_gross_margin": 0.0379,
458+ "f_int_cover": 0.0178,
459+ "f_leverage": 0.0215,
460+ "f_log_assets": 0.0196,
461+ "f_log_mcap": 0.0176,
462+ "f_loss": 0.0,
463+ "f_net_issuance": 0.0132,
464+ "f_ni_assets": 0.0659,
465+ "f_ocf_assets": 0.0146,
466+ "f_op_margin": 0.0018,
467+ "f_rd_rev": 0.0016,
468+ "f_rev_growth": 0.0184,
469+ "f_roa": 0.0176,
470+ "hist_adverse_rate": 0.0507,
471+ "info_age_td": 0.0285,
472+ "last_surprise": 0.2513,
473+ "mean_surprise4": 0.1492,
474+ "wd_amihud60": 0.0026,
475+ "wd_bars20": 0.0106,
476+ "wd_intraday20": 0.0045,
477+ "wd_kurt60": 0.0042,
478+ "wd_log_dollar_vol60": 0.0064,
479+ "wd_maxdd60": 0.0326,
480+ "wd_overnight20": 0.0094,
481+ "wd_parkinson20": 0.025,
482+ "wd_ret20": 0.0073,
483+ "wd_ret60": 0.0172,
484+ "wd_skew60": 0.0061,
485+ "wd_vol20": 0.0102,
486+ "wd_vol60": 0.0333,
487+ "wd_volratio20": 0.0051,
488+ "wd_volratio5": 0.0052,
489+ "wd_zeroret60": 0.0014
490+ },
491+ "model": "LB2",
492+ "n_features": 37,
493+ "params": {
494+ "bagging_fraction": 1.0,
495+ "best_iteration": 394,
496+ "feature_fraction": 0.7,
497+ "lambda_l2": 1.0,
498+ "learning_rate": 0.03,
499+ "min_child_samples": 100,
500+ "num_leaves": 15
501+ },
502+ "tag": "chrono",
503+ "target": "y_adverse_netinc",
504+ "trials": 24,
505+ "val_score": 0.5989400056550856
506+ },
507+ {
508+ "design": "event",
509+ "h": 20,
510+ "importance_gain": {
511+ "f_accruals": 0.0284,
512+ "f_capex_assets": 0.0169,
513+ "f_cash_assets": 0.0263,
514+ "f_current_ratio": 0.0084,
515+ "f_gross_margin": 0.0304,
516+ "f_int_cover": 0.0153,
517+ "f_leverage": 0.0177,
518+ "f_log_assets": 0.0176,
519+ "f_log_mcap": 0.0139,
520+ "f_loss": 0.0,
521+ "f_net_issuance": 0.012,
522+ "f_ni_assets": 0.0592,
523+ "f_ocf_assets": 0.0125,
524+ "f_op_margin": 0.0008,
525+ "f_rd_rev": 0.001,
526+ "f_rev_growth": 0.0172,
527+ "f_roa": 0.0173,
528+ "hist_adverse_rate": 0.0408,
529+ "info_age_td": 0.0253,
530+ "last_surprise": 0.2636,
531+ "mean_surprise4": 0.15,
532+ "w1m_ac1": 0.0033,
533+ "w1m_beta": 0.0052,
534+ "w1m_bpv": 0.0041,
535+ "w1m_down_vol_share": 0.0045,
536+ "w1m_drift": 0.0028,
537+ "w1m_max_share": 0.0033,
538+ "w1m_present_share": 0.006,
539+ "w1m_rj": 0.011,
540+ "w1m_rkurt": 0.0045,
541+ "w1m_rskew": 0.0045,
542+ "w1m_rsneg_share": 0.0021,
543+ "w1m_rv": 0.0049,
544+ "w1m_rv_mktdown_share": 0.0037,
545+ "w1m_sjv": 0.0015,
546+ "w1m_vol_first30": 0.0061,
547+ "w1m_vol_gini": 0.0067,
548+ "w1m_vol_last30": 0.0079,
549+ "w1m_volofvol": 0.0078,
550+ "w1m_vratio": 0.0043,
551+ "wd_amihud60": 0.0023,
552+ "wd_bars20": 0.0031,
553+ "wd_intraday20": 0.0029,
554+ "wd_kurt60": 0.0029,
555+ "wd_log_dollar_vol60": 0.0042,
556+ "wd_maxdd60": 0.0343,
557+ "wd_overnight20": 0.0067,
558+ "wd_parkinson20": 0.0174,
559+ "wd_ret20": 0.0058,
560+ "wd_ret60": 0.0157,
561+ "wd_skew60": 0.005,
562+ "wd_vol20": 0.0056,
563+ "wd_vol60": 0.0191,
564+ "wd_volratio20": 0.0032,
565+ "wd_volratio5": 0.0024,
566+ "wd_zeroret60": 0.0009
567+ },
568+ "model": "LB5",
569+ "n_features": 56,
570+ "params": {
571+ "bagging_fraction": 1.0,
572+ "best_iteration": 374,
573+ "feature_fraction": 0.7,
574+ "lambda_l2": 1.0,
575+ "learning_rate": 0.03,
576+ "min_child_samples": 100,
577+ "num_leaves": 15
578+ },
579+ "tag": "chrono",
580+ "target": "y_adverse_netinc",
581+ "trials": 24,
582+ "val_score": 0.6002488925915237
583+ },
584+ {
585+ "design": "event",
586+ "h": 20,
587+ "importance_gain": {
588+ "f_accruals": 0.0104,
589+ "f_capex_assets": 0.0338,
590+ "f_cash_assets": 0.024,
591+ "f_current_ratio": 0.0137,
592+ "f_gross_margin": 0.0394,
593+ "f_int_cover": 0.0158,
594+ "f_leverage": 0.0271,
595+ "f_log_assets": 0.02,
596+ "f_log_mcap": 0.0341,
597+ "f_loss": 0.0005,
598+ "f_net_issuance": 0.0432,
599+ "f_ni_assets": 0.0454,
600+ "f_ocf_assets": 0.0143,
601+ "f_op_margin": 0.0041,
602+ "f_rd_rev": 0.0064,
603+ "f_rev_growth": 0.0574,
604+ "f_roa": 0.0096,
605+ "hist_adverse_rate": 0.0558,
606+ "info_age_td": 0.0274,
607+ "last_surprise": 0.1681,
608+ "mean_surprise4": 0.0598,
609+ "wd_amihud60": 0.0114,
610+ "wd_bars20": 0.0117,
611+ "wd_intraday20": 0.0097,
612+ "wd_kurt60": 0.0093,
613+ "wd_log_dollar_vol60": 0.0113,
614+ "wd_maxdd60": 0.093,
615+ "wd_overnight20": 0.0187,
616+ "wd_parkinson20": 0.0219,
617+ "wd_ret20": 0.0093,
618+ "wd_ret60": 0.0234,
619+ "wd_skew60": 0.015,
620+ "wd_vol20": 0.016,
621+ "wd_vol60": 0.0155,
622+ "wd_volratio20": 0.0108,
623+ "wd_volratio5": 0.0099,
624+ "wd_zeroret60": 0.0029
625+ },
626+ "model": "LB2",
627+ "n_features": 37,
628+ "params": {
629+ "bagging_fraction": 0.8,
630+ "best_iteration": 373,
631+ "feature_fraction": 0.7,
632+ "lambda_l2": 0.0,
633+ "learning_rate": 0.03,
634+ "min_child_samples": 100,
635+ "num_leaves": 15
636+ },
637+ "tag": "chrono",
638+ "target": "y_roa_decline",
639+ "trials": 24,
640+ "val_score": 0.585544405775596
641+ },
642+ {
643+ "design": "event",
644+ "h": 20,
645+ "importance_gain": {
646+ "f_accruals": 0.0093,
647+ "f_capex_assets": 0.0285,
648+ "f_cash_assets": 0.0236,
649+ "f_current_ratio": 0.0125,
650+ "f_gross_margin": 0.0345,
651+ "f_int_cover": 0.0114,
652+ "f_leverage": 0.025,
653+ "f_log_assets": 0.0137,
654+ "f_log_mcap": 0.0276,
655+ "f_loss": 0.0007,
656+ "f_net_issuance": 0.042,
657+ "f_ni_assets": 0.0327,
658+ "f_ocf_assets": 0.0124,
659+ "f_op_margin": 0.0053,
660+ "f_rd_rev": 0.0044,
661+ "f_rev_growth": 0.055,
662+ "f_roa": 0.008,
663+ "hist_adverse_rate": 0.0442,
664+ "info_age_td": 0.026,
665+ "last_surprise": 0.1612,
666+ "mean_surprise4": 0.0542,
667+ "w1m_ac1": 0.0089,
668+ "w1m_beta": 0.0145,
669+ "w1m_bpv": 0.0045,
670+ "w1m_down_vol_share": 0.0065,
671+ "w1m_drift": 0.0038,
672+ "w1m_max_share": 0.0075,
673+ "w1m_present_share": 0.0061,
674+ "w1m_rj": 0.0113,
675+ "w1m_rkurt": 0.0068,
676+ "w1m_rskew": 0.0062,
677+ "w1m_rsneg_share": 0.0041,
678+ "w1m_rv": 0.0052,
679+ "w1m_rv_mktdown_share": 0.0077,
680+ "w1m_sjv": 0.0025,
681+ "w1m_vol_first30": 0.0071,
682+ "w1m_vol_gini": 0.0114,
683+ "w1m_vol_last30": 0.0076,
684+ "w1m_volofvol": 0.0097,
685+ "w1m_vratio": 0.0066,
686+ "wd_amihud60": 0.0087,
687+ "wd_bars20": 0.0038,
688+ "wd_intraday20": 0.0041,
689+ "wd_kurt60": 0.0076,
690+ "wd_log_dollar_vol60": 0.0088,
691+ "wd_maxdd60": 0.0939,
692+ "wd_overnight20": 0.0121,
693+ "wd_parkinson20": 0.0106,
694+ "wd_ret20": 0.0057,
695+ "wd_ret60": 0.0203,
696+ "wd_skew60": 0.0126,
697+ "wd_vol20": 0.0095,
698+ "wd_vol60": 0.0126,
699+ "wd_volratio20": 0.0098,
700+ "wd_volratio5": 0.008,
701+ "wd_zeroret60": 0.002
702+ },
703+ "model": "LB5",
704+ "n_features": 56,
705+ "params": {
706+ "bagging_fraction": 0.6,
707+ "best_iteration": 862,
708+ "feature_fraction": 0.9,
709+ "lambda_l2": 0.0,
710+ "learning_rate": 0.01,
711+ "min_child_samples": 100,
712+ "num_leaves": 15
713+ },
714+ "tag": "chrono",
715+ "target": "y_roa_decline",
716+ "trials": 24,
717+ "val_score": 0.5870107720935767
718+ },
719+ {
720+ "design": "event",
721+ "h": 20,
722+ "importance_gain": {
723+ "f_accruals": 0.0522,
724+ "f_capex_assets": 0.026,
725+ "f_cash_assets": 0.0771,
726+ "f_current_ratio": 0.0248,
727+ "f_gross_margin": 0.0395,
728+ "f_int_cover": 0.016,
729+ "f_leverage": 0.0265,
730+ "f_log_assets": 0.0829,
731+ "f_log_mcap": 0.0267,
732+ "f_loss": 0.0002,
733+ "f_net_issuance": 0.0198,
734+ "f_ni_assets": 0.0352,
735+ "f_ocf_assets": 0.0512,
736+ "f_op_margin": 0.0526,
737+ "f_rd_rev": 0.0151,
738+ "f_rev_growth": 0.0784,
739+ "f_roa": 0.0049,
740+ "hist_adverse_rate": 0.0249,
741+ "info_age_td": 0.0102,
742+ "last_surprise": 0.0567,
743+ "mean_surprise4": 0.0274,
744+ "wd_amihud60": 0.0134,
745+ "wd_bars20": 0.0154,
746+ "wd_intraday20": 0.0142,
747+ "wd_kurt60": 0.017,
748+ "wd_log_dollar_vol60": 0.0137,
749+ "wd_maxdd60": 0.02,
750+ "wd_overnight20": 0.018,
751+ "wd_parkinson20": 0.0251,
752+ "wd_ret20": 0.0141,
753+ "wd_ret60": 0.0168,
754+ "wd_skew60": 0.0156,
755+ "wd_vol20": 0.0144,
756+ "wd_vol60": 0.0178,
757+ "wd_volratio20": 0.0159,
758+ "wd_volratio5": 0.0158,
759+ "wd_zeroret60": 0.0046
760+ },
761+ "model": "LB2",
762+ "n_features": 37,
763+ "params": {
764+ "bagging_fraction": 0.8,
765+ "best_iteration": 632,
766+ "feature_fraction": 0.5,
767+ "lambda_l2": 10.0,
768+ "learning_rate": 0.01,
769+ "min_child_samples": 200,
770+ "num_leaves": 63
771+ },
772+ "tag": "chrono",
773+ "target": "y_ocf_negative",
774+ "trials": 24,
775+ "val_score": 0.4493253744647834
776+ },
777+ {
778+ "design": "event",
779+ "h": 20,
780+ "importance_gain": {
781+ "f_accruals": 0.0526,
782+ "f_capex_assets": 0.0227,
783+ "f_cash_assets": 0.0861,
784+ "f_current_ratio": 0.018,
785+ "f_gross_margin": 0.043,
786+ "f_int_cover": 0.0088,
787+ "f_leverage": 0.0198,
788+ "f_log_assets": 0.0897,
789+ "f_log_mcap": 0.0151,
790+ "f_loss": 0.0001,
791+ "f_net_issuance": 0.0123,
792+ "f_ni_assets": 0.0224,
793+ "f_ocf_assets": 0.0546,
794+ "f_op_margin": 0.0477,
795+ "f_rd_rev": 0.0193,
796+ "f_rev_growth": 0.0902,
797+ "f_roa": 0.0018,
798+ "hist_adverse_rate": 0.0289,
799+ "info_age_td": 0.0068,
800+ "last_surprise": 0.0572,
801+ "mean_surprise4": 0.0247,
802+ "w1m_ac1": 0.0059,
803+ "w1m_beta": 0.0127,
804+ "w1m_bpv": 0.0115,
805+ "w1m_down_vol_share": 0.009,
806+ "w1m_drift": 0.0043,
807+ "w1m_max_share": 0.0054,
808+ "w1m_present_share": 0.0035,
809+ "w1m_rj": 0.0077,
810+ "w1m_rkurt": 0.0081,
811+ "w1m_rskew": 0.0068,
812+ "w1m_rsneg_share": 0.0042,
813+ "w1m_rv": 0.0083,
814+ "w1m_rv_mktdown_share": 0.0066,
815+ "w1m_sjv": 0.0027,
816+ "w1m_vol_first30": 0.0089,
817+ "w1m_vol_gini": 0.0095,
818+ "w1m_vol_last30": 0.013,
819+ "w1m_volofvol": 0.0052,
820+ "w1m_vratio": 0.0069,
821+ "wd_amihud60": 0.0053,
822+ "wd_bars20": 0.0042,
823+ "wd_intraday20": 0.0035,
824+ "wd_kurt60": 0.0109,
825+ "wd_log_dollar_vol60": 0.0067,
826+ "wd_maxdd60": 0.0166,
827+ "wd_overnight20": 0.0095,
828+ "wd_parkinson20": 0.0108,
829+ "wd_ret20": 0.0081,
830+ "wd_ret60": 0.0102,
831+ "wd_skew60": 0.0081,
832+ "wd_vol20": 0.0054,
833+ "wd_vol60": 0.019,
834+ "wd_volratio20": 0.009,
835+ "wd_volratio5": 0.0096,
836+ "wd_zeroret60": 0.0012
837+ },
838+ "model": "LB5",
839+ "n_features": 56,
840+ "params": {
841+ "bagging_fraction": 0.6,
842+ "best_iteration": 914,
843+ "feature_fraction": 0.9,
844+ "lambda_l2": 0.0,
845+ "learning_rate": 0.01,
846+ "min_child_samples": 100,
847+ "num_leaves": 15
848+ },
849+ "tag": "chrono",
850+ "target": "y_ocf_negative",
851+ "trials": 24,
852+ "val_score": 0.44969331270002605
853+ },
854+ {
855+ "design": "event",
856+ "h": 20,
857+ "importance_gain": {
858+ "f_accruals": 0.0195,
859+ "f_capex_assets": 0.0409,
860+ "f_cash_assets": 0.0265,
861+ "f_current_ratio": 0.0709,
862+ "f_gross_margin": 0.052,
863+ "f_int_cover": 0.1826,
864+ "f_leverage": 0.0423,
865+ "f_log_assets": 0.0235,
866+ "f_log_mcap": 0.0247,
867+ "f_loss": 0.0002,
868+ "f_net_issuance": 0.0424,
869+ "f_ni_assets": 0.044,
870+ "f_ocf_assets": 0.0167,
871+ "f_op_margin": 0.0131,
872+ "f_rd_rev": 0.0034,
873+ "f_rev_growth": 0.0505,
874+ "f_roa": 0.0062,
875+ "hist_adverse_rate": 0.0146,
876+ "info_age_td": 0.0157,
877+ "last_surprise": 0.0222,
878+ "mean_surprise4": 0.0352,
879+ "wd_amihud60": 0.0159,
880+ "wd_bars20": 0.0195,
881+ "wd_intraday20": 0.0143,
882+ "wd_kurt60": 0.0163,
883+ "wd_log_dollar_vol60": 0.0169,
884+ "wd_maxdd60": 0.0233,
885+ "wd_overnight20": 0.0218,
886+ "wd_parkinson20": 0.013,
887+ "wd_ret20": 0.0146,
888+ "wd_ret60": 0.0156,
889+ "wd_skew60": 0.0124,
890+ "wd_vol20": 0.0154,
891+ "wd_vol60": 0.0173,
892+ "wd_volratio20": 0.0163,
893+ "wd_volratio5": 0.0177,
894+ "wd_zeroret60": 0.0026
895+ },
896+ "model": "LB2",
897+ "n_features": 37,
898+ "params": {
899+ "bagging_fraction": 0.8,
900+ "best_iteration": 198,
901+ "feature_fraction": 0.7,
902+ "lambda_l2": 10.0,
903+ "learning_rate": 0.03,
904+ "min_child_samples": 50,
905+ "num_leaves": 63
906+ },
907+ "tag": "chrono",
908+ "target": "y_liquidity_deterioration",
909+ "trials": 24,
910+ "val_score": 0.632857090195195
911+ },
912+ {
913+ "design": "event",
914+ "h": 20,
915+ "importance_gain": {
916+ "f_accruals": 0.0153,
917+ "f_capex_assets": 0.0354,
918+ "f_cash_assets": 0.0198,
919+ "f_current_ratio": 0.0652,
920+ "f_gross_margin": 0.0465,
921+ "f_int_cover": 0.1944,
922+ "f_leverage": 0.0314,
923+ "f_log_assets": 0.0187,
924+ "f_log_mcap": 0.0156,
925+ "f_loss": 0.0027,
926+ "f_net_issuance": 0.0338,
927+ "f_ni_assets": 0.0351,
928+ "f_ocf_assets": 0.0123,
929+ "f_op_margin": 0.0152,
930+ "f_rd_rev": 0.0037,
931+ "f_rev_growth": 0.0419,
932+ "f_roa": 0.0119,
933+ "hist_adverse_rate": 0.0144,
934+ "info_age_td": 0.0115,
935+ "last_surprise": 0.0163,
936+ "mean_surprise4": 0.0239,
937+ "w1m_ac1": 0.0105,
938+ "w1m_beta": 0.016,
939+ "w1m_bpv": 0.0062,
940+ "w1m_down_vol_share": 0.0108,
941+ "w1m_drift": 0.0052,
942+ "w1m_max_share": 0.0073,
943+ "w1m_present_share": 0.0127,
944+ "w1m_rj": 0.0087,
945+ "w1m_rkurt": 0.0107,
946+ "w1m_rskew": 0.0073,
947+ "w1m_rsneg_share": 0.0107,
948+ "w1m_rv": 0.0066,
949+ "w1m_rv_mktdown_share": 0.0093,
950+ "w1m_sjv": 0.0069,
951+ "w1m_vol_first30": 0.0117,
952+ "w1m_vol_gini": 0.0107,
953+ "w1m_vol_last30": 0.0096,
954+ "w1m_volofvol": 0.007,
955+ "w1m_vratio": 0.0058,
956+ "wd_amihud60": 0.0157,
957+ "wd_bars20": 0.0098,
958+ "wd_intraday20": 0.0056,
959+ "wd_kurt60": 0.0082,
960+ "wd_log_dollar_vol60": 0.011,
961+ "wd_maxdd60": 0.0206,
962+ "wd_overnight20": 0.0164,
963+ "wd_parkinson20": 0.0085,
964+ "wd_ret20": 0.0074,
965+ "wd_ret60": 0.0103,
966+ "wd_skew60": 0.0078,
967+ "wd_vol20": 0.0077,
968+ "wd_vol60": 0.0108,
969+ "wd_volratio20": 0.0106,
970+ "wd_volratio5": 0.0089,
971+ "wd_zeroret60": 0.0017
972+ },
973+ "model": "LB5",
974+ "n_features": 56,
975+ "params": {
976+ "bagging_fraction": 0.8,
977+ "best_iteration": 291,
978+ "feature_fraction": 0.5,
979+ "lambda_l2": 10.0,
980+ "learning_rate": 0.03,
981+ "min_child_samples": 50,
982+ "num_leaves": 31
983+ },
984+ "tag": "chrono",
985+ "target": "y_liquidity_deterioration",
986+ "trials": 24,
987+ "val_score": 0.6345916500670383
988+ },
989+ {
990+ "design": "event",
991+ "h": 20,
992+ "importance_gain": {
993+ "f_accruals": 0.0098,
994+ "f_capex_assets": 0.0205,
995+ "f_cash_assets": 0.0265,
996+ "f_current_ratio": 0.0339,
997+ "f_gross_margin": 0.0245,
998+ "f_int_cover": 0.0102,
999+ "f_leverage": 0.0124,
1000+ "f_log_assets": 0.0356,
1001+ "f_log_mcap": 0.0087,
1002+ "f_loss": 0.0005,
1003+ "f_net_issuance": 0.0085,
1004+ "f_ni_assets": 0.0247,
1005+ "f_ocf_assets": 0.0112,
1006+ "f_op_margin": 0.0025,
1007+ "f_rd_rev": 0.0003,
1008+ "f_rev_growth": 0.024,
1009+ "f_roa": 0.0047,
1010+ "hist_adverse_rate": 0.1773,
1011+ "info_age_td": 0.0161,
1012+ "last_surprise": 0.1867,
1013+ "mean_surprise4": 0.1229,
1014+ "wd_amihud60": 0.0055,
1015+ "wd_bars20": 0.0105,
1016+ "wd_intraday20": 0.0067,
1017+ "wd_kurt60": 0.0084,
1018+ "wd_log_dollar_vol60": 0.0068,
1019+ "wd_maxdd60": 0.0098,
1020+ "wd_overnight20": 0.0094,
1021+ "wd_parkinson20": 0.0597,
1022+ "wd_ret20": 0.0077,
1023+ "wd_ret60": 0.0089,
1024+ "wd_skew60": 0.0073,
1025+ "wd_vol20": 0.0157,
1026+ "wd_vol60": 0.0657,
1027+ "wd_volratio20": 0.0077,
1028+ "wd_volratio5": 0.0079,
1029+ "wd_zeroret60": 0.001
1030+ },
1031+ "model": "LB2",
1032+ "n_features": 37,
1033+ "params": {
1034+ "bagging_fraction": 0.8,
1035+ "best_iteration": 636,
1036+ "feature_fraction": 0.5,
1037+ "lambda_l2": 10.0,
1038+ "learning_rate": 0.01,
1039+ "min_child_samples": 200,
1040+ "num_leaves": 63
1041+ },
1042+ "tag": "chrono",
1043+ "target": "y_abs_surprise",
1044+ "trials": 24,
1045+ "val_score": 0.49668331260297294
1046+ },
1047+ {
1048+ "design": "event",
1049+ "h": 20,
1050+ "importance_gain": {
1051+ "f_accruals": 0.0067,
1052+ "f_capex_assets": 0.018,
1053+ "f_cash_assets": 0.0238,
1054+ "f_current_ratio": 0.0271,
1055+ "f_gross_margin": 0.0202,
1056+ "f_int_cover": 0.0083,
1057+ "f_leverage": 0.0093,
1058+ "f_log_assets": 0.0271,
1059+ "f_log_mcap": 0.006,
1060+ "f_loss": 0.0005,
1061+ "f_net_issuance": 0.0052,
1062+ "f_ni_assets": 0.0187,
1063+ "f_ocf_assets": 0.009,
1064+ "f_op_margin": 0.0018,
1065+ "f_rd_rev": 0.0001,
1066+ "f_rev_growth": 0.0206,
1067+ "f_roa": 0.0066,
1068+ "hist_adverse_rate": 0.1926,
1069+ "info_age_td": 0.0145,
1070+ "last_surprise": 0.1847,
1071+ "mean_surprise4": 0.1198,
1072+ "w1m_ac1": 0.005,
1073+ "w1m_beta": 0.0058,
1074+ "w1m_bpv": 0.0097,
1075+ "w1m_down_vol_share": 0.0048,
1076+ "w1m_drift": 0.0028,
1077+ "w1m_max_share": 0.0042,
1078+ "w1m_present_share": 0.0052,
1079+ "w1m_rj": 0.0074,
1080+ "w1m_rkurt": 0.0048,
1081+ "w1m_rskew": 0.0049,
1082+ "w1m_rsneg_share": 0.0039,
1083+ "w1m_rv": 0.0143,
1084+ "w1m_rv_mktdown_share": 0.0048,
1085+ "w1m_sjv": 0.0029,
1086+ "w1m_vol_first30": 0.0055,
1087+ "w1m_vol_gini": 0.0043,
1088+ "w1m_vol_last30": 0.0046,
1089+ "w1m_volofvol": 0.0055,
1090+ "w1m_vratio": 0.0054,
1091+ "wd_amihud60": 0.0032,
1092+ "wd_bars20": 0.0049,
1093+ "wd_intraday20": 0.0029,
1094+ "wd_kurt60": 0.0049,
1095+ "wd_log_dollar_vol60": 0.0034,
1096+ "wd_maxdd60": 0.0063,
1097+ "wd_overnight20": 0.0057,
1098+ "wd_parkinson20": 0.0423,
1099+ "wd_ret20": 0.0047,
1100+ "wd_ret60": 0.0063,
1101+ "wd_skew60": 0.0049,
1102+ "wd_vol20": 0.0068,
1103+ "wd_vol60": 0.0667,
1104+ "wd_volratio20": 0.0047,
1105+ "wd_volratio5": 0.0054,
1106+ "wd_zeroret60": 0.0007
1107+ },
1108+ "model": "LB5",
1109+ "n_features": 56,
1110+ "params": {
1111+ "bagging_fraction": 0.8,
1112+ "best_iteration": 550,
1113+ "feature_fraction": 0.5,
1114+ "lambda_l2": 10.0,
1115+ "learning_rate": 0.01,
1116+ "min_child_samples": 200,
1117+ "num_leaves": 63
1118+ },
1119+ "tag": "chrono",
1120+ "target": "y_abs_surprise",
1121+ "trials": 24,
1122+ "val_score": 0.4971337861378994
1123+ },
1124+ {
1125+ "best_iteration": 303,
1126+ "design": "event",
1127+ "h": 1,
1128+ "model": "LB2",
1129+ "tag": "fixed",
1130+ "target": "y_adverse_opinc"
1131+ },
1132+ {
1133+ "best_iteration": 278,
1134+ "design": "event",
1135+ "h": 1,
1136+ "model": "LB5",
1137+ "tag": "fixed",
1138+ "target": "y_adverse_opinc"
1139+ },
1140+ {
1141+ "best_iteration": 396,
1142+ "design": "event",
1143+ "h": 5,
1144+ "model": "LB2",
1145+ "tag": "fixed",
1146+ "target": "y_adverse_opinc"
1147+ },
1148+ {
1149+ "best_iteration": 407,
1150+ "design": "event",
1151+ "h": 5,
1152+ "model": "LB5",
1153+ "tag": "fixed",
1154+ "target": "y_adverse_opinc"
1155+ },
1156+ {
1157+ "best_iteration": 576,
1158+ "design": "event",
1159+ "h": 10,
1160+ "model": "LB2",
1161+ "tag": "fixed",
1162+ "target": "y_adverse_opinc"
1163+ },
1164+ {
1165+ "best_iteration": 463,
1166+ "design": "event",
1167+ "h": 10,
1168+ "model": "LB5",
1169+ "tag": "fixed",
1170+ "target": "y_adverse_opinc"
1171+ },
1172+ {
1173+ "best_iteration": 281,
1174+ "design": "event",
1175+ "h": 20,
1176+ "model": "LB2",
1177+ "tag": "fixed",
1178+ "target": "y_adverse_opinc"
1179+ },
1180+ {
1181+ "best_iteration": 406,
1182+ "design": "event",
1183+ "h": 20,
1184+ "model": "LB5",
1185+ "tag": "fixed",
1186+ "target": "y_adverse_opinc"
1187+ },
1188+ {
1189+ "best_iteration": 270,
1190+ "design": "event",
1191+ "h": 40,
1192+ "model": "LB2",
1193+ "tag": "fixed",
1194+ "target": "y_adverse_opinc"
1195+ },
1196+ {
1197+ "best_iteration": 350,
1198+ "design": "event",
1199+ "h": 40,
1200+ "model": "LB5",
1201+ "tag": "fixed",
1202+ "target": "y_adverse_opinc"
1203+ }
1204+ ],
1205+ "fixed_config": {
1206+ "bagging_fraction": 0.8,
1207+ "bagging_freq": 1,
1208+ "feature_fraction": 0.7,
1209+ "lambda_l2": 1.0,
1210+ "learning_rate": 0.03,
1211+ "min_child_samples": 100,
1212+ "n_estimators": 600,
1213+ "n_jobs": 12,
1214+ "num_leaves": 15,
1215+ "verbose": -1
1216+ },
1217+ "run_at": "2026-11-02T15:30:00-0500"
1218+}
\ No newline at end of file
added artifacts/evaluation/baselines_fit_log.json +3534 −0
Large diff (3,535 lines) is not loaded by default to keep the page fast.Load diff
added artifacts/evaluation/continuous.csv +4 −0
Large diff (4 lines) is not loaded by default to keep the page fast.Load diff
added artifacts/evaluation/contrasts.csv +19 −0
Large diff (19 lines) is not loaded by default to keep the page fast.Load diff
added artifacts/evaluation/feature_columns_calendar.json +106 −0
Large diff (107 lines) is not loaded by default to keep the page fast.Load diff
added artifacts/evaluation/feature_columns_event.json +106 −0
Large diff (107 lines) is not loaded by default to keep the page fast.Load diff
added artifacts/evaluation/firm_holdout.csv +5 −0
Large diff (5 lines) is not loaded by default to keep the page fast.Load diff
added artifacts/evaluation/h4_timing.json +40 −0
Large diff (41 lines) is not loaded by default to keep the page fast.Load diff
added artifacts/evaluation/h5_car_regressions.csv +18 −0
Large diff (18 lines) is not loaded by default to keep the page fast.Load diff
added artifacts/evaluation/h5_portfolios.json +72 −0
Large diff (73 lines) is not loaded by default to keep the page fast.Load diff
added artifacts/evaluation/horizon_ladder.csv +12 −0
Large diff (12 lines) is not loaded by default to keep the page fast.Load diff
added artifacts/evaluation/metrics_all.csv +208 −0
Large diff (208 lines) is not loaded by default to keep the page fast.Load diff
added artifacts/evaluation/panel_regressions.csv +59 −0
Large diff (59 lines) is not loaded by default to keep the page fast.Load diff
added artifacts/evaluation/placebo_shuffled.csv +4 −0
Large diff (4 lines) is not loaded by default to keep the page fast.Load diff
added artifacts/evaluation/portfolios_LB2.csv +1291 −0
Large diff (1,291 lines) is not loaded by default to keep the page fast.Load diff
added artifacts/evaluation/portfolios_LB5.csv +1291 −0
Large diff (1,291 lines) is not loaded by default to keep the page fast.Load diff
added artifacts/evaluation/power.json +7 −0
Large diff (8 lines) is not loaded by default to keep the page fast.Load diff
added artifacts/evaluation/reliability.csv +41 −0
Large diff (41 lines) is not loaded by default to keep the page fast.Load diff
added artifacts/evaluation/secondary_targets.csv +13 −0
Large diff (13 lines) is not loaded by default to keep the page fast.Load diff
added artifacts/evaluation/subgroups.csv +37 −0
Large diff (37 lines) is not loaded by default to keep the page fast.Load diff
added artifacts/evaluation/walkforward_by_year.csv +111 −0
Large diff (111 lines) is not loaded by default to keep the page fast.Load diff
added artifacts/evaluation/walkforward_contrasts.csv +25 −0
Large diff (25 lines) is not loaded by default to keep the page fast.Load diff
added artifacts/manifests/bars_manifest.jsonl +11543 −0
Large diff (11,543 lines) is not loaded by default to keep the page fast.Load diff

Diff truncated — file too large.

Menu

Theme