Pipeline Retrospective — 2026-05-05 #
Pipeline Stats #
- Cycle: 2026-05-05 (15 days after prior cycle, triggered as new)
- Universe: 989 stocks (S&P 500 + STOXX 600)
- Phase 1 issue: yfinance throttling stalled fresh screen at ~23MB read both attempts (15+ min idle each). Fell back to Apr 20 composite (15 days old, within freshness window). Action item: investigate if
pm pipeline screen needs request rate-limiting / retry-with-backoff.
- Phase 2: 7 sector-diversified deep dives, all completed in parallel ~5 min each
- Phase 3: Reddit overlay parsed 19,125 posts + 245,459 comments / 15 days; 0 actionable divergence on Phase 2 candidates (all EU)
- Phase 4: 7 new predictions logged (5 wait, 2 PASS); 0 GO calls
- Phase 5: 7 Apr 3 predictions resolved (32 days); 14 still pending
Apr 3 Cycle Scorecard #
| Ticker |
Entry |
Now |
Actual |
Target |
Outcome |
| AIG |
$75.42 |
$78.96 |
+4.7% |
+16.0% |
PARTIAL |
| DD |
$45.48 |
$49.51 |
+8.9% |
+22.6% |
PARTIAL |
| PHM |
$117.29 |
$118.60 |
+1.1% |
+22.3% |
PARTIAL |
| SWKS |
$55.19 |
$71.62 |
+29.8% |
+21.7% |
HIT |
| DHI |
$139.69 |
$148.16 |
+6.1% |
+14.6% |
PARTIAL |
| TROW |
$90.17 |
$102.87 |
+14.1% |
+10.8% |
HIT |
| HUM |
$177.83 |
$240.47 |
+35.2% |
+19.3% |
HIT |
Headline numbers:
- Direction correct: 7/7 = 100% (every prediction went up)
- Hit rate (≥50% of target return): 3/7 = 43%
- Mean actual return: +14.3% vs mean target +18.2%
- Compared to S&P 500 over same window: rough check needed but likely outperformance
IC Table (N=7 — interpret with caution, threshold for weight adjustment is N≥10) #
| Framework |
Spearman IC vs 30d Return |
| Composite |
−0.679 |
| graham_pct |
−0.679 |
| llm_pct |
−0.464 |
| schilit_clean_pct |
−0.393 |
Critical observation: All ICs are strongly NEGATIVE. The lowest-ranked candidates (SWKS, TROW, HUM) outperformed the top-ranked (AIG, DD, PHM, DHI). The framework is anti-predictive on this sample.
But: N=7 is well below the N≥10 threshold for weight adjustment, and a single 30-day window is highly regime-dependent. Need to wait for additional resolutions before any structural reweighting.
Self-Critique #
What Worked #
- 100% directional accuracy is genuinely strong — the picks all went up in a 30-day window. The Graham filter is doing its job as a quality screen.
- Diversification rule held: Apr 3's top 7 spanned Financials, Materials, Cyclical, Tech, Healthcare. None were correlated drawdown risks.
- AIG execution call was correct in direction — bought T1 Apr 7 at $76.15 and T2 May 4 at $78.00 averaging $76.94, now at $78.96 = +2.6% on cost basis with 5.4% pre-buyback dividend. Per shr-013 the staged tranche structure prevented overconcentration ahead of Q1 catalyst.
What Didn't Work #
- Negative IC is a red flag: Composite ranking #1 (AIG, +4.7%) underperformed #5-#7 (HUM +35.2%, SWKS +29.8%, TROW +14.1%). The framework is identifying real value but mis-ordering it.
- Forward P/E may be under-weighted: HUM (Healthcare insurance) and SWKS (Tech, semiconductor) had the strongest moves — both had cyclical earnings inflections that LLM/Graham scores understated. Per shr-003, larger trailing-vs-forward P/E gaps signal profitability inflections; this signal may need explicit weighting.
- Phase 1 screen instability: Two consecutive yfinance stalls in the same session is a hard infrastructure issue. Need to add request rate-limiting before the next cycle, OR reuse cycles every 14 days more aggressively (less fresh data needed if the universe changes slowly).
- Reddit overlay has limited utility for EU portfolios: Consistent with prior cycles, EU candidates have ~0 Reddit mentions. The framework's "fundamentally sound + Reddit-hated" divergence signal effectively only fires on US stocks.
What's Surprising #
- HUM (+35.2%) is the standout — Healthcare insurance had a big April. Composite scored it #7 (lowest of the 7). This is precisely the pattern that explains the negative IC. If the framework can be tuned to weight forward earnings inflections more, the IC could flip positive.
- Direction was perfect (7/7) but magnitude calibration was off: Targets were set systematically too high for top picks (AIG, DD, PHM, DHI all underperformed targets) and too low for the lower-ranked picks. This suggests the conviction grading itself is mis-calibrated, not just the underlying score.
Weight Adjustments Applied #
None this cycle — N=7 below threshold (N≥10). The Apr 20 cycle's 7 predictions resolve approximately 2026-05-20, which would bring resolved total to 14 and unlock the first weight adjustment. Recompute IC at that time.
Recommendation for future weight design when N≥10:
- If composite IC remains negative: trial a model that inverts the composite ranking as a sanity check — if inverted-rank IC is positive, that's a strong signal the score is structurally backwards on at least one component.
- If llm_pct shows the most-negative IC: reduce its weight 30% → 20% and reallocate to Schilit-clean (currently 10% → 20%).
- Add a forward-P/E inflection bonus as a fifth framework component:
+5% if (trailing P/E - forward P/E) / trailing P/E > 50%.
Cycle Open Questions #
- Is the negative IC a small-sample artifact, or a structural framework problem? Defer to N=14 resolution (~May 20).
- Why did the screen stall at exactly ~23MB read on yfinance? Possibly hitting YF's per-IP rate limit. Consider switching some queries to Finnhub.
- Should we use the binary catalyst window (May 6-12) to opportunistically run Phase 2 single-name updates rather than waiting for next cycle?
Action Items for Next Cycle (~2026-05-19) #
- Investigate yfinance throttling: log per-ticker fetch latency in
pm pipeline screen to identify which symbols stall the loop
- Resolve Apr 20 cycle (14 total resolved → first IC-based weight adjustment unlocked)
- Update Phase 2 verdicts based on May 6/7/11/12 earnings results
- Reassess BKG.L post-insider continuation: if Perrins keeps buying past 24 June FY26 results without thesis change, conviction upgrade
Files Updated #
- Predictions:
output/pipeline/predictions/predictions.json (21 total: 7 resolved, 14 pending)
- Composite:
output/pipeline/screens/composite-2026-05-05.json (reused Apr 20)
- Phase 2 deep dive:
output/pipeline/reports/phase2-deep-dive-2026-05-05.md
- Pipeline report:
output/pipeline/reports/pipeline-2026-05-05.md