Kun je autoregressieve diffusie gebruiken om marktdata te genereren?
In de kwantitatieve financiering zijn we gewend aan modellen die een stroom van marktdata-events voor een bepaald symbool nemen (zoals het toevoegen van rustende orders aan een orderboek, het annuleren van die orders of executies) en de toekomstige prijs van dat symbool voorspellen. Generatieve modellen zijn minder gebruikelijk. Stel je een model voor dat niet alleen een puntschatting van de prijs van een symbool kan geven, maar daadwerkelijk orderboek-events kan synthetiseren, inclusief het tijdstip waarop ze bij de beurs aankomen. Je zou natuurlijk prijsvoorspellingen krijgen, maar je simulaties (rollouts) zouden veel meer textuur hebben dan alleen die voorspellingen.
De aard van marktdata
Een generatief model vereist een antwoord op de vraag: wat voor soort data is marktdata? Lijkt het meer op video of op tekst? Is het continu of discreet? Marktdata lijkt kenmerken van beide te hebben. Een orderboek evolueert via een reeks stappen terwijl marktdeelnemers rustende orders plaatsen of intrekken; er is geen twijfel dat er sprake is van een discrete actieruimte. En toch hebben veel van de belangrijkste parameters van een order, zoals de prijs, een zodanig hoge cardinaliteit dat ze in feite continu lijken. Sommige parameters zijn simpelweg continu: een aspect dat gemakkelijk over het hoofd wordt gezien, maar cruciaal is voor een generatief model, is de timing (bijvoorbeeld: "wanneer komt de nieuwe order aan bij de beurs"). Zelfs dat is een versimpeling. In de praktijk zijn de distributies "spiky": "pennying" (waarbij je een prijs met één tick verbetert) komt veel vaker voor dan verbetering met twee ticks, en orders komen vaak in bursts aan, bijvoorbeeld rond hele getallen van de tijd.
Een manier om deze complicaties te verkennen is door je data te behandelen alsof deze continu is en te kijken waar dat vastloopt. Deze zomer bouwde een research-stagiair, Kavish, een diffusiemodel voor marktdata. Diffusie- en flow-matching-modellen zijn krachtige instrumenten voor het representeren van sequentiële, multimodale data in domeinen zoals beeld, video, robotica en audio. Geïnspireerd door Autoregressive Image Generation without Vector Quantization, creëerde Kavish een generatief model van marktdata op event-niveau met behulp van autoregressieve diffusie.
Tijdens dit proces werden enkele technische bevindingen gedaan. Zo ontdekte Kavish dat DDPM, hoewel theoretisch ideaal voor denoising in diffusiemodellen, divergeerde, en dat flow matching veel beter presteerde. Het belangrijkste resultaat was echter dat volledig continue diffusie zich niet leende voor de grilligheid van echte marktdata. De verschillende pogingen van Kavish om puntmassa's te behandelen via smoothing enerzijds, en het discretiseren van sommige doelen van het model anderzijds, hebben sterk verduidelijkt hoe een uiteindelijk generatief model voor marktdata eruit zou kunnen zien.
Modellering en opzet
Kavish analyseerde vier jaar aan Amerikaanse a aandelengegevens, waarbij elke rij data een tijdstempel, prijs, type (trade, order, cancel, etc.) en andere informatie bevatte. Het diffusiemodel probeerde deze kenmerken voor het volgende event te genereren, dat vervolgens autoregressief aan de stroom werd toegevoegd.
Conform het eerder genoemde artikel van Li et al., maakte hij gebruik van een encoder-diffuser architectuur, specifiek een causally masked transformer encoder om op elke positie een latent embedding te produceren. Tijdens de training werd de latent op elke positie gevoed aan een kleine 'event-kind head', die een 2-categorische kansverdeling produceert die aangeeft of het volgende event een trade is of een BBO-update ("best bid and offer"). De continue doelen, zoals de prijs en verstreken tijd, worden gegenereerd via een diffusie-head die geconditioneerd is op de overeenkomstige latent en het werkelijke event-type via standaard AdaLN-conditionering.
Tijdens de inferentie wordt alleen de gecodeerde latent van het laatste event in de event-kind head gevoerd, waarna een event uit de outputdistributie wordt gesampled. De continue kenmerken van het volgende event worden gegenereerd via de diffusie-head, geconditioneerd op de latent van het laatste event en het gesampelde event.
DDPM versus Flow Matching
Een DDPM (denoising diffusion probabilistic model) voorspelt de ruis die aan een sample is toegevoegd en leidt een schone schatting af door de geschaalde ruisvoorspelling af te trekken en te delen door het resterende signaalniveau. DDPM's zijn zeer succesvol in gebieden zoals beeldgeneratie, maar bij hoge ruisniveaus leiden kleine fouten in de ruisvoorspelling tot grote fouten in de schatting van het schone doel. Flow matching interpoleert daarentegen lineair tussen ruis en data, en traint het netwerk om de snelheid langs die lijn te voorspellen (data minus ruis). Als gevolg hiervan zijn de gesampelde trajecten bijna recht, en kunnen flow-modellen nauwkeurig worden geïntegreerd in relatief weinig stappen.
Fundamenteel zijn dit twee verschillende parametriseringen van hetzelfde doel, maar Kavish stelde vast dat de verschillen er aanzienlijk toe deden. Zijn initiële diffusie-head voorspelde op een 1.000-staps cosinus-schema, zoals aanbevolen in Improved DDPM. Tijdens de inferentie werd de generatie uitgevoerd volgens DDIM. Helaas was deze configuratie onstabiel en leidde dit tot exploderende denoising-trajecten, waarbij 88-95% van de waarden meer dan 8 standaarddeviaties verwijderd was van het gemiddelde van de distributie op alle zeven continue doelen.
Dit wordt veroorzaakt door de schaling van $\epsilon$ bij het berekenen van $x_0$. Het gebruik van meer sampling-stappen vermindert het increment per stap, wat de hoeveelheid overflow voorkomt. Daarnaast regulariseert het toevoegen van stochasticiteit aan het sampling-proces de denoising-procedure naar een standaard Gaussische verdeling, wat afwijkingen vermindert. Hoewel het mogelijk is om het ruisschema aan te passen aan deze instabiliteit, of interventies tijdens de inferentie toe te passen om explosies te voorkomen, ontdekte Kavish dat een rectified flows-benadering direct uit de doos goed presteerde. Daarom stapte hij over op een flow-matching-model.
Omgaan met discontinuïteiten
Het grootste deel van het project werd besteed aan een fundamenteel probleem: marktdata is noch volledig continu, noch volledig discreet. Video, waarvoor diffusiemodellen zeer geschikt zijn, is continu zowel in snapshots (elk frame is een reeks continue pixelintensiteiten en kleuren) als in evolutie (pixels kunnen elke continue waarde aannemen van frame naar frame). Marktdata daarentegen heeft continue snapshots, maar evolueert op een zeer discrete manier, gestuurd door de marktmicrostructuur.
Dit is duidelijk zichtbaar wanneer men kijkt naar de distributies van kenmerken, die worden gekenmerkt door scherpe grenzen:
- De timing van orders is niet normaal verdeeld, maar eerder "klonterig", met puntmassa's rond nul seconden (events die gelijktijdig arriveren), de vroegst mogelijke reactietijd, en hele seconden.
- Prijzen hebben de neiging te clusteren rond het midpoint van de bid en ask, of de huidige bid, of de huidige ask, waardoor er ook daar scherpe discontinuïteiten ontstaan.
Omdat er ook een onbalans is in categorische voorspellingen — slechts 8% van de events zijn trades, de rest zijn BBO-wijzigingen; waardoor de categorische head trades overvoorspelt — experimenteerde Kavish met het opsplitsen van het aantal klassen dat door de categorische head wordt voorspeld. Hij verdeelde BBO-wijzigingen in een reeks veelvoorkomende klassen, zoals "alleen grootte" (geen wijziging in prijs), "ask omhoog", "bid omlaag", etc. Dit had het extra voordeel dat hij "atomen" (of scherpe discontinuïteiten) in bepaalde kenmerken kon isoleren, zodat een verstreken tijd van nul als een eigen klasse kon worden voorspeld. Hij eindigde met een 20-klasse categorische head en eenvoudigere diffusiedoelen, zoals "hoe groot was het niet-nul tijdsinterval" (aangezien nullen categorisch zijn afgehandeld) en "wat is de grootte van de wijziging in de biedprijs" (aangezien de richting een categorie is).
Deze aanpak leidde tot materieel betere marginale distributies voor zowel het event-type als de continue doelen, maar vereiste overduidelijk veel handmatig engineering. Het gebruik van een categorische head om elke discontinuïteit in elk kenmerk specifiek te modelleren is niet schaalbaar voor grotere feature-sets. Echte data bevatten waarschijnlijk veel meer variabelen, waaronder variabelen met een hoge cardinaliteit zoals "op welke beurs gebeurde dit?", wat het aantal categorische klassen potentieel zou doen exploderen.
Daarom zocht Kavish naar een andere manier om discontinuïteiten te behandelen.
Atom smoothing
Hij gebruikte een procedure die hij "atom smoothing" noemde. Het idee is om de werkelijke, grillige distributie te nemen, deze glad te strijken (smoothing), en vervolgens de piek opnieuw te vormen op een manier die de kansmassa daar vastlegt zonder een discontinuïteit te creëren.
Om dit goed te laten werken, moet men er zeker van zijn de juiste representatie van de variabelen te kiezen: scherpe pieken onder de ene representatie zullen minder scherp zijn onder een andere, en het is noodzakelijk om alle scherpe pieken bloot te leggen en te gladslijpen.
Resultaten en rollouts
Kavish stelde vast dat het diffusiemodel met flow matching en atom smoothing vrij goed werkte. Hij vergeleek de marginale distributie van de output van het model per doel met de werkelijke marginale distributie. Dit gebeurde in een one-step setting: hij conditioneerde op een echte context van 10.240 events, trok één volgend event uit het model en vergeleek dit met het event dat daadwerkelijk plaatsvond. Hij kwantificeerde de afwijking van de werkelijke per-doel marginale distributie via de totale variationele (TV) divergentie, berekend als: $$TV(P, Q) = \frac{1}{2} \int |p(x) - q(x)| dx$$ tussen twee distributies $P$ en $Q$.
Hoewel de uitlijning van de marginale distributies belangrijk is, legt dit geen rekening met gezamenlijke relaties tussen kenmerken of temporele consistentie met de voorafgaande context. Daarom trainde Kavish ook een classifier om onderscheid te maken tussen door het model gegenereerde voorspellingen en echte events. De classifier leest een venster van echte context-events gevolgd door één kandidaat-volgend event, en voorspelt of die kandidaat uit het model of uit de data kwam. De generator met feature-representaties die waren geoptimaliseerd voor atom smoothing produceerde veel realistischere samples.
Natuurlijk was het uiteindelijke doel van het model om autoregressieve rollouts te produceren. De voorspellingen van het model verslechteren natuurlijk naarmate men verder in de toekomst kijkt. Een vraag voor verder onderzoek is: in welke mate gebeurt dit? In de resultaten is te zien hoe de spread in CME US breder wordt in de synthetische rollout.
Kavish' model is nog niet nauwkeurig genoeg om een volledig realistische generator te zijn, maar zijn onderzoek tijdens de stage heeft verduidelijkt wat de belangrijke knoppen zijn: hoeveel discretisering moet je in je model inbouwen? (Dat wil zeggen: wat moet je precies categorisch voorspellen, en wat via diffusie?) En hoe representeer en smooth je de distributie van kenmerken om diffusie de beste kans te geven?
Het project hielp ons om marktdata-book-events te zien als elementen die gelijktijdig bestaan in een continue ruimte ("ask size toename van 10%") en in een discrete actieruimte ("penny the bid"). Dit zijn twee manieren om naar hetzelfde te kijken. Als je marktdata wilt genereren, moet je die mix correct modelleren.
Kun je autoregressieve diffusie gebruiken om marktdata te genereren?
In de kwantitatieve financiering zijn we gewend aan modellen die een stroom van marktdata-events voor een bepaald symbool nemen (zoals het toevoegen van rustende orders aan een orderboek, het annuleren van die orders of executies) en de toekomstige prijs van dat symbool voorspellen. Generatieve modellen zijn minder gebruikelijk. Stel je een model voor dat niet alleen een puntschatting van de prijs van een symbool kan geven, maar daadwerkelijk orderboek-events kan synthetiseren, inclusief het tijdstip waarop ze bij de beurs aankomen. Je zou natuurlijk prijsvoorspellingen krijgen, maar je simulaties (rollouts) zouden veel meer textuur hebben dan alleen die voorspellingen.
De aard van marktdata
Een generatief model vereist een antwoord op de vraag: wat voor soort data is marktdata? Lijkt het meer op video of op tekst? Is het continu of discreet? Marktdata lijkt kenmerken van beide te hebben. Een orderboek evolueert via een reeks stappen terwijl marktdeelnemers rustende orders plaatsen of intrekken; er is geen twijfel dat er sprake is van een discrete actieruimte. En toch hebben veel van de belangrijkste parameters van een order, zoals de prijs, een zodanig hoge cardinaliteit dat ze in feite continu lijken. Sommige parameters zijn simpelweg continu: een aspect dat gemakkelijk over het hoofd wordt gezien, maar cruciaal is voor een generatief model, is de timing (bijvoorbeeld: "wanneer komt de nieuwe order aan bij de beurs"). Zelfs dat is een versimpeling. In de praktijk zijn de distributies "spiky": "pennying" (waarbij je een prijs met één tick verbetert) komt veel vaker voor dan verbetering met twee ticks, en orders komen vaak in bursts aan, bijvoorbeeld rond hele getallen van de tijd.
Een manier om deze complicaties te verkennen is door je data te behandelen alsof deze continu is en te kijken waar dat vastloopt. Deze zomer bouwde een research-stagiair, Kavish, een diffusiemodel voor marktdata. Diffusie- en flow-matching-modellen zijn krachtige instrumenten voor het representeren van sequentiële, multimodale data in domeinen zoals beeld, video, robotica en audio. Geïnspireerd door Autoregressive Image Generation without Vector Quantization, creëerde Kavish een generatief model van marktdata op event-niveau met behulp van autoregressieve diffusie.
Tijdens dit proces werden enkele technische bevindingen gedaan. Zo ontdekte Kavish dat DDPM, hoewel theoretisch ideaal voor denoising in diffusiemodellen, divergeerde, en dat flow matching veel beter presteerde. Het belangrijkste resultaat was echter dat volledig continue diffusie zich niet leende voor de grilligheid van echte marktdata. De verschillende pogingen van Kavish om puntmassa's te behandelen via smoothing enerzijds, en het discretiseren van sommige doelen van het model anderzijds, hebben sterk verduidelijkt hoe een uiteindelijk generatief model voor marktdata eruit zou kunnen zien.
Modellering en opzet
Kavish analyseerde vier jaar aan Amerikaanse a aandelengegevens, waarbij elke rij data een tijdstempel, prijs, type (trade, order, cancel, etc.) en andere informatie bevatte. Het diffusiemodel probeerde deze kenmerken voor het volgende event te genereren, dat vervolgens autoregressief aan de stroom werd toegevoegd.
Conform het eerder genoemde artikel van Li et al., maakte hij gebruik van een encoder-diffuser architectuur, specifiek een causally masked transformer encoder om op elke positie een latent embedding te produceren. Tijdens de training werd de latent op elke positie gevoed aan een kleine 'event-kind head', die een 2-categorische kansverdeling produceert die aangeeft of het volgende event een trade is of een BBO-update ("best bid and offer"). De continue doelen, zoals de prijs en verstreken tijd, worden gegenereerd via een diffusie-head die geconditioneerd is op de overeenkomstige latent en het werkelijke event-type via standaard AdaLN-conditionering.
Tijdens de inferentie wordt alleen de gecodeerde latent van het laatste event in de event-kind head gevoerd, waarna een event uit de outputdistributie wordt gesampled. De continue kenmerken van het volgende event worden gegenereerd via de diffusie-head, geconditioneerd op de latent van het laatste event en het gesampelde event.
DDPM versus Flow Matching
Een DDPM (denoising diffusion probabilistic model) voorspelt de ruis die aan een sample is toegevoegd en leidt een schone schatting af door de geschaalde ruisvoorspelling af te trekken en te delen door het resterende signaalniveau. DDPM's zijn zeer succesvol in gebieden zoals beeldgeneratie, maar bij hoge ruisniveaus leiden kleine fouten in de ruisvoorspelling tot grote fouten in de schatting van het schone doel. Flow matching interpoleert daarentegen lineair tussen ruis en data, en traint het netwerk om de snelheid langs die lijn te voorspellen (data minus ruis). Als gevolg hiervan zijn de gesampelde trajecten bijna recht, en kunnen flow-modellen nauwkeurig worden geïntegreerd in relatief weinig stappen.
Fundamenteel zijn dit twee verschillende parametriseringen van hetzelfde doel, maar Kavish stelde vast dat de verschillen er aanzienlijk toe deden. Zijn initiële diffusie-head voorspelde op een 1.000-staps cosinus-schema, zoals aanbevolen in Improved DDPM. Tijdens de inferentie werd de generatie uitgevoerd volgens DDIM. Helaas was deze configuratie onstabiel en leidde dit tot exploderende denoising-trajecten, waarbij 88-95% van de waarden meer dan 8 standaarddeviaties verwijderd was van het gemiddelde van de distributie op alle zeven continue doelen.
Dit wordt veroorzaakt door de schaling van $\epsilon$ bij het berekenen van $x_0$. Het gebruik van meer sampling-stappen vermindert het increment per stap, wat de hoeveelheid overflow voorkomt. Daarnaast regulariseert het toevoegen van stochasticiteit aan het sampling-proces de denoising-procedure naar een standaard Gaussische verdeling, wat afwijkingen vermindert. Hoewel het mogelijk is om het ruisschema aan te passen aan deze instabiliteit, of interventies tijdens de inferentie toe te passen om explosies te voorkomen, ontdekte Kavish dat een rectified flows-benadering direct uit de doos goed presteerde. Daarom stapte hij over op een flow-matching-model.
Omgaan met discontinuïteiten
Het grootste deel van het project werd besteed aan een fundamenteel probleem: marktdata is noch volledig continu, noch volledig discreet. Video, waarvoor diffusiemodellen zeer geschikt zijn, is continu zowel in snapshots (elk frame is een reeks continue pixelintensiteiten en kleuren) als in evolutie (pixels kunnen elke continue waarde aannemen van frame naar frame). Marktdata daarentegen heeft continue snapshots, maar evolueert op een zeer discrete manier, gestuurd door de marktmicrostructuur.
Dit is duidelijk zichtbaar wanneer men kijkt naar de distributies van kenmerken, die worden gekenmerkt door scherpe grenzen:
- De timing van orders is niet normaal verdeeld, maar eerder "klonterig", met puntmassa's rond nul seconden (events die gelijktijdig arriveren), de vroegst mogelijke reactietijd, en hele seconden.
- Prijzen hebben de neiging te clusteren rond het midpoint van de bid en ask, of de huidige bid, of de huidige ask, waardoor er ook daar scherpe discontinuïteiten ontstaan.
Omdat er ook een onbalans is in categorische voorspellingen — slechts 8% van de events zijn trades, de rest zijn BBO-wijzigingen; waardoor de categorische head trades overvoorspelt — experimenteerde Kavish met het opsplitsen van het aantal klassen dat door de categorische head wordt voorspeld. Hij verdeelde BBO-wijzigingen in een reeks veelvoorkomende klassen, zoals "alleen grootte" (geen wijziging in prijs), "ask omhoog", "bid omlaag", etc. Dit had het extra voordeel dat hij "atomen" (of scherpe discontinuïteiten) in bepaalde kenmerken kon isoleren, zodat een verstreken tijd van nul als een eigen klasse kon worden voorspeld. Hij eindigde met een 20-klasse categorische head en eenvoudigere diffusiedoelen, zoals "hoe groot was het niet-nul tijdsinterval" (aangezien nullen categorisch zijn afgehandeld) en "wat is de grootte van de wijziging in de biedprijs" (aangezien de richting een categorie is).
Deze aanpak leidde tot materieel betere marginale distributies voor zowel het event-type als de continue doelen, maar vereiste overduidelijk veel handmatig engineering. Het gebruik van een categorische head om elke discontinuïteit in elk kenmerk specifiek te modelleren is niet schaalbaar voor grotere feature-sets. Echte data bevatten waarschijnlijk veel meer variabelen, waaronder variabelen met een hoge cardinaliteit zoals "op welke beurs gebeurde dit?", wat het aantal categorische klassen potentieel zou doen exploderen.
Daarom zocht Kavish naar een andere manier om discontinuïteiten te behandelen.
Atom smoothing
Hij gebruikte een procedure die hij "atom smoothing" noemde. Het idee is om de werkelijke, grillige distributie te nemen, deze glad te strijken (smoothing), en vervolgens de piek opnieuw te vormen op een manier die de kansmassa daar vastlegt zonder een discontinuïteit te creëren.
Om dit goed te laten werken, moet men er zeker van zijn de juiste representatie van de variabelen te kiezen: scherpe pieken onder de ene representatie zullen minder scherp zijn onder een andere, en het is noodzakelijk om alle scherpe pieken bloot te leggen en te gladslijpen.
Resultaten en rollouts
Kavish stelde vast dat het diffusiemodel met flow matching en atom smoothing vrij goed werkte. Hij vergeleek de marginale distributie van de output van het model per doel met de werkelijke marginale distributie. Dit gebeurde in een one-step setting: hij conditioneerde op een echte context van 10.240 events, trok één volgend event uit het model en vergeleek dit met het event dat daadwerkelijk plaatsvond. Hij kwantificeerde de afwijking van de werkelijke per-doel marginale distributie via de totale variationele (TV) divergentie, berekend als: $$TV(P, Q) = \frac{1}{2} \int |p(x) - q(x)| dx$$ tussen twee distributies $P$ en $Q$.
Hoewel de uitlijning van de marginale distributies belangrijk is, legt dit geen rekening met gezamenlijke relaties tussen kenmerken of temporele consistentie met de voorafgaande context. Daarom trainde Kavish ook een classifier om onderscheid te maken tussen door het model gegenereerde voorspellingen en echte events. De classifier leest een venster van echte context-events gevolgd door één kandidaat-volgend event, en voorspelt of die kandidaat uit het model of uit de data kwam. De generator met feature-representaties die waren geoptimaliseerd voor atom smoothing produceerde veel realistischere samples.
Natuurlijk was het uiteindelijke doel van het model om autoregressieve rollouts te produceren. De voorspellingen van het model verslechteren natuurlijk naarmate men verder in de toekomst kijkt. Een vraag voor verder onderzoek is: in welke mate gebeurt dit? In de resultaten is te zien hoe de spread in CME US breder wordt in de synthetische rollout.
Kavish' model is nog niet nauwkeurig genoeg om een volledig realistische generator te zijn, maar zijn onderzoek tijdens de stage heeft verduidelijkt wat de belangrijke knoppen zijn: hoeveel discretisering moet je in je model inbouwen? (Dat wil zeggen: wat moet je precies categorisch voorspellen, en wat via diffusie?) En hoe representeer en smooth je de distributie van kenmerken om diffusie de beste kans te geven?
Het project hielp ons om marktdata-book-events te zien als elementen die gelijktijdig bestaan in een continue ruimte ("ask size toename van 10%") en in een discrete actieruimte ("penny the bid"). Dit zijn twee manieren om naar hetzelfde te kijken. Als je marktdata wilt genereren, moet je die mix correct modelleren.