Vai al contenuto

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:

  1. la mappa dei tre file utility/forest/ (esempio pilota, fatto per intero);
  2. la mappa del layer di contratto (roles/);
  3. la mappa del mercato noto (con fonti);
  4. lo stato reale di M1Q A-D (gap esatti);
  5. 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:

  1. 60 URL veri per i quattro canali senza API → B
  2. tools/count_demand.py con --evidence / --out / --check-library → C
  3. research/domande_map.csv, research/domande.csv, research/domande.md → C
  4. research/domanda_vs_libreria.csv → D
  5. tests/test_count_demand.py sui 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.