Apprendimento sempre acceso: impara da ogni asta chiusa e decide col valore atteso

Via le due modalita' Addestramento/Gara, per scelta dell'utente: la misura aveva
detto che il lavoro di registrazione costa mezzo punto di un core, e allora tanto
vale registrare sempre. Resta la coalescenza verso l'interfaccia, che era la
correzione vera.

COSA IMPARA. Per ogni puntata di ogni asta chiusa: e' rimasta senza risposta?
E' l'unica etichetta abbondante — 1,8 milioni di esempi sui dossier locali —
contro le diciannove aste vinte dall'utente, che non farebbero un modello. Il
comportamento avversario non dipende da chi ha puntato, e questo rende
utilizzabili le puntate altrui. Regressione logistica online scritta a mano,
senza librerie, in Ml/: un passo di gradiente per esempio, aggiornata a ogni
chiusura, salvata subito. Variabili a fasce: durata del ciclo, quota di
autopuntate recenti, puntatori distinti, prezzo sul valore, fascia oraria (le
fasce ricalcano la curva misurata sulle chiusure), feriale/festivo, ora di
aggancio, tipo di puntata, profondita' dell'asta, stesso puntatore di due fa,
prodotto in 32 cassetti con hash stabile. In parallelo un profilo per prodotto x
fascia oraria x tipo di giorno, con restringimento verso il prodotto e poi verso
il globale dove i dati scarseggiano.

COME DECIDE. In ShouldPlaceBid: probabilita' appresa per il margine residuo meno
il costo della puntata; sotto zero non si punta, e il registro riporta i numeri.
Il modello parla sempre ma decide solo dopo 300 aste apprese. Le previsioni sono
calibrate in linea con il rapporto osservato/previsto sugli ultimi 20.000 esempi.

QUANTO VALE, MISURATO. Valutazione prequenziale sui 3000 dossier piu' recenti
(ogni asta prima prevista poi appresa, come nell'uso): sollevamento 10,8x nella
cima dell'1%, 5,8x al 5%; calibrazione entro il 10-30% in ogni fascia. Sulle 116
puntate vere dell'utente di agosto: nessuna era finale, e il cancello ne avrebbe
fermate 45 senza perderne una vincente. La valutazione congelata (addestra sui
vecchi, giudica sui nuovi) sovrastima di 1,5-1,8x per deriva del mercato, non per
passo o regolarizzazione: provati entrambi. Griglia e prequenziale stanno nel
test MlModelBacktest, target Apprendimento, attivita' VS Code "valuta
apprendimento".

PRIMO ADDESTRAMENTO. In sottofondo, dal piu' recente, con un tempo massimo per
avvio. Il lettore salta le righe di poll prima del JSON: 6289 dossier per 8,8 GB
in 64 secondi, verificato dal vivo, archivio completo al primo avvio.

ACQUISIZIONE. I poll nel dossier si scrivono solo quando cambia qualcosa di
visibile, e comunque uno al secondo: -88,8% misurato, senza perdere la
profondita' di nessun ciclo. Il reset porta il minimo del cronometro e la durata
del ciclo chiuso. Via le righe di log che copiavano i reset parola per parola.
Corretto un difetto vecchio: nessun dossier marcava le puntate nostre, perche' il
parser lo faceva solo se riceveva il nome utente e nel percorso dei poll non gli
arrivava. Ora si marcano in MergeBidHistory e l'intestazione porta il nome
utente; per i dossier vecchi il lettore accetta il nome da fuori.

Trovato dal vivo e corretto: salvataggi concorrenti all'avvio quando piu' aste
chiudono insieme. Il modello salvato non rilegge piu' i parametri (passo,
regolarizzazione): sono scelte del codice, e un cambio vale dal riavvio dopo.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
2026-09-07 22:45:49 +02:00
co-authored by Claude Fable 5.1
parent 08c5023f77
commit 46134c822d
23 changed files with 2108 additions and 239 deletions
-26
View File
@@ -44,32 +44,6 @@
</StackPanel>
</Border>
<!-- SEZIONE 0-ter: Modalità della sessione -->
<Border Style="{StaticResource CardBlock}">
<StackPanel>
<ctl:HelpHeader Title="Modalità della sessione"
Margin="0,0,0,14"
Help="Addestramento registra tutto: ogni interrogazione nel dossier, ogni decisione della strategia, il dettaglio esteso delle aste concluse. È la modalità con cui si raccolgono i dati per tarare le regole.&#10;&#10;Gara fa solo il lavoro che serve a puntare: niente poll grezzi nel dossier, niente righe informative nel registro dell&apos;asta, niente dettaglio esteso. Restano puntate, esiti, errori e lo storico delle aste concluse.&#10;&#10;Cosa aspettarsi, misurato: il lavoro che Gara evita costa 4,9 microsecondi per interrogazione — con 57 aste a 17 poll al secondo è mezzo punto percentuale di un core. Il guadagno vero è sul disco e sulla leggibilità dei dossier, non sulla velocità.&#10;&#10;La modalità vale per tutta la sessione: cambiarla richiede il riavvio."/>
<StackPanel Orientation="Horizontal">
<RadioButton x:Name="ModeTrainingRadio" Content="Addestramento"
GroupName="SessionMode" IsChecked="True"
Checked="SessionModeRadio_Checked"
ToolTip="Registrazione completa: dossier con ogni poll, registro della strategia, dettaglio esteso."/>
<RadioButton x:Name="ModeRaceRadio" Content="Gara" Margin="16,0,0,0"
GroupName="SessionMode"
Checked="SessionModeRadio_Checked"
ToolTip="Solo ciò che serve a puntare. Restano puntate, esiti, errori e lo storico delle aste concluse."/>
</StackPanel>
<TextBlock x:Name="ModeCurrentText" Margin="0,8,0,0"
Foreground="{DynamicResource Brush.TextMuted}" FontSize="11.5"/>
<TextBlock x:Name="ModeRestartNotice" Margin="0,6,0,0" Visibility="Collapsed"
Foreground="{DynamicResource Brush.Warning}" TextWrapping="Wrap"
Text="La modalità scelta si applica al prossimo avvio: salva e riavvia l'applicazione."/>
</StackPanel>
</Border>
<!-- SEZIONE 0-quater: Fascia oraria e pulizia dell'elenco -->
<Border Style="{StaticResource CardBlock}">
<StackPanel>