Marketing AnalyticsLLM / RAG retailB2B SaaS Cost per acquisition −16%

Creative performance scorer

3 people · 4 months Analytics engineer · ML engineer · Me — architecture and delivery
the engagement client data — not shown
heard
"We produce three hundred assets a quarter and the only thing we know afterwards is which ones the agency liked."
real problem

Creative attributes lived nowhere. There was no join between what an asset actually contained and how it performed, so every retrospective was anecdote.

system built

A vision-language pass that tags every asset on a fixed taxonomy (offer type, hero subject, text density, format), joined to spend and conversion data, with a scorer that reports attribute-level lift and flags fatigue before spend is wasted.

what broke

The model happily invented attributes that were not in the taxonomy. We constrained it to a closed vocabulary and held back a hand-labelled set to measure tagging accuracy per quarter.

the open rebuild same architecture · public data
dataset

Avito ads + Fashion Product Images (tagging), public ad-performance panel

what the rebuild covers

The tagging taxonomy and the attribute-lift model are reproduced end to end. The fatigue detector is in the notebook but not wrapped as a service.

artifacts
NotebookCodeDatasetWrite-upDemo
Open the code Open notebook