feature-selection-stability-across-folds · v1.0.0 · 2026-07-30 · sha256 cca1e291005c119a
feature-selection-stability-across-folds v1.0.0A
Immutable. This exact content is served forever at /api/v1/blob/cca1e291005c119a.
---
name: feature-selection-stability-across-folds
description: >-
Quantitative ML engine for measuring feature selection stability across cross-validation folds using Nogueira's Index, computing inclusion frequencies, and filtering unstable overfitted features.
domain: Financial ML & Validation
subdomain: Cross-Validation & Feature Selection Robustness
tags: ["feature-selection", "nogueira-index", "kuncheva-index", "cross-validation", "fold-stability", "p-hacking", "overfitting-control"]
brokers_frameworks: ["Nogueira 2017 Measure", "Kuncheva Index", "Python Dataclasses"]
version: "1.0.0"
author: algo-trading-skills-contributors
license: Apache-2.0
---
## When to Use
Use this skill in quantitative feature selection pipelines, walk-forward cross-validation setups, and model robustness audits. When feature selection algorithms (Lasso, Boruta, RFE) select different subsets of features across cross-validation folds, the resulting model is fragile and overfitted. This module calculates **Nogueira's Stability Index ($\Phi$)** and feature inclusion frequencies ($p_i$), retaining only consensus features selected in $\ge 80\%$ of folds.
## Prerequisites
- Total number of candidate features $M$.
- List of selected feature sets across $K$ cross-validation folds: $[S_1, S_2, \dots, S_K]$.
- Minimum inclusion threshold $p_{\text{min}} = 0.80$ and minimum Nogueira stability threshold $\Phi_{\text{min}} = 0.70$.
## Workflow
1. **Feature Inclusion Frequency Calculation**:
- For each candidate feature $i \in \{1 \dots M\}$:
- Compute selection probability: $p_i = \frac{1}{K} \sum_{k=1}^K \mathbf{1}_{i \in S_k}$.
2. **Nogueira Stability Index ($\Phi$) Evaluation**:
- Compute average selected subset size $\bar{k} = \frac{1}{K} \sum_{k=1}^K |S_k|$.
- Calculate sample variance $s_i^2 = \frac{K}{K-1} p_i (1 - p_i)$.
- Calculate Nogueira Index: $\Phi = 1 - \frac{\frac{1}{M} \sum s_i^2}{\bar{k} \left(1 - \frac{\bar{k}}{M}\right)}$.
3. **Consensus Feature Set Extraction**:
- Retain Consensus Features: $S_{\text{consensus}} = \{f_i \mid p_i \ge 0.80\}$.
- Prune Unstable Features: $S_{\text{pruned}} = \{f_i \mid p_i < 0.80\}$.
4. **Stability Audit & Status Determination**:
- If $\Phi \ge 0.70 \implies$ Flag `STABLE_FEATURE_SET`.
- Else $\implies$ Flag `UNSTABLE_OVERFITTED_FEATURE_SET`.
5. **Audit Report Generation**: Output structured `FeatureStabilityAuditReport`.
> Full procedure: see `references/workflows.md`.
> Standards reference: see `references/standards.md`.
> Printable pre-flight checklist: see `assets/checklist.md`.
## Common Pitfalls
- **Ignoring Cross-Fold Feature Variance**: Training models on union feature sets containing unstable features selected in only 1 of 10 folds.
- **Using Jaccard Index Without Chance Correction**: Evaluating raw subset overlap without adjusting for random chance agreements when $\bar{k} \approx M / 2$.
- **Failing to Re-Train on Consensus Features**: Retaining all features despite low Nogueira stability scores.
## Verification
- Instantiate `FeatureStabilityAnalyzerEngine`. Input 10 candidate features across 5 walk-forward CV folds. Scenario 1: Identical feature selection across all 5 folds $\implies$ verify engine computes Nogueira Index $\Phi = 1.0$, flags `STABLE_FEATURE_SET`, and retains 100% consensus. Scenario 2: Random erratic feature selections across folds $\implies$ verify engine computes $\Phi < 0.30$, prunes unstable features, and flags `UNSTABLE_OVERFITTED_FEATURE_SET`.
- Run `python scripts/test_feature_stability_analyzer.py`.
## Related Skills
- `walk-forward-validation-setup`
- `feature-importance-drift-monitoring`
---