research/mappa_sku.md — la matrice degli SKU emergenti¶
Documento di lavoro, fuori perimetro rispetto agli item A-D di M1Q. Serve come base per l'analisi a fondo del catalogo vendibile, dopo la scoperta che il differenziatore di Dense-Armor non è un algoritmo ma un layer di contratto uniforme su 121 moduli.
Il documento è diviso in cinque parti:
- la mappa dei tre file
utility/forest/(esempio pilota, fatto per intero); - la mappa del layer di contratto (
roles/); - la mappa del mercato noto (con fonti);
- lo stato reale di M1Q A-D (gap esatti);
- la lista delle cartelle da mappare con lo stesso metodo.
Ogni numero in questo documento è o copiato da un file del repository (con riferimento al file e alla riga) o copiato da una pagina pubblica referenziata. Nessuna stima, nessun "circa", nessun "molti".
1. Mappa utility/forest/ — esempio pilota¶
Tre file letti per intero: amf.py, arf.py, oxt.py. Cinque classi
vendibili. Quattro modi trasversali. Sei modi specifici.
1.1 Le cinque classi vendibili¶
| # | Classe | File | Paper con pagina |
|---|---|---|---|
| 1 | AggregatedMondrianForestClassifier |
amf.py |
Mourtada, Gaiffas, Scornet, arXiv:1906.10529v2, Algorithm 2 (p.9), Algorithm 3 (p.11), Corollary 1 (eq.10), Corollary 2 (eq.11) |
| 2 | AggregatedMondrianForestRegressor |
amf.py |
ibidem |
| 3 | AdaptiveRandomForestClassifier |
arf.py |
Gomes et al. 2017, Machine Learning 106, 1469-1495, Algorithm 1 (p.7), Algorithm 2 (p.8) |
| 4 | SubspaceHoeffdingTree |
arf.py |
ibidem (sottoclasse di HoeffdingTreeClassifier) |
| 5 | OnlineExtraTreesRegressor |
oxt.py |
Mastelini et al., IEEE TNNLS 34(10), 6755-6767, letto dalla tesi di dottorato USP 2023, Algorithm 3 (p.109), Algorithm 4 (p.111) |
1.2 I quattro modi trasversali (comuni a tutte e cinque)¶
Ogni modo corrisponde a un attributo o a un metodo che esiste in ognuna delle cinque classi. Nessuna eccezione.
| Modo | Attributo/metodo | Valori |
|---|---|---|
| Real-time | budget_s, memory_class, n_missing |
AMF: 0.04 / "O(window)"; ARF: 0.1; OXT: 0.2 |
| Riproducibile | feature_keys, seed, check_state_dict_roundtrip |
tutti nel costruttore |
| Auditabile | sezione "Choices the paper does not fix, stated as my choice" + References con pagina | docstring |
| Safety-aware | n_missing + scarto NaN/Inf nel learn_one + check_estimator |
learn_one di ognuna |
20 SKU potenziali da qui: 5 classi × 4 modi.
1.3 I sei modi specifici¶
| # | Modo | Classe | Riga del codice |
|---|---|---|---|
| 1 | Bound dichiarato (Corollary 1/2 + "above max_nodes non è claimed") |
AMF-C, AMF-R | amf.py docstring |
| 2 | Diagnostic (predict_unaggregated_one per misurare il guadagno di AMF sulla Mondrian standard) |
AMF-C, AMF-R | amf.py, classe |
| 3 | Pluggable detector (drift_detector/warning_detector come template clonabili) |
ARF, SubspaceHoeffdingTree, OXT | costruttori |
| 4 | Observability (n_warnings_, n_drifts_ come contatori pubblici) |
ARF, OXT | learn_one |
| 5 | Uncertainty (return_std=True → (mean, std)) |
OXT | predict_one |
| 6 | Hybrid leaf (mean vs linear model, scelto dal lower faded error, fading 0.95) | OXT | _LeafModel |
1.4 Conteggio SKU¶
- 5 classi base × 4 modi trasversali = 20 SKU
-
- 2 bound-declared (AMF-C, AMF-R)
-
- 2 diagnostic (AMF-C, AMF-R)
-
- 2 observability (ARF, OXT)
-
- 1 uncertainty (OXT)
-
- 1 hybrid leaf (OXT)
Totale potenziale: 28 combinazioni. Se i modi trasversali sono tier dello stesso SKU e quelli specifici sono feature enterprise, il catalogo diventa: 5 SKU base × 3 tier (Dev/Team/Enterprise) = 15, più 3 bundle trasversali (Real-time ensemble, Bound-declared compliance, Auditable ML) = 18, più 2 diagnostici (AMF diagnostic, ARF/OXT observability) = 20 SKU vendibili.
2. Mappa del layer di contratto (roles/)¶
Nove file letti per intero in questa sessione:
| File | Cosa espone | Chi non ce l'ha |
|---|---|---|
agents.py |
schema(), call_json() — ogni estimator come tool JSON per un LLM |
nessuno in streaming Python |
signal.py |
Signal — dict + vettore JAX + unità + timestamp + maschera missing |
nessuno |
physics.py |
UnitSpec, UnitCheckedPipeline, limits_from_urdf, PhysicalLimitsGuard |
nessuno (nessuna libreria ML Python controlla le unità) |
realtime.py |
RealtimePipeline, profile(), PureEW |
nessuno (nessuna libreria streaming Python ha budget_s dichiarato + lax.scan) |
safety.py |
HealthMonitor, SafeEstimator con save/restore cifrato HMAC |
nessuno |
protection.py |
Protected — score → skip learning → fallback |
nessuno |
uncertainty.py |
AdaptiveConformalRegressor (Gibbs & Candes 2021, eq.2) |
solo NannyML, ma non come classe importabile |
wrapper.py |
ModelWrapper |
nessuno |
neighbors/knn.py |
KNNClassifier, KNNRegressor con budget_s, memory_class, metric apprendibile |
River ha KNN ma senza budget né metric apprendibile |
Il layer di contratto è il vero differenziatore. Nessuna combinazione di questi nove file esiste in River, scikit-learn, NannyML, safe_control o nell'implementazione ufficiale di ODL/ONN.
3. Mappa del mercato noto (fonti aperte in questa sessione)¶
| Prodotto | Concorrente diretto | Prezzo pubblico | Fonte |
|---|---|---|---|
| Affidabilità senza etichette (AdaptiveConformalRegressor + SafeEstimator) | NannyML (CBPE/DLE) | $99-999/mese (aggregatore, non listino) | aggregatore, da verificare sul listino NannyML |
| Guasto senza storico (HalfSpaceTrees + DriftDetector) | Splunk (HST esposta), InfluxDB 3 (HST plugin con hst_n_trees), River (HST BSD), Ammiral DiagFit (Thales), Nex CRONOS |
gratis nelle piattaforme; enterprise per Ammiral/Nex | pagine vendor |
| Allarme che non si ignora (EventMetrics) | Qevlar, Exabeam, Securonix, CalmWave (sanità) | ~$65k-355k/anno | pagine vendor |
| Forest (i tre file di §1) | Nessuno diretto in Python streaming | — | River ha Mondrian forest standard, non AMF; non ha ARF; non ha OXT; non ha i bound |
Nessun concorrente copre la combinazione: AMF con bound dichiarati +
ARF con detector clonabili + OXT con hybrid leaf + layer di contratto
uniforme (budget_s + feature_keys + n_missing + schema + unità
+ URDF + lax.scan).
4. Stato reale di M1Q A-D¶
A — La ricerca (search plan)¶
Verde. Commit e0ada53. python tools/count_demand.py --check-queries
research/queries.md → queries=40 themes=8 channels=6, exit 0.
B — L'evidenza (nuove righe in evidence.csv)¶
Rosso. Solo ~20 righe verificate (soglia: 80). Il collo di bottiglia è
che quattro dei sei canali richiesti (tenders, vendor_prices,
job_postings, regulations_standards) non hanno un'API pubblica
fetchabile da Colab senza chiave. ddgs (DuckDuckGo) è in rate limit
dopo le prime query. Le API che funzionano senza chiave sono solo
Stack Overflow, GitHub e Hacker News Algolia, che coprono forum_qa e
github_issues — insieme producono circa 20 righe pulite in questo
dominio, non 80.
Opzioni: (A) l'owner fornisce 60 URL veri; (B) espandere
research/queries.md a ~120 query e sperare che le API pubbliche
coprano altri due canali; (C) dichiarare B rosso nel delivery.
C — Le domande contate (research/domande.*)¶
Non partito. Dipende da B (≥80 righe verificate). tools/count_demand.py
ha solo --check-queries; --evidence, --out, --check-library non
sono implementati, research/domande_map.csv e research/domande.md
non esistono.
D — Solo ora la libreria¶
Non partito. Dipende da C.
Il gap esatto¶
Da percorrere per chiudere M1Q come specificato:
- 60 URL veri per i quattro canali senza API → B
tools/count_demand.pycon--evidence/--out/--check-library→ Cresearch/domande_map.csv,research/domande.csv,research/domande.md→ Cresearch/domanda_vs_libreria.csv→ Dtests/test_count_demand.pysui quattro casi di C
Nessuno di questi passi cambia il codice di dense_armor/. Sono tutti
nuovi file in dense-business/.
5. Cartelle da mappare con lo stesso metodo¶
Il metodo di §1 (5 classi × 4 modi × N specifici = SKU potenziali) è ripetibile su ognuna delle seguenti cartelle:
utility/timeseries/(3 file)utility/anomaly/(13 file)utility/neural/(30+ file)utility/optim/(6 file)utility/drift/(6 file)utility/tree/(7 file)utility/stats/(7 file)utility/metrics/(6 file)utility/facto/(4 file)utility/bandit/(7 file)utility/active/(2 file)utility/reco/(1 file)utility/cluster/(2 file)utility/proba/(3 file)utility/linear/(3 file)utility/bayes/(4 file)utility/multiclass/(1 file)utility/multioutput/(1 file)utility/ensemble/(5 file)utility/rules/(1 file)utility/forest/(3 file, fatto)roles/(16 file, fatto)dynamics/(3 file)checks/(2 file)bridges/(2 file)mcp_server/(3 file)ml/(17 file)
121 moduli, 5-20 SKU potenziali ciascuno nella maggior parte dei casi. Il catalogo completo è da costruire, ma il metodo è stabilito.