<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
<title>Goran Peremin</title>
<link>https://www.peremin.com/</link>
<description></description>
<language>en-US</language>
<atom:link href="https://www.peremin.com/feed.xml" rel="self" type="application/rss+xml"/>
<item>
<title>eCommerce growth vodič: SEO, CRO, analitika, AI i GDPR</title>
<link>https://www.peremin.com/ecommerce-growth-vodic-seo-cro-analitika-ai-gdpr/</link>
<guid isPermaLink="true">https://www.peremin.com/ecommerce-growth-vodic-seo-cro-analitika-ai-gdpr/</guid>
<pubDate>Sat, 18 Jul 2026 00:00:00 +0000</pubDate>
<description>Kako povezati akviziciju, konverziju, retention, analitiku, AI i privatnost u jedan mjerljiv sustav rasta web shopa.</description>
<content:encoded><![CDATA[<p>Web shop rijetko stagnira zato što mu nedostaje još jedan popup.</p>
<p>Češće stagnira zato što SEO lovi promet, performance tim lovi ROAS, CRO tim boju gumba, CRM open rate, a uprava pita za profit. Svi rade. Sustav baš i ne.</p>
<p>Growth nije nova kampanja. To je način na koji povezuješ potražnju, iskustvo kupca, konverziju, ponovnu kupnju, maržu i učenje iz podataka.</p>
<p>Ovaj vodič služi kao karta kroz glavne teme na peremin.com. Nije popis „37 trikova za rast do utorka”. Ako ti to netko obeća, provjeri prodaje li odmah ispod i tečaj.</p>
<h2>1. Počni od poslovnog problema</h2>
<p>Prije kanala i alata odgovori na nekoliko neugodnih pitanja:</p>
<ul><li><p>Treba li web shop više kvalitetnog prometa ili bolje koristiti postojeći?</p></li><li><p>Je li problem konverzija ili loša marža nakon popusta i dostave?</p></li><li><p>Kupci ne dolaze drugi put ili ih ne znamo prepoznati?</p></li><li><p>Nedostaje li potražnja ili proizvod nestane sa zalihe baš kad potražnja krene?</p></li><li><p>Mjerimo li inkrementalni učinak ili samo pripisujemo zasluge zadnjem kliku?</p></li></ul>
<p>Bez toga growth plan postaje švedski stol taktika. Malo SEO-a, dva influencera, AI chatbot i grafikon koji ide prema gore jer je tako nacrtan.</p>
<h2>2. Akvizicija: promet mora imati razlog</h2>
<p>SEO nije proizvodnja članaka po kilogramu. Treba povezati tehničku dostupnost, namjeru pretraživanja, kategorije, proizvode, interno pretraživanje i sadržaj koji rješava stvaran problem.</p>
<p>Posebno zanemarena tema je interna tražilica. Kupac koji upiše konkretan upit već je pokazao namjeru. Ako mu web shop vrati krive proizvode, nismo izgubili „search session”. Izgubili smo čovjeka koji nam je doslovno napisao što želi.</p>
<p>U istraživanju <a href="https://www.peremin.com/koliko-je-los-search-skup-seo-ux-i-konverzija/">Koliko loša interna tražilica košta web shop?</a> na 5.041 ručno označenom upitu pokazujem koliko loš redoslijed skriva točne proizvode i kako stvarni trošak potvrditi kroz maržu.</p>
<p>Brzina je drugi osnovni sloj. Ako slike proizvoda imaju nekoliko megabajta, ne treba ti nova SEO teorija nego kompresija. Pogledaj <a href="https://www.peremin.com/kako-automatski-optimizirati-slike-za-web-shop-uz-pomoc-pythona/">optimizaciju slika za web shop pomoću Pythona</a>.</p>
<h2>3. CRO: konverzija nije isto što i profit</h2>
<p>CRO počinje uklanjanjem neizvjesnosti:</p>
<ul><li><p>Je li web shop vjerodostojan?</p></li><li><p>Koliko košta dostava?</p></li><li><p>Kada proizvod stiže?</p></li><li><p>Mogu li ga vratiti?</p></li><li><p>Hoće li plaćanje biti sigurno?</p></li><li><p>Odgovara li proizvod mojoj situaciji?</p></li></ul>
<p><a href="https://www.peremin.com/7-najefikasnijih-proof-elemenata-za-povecanje-povjerenja-u-web-shopu/">Sedam elemenata povjerenja</a> dobar su početak jer rješavaju stvarne sumnje, a ne ukrašavaju checkout.</p>
<p>Ali viša stopa konverzije nije automatski pobjeda. Kupon može podići prodaju i istodobno pojesti doprinosnu maržu. Zato u tekstu <a href="https://www.peremin.com/popust-nije-konverzija-uplift-marza-i-cro/">Popust nije konverzija</a> odvajam kupce koje je ponuda stvarno pomaknula od onih kojima smo samo subvencionirali kupnju koju bi ionako napravili.</p>
<h2>4. Retention: rast koji curi nije rast</h2>
<p>Ako svaki mjesec dovedeš 1.000 novih kupaca, a izgubiš vrijednost postojećih, akvizicija postaje skupa zamjena za kantu s rupom.</p>
<p>Retention sustav treba znati:</p>
<ul><li><p>tko se vjerojatno neće vratiti</p></li><li><p>kada je realan trenutak za novu kupnju</p></li><li><p>koji proizvod ima smisla preporučiti</p></li><li><p>povećava li preporuka maržu ili samo premješta postojeću kupnju</p></li><li><p>koji signal pokazuje da interes slabi</p></li></ul>
<p>Za praktične modele kreni od članka <a href="https://www.peremin.com/sto-ce-kupac-sljedece-kupiti-recommendations-i-cltv/">Što će kupac sljedeće kupiti — recommendations i CLTV</a> i eksperimenta <a href="https://www.peremin.com/moze-li-ai-predvidjeti-otkazivanje-clanstva-u-teretani/">Može li AI predvidjeti tko će otkazati članstvo?</a>.</p>
<p>Širu sliku objašnjava <a href="https://www.peremin.com/napredna-analitika-i-predictive-analytics-marketing-bez-nagadanja/">prediktivna analitika u eCommerceu</a>: model nije vidovnjak, nego procjena vjerojatnosti pod poznatim uvjetima.</p>
<h2>5. Zalihe i potražnja: prosjek ne zna da dolazi promjena</h2>
<p>Sezonski grafikon može izgledati uredno sve dok se vrijeme, cijena, konkurencija ili dostupnost proizvoda ne promijene.</p>
<p>Dobro predviđanje ne pita samo koliko ćemo prodati. Pita koji vanjski signal dovoljno rano pokazuje da se uvjeti mijenjaju. U članku <a href="https://www.peremin.com/ne-predvidaj-samo-prodaju-pronadi-signal-koji-je-zaustavlja/">Ne predviđaj samo prodaju — pronađi signal koji je zaustavlja</a> povezujem takav signal s odlukama o zalihama, nabavi i oglašavanju.</p>
<h2>6. Mjerenje: ROAS nije presuda</h2>
<p>Platforma koja prodaje oglas rado će ti objasniti koliko je prodaje sama proizvela. To je kao da učenik sam ispravlja test i određuje kriterij prolaza.</p>
<p>Za ozbiljnije mjerenje kombiniraj:</p>
<ul><li><p>dobro definirane poslovne metrike</p></li><li><p>eksperimente i holdout grupe</p></li><li><p>atribuciju kao operativni, ne apsolutni pogled</p></li><li><p>ekonometrijske modele</p></li><li><p>doprinosnu maržu i CLTV</p></li></ul>
<p><a href="https://www.peremin.com/roi-nije-jedan-broj-kako-povezati-metrike-modele-i-zdrav-razum-u-marketingu/">Marketing ROI</a> povezuje te slojeve, a <a href="https://www.peremin.com/ekonometrija-u-marketingu-kako-pretvoriti-brojke-u-oruzje/">ekonometrija u marketingu</a> pokazuje zašto korelacija i uzrok nisu isti stanovnici istog Excela.</p>
<p>Za brze kreativne hipoteze može pomoći i <a href="https://www.peremin.com/besplatno-ab-testiranje-s-umjetnom-inteligencijom-ai-llm/">A/B testiranje uz AI</a>, ali sintetička procjena nije zamjena za stvarno ponašanje kupaca.</p>
<h2>7. AI: koristi ga kao alat, ne kao alibi</h2>
<p>AI može pomoći pri segmentaciji, preporukama, predviđanju, istraživanju i generiranju hipoteza. Može i vrlo uvjerljivo automatizirati lošu pretpostavku.</p>
<p><a href="https://www.peremin.com/koristenje-genagents-simulacija-u-predvidanju-trzisnog-uspjeha-novih-e-commerce-proizvoda/">GenAgents simulacije</a> korisne su za istraživanje scenarija, ali virtualni kupac nema karticu, loš dan ni susjeda koji mu je preporučio konkurenta.</p>
<p>Isto vrijedi za <a href="https://www.peremin.com/sinteticki-podaci-u-istrazivanjima-genijalnost-ili-samo-lijenost/">sintetičke podatke</a>: odlični su za razvoj i testiranje kada su dobro dizajnirani, opasni kada ih koristimo kao elegantnu zamjenu za stvarnost.</p>
<p>Ako želiš procijeniti je li nova marketinška tema stvaran signal ili samo glasna prezentacija, otvori <a href="https://www.peremin.com/lab/hypeometar/">Marketing Hypeometar</a>.</p>
<h2>8. GDPR i povjerenje: legal nije zadnji checkbox</h2>
<p>Web shop obrađuje podatke kupaca, posjetitelja, zaposlenika i dobavljača. U tom sustavu privatnost utječe na tracking, CRM, newsletter, personalizaciju, AI, korisničku podršku i sigurnost.</p>
<p><a href="https://www.peremin.com/gdpr-checklista-za-e-commerce-bez-gluposti-samo-ono-sto-ti-zapravo-treba/">Napredna GDPR checklista za hrvatske web shopove</a> povezuje GDPR s pravilima AZOP-a, Zakonom o elektroničkim komunikacijama, Zakonom o zaštiti potrošača, Zakonom o radu i Zakonom o zaštiti na radu. Za cookie implementaciju koristi zaseban vodič <a href="https://www.peremin.com/kolacici-uskladi-se-s-gdpr-om-i-eprivacy-direktivom/">Kolačići i GDPR u Hrvatskoj</a>.</p>
<p>Privatnost nije suprotnost marketingu. Loša obrada podataka je samo marketing koji je zaboravio da iza retargeting publike postoje ljudi.</p>
<h2>Redoslijed rada za sljedećih 90 dana</h2>
<ol><li><p>Odaberi jedan poslovni problem i jednu glavnu metriku ishoda.</p></li><li><p>Provjeri kvalitetu podataka i možeš li uopće izmjeriti promjenu.</p></li><li><p>Ukloni najveću tehničku ili korisničku prepreku.</p></li><li><p>Postavi eksperiment ili usporedivu kontrolu.</p></li><li><p>Mjeri prodaju, maržu i ponašanje nakon prve kupnje.</p></li><li><p>Dokumentiraj što je naučeno, uključujući neuspjeh.</p></li><li><p>Tek tada skaliraj kanal, model ili automatizaciju.</p></li></ol>
<p>Growth postaje ozbiljan kada prestane biti kolekcija taktika i postane sustav učenja. Sve ostalo je samo vrlo zaposlen kalendar.</p>]]></content:encoded>
</item>
<item>
<title>Marketing Hypeometar — je li trend stvaran ili je samo glasan?</title>
<link>https://www.peremin.com/marketing-hypeometar-kako-radi/</link>
<guid isPermaLink="true">https://www.peremin.com/marketing-hypeometar-kako-radi/</guid>
<pubDate>Wed, 15 Jul 2026 00:00:00 +0000</pubDate>
<description>Kako Marketing Hypeometar uspoređuje pažnju publike i istraživačku aktivnost te zašto popularnost marketinške teme nije isto što i dokaz poslovnog učinka.</description>
<content:encoded><![CDATA[<p>Marketing svakih nekoliko mjeseci dobije novu temu koju svi moramo hitno razumjeti, implementirati i staviti u prezentaciju.</p>
<p>Jučer je to bila personalizacija. Danas je generativni AI. Sutra će netko izmisliti novi naziv za regresiju i prodavati je kao revoluciju.</p>
<p>Problem nije u novim idejama. Problem nastaje kada popularnost teme zamijenimo dokazom da nešto stvarno funkcionira.</p>
<p>Zato sam napravio <a href="https://www.peremin.com/lab/hypeometar/">Marketing Hypeometar</a>.</p>
<p>Njegov zadatak nije predvidjeti budućnost niti odlučiti umjesto tebe. Hypeometar uspoređuje dva različita signala:</p>
<ul><li><p>koliko određena tema trenutačno privlači pažnju publike</p></li><li><p>raste li istodobno i količina objavljenih istraživanja o toj temi</p></li></ul>
<p>Jedan signal pokazuje koliko je tema glasna. Drugi pokazuje pokušava li je netko ozbiljno istražiti. Razlika između njih često je zanimljivija od samih brojeva.</p>
<h2>Odakle dolaze podaci?</h2>
<p>Hypeometar koristi dva javno dostupna izvora: Wikimedia Analytics i Crossref.</p>
<h3>Wikipedia kao signal pažnje</h3>
<p>Za mjerenje interesa koristim dnevne preglede relevantnog članka na engleskoj Wikipediji tijekom posljednjih 90 dana.</p>
<p>Za generativni AI promatram članak <em>Generative artificial intelligence</em>. Za predictive analytics koristim <em>Predictive analytics</em>. Kada tema nema vlastiti stabilan članak, koristim najbliži mjerljivi proxy i to ne skrivam. Za Optimization for AI Shoppers proxy je <em>Agentic commerce</em>, za Video-First Shoppable Feeds <em>TikTok Shop</em>, a za Hyper-Personalized Zero-Party Data <em>Customer data platform</em>.</p>
<p>Wikipedia pregled ne znači kupnju, promjenu strategije ili odobren budžet. Ali može biti koristan signal pažnje. Kada tema izađe iz uskog stručnog kruga, ljudi počinju tražiti objašnjenja, a dio tog interesa završava na Wikipediji.</p>
<p>Podaci dolaze iz javnog <a href="https://doc.wikimedia.org/generated-data-platform/aqs/analytics-api/">Wikimedia Analytics API-ja</a>.</p>
<h3>Crossref kao signal istraživačke aktivnosti</h3>
<p>Crossref je javna baza metapodataka znanstvenih i stručnih publikacija. Hypeometar pretražuje naslove zapisa povezanih s odabranom temom i uspoređuje broj zapisa iz posljednjih 12 mjeseci s prethodnih 12 mjeseci.</p>
<p>Ako istodobno rastu interes publike i broj publikacija, tema možda ima nešto više temelja od običnog LinkedIn stampeda. Ako pažnja leti, a istraživačka aktivnost stoji, dobivamo drukčiju sliku: puno razgovora, ali još malo provjerenog znanja.</p>
<p>Crossrefov <a href="https://www.crossref.org/documentation/retrieve-metadata/rest-api/">javni REST API</a> dostupan je bez registracije.</p>
<h2>Kako nastaje rezultat?</h2>
<p>Hypeometar ne koristi umjetnu inteligenciju za izmišljanje presude. Račun je namjerno jednostavan i vidljiv.</p>
<p>Za pažnju publike uspoređujem prosječan broj dnevnih Wikipedia pregleda tijekom posljednjih 14 dana s prosjekom prethodna četiri tjedna.</p>
<p>Za istraživački signal uspoređujem broj Crossref zapisa iz posljednjih 12 mjeseci s prethodnim 12-mjesečnim razdobljem.</p>
<p>Oba rezultata pretvaraju se u indeks od 0 do 100:</p>
<ul><li>rezultat oko 50 znači da nema velikog pomaka</li><li>rezultat iznad 50 označava rast</li><li>rezultat ispod 50 označava pad</li><li>veća udaljenost od 50 znači snažniju promjenu</li></ul>
<figure class="td-chart td-chart-bar" data-td-chart-interactive>
<figcaption class="td-chart-caption">Primjer čitanja Hypeometra — GEO, presjek 15. srpnja 2026.</figcaption>
<div class="td-chart-frame">
<svg
  class="td-chart-svg"
  viewBox="0 0 720 360"
  role="img"
  aria-label="Primjer čitanja Hypeometra — GEO, presjek 15. srpnja 2026."
>
<desc>bar chart with 2 labels and 1 series</desc>
<line
  class="td-chart-grid"
  x1="80"
  y1="302"
  x2="696"
  y2="302"
></line>
<text
  class="td-chart-value"
  x="70"
  y="306"
  text-anchor="end"
>0</text>
<line
  class="td-chart-grid"
  x1="80"
  y1="232.5"
  x2="696"
  y2="232.5"
></line>
<text
  class="td-chart-value"
  x="70"
  y="236.5"
  text-anchor="end"
>20</text>
<line
  class="td-chart-grid"
  x1="80"
  y1="163"
  x2="696"
  y2="163"
></line>
<text
  class="td-chart-value"
  x="70"
  y="167"
  text-anchor="end"
>40</text>
<line
  class="td-chart-grid"
  x1="80"
  y1="93.5"
  x2="696"
  y2="93.5"
></line>
<text
  class="td-chart-value"
  x="70"
  y="97.5"
  text-anchor="end"
>60</text>
<line
  class="td-chart-grid"
  x1="80"
  y1="24"
  x2="696"
  y2="24"
></line>
<text
  class="td-chart-value"
  x="70"
  y="28"
  text-anchor="end"
>80</text>
<line
  class="td-chart-axis"
  x1="80"
  y1="302"
  x2="696"
  y2="302"
></line>
<line
  class="td-chart-axis"
  x1="80"
  y1="24"
  x2="80"
  y2="302"
></line>
<rect
  class="td-chart-bar td-chart-series-0"
  x="217"
  y="277.67"
  width="32"
  height="24.33"
  rx="4"
><title>pažnja publike: 7</title></rect>
<rect
  class="td-chart-bar td-chart-series-0"
  x="525"
  y="62.23"
  width="32"
  height="239.78"
  rx="4"
><title>istraživački signal: 69</title></rect>
<text
  class="td-chart-label"
  x="234"
  y="324"
  text-anchor="middle"
>pažnja publike</text>
<text
  class="td-chart-label"
  x="542"
  y="324"
  text-anchor="middle"
>istraživački signal</text>

<rect
  class="td-chart-series-0"
  x="80"
  y="336"
  width="12"
  height="12"
  rx="3"
  fill="currentColor"
></rect>
<text
  class="td-chart-legend-text"
  x="98"
  y="346"
  text-anchor="start"
>Indeks</text>
</svg>
</div>
</figure>
<p>Ovaj presjek za Generative Engine Optimization dobro pokazuje zašto gledam oba signala. U trenutku mjerenja kratkoročna Wikipedia pažnja bila je 25,2% niža od prethodnog razdoblja, dok je Crossref bilježio 138.950 rezultata u posljednjih 12 mjeseci, oko 15,5% više nego godinu ranije.</p>
<p>To nije dokaz da GEO radi. Crossrefov rezultat uključuje i šire podudarnosti naslova. Ali pokazuje da dnevna pažnja i publikacijska aktivnost ne moraju hodati u istom smjeru. Upravo je zato konačna presuda manje važna od odnosa između signala.</p>
<h2>Četiri moguće presude</h2>
<h3>Više dima nego dokaza</h3>
<p>Pažnja raste znatno brže od istraživačke aktivnosti. Tema nije automatski beskorisna, ali je dobar kandidat za mali kontrolirani test, a loš kandidat za slijepo kopiranje.</p>
<h3>Dokazi ispred hypea</h3>
<p>Istraživački signal jači je od javne pažnje. Tema možda nije konferencijski hit, ali vrijedi dublje kopati.</p>
<h3>Trend s pokrićem</h3>
<p>Pažnja i istraživačka aktivnost istodobno snažno rastu. To još nije dokaz poslovnog učinka, ali nije ni samo buka.</p>
<h3>Signal je mlak</h3>
<p>Nema dramatičnog pomaka. To često znači manje FOMO-a i više prostora za normalan eksperiment.</p>
<h2>Zašto sam napravio Hypeometar?</h2>
<p>Zato što se u marketingu prečesto miješaju tri različite tvrdnje:</p>
<ol><li><p>nešto je popularno</p></li><li><p>nešto je istraženo</p></li><li><p>nešto će profitabilno raditi u konkretnom poslovnom kontekstu</p></li></ol>
<p>To nisu iste tvrdnje.</p>
<p>Popularnost može proizvesti dobru ideju za sadržaj. Istraživanja mogu dati kvalitetnu početnu hipotezu. Ali tek dobro postavljen eksperiment pokazuje djeluje li nešto na tvoje kupce, maržu i poslovni model.</p>
<p>Hypeometar zato nije alat za konačnu odluku. To je alat za postavljanje boljeg prvog pitanja:</p>
<blockquote><p>Gledam li stvaran signal ili samo temu o kojoj su svi odlučili pričati ovaj tjedan?</p></blockquote>
<h2>Što rezultat ne govori?</h2>
<p>Rezultat od 85 ne znači da će tehnologija povećati prodaju za 85%. Ne znači ni da je 85% pronađenih publikacija kvalitetno.</p>
<p>Hypeometar ne analizira metodološku kvalitetu svakog rada, reprezentativnost uzorka, citiranost, reproduktivnost, tržišnu potražnju ni poslovni rezultat implementacije.</p>
<p>Crossrefov zapis je metapodatak o publikaciji. Broj zapisa mjeri aktivnost, ne istinu. Wikipedia pregled mjeri pažnju, ne slaganje, kupovnu namjeru ni budžet.</p>
<p>Zato Hypeometar koristi kao radar, a ne kao autopilot. Radar ti može pokazati da se nešto događa. I dalje ti moraš odlučiti vrijedi li promijeniti smjer.</p>
<h2>Kako ga koristiti?</h2>
<p>Odaberi temu u <a href="https://www.peremin.com/lab/hypeometar/">Marketing Hypeometru</a> i klikni <strong>Izmjeri signal</strong>.</p>
<p>Nemoj gledati samo konačnu oznaku. Pogledaj raste li pažnja, raste li broj publikacija, postoji li velik razmak između signala i ima li tema smisla za tvoj poslovni problem.</p>
<p>Ako postoji puno hypea i malo dokaza, kreni malim eksperimentom. Ako postoje dokazi, ali malo pažnje, možda si pronašao korisnu temu prije konkurencije. Ako oba signala rastu, istraži dublje — ali nemoj preskočiti validaciju na vlastitim podacima.</p>
<p>A ako oba padaju, nemoj automatski odbaciti temu. Dosadne metode često nastavljaju zarađivati novac dugo nakon što ih konferencije prestanu spominjati.</p>
<p><strong>Važno:</strong> Hypeometar prikazuje relativnu promjenu javne pažnje i broja publikacija. Ne mjeri kvalitetu istraživanja, tržišnu potražnju ni očekivani poslovni učinak. Koristi ga za pronalaženje tema vrijednih daljnjeg istraživanja — ne kao zamjenu za eksperiment, analizu ili zdrav razum.</p>]]></content:encoded>
</item>
<item>
<title>Ne predviđaj samo prodaju — pronađi signal koji je zaustavlja</title>
<link>https://www.peremin.com/ne-predvidaj-samo-prodaju-pronadi-signal-koji-je-zaustavlja/</link>
<guid isPermaLink="true">https://www.peremin.com/ne-predvidaj-samo-prodaju-pronadi-signal-koji-je-zaustavlja/</guid>
<pubDate>Sat, 04 Jul 2026 00:00:00 +0000</pubDate>
<description>Kako pronaći vanjski signal koji najavljuje kraj sezonske potražnje i pretvoriti ga u pravodobnu odluku o zalihama, nabavi i oglašavanju.</description>
<content:encoded><![CDATA[<p>Prodaja sladoleda raste s temperaturom.</p>
<p>Čestitam, upravo smo otkrili ljeto.</p>
<p>Za taj zaključak ne trebaju nam umjetna inteligencija, pet dashboarda ni konzultant koji će riječ <em>seasonality</em> staviti na 46 slajdova. Zanimljivo pitanje nije zašto se sladoled bolje prodaje kada je vruće.</p>
<p>Zanimljivo pitanje glasi:</p>
<blockquote><p>Koji nam signal može dovoljno rano pokazati da će se prodaja uskoro zaustaviti?</p></blockquote>
<p>Kada pad konačno vidimo u prodajnim podacima, roba je možda već naručena, kampanja plaćena, a skladište se puni proizvodom čiji je trenutak upravo prošao.</p>
<p>Problem nije samo loša prognoza. Problem je praćenje pogrešnog signala.</p>
<h2>Prodaja je posljednja koja sazna da je sezona završila</h2>
<p>Prodaja govori što se već dogodilo. Ako gledamo samo nju, pokušavamo voziti gledajući u retrovizor.</p>
<p>Kod sladoleda signal može biti temperatura. Kod kišobrana oborine. Kod školskih torbi početak školske godine. Kod turističke opreme broj rezervacija. Kod viralnog proizvoda interes na tražilicama i društvenim mrežama.</p>
<p>Signal može biti i:</p>
<ul><li><p>ton i intenzitet vijesti na televiziji, portalima i društvenim mrežama</p></li><li><p>političko, sigurnosno ili društveno događanje u gradu, regiji ili zemlji</p></li><li><p>inflacija, nezaposlenost, kamatne stope ili potrošačko povjerenje</p></li><li><p>cijena i aktivnosti konkurencije</p></li><li><p>izlazak novog modela proizvoda</p></li><li><p>kraj događaja ili marketinške kampanje</p></li></ul>
<p>Loša vijest pritom ne mora smanjiti svaku prodaju. Ekonomska nesigurnost može srušiti luksuznu kategoriju i istodobno podići potražnju za jeftinijom zamjenom. Oluja može zaustaviti dio kupnji, ali povećati prodaju baterija i zaštitne opreme.</p>
<p>Ne pretpostavljamo reakciju tržišta. Analiziramo podatke i tražimo signal koji dosljedno prethodi promjeni prodaje.</p>
<h2>Ne pitaj što ljudi misle. Pogledaj što podaci pokazuju.</h2>
<p>“Završila je sezona” nije analiza. Koji se signal promijenio? Kada? Koliko dana prije pada prodaje? Ponavlja li se obrazac ili samo dobro zvuči na sastanku?</p>
<p>Osjećaj nije vremenska serija. Najsamouvjerenija osoba u prostoriji nije automatski vlasnik istine.</p>
<p>Podaci već postoje:</p>
<table><thead><tr><th>izvor</th><th>što možemo pratiti</th></tr></thead><tbody><tr><td>ERP</td><td>prodaja, cijena, popust, zaliha i nabava</td></tr><tr><td>Analytics</td><td>posjeti, pregledi proizvoda, košarice i konverzije</td></tr><tr><td>CRM</td><td>kampanje, segmenti i ponovljene kupnje</td></tr><tr><td>Search Console i SEO alati</td><td>impresije, klikovi, pozicije i pretraživanja</td></tr><tr><td>Google Trends</td><td>relativno kretanje interesa</td></tr><tr><td>oglasne platforme</td><td>impresije, klikovi, trošak i rezultat kampanje</td></tr><tr><td>vanjski izvori</td><td>vrijeme, vijesti, događaji i stanje tržišta</td></tr></tbody></table>
<p>Prvi posao nije izabrati algoritam. Prvi posao je složiti vremensku liniju proizvoda i provjeriti što se pomaknulo prije prodaje.</p>
<h2>Drugi su već pronašli korisne signale — i nekoliko zamki</h2>
<p>Googleovi ekonomisti Hyunyoung Choi i Hal Varian još su 2009. pokazivali kako podaci o pretragama mogu pomoći pri procjeni maloprodaje, prodaje automobila i putovanja. Pretrage nastaju odmah, dok službeni podaci često kasne. Nazvali su to <a href="https://research.google/blog/predicting-the-present-with-google-trends/">predviđanjem sadašnjosti</a>.</p>
<p>Istraživanje na proizvodima kompanije Sennheiser pronašlo je da pretrage povezane s kompanijom i proizvodom mogu poboljšati prognozu prodaje na razini proizvoda. <a href="https://research.uni-hannover.de/en/publications/can-google-trends-improve-sales-forecasts-on-a-product-level/">Rad je objavljen u časopisu Applied Economics Letters</a>.</p>
<p>Ali online interes nije automatski koristan. Studija u <em>International Journal of Forecasting</em> pokazala je da su u njihovim slučajevima jednostavni modeli poput eksponencijalnog izglađivanja bili bolji od modela obogaćenih online informacijama. Autori upozoravaju na loše benchmarke i nedovoljno strogu evaluaciju u dijelu ranijih istraživanja. <a href="https://www.sciencedirect.com/science/article/pii/S0169207018300505">Drugim riječima, Google Trends nije vilinska prašina</a>.</p>
<p>Isto vrijedi za vrijeme. Istraživanje na podacima velikog kanadskog trgovca pokazalo je da temperatura, vlaga, oborine i naoblaka mogu znatno poboljšati objašnjenje prodaje pojedinih proizvoda i kategorija, ali učinak nije jednak za sve proizvode. <a href="https://www.sciencedirect.com/science/article/pii/S2949863524000013">Model mora otkriti gdje vrijeme stvarno nosi novu informaciju</a>.</p>
<p>Google Trends ima i tehničke zamke. Ne prikazuje apsolutan broj pretraga, nego uzorkovan i normaliziran interes na skali od 0 do 100. Niski volumeni mogu sadržavati vidljiv statistički šum. <a href="https://support.google.com/trends/answer/4365533?hl=en-GB">To navodi i Googleova dokumentacija</a>.</p>
<p>Signal zato mora pobijediti jednostavan model na budućem razdoblju. Ako to ne može, izbacujemo ga. Bez sentimentalnosti.</p>
<h2>Kako pronaći signal koji pada prvi</h2>
<h3>1. Spoji podatke po proizvodu, vremenu i tržištu</h3>
<p>Za svaki SKU ili kategoriju poveži prodaju, cijenu, popust, zalihu, preglede proizvoda, košarice, organska pretraživanja, kampanje i vanjske signale. Dnevna prodaja u Zagrebu nema mnogo koristi od vijesti ili vremena za drugo tržište.</p>
<h3>2. Napravi dosadan benchmark</h3>
<p>Povijesna prodaja, kalendar, cijena, promocije i nekoliko vremenskih pomaka sasvim su dobar početak. Novi signal mora dokazati da donosi informaciju koju taj model već nema.</p>
<h3>3. Testiraj što se događa prije prodaje</h3>
<p>Padaju li pretrage 7 ili 14 dana prije kupnji? Usporavaju li pregledi proizvoda prije konverzija? Najavljuje li vremenska prognoza promjenu dovoljno rano za nabavu?</p>
<p>Korelacija istog dana možda stiže prekasno. Tražimo prednost u vremenu.</p>
<h3>4. Ne puštaj budućnost u trening</h3>
<p>Ako 1. rujna donosimo odluku za sljedeća dva tjedna, model ne smije vidjeti stvarno vrijeme zabilježeno 10. rujna. Tada je postojala samo vremenska prognoza.</p>
<p>Isto vrijedi za naknadno ažurirane CRM statuse, SEO podatke i stanje zalihe. Sve ostalo nije predviđanje, nego putovanje kroz vrijeme u Excelu.</p>
<h3>5. Provjeri signal na sljedećoj sezoni</h3>
<p>Model treniramo na ranijim razdobljima i testiramo na kasnijima. Nasumično miješanje redaka može pustiti budućnost u trening i proizvesti sjajan rezultat koji u stvarnom svijetu ne postoji.</p>
<h2>Nulta prodaja nije dokaz da je potražnja umrla</h2>
<p>Proizvod možda nije prodan zato što ga nije bilo na zalihi, nestao je iz rezultata pretraživanja, cijena je porasla ili je kampanja zaustavljena.</p>
<p>Trgovac ne može prodati više nego što ima. Zabilježena prodaja zato može biti samo cenzurirana verzija stvarne potražnje.</p>
<p>Istraživanja problema izgubljene prodaje pokazuju upravo to: tijekom stockouta ne vidimo kupce koji su htjeli kupiti, ali nisu mogli. Razvijeni su modeli koji istodobno procjenjuju skrivenu potražnju, učinak signala poput cijene i temperature te količinu narudžbe. <a href="https://www.sciencedirect.com/science/article/pii/S092552731300203X">International Journal of Production Economics</a></p>
<p>Ako ignoriramo zalihu, model može naučiti da sezona završava svaki put kada nama ponestane robe. To nije inteligencija. To je automatiziranje vlastitog propusta.</p>
<h2>Signal vrijedi tek kada promijeni odluku</h2>
<p>“Google Trends korelira s prodajom 0,73” dobro izgleda u prezentaciji, ali ne govori skladištu što treba napraviti.</p>
<p>Koristan rezultat izgleda ovako:</p>
<blockquote><p>Kada indeks pretraživanja padne više od 25% tijekom dva uzastopna tjedna, uz stabilnu cijenu i dostupnost, prodaja u sljedećih 14 dana pada ispod razine koja opravdava novu narudžbu.</p></blockquote>
<p>Sada imamo signal, vremenski horizont i odluku.</p>
<p>Model treba testirati kroz stvarni trošak: izgubljenu prodaju, neprodanu zalihu, skladištenje, popuste i maržu. Istraživanja prognoziranja usmjerenog na poslovne metrike pokazuju da optimiziranje stvarnog troškovnog kompromisa može dati bolje odluke od lova na generičku statističku metriku. <a href="https://arxiv.org/abs/2308.13118">Business Metric-Aware Forecasting for Inventory Management</a></p>
<p>Najbolji model nije nužno onaj koji najpreciznije pogađa svaki dan. Najbolji je onaj koji dovoljno rano spriječi pogrešnu narudžbu.</p>
<h2>Pravi proizvod nije forecast. Pravi proizvod je radar.</h2>
<p>Koristan sustav ne izbacuje samo novu decimalu na dashboard. On upozorava:</p>
<blockquote><p>Interes za prijenosne ventilatore pada drugi tjedan zaredom. Procijenjena preostala prodaja iznosi između 620 i 780 komada. Trenutačna zaliha je 710. Nova narudžba nije preporučena.</p></blockquote>
<p>To više nije samo prognoza. To je radar za trenutak kada proizvod iz “još se prodaje” prelazi u “uskoro ćemo ga gurati popustom”.</p>
<p>Ne pitamo najglasniju osobu što misli da zaustavlja prodaju. Ne ubacujemo pedeset signala u model i slavimo onaj koji slučajno izgleda najljepše.</p>
<p>Spajamo podatke, gradimo jednostavan benchmark, provjeravamo što pada prije prodaje i mjerimo je li upozorenje donijelo bolju odluku.</p>
<p>Kada pad prodaje postane očit, možda je već prekasno.</p>
<p>Zato ne predviđaj samo prodaju.</p>
<blockquote><p>Pronađi signal koji pada prvi.</p></blockquote>
<h2>Izvori i provjera</h2>
<ul><li><a href="https://research.google/blog/predicting-the-present-with-google-trends/">Google Research — Predicting the Present with Google Trends</a></li><li><a href="https://research.uni-hannover.de/en/publications/can-google-trends-improve-sales-forecasts-on-a-product-level/">Fritzsch i sur. — Can Google Trends improve sales forecasts on a product level?</a></li><li><a href="https://www.sciencedirect.com/science/article/pii/S0169207018300505">Schaer, Kourentzes i Fildes — Demand forecasting with user-generated online information</a></li><li><a href="https://www.sciencedirect.com/science/article/pii/S2949863524000013">A machine learning framework for predicting weather impact on retail sales</a></li><li><a href="https://support.google.com/trends/answer/4365533?hl=en-GB">Google Trends — FAQ about Google Trends data</a></li><li><a href="https://www.sciencedirect.com/science/article/pii/S092552731300203X">Sachs i Minner — The data-driven newsvendor with censored demand observations</a></li><li><a href="https://arxiv.org/abs/2308.13118">Business Metric-Aware Forecasting for Inventory Management</a></li></ul>]]></content:encoded>
</item>
<item>
<title>Može li AI predvidjeti tko će otkazati članstvo u teretani?</title>
<link>https://www.peremin.com/moze-li-ai-predvidjeti-otkazivanje-clanstva-u-teretani/</link>
<guid isPermaLink="true">https://www.peremin.com/moze-li-ai-predvidjeti-otkazivanje-clanstva-u-teretani/</guid>
<pubDate>Wed, 01 Jul 2026 00:00:00 +0000</pubDate>
<description>Napravio sam churn model na 12.000 sintetičkih članova teretane. Evo što stvarno može predvidjeti, gdje vara i zašto visok rizik još nije retention strategija.</description>
<content:encoded><![CDATA[<p>Teretana može svaki mjesec dovesti 100 novih članova, otvoriti šampanjac zbog odlične kampanje i svejedno stajati na mjestu.</p>
<p>Zašto? Zato što na druga vrata možda izađe njih 95.</p>
<p>To je ona neugodna growth matematika koju nitko ne stavlja na Instagram. Akvizicija izgleda seksi. Retention izgleda kao Excel koji je netko zaboravio zatvoriti. Zato se budžeti često troše na nove leadove dok postojeći članovi tiho nestaju iz evidencije dolazaka, a zatim i iz prihoda.</p>
<p>Pa sam odlučio testirati jednostavno pitanje:</p>
<blockquote><p>Možemo li iz ponašanja člana prepoznati da će u sljedećih 30 dana otkazati članstvo?</p></blockquote>
<p>Ne pomoću kristalne kugle, motivacijskog gurua ni AI agenta s LinkedIna. Pomoću podataka koje bi normalna teretana već mogla imati: dolasci, rezervacije, onboarding, korištenje aplikacije i plaćanja.</p>
<p>Rezultat je zanimljiv. Ali nije zanimljiv na način na koji ga prodaju AI prezentacije.</p>
<h2>Teretana nema samo problem s leadovima. Ima probušenu kantu</h2>
<p>Churn je odlazak korisnika iz pretplatničkog poslovanja. Kod teretane to na prvu izgleda jednostavno: član je otkazao članarinu i više ne plaća.</p>
<p>U stvarnosti postoji nekoliko različitih stanja:</p>
<ul><li><p>član je službeno otkazao</p></li><li><p>članarina je istekla i nije obnovljena</p></li><li><p>naplata nije prošla</p></li><li><p>član još plaća, ali već tjednima ne dolazi</p></li><li><p>član je zamrznuo članstvo</p></li><li><p>član se preselio, ozlijedio ili promijenio životni ritam</p></li></ul>
<p>Ako sve to strpaš u jednu kolonu <code>churn = da/ne</code>, model će nešto izračunati. Računalo je vrlo uslužno na taj način. Neće ti reći da si poslovni problem definirao kao krumpir.</p>
<p>U ovom eksperimentu churn znači samo jedno:</p>
<p><strong>Član će otkazati ili neće obnoviti članstvo u sljedećih 30 dana.</strong></p>
<p>To je ista poslovna logika koju je koristio <a href="https://www.wsdm-conference.org/2018/call-for-participants.html">WSDM Cup 2018 KKBox Churn Prediction Challenge</a>. Tamo su natjecatelji predviđali hoće li korisnik obnoviti glazbenu pretplatu unutar 30 dana nakon isteka. Natjecanje je trajalo od rujna do prosinca 2017., a problem i podaci kasnije su opisani u <a href="https://doi.org/10.1145/3159652.3160605">WSDM radu o preporukama i churnu</a>.</p>
<p>Glazbeni streaming nije teretana. Ali pretplatnička matematika ima isti neugodan refren: dovesti korisnika nije dovoljno ako ga ne znaš zadržati.</p>
<h2>Zašto sam koristio sintetičke podatke</h2>
<p>Nisam imao legalno dostupan dataset s poviješću dolazaka, naplate i otkazivanja stvarnih članova hrvatske teretane.</p>
<p>Mogao sam skinuti prvi sumnjivi CSV s interneta, ne pitati odakle je došao i ponašati se kao da sam otkrio penicilin. Nisam.</p>
<p>Napravio sam <strong>12.000 sintetičkih mjesečnih snapshotova članova</strong>. Svaki red predstavlja stanje jednog anonimnog člana u određenom mjesecu. Nema stvarnih imena, e-mailova, zdravstvenih podataka ni ljudi koji su se slučajno našli u nečijem exportu.</p>
<p>Generator je namjerno ugradio razumne odnose:</p>
<ul><li><p>dulja neaktivnost povećava rizik</p></li><li><p>pad broja dolazaka povećava rizik</p></li><li><p>neuspjela plaćanja povećavaju rizik</p></li><li><p>česta otkazivanja rezervacija povećavaju rizik</p></li><li><p>odrađen onboarding smanjuje rizik</p></li><li><p>treninzi s trenerom i referral signal smanjuju rizik</p></li></ul>
<p>To ne znači da su ti odnosi jednaki u svakoj stvarnoj teretani. Znači samo da imamo kontrolirani poligon na kojem možemo provjeriti pipeline bez prodavanja tuđe privatnosti za jedan blog post.</p>
<p>Istraživanja daju razuman kontekst za takvu simulaciju. Longitudinalna studija novih članova 25 fitness centara pratila je dolaske i dropout kroz 3 i 12 mjeseci te navodi da se u ranijoj literaturi procjenjuje kako 40%–65% ljudi koji započnu vježbati odustane u prvih 3–6 mjeseci. Važna sitnica: <strong>exercise dropout nije isto što i otkazivanje plaćene članarine</strong>. Ta razlika je upravo razlog zašto ne treba lijepiti dramatične fitness statistike na financijski churn bez čitanja fusnota. <a href="https://pmc.ncbi.nlm.nih.gov/articles/PMC6500212/">Studija je javno dostupna u PMC-u</a>.</p>
<h3>Što se nalazi u datasetu</h3>
<table><thead><tr><th>Skup podataka</th><th>Primjeri varijabli</th></tr></thead><tbody><tr><td>Članstvo</td><td>trajanje članstva, tip plana, mjesečna cijena</td></tr><tr><td>Aktivnost</td><td>dolasci zadnjih 30 dana, dolasci mjesec ranije, promjena dolazaka</td></tr><tr><td>Neaktivnost</td><td>broj dana od posljednjeg dolaska</td></tr><tr><td>Engagement</td><td>korištenje aplikacije, rezervacije i otkazivanja termina</td></tr><tr><td>Odnos s teretanom</td><td>onboarding, treninzi s trenerom, referral</td></tr><tr><td>Operativa</td><td>problemi s naplatom i zahtjevi prema podršci</td></tr><tr><td>Cilj</td><td>otkazivanje u sljedećih 30 dana</td></tr></tbody></table>
<p>Dataset ima dvije godine mjesečnih snapshotova, od siječnja 2024. do prosinca 2025. Ukupna sintetička churn stopa iznosi <strong>4,44%</strong>, a u testnom razdoblju <strong>4,45%</strong>.</p>
<p>Sve možeš provjeriti, skinuti i rastaviti:</p>
<blockquote><p><a href="https://www.peremin.com/downloads/gym-churn-prediction/gym_churn_prediction.ipynb">Preuzmi izvršeni Python notebook</a></p>
<p><a href="https://www.peremin.com/downloads/gym-churn-prediction/gym_members_churn_synthetic.csv">Preuzmi sintetički CSV s 12.000 redaka</a></p>
<p><a href="https://www.peremin.com/downloads/gym-churn-prediction/results.json">Preuzmi rezultate u JSON formatu</a></p></blockquote>
<p>Kod koji generira podatke i notebook nalazi se i u javnom <a href="https://github.com/Nimerep/site">Nimerep/site repozitoriju</a>. Ako dobiješ drugačiji rezultat s istim seedom, nešto se raspalo — i to je korisnija informacija od još jednog savršenog screenshot grafa.</p>
<h2>Kako sam namjerno izbjegao varanje</h2>
<p>Kod churn modela vrlo je lako slučajno gledati u budućnost.</p>
<p>Ako u featuree ubaciš datum otkazivanja, konačni status članarine ili transakciju koja se dogodila nakon trenutka predviđanja, model će izgledati kao genij. U stvarnosti si mu dao odgovor na ispitu.</p>
<p>Zato sam napravio vremenski split:</p>
<ul><li><p><strong>9.976 redaka</strong> do kolovoza 2025. koristi se za trening</p></li><li><p><strong>2.024 retka</strong> od rujna do prosinca 2025. koristi se za test</p></li></ul>
<p>Nema random miješanja prošlosti i budućnosti. Model u testu vidi samo informacije koje bi bile dostupne u trenutku kada se odluka stvarno mora donijeti.</p>
<p>Također nisam ubacio:</p>
<ul><li><p>datum budućeg otkazivanja</p></li><li><p>konačni status ugovora</p></li><li><p>buduće naplate</p></li><li><p>razlog odlaska zapisan nakon odlaska</p></li><li><p>zdravstvene podatke</p></li></ul>
<p>To bi trebalo biti očito. U churn projektima često nije.</p>
<h2>Prije AI-ja: pravilo od 14 dana</h2>
<p>Prije modela postavio sam glupo jednostavan baseline:</p>
<blockquote><p>Ako član nije došao 14 ili više dana, označi ga kao rizičnog.</p></blockquote>
<p>Nema strojnog učenja. Nema GPU-a. Nema konzultanta koji izgovara “digital transformation” dok traži HDMI adapter.</p>
<p>Pravilo je na testnim podacima imalo:</p>
<ul><li><p>precision <strong>17,1%</strong></p></li><li><p>recall <strong>64,4%</strong></p></li><li><p>ROC-AUC <strong>0,749</strong></p></li></ul>
<p>Drugim riječima, pravilo uhvati dosta budućih odlazaka, ali istodobno označi mnogo ljudi koji neće otići. To nije katastrofa. To je sasvim pristojan operativni početak koji se može složiti u gotovo svakom CRM-u.</p>
<p>Ako tvoj ML model ne može pobijediti razumno poslovno pravilo, ne treba ti bolji model. Treba ti hrabrost da ugasiš projekt.</p>
<h2>Dva modela. Jer zoološki vrt algoritama nikome ne pomaže</h2>
<p>Testirao sam:</p>
<ol><li><p>logističku regresiju</p></li><li><p>random forest</p></li></ol>
<p>Logistička regresija je namjerno uključena. Objašnjiva je, brza i dosadna. To su često odlične osobine za model koji treba završiti u stvarnom poslovnom procesu.</p>
<p>Random forest je fleksibilniji i može uhvatiti nelinearne odnose. Ali “kompleksniji” nije poslovni KPI.</p>
<p><img src="https://www.peremin.com/media/posts/16/model-comparison.webp" alt="Usporedba churn modela"></p>
<table><thead><tr><th>Model</th><th style="text-align:right">ROC-AUC</th><th style="text-align:right">PR-AUC</th><th style="text-align:right">Precision u top 10%</th><th style="text-align:right">Recall u top 10%</th></tr></thead><tbody><tr><td>Logistička regresija</td><td style="text-align:right">0,863</td><td style="text-align:right">0,431</td><td style="text-align:right"><strong>26,2%</strong></td><td style="text-align:right"><strong>58,9%</strong></td></tr><tr><td>Random forest</td><td style="text-align:right">0,852</td><td style="text-align:right">0,359</td><td style="text-align:right">24,8%</td><td style="text-align:right">55,6%</td></tr><tr><td>Pravilo: nema dolaska 14+ dana</td><td style="text-align:right">0,749</td><td style="text-align:right">0,126</td><td style="text-align:right">17,1%*</td><td style="text-align:right">64,4%*</td></tr></tbody></table>
<p>* Kod poslovnog pravila prikazani su precision i recall svih članova koje je pravilo označilo, a ne fiksnog top-decile segmenta.</p>
<p>Logistička regresija je pobijedila.</p>
<p>Nije spektakularno. Nije Transformer. Ne traži podatkovni centar veličine manjeg hrvatskog grada. Samo je bolje rangirala članove prema riziku.</p>
<h2>Accuracy je ovdje ukras za lošu prezentaciju</h2>
<p>U testnom setu churn je 4,45%.</p>
<p>Model koji svakome kaže “ostat će” imao bi accuracy od 95,55%. Bio bi potpuno beskoristan, ali bi na slajdu izgledao odlično.</p>
<p>Zato sam gledao:</p>
<ul><li><p><strong>ROC-AUC:</strong> koliko dobro model općenito razdvaja churnere od ostalih</p></li><li><p><strong>PR-AUC:</strong> koliko dobro radi kada je pozitivna klasa rijetka</p></li><li><p><strong>precision u top 10%:</strong> koliko je stvarnih budućih churnera među članovima koje možemo kontaktirati</p></li><li><p><strong>recall u top 10%:</strong> koliki dio svih budućih churnera nalazimo u toj maloj grupi</p></li></ul>
<p>Teretana ne može svaki mjesec zvati sve članove. Može kontaktirati, primjerice, 10% najrizičnijih. Zato je precision u toj grupi operativno razumljiviji od jednog velikog postotka koji ništa ne pokreće.</p>
<p>U našem testu najrizičnijih 10% sadrži <strong>26,2% stvarnih budućih churnera</strong>.</p>
<p>Bazna churn stopa je 4,45%. To znači da model u toj ciljanoj grupi koncentrira budući churn oko <strong>5,9 puta</strong> bolje od nasumičnog odabira. Ujedno u tih 10% članova pronalazi 58,9% svih budućih odlazaka.</p>
<p>To je koristan ranking. Još uvijek nije retention strategija.</p>
<h2>Risk decili pokazuju radi li model ili samo lijepo govori</h2>
<p>Članove sam podijelio u deset grupa prema predviđenom riziku. Prvi decil ima najniži rizik, deseti najviši.</p>
<p><img src="https://www.peremin.com/media/posts/16/risk-deciles.webp" alt="Churn stopa kroz risk decile"></p>
<p>Ako se stvarna churn stopa ne povećava prema višim decilima, model nema stabilan ranking. Može imati finu metriku, ali neće dati dobru listu prioriteta.</p>
<p>Ovdje je rast jasan. Najrizičniji decil zaista sadrži znatno više budućih odlazaka.</p>
<p>To je ono što voditelj retentiona treba: ne još jedan dashboard, nego sortiranu listu na kojoj prvih 50 ljudi stvarno zaslužuje pažnju.</p>
<h2>Što je model prepoznao</h2>
<p>Najjači pozitivni signali rizika bili su:</p>
<ul><li><p>više dana od posljednjeg dolaska</p></li><li><p>pad broja posjeta u odnosu na prethodni mjesec</p></li><li><p>neuspjela plaćanja</p></li><li><p>otkazivanje rezerviranih termina</p></li><li><p>vrlo kratko trajanje članstva</p></li></ul>
<p>Zaštitni signali bili su:</p>
<ul><li><p>odrađen onboarding</p></li><li><p>aktivnost u aplikaciji</p></li><li><p>stabilni dolasci</p></li><li><p>treninzi s osobnim trenerom</p></li><li><p>doveden prijatelj</p></li></ul>
<p><img src="https://www.peremin.com/media/posts/16/top-signals.webp" alt="Najjači churn signali"></p>
<p>Ovo nisu kauzalne istine. Koeficijent ne znači da će slanje čovjeka na onboarding automatski poništiti churn. Znači da je u našem generatoru i modelu taj signal povezan s manjim rizikom kada ostale varijable držimo pod kontrolom.</p>
<p>U stvarnom datasetu rezultat može biti drugačiji. Možda problem nije onboarding nego parking. Možda trener odlazi. Možda je klima pokvarena treći tjedan. Model ne živi u teretani; on vidi samo kolone koje mu pošalješ.</p>
<h2>Pad dolazaka je signal. Nije dijagnoza</h2>
<p><img src="https://www.peremin.com/media/posts/16/attendance-drop.webp" alt="Prosječan pad dolazaka prije churn-a"></p>
<p>Članovi koji će otkazati u sintetičkim podacima u prosjeku pokazuju pad dolazaka. To ima intuitivnog smisla i poklapa se s idejom da ponašanje često oslabi prije formalnog odlaska.</p>
<p>Ali isti signal može značiti:</p>
<ul><li><p>godišnji odmor</p></li><li><p>bolest ili ozljedu</p></li><li><p>promjenu radnog vremena</p></li><li><p>trudnoću</p></li><li><p>selidbu</p></li><li><p>trening na drugoj lokaciji</p></li><li><p>jednostavno loš mjesec</p></li></ul>
<p>Zato retention poruka ne bi trebala glasiti:</p>
<blockquote><p>Naš algoritam je zaključio da ćete nas napustiti. Evo 15% popusta.</p></blockquote>
<p>To je marketinški ekvivalent tipa koji te prati po trgovini i šapće da zna što želiš.</p>
<p>Bolja intervencija može biti obična, ljudska i nenametljiva:</p>
<blockquote><p>Nismo te vidjeli neko vrijeme. Je li se promijenio termin koji ti odgovara ili ti možemo pomoći prilagoditi plan?</p></blockquote>
<p>Model prioritizira razgovor. Ne vodi ga.</p>
<h2>Najvažniji problem: churn risk nije isto što i mogućnost spašavanja</h2>
<p>Ovo je dio koji se zgodno izgubi u prodajnoj prezentaciji.</p>
<p>Churn model odgovara na pitanje:</p>
<p><strong>Tko će vjerojatno otići?</strong></p>
<p>Retention tim zapravo treba odgovor na drugo pitanje:</p>
<p><strong>Kod koga će naša intervencija promijeniti odluku?</strong></p>
<p>To nisu isti ljudi.</p>
<p>Netko ima visok rizik jer se preselio 300 kilometara dalje. Možeš mu poslati personaliziranu poruku, proteinsku pločicu i fotografiju cijelog tima. I dalje se neće voziti tri sata na leg day.</p>
<p>Druga osoba možda ima srednji rizik, ali bi ostala kada bi dobila novi termin grupnog treninga ili kratak razgovor s trenerom.</p>
<p>Randomizirani terenski eksperiment s tjednim e-mail podsjetnicima pokazao je upravo zašto treba razlikovati aktivnost od poslovnog ishoda: podsjetnici su povećali tjednu učestalost vježbanja za 13%, ali istraživači nisu pronašli učinak na trajanje ili obnovu članstva. <a href="https://link.springer.com/article/10.1007/s10683-020-09693-5">Rezultati su objavljeni u časopisu Experimental Economics</a>.</p>
<p>Više dolazaka zvuči dobro. Ali nije automatski isto što i više obnove.</p>
<p>Za procjenu inkrementalnog učinka treba:</p>
<ol><li><p>odabrati rizične članove</p></li><li><p>nasumično dio staviti u treatment, a dio u holdout grupu</p></li><li><p>provesti istu intervenciju</p></li><li><p>mjeriti razliku u obnovi članstva</p></li><li><p>tek nakon toga graditi uplift model</p></li></ol>
<p>Uplift modeliranje pokušava pronaći ljude kod kojih će intervencija uzrokovati promjenu, a ne samo ljude s visokim rizikom. Javni churn benchmark za takve modele opisan je u radu <a href="https://arxiv.org/abs/2312.07206">A churn prediction dataset from the telecom sector: a new benchmark for uplift modeling</a>.</p>
<p>Drugim riječima:</p>
<blockquote><p>Predikcija govori gdje gori. Eksperiment govori pomaže li tvoj aparat za gašenje.</p></blockquote>
<h2>Koliko bi ovakav model mogao vrijediti</h2>
<p>Napravimo scenarij za 1.000 aktivnih članova:</p>
<ul><li><p>kontaktiramo 10% najrizičnijih, odnosno 100 ljudi</p></li><li><p>precision modela u toj grupi je 26,2%</p></li><li><p>očekujemo oko 26 stvarnih budućih churnera</p></li><li><p>pretpostavimo da intervencija spasi 20% njih</p></li><li><p>to je oko 5,2 spašena člana</p></li><li><p>mjesečna contribution marža je 33 €</p></li><li><p>prosječno dodatno zadržavanje traje 6 mjeseci</p></li><li><p>intervencija košta 8 € po kontaktiranom članu</p></li></ul>
<p>Rezultat:</p>
<table><thead><tr><th>Stavka</th><th style="text-align:right">Procjena</th></tr></thead><tbody><tr><td>Bruto vrijednost zadržavanja</td><td style="text-align:right">oko 1.039 €</td></tr><tr><td>Trošak intervencije</td><td style="text-align:right">800 €</td></tr><tr><td>Neto vrijednost prije fiksnih troškova</td><td style="text-align:right">oko 239 €</td></tr></tbody></table>
<p>Je li to dobar posao? Možda.</p>
<p>Broj ovisi o najvažnijoj pretpostavci: <strong>spašava li intervencija stvarno 20% rizičnih članova?</strong></p>
<p>Model to nije dokazao. Tu brojku sam postavio za scenarij. Bez holdout grupe ne znaš jesi li spasio člana ili dao popust osobi koja bi ionako ostala.</p>
<p>Upravo zato retention kampanje često izgledaju uspješno dok potajno pale novac. Ljudi koji prime ponudu ostanu, dashboard se zazeleni, svi se čestitaju — a nitko ne zna koliko bi ih ostalo bez ponude.</p>
<h2>Kako bih ovo pustio u stvarnu teretanu</h2>
<p>Ne bih prvi dan spojio model na automatizirani sustav za popuste. Nisam toliko hrabar, a ni toliko lud.</p>
<p>Krenuo bih u četiri koraka.</p>
<h3>1. Definicija churn-a</h3>
<p>Dogovoriti razliku između:</p>
<ul><li><p>dobrovoljnog otkazivanja</p></li><li><p>isteka bez obnove</p></li><li><p>payment failurea</p></li><li><p>zamrznutog članstva</p></li><li><p>neaktivnosti bez otkazivanja</p></li></ul>
<p>Ako financije, prodaja i marketing koriste tri definicije churn-a, model je najmanji problem u zgradi.</p>
<h3>2. Jedan mjesečni member snapshot</h3>
<p>Za svakog člana spremiti samo podatke dostupne na datum scoriranja. Ne prepisivati konačno stanje iz CRM-a unatrag.</p>
<p>Minimalan dataset:</p>
<ul><li><p><code>member_id</code></p></li><li><p><code>snapshot_date</code></p></li><li><p><code>tenure_months</code></p></li><li><p><code>visits_30d</code></p></li><li><p><code>visits_prev_30d</code></p></li><li><p><code>days_since_last_visit</code></p></li><li><p><code>classes_cancelled_30d</code></p></li><li><p><code>onboarding_completed</code></p></li><li><p><code>payment_failures_90d</code></p></li><li><p><code>churn_next_30d</code></p></li></ul>
<p>Ne treba ti data lake. Treba ti tablica kojoj vjeruješ.</p>
<h3>3. Baseline prije modela</h3>
<p>Testirati pravilo neaktivnosti od 14 dana i možda kombinaciju:</p>
<pre><code class="language-text"><span class="tok-number">14</span><span class="tok-operator">+</span> dana bez dolaska
<span class="tok-type">ILI</span> pad posjeta veći od <span class="tok-number">50</span><span class="tok-operator">%</span>
<span class="tok-type">ILI</span> neuspjela naplata</code></pre>
<p>Ako ta pravila rade dovoljno dobro za kapacitet retention tima, možda je to rješenje za prvu fazu.</p>
<h3>4. Randomizirani retention test</h3>
<p>Najrizičnije članove podijeliti na:</p>
<ul><li><p>kontrolnu grupu bez nove intervencije</p></li><li><p>ljudsku check-in poruku</p></li><li><p>razgovor s trenerom</p></li><li><p>prilagodbu termina ili plana</p></li></ul>
<p>Popust bih testirao zasebno. Popust je najlakši način da naučiš kupca čekati popust.</p>
<h2>Privatnost: ne treba ti krvna grupa za churn model</h2>
<p>Fitness podaci mogu vrlo brzo postati osjetljivi.</p>
<p>Za ovaj problem najčešće ti ne trebaju:</p>
<ul><li><p>dijagnoze</p></li><li><p>ozljede</p></li><li><p>tjelesna masa</p></li><li><p>fotografije</p></li><li><p>detaljni podaci sa smart watcha</p></li><li><p>precizna lokacija izvan teretane</p></li></ul>
<p>Za početak su dovoljni operativni podaci o članstvu i korištenju usluge.</p>
<p>U stvarnom projektu provjerio bih:</p>
<ul><li><p>pravnu osnovu obrade</p></li><li><p>svrhu i minimalni opseg podataka</p></li><li><p>rok čuvanja member snapshotova</p></li><li><p>pristup individualnim risk scoreovima</p></li><li><p>mogućnost prigovora na automatizirano profiliranje</p></li><li><p>koristi li se rezultat za pomoć članu ili agresivno cjenovno razlikovanje</p></li></ul>
<p>GDPR problem ne nestaje zato što si stupac nazvao <code>feature_17</code>.</p>
<h2>Što ovaj eksperiment dokazuje</h2>
<p>Dokazuje da:</p>
<ul><li><p>churn problem možemo prevesti u jasan prediction window</p></li><li><p>jednostavan vremenski pipeline može rangirati rizične članove</p></li><li><p>logistička regresija može pobijediti složeniji model</p></li><li><p>top-decile precision daje operativno razumljiv rezultat</p></li><li><p>sintetički podaci mogu poslužiti za razvoj i provjeru procesa</p></li><li><p>churn score možemo prevesti u retention eksperiment i poslovni scenarij</p></li></ul>
<h2>Što ovaj eksperiment ne dokazuje</h2>
<p>Ne dokazuje da:</p>
<ul><li><p>model radi na stvarnoj hrvatskoj teretani</p></li><li><p>prikazani signali uzrokuju churn</p></li><li><p>kontaktiranje rizičnih članova smanjuje churn</p></li><li><p>popust donosi inkrementalnu vrijednost</p></li><li><p>sintetička stopa predstavlja industrijski benchmark</p></li><li><p>AI zna zašto je konkretna osoba prestala dolaziti</p></li></ul>
<p>Ovaj popis nije pravno pokriće sitnim slovima. To je pola kredibiliteta cijelog projekta.</p>
<h2>Zaključak: model nije retention strategija</h2>
<p>Da, model može pomoći teretani prepoznati članove koji pokazuju obrasce odlaska.</p>
<p>U ovom eksperimentu najrizičnijih 10% članova sadrži gotovo šest puta veću koncentraciju budućeg churn-a od prosjeka. To je dovoljno dobro da pametnije rasporedimo ograničeno vrijeme retention tima.</p>
<p>Ali model ne zna:</p>
<ul><li><p>tko se može spasiti</p></li><li><p>koja će poruka pomoći</p></li><li><p>hoće li popust stvoriti vrijednost</p></li><li><p>je li problem u cijeni, treneru, parkingu ili životu člana</p></li></ul>
<p>To otkriva eksperiment.</p>
<p>Najbolji retention sustav zato nije automat koji dijeli kupone svima s crvenim scoreom. To je kombinacija dobrog podatkovnog signala, ljudske intervencije i poštenog mjerenja inkrementalnog učinka.</p>
<p>AI ti može reći kome prvo pokucati na vrata.</p>
<p>Još uvijek moraš znati razgovarati kada ih otvori.</p>]]></content:encoded>
</item>
<item>
<title>GDPR za web shop: Napredna checklista za Hrvatsku</title>
<link>https://www.peremin.com/gdpr-checklista-za-e-commerce-bez-gluposti-samo-ono-sto-ti-zapravo-treba/</link>
<guid isPermaLink="true">https://www.peremin.com/gdpr-checklista-za-e-commerce-bez-gluposti-samo-ono-sto-ti-zapravo-treba/</guid>
<pubDate>Thu, 18 Jun 2026 00:00:00 +0000</pubDate>
<description>GDPR vodič za hrvatske web shopove prema GDPR-u, AZOP-u, ZEK-u te zakonima o zaštiti potrošača, radu i zaštiti na radu.</description>
<content:encoded><![CDATA[<p>Ako vodiš webshop, obrađuješ osobne podatke.</p>
<p>Ime, adresa, e-mail, broj telefona, IP adresa, sadržaj košarice, povijest kupnji, reklamacije, klikovi, uređaj, lokacija, newsletter i remarketing publike — sve su to podaci koji mogu biti povezani s konkretnom osobom.</p>
<p>A ako obrađuješ osobne podatke, GDPR nije dokument koji jednom spremiš u footer i više ga nikada ne otvoriš.</p>
<p>To je sustav pravila, procedura i tehničkih kontrola.</p>
<p>Cookie banner sam po sebi ne znači da si usklađen. Politika privatnosti generirana u tri minute ne znači da znaš gdje su podaci kupaca. Checkbox pored newslettera ne rješava podatke koje Meta Pixel možda već šalje prije privole.</p>
<p>Ovaj vodič zato ne završava na pitanju imaš li politiku privatnosti.</p>
<p>Pitanje je možeš li dokazati:</p>
<ul><li><p>koje podatke prikupljaš</p></li><li><p>zašto ih prikupljaš</p></li><li><p>gdje se nalaze</p></li><li><p>tko ih dobiva</p></li><li><p>koliko ih čuvaš</p></li><li><p>kako ih štitiš</p></li><li><p>kako ih brišeš</p></li><li><p>što radiš kada korisnik zatraži pristup</p></li><li><p>što radiš kada podaci završe kod osobe koja ih nije smjela dobiti</p></li></ul>
<blockquote><p>Ovaj članak služi kao praktičan operativni vodič. Nije zamjena za individualni pravni savjet, posebno kod složenog profiliranja, posebnih kategorija podataka, obrade dječjih podataka ili međunarodnih prijenosa.</p></blockquote>
<h2>Koji se propisi primjenjuju u Hrvatskoj?</h2>
<p>GDPR nije jedini propis koji hrvatski web shop treba otvoriti prije nego što napiše politiku, postavi kameru ili uključi newsletter automatizaciju. Ovaj vodič, ažuriran 18. srpnja 2026., oslanja se na sljedeći okvir:</p>
<table><thead><tr><th>Propis</th><th>Što uređuje</th><th>Posebno važni članci</th></tr></thead><tbody><tr><td><a href="https://eur-lex.europa.eu/eli/reg/2016/679/oj?locale=HR">Opća uredba o zaštiti podataka — GDPR</a></td><td>načela, pravne osnove, transparentnost, prava, sigurnost i nadzor</td><td>5., 6., 7., 12.–14., 15.–22., 25., 28., 30., 32.–35.</td></tr><tr><td><a href="https://narodne-novine.nn.hr/clanci/sluzbeni/2018_05_42_805.html">Zakon o provedbi Opće uredbe o zaštiti podataka, NN 42/18</a></td><td>ovlasti AZOP-a te hrvatska pravila za biometriju i videonadzor</td><td>22.–24. i 25.–31.</td></tr><tr><td><a href="https://narodne-novine.nn.hr/clanci/sluzbeni/full/2022_07_76_1116.html">Zakon o elektroničkim komunikacijama, NN 76/22, 14/24 i 45/26</a></td><td>kolačići i neželjene elektroničke komunikacije</td><td>43. stavak 4. i 50.</td></tr><tr><td><a href="https://narodne-novine.nn.hr/clanci/sluzbeni/2026_06_59_728.html">Zakon o zaštiti potrošača, NN 19/22, 59/23 i 59/26</a></td><td>obavijesti kupcu, prigovori i ugovori na daljinu</td><td>10., 60. i 79.</td></tr><tr><td><a href="https://narodne-novine.nn.hr/clanci/sluzbeni/2014_07_93_1872.html">Zakon o radu, NN 93/14, 127/17, 98/19 i 151/22</a></td><td>privatnost i osobni podaci radnika</td><td>29.</td></tr><tr><td><a href="https://narodne-novine.nn.hr/clanci/sluzbeni/2014_06_71_1334.html">Zakon o zaštiti na radu, NN 71/14 s izmjenama</a></td><td>nadzorni uređaji kao sredstvo zaštite na radu</td><td>43.</td></tr></tbody></table>
<p>To nisu sinonimi. GDPR uređuje obradu osobnih podataka. Zakon o zaštiti potrošača uređuje odnos trgovca i kupca. Zakon o radu i Zakon o zaštiti na radu dodaju posebna pravila kada obrađuješ podatke zaposlenika. Jedan footer link ne rješava pet propisa. Bio bi to impresivan link, ali ipak samo link.</p>
<h2>Koliko GDPR pogreška stvarno košta?</h2>
<p>Kazna nije automatska za svaki propust, a njezina visina ovisi o nizu okolnosti: težini i trajanju povrede, broju pogođenih osoba, vrsti podataka, suradnji s nadzornim tijelom, ranijim povredama i prometu poduzetnika.</p>
<p>Ali kazne nisu teorija. Evo nekoliko konkretnih odluka i lekcija koje su relevantne za digitalno poslovanje.</p>
<h3>Hrvatska: 20.000 i 30.000 eura zbog kolačića bez pravne osnove</h3>
<p>AZOP je dvama trgovačkim društvima za kockanje i klađenje izrekao kazne od <strong>20.000 i 30.000 eura</strong>. Među utvrđenim povredama bila je obrada osobnih podataka putem kolačića bez dokazane pravne osnove.</p>
<p><strong>Lekcija za webshop:</strong> banner nije zaštita ako se tracking pokrene prije izbora korisnika ili ako ne možeš dokazati pravnu osnovu obrade. <a href="https://azop.hr/upravne-novcane-kazne-zbog-neovlastene-obrade-osobnih-podataka-putem-kolacica/">Odluka AZOP-a</a></p>
<h3>Hrvatska: 80.000 eura zbog korištenja podataka za drugu svrhu</h3>
<p>Trgovačko društvo koristilo je pristup podacima vlasnika vozila koji je dobilo za jednu svrhu kako bi podatke obrađivalo i za naplatu parkiranja drugih subjekata. AZOP je utvrdio probleme s pravnom osnovom, ograničenjem svrhe, odnosom voditelja i izvršitelja te sigurnosnim mjerama. Izrečena je kazna od <strong>80.000 eura</strong>.</p>
<p><strong>Lekcija za webshop:</strong> podatak koji već posjeduješ ne smiješ automatski koristiti za novu svrhu. Pristup podacima, svrha i ugovorne uloge moraju biti stvarno uređeni. <a href="https://azop.hr/sedam-novih-upravnih-novcanih-kazni-u-iznosu-od-169-000-eura/">Objava AZOP-a</a></p>
<h3>Hrvatska: 380.000 eura zbog preslika bankovnih kartica</h3>
<p>Sportskoj kladionici izrečena je kazna od <strong>380.000 eura</strong> zbog obrade preslika bankovnih kartica bez dokazane pravne osnove, nedovoljne transparentnosti te neodgovarajuće primjene zaštite podataka već pri dizajnu novog procesa brze isplate.</p>
<p><strong>Lekcija za webshop:</strong> “trebat će nam možda kasnije” nije svrha obrade. Financijski podaci ne prikupljaju se zato što ih tehnički možeš zatražiti. Novi checkout ili payment proces mora proći privacy-by-design provjeru prije produkcije. <a href="https://azop.hr/sportskoj-kladionici-izrecena-upravna-novcana-kazna-od-380-000-eura/">Odluka AZOP-a</a></p>
<h3>Europska unija: 150.000 eura za netransparentan webshop</h3>
<p>Latvijsko nadzorno tijelo kaznilo je online trgovca s <strong>150.000 eura</strong>. Webshop korisniku prije narudžbe nije jasno predstavio identitet voditelja obrade, a politika privatnosti nije pravilno objašnjavala pravne osnove, svrhe i način prikupljanja privole.</p>
<p><strong>Lekcija za webshop:</strong> generička politika privatnosti nije dovoljna. Korisnik mora moći razumjeti tko obrađuje podatke, zašto i na kojoj osnovi prije nego što ih preda. <a href="https://www.edpb.europa.eu/sites/default/files/article-60-final-decisions/summary/publishable_lv_2020-01_transparency_and_information_summarypublic.pdf">Sažetak odluke EDPB-a</a></p>
<h3>Europska unija: 1,2 milijarde eura zbog prijenosa podataka u SAD</h3>
<p>Irsko nadzorno tijelo izreklo je Meta Platforms Ireland kaznu od <strong>1,2 milijarde eura</strong> zbog nastavka prijenosa osobnih podataka iz EU/EGP-a u SAD bez zaštitnih mjera koje bi riješile utvrđene rizike za prava ispitanika.</p>
<p><strong>Lekcija za webshop:</strong> potpisani SCC nije čarobni papir. Moraš znati kamo dobavljač šalje podatke, tko im može pristupiti i jesu li ugovorne, tehničke i organizacijske mjere stvarno dovoljne. <a href="https://dataprotection.ie/en/dpc-guidance/decisions/inquiry-concerning-data-transfers-eueea-us-meta-platforms-ireland-limited-its-facebook-service">Odluka irskog DPC-a</a></p>
<p>Poanta nije da će mali webshop sutra dobiti milijardu eura kazne. Poanta je da se u odlukama stalno ponavljaju isti problemi: nejasna svrha, pogrešna pravna osnova, prekomjerno prikupljanje, loša transparentnost, nekontrolirani dobavljači i sigurnost koja postoji samo u politici.</p>
<h2>Brzi test: je li tvoj webshop u problemu?</h2>
<p>Odgovori s “da” ili “ne”:</p>
<ul><li><p>Pokreće li se Google Analytics prije nego što korisnik prihvati analitičke kolačiće?</p></li><li><p>Pokreće li se Meta Pixel prije marketinške privole?</p></li><li><p>Imaš li samo gumb “Prihvati”, bez jednako dostupnog odbijanja?</p></li><li><p>Je li marketinški checkbox unaprijed označen?</p></li><li><p>Mora li korisnik prihvatiti newsletter da bi završio kupnju?</p></li><li><p>Čuvaš li napuštene košarice bez definiranog roka?</p></li><li><p>Ne znaš koje podizvršitelje koriste CRM, hosting ili newsletter alat?</p></li><li><p>Ne znaš obrađuju li se podaci izvan Europskog gospodarskog prostora?</p></li><li><p>Svi administratori koriste isti korisnički račun?</p></li><li><p>Nemaš MFA za administraciju webshopa?</p></li><li><p>CSV datoteke s kupcima šalju se e-mailom?</p></li><li><p>Ne postoji evidencija zahtjeva za brisanje i pristup podacima?</p></li><li><p>Ne postoji interni registar sigurnosnih incidenata?</p></li><li><p>Koristiš AI chatbot s podacima narudžbi, ali to nije navedeno ni u jednoj evidenciji?</p></li></ul>
<p>Ako imaš više pozitivnih odgovora, problem nije samo tekst politike privatnosti. Problem je što nemaš potpunu kontrolu nad životnim ciklusom podataka.</p>
<h2>1. Napravi mapu podataka</h2>
<p>Prije pisanja politika moraš znati što se stvarno događa. Nemoj početi s dokumentom. Počni s tokom podataka.</p>
<table><thead><tr><th>Faza</th><th>Podaci</th><th>Svrha</th><th>Moguća pravna osnova</th><th>Primatelji</th></tr></thead><tbody><tr><td>Pregledavanje</td><td>IP, uređaj, sigurnosni logovi</td><td>sigurnost i dostupnost</td><td>legitimni interes</td><td>hosting, CDN, sigurnosni alat</td></tr><tr><td>Analitika</td><td>identifikatori, događaji, izvor dolaska</td><td>mjerenje korištenja</td><td>najčešće privola za nenužne tehnologije</td><td>analytics platforma</td></tr><tr><td>Košarica</td><td>session ID, odabrani proizvodi</td><td>spremanje košarice</td><td>ugovor ili radnje prije ugovora</td><td>eCommerce platforma</td></tr><tr><td>Checkout</td><td>ime, kontakt, adresa</td><td>obrada narudžbe</td><td>ugovor</td><td>ERP, dostavljač</td></tr><tr><td>Plaćanje</td><td>status i identifikator transakcije</td><td>naplata</td><td>ugovor i zakonske obveze</td><td>payment provider</td></tr><tr><td>Račun</td><td>identitet, iznos, porezni podaci</td><td>računovodstvo</td><td>zakonska obveza</td><td>računovodstvo</td></tr><tr><td>Podrška</td><td>poruke, reklamacije, narudžbe</td><td>rješavanje zahtjeva</td><td>ugovor, zakon ili legitimni interes</td><td>helpdesk</td></tr><tr><td>Newsletter</td><td>e-mail, status privole</td><td>izravni marketing</td><td>privola ili strogo određena iznimka</td><td>e-mail platforma</td></tr><tr><td>Personalizacija</td><td>pregledi, kupnje, segmenti</td><td>preporuke i ponude</td><td>ovisi o načinu obrade</td><td>CRM, recommendation sustav</td></tr><tr><td>Sprečavanje prijevara</td><td>IP, uređaj, ponašanje, rezultat procjene</td><td>antifraud</td><td>mogući legitimni interes</td><td>antifraud pružatelj</td></tr></tbody></table>
<p>Za svaku obradu zabilježi kategorije osoba i podataka, svrhu, pravnu osnovu, sustave, primatelje, države obrade, rok čuvanja, način brisanja, sigurnosne mjere i odgovornu osobu.</p>
<p>Ako ne znaš gdje se podaci nalaze, ne možeš ih zaštititi, pronaći ni izbrisati.</p>
<h2>2. Ne biraj pravnu osnovu kao artikl s police</h2>
<p>Za svaku svrhu mora postojati odgovarajuća pravna osnova iz <strong>članka 6. stavka 1. GDPR-a</strong>. GDPR poznaje privolu, ugovor, zakonsku obvezu, životno važne interese, javni interes i legitimni interes.</p>
<p>Webshop ne treba privolu za svaku obradu. Za adresu potrebnu za dostavu osnova je obično ugovor. Za čuvanje računa može biti zakonska obveza. Za sigurnosne logove i sprečavanje prijevara može se razmatrati legitimni interes, ali tek nakon testa nužnosti i ravnoteže interesa.</p>
<p>Legitimni interes nije naljepnica koju zalijepiš na sve za što ne želiš tražiti privolu. AZOP izričito upozorava da svaki izravni marketing nije automatski dopušten samo zato što postoji poslovni interes. <a href="https://azop.hr/preporuka-za-provedbu-testa-legitimnog-interesa-prema-clanku-6-stavku-1-tocki-f-opce-uredbe-o-zastiti-podataka/">AZOP preporuka</a></p>
<h2>3. Politika privatnosti mora opisivati stvarni webshop</h2>
<p>Politika mora objasniti voditelja obrade, kontakte, DPO-a ako postoji, podatke, izvore, svrhe, pravne osnove, konkretne legitimne interese, primatelje, međunarodne prijenose, rokove, prava, pritužbu AZOP-u, obveznost davanja podataka te automatizirano odlučivanje i profiliranje.</p>
<p>Informacije moraju biti sažete, transparentne, razumljive i lako dostupne prema <strong>članku 12. GDPR-a</strong>. Ako podatke prikupljaš od osobe, primjenjuje se <strong>članak 13.</strong> Ako ih dobivaš iz drugog izvora, primjenjuje se <strong>članak 14. GDPR-a</strong> i trebaš navesti izvor podataka. <a href="https://eur-lex.europa.eu/eli/reg/2016/679/oj?locale=HR">Službeni hrvatski tekst GDPR-a</a></p>
<p>Uz mjesto prikupljanja koristi kratku slojevitu obavijest, primjerice:</p>
<blockquote><p>E-mail koristimo za potvrdu i obradu narudžbe. Više informacija o obradi i rokovima čuvanja dostupno je u Politici privatnosti.</p></blockquote>
<p>Link u footeru je potreban, ali nije dovoljan ako se važna obrada događa već na checkoutu.</p>
<h2>4. Cookie banner nije ukras</h2>
<p>Za spremanje ili pristup podacima na korisnikovu uređaju ključno je pravilo iz <strong>članka 43. stavka 4. Zakona o elektroničkim komunikacijama</strong>. Privola mora zadovoljiti definiciju iz <strong>članka 4. točke 11.</strong> i uvjete iz <strong>članka 7. GDPR-a</strong>, a informacije o obradi <strong>članak 13. GDPR-a</strong>.</p>
<p>Prije privole ne bi se smjeli aktivirati marketinški pikseli, remarketing oznake, nenužna analitika, session recording ni drugi nenužni identifikatori.</p>
<p>Banner na prvom sloju treba nuditi:</p>
<ul><li><p>Prihvati sve</p></li><li><p>Odbij sve osim nužnih</p></li><li><p>Postavke</p></li></ul>
<p>EDPB smatra problematičnima unaprijed označene opcije, izostanak jasnog odbijanja i dizajn koji korisnika gura prema prihvaćanju. <a href="https://www.edpb.europa.eu/documents/task-force-report/report-of-the-work-undertaken-by-the-cookie-banner-taskforce_en">EDPB Cookie Banner Taskforce</a></p>
<h3>Cookie audit</h3>
<ol><li><p>Otvori webshop u privatnom prozoru i nemoj kliknuti banner.</p></li><li><p>Pregledaj Cookies, Local Storage i Network.</p></li><li><p>Potraži zahtjeve prema Googleu, Meti, TikToku, Hotjaru i drugim servisima.</p></li><li><p>Klikni “Odbij”, osvježi stranicu i ponovno provjeri.</p></li><li><p>Prihvati samo analitiku i provjeri pokreće li se samo ta kategorija.</p></li><li><p>Povuci privolu i provjeri prestaje li daljnje praćenje.</p></li></ol>
<p>Ako banner kaže da je marketing odbijen, a Meta Pixel šalje događaj, pravni tekst i tehnička stvarnost nisu na istoj stranici.</p>
<p>Za dokaz privole spremi pseudonimni identifikator, vrijeme, verziju bannera i politike, dopuštene svrhe i vendore te povijest promjena. Privolu mora biti jednako jednostavno povući kao dati.</p>
<p>Detaljan tehnički i pravni postupak nalazi se u vodiču <a href="https://www.peremin.com/kolacici-uskladi-se-s-gdpr-om-i-eprivacy-direktivom/">Kolačići i GDPR u Hrvatskoj: Što web shop mora imati</a>.</p>
<h2>5. Newsletter: kupnja nije doživotna dozvola</h2>
<p>Za izravnu promidžbu e-mailom, SMS-om i MMS-om polazno je pravilo prethodna privola iz <strong>članka 50. stavka 1. Zakona o elektroničkim komunikacijama</strong>.</p>
<p>Za osobu koja nije kupac marketinški newsletter najčešće traži privolu. Ona mora biti dobrovoljna, specifična, informirana, nedvosmislena, dokaziva i odvojena od uvjeta kupnje.</p>
<p>Za postojeće kupce <strong>članak 50. stavak 2. ZEK-a</strong> propisuje ograničenu iznimku samo ako je adresa dobivena u kontekstu prodaje, promoviraju se vlastiti slični proizvodi ili usluge, kupac je pri prikupljanju mogao odbiti marketing i svaka poruka ima jednostavan besplatan prigovor. Kod izravnog marketinga kupac ima bezuvjetno pravo na prigovor prema <strong>članku 21. stavku 2. GDPR-a</strong>. <a href="https://azop.hr/preporuka-za-provedbu-testa-legitimnog-interesa-prema-clanku-6-stavku-1-tocki-f-opce-uredbe-o-zastiti-podataka/">AZOP-ova preporuka o legitimnom interesu i izravnom marketingu</a></p>
<p>Spremi tekst i verziju privole, datum, izvor prijave, kontaktni identifikator, status double opt-ina ako se koristi te povijest povlačenja.</p>
<h2>6. Evidencija aktivnosti obrade</h2>
<p>Evidencija nije kopija politike. To je interni dokument s voditeljem i kontaktima, svrhama, kategorijama ispitanika i podataka, primateljima, međunarodnim prijenosima, rokovima i općim opisom sigurnosnih mjera.</p>
<p>Sadržaj evidencije uređuje <strong>članak 30. GDPR-a</strong>. Može biti tablica ili GRC alat; GDPR ne propisuje Excel. Bitno je da je potpuna, ažurirana i povezana sa stvarnim sustavima.</p>
<h2>7. Definiraj rokove čuvanja</h2>
<p>“Čuvamo koliko je potrebno” nije operativan rok.</p>
<p>Načelo ograničenja pohrane nalazi se u <strong>članku 5. stavku 1. točki (e) GDPR-a</strong>. Rok može proizlaziti iz posebnog propisa ili dokumentiranog kriterija, ali mora postojati i tehnički postupak brisanja.</p>
<table><thead><tr><th>Kategorija</th><th>Početak roka</th><th>Rok ili kriterij</th><th>Način brisanja</th></tr></thead><tbody><tr><td>Napuštena košarica</td><td>zadnja aktivnost</td><td>definirani broj dana</td><td>automatsko brisanje</td></tr><tr><td>Korisnički račun</td><td>zadnja aktivnost ili zahtjev</td><td>definirani rok</td><td>anonimizacija ili brisanje</td></tr><tr><td>Račun</td><td>izdavanje</td><td>prema zakonskoj obvezi</td><td>nakon isteka obveze</td></tr><tr><td>Reklamacija</td><td>zatvaranje predmeta</td><td>prema pravnim rokovima</td><td>kontrolirano brisanje</td></tr><tr><td>Newsletter privola</td><td>povlačenje</td><td>dokaz privole i prigovora</td><td>ograničena evidencija</td></tr><tr><td>Sigurnosni logovi</td><td>nastanak događaja</td><td>prema procjeni rizika</td><td>automatska rotacija</td></tr><tr><td>Backup</td><td>nastanak kopije</td><td>prema backup politici</td><td>automatska rotacija</td></tr></tbody></table>
<p>Ako dokument kaže 30 dana, a baza čuva sedam godina jer nema cleanup procesa, stvarni rok je sedam godina.</p>
<h2>8. Razlikuj voditelje, izvršitelje i primatelje</h2>
<p>Izvršitelj obrađuje podatke prema tvojim uputama. Samostalni voditelj sam određuje svrhe i bitna sredstva. Zajednički voditelji to određuju zajedno.</p>
<p>Dostavljač, payment provider, marketplace ili oglašivačka platforma mogu imati različite uloge. Ulogu ne određuje naslov ugovora nego stvarni odnos. <a href="https://www.edpb.europa.eu/sme/learn-the-basics/data-controller-or-data-processor_en">EDPB vodič</a></p>
<p>Za izvršitelje ugovor prema <strong>članku 28. GDPR-a</strong> treba obuhvatiti upute, povjerljivost, sigurnost, podizvršitelje, pomoć kod prava i incidenata, brisanje ili povrat podataka te pravo na informacije i reviziju.</p>
<h2>9. Provjeri međunarodne prijenose</h2>
<p>Prijenose osobnih podataka u treće zemlje uređuju <strong>članci 44.–49. GDPR-a</strong>.</p>
<p>Provjeri obrađuju li se podaci izvan EGP-a, postoji li odluka o primjerenosti, je li američka organizacija aktivni sudionik EU–US Data Privacy Frameworka, koriste li se SCC, treba li procjena prijenosa i dodatne mjere te je li sve opisano u politici i evidenciji.</p>
<p>EU–US DPF ne pokriva automatski svaku američku tvrtku. <a href="https://commission.europa.eu/law/law-topic/data-protection/international-dimension-data-protection/eu-us-data-transfers_en">Europska komisija o EU–US prijenosima</a></p>
<h2>10. Prava korisnika trebaju proceduru</h2>
<p>Korisnik može, ovisno o okolnostima, tražiti pristup, ispravak, brisanje, ograničenje, prenosivost, prigovor i zaštitu od određenih isključivo automatiziranih odluka. Ta prava uređuju <strong>članci 15.–22. GDPR-a</strong>, a rok i način komunikacije <strong>članak 12.</strong></p>
<pre><code class="language-text"><span class="tok-type">Zahtjev</span> → evidencija → provjera identiteta → pronalazak podataka
→ provjera iznimki → provedba → obavijest primateljima → odgovor</code></pre>
<p>Odgovara se u pravilu unutar jednog mjeseca. Kod složenih zahtjeva rok se može produljiti za još dva mjeseca, uz obavijest unutar prvog mjeseca. <a href="https://www.edpb.europa.eu/sme/be-compliant/respect-individuals-rights_ga">EDPB vodič za prava ispitanika</a></p>
<p>Za prenosivost koristi strojno čitljiv format poput CSV-a ili JSON-a. PDF sam po sebi nije nužno dovoljan.</p>
<h2>11. Sigurnost nije samo HTTPS</h2>
<p>Webshop treba MFA, zasebne administratorske račune, pristup prema ulozi, redoviti pregled ovlasti, pravodobne zakrpe, zaštitu od brute-force napada, enkripciju, tokenizaciju plaćanja, sigurnosne logove, testirane backup kopije, kontrolu izvoza i provjeru dobavljača.</p>
<p>GDPR traži sigurnost primjerenu riziku i redovito testiranje učinkovitosti mjera. <a href="https://eur-lex.europa.eu/legal-content/EN/TXT/?toc=OJ%3AL%3A2016%3A119%3ATOC&amp;uri=uriserv%3AOJ.L_.2016.119.01.0001.01.ENG">GDPR, članak 32.</a></p>
<h2>12. Napravi plan za povredu podataka</h2>
<p>Povreda može biti pogrešno poslan e-mail, javni backup, ukraden račun, izgubljen laptop, ransomware, pogrešna dozvola, neovlašten izvoz baze ili tuđi račun dostupan kroz URL.</p>
<p>Svaka povreda mora biti dokumentirana. Prijavu AZOP-u uređuje <strong>članak 33. GDPR-a</strong>: nadzorno tijelo obavještava se bez nepotrebnog odgađanja i, ako je izvedivo, najkasnije 72 sata nakon saznanja, osim ako nije vjerojatno da će povreda prouzročiti rizik. Obavještavanje pogođenih osoba kod vjerojatnog visokog rizika uređuje <strong>članak 34. GDPR-a</strong>. <a href="https://www.edpb.europa.eu/system/files/2025-03/edpb_summary_092022-012021_data_breach_en.pdf">EDPB vodič</a></p>
<p>Registar treba sadržavati vrijeme otkrivanja, pogođene sustave i osobe, kategorije podataka, posljedice, mjere, procjenu rizika, odluku o prijavi i razloge.</p>
<h2>13. DPIA, profiliranje i AI</h2>
<p>DPIA prema <strong>članku 35. GDPR-a</strong> potrebna je kada je vjerojatan visok rizik, primjerice kod opsežnog profiliranja, značajnih automatiziranih odluka, posebnih kategorija podataka, praćenja ranjivih osoba ili kombinacije nove tehnologije s drugim rizičnim kriterijima. Isključivo automatizirane odluke s pravnim ili slično značajnim učinkom dodatno provjeri prema <strong>članku 22. GDPR-a</strong>.</p>
<p>Za recommendation, churn, propensity, antifraud, dinamičke cijene i AI chatbotove zabilježi ulazne podatke, svrhu, pravnu osnovu, dobavljača, lokaciju, koristi li podatke za treniranje, donosi li odluku, postoji li ljudska provjera, kako se rezultat osporava i koliko se podaci čuvaju.</p>
<p>Nemoj u javni AI alat lijepiti ime, adresu, broj narudžbe i cijelu reklamaciju zato što alat brže piše odgovor.</p>
<h2>14. Privacy by design u checkoutu</h2>
<p>Zaštita podataka od dizajna i prema zadanim postavkama obveza je iz <strong>članka 25. GDPR-a</strong>.</p>
<ul><li><p>omogući guest checkout</p></li><li><p>ne traži datum rođenja, spol ili OIB bez potrebe</p></li><li><p>odvoji kupnju od newslettera</p></li><li><p>ne koristi unaprijed označene marketinške opcije</p></li><li><p>pokaži kratku obavijest uz mjesto prikupljanja</p></li><li><p>ograniči podatke koje prima dostavljač</p></li><li><p>ne spremaj kartične podatke u webshop</p></li><li><p>ograniči izvoz velikih baza</p></li><li><p>automatski čisti stare košarice i privremene podatke</p></li><li><p>testiraj može li kupac promjenom ID-a u URL-u vidjeti tuđu narudžbu</p></li><li><p>ne šalji osobne podatke kroz analytics evente i URL parametre</p></li></ul>
<p>Najbolja zaštita podataka često je podatak koji nikada nisi prikupio.</p>
<h2>15. Zaštita potrošača nije isto što i GDPR</h2>
<p>Web shop istodobno obrađuje podatke i sklapa ugovor na daljinu. Zato privatnost i zaštita potrošača moraju biti povezane, ali ih nemoj trpati u isti checkbox.</p>
<ul><li><p><strong>Članak 10. Zakona o zaštiti potrošača</strong> uređuje pisani prigovor, obavijest o načinu njegova podnošenja, odgovor u roku od 15 dana i evidenciju prigovora.</p></li><li><p><strong>Članak 60.</strong> propisuje predugovorne obavijesti kod ugovora na daljinu, uključujući identitet trgovca, kontakt, cijenu, plaćanje, isporuku, prigovore i pravo na raskid. Članak je izmijenjen Zakonom iz NN 59/26.</p></li><li><p><strong>Članak 79.</strong> uređuje opće pravo na jednostrani raskid ugovora sklopljenog na daljinu u roku od 14 dana, uz zakonske iznimke.</p></li></ul>
<p>Ti podaci mogu istodobno biti osobni podaci. Primjerice, reklamaciju čuvaš radi postupanja prema Zakonu o zaštiti potrošača, ali pristup, sigurnost i brisanje i dalje moraš urediti prema GDPR-u. <a href="https://narodne-novine.nn.hr/clanci/sluzbeni/2022_02_19_203.html">Zakon o zaštiti potrošača, NN 19/22</a> i <a href="https://narodne-novine.nn.hr/clanci/sluzbeni/2026_06_59_728.html">izmjene NN 59/26</a></p>
<h2>16. Podaci radnika i videonadzor skladišta</h2>
<p>Ako web shop ima zaposlenike, skladište ili poslovnicu, ulaziš u dodatni pravni sloj.</p>
<p><strong>Članak 29. Zakona o radu</strong> dopušta prikupljanje i korištenje osobnih podataka radnika samo kada je to određeno zakonom ili potrebno radi prava i obveza iz radnog odnosa. Propisuje i ovlaštene osobe, ispravak netočnih podataka, uklanjanje podataka za koje više nema razloga te povjerljivost.</p>
<p>Kod kamera treba zajedno čitati:</p>
<ul><li><p><strong>članke 25.–30. Zakona o provedbi Opće uredbe</strong>, posebno članak 29. o čuvanju snimki najviše šest mjeseci, osim propisanih iznimki, i članak 30. o videonadzoru radnih prostorija</p></li><li><p><strong>članak 43. Zakona o zaštiti na radu</strong>, koji dopušta nadzorne uređaje radi kontrole ulazaka i izlazaka te smanjenja rizika od razbojstva, provala, nasilja i krađa, zabranjuje ih u prostorijama za osobnu higijenu i presvlačenje te propisuje dodatne uvjete kada su radnici stalno u vidnom polju</p></li></ul>
<p>Kamera ne smije postati alat za mjerenje tko je tri minute predugo slagao paket. AZOP-ova praksa i propisi traže konkretnu sigurnosnu svrhu, nužnost, unaprijed obaviještene radnike i ograničen pristup snimkama. <a href="https://azop.hr/wp-content/uploads/2023/11/Smjernice_radni-odnosi.pdf">AZOP smjernice za radne odnose</a></p>
<h2>Završna checklist</h2>
<h3>Dokumentacija</h3>
<ul><li><p>Politika privatnosti odgovara stvarnim procesima</p></li><li><p>Evidencija aktivnosti je ažurirana</p></li><li><p>Postoji matrica pravnih osnova</p></li><li><p>Postoji retention schedule</p></li><li><p>Postoji registar dobavljača i podizvršitelja</p></li><li><p>Ugovori prema članku 28. postoje gdje su potrebni</p></li><li><p>Dokumentirani su međunarodni prijenosi</p></li><li><p>Postoje LIA i DPIA screening gdje su potrebni</p></li><li><p>Postupanje s prigovorima kupaca usklađeno je s člankom 10. Zakona o zaštiti potrošača</p></li><li><p>Podaci radnika uređeni su prema članku 29. Zakona o radu</p></li><li><p>Videonadzor je provjeren prema člancima 25.–30. provedbenog zakona i članku 43. Zakona o zaštiti na radu</p></li></ul>
<h3>Webshop</h3>
<ul><li><p>Nenužne tehnologije ne pokreću se prije privole</p></li><li><p>“Odbij” je jednako dostupan kao “Prihvati”</p></li><li><p>Nema unaprijed označenih opcija</p></li><li><p>Privolu je jednostavno povući</p></li><li><p>Checkout prikuplja samo potrebne podatke</p></li><li><p>Newsletter nije uvjet kupnje</p></li><li><p>Odjava stvarno radi</p></li><li><p>URL-ovi i analytics eventi ne otkrivaju osobne podatke</p></li></ul>
<h3>Sigurnost i prava</h3>
<ul><li><p>Administratori imaju zasebne račune i MFA</p></li><li><p>Pristup se dodjeljuje prema ulozi</p></li><li><p>Backup se redovito testira</p></li><li><p>Postoje incident-response plan i registar incidenata</p></li><li><p>Zahtjevi korisnika se evidentiraju</p></li><li><p>Podaci se mogu pronaći u svim sustavima</p></li><li><p>Odgovara se unutar jednog mjeseca</p></li><li><p>Moguće je provesti brisanje, ograničenje i prigovor</p></li></ul>
<h2>GDPR usklađenost nije dokument. To je sposobnost.</h2>
<p>Najvažnije pitanje nije imaš li politiku privatnosti.</p>
<p>Važnije je možeš li, kada kupac pošalje zahtjev, pronaći njegove podatke u webshopu, CRM-u, newsletteru, helpdesku, ERP-u, analitici i backup proceduri.</p>
<p>Možeš li objasniti zašto svaki podatak postoji? Možeš li dokazati privolu? Možeš li zaustaviti marketing? Možeš li obrisati podatke kojima je istekao rok? Možeš li reagirati na incident prije isteka 72 sata?</p>
<p>Ako možeš, onda imaš sustav.</p>
<p>Ako ne možeš, imaš footer link.</p>]]></content:encoded>
</item>
<item>
<title>GenAgents: Može li AI predvidjeti uspjeh proizvoda?</title>
<link>https://www.peremin.com/koristenje-genagents-simulacija-u-predvidanju-trzisnog-uspjeha-novih-e-commerce-proizvoda/</link>
<guid isPermaLink="true">https://www.peremin.com/koristenje-genagents-simulacija-u-predvidanju-trzisnog-uspjeha-novih-e-commerce-proizvoda/</guid>
<pubDate>Mon, 14 Jul 2025 00:00:00 +0000</pubDate>
<description>Kako generativni agenti simuliraju reakcije kupaca, gdje mogu pomoći pri istraživanju proizvoda i zašto sintetički kupac ipak nije tržište.</description>
<content:encoded><![CDATA[<h2>Uvod u GenAgents: Virtualni kupci koji ne lažu</h2>
<p>Imaš ideju za novi proizvod – <strong>kišobran s interaktivnim LED svjetlima</strong>. Savršeno za Instagram, cool za TikTok, ali pitanje je: hoće li ga ljudi kupiti?</p>
<p>Želiš znat kako bi tvoj novi LED kišobran prošao u divljini? Bez anketnih botova, politike i “Ča neju sve izmislili danas” komentara od tete Jožice? Umjesto da trošiš novac na skupe i spore ankete, koristi <strong>genagents arhitekturu</strong> iz <strong>Stanforda</strong>, razvijenu kroz rigorozna istraživanja stvarnog ljudskog ponašanja (<a href="https://arxiv.org/abs/2411.10109">Park et al., 2024).</a></p>
<h2>Korak 1: Instalacija GenAgents</h2>
<p>Prvi korak je postavljanje GenAgents sustava:</p>
<pre><code class="language-bash">git clone https<span class="tok-operator">:</span><span class="tok-operator">/</span><span class="tok-operator">/</span>github<span class="tok-operator">.</span>com<span class="tok-operator">/</span>joonspk<span class="tok-operator">-</span>research<span class="tok-operator">/</span>genagents
cd genagents
pip install <span class="tok-operator">-</span>r requirements<span class="tok-operator">.</span>txt</code></pre>
<p>Zatim konfiguriraj API ključ u <code>simulation_engine/settings.py</code>:</p>
<pre><code class="language-python"><span class="tok-type">OPENAI_API_KEY</span> <span class="tok-operator">=</span> <span class="tok-string">"TVOJ_OPENAI_KLJUČ"</span>
<span class="tok-type">DEBUG</span> <span class="tok-operator">=</span> <span class="tok-literal">False</span>
<span class="tok-type">LLM_VERS</span> <span class="tok-operator">=</span> <span class="tok-string">"gpt-4o"</span></code></pre>
<h2>Korak 2: Generiranje realistične populacije</h2>
<p>Prema istraživanju (Park et al., 2024), generativni agenti su kreirani temeljem 2-satnih intervjua s 1.052 stvarne osobe. To znači da svaki agent ima:</p>
<ul><li><p>Osobne narative i memoriju,</p></li><li><p>Refleksivne sposobnosti,</p></li><li><p>Konzistentno ponašanje s izvornim osobama.</p></li></ul>
<p>Primjer definiranja agenta:</p>
<pre><code class="language-python"><span class="tok-keyword">from</span> genagents<span class="tok-operator">.</span>genagents <span class="tok-keyword">import</span> <span class="tok-type">GenerativeAgent</span>

agent <span class="tok-operator">=</span> <span class="tok-type">GenerativeAgent</span>(agent_folder<span class="tok-operator">=</span><span class="tok-string">"agent_bank/populations/single_agent"</span>)
agent<span class="tok-operator">.</span><span class="tok-function">update_scratch</span>({
    <span class="tok-string">"first_name"</span><span class="tok-operator">:</span> <span class="tok-string">"Luka"</span>,
    <span class="tok-string">"age"</span><span class="tok-operator">:</span> <span class="tok-number">29</span>,
    <span class="tok-string">"occupation"</span><span class="tok-operator">:</span> <span class="tok-string">"konobar"</span>,
    <span class="tok-string">"interests"</span><span class="tok-operator">:</span> [<span class="tok-string">"tech"</span>, <span class="tok-string">"moda"</span>, <span class="tok-string">"urbani lifestyle"</span>]
})</code></pre>
<h2>Korak 3: Simulacija reakcije na LED kišobran</h2>
<p>Postavimo simulaciju jasno i realistično:</p>
<pre><code class="language-python">prompt <span class="tok-operator">=</span> <span class="tok-string">"Would you click on an Instagram ad for a smart LED umbrella that changes colors and syncs with your phone?"</span>
response <span class="tok-operator">=</span> agent<span class="tok-operator">.</span><span class="tok-function">utterance</span>([(<span class="tok-string">"Interviewer"</span>, prompt)])
<span class="tok-function">print</span>(response)</code></pre>
<p>Realni odgovor jednog od agenta:</p>
<blockquote><p>“Yeah, sounds cool, I’d definitely click. Seems useful for nights out in the city.”</p></blockquote>
<h2>Korak 4: Skaliranje na 1.000 agenata</h2>
<p>GenAgents omogućuje paralelnu simulaciju tisuća korisnika pomoću iste arhitekture:</p>
<pre><code class="language-bash">python simulate<span class="tok-operator">.</span>py <span class="tok-operator">-</span><span class="tok-operator">-</span>input_data agents<span class="tok-operator">.</span>csv <span class="tok-operator">-</span><span class="tok-operator">-</span>model gpt<span class="tok-number">-4</span>o <span class="tok-operator">-</span><span class="tok-operator">-</span>output results<span class="tok-operator">.</span>json</code></pre>
<p>Primjer agregiranog rezultata iz simulacije:</p>
<table><thead><tr><th>Reakcija</th><th style="text-align:right">Broj agenata</th></tr></thead><tbody><tr><td>Kliknuli</td><td style="text-align:right">678</td></tr><tr><td>Komentirali</td><td style="text-align:right">423</td></tr><tr><td>Podijelili</td><td style="text-align:right">289</td></tr></tbody></table>
<h2>Analiza rezultata</h2>
<ul><li><p><strong>68% klikova:</strong> Visoki interes, proizvod privlači pažnju.</p></li><li><p><strong>42% komentara:</strong> Ljudi izražavaju mišljenja poput “savršeno za noćne izlaske”, “super za TikTok”. <strong>To su free UX savjeti (ili hejt za kasniju analizu).</strong></p></li><li><p><strong>29% dijeljenja:</strong> Dokaz potencijalnog viralityja, posebno među mlađim urbanim korisnicima. <strong>Ako je više od 10%, proizvod ima meme potencijal.</strong></p></li></ul>
<h2>Dublji uvid u korisnike</h2>
<ul><li><p><strong>Mladi urbani liberali:</strong> najpozitivnije reakcije zbog estetike i društvenih mreža.</p></li><li><p><strong>Stariji konzervativci:</strong> skeptičniji, smatraju “nepotrebnim luksuzom”.</p></li></ul>
<p>Ovo jasno pokazuje ciljanu publiku bez nagađanja.</p>
<h2>Zašto je GenAgents moćan alat?</h2>
<ul><li><p><strong>Autentičnost:</strong> Agenti bazirani na stvarnim intervjuima osiguravaju preciznost i realistične reakcije.</p></li><li><p><strong>Ekonomičnost:</strong> Brzo testiranje bez visokih troškova kampanja.</p></li><li><p><strong>Detaljna analiza:</strong> Mogućnost razumijevanja zašto korisnici reagiraju kako reagiraju.</p></li></ul>
<p>Ako želiš ozbiljno shvatiti svoj e-commerce, GenAgents simulacije su must-have.</p>
<h3>Zašto je ovo zakon?</h3>
<p><strong>Pobuna protiv dosadnih anketa</strong>
Umjesto da pitaš ljude “bi li kupio proizvod”, baci ih u virtualni kaos gdje mogu reći sve bez posljedica.</p>
<p><strong>Agenti imaju trust issues</strong>
Arhitektura koristi transkripte intervjua da smanji stereotipe – nema više “svi mlađi od 30 vole tech”.</p>
<p><strong>Eksperimentiraj bez gubitka followera</strong>
Testiraj ludje ideje: šta ako kišobran ima Bluetooth zvukove kiše? Simulacija će ti reći da li će ljudi biti “WTF” ili “take my money”.</p>
<h2>Tajni sastojci arhitekture</h2>
<p>Istraživači su namjerno izabrali 1.052 sudionika da reprezentiraju SAD po:</p>
<ul><li><p>Dobu (18-84)</p></li><li><p>Političkoj ideologiji (od Trumpovih fanova do Berniejevih hipija)</p></li><li><p>Sexualnom identitetu (hetero, LGBTQ+, “ne znam, samo sam tu da dobijem 60$”)</p></li></ul>
<p>Zašto je bitno? Da algoritmi ne budu ko TikTok – da ne serendipita samo white milleniale.</p>
<p>AI interviewer nije samo GPT s mikrofonom:
Koristio je refleksijski modul da skrati transkripte u jezgrovite bilješke.</p>
<p>Primjer:</p>
<pre><code class="language-json"><span class="tok-operator">{</span>
  <span class="tok-property">"trust_issues"</span><span class="tok-operator">:</span> <span class="tok-string">"Ne vjeruje institucijama nakon što mu se susjed tresao po covid potporama"</span><span class="tok-operator">,</span>
  <span class="tok-property">"meme_affinity"</span><span class="tok-operator">:</span> <span class="tok-string">"Spominje 'distracted boyfriend' u kontekstu ozbiljnih životnih odluka"</span>
<span class="tok-operator">}</span></code></pre>
<p>Ekspertne persone: GPT-4o je generirao 4 verzije svakog agenta – psiholog, ekonomist, politolog i demograf. Odabir ovisi o pitanju.</p>
<h2>Simulirana pobuna protiv demografskih stereotipa</h2>
<p>Ključni eksperiment:</p>
<p>Agenti bazirani na intervjuima imali su 14-15% točnije odgovore od onih koji su koristili samo demografske podatke .</p>
<p>Primjer bias mitigacije:</p>
<ul><li><p>Za pitanje “Bi li podržao/la restriktivnu imigracionsku politiku?”</p></li><li><p>Demografski agenti: “Da, jer si star 50+ i bijelac”</p></li><li><p>Intervju agenti: “Ne, jer si spomenuo da ti je najbolji frend iz Meksika”</p></li></ul>
<p>Kako zapravo izgleda ‘agent bank’</p>
<p>Dvostruki pristup:</p>
<ul><li><p>Open access: Agregirani podaci za GSS pitanja (npr. “68% klikova na oglas”)</p></li><li><p>Restricted access: Individualni odgovori za akademike koji prođu IRB provjeru (i obećaju da neće tražiti kišobrane s NFT)</p></li></ul>
<h2>Statistike koje možete baciti na sastanku</h2>
<ul><li><p>**85% korelacija između agenta i stvarnih ljudi **– bolje nego što prosječna osoba replicira vlastite odgovore nakon dva tjedna</p></li><li><p>22% komentara u simulaciji = ~220 ljudi koji će vam napisati “ovo je glupo” ili “jel ovo neki phishing”</p></li><li><p>15% dijeljenja = ako ne dobijete bar 150 shareova, vaš proizvod nema “drama potencijala”</p></li></ul>
<h2>Zašto vas boli glava od ovoga</h2>
<p>Memorija agenta nije samo chat history – sustav automatski bilježi:</p>
<ul><li><p><strong>Emocije</strong> (npr. “ljut zbog preplaćene dostave”)</p></li><li><p><strong>Kontekstualne reference</strong> (npr. “spominje Bitcoin u vezi s kupovinom mlijeka”)</p></li></ul>
<p>Eksperimenti s power dynamics:</p>
<p>Agenti u “high-power” pozicijama (npr. virtualni šefovi) pokazali su <strong>23% manje povjerenja prema drugima</strong></p>
<h3>Bonus za one koji su skrolali do kraja:</h3>
<p>Evo kako izgleda stvarni transkript intervjua iz istraživanja:</p>
<h2>Reference</h2>
<ul><li></li></ul>
<p>GitHub: <a href="https://github.com/joonspk-research/genagents">genagents</a></p>
<ul><li></li></ul>
<p>Glavni rad: <a href="https://arxiv.org/abs/2411.10109">Generative Agent Simulations of 1,000 People</a></p>
<ul><li></li></ul>
<p>Dodatna literatura: <a href="https://arxiv.org/abs/2304.03442">Generative Agents: Interactive Simulacra of Human Behavior</a></p>
<ul><li>Sljedeći test: usporedba 3 verzije headline-a? Let’s roll. 🚀</li></ul>]]></content:encoded>
</item>
<item>
<title>Koliko loša interna tražilica košta web shop?</title>
<link>https://www.peremin.com/koliko-je-los-search-skup-seo-ux-i-konverzija/</link>
<guid isPermaLink="true">https://www.peremin.com/koliko-je-los-search-skup-seo-ux-i-konverzija/</guid>
<pubDate>Thu, 19 Jun 2025 00:00:00 +0000</pubDate>
<description>Istraživanje 5.041 eCommerce upita pokazuje kako loš redoslijed skriva točne proizvode i kako njegov stvarni trošak testirati kroz maržu.</description>
<content:encoded><![CDATA[<p>Kupac u internu tražilicu upiše <code>crne vodootporne tenisice 42</code>.</p>
<p>Web shop mu prvo pokaže bijele papuče, sprej za impregnaciju i tenisice veličine 39. Točan proizvod postoji, ima ga na zalihi i može se isporučiti. Samo je zakopan dovoljno duboko da ga kupac vjerojatno neće vidjeti.</p>
<p>To nije problem praznog rezultata. Prazan rezultat barem pošteno prizna da sustav nije pronašao ništa. Ovo je podmukliji problem: web shop se pravi da je razumio kupca, a zapravo mu pokazuje krivu policu.</p>
<p>Zato sam krenuo istražiti jedno vrlo praktično pitanje: <strong>koliko štete nastaje kada interni search ima prave proizvode, ali ih posloži krivim redoslijedom?</strong></p>
<p>Nisam koristio tuđe postotke konverzije ni graf koji izgleda uvjerljivo jer ima plave stupce. Uzeo sam javni skup ručno označenih eCommerce upita, napisao ponovljiv eksperiment i objavio kod i rezultate. Tek nakon toga odvojio sam ono što podaci dokazuju od onoga što se mora potvrditi na stvarnom web shopu.</p>
<h2>Što sam zapravo testirao</h2>
<p>Koristio sam Amazon Science <a href="https://github.com/amazon-science/esci-data">Shopping Queries Dataset</a>, poznat kao ESCI. Autori rada navode približno 130 tisuća upita i 2,6 milijuna ručno označenih parova upit–proizvod na engleskom, japanskom i španjolskom jeziku.</p>
<p>Za eksperiment sam uzeo:</p>
<ul><li><p>malu službenu verziju skupa podataka</p></li><li><p>engleske upite iz testnog dijela</p></li><li><p>svih <strong>5.041 upita</strong> koji imaju barem jedan rezultat označen kao Exact i barem jedan kao Irrelevant</p></li></ul>
<p>Namjerno sam tražio upravo takve upite. Zanimalo me što se događa kada traženi proizvod postoji među kandidatima, ali sustav ga može gurnuti ispod smeća.</p>
<p>Svaki par upita i proizvoda u skupu ima jednu od četiri ručno dodijeljene oznake:</p>
<table><thead><tr><th>Oznaka</th><th>Što znači</th></tr></thead><tbody><tr><td>Exact (E)</td><td>proizvod izravno odgovara upitu</td></tr><tr><td>Substitute (S)</td><td>nije isti, ali može zamijeniti traženi proizvod</td></tr><tr><td>Complement (C)</td><td>nadopunjuje traženi proizvod</td></tr><tr><td>Irrelevant (I)</td><td>ne rješava namjeru upita</td></tr></tbody></table>
<p>Prema metodologiji ESCI rada koristio sam dobitke <code>E=1</code>, <code>S=0,1</code>, <code>C=0,01</code> i <code>I=0</code>.</p>
<h2>Četiri verzije iste police</h2>
<p>Nisam uspoređivao četiri komercijalna search alata. To bi bez istog kataloga i istih postavki bio cirkus, ne istraživanje. Napravio sam kontrolirani stres-test: iste kandidate svakog upita presložio sam na četiri načina.</p>
<ol><li><p><strong>Idealni redoslijed</strong> — Exact ide prvi, zatim Substitute, Complement i Irrelevant.</p></li><li><p><strong>Jedan nerelevantan prvi</strong> — samo jedan Irrelevant rezultat stavljam na vrh, a ostalo ostaje idealno posloženo.</p></li><li><p><strong>Nasumični redoslijed</strong> — kandidate miješam 50 puta po upitu i računam prosjek. Seed je <code>20260720</code>.</p></li><li><p><strong>Exact rezultati zadnji</strong> — točne proizvode namjerno guram iza ostalih kandidata.</p></li></ol>
<p>Ovo nisu četiri realna algoritma. To su četiri laboratorijska scenarija kojima izoliram samo jednu stvar: <strong>redoslijed rezultata</strong>.</p>
<h2>Kako sam mjerio štetu</h2>
<p>Glavna metrika je <code>nDCG@10</code>. Ona nagrađuje relevantne proizvode pri vrhu i kažnjava ih kada su zakopani niže. Pojednostavljeno:</p>
<div class="td-math td-math-display"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 111.32 33.8" fill="currentColor" aria-hidden="true" style="width:11.13em;height:3.38em;vertical-align:-1.22em"><path d="M7.07 18.22C7.07 16.32 5.72 14.75 4.01 14.75L0.35 14.75L0.35 15.06L0.59 15.06C1.36 15.06 1.38 15.17 1.38 15.53L1.38 20.8C1.38 21.16 1.36 21.27 0.59 21.27L0.35 21.27L0.35 21.58L4.01 21.58C5.69 21.58 7.07 20.1 7.07 18.22ZM6.07 18.22C6.07 19.33 5.88 19.93 5.52 20.42C5.32 20.69 4.75 21.27 3.74 21.27L2.73 21.27C2.26 21.27 2.24 21.2 2.24 20.87L2.24 15.46C2.24 15.13 2.26 15.06 2.73 15.06L3.73 15.06C4.35 15.06 5.04 15.28 5.55 15.99C5.98 16.58 6.07 17.44 6.07 18.22Z"/><path d="M14.29 19.25C14.29 19.15 14.29 19.08 14.16 19.08C14.05 19.08 14.05 19.14 14.04 19.24C13.96 20.67 12.89 21.49 11.8 21.49C11.19 21.49 9.23 21.15 9.23 18.17C9.23 15.18 11.18 14.84 11.79 14.84C12.88 14.84 13.77 15.75 13.97 17.21C13.99 17.35 13.99 17.38 14.13 17.38C14.29 17.38 14.29 17.35 14.29 17.14L14.29 14.77C14.29 14.6 14.29 14.53 14.18 14.53C14.14 14.53 14.1 14.53 14.02 14.65L13.52 15.39C13.15 15.03 12.64 14.53 11.68 14.53C9.81 14.53 8.2 16.12 8.2 18.16C8.2 20.23 9.82 21.8 11.68 21.8C13.31 21.8 14.29 20.41 14.29 19.25Z"/><path d="M22.21 19.16L22.21 18.85L20.99 18.88C20.59 18.88 19.74 18.88 19.38 18.85L19.38 19.16L19.7 19.16C20.6 19.16 20.63 19.27 20.63 19.64L20.63 20.28C20.63 21.4 19.36 21.49 19.08 21.49C18.43 21.49 16.45 21.14 16.45 18.16C16.45 15.17 18.42 14.84 19.02 14.84C20.09 14.84 21 15.74 21.2 17.21C21.22 17.35 21.22 17.38 21.36 17.38C21.52 17.38 21.52 17.35 21.52 17.14L21.52 14.77C21.52 14.6 21.52 14.53 21.41 14.53C21.37 14.53 21.33 14.53 21.25 14.65L20.75 15.39C20.43 15.07 19.89 14.53 18.9 14.53C17.04 14.53 15.42 16.11 15.42 18.16C15.42 20.21 17.02 21.8 18.92 21.8C19.65 21.8 20.45 21.54 20.79 20.95C20.92 21.17 21.32 21.57 21.43 21.57C21.52 21.57 21.52 21.49 21.52 21.34L21.52 19.6C21.52 19.21 21.56 19.16 22.21 19.16Z"/><path d="M29.92 18.2C29.92 15.86 28.21 14.53 26.6 14.53C24.77 14.53 23.27 16.12 23.27 18.11C23.27 19.99 24.65 21.69 26.65 21.69C27.17 21.69 27.81 21.62 28.45 21.47C28.71 21.41 29.91 21.06 29.91 20.9C29.91 20.8 29.84 20.8 29.68 20.8L29.59 20.8C29.43 20.8 29.41 20.8 29.36 20.83C28.51 21.23 27.58 21.47 26.64 21.47C24.82 21.47 23.52 19.9 23.52 18.11C23.52 16.2 24.95 14.75 26.59 14.75C27.96 14.75 29.67 15.85 29.67 18.26C29.67 19.18 29.6 20.08 28.94 20.08C28.59 20.08 28.59 19.57 28.59 19.42L28.59 17.01C28.59 16.78 28.58 16.77 28.35 16.77L28.18 16.77C28.02 16.77 28.01 16.76 27.95 16.69C27.49 16.06 26.97 15.92 26.58 15.92C25.55 15.92 24.6 16.85 24.6 18.11C24.6 19.37 25.55 20.3 26.58 20.3C27.12 20.3 27.6 20.01 27.9 19.59C28 20.11 28.52 20.3 28.9 20.3C29.78 20.3 29.92 19.27 29.92 18.2ZM27.9 18.96C27.9 19.14 27.9 19.18 27.76 19.39C27.32 20.02 26.81 20.08 26.61 20.08C25.89 20.08 25.29 19.22 25.29 18.11C25.29 17 25.88 16.14 26.61 16.14C26.93 16.14 27.41 16.3 27.77 16.86C27.9 17.05 27.9 17.08 27.9 17.26Z"/><path d="M34.68 21.58L34.68 21.27L34.36 21.27C33.46 21.27 33.43 21.16 33.43 20.79L33.43 15.18C33.43 14.94 33.43 14.92 33.2 14.92C32.58 15.56 31.7 15.56 31.38 15.56L31.38 15.87C31.58 15.87 32.17 15.87 32.69 15.61L32.69 20.79C32.69 21.15 32.66 21.27 31.76 21.27L31.44 21.27L31.44 21.58C31.79 21.55 32.66 21.55 33.06 21.55C33.46 21.55 34.33 21.55 34.68 21.58Z"/><path d="M40.09 18.38C40.09 17.58 40.04 16.78 39.69 16.04C39.23 15.08 38.41 14.92 37.99 14.92C37.39 14.92 36.66 15.18 36.25 16.11C35.93 16.8 35.88 17.58 35.88 18.38C35.88 19.13 35.92 20.03 36.33 20.79C36.76 21.6 37.49 21.8 37.98 21.8C38.52 21.8 39.28 21.59 39.72 20.64C40.04 19.95 40.09 19.17 40.09 18.38ZM39.26 18.26C39.26 19.01 39.26 19.69 39.15 20.33C39 21.28 38.43 21.58 37.98 21.58C37.59 21.58 37 21.33 36.82 20.37C36.71 19.77 36.71 18.85 36.71 18.26C36.71 17.62 36.71 16.96 36.79 16.42C36.98 15.23 37.73 15.14 37.98 15.14C38.31 15.14 38.97 15.32 39.16 16.31C39.26 16.87 39.26 17.63 39.26 18.26Z"/><path d="M51.03 18.11C51.03 18 50.94 17.91 50.83 17.91L44.57 17.91C44.46 17.91 44.37 18 44.37 18.11C44.37 18.22 44.46 18.31 44.57 18.31L50.83 18.31C50.94 18.31 51.03 18.22 51.03 18.11ZM51.03 20.05C51.03 19.94 50.94 19.85 50.83 19.85L44.57 19.85C44.46 19.85 44.37 19.94 44.37 20.05C44.37 20.16 44.46 20.25 44.57 20.25L50.83 20.25C50.94 20.25 51.03 20.16 51.03 20.05Z"/><path d="M72.95 21.6L72.5 21.6C72.04 22.95 70.84 24.05 69.3 24.58C69.01 24.67 67.77 25.1 65.11 25.1L57.44 25.1L63.7 17.35C63.83 17.19 63.87 17.14 63.87 17.07C63.87 16.99 63.85 16.98 63.74 16.81L57.87 8.76L65.02 8.76C67.08 8.76 71.23 8.89 72.5 12.26L72.95 12.26L71.39 8.04L56.43 8.04C55.94 8.04 55.92 8.06 55.92 8.62L62.51 17.68L56.1 25.61C55.96 25.79 55.94 25.82 55.94 25.9C55.94 26.09 56.1 26.09 56.43 26.09L71.39 26.09Z"/><path d="M63.88 5.04L63.88 4.82L63.65 4.82C63.02 4.82 63 4.75 63 4.49L63 0.56C63 0.39 63 0.38 62.84 0.38C62.41 0.83 61.79 0.83 61.57 0.83L61.57 1.04C61.71 1.04 62.12 1.04 62.48 0.86L62.48 4.49C62.48 4.74 62.46 4.82 61.83 4.82L61.61 4.82L61.61 5.04C61.85 5.02 62.46 5.02 62.74 5.02C63.02 5.02 63.63 5.02 63.88 5.04Z"/><path d="M67.66 2.8C67.66 2.24 67.63 1.68 67.38 1.16C67.06 0.49 66.49 0.38 66.19 0.38C65.77 0.38 65.26 0.56 64.98 1.21C64.75 1.69 64.72 2.24 64.72 2.8C64.72 3.32 64.74 3.95 65.03 4.49C65.33 5.05 65.84 5.19 66.19 5.19C66.56 5.19 67.1 5.05 67.4 4.38C67.63 3.9 67.66 3.35 67.66 2.8ZM67.08 2.72C67.08 3.24 67.08 3.72 67.01 4.16C66.9 4.83 66.5 5.04 66.19 5.04C65.91 5.04 65.5 4.86 65.37 4.19C65.3 3.77 65.3 3.13 65.3 2.72C65.3 2.27 65.3 1.81 65.35 1.43C65.49 0.59 66.01 0.53 66.19 0.53C66.42 0.53 66.88 0.66 67.01 1.35C67.08 1.74 67.08 2.27 67.08 2.72Z"/><path d="M60.73 32.26L60.73 32.05C60.26 32.05 60.24 32.01 60.24 31.74L60.24 29.17L59.26 29.25L59.26 29.46C59.71 29.46 59.77 29.5 59.77 29.85L59.77 31.73C59.77 32.05 59.7 32.05 59.23 32.05L59.23 32.26L60 32.24C60.24 32.24 60.49 32.26 60.73 32.26ZM60.34 28.03C60.34 27.85 60.18 27.66 59.97 27.66C59.73 27.66 59.59 27.86 59.59 28.03C59.59 28.22 59.75 28.41 59.96 28.41C60.2 28.41 60.34 28.21 60.34 28.03Z"/><path d="M66 29.83C66 29.76 65.93 29.69 65.86 29.69L61.48 29.69C61.4 29.69 61.34 29.76 61.34 29.83C61.34 29.91 61.4 29.97 61.48 29.97L65.86 29.97C65.93 29.97 66 29.91 66 29.83ZM66 31.19C66 31.11 65.93 31.05 65.86 31.05L61.48 31.05C61.4 31.05 61.34 31.11 61.34 31.19C61.34 31.27 61.4 31.33 61.48 31.33L65.86 31.33C65.93 31.33 66 31.27 66 31.19Z"/><path d="M69.32 32.26L69.32 32.05L69.1 32.05C68.47 32.05 68.45 31.97 68.45 31.71L68.45 27.78C68.45 27.61 68.45 27.6 68.29 27.6C67.85 28.05 67.24 28.05 67.01 28.05L67.01 28.27C67.15 28.27 67.57 28.27 67.93 28.08L67.93 31.71C67.93 31.96 67.91 32.05 67.28 32.05L67.05 32.05L67.05 32.26C67.3 32.24 67.91 32.24 68.19 32.24C68.47 32.24 69.08 32.24 69.32 32.26Z"/><rect x="73.98" y="18.88" width="37.35" height="0.4"/><path d="M88.08 11.08C88.08 10.94 87.98 10.68 87.66 10.68C87.5 10.68 87.14 10.73 86.79 11.06C86.45 10.79 86.1 10.77 85.92 10.77C85.16 10.77 84.6 11.33 84.6 11.96C84.6 12.33 84.78 12.64 84.98 12.81C84.87 12.93 84.73 13.2 84.73 13.49C84.73 13.74 84.83 14.06 85.09 14.22C84.6 14.36 84.33 14.71 84.33 15.04C84.33 15.63 85.15 16.08 86.15 16.08C87.11 16.08 87.97 15.66 87.97 15.02C87.97 14.74 87.85 14.32 87.43 14.09C87 13.86 86.52 13.86 86.02 13.86C85.82 13.86 85.46 13.86 85.41 13.85C85.15 13.82 84.97 13.56 84.97 13.3C84.97 13.27 84.97 13.08 85.11 12.92C85.43 13.15 85.77 13.17 85.92 13.17C86.69 13.17 87.25 12.6 87.25 11.97C87.25 11.67 87.12 11.37 86.92 11.18C87.21 10.9 87.51 10.86 87.65 10.86C87.65 10.86 87.71 10.86 87.74 10.87C87.65 10.9 87.61 10.99 87.61 11.09C87.61 11.23 87.71 11.33 87.84 11.33C87.92 11.33 88.08 11.27 88.08 11.08ZM86.64 11.96C86.64 12.19 86.63 12.45 86.51 12.65C86.44 12.75 86.25 12.98 85.92 12.98C85.21 12.98 85.21 12.16 85.21 11.97C85.21 11.75 85.22 11.49 85.34 11.28C85.41 11.19 85.6 10.96 85.92 10.96C86.64 10.96 86.64 11.78 86.64 11.96ZM87.54 15.04C87.54 15.48 86.96 15.89 86.15 15.89C85.33 15.89 84.76 15.47 84.76 15.04C84.76 14.66 85.07 14.36 85.43 14.33L85.92 14.33C86.62 14.33 87.54 14.33 87.54 15.04Z"/><path d="M92.16 13.66L92.16 13.2L91.96 13.2L91.96 13.66C91.96 14.14 91.75 14.19 91.66 14.19C91.39 14.19 91.36 13.82 91.36 13.78L91.36 12.14C91.36 11.79 91.36 11.47 91.07 11.17C90.75 10.85 90.34 10.72 89.94 10.72C89.27 10.72 88.7 11.1 88.7 11.64C88.7 11.89 88.87 12.03 89.08 12.03C89.31 12.03 89.46 11.87 89.46 11.65C89.46 11.55 89.42 11.28 89.04 11.28C89.26 10.99 89.66 10.9 89.93 10.9C90.33 10.9 90.79 11.22 90.79 11.95L90.79 12.25C90.38 12.28 89.8 12.3 89.29 12.55C88.67 12.83 88.47 13.25 88.47 13.61C88.47 14.28 89.26 14.48 89.78 14.48C90.32 14.48 90.7 14.15 90.85 13.77C90.89 14.1 91.11 14.44 91.49 14.44C91.66 14.44 92.16 14.33 92.16 13.66ZM90.79 13.24C90.79 14.02 90.2 14.3 89.84 14.3C89.43 14.3 89.1 14.01 89.1 13.6C89.1 13.15 89.44 12.47 90.79 12.42Z"/><path d="M94.33 14.39L94.33 14.14C93.79 14.14 93.76 14.1 93.76 13.78L93.76 10.77L92.61 10.86L92.61 11.11C93.14 11.11 93.21 11.16 93.21 11.56L93.21 13.77C93.21 14.14 93.12 14.14 92.57 14.14L92.57 14.39L93.48 14.37C93.76 14.37 94.05 14.38 94.33 14.39ZM93.88 9.44C93.88 9.22 93.69 9 93.44 9C93.16 9 93 9.23 93 9.44C93 9.66 93.19 9.87 93.44 9.87C93.71 9.87 93.88 9.64 93.88 9.44Z"/><path d="M98.97 14.39L98.97 14.14C98.54 14.14 98.34 14.14 98.33 13.89L98.33 12.33C98.33 11.62 98.33 11.37 98.08 11.07C97.96 10.93 97.69 10.77 97.22 10.77C96.62 10.77 96.23 11.12 96 11.63L96 10.77L94.85 10.86L94.85 11.11C95.42 11.11 95.49 11.17 95.49 11.57L95.49 13.77C95.49 14.14 95.4 14.14 94.85 14.14L94.85 14.39L95.77 14.37L96.69 14.39L96.69 14.14C96.14 14.14 96.05 14.14 96.05 13.77L96.05 12.26C96.05 11.41 96.63 10.95 97.16 10.95C97.67 10.95 97.76 11.39 97.76 11.86L97.76 13.77C97.76 14.14 97.67 14.14 97.13 14.14L97.13 14.39L98.05 14.37Z"/><path d="M101.02 16.42L101.02 16.24C100.64 16.24 100.62 16.21 100.62 15.99L100.62 13.88L99.81 13.94L99.81 14.12C100.19 14.12 100.24 14.16 100.24 14.44L100.24 15.98C100.24 16.24 100.18 16.24 99.79 16.24L99.79 16.42L100.42 16.4C100.62 16.4 100.82 16.41 101.02 16.42ZM100.7 12.95C100.7 12.8 100.57 12.65 100.4 12.65C100.2 12.65 100.09 12.81 100.09 12.95C100.09 13.11 100.22 13.25 100.39 13.25C100.59 13.25 100.7 13.09 100.7 12.95Z"/><path d="M78.27 26.38L78.27 26.13C77.72 26.13 77.63 26.13 77.63 25.76L77.63 20.69L76.45 20.78L76.45 21.04C77.02 21.04 77.09 21.1 77.09 21.5L77.09 25.76C77.09 26.13 77 26.13 76.45 26.13L76.45 26.38L77.36 26.36Z"/><path d="M82.32 24.63C82.32 23.58 81.5 22.71 80.51 22.71C79.48 22.71 78.69 23.6 78.69 24.63C78.69 25.69 79.54 26.47 80.5 26.47C81.49 26.47 82.32 25.67 82.32 24.63ZM81.64 24.56C81.64 24.86 81.64 25.3 81.46 25.66C81.28 26.03 80.92 26.27 80.51 26.27C80.15 26.27 79.79 26.1 79.57 25.72C79.37 25.36 79.37 24.86 79.37 24.56C79.37 24.24 79.37 23.8 79.56 23.44C79.78 23.06 80.17 22.89 80.5 22.89C80.86 22.89 81.21 23.07 81.42 23.42C81.64 23.78 81.64 24.25 81.64 24.56Z"/><path d="M86.53 23.07C86.53 22.93 86.43 22.67 86.12 22.67C85.95 22.67 85.59 22.72 85.25 23.05C84.9 22.78 84.56 22.76 84.38 22.76C83.61 22.76 83.05 23.33 83.05 23.96C83.05 24.32 83.23 24.63 83.43 24.8C83.33 24.92 83.18 25.19 83.18 25.48C83.18 25.74 83.29 26.05 83.54 26.21C83.05 26.35 82.79 26.7 82.79 27.03C82.79 27.62 83.6 28.07 84.6 28.07C85.57 28.07 86.42 27.65 86.42 27.02C86.42 26.73 86.3 26.31 85.89 26.08C85.45 25.85 84.98 25.85 84.48 25.85C84.27 25.85 83.92 25.85 83.86 25.84C83.6 25.81 83.43 25.56 83.43 25.29C83.43 25.26 83.43 25.07 83.56 24.91C83.88 25.14 84.22 25.16 84.38 25.16C85.14 25.16 85.71 24.6 85.71 23.96C85.71 23.66 85.57 23.36 85.37 23.17C85.66 22.89 85.96 22.85 86.11 22.85C86.11 22.85 86.16 22.85 86.19 22.86C86.1 22.89 86.06 22.98 86.06 23.08C86.06 23.22 86.16 23.32 86.3 23.32C86.38 23.32 86.53 23.26 86.53 23.07ZM85.09 23.96C85.09 24.18 85.08 24.44 84.96 24.65C84.89 24.74 84.7 24.97 84.38 24.97C83.66 24.97 83.66 24.15 83.66 23.96C83.66 23.74 83.67 23.48 83.79 23.28C83.86 23.18 84.05 22.95 84.38 22.95C85.09 22.95 85.09 23.77 85.09 23.96ZM85.99 27.03C85.99 27.47 85.41 27.88 84.61 27.88C83.78 27.88 83.21 27.47 83.21 27.03C83.21 26.65 83.52 26.35 83.88 26.33L84.37 26.33C85.07 26.33 85.99 26.33 85.99 27.03Z"/><path d="M89.69 27.41L89.55 27.41C89.52 27.58 89.48 27.84 89.42 27.92C89.38 27.97 89 27.97 88.88 27.97L87.84 27.97L88.45 27.38C89.35 26.58 89.69 26.27 89.69 25.7C89.69 25.05 89.18 24.59 88.48 24.59C87.83 24.59 87.4 25.11 87.4 25.63C87.4 25.95 87.69 25.95 87.71 25.95C87.8 25.95 88.01 25.88 88.01 25.64C88.01 25.49 87.9 25.34 87.7 25.34C87.66 25.34 87.64 25.34 87.63 25.35C87.76 24.98 88.07 24.76 88.4 24.76C88.92 24.76 89.17 25.23 89.17 25.7C89.17 26.16 88.88 26.61 88.57 26.97L87.47 28.2C87.4 28.26 87.4 28.27 87.4 28.41L89.53 28.41Z"/><path d="M92.71 28.34C92.71 28.31 92.69 28.29 92.68 28.27C91.82 27.63 91.26 25.99 91.26 24.68L91.26 23.99C91.26 22.68 91.82 21.04 92.68 20.4C92.69 20.38 92.71 20.36 92.71 20.33C92.71 20.29 92.67 20.25 92.63 20.25C92.61 20.25 92.59 20.26 92.58 20.27C91.67 20.95 90.81 22.59 90.81 23.99L90.81 24.68C90.81 26.08 91.67 27.72 92.58 28.4C92.59 28.41 92.61 28.42 92.63 28.42C92.67 28.42 92.71 28.38 92.71 28.34Z"/><path d="M95.2 26.38L95.2 26.13C94.66 26.13 94.63 26.09 94.63 25.77L94.63 22.76L93.48 22.85L93.48 23.1C94.01 23.1 94.09 23.15 94.09 23.55L94.09 25.76C94.09 26.13 94 26.13 93.45 26.13L93.45 26.38L94.35 26.36C94.63 26.36 94.92 26.38 95.2 26.38ZM94.75 21.43C94.75 21.21 94.56 21 94.32 21C94.04 21 93.87 21.23 93.87 21.43C93.87 21.65 94.06 21.87 94.31 21.87C94.59 21.87 94.75 21.64 94.75 21.43Z"/><path d="M101.38 24.33C101.38 24.24 101.3 24.17 101.21 24.17L98.81 24.17L98.81 21.77C98.81 21.68 98.73 21.6 98.64 21.6C98.55 21.6 98.48 21.68 98.48 21.77L98.48 24.17L96.08 24.17C95.99 24.17 95.91 24.24 95.91 24.33C95.91 24.42 95.99 24.5 96.08 24.5L98.48 24.5L98.48 26.9C98.48 26.99 98.55 27.06 98.64 27.06C98.73 27.06 98.81 26.99 98.81 26.9L98.81 24.5L101.21 24.5C101.3 24.5 101.38 24.42 101.38 24.33Z"/><path d="M105.27 26.38L105.27 26.13L105.01 26.13C104.27 26.13 104.25 26.04 104.25 25.74L104.25 21.14C104.25 20.94 104.25 20.92 104.06 20.92C103.55 21.45 102.83 21.45 102.56 21.45L102.56 21.7C102.73 21.7 103.21 21.7 103.64 21.49L103.64 25.74C103.64 26.03 103.61 26.13 102.88 26.13L102.61 26.13L102.61 26.38C102.9 26.36 103.61 26.36 103.94 26.36C104.27 26.36 104.98 26.36 105.27 26.38Z"/><path d="M108.3 24.68L108.3 23.99C108.3 22.59 107.44 20.95 106.53 20.27C106.52 20.26 106.5 20.25 106.48 20.25C106.44 20.25 106.4 20.29 106.4 20.33C106.4 20.36 106.42 20.38 106.43 20.4C107.29 21.04 107.85 22.68 107.85 23.99L107.85 24.68C107.85 25.99 107.29 27.63 106.43 28.27C106.42 28.29 106.4 28.31 106.4 28.34C106.4 28.38 106.44 28.42 106.48 28.42C106.5 28.42 106.52 28.41 106.53 28.4C107.44 27.72 108.3 26.08 108.3 24.68Z"/></svg><math class="td-math-a11y" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>D</mi><mi>C</mi><mi>G</mi><mtext>@</mtext><mn>1</mn><mn>0</mn><mtext> </mtext><mtext>=</mtext><mtext> </mtext><msubsup><mrow><mo>∑</mo></mrow><mrow><mrow><mi>i</mi><mtext>=</mtext><mn>1</mn></mrow></mrow><mrow><mrow><mn>1</mn><mn>0</mn></mrow></mrow></msubsup><mfrac><mrow><mrow><mi>g</mi><mi>a</mi><mi>i</mi><msub><mrow><mi>n</mi></mrow><mrow><mi>i</mi></mrow></msub></mrow></mrow><mrow><mrow><msub><mrow><mo>log</mo></mrow><mrow><mn>2</mn></mrow></msub><mtext>(</mtext><mi>i</mi><mtext>+</mtext><mn>1</mn><mtext>)</mtext></mrow></mrow></mfrac></mrow></math></div>
<div class="td-math td-math-display"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 101.03 18.22" fill="currentColor" aria-hidden="true" style="width:10.1em;height:1.82em;vertical-align:-0.66em"><path d="M5.35 11.61L5.35 11.3C4.83 11.3 4.58 11.3 4.57 11L4.57 9.09C4.57 8.23 4.57 7.92 4.26 7.56C4.12 7.39 3.79 7.19 3.21 7.19C2.48 7.19 2.01 7.62 1.73 8.24L1.73 7.19L0.32 7.3L0.32 7.61C1.02 7.61 1.1 7.68 1.1 8.17L1.1 10.85C1.1 11.3 0.99 11.3 0.32 11.3L0.32 11.61L1.45 11.58L2.57 11.61L2.57 11.3C1.9 11.3 1.79 11.3 1.79 10.85L1.79 9.01C1.79 7.97 2.5 7.41 3.14 7.41C3.77 7.41 3.88 7.95 3.88 8.52L3.88 10.85C3.88 11.3 3.77 11.3 3.1 11.3L3.1 11.61L4.23 11.58Z"/><path d="M12.63 8.25C12.63 6.35 11.28 4.78 9.57 4.78L5.91 4.78L5.91 5.09L6.15 5.09C6.92 5.09 6.94 5.2 6.94 5.56L6.94 10.83C6.94 11.19 6.92 11.3 6.15 11.3L5.91 11.3L5.91 11.61L9.57 11.61C11.25 11.61 12.63 10.13 12.63 8.25ZM11.63 8.25C11.63 9.36 11.44 9.96 11.08 10.45C10.88 10.72 10.31 11.3 9.3 11.3L8.29 11.3C7.82 11.3 7.8 11.23 7.8 10.9L7.8 5.49C7.8 5.16 7.82 5.09 8.29 5.09L9.29 5.09C9.91 5.09 10.6 5.31 11.11 6.02C11.54 6.61 11.63 7.47 11.63 8.25Z"/><path d="M19.85 9.28C19.85 9.18 19.85 9.11 19.72 9.11C19.61 9.11 19.61 9.17 19.6 9.27C19.52 10.7 18.45 11.52 17.36 11.52C16.75 11.52 14.79 11.18 14.79 8.2C14.79 5.21 16.74 4.87 17.35 4.87C18.44 4.87 19.33 5.78 19.53 7.24C19.55 7.38 19.55 7.41 19.69 7.41C19.85 7.41 19.85 7.38 19.85 7.17L19.85 4.8C19.85 4.63 19.85 4.56 19.74 4.56C19.7 4.56 19.66 4.56 19.58 4.68L19.08 5.42C18.71 5.06 18.2 4.56 17.24 4.56C15.37 4.56 13.76 6.15 13.76 8.19C13.76 10.26 15.38 11.83 17.24 11.83C18.87 11.83 19.85 10.44 19.85 9.28Z"/><path d="M27.77 9.19L27.77 8.88L26.55 8.91C26.15 8.91 25.3 8.91 24.94 8.88L24.94 9.19L25.26 9.19C26.16 9.19 26.19 9.3 26.19 9.67L26.19 10.31C26.19 11.43 24.92 11.52 24.64 11.52C23.99 11.52 22.01 11.17 22.01 8.19C22.01 5.2 23.98 4.87 24.58 4.87C25.65 4.87 26.56 5.77 26.76 7.24C26.78 7.38 26.78 7.41 26.92 7.41C27.08 7.41 27.08 7.38 27.08 7.17L27.08 4.8C27.08 4.63 27.08 4.56 26.97 4.56C26.93 4.56 26.89 4.56 26.81 4.68L26.31 5.42C25.99 5.1 25.45 4.56 24.46 4.56C22.6 4.56 20.98 6.14 20.98 8.19C20.98 10.24 22.58 11.83 24.48 11.83C25.21 11.83 26.01 11.57 26.35 10.98C26.48 11.2 26.88 11.6 26.99 11.6C27.08 11.6 27.08 11.52 27.08 11.37L27.08 9.63C27.08 9.24 27.12 9.19 27.77 9.19Z"/><path d="M35.48 8.23C35.48 5.89 33.77 4.56 32.16 4.56C30.33 4.56 28.83 6.15 28.83 8.14C28.83 10.02 30.21 11.72 32.21 11.72C32.73 11.72 33.37 11.65 34.01 11.5C34.27 11.44 35.47 11.09 35.47 10.93C35.47 10.83 35.4 10.83 35.24 10.83L35.15 10.83C34.99 10.83 34.97 10.83 34.92 10.86C34.07 11.26 33.14 11.5 32.2 11.5C30.38 11.5 29.08 9.93 29.08 8.14C29.08 6.23 30.51 4.78 32.15 4.78C33.52 4.78 35.23 5.88 35.23 8.29C35.23 9.21 35.16 10.11 34.5 10.11C34.15 10.11 34.15 9.6 34.15 9.45L34.15 7.04C34.15 6.81 34.14 6.8 33.91 6.8L33.74 6.8C33.58 6.8 33.57 6.79 33.51 6.72C33.05 6.09 32.53 5.95 32.14 5.95C31.11 5.95 30.16 6.88 30.16 8.14C30.16 9.4 31.11 10.33 32.14 10.33C32.68 10.33 33.16 10.04 33.46 9.62C33.56 10.14 34.08 10.33 34.46 10.33C35.34 10.33 35.48 9.3 35.48 8.23ZM33.46 8.99C33.46 9.17 33.46 9.21 33.32 9.42C32.88 10.05 32.37 10.11 32.17 10.11C31.45 10.11 30.85 9.25 30.85 8.14C30.85 7.03 31.44 6.17 32.17 6.17C32.49 6.17 32.97 6.33 33.33 6.89C33.46 7.08 33.46 7.11 33.46 7.29Z"/><path d="M40.24 11.61L40.24 11.3L39.92 11.3C39.02 11.3 38.99 11.19 38.99 10.82L38.99 5.21C38.99 4.97 38.99 4.95 38.76 4.95C38.14 5.59 37.26 5.59 36.94 5.59L36.94 5.9C37.14 5.9 37.73 5.9 38.25 5.64L38.25 10.82C38.25 11.18 38.22 11.3 37.32 11.3L37 11.3L37 11.61C37.35 11.58 38.22 11.58 38.62 11.58C39.02 11.58 39.89 11.58 40.24 11.61Z"/><path d="M45.65 8.41C45.65 7.61 45.6 6.81 45.25 6.07C44.79 5.11 43.97 4.95 43.55 4.95C42.95 4.95 42.22 5.21 41.81 6.14C41.49 6.83 41.44 7.61 41.44 8.41C41.44 9.16 41.48 10.06 41.89 10.82C42.32 11.63 43.05 11.83 43.54 11.83C44.08 11.83 44.84 11.62 45.28 10.67C45.6 9.98 45.65 9.2 45.65 8.41ZM44.82 8.29C44.82 9.04 44.82 9.72 44.71 10.36C44.56 11.31 43.99 11.61 43.54 11.61C43.15 11.61 42.56 11.36 42.38 10.4C42.27 9.8 42.27 8.88 42.27 8.29C42.27 7.65 42.27 6.99 42.35 6.45C42.54 5.26 43.29 5.17 43.54 5.17C43.87 5.17 44.53 5.35 44.72 6.34C44.82 6.9 44.82 7.66 44.82 8.29Z"/><path d="M56.59 8.14C56.59 8.03 56.5 7.94 56.39 7.94L50.13 7.94C50.02 7.94 49.93 8.03 49.93 8.14C49.93 8.25 50.02 8.34 50.13 8.34L56.39 8.34C56.5 8.34 56.59 8.25 56.59 8.14ZM56.59 10.08C56.59 9.97 56.5 9.88 56.39 9.88L50.13 9.88C50.02 9.88 49.93 9.97 49.93 10.08C49.93 10.19 50.02 10.28 50.13 10.28L56.39 10.28C56.5 10.28 56.59 10.19 56.59 10.08Z"/><rect x="60.47" y="8.91" width="40.56" height="0.4"/><path d="M69.95 3.15C69.95 1.59 68.84 0.3 67.44 0.3L64.44 0.3L64.44 0.56L64.63 0.56C65.27 0.56 65.28 0.65 65.28 0.94L65.28 5.26C65.28 5.56 65.27 5.65 64.63 5.65L64.44 5.65L64.44 5.9L67.44 5.9C68.82 5.9 69.95 4.69 69.95 3.15ZM69.13 3.15C69.13 4.06 68.97 4.55 68.68 4.95C68.51 5.17 68.05 5.65 67.22 5.65L66.39 5.65C66 5.65 65.99 5.59 65.99 5.32L65.99 0.89C65.99 0.62 66 0.56 66.39 0.56L67.21 0.56C67.72 0.56 68.28 0.74 68.7 1.32C69.05 1.8 69.13 2.51 69.13 3.15Z"/><path d="M75.87 3.99C75.87 3.91 75.87 3.85 75.76 3.85C75.67 3.85 75.67 3.9 75.66 3.99C75.6 5.16 74.72 5.83 73.83 5.83C73.33 5.83 71.72 5.55 71.72 3.11C71.72 0.66 73.32 0.38 73.82 0.38C74.71 0.38 75.44 1.12 75.61 2.32C75.62 2.44 75.62 2.46 75.74 2.46C75.87 2.46 75.87 2.44 75.87 2.26L75.87 0.32C75.87 0.18 75.87 0.12 75.78 0.12C75.74 0.12 75.71 0.12 75.65 0.22L75.24 0.83C74.93 0.53 74.51 0.12 73.73 0.12C72.19 0.12 70.87 1.43 70.87 3.1C70.87 4.8 72.2 6.08 73.73 6.08C75.06 6.08 75.87 4.94 75.87 3.99Z"/><path d="M82.36 3.92L82.36 3.67L81.36 3.69C81.03 3.69 80.34 3.69 80.04 3.67L80.04 3.92L80.3 3.92C81.04 3.92 81.07 4.01 81.07 4.31L81.07 4.84C81.07 5.76 80.03 5.83 79.8 5.83C79.26 5.83 77.64 5.54 77.64 3.1C77.64 0.65 79.25 0.38 79.75 0.38C80.62 0.38 81.37 1.12 81.53 2.32C81.55 2.44 81.55 2.46 81.67 2.46C81.8 2.46 81.8 2.44 81.8 2.26L81.8 0.32C81.8 0.18 81.8 0.12 81.71 0.12C81.67 0.12 81.64 0.12 81.58 0.22L81.17 0.83C80.9 0.57 80.46 0.12 79.65 0.12C78.12 0.12 76.79 1.42 76.79 3.1C76.79 4.78 78.11 6.08 79.66 6.08C80.26 6.08 80.92 5.87 81.2 5.39C81.3 5.57 81.63 5.9 81.72 5.9C81.8 5.9 81.8 5.83 81.8 5.71L81.8 4.28C81.8 3.96 81.83 3.92 82.36 3.92Z"/><path d="M88.68 3.13C88.68 1.21 87.28 0.12 85.96 0.12C84.46 0.12 83.23 1.43 83.23 3.06C83.23 4.6 84.36 5.99 86 5.99C86.43 5.99 86.95 5.94 87.48 5.81C87.69 5.76 88.68 5.48 88.68 5.35C88.68 5.26 88.62 5.26 88.49 5.26L88.41 5.26C88.28 5.26 88.27 5.26 88.23 5.29C87.53 5.62 86.77 5.81 85.99 5.81C84.5 5.81 83.44 4.53 83.44 3.06C83.44 1.49 84.61 0.3 85.95 0.3C87.08 0.3 88.48 1.21 88.48 3.18C88.48 3.94 88.42 4.67 87.88 4.67C87.59 4.67 87.59 4.26 87.59 4.13L87.59 2.16C87.59 1.97 87.59 1.96 87.4 1.96L87.26 1.96C87.13 1.96 87.12 1.95 87.07 1.89C86.69 1.38 86.27 1.26 85.95 1.26C85.1 1.26 84.32 2.03 84.32 3.06C84.32 4.09 85.1 4.85 85.95 4.85C86.39 4.85 86.78 4.62 87.03 4.27C87.11 4.7 87.54 4.85 87.85 4.85C88.57 4.85 88.68 4.01 88.68 3.13ZM87.03 3.76C87.03 3.9 87.03 3.94 86.91 4.11C86.55 4.62 86.13 4.67 85.97 4.67C85.38 4.67 84.89 3.97 84.89 3.06C84.89 2.15 85.37 1.44 85.97 1.44C86.23 1.44 86.63 1.57 86.92 2.03C87.03 2.19 87.03 2.21 87.03 2.36Z"/><path d="M92.59 5.9L92.59 5.65L92.33 5.65C91.59 5.65 91.56 5.56 91.56 5.26L91.56 0.66C91.56 0.46 91.56 0.44 91.37 0.44C90.87 0.97 90.14 0.97 89.88 0.97L89.88 1.22C90.05 1.22 90.53 1.22 90.96 1.01L90.96 5.26C90.96 5.55 90.93 5.65 90.19 5.65L89.93 5.65L89.93 5.9C90.22 5.88 90.93 5.88 91.26 5.88C91.59 5.88 92.3 5.88 92.59 5.9Z"/><path d="M97.02 3.28C97.02 2.62 96.98 1.97 96.7 1.36C96.32 0.57 95.65 0.44 95.3 0.44C94.81 0.44 94.21 0.66 93.88 1.42C93.61 1.98 93.57 2.62 93.57 3.28C93.57 3.9 93.6 4.63 93.94 5.26C94.29 5.92 94.89 6.08 95.29 6.08C95.74 6.08 96.36 5.91 96.72 5.13C96.98 4.57 97.02 3.93 97.02 3.28ZM96.34 3.18C96.34 3.8 96.34 4.35 96.25 4.88C96.13 5.66 95.66 5.9 95.29 5.9C94.97 5.9 94.49 5.7 94.34 4.91C94.25 4.42 94.25 3.67 94.25 3.18C94.25 2.66 94.25 2.12 94.32 1.67C94.47 0.7 95.09 0.62 95.29 0.62C95.56 0.62 96.11 0.77 96.26 1.58C96.34 2.04 96.34 2.67 96.34 3.18Z"/><path d="M65.4 16.41L65.4 16.16L65.19 16.16C64.54 16.16 64.52 16.07 64.52 15.77L64.52 11.45C64.52 11.16 64.54 11.07 65.19 11.07L65.4 11.07L65.4 10.81C65.11 10.84 64.47 10.84 64.15 10.84C63.83 10.84 63.19 10.84 62.9 10.81L62.9 11.07L63.11 11.07C63.76 11.07 63.79 11.16 63.79 11.45L63.79 15.77C63.79 16.07 63.76 16.16 63.11 16.16L62.9 16.16L62.9 16.41C63.19 16.39 63.83 16.39 64.15 16.39C64.47 16.39 65.11 16.39 65.4 16.41Z"/><path d="M71.43 13.66C71.43 12.1 70.32 10.81 68.92 10.81L65.92 10.81L65.92 11.07L66.11 11.07C66.75 11.07 66.76 11.16 66.76 11.45L66.76 15.77C66.76 16.07 66.75 16.16 66.11 16.16L65.92 16.16L65.92 16.41L68.92 16.41C70.3 16.41 71.43 15.2 71.43 13.66ZM70.61 13.66C70.61 14.57 70.45 15.06 70.16 15.46C69.99 15.68 69.53 16.16 68.7 16.16L67.87 16.16C67.48 16.16 67.47 16.1 67.47 15.83L67.47 11.39C67.47 11.12 67.48 11.07 67.87 11.07L68.69 11.07C69.2 11.07 69.76 11.25 70.18 11.83C70.53 12.31 70.61 13.02 70.61 13.66Z"/><path d="M77.35 14.5C77.35 14.42 77.35 14.36 77.24 14.36C77.15 14.36 77.15 14.41 77.14 14.49C77.08 15.67 76.2 16.34 75.31 16.34C74.81 16.34 73.2 16.06 73.2 13.62C73.2 11.16 74.8 10.89 75.3 10.89C76.19 10.89 76.92 11.63 77.09 12.83C77.1 12.94 77.1 12.97 77.22 12.97C77.35 12.97 77.35 12.94 77.35 12.77L77.35 10.83C77.35 10.69 77.35 10.63 77.26 10.63C77.22 10.63 77.19 10.63 77.13 10.73L76.72 11.34C76.41 11.04 75.99 10.63 75.21 10.63C73.67 10.63 72.35 11.93 72.35 13.61C72.35 15.31 73.68 16.59 75.21 16.59C76.54 16.59 77.35 15.45 77.35 14.5Z"/><path d="M83.84 14.43L83.84 14.17L82.84 14.2C82.51 14.2 81.82 14.2 81.52 14.17L81.52 14.43L81.78 14.43C82.52 14.43 82.55 14.52 82.55 14.82L82.55 15.35C82.55 16.26 81.51 16.34 81.28 16.34C80.74 16.34 79.12 16.05 79.12 13.61C79.12 11.16 80.73 10.89 81.23 10.89C82.1 10.89 82.85 11.62 83.01 12.83C83.03 12.94 83.03 12.97 83.15 12.97C83.28 12.97 83.28 12.94 83.28 12.77L83.28 10.83C83.28 10.69 83.28 10.63 83.19 10.63C83.15 10.63 83.12 10.63 83.06 10.73L82.65 11.34C82.38 11.07 81.94 10.63 81.13 10.63C79.6 10.63 78.27 11.93 78.27 13.61C78.27 15.29 79.59 16.59 81.14 16.59C81.74 16.59 82.4 16.38 82.68 15.9C82.78 16.08 83.11 16.4 83.2 16.4C83.28 16.4 83.28 16.34 83.28 16.22L83.28 14.79C83.28 14.47 83.31 14.43 83.84 14.43Z"/><path d="M90.16 13.64C90.16 11.72 88.76 10.63 87.44 10.63C85.94 10.63 84.71 11.93 84.71 13.57C84.71 15.11 85.84 16.5 87.48 16.5C87.91 16.5 88.43 16.44 88.96 16.32C89.17 16.27 90.16 15.99 90.16 15.85C90.16 15.77 90.1 15.77 89.97 15.77L89.89 15.77C89.76 15.77 89.75 15.77 89.71 15.8C89.01 16.13 88.25 16.32 87.48 16.32C85.98 16.32 84.92 15.03 84.92 13.57C84.92 12 86.09 10.81 87.43 10.81C88.56 10.81 89.96 11.71 89.96 13.69C89.96 14.44 89.9 15.18 89.36 15.18C89.07 15.18 89.07 14.76 89.07 14.64L89.07 12.66C89.07 12.48 89.07 12.47 88.88 12.47L88.74 12.47C88.61 12.47 88.6 12.46 88.55 12.4C88.17 11.89 87.75 11.77 87.43 11.77C86.58 11.77 85.8 12.53 85.8 13.57C85.8 14.6 86.58 15.36 87.43 15.36C87.87 15.36 88.26 15.12 88.51 14.78C88.59 15.21 89.02 15.36 89.33 15.36C90.05 15.36 90.16 14.52 90.16 13.64ZM88.51 14.26C88.51 14.41 88.51 14.44 88.39 14.62C88.03 15.13 87.61 15.18 87.45 15.18C86.86 15.18 86.37 14.48 86.37 13.57C86.37 12.66 86.85 11.95 87.45 11.95C87.71 11.95 88.11 12.08 88.4 12.54C88.51 12.7 88.51 12.72 88.51 12.87Z"/><path d="M94.07 16.41L94.07 16.16L93.81 16.16C93.07 16.16 93.04 16.07 93.04 15.76L93.04 11.16C93.04 10.97 93.04 10.95 92.85 10.95C92.35 11.48 91.62 11.48 91.36 11.48L91.36 11.73C91.53 11.73 92.01 11.73 92.44 11.52L92.44 15.76C92.44 16.06 92.41 16.16 91.67 16.16L91.41 16.16L91.41 16.41C91.7 16.39 92.41 16.39 92.74 16.39C93.07 16.39 93.78 16.39 94.07 16.41Z"/><path d="M98.5 13.79C98.5 13.13 98.46 12.48 98.18 11.87C97.8 11.08 97.13 10.95 96.78 10.95C96.29 10.95 95.69 11.16 95.36 11.93C95.09 12.49 95.05 13.13 95.05 13.79C95.05 14.4 95.08 15.14 95.42 15.76C95.77 16.43 96.37 16.59 96.77 16.59C97.22 16.59 97.84 16.42 98.2 15.64C98.46 15.08 98.5 14.44 98.5 13.79ZM97.82 13.69C97.82 14.3 97.82 14.86 97.73 15.39C97.61 16.17 97.14 16.41 96.77 16.41C96.45 16.41 95.97 16.21 95.82 15.42C95.73 14.93 95.73 14.17 95.73 13.69C95.73 13.16 95.73 12.62 95.8 12.18C95.95 11.21 96.57 11.13 96.77 11.13C97.04 11.13 97.59 11.28 97.74 12.09C97.82 12.55 97.82 13.17 97.82 13.69Z"/></svg><math class="td-math-a11y" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>n</mi><mi>D</mi><mi>C</mi><mi>G</mi><mtext>@</mtext><mn>1</mn><mn>0</mn><mtext> </mtext><mtext>=</mtext><mtext> </mtext><mfrac><mrow><mrow><mi>D</mi><mi>C</mi><mi>G</mi><mtext>@</mtext><mn>1</mn><mn>0</mn></mrow></mrow><mrow><mrow><mi>I</mi><mi>D</mi><mi>C</mi><mi>G</mi><mtext>@</mtext><mn>1</mn><mn>0</mn></mrow></mrow></mfrac></mrow></math></div>
<p><code>IDCG</code> je najbolji mogući redoslijed za isti skup proizvoda. Zato je idealni rezultat 1, a lošiji redoslijedi padaju prema 0.</p>
<p>Uz nDCG gledao sam još tri stvari:</p>
<ul><li><p><strong>MRR@10</strong> — koliko visoko se pojavljuje prvi Exact proizvod</p></li><li><p><strong>Exact Recall@10</strong> — koliki je udio svih Exact proizvoda završio među prvih deset</p></li><li><p><strong>bez Exacta u top 10</strong> — udio upita kod kojih kupac u prvih deset rezultata ne vidi nijedan točan proizvod</p></li></ul>
<p>Za prosječni <code>nDCG@10</code> izračunao sam i 95-postotne bootstrap intervale pouzdanosti s 2.000 uzoraka na razini upita.</p>
<h2>Rezultati: jedan krivi proizvod na vrhu nije sitnica</h2>
<table><thead><tr><th>Scenarij</th><th style="text-align:right">nDCG@10, prosjek (95% CI)</th><th style="text-align:right">MRR@10</th><th style="text-align:right">Exact Recall@10</th><th style="text-align:right">Bez Exacta u top 10</th></tr></thead><tbody><tr><td>Idealni redoslijed</td><td style="text-align:right">1,000 (1,000–1,000)</td><td style="text-align:right">1,000</td><td style="text-align:right">87,96%</td><td style="text-align:right">0,00%</td></tr><tr><td>Jedan nerelevantan prvi</td><td style="text-align:right">0,769 (0,768–0,770)</td><td style="text-align:right">0,500</td><td style="text-align:right">85,37%</td><td style="text-align:right">0,00%</td></tr><tr><td>Nasumični redoslijed</td><td style="text-align:right">0,535 (0,531–0,540)</td><td style="text-align:right">0,582</td><td style="text-align:right">53,04%</td><td style="text-align:right">5,24%</td></tr><tr><td>Exact rezultati zadnji</td><td style="text-align:right">0,196 (0,191–0,200)</td><td style="text-align:right">0,060</td><td style="text-align:right">13,80%</td><td style="text-align:right">64,49%</td></tr></tbody></table>
<figure class="td-chart td-chart-bar" data-td-chart-interactive>
<figcaption class="td-chart-caption">nDCG@10 u četiri kontrolirana scenarija — 5.041 ESCI upit</figcaption>
<div class="td-chart-frame">
<svg
  class="td-chart-svg"
  viewBox="0 0 720 360"
  role="img"
  aria-label="nDCG@10 u četiri kontrolirana scenarija — 5.041 ESCI upit"
>
<desc>bar chart with 4 labels and 1 series</desc>
<line
  class="td-chart-grid"
  x1="80"
  y1="302"
  x2="696"
  y2="302"
></line>
<text
  class="td-chart-value"
  x="70"
  y="306"
  text-anchor="end"
>0</text>
<line
  class="td-chart-grid"
  x1="80"
  y1="246.4"
  x2="696"
  y2="246.4"
></line>
<text
  class="td-chart-value"
  x="70"
  y="250.4"
  text-anchor="end"
>0.2</text>
<line
  class="td-chart-grid"
  x1="80"
  y1="190.8"
  x2="696"
  y2="190.8"
></line>
<text
  class="td-chart-value"
  x="70"
  y="194.8"
  text-anchor="end"
>0.4</text>
<line
  class="td-chart-grid"
  x1="80"
  y1="135.2"
  x2="696"
  y2="135.2"
></line>
<text
  class="td-chart-value"
  x="70"
  y="139.2"
  text-anchor="end"
>0.6</text>
<line
  class="td-chart-grid"
  x1="80"
  y1="79.6"
  x2="696"
  y2="79.6"
></line>
<text
  class="td-chart-value"
  x="70"
  y="83.6"
  text-anchor="end"
>0.8</text>
<line
  class="td-chart-grid"
  x1="80"
  y1="24"
  x2="696"
  y2="24"
></line>
<text
  class="td-chart-value"
  x="70"
  y="28"
  text-anchor="end"
>1</text>
<line
  class="td-chart-axis"
  x1="80"
  y1="302"
  x2="696"
  y2="302"
></line>
<line
  class="td-chart-axis"
  x1="80"
  y1="24"
  x2="80"
  y2="302"
></line>
<rect
  class="td-chart-bar td-chart-series-0"
  x="140"
  y="24"
  width="32"
  height="278"
  rx="4"
><title>Idealni redoslijed: 1</title></rect>
<rect
  class="td-chart-bar td-chart-series-0"
  x="294"
  y="88.22"
  width="32"
  height="213.78"
  rx="4"
><title>Nerelevantan prvi: 0.77</title></rect>
<rect
  class="td-chart-bar td-chart-series-0"
  x="448"
  y="153.27"
  width="32"
  height="148.73"
  rx="4"
><title>Nasumični redoslijed: 0.54</title></rect>
<rect
  class="td-chart-bar td-chart-series-0"
  x="602"
  y="247.51"
  width="32"
  height="54.49"
  rx="4"
><title>Exact rezultati zadnji: 0.2</title></rect>
<text
  class="td-chart-label"
  x="157"
  y="324"
  text-anchor="middle"
>Idealni redoslijed</text>
<text
  class="td-chart-label"
  x="311"
  y="324"
  text-anchor="middle"
>Nerelevantan prvi</text>
<text
  class="td-chart-label"
  x="465"
  y="324"
  text-anchor="middle"
>Nasumični redoslijed</text>
<text
  class="td-chart-label"
  x="619"
  y="324"
  text-anchor="middle"
>Exact rezultati zadnji</text>

<rect
  class="td-chart-series-0"
  x="80"
  y="336"
  width="12"
  height="12"
  rx="3"
  fill="currentColor"
></rect>
<text
  class="td-chart-legend-text"
  x="98"
  y="346"
  text-anchor="start"
>nDCG@10</text>
</svg>
</div>
</figure>
<p>Samo jedan nerelevantan proizvod na prvom mjestu smanjio je prosječni nDCG za <strong>23,1%</strong>. Još konkretnije, MRR je pao s 1 na 0,5 jer prvi Exact proizvod više nije prvi nego drugi.</p>
<p>Kod nasumičnog redoslijeda prosječni nDCG pada na 0,535. U prosjeku je samo 53,04% svih Exact kandidata vidljivo među prvih deset, a u 5,24% nasumičnih poredaka upita u top 10 nema nijednog točnog proizvoda.</p>
<p>Najgori stres-test pokazuje brutalnu verziju istog problema. Kada su Exact proizvodi zadnji, u <strong>64,49% upita</strong> prvih deset rezultata nema nijedan točan odgovor — iako on postoji u skupu kandidata.</p>
<p>Mala napomena koja je zapravo važna: Exact Recall idealnog scenarija nije 100% jer neki upiti imaju više od deset Exact kandidata, a mjerim samo prvih deset. To nije greška u računu nego ograničenje prozora <code>@10</code>.</p>
<h2>Što ovaj eksperiment dokazuje — a što ne</h2>
<p>Dokazuje da je redoslijed ozbiljan dio kvalitete interne tražilice. Nije dovoljno reći: „Proizvod se pojavio negdje u rezultatima.” Ako je pravi odgovor na 23. mjestu, tehnički postoji, a praktično ne postoji.</p>
<p>Eksperiment <strong>ne dokazuje</strong> da pad nDCG-a od 23,1% uzrokuje pad konverzije od 23,1%. ESCI nema sesije, klikove, narudžbe, cijene, povrate ni maržu. Tko iz ovog grafa izračuna univerzalni gubitak prihoda, upravo je izmislio broj i obukao ga u statistiku.</p>
<p>Relevantnost i klik također nisu ista stvar. Prvi rezultat dobiva više pažnje već zato što je prvi. S druge strane, poslovno najbolji poredak nije uvijek čisti poredak relevantnosti. Terenski eksperimenti Ngwea, Ferreire i Teixeire pokazali su da namjerno otežavanje pronalaska sniženih artikala u određenom kontekstu može povećati maržu, pa čak i konverziju. Zvuči kontraintuitivno — i upravo zato se poslovni ishod testira, a ne prorokuje iz offline metrike.</p>
<h2>Kako bih utvrdio stvarni trošak na web shopu</h2>
<p>Offline test mi govori gdje ranking puca. Za eure bih napravio randomizirani A/B test na stvarnim search sesijama.</p>
<p>Korisnika bih stabilno rasporedio u kontrolu ili novu verziju tražilice, tako da tijekom eksperimenta ne skače između algoritama. Primarna metrika bila bi <strong>doprinosna marža po search sesiji</strong>, ne prihod i ne broj klikova. Sekundarno bih pratio:</p>
<ul><li><p>klik na rezultat</p></li><li><p>dodavanje u košaricu</p></li><li><p>kupnju</p></li><li><p>novi ili preformulirani upit unutar unaprijed definiranog prozora</p></li><li><p>izlaz nakon pretrage</p></li><li><p>stopu praznih rezultata</p></li></ul>
<p>Kao zaštitne metrike pratio bih vrijeme odgovora tražilice, otkazivanja i povrate. Uzorak i trajanje testa odredio bih prije gledanja rezultata, a razliku objavio s intervalom pouzdanosti. Bez toga se vrlo lako zaustavi test baš onoga dana kada graf izgleda zgodno.</p>
<p>Primjer računice, čisto da se vidi mehanika — <strong>ovo nije rezultat mog ESCI eksperimenta</strong>:</p>
<table><thead><tr><th>Stavka</th><th style="text-align:right">Primjer</th></tr></thead><tbody><tr><td>Search sesije mjesečno</td><td style="text-align:right">50.000</td></tr><tr><td>Kontrola: marža po search sesiji</td><td style="text-align:right">2,40 €</td></tr><tr><td>Nova tražilica: marža po search sesiji</td><td style="text-align:right">2,62 €</td></tr><tr><td>Razlika</td><td style="text-align:right">0,22 €</td></tr><tr><td>Procijenjena dodatna mjesečna marža</td><td style="text-align:right">11.000 €</td></tr></tbody></table>
<p>Račun je <code>50.000 × 0,22 € = 11.000 €</code>. Tek od toga oduzimam cijenu alata, implementacije i održavanja. Ako interval pouzdanosti uključuje nulu, ne proglašavam pobjedu samo zato što je srednja vrijednost pozitivna.</p>
<h2>Što bih prvo popravljao</h2>
<p>Išao bih ovim redom:</p>
<ol><li><p>upiti s mnogo pretraga kod kojih točan proizvod postoji, ali nije u top 10</p></li><li><p>upiti bez rezultata iako proizvod postoji u katalogu</p></li><li><p>sinonimi, tipfeleri i lokalni jezik kupaca</p></li><li><p>nepotpuni atributi poput boje, veličine, materijala i namjene</p></li><li><p>pravila za dostupnost, rok isporuke i uklanjanje mrtvih proizvoda</p></li><li><p>tek nakon toga skuplji modeli rangiranja i AI ukrasi</p></li></ol>
<p>Model ne može čarobno znati da su <code>gojzerice</code>, <code>planinarske cipele</code> i lokalni izraz koji kupci stvarno koriste različiti izrazi za istu namjeru ako je katalog poluprazan i atributi žive u naslovu, opisu i nečijem Excelu.</p>
<h2>Search log nije bezazlena vreća ključnih riječi</h2>
<p>Kupci u tražilicu ponekad upisuju ime, broj narudžbe, adresu, telefon ili zdravstveni problem. Zato search log može sadržavati osobne, pa i osjetljive podatke.</p>
<p>Kao DPO ne bih dopustio da se takav log čuva zauvijek „jer bi jednom mogao trebati analitici”. Prije analize definirao bih svrhu, smanjio količinu podataka, pseudonimizirao identifikatore, ograničio pristup i rok čuvanja te provjerio što vanjski search dobavljač prima i gdje to obrađuje. Dobra tražilica ne mora postati loša baza osobnih podataka.</p>
<h2>Podaci i kod za provjeru</h2>
<p>Eksperiment se može ponoviti bez vjerovanja meni na riječ:</p>
<ul><li><p><a href="https://www.peremin.com/downloads/internal-search-research/README.md">metodologija i upute</a></p></li><li><p><a href="https://www.peremin.com/downloads/internal-search-research/analyze_esci.py">Python skripta</a></p></li><li><p><a href="https://www.peremin.com/downloads/internal-search-research/esci_experiment_summary.csv">sažetak rezultata</a></p></li><li><p><a href="https://www.peremin.com/downloads/internal-search-research/esci_query_results.csv">rezultati za svaki upit i scenarij</a></p></li></ul>
<p>Skripta koristi 50 nasumičnih permutacija po upitu i fiksni seed, a CSV s upitima zaštićen je od slučajnog izvođenja spreadsheet formula. Javni skup nije hrvatski katalog i rezultati se ne smiju prodavati kao hrvatski eCommerce benchmark. Oni su transparentan dokaz što loš redoslijed radi relevantnosti.</p>
<h2>Zaključak: problem nije search box nego lažno obećanje</h2>
<p>Najskuplja interna tražilica nije nužno ona koja vraća nulu. Ona barem prizna poraz. Skuplja je ona koja primi precizan upit, ima pravi proizvod i onda ga sakrije ispod deset krivih odgovora.</p>
<p>Na 5.041 stvarnom, ručno označenom eCommerce upitu jedan nerelevantan rezultat na vrhu smanjio je nDCG za 23,1%. Kada su Exact proizvodi gurnuti na kraj, gotovo dvije trećine upita ostalo je bez ijednog točnog odgovora u prvih deset.</p>
<p>Pouka nije da svaki web shop mora kupiti najskuplji AI search. Pouka je jednostavnija i manje seksi: <strong>prvo izmjeri nalazi li kupac pravi proizvod i koliko visoko. Zatim A/B testom dokaži utjecaj na doprinosnu maržu.</strong></p>
<p>Interna tražilica nije ukras u zaglavlju. Ona je prevoditelj između jezika kupca i nereda u katalogu. Kada prevoditelj laže, kupac ne piše prigovor algoritmu. Samo ode.</p>
<h2>Izvori</h2>
<ul><li><a href="https://arxiv.org/abs/2206.06588">Reddy i sur. — Shopping Queries Dataset: A Large-Scale ESCI Benchmark for Improving Product Search</a></li><li><a href="https://github.com/amazon-science/esci-data">Amazon Science — ESCI repozitorij i podaci</a></li><li><a href="https://trepo.tuni.fi/bitstream/handle/10024/65718/cumulated_gain_based_indicators_2002.pdf?sequence=1&amp;isAllowed=y">Järvelin i Kekäläinen — Cumulated Gain-Based Evaluation of IR Techniques</a></li><li><a href="https://journals.sagepub.com/doi/abs/10.1177/0022243719865516">Ngwe, Ferreira i Teixeira — The Impact of Increasing Search Frictions on Online Shopping Behavior</a></li></ul>]]></content:encoded>
</item>
<item>
<title>Prediktivna analitika u eCommerceu: Vodič bez nagađanja</title>
<link>https://www.peremin.com/napredna-analitika-i-predictive-analytics-marketing-bez-nagadanja/</link>
<guid isPermaLink="true">https://www.peremin.com/napredna-analitika-i-predictive-analytics-marketing-bez-nagadanja/</guid>
<pubDate>Fri, 30 May 2025 00:00:00 +0000</pubDate>
<description>Što je prediktivna analitika, kako predviđa kupnju, churn i vrijednost kupca te gdje modeli pomažu eCommerce marketingu, a gdje mogu prevariti.</description>
<content:encoded><![CDATA[<p>Ako i dalje šalješ iste kampanje svima, iskreno – nisi više u marketingu, već u spam-biznisu. Kupac ti šalje jasnu poruku: “Daj mi ono što želim, i to sada!” **Prediktivna analitika **omogućuje ti upravo to – jasne, precizne, algoritmima vođene kampanje koje znaju tko, što i kada želi.</p>
<h2>Što je predictive analytics (PA)?</h2>
<p><strong>Predictive analytics (PA)</strong> u eCommerceu predstavlja primjenu statističkih tehnika, strojnog učenja i algoritama za predviđanje budućeg ponašanja korisnika na temelju povijesnih i trenutnih podataka. Umjesto oslanjanja na intuiciju ili generičke demografske podatke, PA omogućuje trgovcima da anticipiraju što će kupci vjerojatno učiniti – hoće li kupiti, kada će kupiti, što će kupiti i kada bi mogli odustati.</p>
<h3>Zašto je to važno?</h3>
<p>U današnjem konkurentnom eCommerce okruženju, sposobnost predviđanja ponašanja kupaca pruža značajnu prednost. <strong>Prema najnovijim istraživanjima iz 2025. godine, personalizirano online shopping iskustvo može zadržati preko 56% eCommerce kupaca</strong>. McKinsey istraživanje pokazuje da CPG kompanije koje prihvaćaju data-driven marketing na velikoj skali mogu povećati neto vrijednost prodaje za 3 do 5 posto i marketinšku efikasnost za 10 do 20 posto.</p>
<p>Dodatno, <strong>istraživanje objavljeno u <a href="https://www.ijcaonline.org/archives/volume186/number48/li-2024-ijca-924140.pdf">International Journal of Computer Applications (2024.)</a> demonstrira efikasnost Random Forest modela u predviđanju customer churn-a s ROC AUC od 0.9850</strong>. Ovo pokazuje kako napredni algoritmi strojnog učenja mogu značajno poboljšati točnost predviđanja u eCommerce okruženju.</p>
<h3>Kako se koristi u praksi?</h3>
<p>Evo nekoliko ključnih primjena PA u eCommerce marketingu:</p>
<h3>Personalizacija ponuda i preporuka proizvoda</h3>
<p>Analizom prethodnih kupnji i ponašanja korisnika, PA omogućuje trgovcima da preporuče proizvode koji su najrelevantniji za pojedinog kupca, čime se povećava vjerojatnost konverzije. <strong><a href="https://www.bigcommerce.com/articles/ecommerce/ecommerce-predictive-analytics/">Sephora</a></strong> je svojim personaliziranim preporukama povećala prodaju i zadržala kupce dugoročno. Amazon i Netflix koriste PA za dinamičke preporuke koje su toliko precizne da izgledaju kao da čitaju misli.</p>
<h3>Prognoziranje potražnje i upravljanje zalihama</h3>
<p>PA pomaže u predviđanju buduće potražnje za proizvodima, omogućujući trgovcima da optimiziraju zalihe i izbjegnu prekomjerno skladištenje ili nestašice. <strong>Amazon</strong> je čak patentirao “anticipatory shipping” – sustav koji predviđa što će kupac naručiti prije nego što to i učini, čime smanjuje vrijeme.</p>
<h3>Identifikacija rizika od odustajanja (churn)</h3>
<p>PA može identificirati kupce koji pokazuju znakove odustajanja, omogućujući trgovcima da poduzmu proaktivne mjere za njihovo zadržavanje. <strong>Netflix</strong> koristi PA za predviđanje churn-a i ciljanje korisnika personaliziranim ponudama. Jedna SaaS kompanija je smanjila churn s 8% na 4.2% samo zahvaljujući PA modelima i proaktivnim kampanjama.</p>
<h3>Optimizacija marketinških kampanja</h3>
<p>Analizom podataka o prethodnim kampanjama i ponašanju korisnika, PA omogućuje trgovcima da prilagode svoje marketinške strategije kako bi postigli bolje rezultate. <strong><a href="https://www.mytotalretail.com/article/macys-uses-predictive-analytics-grow-customer-spend/all/">Macy’s</a></strong> je implementirao SAP InfiniteInsight i postigao gotovo 12% rast online prodaje zahvaljujući personaliziranim.</p>
<p>Nakon što smo objasnili što je predictive analytics (PA) i prikazali njegove glavne primjene u eCommerce marketingu, važno je jasno definirati na koji tip PA-a ćemo se fokusirati u ovom blogu i zašto.</p>
<h2>S kojim PA ćemo se baviti u ovom blogu?</h2>
<p>U ovom blogu fokusiramo se na primjenu predictive analyticsa za predviđanje ponašanja posjetitelja i kupaca u eCommerce okruženju – konkretno, na modele koji pomažu webshopovima da:</p>
<ul><li><p>Identificiraju posjetitelje s najvećom vjerojatnošću konverzije (purchase propensity modeli)</p></li><li><p>Predvide rizik od odustajanja postojećih kupaca (churn modeli)</p></li><li><p>Segmentiraju korisnike prema profitabilnosti, angažmanu i potencijalu za rast (RFM i klastering)</p></li><li><p>Optimiziraju marketinške kampanje i preporuke proizvoda u realnom vremenu, koristeći podatke iz CMS-a, ERP-a i Google Analyticsa</p></li></ul>
<p>Za razliku od generičke upotrebe PA-a u industriji (npr. predviđanje zaliha ili makroekonomskih trendova), mi ćemo se baviti praktičnim modelima koji su izravno primjenjivi na digitalni marketing i eCommerce. To znači da ćeš naučiti kako koristiti svoje podatke za:</p>
<ul><li><p>Precizno ciljanje remarketing kampanja</p></li><li><p>Personalizaciju ponuda na temelju stvarnog ponašanja korisnika, a ne samo demografije</p></li><li><p>Prepoznavanje i nagrađivanje najvrjednijih kupaca, dok istovremeno filtriraš one koji negativno utječu na ROI</p></li><li><p>Aktivno uključivanje i scoring posjetitelja koji još nisu kupci, ali pokazuju signale visoke namjere</p></li></ul>
<p>Zaključak ovog dijela</p>
<p>Dakle, u nastavku bloga bavit ćemo se upravo onim vrstama predictive analyticsa koje omogućuju webshopovima da iz podataka izvuku maksimalnu vrijednost – kroz bolje ciljanje, personalizaciju i proaktivno upravljanje odnosima s kupcima. Fokus je na praktičnoj primjeni: kako izvući podatke iz CMS-a i ERP-a, trenirati modele, validirati ih i integrirati u svakodnevni marketing proces.</p>
<h2>Koje posjetitelje ciljati – i zašto</h2>
<p>U eCommerce marketingu najveća greška je pretpostaviti da su svi posjetitelji jednaki. Nisu. I nikada neće biti. Ako se svaki klik tretira kao da vrijedi isto, rezultat su rasipani budžeti i propuštene prilike.</p>
<blockquote></blockquote>
<p>Ključno pitanje za svaki predictive model je: <strong>koga uopće želimo pretvoriti u kupca – i zašto?</strong></p>
<p>Prema <a href="https://cxl.com/blog/propensity-modeling/?utm_source=chatgpt.com">CXL</a>, posjetitelji koji pokazuju snažnu kupovnu namjeru – npr. pregled proizvoda, dodavanje u košaricu, provjera informacija o dostavi – imaju značajno veću vjerojatnost konverzije. Njih identificiramo kao posjetitelje s visokom sklonosti kupnji.</p>
<table><thead><tr><th>Segment</th><th>Ponašanje</th><th>Akcija</th></tr></thead><tbody><tr><td>Visoka namjera</td><td>Aktivno istražuju proizvod, dodaju u wishlist, provode 10+ min na PDP</td><td>Remarketing, mail unutar 2 sata, pop-up</td></tr><tr><td>Srednja namjera</td><td>Višekratni posjeti, otvaranje emailova, angažman na društvenim mrežama</td><td>Edukativni sadržaji, vodiči, UGC recenzije</td></tr><tr><td>Niska namjera</td><td>Kratki posjeti s bounce rateom &gt;80%, bez interakcije</td><td>Edukativni blogovi, newsletter signup</td></tr></tbody></table>
<p>Prema <a href="https://www.bigcommerce.com/articles/ecommerce/ecommerce-predictive-analytics/">BigCommerce</a>, personalizacija po ovim segmentima donosi <strong>15–30 % veću konverziju</strong>, dok generički pristupi često demotiviraju korisnike.</p>
<h2>Koje kupce želimo – a koje ne</h2>
<p>U eCommerceu vrijedi pravilo: ne želiš svakog kupca. Neki ti stvaraju prihod, drugi ti jedu marginu, resurse i uništavaju ROI.</p>
<h2>Tko su poželjni kupci i kako ih identificirati</h2>
<h3>1. <strong>Redovito kupuju proizvode visoke marže</strong></h3>
<p><strong>Izvor:</strong> ERP</p>
<ul><li><p>Polja: <code>customer_id</code>, <code>order_count</code>, <code>product_margin</code>, <code>sku</code>, <code>total_revenue</code></p></li></ul>
<p>Formula:</p>
<ul><li><p>Filtriraj kupce s ≥ 2 kupnje u posljednjih 60–90 dana</p></li><li><p>Uključi samo one čije su narudžbe imale <strong>prosječnu maržu iznad praga</strong> (npr. &gt;30%)</p></li></ul>
<p><strong>SQL primjer (ERP ili BI alat):</strong></p>
<pre><code>sql

SELECT customer_id
FROM orders
WHERE order_date &gt; NOW() - INTERVAL '90 days'
GROUP BY customer_id
HAVING COUNT(*) &gt;= 2 AND AVG(product_margin) &gt; 0.3;</code></pre>
<h3>2. <strong>Nizak broj povrata + visoka ocjena zadovoljstva</strong></h3>
<p><strong>Izvor:</strong> ERP + CRM (ili integracija s anketom u CMS-u)</p>
<ul><li><p>Polja: <code>returns_count</code>, <code>return_rate</code>, <code>csat_score</code>, <code>nps_score</code></p></li></ul>
<p>Pravilo:</p>
<ul><li><p>Povrat ispod 10%</p></li><li><p>CSAT ili NPS ocjena &gt; 7 (idealno iz ankete nakon isporuke)</p></li></ul>
<p><strong>Bonus:</strong> Ako koristiš <strong>email survey</strong> (npr. Typeform, Survicate) u CMS-u, spoji ga s korisničkim ID-jem i ERP narudžbama.</p>
<h3>3. <strong>Reagiraju na kampanje, koriste popuste, ali bez eksploatacije</strong></h3>
<p><strong>Izvor:</strong> CMS (newsletter platforma), Google Analytics (GA4 eventi), ERP (korišteni kuponi)</p>
<p>Polja: <code>campaign_clicks</code>, <code>coupon_use_rate</code>, <code>avg_discount_percent</code>, <code>email_open_rate</code></p>
<p>Detekcija:</p>
<ul><li><p>Otvorili ≥ 50% kampanja u zadnja 3 mjeseca</p></li><li><p>Iskoristili kupon do max. 2× mjesečno</p></li><li><p>Prosječan iskorišteni popust &lt; 20%</p></li></ul>
<p><strong>GA4 kombinacija:</strong></p>
<ul><li><p><code>event_name</code>: <code>purchase</code>, <code>coupon</code>, <code>campaign_click</code></p></li><li><p>Segmente složiš u GA4 s uvjetom ponašanja kroz <strong>audience builder</strong></p></li></ul>
<h3>4. <strong>Dijele sadržaj i dovode druge korisnike (referrals)</strong></h3>
<p><strong>Izvor:</strong> CMS (blog/share plugin), Google Analytics, Referral modul u ERP-u/loyalty sustavu</p>
<p>Polja: <code>referral_code_usage</code>, <code>social_shares</code>, <code>influencer_id</code>, <code>session_referrer</code></p>
<p>Detekcija:</p>
<ul><li><p>Imaju referral kod koji je barem jednom korišten</p></li><li><p>GA4 event <code>share</code> ili <code>outbound_click</code> zabilježen ≥ 1</p></li><li><p>Parametar <code>ref=</code> u linkovima koji donose konverzije</p></li></ul>
<p><strong>GA4 primjer publike:</strong></p>
<p><code>event_name = share</code> AND <code>event_count ≥ 2</code></p>
<p><strong>Poželjni kupci - zaključno:</strong></p>
<ul><li><p>Redovito kupuju, i to proizvode visoke marže</p></li><li><p>Imaju nizak broj povrata i visoku ocjenu zadovoljstva</p></li><li><p>Reagiraju na kampanje, koriste popuste, ali bez eksploatacije</p></li><li><p>Dijele sadržaj i dovode druge korisnike (referrals)</p></li></ul>
<p><strong>Neželjeni kupci:</strong></p>
<ul><li><p>Visoka stopa povrata (&gt;40%)</p></li><li><p>Kupovina samo na ekstremnim sniženjima (“discount hunters”)</p></li><li><p>Često kontaktiraju podršku zbog trivijalnosti – visoki CAC</p></li><li><p>Nikada ne klikaju na kampanje, iako su u bazi</p></li></ul>
<p>Zašto to mora biti uključeno u predictive model?
Zato što ne želiš trenirati model koji će nagraditi kupce koji ti zapravo štete. U feature engineering fazi jasno označi:</p>
<ul><li><p><strong>CLTV (Customer Lifetime Value)</strong> kao primarni cilj</p></li><li><p><strong>Korisničku vrijednost po marži, a ne samo prometu</strong></p></li><li><p><strong>Broj povrata</strong> kao penalizacijski faktor</p></li><li><p><strong>Trošak korisničke podrške</strong> (ako ga mjeriš po korisniku)</p></li></ul>
<p>Cilj predictive marketinga nije samo konverzija – već profitabilna konverzija. Model koji ne filtrira “loše kupce” vodi do povećanja prometa i smanjenja dobiti.</p>
<h2>Kako ih spojiti?</h2>
<ol><li><p><strong>Identificiraj jedinstveni ID korisnika (npr. e-mail, customer_id) u sva tri sustava.</strong></p></li><li><p><strong>Izvuci metrike</strong> iz svakog sustava (ručno ili kroz Data Warehouse / BigQuery).</p></li><li><p><strong>Kreiraj scoring model</strong> – dodijeli bodove za svaki kriterij (npr. +2 za nisku stopu povrata, +3 za visoku maržu…).</p></li><li><p><strong>Segmentiraj korisnike</strong> po ukupnom zbroju – oni iznad određenog praga su “Poželjni”.</p></li></ol>
<h2>Ne samo kupci – uključujemo i posjetitelje</h2>
<p>Većina eCommerce shopova ima daleko više posjetitelja nego kupaca. Ignorirati ih u analitici znači ignorirati 90% potencijala. Svaki posjetitelj šalje signal:</p>
<ul><li><p>koliko dugo ostaje,</p></li><li><p>koje proizvode gleda,</p></li><li><p>dolazi li s bloga, kategorije, proizvoda ili oglasa,</p></li><li><p>koliko duboko ulazi u site strukturu (funnel depth).</p></li></ul>
<p>Primjer: netko pročita recept na blogu (SEO lead) i klikne na link za tavu. To je lead visoke namjere, ali niske konverzije – idealan kandidat za remarketing i scoring.</p>
<h2>Koje podatke uzimamo iz CMS-a i ERP-a:</h2>
<p><strong>Iz CMS-a (npr. Laravel, WordPress, Sylius):</strong></p>
<ul><li><p><code>session_duration</code>, <code>page_depth</code>, <code>products_viewed</code>, <code>entry_page</code>, <code>exit_page</code></p></li><li><p><code>referrer</code>, <code>device</code>, <code>clickstream</code>, <code>search_terms</code></p></li><li><p><code>scroll_depth</code>, <code>time_on_product_page</code></p></li></ul>
<p><strong>Iz ERP-a:</strong></p>
<ul><li><p><code>customer_id</code>, <code>avg_order_value</code>, <code>return_rate</code>, <code>payment_method</code>, <code>support_tickets</code></p></li><li><p><code>product_margin</code>, <code>stock_levels</code>, <code>purchase_frequency</code>, <code>last_purchase_date</code></p></li></ul>
<h2>Kako trenirati model koji uključuje i posjetitelje</h2>
<p>Kod korisnika bez transakcija (npr. samo pregledava), target varijabla je “engagement intent” ili predikcija da će postati kupac u narednih 7 dana.</p>
<pre><code># semi-supervised learning: kombinacija označenih i neoznačenih podataka
from sklearn.ensemble import GradientBoostingClassifier

X_full = combine(visitor_sessions, known_buyers)
y = generate_labels(X_full) # 1 ako je kupio, 0 ako nije (ili proxy varijabla)

model = GradientBoostingClassifier()
model.fit(X_full, y)</code></pre>
<p>Nakon toga koristiš output predikcije da odrediš:</p>
<ul><li><p>Koga retargetirati u sljedećem newsletteru</p></li><li><p>Kome pokazati exit-intent popup</p></li><li><p>Tko zaslužuje Facebook Custom Audience remarketing</p></li></ul>
<h2>Segmentacija ponašanja – kako je izgraditi vlastitim kodom</h2>
<p>Zaboravi generičke demografske segmente. Pravi modeli se temelje na:</p>
<ul><li><p><strong>RFM analizi (Recency, Frequency, Monetary)</strong></p></li><li><p><strong>Clustering algoritmima (npr. K-means)</strong></p></li></ul>
<pre><code>from sklearn.cluster import KMeans
import pandas as pd

rfm = pd.read_csv('rfm_scores.csv')
kmeans = KMeans(n_clusters=4)
kmeans.fit(rfm)
rfm['segment'] = kmeans.labels_</code></pre>
<p>Ova segmentacija se može integrirati u ERP tako da se svakom korisniku dinamički dodeli segment kod prijave ili checkouta – za što se koristi hook u backendu koji poziva ML servis i vraća “segment” koji dalje odlučuje koju kampanju, ponudu ili popust vidi.</p>
<h2>Purchase propensity modeli – zašto su najvažniji i kako ih trenirati</h2>
<p>Ovdje je ključno imati:</p>
<ul><li><p>Povijest transakcija (kupnje, vrijeme, iznos)</p></li><li><p>Ponašanje na sajtu (broj posjeta, bounce rate, pogledani proizvodi)</p></li><li><p>Vanjski faktori (dan u tjednu, vrijeme, inflacija)</p></li></ul>
<p>Model se trenira kao binarna klasifikacija, a u deploy fazi koristi se scoring prag za aktiviranje kampanje.</p>
<h2>Churn modeli: kako spasiti korisnika prije nego ode</h2>
<p>Za implementaciju churn predikcije:</p>
<ol><li><p>Izgradi dataset korisnika koji su otišli (churn) vs ostali</p></li><li><p>Treniraj klasifikacijski model (XGBoost, CatBoost preporučeno)</p></li><li><p>Scoriraj aktivne korisnike i flagiraj one iznad praga</p></li><li><p>Integriraj u CRM ili mail sustav da im se automatski pošalje ponuda</p></li></ol>
<pre><code>from sklearn.ensemble import RandomForestClassifier

rf = RandomForestClassifier(random_state=46)
rf.fit(X_train, y_train)</code></pre>
<h2>Operacionalizacija: kako to živi u CMS/ERP sustavu</h2>
<ul><li><p><strong>Modeli kao servis:</strong> Hostani na vlastitom API endpointu (Flask/FastAPI), poziva ih CMS kod checkouta ili prijave.</p></li><li><p><strong>Webhook aktivacije:</strong> Kad korisnik klikne na “Dodaj u košaricu”, sustav šalje webhook koji scorira korisnika i vraća preporuku.</p></li><li><p><strong>A/B test engine:</strong> Interno izgradi logiku za randomizaciju i mjeri razliku u konverzijama na temelju modelskih preporuka.</p></li></ul>
<h2>Alati i platforme za predictive analytics</h2>
<p>Evo par PA alata:</p>
<table><thead><tr><th>Alat</th><th>Primjena</th></tr></thead><tbody><tr><td>Google Analytics 4</td><td>AI-driven predictive metrics, churn, purchase</td></tr><tr><td>HubSpot</td><td>Lead scoring, personalizacija, automation</td></tr><tr><td>Salesforce Einstein</td><td>Enterprise-grade AI, personalizacija</td></tr><tr><td>Adobe Analytics</td><td>Advanced segmentation, propensity modeling</td></tr><tr><td>Altair AI Studio</td><td>Data mining, model deployment</td></tr><tr><td>H2O Driverless AI</td><td>Automated ML, explainability</td></tr></tbody></table>
<p><strong>Google Analytics 4</strong> nudi ugrađene predictive metrics – vjerojatnost kupnje, churn-a i prihoda u sljedećih 7 ili 28 dana.
<strong>HubSpot</strong> i <strong>Salesforce Einstein</strong> omogućuju personalizirano ciljanje i automatizaciju kampanja.
<strong>Adobe Analytics</strong> koristi AI framework Adobe Sensei za naprednu segmentaciju i personalizaciju.</p>
<h2>Validacija modela i mjerenje uspjeha</h2>
<p>Ne možeš samo trenirati model i nadati se najboljem. Moraš testirati i validirati rezultate.</p>
<ul><li><p><strong>Splitaj podatke na train/test setove</strong></p></li><li><p><strong>Koristi stratified k-fold cross-validation</strong></p></li><li><p><strong>Mjeri ROC AUC, precision, recall i F1 score</strong></p></li><li><p><strong>Pogledaj confusion matrix za realnu sliku performansi</strong></p></li></ul>
<p>ROC AUC od 0.9850 znači da model gotovo savršeno razlikuje kupce koji će otići od onih koji će ostati.
Precision i recall pokazuju koliko model griješi i koliko je pouzdan.</p>
<h2>Ograničenja i izazovi</h2>
<p>Predictive analytics nije magična pilula. Evo glavnih izazova:</p>
<ul><li><p><strong>Kvaliteta podataka:</strong> Loši podaci = loši rezultati. Čisti podatke, standardiziraj ih i eliminiraj duplikate.</p></li><li><p><strong>Integracija:</strong> Podaci iz različitih izvora moraju biti spojeni u jednu bazu.</p></li><li><p><strong>Skilovi:</strong> Potreban je tim s razumijevanjem data science-a i marketinga.</p></li><li><p><strong>Privatnost i GDPR:</strong> Poštuj pravila, koristi zero-party data i budi transparentan.</p></li><li><p><strong>ROI:</strong> Rezultati se ne vide odmah. Treba vremena i discipline.</p></li></ul>
<h2>Zaključak i akcijski koraci</h2>
<p>Ne treba ti gotovi alat. Treba ti jasan cilj (npr. smanji churn za 20%), kvalitetan dataset i API pristup CMS/ERP-u gdje će se modeli povezati. Sve ostalo je Python, disciplina i validacija.</p>
<p><strong>Akcijski plan za sljedećih 30 dana:</strong></p>
<ol><li><p><strong>Prikupljaj i čisti podatke</strong> – bez toga nema ništa.</p></li><li><p><strong>Definiraj ciljne varijable</strong> – što želiš predvidjeti i zašto.</p></li><li><p><strong>Treniraj jednostavan model</strong> – npr. Random Forest za churn ili purchase propensity.</p></li><li><p><strong>Testiraj i validiraj model</strong> – koristi ROC AUC, precision, recall i F1 score.</p></li><li><p><strong>Integriraj model u CMS/ERP</strong> – automatski aktiviraj kampanje na temelju scoringa.</p></li><li><p><strong>Mjeri rezultate i iteriraj</strong> – marketing je proces, ne događaj.</p></li></ol>
<p>Prediktivna analitika nije software, to je proces odlučivanja koji zna više od osjećaja u želucu. Ako ti je još uvijek marketing “šalji svima istu poruku i čekaj što će biti”, vrijeme je da se probudiš. Konkurencija već koristi PA – i nećeš ih sustići samo s intuicijom i Excelom.</p>
<p><strong>P.S.</strong> Ako misliš da je ovo previše komplicirano, sjeti se: tvoja konkurencija vjerojatno misli isto. To je tvoja prilika da ih ostaviš u prašini.</p>]]></content:encoded>
</item>
<item>
<title>A/B testiranje uz AI: Besplatan eksperiment s LLM-om</title>
<link>https://www.peremin.com/besplatno-ab-testiranje-s-umjetnom-inteligencijom-ai-llm/</link>
<guid isPermaLink="true">https://www.peremin.com/besplatno-ab-testiranje-s-umjetnom-inteligencijom-ai-llm/</guid>
<pubDate>Mon, 26 May 2025 00:00:00 +0000</pubDate>
<description>Kako koristiti AI i LLM za brzu procjenu A/B varijanti, što takav eksperiment može otkriti i zašto ne može zamijeniti test na stvarnim kupcima.</description>
<content:encoded><![CDATA[<p>Testirao sam nešto što klasični marketing nikad ne bi odobrio – <strong>besplatno A/B testiranje s umjetnom inteligencijom (AI + LLM)</strong></p>
<p>U ovom postupku koristimo generativne agente (<strong>GenAgents</strong>) <strong>temeljene na istraživanjima sa Stanforda</strong>, koji simuliraju ponašanje korisnika s visokim stupnjem podudarnosti sa stvarnim odlukama (do 85%).</p>
<p>Umjesto da bacam pare na klikove koji možda nikad ne dođu, pokrenuo sam simulaciju s 1.000 virtualnih agenata koji reagiraju kao stvarni ljudi. Svaka varijanta oglasa dobila je svoj scenarij, svaki agent imao je stav, predrasude i ponašanja.</p>
<h2>1. Postavljanje virtualnog laboratorija</h2>
<p>Za pokretanje virtualnog laboratorija potreban je Python 3.7 ili noviji te stabilna internetska veza za pristup <a href="https://platform.openai.com/docs/overview">OpenAI API</a>-ju. Preporučuje se komp s minimalno 8 GB RAM-a za glatko izvođenje simulacija.</p>
<p>Ako još nemaš GenAgents:</p>
<pre><code class="language-bash">git clone https<span class="tok-operator">:</span><span class="tok-operator">/</span><span class="tok-operator">/</span>github<span class="tok-operator">.</span>com<span class="tok-operator">/</span>joonspk<span class="tok-operator">-</span>research<span class="tok-operator">/</span>genagents
cd genagents
pip install <span class="tok-operator">-</span>r requirements<span class="tok-operator">.</span>txt</code></pre>
<h2>Kako dizajnirati vjerodostojne simulacije (napredno)</h2>
<p>Prema recentnoj <a href="https://arxiv.org/abs/2411.10109">Stanford studiji</a>, ključno je da agenti imaju detaljnu “povijest života” iz kvalitativnih intervjua, što osigurava visoku razinu realizma u ponašanju.</p>
<p>Primijeni ovaj princip kroz sljedeće korake:</p>
<ul><li><p><strong>Detaljne pozadine agenata</strong>: Umjesto generičkih profila, svaki agent bi trebao imati jedinstvenu povijest kupovine i stavove (npr. “Ne vjerujem u jeftine LED proizvode”). To povećava vjerodostojnost njihovih reakcija.</p></li><li><p><strong>Refleksijski moduli</strong>: <a href="https://arxiv.org/abs/2304.03442">Integriraj refleksiju</a> kao ključnu komponentu simulacije – agenti bi trebali moći “razmisliti” o tome zašto klikaju ili ignoriraju oglas (“Je li ovaj popust stvarno tako dobar ili mi nešto prodaju?”)</p></li></ul>
<p>Primjer napredne refleksije u JSON obliku:</p>
<pre><code class="language-json"><span class="tok-operator">{</span>
  <span class="tok-property">"id"</span><span class="tok-operator">:</span> <span class="tok-number">512</span><span class="tok-operator">,</span>
  <span class="tok-property">"response"</span><span class="tok-operator">:</span> <span class="tok-string">"Privlači me popust, ali iskustvo govori da takve ponude često znače lošiju kvalitetu."</span><span class="tok-operator">,</span>
  <span class="tok-property">"refleksija"</span><span class="tok-operator">:</span> <span class="tok-string">"Moja povijest s popustima je mješovita - neke su bile izvrsne prilike, a druge prevara. S obzirom na nisku cijenu, sklon sam oprezu."</span><span class="tok-operator">,</span>
  <span class="tok-property">"sentiment"</span><span class="tok-operator">:</span> <span class="tok-string">"Neutralan s dozom skepticizma"</span>
<span class="tok-operator">}</span></code></pre>
<h2>2. Dizajniranje varijanti</h2>
<p>Pripremi A/B varijante u JSON formatu u <code>config/ab_test.json.</code></p>
<p>Svaka varijanta sadrži:
naziv, tekst oglasa, skup pitanja na koja agenti odgovaraju (npr. “Bi li kliknuo/la?”, “Zašto?”).</p>
<pre><code class="language-json"><span class="tok-operator">{</span>
  <span class="tok-property">"varijante"</span><span class="tok-operator">:</span> <span class="tok-operator">[</span>
    <span class="tok-operator">{</span>
      <span class="tok-property">"naziv"</span><span class="tok-operator">:</span> <span class="tok-string">"BesplatnaDostava"</span><span class="tok-operator">,</span>
      <span class="tok-property">"oglas"</span><span class="tok-operator">:</span> <span class="tok-string">"LED kišobran s BESPLATNOM DOSTAVOM za 24h!"</span><span class="tok-operator">,</span>
      <span class="tok-property">"pitanja"</span><span class="tok-operator">:</span> <span class="tok-operator">[</span><span class="tok-string">"Bi li kliknuo/la?"</span><span class="tok-operator">,</span> <span class="tok-string">"Zašto bi odabrao/la ovu opciju?"</span><span class="tok-operator">]</span>
    <span class="tok-operator">}</span><span class="tok-operator">,</span>
    <span class="tok-operator">{</span>
      <span class="tok-property">"naziv"</span><span class="tok-operator">:</span> <span class="tok-string">"20PostoPopusta"</span><span class="tok-operator">,</span>
      <span class="tok-property">"oglas"</span><span class="tok-operator">:</span> <span class="tok-string">"LED kišobran -20% POPUSTA za prvu kupnju!"</span><span class="tok-operator">,</span>
      <span class="tok-property">"pitanja"</span><span class="tok-operator">:</span> <span class="tok-operator">[</span><span class="tok-string">"Bi li kliknuo/la?"</span><span class="tok-operator">,</span> <span class="tok-string">"Što te više privlači: popust ili brzina?"</span><span class="tok-operator">]</span>
    <span class="tok-operator">}</span>
  <span class="tok-operator">]</span>
<span class="tok-operator">}</span></code></pre>
<h2>3. Pokretanje simulacije</h2>
<pre><code class="language-bash"><span class="tok-comment"># Varijanta A</span>
python simulate<span class="tok-operator">.</span>py <span class="tok-operator">-</span><span class="tok-operator">-</span>scenario <span class="tok-string">"ab_test/BesplatnaDostava"</span> <span class="tok-operator">-</span><span class="tok-operator">-</span>output results_free<span class="tok-operator">.</span>json

<span class="tok-comment"># Varijanta B</span>
python simulate<span class="tok-operator">.</span>py <span class="tok-operator">-</span><span class="tok-operator">-</span>scenario <span class="tok-string">"ab_test/20PostoPopusta"</span> <span class="tok-operator">-</span><span class="tok-operator">-</span>output results_discount<span class="tok-operator">.</span>json</code></pre>
<h2>4. Analiza rezultata</h2>
<table><thead><tr><th>Metrika</th><th>Besplatna dostava</th><th>20% popusta</th></tr></thead><tbody><tr><td>Komentari</td><td>“Volim brzinu…”</td><td>“Ne kupujem po punoj cijeni”</td></tr><tr><td>Share rate</td><td>12%</td><td>18%</td></tr></tbody></table>
<p>Tumačenje:</p>
<ul><li><p>Ljudi koji reagiraju brzo preferiraju dostavu, dok oni osjetljivi na cijenu biraju popust.</p></li><li><p>Veći share rate kod popusta sugerira više “hakerske” percepcije (“našao/la sam dobru priliku”).</p></li></ul>
<h2>Zašto ovo ima smisla?</h2>
<p><strong>Simulirani korisnici s poviješću</strong> - Agenti nisu prazni entiteti. Svaki ima vlastitu povijest (npr. “Nikad ne plaćam dostavu”).</p>
<p><strong>Refleksijski moduli</strong> - Agent razmišlja o stvarima kao što bi to radio stvarni korisnik (npr. “Zvuči predobro da bi bilo istinito”).</p>
<p><strong>Balansiranje biasa</strong> - Odgovori se dinamički kalibriraju prema interesima:</p>
<pre><code class="language-python"><span class="tok-keyword">if</span> user_interest <span class="tok-operator">=</span><span class="tok-operator">=</span> <span class="tok-string">"outdoor"</span> <span class="tok-keyword">and</span> ad_variant <span class="tok-operator">=</span><span class="tok-operator">=</span> <span class="tok-string">"BesplatnaDostava"</span><span class="tok-operator">:</span>
    <span class="tok-function">adjust_confidence</span>(<span class="tok-number">0.7</span>)  <span class="tok-comment"># Smanji vjerodostojnost kod planinara</span></code></pre>
<p><strong>Ekonomija testa</strong> - Vrijeme: 15 minuta (ne tjedni ili više tjedni) Cijena: ~$0.27 (API poziv), u usporedbi s $500 za Meta A/B kampanju</p>
<h2>5. Kako čitati rezultate?</h2>
<ul><li><p>Klik rate &gt;55% → testna varijanta privlači pozornost</p></li><li><p>Share rate &gt;15% → potencijal za viralnost</p></li><li><p>Komentari s hejtom? Dobrodošli. Ljudi troše vrijeme samo na stvari koje ih zanimaju.</p></li></ul>
<h2>Bonus: Uvid u razmišljanje jednog agenta</h2>
<pre><code class="language-json"><span class="tok-operator">{</span>
  <span class="tok-property">"id"</span><span class="tok-operator">:</span> <span class="tok-number">42</span><span class="tok-operator">,</span>
  <span class="tok-property">"response"</span><span class="tok-operator">:</span> <span class="tok-string">"Kliknuo bih na popust jer sam student, al vjerujem da će kišobran biti loš ko i sve što je jeftino"</span><span class="tok-operator">,</span>
  <span class="tok-property">"sentiment"</span><span class="tok-operator">:</span> <span class="tok-string">"Negativan (ali zainteresiran)"</span>
<span class="tok-operator">}</span></code></pre>
<p>Ova razina uvida ne dolazi iz CTR-a ili heatmape. Dolazi iz refleksije i razrade agentovog stava.</p>
<h2>Ali… je li ovo stvarno bolje od stvarnog testiranja?</h2>
<p>Da i ne.</p>
<blockquote></blockquote>
<p><strong>Simulacije ne zamjenjuju stvarne korisnike – ali pomažu prototipirati ideje, filtrirati loše koncepte i predvidjeti ponašanje.</strong></p>
<p>Generativni agenti pokazali su 85% podudarnosti sa stvarnim ljudskim odgovorima (<a href="https://arxiv.org/abs/2411.10109">prema Stanford studiji, 2024</a>) – više nego što ljudi repliciraju vlastita mišljenja nakon 2 tjedna.</p>
<p>Uvjet: dizajn varijante mora biti koncizan i razumljiv, inače se simulacija raspadne u noise.</p>
<p>Ako znaš što testiraš i želiš brzi signal bez oglasnog budžeta, ovo je alat koji vrijedi imati u arsenalu.</p>]]></content:encoded>
</item>
<item>
<title>Kolačići i GDPR u Hrvatskoj: Što web shop mora imati</title>
<link>https://www.peremin.com/kolacici-uskladi-se-s-gdpr-om-i-eprivacy-direktivom/</link>
<guid isPermaLink="true">https://www.peremin.com/kolacici-uskladi-se-s-gdpr-om-i-eprivacy-direktivom/</guid>
<pubDate>Sun, 18 May 2025 00:00:00 +0000</pubDate>
<description>Praktičan vodič kroz cookie bannere, privolu, Google Analytics, Meta Pixel i Consent Mode prema GDPR-u, ZEK-u i službenim uputama AZOP-a.</description>
<content:encoded><![CDATA[<p>Znaš onaj banner koji kaže: „Nastavkom korištenja stranice prihvaćate kolačiće”?</p>
<p>To nije privola. To je optimizam s obrubom i gumbom.</p>
<p>Ako vodiš web shop u Hrvatskoj, kolačići nisu samo pitanje GDPR-a. Primjenjuju se i hrvatski <strong>Zakon o elektroničkim komunikacijama</strong>, pravila o transparentnosti i privoli iz GDPR-a te praksa AZOP-a. Zato ćemo ovdje razdvojiti što zakon stvarno traži od onoga što cookie alat tvrdi da je „compliant by default”.</p>
<blockquote><p>Ovo je praktičan vodič, a ne individualni pravni savjet. Kod složenog praćenja, profiliranja ili prijenosa podataka izvan EGP-a uključi stručnjaka koji može pregledati stvarnu implementaciju, ne samo screenshot bannera.</p></blockquote>
<h2>Koji se propisi primjenjuju?</h2>
<p>Za hrvatski web shop najvažnija su tri sloja:</p>
<ol><li><p><strong>Zakon o elektroničkim komunikacijama</strong>, članak 43. stavak 4. — pohrana podataka ili pristup podacima na korisnikovu uređaju dopušteni su uz privolu nakon jasne i potpune obavijesti. Iznimka postoji za tehničku pohranu ili pristup koji su nužni za prijenos komunikacije ili uslugu koju je korisnik izričito zatražio. <a href="https://narodne-novine.nn.hr/clanci/sluzbeni/full/2022_07_76_1116.html">ZEK, NN 76/22, s izmjenama 14/24 i 45/26</a></p></li><li><p><strong>GDPR</strong>, članci 6., 7. i 13. — kada se identifikatori i drugi podaci mogu povezati s osobom, trebaš odgovarajuću pravnu osnovu, valjanu i dokazivu privolu te jasne informacije o obradi. <a href="https://eur-lex.europa.eu/eli/reg/2016/679/oj?locale=HR">Službeni hrvatski tekst GDPR-a</a></p></li><li><p><strong>Praksa AZOP-a</strong> — AZOP je kod kolačića utvrdio povrede članaka 6., 7. i 13. GDPR-a kada nije bilo pravne osnove, zasebnog izbora i odgovarajućih informacija o funkciji i trajanju kolačića. <a href="https://azop.hr/upravne-novcane-kazne-zbog-neovlastene-obrade-osobnih-podataka-putem-kolacica/">AZOP: kazne zbog nezakonite obrade putem kolačića</a></p></li></ol>
<p>Direktiva o e-privatnosti često se spominje u tekstovima i alatima, ali hrvatski web shop ne provodi direktivu iz PowerPointa. Za domaću primjenu gledaš pravilo preneseno u <strong>članak 43. stavak 4. ZEK-a</strong>, zajedno s GDPR-om.</p>
<h2>Nije svaki kolačić isti</h2>
<p>Pravna podjela nije „Google kaže da je analytics pa je valjda u redu”. Bitno je što tehnologija stvarno radi i je li nužna za uslugu koju je korisnik zatražio.</p>
<h3>Nužne tehnologije</h3>
<p>Primjeri mogu biti:</p>
<ul><li><p>identifikator košarice</p></li><li><p>sigurnosna zaštita prijave</p></li><li><p>raspodjela opterećenja</p></li><li><p>spremanje korisnikova izbora privatnosti</p></li><li><p>autentifikacija tijekom aktivne sesije</p></li></ul>
<p>Za njih može vrijediti iznimka iz članka 43. stavka 4. ZEK-a ako su stvarno nužne. „Nama je marketing nužan za poslovanje” nije ta vrsta nužnosti. Lijep pokušaj, ali ne.</p>
<h3>Analitičke i marketinške tehnologije</h3>
<p>Google Analytics, Meta Pixel, TikTok Pixel, session recording, atribucijski identifikatori i slične tehnologije u pravilu nisu potrebni da bi kupac otvorio stranicu, dodao proizvod u košaricu ili završio kupnju. Za njih treba provjeriti zahtjeve ZEK-a i GDPR-a prije aktivacije.</p>
<p>Pravilo se ne odnosi samo na datoteke koje se zovu cookies. Local Storage, SDK, fingerprinting, piksel ili drugi način pristupa informacijama na uređaju ne postaje nevidljiv zakonu zato što je tehnički moderniji.</p>
<h2>Kako mora izgledati stvaran izbor?</h2>
<p>Na prvom sloju bannera ponudi:</p>
<ul><li><p><strong>Prihvati sve</strong></p></li><li><p><strong>Odbij sve osim nužnih</strong></p></li><li><p><strong>Postavke</strong></p></li></ul>
<p>Opcija odbijanja treba biti jasna i dostupna bez lova na sivi link veličine fusnote. GDPR u članku 7. traži da povlačenje privole bude jednako jednostavno kao njezino davanje, a AZOP naglašava mogućnost zasebnog davanja i povlačenja privole prema vrstama kolačića.</p>
<p>Unaprijed označene kućice, šutnja, nastavak pregledavanja i banner bez izbora nisu valjana potvrda korisnikove volje. Definicija privole iz članka 4. točke 11. GDPR-a traži dobrovoljno, posebno, informirano i nedvosmisleno izražavanje volje jasnom potvrdnom radnjom.</p>
<h2>Što mora pisati u obavijesti?</h2>
<p>Korisniku objasni:</p>
<ul><li><p>tko postavlja tehnologiju</p></li><li><p>naziv i funkciju</p></li><li><p>svrhu obrade</p></li><li><p>kategoriju</p></li><li><p>trajanje</p></li><li><p>prima li podatke treća strana</p></li><li><p>odvija li se prijenos izvan EGP-a</p></li><li><p>kako promijeniti ili povući izbor</p></li><li><p>gdje može pročitati cjelovitu politiku privatnosti</p></li></ul>
<p>Članak 13. GDPR-a traži informacije o voditelju obrade, svrhama, pravnoj osnovi, primateljima, prijenosima, rokovima i pravima. Popis <code>cookie_123 — 90 dana</code> bez objašnjenja funkcije nije transparentnost. To je inventura bez prijevoda za ljude.</p>
<h2>Što se smije pokrenuti prije izbora?</h2>
<p>Prije izbora blokiraj sve što nije obuhvaćeno nužnom iznimkom:</p>
<ul><li><p>marketinške piksele</p></li><li><p>remarketing oznake</p></li><li><p>nenužnu analitiku</p></li><li><p>session recording</p></li><li><p>personalizaciju oglasa</p></li><li><p>cross-site identifikatore</p></li></ul>
<p>Najčešća greška nije u tekstu bannera nego u redoslijedu učitavanja. Banner se nacrta nakon što su <code>page_view</code>, IP adresa, identifikator uređaja i marketinški događaj već poslani. U tom trenutku gumb „Odbij” više nije vremeplov.</p>
<h2>Google Consent Mode nije privola</h2>
<p>Consent Mode je tehnički način slanja signala Googleovim oznakama o korisnikovu izboru. Ne stvara privolu, ne piše politiku privatnosti i ne popravlja pogrešno konfigurirane oznake.</p>
<p>Ako postaviš zadano stanje na <code>denied</code>, to još ne dokazuje da se nijedan drugi vendor nije pokrenuo. Provjeri mrežne zahtjeve, kolačiće i druge spremnike prije i nakon izbora.</p>
<p>Isto vrijedi za Google Tag Manager: GTM je alat za upravljanje oznakama, a ne pravna osnova. Ako je trigger pogrešan, samo će brže i urednije pokrenuti pogrešnu obradu.</p>
<h2>Kako dokazati privolu bez stvaranja nove baze problema?</h2>
<p>Članak 7. stavak 1. GDPR-a stavlja teret dokazivanja privole na voditelja obrade. Zabilježi najmanje:</p>
<ul><li><p>pseudonimni identifikator privole</p></li><li><p>datum i vrijeme</p></li><li><p>verziju bannera i politike</p></li><li><p>odabrane svrhe ili kategorije</p></li><li><p>verziju popisa vendora</p></li><li><p>povlačenje ili promjenu izbora</p></li></ul>
<p>Nije propisano da zbog dokaza moraš vječno čuvati punu IP adresu. Primijeni načelo smanjenja količine podataka iz članka 5. stavka 1. točke (c) GDPR-a i spremi ono što je potrebno da dokažeš događaj.</p>
<h2>Brzi tehnički audit</h2>
<ol><li><p>Otvori stranicu u privatnom prozoru.</p></li><li><p>Nemoj kliknuti banner.</p></li><li><p>U DevToolsima pregledaj Network, Cookies, Local Storage i Session Storage.</p></li><li><p>Potraži zahtjeve prema Googleu, Meti, TikToku, Hotjaru i drugim vendorima.</p></li><li><p>Klikni „Odbij sve osim nužnih” i osvježi stranicu.</p></li><li><p>Prihvati samo analitiku i provjeri pokreće li se samo dopuštena kategorija.</p></li><li><p>Povuci privolu preko stalno dostupne poveznice i ponovi provjeru.</p></li><li><p>Usporedi stvarno ponašanje s politikom kolačića.</p></li></ol>
<p>Audit ponovi nakon promjene teme, plugina, checkouta, GTM kontejnera ili marketinškog alata. Cookie popis nije tetovaža. Mijenja se čim netko u petak u 16:47 doda „samo jedan mali pixel”.</p>
<h2>Konkretno: AZOP-ove kazne od 20.000 i 30.000 eura</h2>
<p>AZOP je dvama trgovačkim društvima izrekao kazne od <strong>20.000 i 30.000 eura</strong>. Među utvrđenim povredama bile su obrada putem kolačića bez pravne osnove, nemogućnost odgovarajućeg davanja i povlačenja privole te nedostatne informacije o funkciji i trajanju kolačića.</p>
<p>AZOP se u objavi konkretno pozvao na:</p>
<ul><li><p>članak 6. stavak 1. GDPR-a</p></li><li><p>članak 7. GDPR-a</p></li><li><p>članak 13. stavke 1. i 2. GDPR-a</p></li></ul>
<p>Drugim riječima, kazna nije došla zato što banner nije bio dovoljno lijep. Došla je zato što obrada, izbor i informacije nisu bili zakoniti i dokazivi.</p>
<h2>Cookie checklista za hrvatski web shop</h2>
<ul><li><p>Nenužne tehnologije blokirane su prije privole — članak 43. stavak 4. ZEK-a</p></li><li><p>Privola je dobrovoljna, posebna, informirana i nedvosmislena — članak 4. točka 11. GDPR-a</p></li><li><p>Privolu možeš dokazati — članak 7. stavak 1. GDPR-a</p></li><li><p>Povlačenje je jednako jednostavno kao davanje — članak 7. stavak 3. GDPR-a</p></li><li><p>Obavijest opisuje svrhe, primatelje i rokove — članak 13. GDPR-a</p></li><li><p>Korisnik može zasebno upravljati kategorijama</p></li><li><p>„Odbij sve osim nužnih” nije skriven</p></li><li><p>Consent Mode i svi drugi tagovi tehnički su testirani</p></li><li><p>Politika odgovara stvarnom stanju, uključujući vendore i trajanje</p></li><li><p>Nakon odbijanja i povlačenja ne nastavlja se nenužno praćenje</p></li></ul>
<h2>Zaključak</h2>
<p>Dobar cookie banner nije onaj koji zauzima pola ekrana i ima sedam nijansi plave. Dobar banner zaustavlja nenužnu obradu, daje stvaran izbor, pamti ga u najmanjoj potrebnoj mjeri i omogućuje promjenu bez digitalne arheologije.</p>
<p>Za širu sliku — newsletter, dobavljače, prava kupaca, incidente, zaposlenike i zaštitu potrošača — pročitaj <a href="https://www.peremin.com/gdpr-checklista-za-e-commerce-bez-gluposti-samo-ono-sto-ti-zapravo-treba/">naprednu GDPR checklistu za web shopove</a>.</p>]]></content:encoded>
</item>
<item>
<title>Brand kampanje: Istina, mitovi i mjerenje učinka</title>
<link>https://www.peremin.com/brand-kampanje-istina-mitovi-i-mjerenje-ucinka/</link>
<guid isPermaLink="true">https://www.peremin.com/brand-kampanje-istina-mitovi-i-mjerenje-ucinka/</guid>
<pubDate>Sat, 17 May 2025 00:00:00 +0000</pubDate>
<description>Brand kampanja nije sveta krava ni skupi PR balon. Evo kako odvojiti mitove od stvarnog inkrementalnog učinka na prodaju i rast.</description>
<content:encoded><![CDATA[<p>Dosta je bilo bajki o brand kampanjama. Svi ih hvale, agencije ih prodaju kao sveti gral, a konferencije ih dižu u nebesa. Ali kad maknemo PR maglu i pogledamo stvarne brojke, što nam ostaje? Evo moje mišljenje.</p>
<h2>Brand kampanje su precijenjene. Točka.</h2>
<p>Za početak, ajmo biti brutalno iskreni: većina ljudi koji pričaju o brand kampanjama nema pojma što one zapravo jesu. Pitajte bilo kojeg prosječnog direktora marketinga ili agencijskog accounta da definira brand kampanju – dobit ćete filozofiranje, ali malo konkretnih odgovora. Čak ni ljudi koji ih prodaju ne znaju ih jasno definirati.</p>
<p>Brand kampanje su industrijski konstrukt. Nastale su iz potrebe agencija da prodaju skupe TV spotove i glamurozne projekte, a ne iz dokazane učinkovitosti. Povijesno, sve se vrtilo oko toga tko može potrošiti više i izgledati veće pred konkurencijom i investitorima. To je “costly signaling” – trošiš da bi pokazao da možeš trošiti.</p>
<h2>Znanost kaže: Brand kampanje nisu čarobni štapić</h2>
<p>Zaboravite bajke o tome da brand kampanje “grade brand” i automatski donose rast. Znanstvena istraživanja jasno pokazuju: <em>oglašavanje ima slab utjecaj na promjenu ponašanja kupaca, pogotovo za male brendove</em>.</p>
<ul><li><p><strong>Brand kampanje najbolje rade za velike, već etablirane brendove</strong>. Njihova glavna funkcija je održavanje memorije o brendu kod postojećih kupaca, a ne osvajanje novih.</p></li><li><p><strong>Za male brendove, brand kampanje su često bacanje novca</strong>. Ako nemaš već veliku bazu kupaca, tvoja reklama neće “upaliti lampicu” u glavi potrošača kad dođe do kupnje. Znanstvenici poput Byrona Sharpa i Jenni Romaniuk (Ehrenberg-Bass Institute) godinama dokazuju da oglašavanje najčešće samo podsjeća ljude na ono što već znaju, a ne stvara nove navike.</p></li><li><p><strong>Brand kampanje nisu efikasne za brzi rast ili prodaju</strong>. Ako ti treba cash flow, fokusiraj se na direktni odgovor i prodajne taktike. Brand kampanje su spore, skupe i rijetko kad donose mjerljive rezultate u kratkom roku.</p></li></ul>
<h2>“Brand vs. performance” je lažna dilema</h2>
<p>Cijela industrija voli dijeliti kampanje na “brand” i “performance”. Istina? <em>Svaka kampanja je i brand i performance</em>. Svaka može graditi brand i donositi prodaju, ovisno o egzekuciji, kreativnosti i kanalu. Svi kanali mogu graditi brand, svi mogu donositi prodaju – nema magije, samo realnost tržišta.</p>
<h2>Brand kampanje su često politički, a ne komercijalni alat</h2>
<p>Zašto se onda toliko forsiraju? Zato što su idealne za političke igre u velikim organizacijama. Lijepo izgledaju na prezentaciji, svi se osjećaju važnima, a nitko ne mora odgovarati za konkretne prodajne rezultate. Agencije ih vole jer donose veće budžete i više nagrada, a menadžeri jer mogu “ostaviti trag”.</p>
<h2>Znanstveni dokazi: Što stvarno radi?</h2>
<ul><li><p><strong>Istraživanja pokazuju da oglašavanje ima smisla samo ako je povezano s jasnim prodajnim ciljem, distribucijom i dostupnošću proizvoda</strong>. Najveći driver rasta nije oglašavanje, nego distribucija i promocije na prodajnom mjestu.</p></li><li><p><strong>Brand kampanje mogu imati smisla za velike brendove koji žele održati tržišnu poziciju ili kod rebrandinga nakon kriz</strong>.</p></li><li><p><strong>Za male i srednje brendove, fokus treba biti na akviziciji kupaca, distribuciji i direktnom marketingu</strong>. To potvrđuje i znanstvena literatura (npr. Byron Sharp, “How Brands Grow”)</p></li></ul>
<h2>Zaključak: Vrijeme je za buđenje</h2>
<p>Ako vodiš manji ili srednji biznis, prestani sanjati o brand kampanjama. Fokusiraj se na ono što donosi konkretne rezultate: akvizicija, distribucija, ponuda, promocije. Brand ćeš graditi usput, kroz iskustvo kupaca i kvalitetu proizvoda, a ne kroz skupe, neprovjerene kampanje.</p>
<p>Ako si već veliki brend, koristi brand kampanje mudro – za održavanje memorije, signaliziranje snage ili kad trebaš popraviti reputaciju. Ali nikad nemoj zaboraviti da je brand rezultat prodaje, a ne obrnuto.</p>
<p><strong>I da, slažem se sa svime gore napisanim. Vrijeme je da marketinški svijet prestane pušiti bajke i počne raditi ono što stvarno donosi rezultate.</strong></p>
<h2>Dodatni znanstveni dokazi</h2>
<ul><li><p><strong>Oglašavanje ima pozitivan, ali slab utjecaj na ponašanje potrošača – pogotovo kad je riječ o brand awarenessu i lojalnosti, ali ne i o brzim prodajnim rezultatima</strong>.</p></li><li><p><strong>Dugoročni efekti oglašavanja postoje, ali su često precijenjeni i ovise o tome koliko je oglas uopće zapamćen i povezan s kupovnom situacijom</strong>.</p></li><li><p><strong>Efikasnost kampanja ovisi o trajanju, budžetu i kvaliteti sadržaja, ali i dalje najveći utjecaj ima distribucija i dostupnost proizvoda</strong>.</p></li></ul>
<p><strong>Poruka za kraj:</strong>
Ne budi ovca. Razmišljaj svojom glavom, traži dokaze i ne bacaj novac na brand kampanje samo zato što to rade “veliki dečki”. Radije budi onaj koji gradi brand kroz stvarne rezultate, a ne kroz iluziju.</p>]]></content:encoded>
</item>
<item>
<title>Marketing ROI: Kako povezati metrike, modele i rezultat</title>
<link>https://www.peremin.com/roi-nije-jedan-broj-kako-povezati-metrike-modele-i-zdrav-razum-u-marketingu/</link>
<guid isPermaLink="true">https://www.peremin.com/roi-nije-jedan-broj-kako-povezati-metrike-modele-i-zdrav-razum-u-marketingu/</guid>
<pubDate>Sat, 17 May 2025 00:00:00 +0000</pubDate>
<description>Marketing ROI nije broj iz jednog dashboarda. Evo kako povezati atribuciju, eksperimente, ekonometriju, maržu i zdrav poslovni razum.</description>
<content:encoded><![CDATA[<p><strong>Uvod: Marketing ROI – sveti gral ili mit?</strong>
Ah, ROI. Magični broj koji menadžeri žele, a marketinški timovi mrze. Svi pričaju o njemu, ali rijetko tko zna što zapravo znači. Je li ROI samo još jedan broj u Excelu ili je to priča o tome kako cijeli marketing orkestar svira zajedno? Vrijeme je da razbijemo mitove, spojimo znanost i zdrav razum – i to bez dosadnih tablica.</p>
<h2>1. Marketing je luda kuća metrika</h2>
<p>Imate svijest o brendu, prodaju, klikove, lajkove, recenzije… Sve to zvuči kao reality show u kojem svatko vuče na svoju stranu. Problem? Svi ti brojevi često nemaju veze jedan s drugim koliko i prosječan reality show ima s Oscarima.
<strong>Hanssens (2014)</strong> pokazuje kako ekonometrika pomaže povezati uzroke i posljedice – tko je kriv kad prodaja padne, a svi tvrde da su dali sve od sebe.</p>
<h2>2. ROI nije broj. On je orkestar.</h2>
<p>Svaka metrika je instrument. Ako ne znaš povezati melodiju između ponašanja kupaca, stavova i novčanih tokova – završit ćeš s kaosom. <strong>Rust et al. (2004)</strong> upozoravaju: fokus na ROI bez konteksta vodi do loših odluka. ROI nije samo profit podijeljen s troškom, već i priča o tome što se događa kad pomakneš jedan dio marketinškog miksa.</p>
<h2>3. Eksperimenti su ključni, osim kad su skupi i strašni</h2>
<p>Svi vole eksperimentirati – dok ne treba nekome uzeti budžet. <strong>Ariely</strong> brutalno iskreno piše zašto kompanije ne vole eksperimente: strah, inercija, politika. Rješenje? Počni s malim testovima, pokaži rezultate, pa tek onda traži veći budžet.</p>
<h2>4. Efektivnost vs. Efikasnost: Kratkoročno i dugoročno</h2>
<p>ROI je super za pokazati efikasnost (“koliko smo zaradili za svaki euro”), ali često zanemaruje efektivnost (“što smo izgradili za budućnost?”). <strong>Hanssens (2015)</strong> nudi empirijske generalizacije koje pokazuju kako različiti kanali djeluju na prodaju – i zašto ne smiješ gledati samo kratkoročne rezultate.</p>
<h2>5. Prediktivni modeli i analitika: Python, Bayesian i dashboardi</h2>
<p>Dosta je nagađanja. Vrijeme je za modele!</p>
<ul><li><p><strong>Ekonometrika</strong> (Hanssens, 2014): koristi regresije i modele za procjenu utjecaja svakog kanala.</p></li><li><p><strong>Dashboardi</strong> (Pauwels, 2014): sve metrike na jednom mjestu, vizualno i jasno. Nema više izgubljenih podataka po silosima.</p></li><li><p><strong>Primjeri u Pythonu</strong>: Random Forest za predikciju ROI-ja, Bayesian analiza za procjenu rizika – jer marketing nije egzaktna znanost, ali može biti blizu.</p></li></ul>
<h2>6. Vizualizacije: Jer nitko ne želi čitati vaše Excel tablice</h2>
<p>Menadžeri žele heatmap, funnel, graf. Ne tablicu od 20 redova. Prikaži gdje je problem (crveno), gdje je prilika (zeleno) – i svi će te slušati.
<strong>Pauwels (2014)</strong> ističe da su dashboardi ključ za pretvaranje podataka u akciju<a href="https://www.skillsoft.com/book/its-not-the-size-of-the-data-its-how-you-use-it-smarter-marketing-with-analytics-and-dashboards-d1728370-f2c9-11e6-adc4-0242c0a80902">4</a>.</p>
<h2>7. Poveži metrike u lanac: Od svijesti do lojalnosti</h2>
<p>Svaka metrika je karika u lancu:</p>
<ul><li></li></ul>
<p>Awareness → Engagement → Consideration → Conversion → Retention
Ako preskočiš jedan korak, lanac puca. Dashboard pomaže da vidiš gdje gubiš korisnike i što treba popraviti.</p>
<h2>8. Akcija: Testiraj, automatiziraj, usavršavaj</h2>
<p>Postavi lanac, automatiziraj izvještavanje, svaki mjesec analiziraj gdje curiš korisnike ili novac. Marketing nije statičan – stalno se mijenja, baš kao i dobar rock koncert.</p>
<h2>Zaključak: ROI kao rock koncert</h2>
<p>Ako gledaš samo svoj kutak – digitalni klik, offline kampanju ili Excel formulu – možda je vrijeme da sviraš solo. Marketing ROI je za timske igrače koji razumiju širu sliku.
ROI nije broj; to je priča. Ispričaj je dobro, koristi modele, dashboarde i zdrav razum – i postani maestro svog marketing orkestra.</p>
<h2>Dodatno čitanje za marketing štrebere</h2>
<ul><li>Hanssens, Dominique M. (2014). Econometric Models.</li><li>Hanssens, Dominique M. (2015). Empirical Generalizations About Marketing Impact, 2nd Edition.</li><li>Rust, Roland T., et al. (2004). Measuring Marketing Productivity: Current Knowledge and Future Directions.</li><li>Pauwels, Koen (2014). It’s Not the Size of the Data-It’s How You Use It: Smarter Marketing with Analytics and Dashboards.</li></ul>]]></content:encoded>
</item>
<item>
<title>Sintetički podaci u istraživanjima: Genijalnost ili prečac?</title>
<link>https://www.peremin.com/sinteticki-podaci-u-istrazivanjima-genijalnost-ili-samo-lijenost/</link>
<guid isPermaLink="true">https://www.peremin.com/sinteticki-podaci-u-istrazivanjima-genijalnost-ili-samo-lijenost/</guid>
<pubDate>Sat, 17 May 2025 00:00:00 +0000</pubDate>
<description>Sintetički podaci ubrzavaju istraživanje i štite privatnost, ali mogu uredno ponoviti pogrešne pretpostavke. Evo gdje pomažu, a gdje varaju.</description>
<content:encoded><![CDATA[<p>Vrijeme je da otvoreno progovorimo: jesu li sintetički podaci u istraživanjima briljantna inovacija ili samo još jedan shortcut za one koji ne žele prljati ruke stvarnim podacima? Evo što kažu najnovija istraživanja, iskustva iz prakse i rezultati s američkih, britanskih i njemačkih fakulteta – plus, kako sve to možeš iskoristiti za stvarni rast u marketingu.</p>
<h2>Što je AI-pokretano sintetičko istraživanje tržišta?</h2>
<p>Zamisli da provodiš anketu, ali umjesto da plaćaš stvarne ljude da je ispune (ili moliš prijatelje i rodbinu da odgovore na još jedan dosadni upitnik), pustiš umjetnu inteligenciju da stvori sintetičke ispitanike. To su virtualne osobe koje oponašaju stvarne ljude – s vlastitim stavovima, preferencijama i mišljenjima.</p>
<p>Sintetički podaci su umjetno generirani podaci koji imitiraju strukturu i odnose stvarnih podataka, ali ne sadrže informacije o stvarnim osobama. Drugim riječima, AI analizira stvarne skupove podataka, uči obrasce i potom generira nove, “lažne” podatke koji izgledaju kao pravi – ali bez GDPR glavobolje.</p>
<p><strong>Zašto je to važno?</strong></p>
<ul><li><p><strong>Brzina i skalabilnost:</strong> Trebaš milijun odgovora do sutra? Sintetički podaci to omogućuju.</p></li><li><p><strong>Privatnost:</strong> Nema više straha od povrede osobnih podataka – sintetički podaci su anonimni po defaultu.</p></li><li><p><strong>Fleksibilnost:</strong> Možeš simulirati i najrjeđe scenarije ili “rubne slučajeve” koje bi stvarnim istraživanjem teško uhvatio.</p></li></ul>
<h3>Evo kako to funkcionira:</h3>
<ul><li><p><strong>Augmentirani sintetički podaci:</strong> Popunjavaju praznine tamo gdje nemaš dovoljno stvarnih podataka. Nedostaju ti mladi dečki u demografiji? AI će ih nadoknaditi.</p></li><li><p><strong>Umjetni sudionici:</strong> Potpuno lažni ispitanici koji mogu masovno simulirati odgovore na ankete.</p></li></ul>
<p>Zvuči kul, zar ne? Sve dok ne shvatiš da su podaci koje izbace samo onoliko dobri koliko i model kojim ih hraniš. <strong>Smeće unutra, smeće van, prijatelju.</strong></p>
<h2>Kratka povijest prikupljanja podataka</h2>
<p>Prije nego što je AI bahato stupio na scenu, istraživanje tržišta bilo je sirovo, skupo i sporo kao vrag. Evo kratke vremenske crte za one koji nisu upućeni:</p>
<p><strong>1930-e – 1980-e: Anketa od vrata do vrata i telefonski pozivi</strong>
George Gallup praktički je izmislio cijelu industriju. Tada su ankete provodili stvarni ljudi koji su išli od kuće do kuće ili zvali ljude na fiksne telefone. Bilo je precizno, ali bolno sporo i nevjerojatno skupo.</p>
<ul><li><p><strong>Prednosti:</strong> Stvarni, autentični podaci od stvarnih ljudi.</p></li><li><p><strong>Nedostaci:</strong> Sporo, skupo i često pristrano prema onima koji su bili kod kuće ili su se javili na rotacijski telefon.</p></li></ul>
<p><strong>2000-e: Uspon online anketa</strong>
Preskočimo do internetskog doba. Online alati poput SurveyMonkey-a omogućili su brže i jeftinije prikupljanje podataka. No, i dalje je bilo problema – zasićenost anketama, ispitanici koji klikću bez razmišljanja, nepotpuni odgovori.</p>
<ul><li><p><strong>Prednosti:</strong> Isplativo i brzo.</p></li><li><p><strong>Nedostaci:</strong> Problemi s kvalitetom i sklonost privlačenju nezainteresiranih ili dosadno raspoloženih ispitanika.</p></li></ul>
<p><strong>Danas:</strong> Na scenu stupa AI i sintetički podaci – da nas spasi… ili da sve pokvari.</p>
<h2>Kako su ih koristili na američkim, britanskim sveučilištima?</h2>
<h3><strong>Amerika:</strong></h3>
<p>Na University of Maryland razvijen je Synthetic Data Project, gdje su sintetički podaci omogućili istraživačima analizu obrazovnih i radnih tranzicija bez kompromitiranja privatnosti. U medicini (Washington University in St. Louis) sintetički podaci su omogućili validaciju modela za predviđanje ishoda operacija – rezultati su bili gotovo identični onima dobivenim na stvarnim podacima.</p>
<h3><strong>Velika Britanija:</strong></h3>
<p>Alan Turing Institute i UK Data Service proveli su opsežna testiranja i zaključili: sintetički podaci ubrzavaju istraživanja i smanjuju rizik od zloupotrebe osobnih informacija. No, upozoravaju na potrebu standardizacije i edukacije korisnika.</p>
<h3>Primjeri iz prakse: Syntho i SAS Viya</h3>
<p>Na globalnom SAS Hackathonu, Syntho je demonstrirao kako sintetički podaci mogu unaprijediti analitiku u zdravstvu. Korištenjem Syntho Enginea unutar SAS Viya, bolnice su mogle predvidjeti pogoršanje i smrtnost pacijenata s AUC-om od 0.74 (jedna bolnica) i 0.78 (više bolnica). Korelacije i važnost varijabli ostale su očuvane, što potvrđuje da sintetički podaci mogu biti jednako kvalitetni kao i stvarni.</p>
<h2>AI i sintetički podaci u marketingu: konkretna vrijednost</h2>
<p>Marketinški AI sustavi (Google Ads, Netflix, Amazon) već koriste podatke za personalizaciju i optimizaciju kampanja. Sintetički podaci omogućuju:</p>
<ul><li><p><strong>Testiranje novih strategija bez rizika za privatnost</strong></p></li><li><p><strong>Brzu simulaciju ponašanja novih segmenata</strong></p></li><li><p><strong>Automatizaciju i skaliranje marketinških eksperimenata</strong></p></li></ul>
<h2>Ali… što može poći po zlu?</h2>
<p>Rizici i ograničenja prema istraživanjima:</p>
<ul><li><p><strong>Pristranost:</strong> Ako su ulazni podaci pristrani, i sintetički će biti.</p></li><li><p><strong>Gubitak autentičnosti:</strong> Sintetički podaci mogu propustiti “anomalije” i neočekivane uvide koji često vode inovacijama.</p></li><li><p><strong>“Habsburška AI”:</strong> Ako treniraš modele samo na sintetičkim podacima, može doći do degradacije performansi i “zatvorenog kruga” bez stvarne inovacije.</p></li></ul>
<h2>Kako se sintetički podaci generiraju koristeći algoritme?</h2>
<p>Prvo, tu su <strong>Generativne Protivničke Mreže</strong> (GAN-ovi).</p>
<p>Zamislite ih kao dva tipa u baru: jedan je vječiti lažljivac (generator), drugi je paranoični inspektor (diskriminator). Generator pokušava smisliti što uvjerljiviju laž – sintetički podatak – dok inspektor pokušava provaliti je li podatak pravi ili lažan. Što se više nadmudruju, to su laži (sintetički podaci) uvjerljivije. Kad inspektor više ne može razlikovati lažno od stvarnog, znaš da si stvorio podatak koji može preživjeti i najgore birokratske provjere.</p>
<p>Onda imaš <strong>Varijacijske Autokodere</strong> (VAE).</p>
<p>Oni rade kao stari detektivi: uzmu stvarne podatke, sažmu ih u svojevrsni “DNA kod”, pa iz tog koda generiraju nove podatke koji su slični originalu, ali uvijek malo drugačiji – kao rođaci iz daleke Amerike koje nikad nisi upoznao, ali vidiš da ste iz iste familije.</p>
<p>Tu su i <strong>Veliki Jezični Modeli</strong> (kao GPT).</p>
<p>Oni su kao pisci na deadlineu: pročitali su milijune knjiga, članaka i tweetova, pa sada mogu napisati gotovo bilo što – od medicinskih izvještaja do marketinških analiza – i to na temelju nekoliko rečenica uputa. Ako im daš dovoljno primjera, mogu generirati cijele baze podataka koje zvuče kao da su ih ispunjavali pravi ljudi.</p>
<p>Ne zaboravimo i <strong>statističke modele</strong> – oni su stari školski profesori, koji pažljivo analiziraju prosjeke, varijance i korelacije, pa iz tih brojeva izvlače nove uzorke koji se ponašaju kao original, ali nisu vezani ni za jednu stvarnu osobu.</p>
<p>Na kraju, sve se svodi na ovo: algoritmi prouče stvarne podatke, nauče što ih čini “živima”, a zatim stvaraju nove podatke koji su dovoljno uvjerljivi da prežive svaku inspekciju, ali dovoljno apstraktni da ne otkriju ničiji pravi identitet. To je kao da napišeš reportažu o gradu u kojem nikad nisi bio, ali svi lokalci kažu: “Da, ovo je baš naš grad.”</p>
<h3><strong>Agent-Based Modeling (ABM): Simuliraj svijet u malom</strong></h3>
<p>ABM je kao igra <em>The Sims</em> za podatke. <a href="https://gretel.ai/blog/how-to-generate-synthetic-data-tools-and-techniques-to-create-interchangeable-datasets">Stvoriš “agente”</a> (npr. korisnike, stanare grada) s pravilima ponašanja, pustiš ih da komuniciraju, i snimaš podatke koji nastaju iz tih interakcija.</p>
<p><strong>Primjer</strong>:</p>
<ul><li><p>Simulacija prometa u gradu: agenti (vozači) slijede pravila vožnje. Algoritam bilježi kolone, brzine, nesreće – sve <em>bez kamera ili senzora</em>.</p></li></ul>
<p>Evo kako izgleda Agent-Based Modeling (ABM) simulacija glasanja građana pod utjecajem propagande i događaja, kao da vodiš vlastitu “The Sims” igru za društvene fenomene:</p>
<h2><strong>Simulacija Glasaj</strong></h2>
<p>Svaki građanin je agent sa svojim početnim stavom: može biti “za”, “protiv” ili “neutralan”.</p>
<p>Na mišljenje svakog građanina utječu dva faktora:</p>
<ul><li><p><strong>Propaganda</strong> (npr. medijska kampanja, oglašavanje)</p></li><li><p><strong>Event</strong> (npr. politički skandal, ekonomski šok)</p></li></ul>
<p>Svaki građanin subjektivno percipira propagandu i event (dodana je varijabilnost).
Početni stavovi utječu na otpornost prema promjeni mišljenja: uvjereni građani teže mijenjaju mišljenje.</p>
<h2>Kako ovo radi?</h2>
<ol><li><p><strong>Generiranje agenata</strong>: ChatGPT kreira unikatne profile s političkim preferencijama i otpornošću na promjene</p></li><li><p><strong>Simulacija propagande</strong>: Svaki dan se generiraju politički događaji koji utječu na agente</p></li><li><p><strong>Dinamičke promjene</strong>: Agenti reagiraju na događaje prema svojoj otpornosti i osobnostima</p></li><li><p><strong>Vizualizacija</strong>: Prikaz konačne distribucije stavova nakon simulacije</p></li></ol>
<p>Ova integracija omogućuje realističnije modeliranje društvenih procesa gdje svaki agent ima jedinstveno ponašanje generirano naprednim AI modelom.</p>
<pre><code class="language-python"><span class="tok-keyword">import</span> openai
<span class="tok-keyword">import</span> numpy <span class="tok-keyword">as</span> np
<span class="tok-keyword">import</span> matplotlib<span class="tok-operator">.</span>pyplot <span class="tok-keyword">as</span> plt

<span class="tok-comment"># 1. Inicijalizacija ChatGPT klijenta</span>
<span class="tok-keyword">class</span> <span class="tok-type">ChatGPTClient</span><span class="tok-operator">:</span>
 <span class="tok-keyword">def</span> <span class="tok-function">__init__</span>(self, api_key)<span class="tok-operator">:</span>
 self<span class="tok-operator">.</span>api_key <span class="tok-operator">=</span> api_key
 openai<span class="tok-operator">.</span>api_key <span class="tok-operator">=</span> self<span class="tok-operator">.</span>api_key

 <span class="tok-keyword">def</span> <span class="tok-function">generate_response</span>(self, prompt, mo<span class="tok-keyword">del</span><span class="tok-operator">=</span><span class="tok-string">"gpt-4-turbo"</span>, max_tokens<span class="tok-operator">=</span><span class="tok-number">150</span>)<span class="tok-operator">:</span>
 response <span class="tok-operator">=</span> openai<span class="tok-operator">.</span><span class="tok-type">ChatCompletion</span><span class="tok-operator">.</span><span class="tok-function">create</span>(
 mo<span class="tok-keyword">del</span><span class="tok-operator">=</span>mo<span class="tok-keyword">del</span>,
 messages<span class="tok-operator">=</span>[{<span class="tok-string">"role"</span><span class="tok-operator">:</span> <span class="tok-string">"user"</span>, <span class="tok-string">"content"</span><span class="tok-operator">:</span> prompt}],
 max_tokens<span class="tok-operator">=</span>max_tokens
 )
 <span class="tok-keyword">return</span> response<span class="tok-operator">.</span>choices[<span class="tok-number">0</span>]<span class="tok-operator">.</span>message[<span class="tok-string">'content'</span>]

<span class="tok-comment"># 2. Glavna simulacija s AI integracijom</span>
<span class="tok-keyword">class</span> <span class="tok-type">ABMVotingSimulation</span><span class="tok-operator">:</span>
 <span class="tok-keyword">def</span> <span class="tok-function">__init__</span>(self, api_key, num_agents<span class="tok-operator">=</span><span class="tok-number">1000</span>)<span class="tok-operator">:</span>
 self<span class="tok-operator">.</span>client <span class="tok-operator">=</span> <span class="tok-type">ChatGPTClient</span>(api_key)
 self<span class="tok-operator">.</span>num_agents <span class="tok-operator">=</span> num_agents
 self<span class="tok-operator">.</span>agents <span class="tok-operator">=</span> []

 <span class="tok-comment"># Generiraj početne profile agenata</span>
 self<span class="tok-operator">.</span><span class="tok-function">_generate_agents</span>()

 <span class="tok-keyword">def</span> <span class="tok-function">_generate_agents</span>(self)<span class="tok-operator">:</span>
 personality_types <span class="tok-operator">=</span> [<span class="tok-string">'konzervativac'</span>, <span class="tok-string">'liberalac'</span>, <span class="tok-string">'populist'</span>, <span class="tok-string">'apolitičan'</span>]
 <span class="tok-keyword">for</span> i <span class="tok-keyword">in</span> <span class="tok-function">range</span>(self<span class="tok-operator">.</span>num_agents)<span class="tok-operator">:</span>
 prompt <span class="tok-operator">=</span> f<span class="tok-string">"""Generiraj politički profil agenta sa:
 - Početni stav: [za/protiv/neutralno]
 - Osobnost: {np.random.choice(personality_types)}
 - Otpornost na promjene: 0-1
 Odgovori u formatu: stav|otpornost"""</span>

 response <span class="tok-operator">=</span> self<span class="tok-operator">.</span>client<span class="tok-operator">.</span><span class="tok-function">generate_response</span>(prompt)
 <span class="tok-keyword">try</span><span class="tok-operator">:</span>
 stav, otpornost <span class="tok-operator">=</span> response<span class="tok-operator">.</span><span class="tok-function">split</span>(<span class="tok-string">'|'</span>)
 self<span class="tok-operator">.</span>agents<span class="tok-operator">.</span><span class="tok-function">append</span>({
 <span class="tok-string">'id'</span><span class="tok-operator">:</span> i,
 <span class="tok-string">'stav'</span><span class="tok-operator">:</span> stav<span class="tok-operator">.</span><span class="tok-function">strip</span>()<span class="tok-operator">.</span><span class="tok-function">lower</span>(),
 <span class="tok-string">'otpornost'</span><span class="tok-operator">:</span> <span class="tok-type">float</span>(otpornost),
 <span class="tok-string">'promjene'</span><span class="tok-operator">:</span> <span class="tok-number">0</span>
 })
 <span class="tok-keyword">except</span><span class="tok-operator">:</span>
 <span class="tok-comment"># Fallback za neispravne odgovore</span>
 self<span class="tok-operator">.</span>agents<span class="tok-operator">.</span><span class="tok-function">append</span>({
 <span class="tok-string">'id'</span><span class="tok-operator">:</span> i,
 <span class="tok-string">'stav'</span><span class="tok-operator">:</span> <span class="tok-string">'neutralno'</span>,
 <span class="tok-string">'otpornost'</span><span class="tok-operator">:</span> <span class="tok-number">0.5</span>,
 <span class="tok-string">'promjene'</span><span class="tok-operator">:</span> <span class="tok-number">0</span>
 })

 <span class="tok-keyword">def</span> <span class="tok-function">_apply_propaganda</span>(self, strength, message_type)<span class="tok-operator">:</span>
 <span class="tok-keyword">for</span> agent <span class="tok-keyword">in</span> self<span class="tok-operator">.</span>agents<span class="tok-operator">:</span>
 prompt <span class="tok-operator">=</span> f<span class="tok-string">"""Agent {agent['id']} (stav: {agent['stav']}, otpornost: {agent['otpornost']}):
 Nova propaganda: {message_type} jačine {strength}.
 Hoće li promijeniti stav? Odgovori samo s [da/ne]"""</span>

 response <span class="tok-operator">=</span> self<span class="tok-operator">.</span>client<span class="tok-operator">.</span><span class="tok-function">generate_response</span>(prompt)<span class="tok-operator">.</span><span class="tok-function">strip</span>()<span class="tok-operator">.</span><span class="tok-function">lower</span>()
 <span class="tok-keyword">if</span> response <span class="tok-operator">=</span><span class="tok-operator">=</span> <span class="tok-string">'da'</span> <span class="tok-keyword">and</span> np<span class="tok-operator">.</span>random<span class="tok-operator">.</span><span class="tok-function">rand</span>() <span class="tok-operator">&gt;</span> agent[<span class="tok-string">'otpornost'</span>]<span class="tok-operator">:</span>
 agent[<span class="tok-string">'stav'</span>] <span class="tok-operator">=</span> <span class="tok-string">'za'</span> <span class="tok-keyword">if</span> message_type <span class="tok-operator">=</span><span class="tok-operator">=</span> <span class="tok-string">'pozitivna'</span> <span class="tok-keyword">else</span> <span class="tok-string">'protiv'</span>
 agent[<span class="tok-string">'promjene'</span>] <span class="tok-operator">+</span><span class="tok-operator">=</span> <span class="tok-number">1</span>

 <span class="tok-keyword">def</span> <span class="tok-function">run_simulation</span>(self, days<span class="tok-operator">=</span><span class="tok-number">30</span>)<span class="tok-operator">:</span>
 <span class="tok-keyword">for</span> dan <span class="tok-keyword">in</span> <span class="tok-function">range</span>(days)<span class="tok-operator">:</span>
 <span class="tok-comment"># Primjena dnevnih političkih događaja</span>
 event_strength <span class="tok-operator">=</span> np<span class="tok-operator">.</span>random<span class="tok-operator">.</span><span class="tok-function">uniform</span>(<span class="tok-number">0.1</span>, <span class="tok-number">0.9</span>)
 event_type <span class="tok-operator">=</span> np<span class="tok-operator">.</span>random<span class="tok-operator">.</span><span class="tok-function">choice</span>([<span class="tok-string">'skandal'</span>, <span class="tok-string">'ekonomski_rast'</span>, <span class="tok-string">'teroristički_akt'</span>])

 <span class="tok-comment"># Ažuriranje stanja agenata</span>
 self<span class="tok-operator">.</span><span class="tok-function">_apply_propaganda</span>(strength<span class="tok-operator">=</span>event_strength, message_type<span class="tok-operator">=</span>event_type)

 <span class="tok-comment"># Vizualizacija rezultata</span>
 self<span class="tok-operator">.</span><span class="tok-function">_plot_results</span>()

 <span class="tok-keyword">def</span> <span class="tok-function">_plot_results</span>(self)<span class="tok-operator">:</span>
 stavovi <span class="tok-operator">=</span> [agent[<span class="tok-string">'stav'</span>] <span class="tok-keyword">for</span> agent <span class="tok-keyword">in</span> self<span class="tok-operator">.</span>agents]
 unique, counts <span class="tok-operator">=</span> np<span class="tok-operator">.</span><span class="tok-function">unique</span>(stavovi, return_counts<span class="tok-operator">=</span><span class="tok-literal">True</span>)

 plt<span class="tok-operator">.</span><span class="tok-function">figure</span>(figsize<span class="tok-operator">=</span>(<span class="tok-number">10</span>,<span class="tok-number">6</span>))
 plt<span class="tok-operator">.</span><span class="tok-function">bar</span>(unique, counts<span class="tok-operator">/</span>np<span class="tok-operator">.</span><span class="tok-function">sum</span>(counts)<span class="tok-operator">*</span><span class="tok-number">100</span>, col<span class="tok-keyword">or</span><span class="tok-operator">=</span>[<span class="tok-string">'#ff9999'</span>,<span class="tok-string">'#66b3ff'</span>,<span class="tok-string">'#99ff99'</span>])
 plt<span class="tok-operator">.</span><span class="tok-function">title</span>(<span class="tok-string">'Distribucija političkih stavova nakon simulacije'</span>)
 plt<span class="tok-operator">.</span><span class="tok-function">ylabel</span>(<span class="tok-string">'Postotak (%)'</span>)
 plt<span class="tok-operator">.</span><span class="tok-function">xlabel</span>(<span class="tok-string">'Stav'</span>)
 plt<span class="tok-operator">.</span><span class="tok-function">ylim</span>(<span class="tok-number">0</span>,<span class="tok-number">100</span>)
 plt<span class="tok-operator">.</span><span class="tok-function">show</span>()

<span class="tok-comment"># 3. Pokretanje simulacije</span>
<span class="tok-keyword">if</span> __name__ <span class="tok-operator">=</span><span class="tok-operator">=</span> <span class="tok-string">"__main__"</span><span class="tok-operator">:</span>
 <span class="tok-comment"># Zamijeni 'tvoj_api_kljuc' sa stvarnim OpenAI API ključem</span>
 simulacija <span class="tok-operator">=</span> <span class="tok-type">ABMVotingSimulation</span>(api_key<span class="tok-operator">=</span><span class="tok-string">'tvoj_api_kljuc'</span>, num_agents<span class="tok-operator">=</span><span class="tok-number">500</span>)
 simulacija<span class="tok-operator">.</span><span class="tok-function">run_simulation</span>(days<span class="tok-operator">=</span><span class="tok-number">45</span>)</code></pre>
<h3><strong>Statističko uzorkovanje: Baci kockice i generiraj podatke</strong></h3>
<p>Najjednostavniji oblik simulacije. Ako znaš da neki podaci slijede normalnu distribuciju (npr. visina ljudi), možeš generirati nasumične vrijednosti iz te distribucije pomoću <strong>NumPy-a</strong> ili <strong>Monte Carlo metode.</strong></p>
<pre><code class="language-python"><span class="tok-keyword">import</span> numpy <span class="tok-keyword">as</span> np
sintetičke_vrijednosti <span class="tok-operator">=</span> np<span class="tok-operator">.</span>random<span class="tok-operator">.</span><span class="tok-function">normal</span>(loc<span class="tok-operator">=</span><span class="tok-number">170</span>, scale<span class="tok-operator">=</span><span class="tok-number">10</span>, size<span class="tok-operator">=</span><span class="tok-number">1000</span>) <span class="tok-comment"># 1000 osoba ~170cm</span></code></pre>
<h2><strong>Pravila i logika: “Ako je X, onda Y”</strong></h2>
<p>Ovdje algoritam generira podatke po <strong>unaprijed definiranim pravilima.</strong> Primjenjuje se tamo gdje je potrebna potpuna kontrola:</p>
<p><strong>Primjer za e-trgovinu</strong>:</p>
<ul><li><p>Pravilo 1: Ako je korisnik kupio laptop, generiraj 3 sintetička kupca koji su kupili i miš.</p></li><li><p>Pravilo 2: Ako je prosječna potrošnja &gt; 1000 EUR, smanji cijene za 5%.</p></li></ul>
<h2><strong>Zašto je ovo revolucija?</strong></h2>
<ul><li><p><strong>Zaštita privatnosti</strong>: Simulacijski podaci ne sadrže PII (osobno identificirajuće informacije) – GDPR ti ne može ništa.</p></li><li><p><strong>Rubni slučajevi</strong>: Možeš generirati rijetke scenarije (npr. pandemija ili krah dionica) koje stvarni svijet ne nudi dovoljno često.</p></li><li><p><strong>Brža inovacija</strong>: Testiraj AI modele na <em>milijunima</em> sintetičkih scenarija prije nego što ih pustiš u stvarni svijet.</p></li></ul>
<h2><strong><a href="https://www.syntho.ai/hr/">Syntho</a>, <a href="https://gretel.ai/">Gretel</a> &amp; Co: Alati za simulacijsku magiju</strong></h2>
<p>Platforme poput <strong>Syntho</strong> kombiniraju sve ove metode u jedan interfejs. Njihov “motor” može:</p>
<ul><li><p>Klonirati entitete (npr. korisnike) s novim ID-ovima.</p></li><li><p>Maskirati osjetljive podatke, zadržavajući strukturu.</p></li><li><p>Generirati cijele baze podataka za testiranje softvera za 5 minuta.</p></li></ul>
<h2>Pravna i etička pitanja</h2>
<p>Sintetički podaci su GDPR-friendly, ali to ne znači da nema pravnih izazova. Britanska i njemačka istraživanja ističu potrebu za jasnim standardima i transparentnošću u generiranju i korištenju sintetičkih podataka.</p>
<h2><strong>Limiti: Zašto simulacije nikad neće biti savršene?</strong></h2>
<ul><li><p><strong>GIGO (Garbage In, Garbage Out)</strong>: Ako početni podaci imaju pristranost (npr. nedovoljno podataka o siromašnima), simulacija će reproducirati tu pristranost.</p></li><li><p><strong>Kaos teorija</strong>: Mali pogrešci u početnim uvjetima mogu dovesti do radikalno drugačijih ishoda (tzv. “efekt leptira”).</p></li><li><p><strong>Računska snaga</strong>: Simulacija svake stanice u ljudskom tijelu zahtijevala bi više računalne snage nego što postoji na planeti.</p></li></ul>
<p>Sintetički podaci nisu ni čista genijalnost ni puka lijenost. Oni su alat koji, kada se koristi odgovorno i u kombinaciji sa stvarnim podacima, donosi ogromne prednosti: brzinu, skalabilnost, zaštitu privatnosti i mogućnost inovacije. No, bez validacije, edukacije i jasnih standarda, lako možeš završiti s “habsburškom AI” – modelom koji izgleda pametno, ali ne donosi stvarnu vrijednost.</p>
<p><strong>Tvoja iskustva?</strong> Jesi li već koristio sintetičke podatke u svom poslu? Što ti je donijelo najviše vrijednosti, a što te razočaralo?</p>]]></content:encoded>
</item>
<item>
<title>Optimizacija slika za web shop pomoću Pythona</title>
<link>https://www.peremin.com/kako-automatski-optimizirati-slike-za-web-shop-uz-pomoc-pythona/</link>
<guid isPermaLink="true">https://www.peremin.com/kako-automatski-optimizirati-slike-za-web-shop-uz-pomoc-pythona/</guid>
<pubDate>Thu, 06 Feb 2025 00:00:00 +0000</pubDate>
<description>Python skripta za automatsko smanjivanje, komprimiranje i pretvaranje slika u WebP format radi bržeg web shopa i boljeg korisničkog iskustva.</description>
<content:encoded><![CDATA[<p>Ako vodite web shop, već znate koliko je brzina učitavanja stranice ključna za uspjeh.</p>
<p>Brža stranica znači zadovoljnije korisnike, bolju SEO poziciju i, naravno, više prodaje. Jedan od ključnih koraka u optimizaciji brzine je pravilna optimizacija slika, a .webp format je tu neprikosnoveni prvak.</p>
<p>U ovom vodiču pokazat ću vam kako automatizirati proces optimizacije slika.</p>
<p>Skripta će resizeati slike na 1000x1000 piksela, komprimirati ih tako da zadrže kvalitetu, a zatim ih pretvoriti u .webp format, koji je posebno prilagođen za brzi web.</p>
<h2>Zašto koristiti .webp format?</h2>
<p>**.webp je Googleov format slika dizajniran za web. **</p>
<p>Njegove prednosti su:</p>
<ul><li><p>Manja veličina datoteke: Slike su do 30% manje od JPEG-a ili PNG-a uz istu kvalitetu.</p></li><li><p>Brže učitavanje: Manje datoteke znače brže učitavanje stranice.</p></li><li><p>Podrška za transparentnost i animacije: Poput PNG-a i GIF-a, ali optimiziranije.</p></li></ul>
<h2>Skripta za optimizaciju slika</h2>
<p>Skripta koju ćemo koristiti obrađuje slike posebno prilagođene za proizvode (1:1 omjer) i automatski ih priprema za korištenje na web shopu.</p>
<p>Koraci:</p>
<ul><li><p>Resizea sliku na 1000x1000 piksela.</p></li><li><p>Komprimira sliku kako bi zadržala vizualnu kvalitetu.</p></li><li><p>Pretvara sliku u .webp format.</p></li></ul>
<h2>Potrebni alati</h2>
<p>Prije nego počnemo, osigurajte da imate instalirane sljedeće alate:</p>
<p>Python: Instalirajte Python 3.8 ili noviju verziju s python.org.</p>
<p>Knjižnice: Instalirajte potrebne knjižnice s: <code>pip install pillow</code></p>
<h2>Kod za optimizaciju slika</h2>
<pre><code class="language-python"><span class="tok-keyword">from</span> <span class="tok-type">PIL</span> <span class="tok-keyword">import</span> <span class="tok-type">Image</span>
<span class="tok-keyword">import</span> os
<span class="tok-keyword">from</span> pathlib <span class="tok-keyword">import</span> <span class="tok-type">Path</span>

<span class="tok-keyword">def</span> <span class="tok-function">optimize_image</span>(input_folder)<span class="tok-operator">:</span>
    output_folder <span class="tok-operator">=</span> os<span class="tok-operator">.</span>path<span class="tok-operator">.</span><span class="tok-function">join</span>(input_folder, <span class="tok-string">"optimized"</span>)
    os<span class="tok-operator">.</span><span class="tok-function">makedirs</span>(output_folder, exist_ok<span class="tok-operator">=</span><span class="tok-literal">True</span>)

    <span class="tok-keyword">for</span> filename <span class="tok-keyword">in</span> os<span class="tok-operator">.</span><span class="tok-function">listdir</span>(input_folder)<span class="tok-operator">:</span>
        <span class="tok-keyword">if</span> <span class="tok-type">Path</span>(filename)<span class="tok-operator">.</span>suffix<span class="tok-operator">.</span><span class="tok-function">lower</span>() <span class="tok-keyword">not</span> <span class="tok-keyword">in</span> [<span class="tok-string">".jpg"</span>, <span class="tok-string">".jpeg"</span>, <span class="tok-string">".png"</span>]<span class="tok-operator">:</span>
            <span class="tok-keyword">continue</span>

        input_path <span class="tok-operator">=</span> os<span class="tok-operator">.</span>path<span class="tok-operator">.</span><span class="tok-function">join</span>(input_folder, filename)
        output_path <span class="tok-operator">=</span> os<span class="tok-operator">.</span>path<span class="tok-operator">.</span><span class="tok-function">join</span>(output_folder, f<span class="tok-string">"{Path(filename).stem}.webp"</span>)

        <span class="tok-keyword">try</span><span class="tok-operator">:</span>
            <span class="tok-function">print</span>(f<span class="tok-string">"Obrađujem: {filename}..."</span>)
            <span class="tok-keyword">with</span> <span class="tok-type">Image</span><span class="tok-operator">.</span><span class="tok-function">open</span>(input_path) <span class="tok-keyword">as</span> img<span class="tok-operator">:</span>
                <span class="tok-keyword">if</span> img<span class="tok-operator">.</span>size[<span class="tok-number">0</span>] <span class="tok-operator">!</span><span class="tok-operator">=</span> img<span class="tok-operator">.</span>size[<span class="tok-number">1</span>]<span class="tok-operator">:</span>
                    <span class="tok-function">print</span>(f<span class="tok-string">"Preskačem {filename}: nije 1:1 format."</span>)
                    <span class="tok-keyword">continue</span>

                img_resized <span class="tok-operator">=</span> img<span class="tok-operator">.</span><span class="tok-function">resize</span>((<span class="tok-number">1000</span>, <span class="tok-number">1000</span>))
                img_resized<span class="tok-operator">.</span><span class="tok-function">save</span>(output_path, <span class="tok-string">"WEBP"</span>, quality<span class="tok-operator">=</span><span class="tok-number">85</span>)
                <span class="tok-function">print</span>(f<span class="tok-string">"Spremljena optimizirana slika: {output_path}"</span>)
        <span class="tok-keyword">except</span> <span class="tok-type">Exception</span> <span class="tok-keyword">as</span> e<span class="tok-operator">:</span>
            <span class="tok-function">print</span>(f<span class="tok-string">"Greška pri obradi {filename}: {e}"</span>)

<span class="tok-keyword">if</span> __name__ <span class="tok-operator">=</span><span class="tok-operator">=</span> <span class="tok-string">"__main__"</span><span class="tok-operator">:</span>
    input_folder <span class="tok-operator">=</span> <span class="tok-function">input</span>(<span class="tok-string">"Unesite put do mape sa slikama: "</span>)<span class="tok-operator">.</span><span class="tok-function">strip</span>()
    <span class="tok-keyword">if</span> <span class="tok-keyword">not</span> os<span class="tok-operator">.</span>path<span class="tok-operator">.</span><span class="tok-function">exists</span>(input_folder)<span class="tok-operator">:</span>
        <span class="tok-function">print</span>(<span class="tok-string">"Greška: Mapa ne postoji!"</span>)
    <span class="tok-keyword">else</span><span class="tok-operator">:</span>
        <span class="tok-function">optimize_image</span>(input_folder)
        <span class="tok-function">print</span>(<span class="tok-string">"\nOptimizacija slika je završena! Provjerite 'optimized' mapu."</span>)</code></pre>
<h2>Kako pokrenuti skriptu?</h2>
<ol><li><p>Pripremite slike: Stavite sve slike proizvoda u jednu mapu.</p></li><li><p>Pokrenite skriptu: Unesite put do mape kad vas skripta pita.</p></li><li><p>Provjerite rezultate: Optimizirane slike nalazit će se u mapi optimized.</p></li></ol>
<h2>Što je važno napomenuti?</h2>
<ul><li><p>Format slike: Skripta radi samo s 1:1 slikama (kvadratni format). Za ostale omjere, trebate dodatne prilagodbe.</p></li><li><p>Kvaliteta: Kompresija je postavljena na quality=85, što balansira kvalitetu i veličinu. Ako trebate još manju veličinu, možete smanjiti taj broj, ali pazite na vizualni izgled.</p></li></ul>
<h2>Prednosti automatizacije</h2>
<p>Ova skripta štedi sate rada i omogućava vam da brzo optimizirate sve slike za svoj web shop.</p>
<p>Brzina učitavanja stranica je ključna, a uz .webp format vaša stranica neće samo izgledati profesionalno, već će raditi brže od konkurencije. 🚀</p>]]></content:encoded>
</item>
<item>
<title>Što će kupac sljedeće kupiti — recommendations i CLTV</title>
<link>https://www.peremin.com/sto-ce-kupac-sljedece-kupiti-recommendations-i-cltv/</link>
<guid isPermaLink="true">https://www.peremin.com/sto-ce-kupac-sljedece-kupiti-recommendations-i-cltv/</guid>
<pubDate>Tue, 21 Jan 2025 00:00:00 +0000</pubDate>
<description>Kako predvidjeti sljedeću kupnju, mjeriti kvalitetu preporuka i provjeriti povećava li sustav stvarno doprinosnu maržu i životnu vrijednost kupca.</description>
<content:encoded><![CDATA[<p>Većina preporuka u web shopu nije preporuka.</p>
<p>To je polica s naslovom “Moglo bi vas zanimati” na kojoj završavaju proizvodi s najvećom zalihom, najvećom maržom ili najglasnijim category managerom. Ponekad pogodi. I pokvareni sat ponekad pokaže točno vrijeme, ali ga ne bih spojio na naplatu.</p>
<p>Ozbiljnije pitanje glasi:</p>
<p><strong>Koji će proizvod ovaj kupac najvjerojatnije kupiti sljedeći, u kojem vremenskom prozoru i s kakvim učinkom na doprinosnu maržu?</strong></p>
<p>Tu recommendations prestaju biti dekoracija, a CLTV prestaje biti naljepnica na segmentu “VIP”.</p>
<h2>Što podaci stvarno trebaju sadržavati</h2>
<p><a href="https://tech.instacart.com/3-million-instacart-orders-open-sourced-d40d29ead6f2">Instacart Online Grocery Shopping Dataset</a> sadrži više od 3 milijuna narudžbi preko 200.000 anonimnih korisnika. Za svakog korisnika objavljeno je između 4 i 100 narudžbi, redoslijed proizvoda, dan i sat kupnje te relativno vrijeme između narudžbi.</p>
<p>Instacart je dataset izričito objavio za probleme poput predviđanja ponovne kupnje, prve kupnje i sljedećeg proizvoda dodanog u košaricu. U tekstu također navodi da je na sličnim produkcijskim podacima koristio XGBoost, word2vec i Annoy za “buy again” sortiranje i preporuke.</p>
<p>Za osnovni model dovoljna je ova struktura:</p>
<table><thead><tr><th>stupac</th><th>što iz njega učimo</th></tr></thead><tbody><tr><td><code>user_id</code></td><td>čija je povijest kupnje</td></tr><tr><td><code>order_id</code></td><td>kojoj narudžbi događaj pripada</td></tr><tr><td><code>order_number</code></td><td>redoslijed narudžbi korisnika</td></tr><tr><td><code>order_dow</code></td><td>dan u tjednu</td></tr><tr><td><code>order_hour_of_day</code></td><td>sat narudžbe</td></tr><tr><td><code>days_since_prior_order</code></td><td>razmak od prethodne kupnje</td></tr><tr><td><code>product_id</code></td><td>kupljeni proizvod</td></tr><tr><td><code>add_to_cart_order</code></td><td>pozicija dodavanja u košaricu</td></tr><tr><td><code>reordered</code></td><td>je li proizvod već bio kupljen</td></tr><tr><td><code>aisle_id</code>, <code>department_id</code></td><td>hijerarhija kategorije</td></tr></tbody></table>
<p>Vlastiti web shop treba dodati cijenu, COGS, popust, povrat, dostupnost, kanal i vrijeme prikaza preporuke. Bez toga možeš predviđati proizvod, ali teško možeš dokazati vrijednost.</p>
<h2>Sljedeći proizvod je procjena, ne proročanstvo</h2>
<p>Za svaki proizvod model procjenjuje šansu da ga kupac uskoro kupi. U obzir može uzeti koliko ga je puta već kupio, koliko je dana prošlo od zadnje kupnje, tipičan razmak ponovne kupnje, kategoriju te uobičajeni dan i sat naručivanja.</p>
<p>“Sljedeća narudžba” i “sljedećih 30 dana” nisu ista meta. Prva zanemaruje koliko dugo treba čekati. Druga korisnika bez kupnje nakon 30 dana tretira kao negativan primjer. Model i poslovna odluka moraju koristiti istu definiciju.</p>
<p>Jednostavan početak ne treba neuronsku mrežu. Ako je 240 od 1.000 kupaca ponovno kupilo isti proizvod unutar 30 dana, početna procjena je 24%. Zatim provjeravamo mijenja li se ta stopa prema broju prethodnih kupnji, sezoni i proteklom vremenu.</p>
<p>Važno je da svaki kupac ima puni prozor za promatranje. Ako imamo samo dva dana njegovih budućih podataka, ne možemo ga pošteno proglasiti negativnim primjerom za kupnju unutar 30 dana.</p>
<h2>Košarica otkriva veze, ali lift čuva obraz</h2>
<p>Za proizvode koji se kupuju zajedno može se koristiti lift. Recimo da 20% košarica sadrži proizvod A, 10% proizvod B, a 8% oba. Među kupcima proizvoda A njih 40% uzima i B. Budući da se B inače pojavljuje u samo 10% košarica, ta je kombinacija četiri puta češća od osnovne stope. Lift je 4.</p>
<p>To još uvijek nije dokaz da je preporuka uzrokovala kupnju. Možda se proizvodi prirodno kupuju zajedno i bez ikakvog modula.</p>
<p>Zato “kupci koji su kupili A kupili su i B” nije dokaz da će prikazivanje B povećati prodaju. To je kandidat za test.</p>
<h2>Model mora pogoditi listu, ne samo jedan proizvod</h2>
<p>Web shop obično prikazuje pet ili deset preporuka. Recall govori koliko je stvarno kupljenih proizvoda završilo na toj listi. Precision govori koliko je mjesta na listi bilo pogođeno.</p>
<p>Ako korisnik kupi dva proizvoda, a model među prvih pet pogodi jedan, pronašli smo polovicu stvarnih kupnji. Istodobno je samo jedno od pet prikazanih mjesta bilo pogodak. Prvi pogled zvuči dobro, drugi malo manje. Zato trebamo oba.</p>
<p>Podjelu za trening i test treba napraviti po vremenu. Model trenira na prošlosti i predviđa budućnost. Nasumično miješanje redaka može pustiti kasniju narudžbu istog korisnika u trening dok raniju pokušavamo predvidjeti. To nije predikcija. To je curenje s boljim marketingom.</p>
<h2>CLTV je buduća marža, ne povijesni promet</h2>
<p>Najkraće rečeno:</p>
<div class="td-math td-math-display"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 68.97 9.4" fill="currentColor" aria-hidden="true" style="width:6.9em;height:0.94em;vertical-align:-0.22em"><path d="M6.65 4.87C6.65 4.77 6.65 4.7 6.52 4.7C6.41 4.7 6.41 4.76 6.4 4.86C6.32 6.29 5.25 7.11 4.16 7.11C3.55 7.11 1.59 6.77 1.59 3.79C1.59 0.8 3.54 0.46 4.15 0.46C5.24 0.46 6.13 1.37 6.33 2.83C6.35 2.97 6.35 3 6.49 3C6.65 3 6.65 2.97 6.65 2.76L6.65 0.39C6.65 0.22 6.65 0.15 6.54 0.15C6.5 0.15 6.46 0.15 6.38 0.27L5.88 1.01C5.51 0.65 5 0.15 4.04 0.15C2.17 0.15 0.56 1.74 0.56 3.78C0.56 5.85 2.18 7.42 4.04 7.42C5.67 7.42 6.65 6.03 6.65 4.87Z"/><path d="M13.04 4.62L12.79 4.62C12.68 5.64 12.54 6.89 10.78 6.89L9.96 6.89C9.49 6.89 9.47 6.82 9.47 6.49L9.47 1.16C9.47 0.82 9.47 0.68 10.42 0.68L10.75 0.68L10.75 0.37C10.39 0.4 9.48 0.4 9.07 0.4C8.68 0.4 7.9 0.4 7.55 0.37L7.55 0.68L7.79 0.68C8.56 0.68 8.58 0.79 8.58 1.15L8.58 6.42C8.58 6.78 8.56 6.89 7.79 6.89L7.55 6.89L7.55 7.2L12.76 7.2Z"/><path d="M20.32 2.68L20.13 0.43L14.02 0.43L13.83 2.68L14.08 2.68C14.22 1.07 14.37 0.74 15.88 0.74C16.06 0.74 16.32 0.74 16.42 0.76C16.63 0.8 16.63 0.91 16.63 1.14L16.63 6.41C16.63 6.75 16.63 6.89 15.58 6.89L15.18 6.89L15.18 7.2C15.59 7.17 16.61 7.17 17.07 7.17C17.53 7.17 18.56 7.17 18.97 7.2L18.97 6.89L18.57 6.89C17.52 6.89 17.52 6.75 17.52 6.41L17.52 1.14C17.52 0.94 17.52 0.8 17.7 0.76C17.81 0.74 18.08 0.74 18.27 0.74C19.78 0.74 19.93 1.07 20.07 2.68Z"/><path d="M27.99 0.68L27.99 0.37C27.68 0.39 27.28 0.4 27.02 0.4L25.88 0.37L25.88 0.68C26.4 0.69 26.61 0.95 26.61 1.18C26.61 1.26 26.58 1.32 26.56 1.38L24.73 6.2L22.82 1.15C22.76 1.01 22.76 0.97 22.76 0.97C22.76 0.68 23.33 0.68 23.58 0.68L23.58 0.37C23.22 0.4 22.53 0.4 22.15 0.4L20.88 0.37L20.88 0.68C21.53 0.68 21.72 0.68 21.86 1.06L24.18 7.2C24.25 7.39 24.3 7.42 24.43 7.42C24.6 7.42 24.62 7.37 24.67 7.23L26.9 1.35C27.04 0.98 27.31 0.69 27.99 0.68Z"/><path d="M38.73 3.73C38.73 3.62 38.64 3.53 38.53 3.53L32.27 3.53C32.16 3.53 32.07 3.62 32.07 3.73C32.07 3.84 32.16 3.93 32.27 3.93L38.53 3.93C38.64 3.93 38.73 3.84 38.73 3.73ZM38.73 5.67C38.73 5.56 38.64 5.47 38.53 5.47L32.27 5.47C32.16 5.47 32.07 5.56 32.07 5.67C32.07 5.78 32.16 5.87 32.27 5.87L38.53 5.87C38.64 5.87 38.73 5.78 38.73 5.67Z"/><path d="M51.4 7.2L51.4 6.89L51.16 6.89C50.39 6.89 50.37 6.78 50.37 6.42L50.37 1.15C50.37 0.79 50.39 0.68 51.16 0.68L51.4 0.68L51.4 0.37L49.71 0.37C49.45 0.37 49.45 0.38 49.38 0.56L47.19 6.19L45.02 0.59C44.93 0.37 44.9 0.37 44.67 0.37L42.98 0.37L42.98 0.68L43.22 0.68C43.99 0.68 44.01 0.79 44.01 1.15L44.01 6.15C44.01 6.42 44.01 6.89 42.98 6.89L42.98 7.2L44.15 7.17L45.32 7.2L45.32 6.89C44.29 6.89 44.29 6.42 44.29 6.15L44.29 0.76L44.3 0.76L46.71 6.98C46.76 7.11 46.81 7.2 46.91 7.2C47.02 7.2 47.05 7.12 47.09 7.01L49.55 0.68L49.56 0.68L49.56 6.42C49.56 6.78 49.54 6.89 48.77 6.89L48.53 6.89L48.53 7.2C48.9 7.17 49.58 7.17 49.97 7.17C50.36 7.17 51.03 7.17 51.4 7.2Z"/><path d="M57.86 5.33L57.86 4.75L55.21 4.75L55.21 5.33Z"/><path d="M68.4 4.87C68.4 4.77 68.4 4.7 68.27 4.7C68.16 4.7 68.16 4.76 68.15 4.86C68.07 6.29 67 7.11 65.91 7.11C65.3 7.11 63.34 6.77 63.34 3.79C63.34 0.8 65.29 0.46 65.9 0.46C66.99 0.46 67.88 1.37 68.08 2.83C68.1 2.97 68.1 3 68.24 3C68.4 3 68.4 2.97 68.4 2.76L68.4 0.39C68.4 0.22 68.4 0.15 68.29 0.15C68.25 0.15 68.21 0.15 68.13 0.27L67.63 1.01C67.26 0.65 66.75 0.15 65.79 0.15C63.92 0.15 62.31 1.74 62.31 3.78C62.31 5.85 63.93 7.42 65.79 7.42C67.42 7.42 68.4 6.03 68.4 4.87Z"/></svg><math class="td-math-a11y" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>C</mi><mi>L</mi><mi>T</mi><mi>V</mi><mtext> </mtext><mtext>=</mtext><mtext> </mtext><mi>M</mi><mtext> </mtext><mtext>-</mtext><mtext> </mtext><mi>C</mi></mrow></math></div>
<p><code>M</code> je očekivana buduća doprinosna marža, a <code>C</code> očekivani trošak zadržavanja i posluživanja kupca. Moramo navesti i razdoblje: CLTV za sljedećih 12 mjeseci nije isto što i vrijednost kroz cijeli odnos.</p>
<p>Ovo nije tvrdnja da savršeno vidimo budućnost. Treba procijeniti hoće li kupac ostati aktivan, koliko će puta kupiti i kolika će biti marža tih kupnji. Složeniji modeli postoje, ali nisu obavezni za prvi korak.</p>
<p>Najjednostavniji pošteni početak je ostvarena doprinosna marža u 90, 180 i 365 dana po akvizicijskoj kohorti.</p>
<figure class="td-chart td-chart-line" data-td-chart-interactive>
<figcaption class="td-chart-caption">Kumulativna marža po korisniku — primjer A/B mjerenja preporuka</figcaption>
<div class="td-chart-frame">
<svg
  class="td-chart-svg"
  viewBox="0 0 720 360"
  role="img"
  aria-label="Kumulativna marža po korisniku — primjer A/B mjerenja preporuka"
>
<desc>line chart with 4 labels and 2 series</desc>
<line
  class="td-chart-grid"
  x1="80"
  y1="302"
  x2="696"
  y2="302"
></line>
<text
  class="td-chart-value"
  x="70"
  y="306"
  text-anchor="end"
>0</text>
<line
  class="td-chart-grid"
  x1="80"
  y1="186.17"
  x2="696"
  y2="186.17"
></line>
<text
  class="td-chart-value"
  x="70"
  y="190.17"
  text-anchor="end"
>50</text>
<line
  class="td-chart-grid"
  x1="80"
  y1="70.33"
  x2="696"
  y2="70.33"
></line>
<text
  class="td-chart-value"
  x="70"
  y="74.33"
  text-anchor="end"
>100</text>
<line
  class="td-chart-axis"
  x1="80"
  y1="302"
  x2="696"
  y2="302"
></line>
<line
  class="td-chart-axis"
  x1="80"
  y1="24"
  x2="80"
  y2="302"
></line>
<polyline class="td-chart-line td-chart-series-0" points="157,274.2 311,227.87 465,176.9 619,102.77"></polyline>
<circle
  class="td-chart-point td-chart-series-0"
  cx="157"
  cy="274.2"
  r="4"
><title>Kontrola (€), 1 mjesec: 12</title></circle>
<circle
  class="td-chart-point td-chart-series-0"
  cx="311"
  cy="227.87"
  r="4"
><title>Kontrola (€), 3 mjeseca: 32</title></circle>
<circle
  class="td-chart-point td-chart-series-0"
  cx="465"
  cy="176.9"
  r="4"
><title>Kontrola (€), 6 mjeseci: 54</title></circle>
<circle
  class="td-chart-point td-chart-series-0"
  cx="619"
  cy="102.77"
  r="4"
><title>Kontrola (€), 12 mjeseci: 86</title></circle>
<polyline class="td-chart-line td-chart-series-1" points="157,273.04 311,223.23 465,160.68 619,65.7"></polyline>
<circle
  class="td-chart-point td-chart-series-1"
  cx="157"
  cy="273.04"
  r="4"
><title>Preporuke (€), 1 mjesec: 12.5</title></circle>
<circle
  class="td-chart-point td-chart-series-1"
  cx="311"
  cy="223.23"
  r="4"
><title>Preporuke (€), 3 mjeseca: 34</title></circle>
<circle
  class="td-chart-point td-chart-series-1"
  cx="465"
  cy="160.68"
  r="4"
><title>Preporuke (€), 6 mjeseci: 61</title></circle>
<circle
  class="td-chart-point td-chart-series-1"
  cx="619"
  cy="65.7"
  r="4"
><title>Preporuke (€), 12 mjeseci: 102</title></circle>
<text
  class="td-chart-label"
  x="157"
  y="324"
  text-anchor="middle"
>1 mjesec</text>
<text
  class="td-chart-label"
  x="311"
  y="324"
  text-anchor="middle"
>3 mjeseca</text>
<text
  class="td-chart-label"
  x="465"
  y="324"
  text-anchor="middle"
>6 mjeseci</text>
<text
  class="td-chart-label"
  x="619"
  y="324"
  text-anchor="middle"
>12 mjeseci</text>

<rect
  class="td-chart-series-0"
  x="80"
  y="336"
  width="12"
  height="12"
  rx="3"
  fill="currentColor"
></rect>
<text
  class="td-chart-legend-text"
  x="98"
  y="346"
  text-anchor="start"
>Kontrola (€)</text>
<rect
  class="td-chart-series-1"
  x="201.6"
  y="336"
  width="12"
  height="12"
  rx="3"
  fill="currentColor"
></rect>
<text
  class="td-chart-legend-text"
  x="219.6"
  y="346"
  text-anchor="start"
>Preporuke (€)</text>
</svg>
</div>
</figure>
<p>Vrijednosti su radni primjer, ne Instacartov rezultat. Graf namjerno prati kumulativnu doprinosnu maržu, a ne klikove na preporuke. U ovom primjeru razlika nakon 12 mjeseci iznosi 16 eura po korisniku. Tek randomizacija može podržati tvrdnju da su preporuke uzrokovale razliku.</p>
<h2>Offline pobjeda može biti online poraz</h2>
<p>Model s boljim Recall@K može u produkciji zaraditi manje. Može preporučivati proizvode koji su već na korisnikovom popisu, proizvode bez zalihe ili artikle s niskom maržom i visokom stopom povrata.</p>
<p>Zato online test treba imati barem tri sloja mjerenja: ponašanje, narudžbu i ekonomiku. Klik na preporuku je dijagnostika. Inkrementalna kupnja i marža su ishod.</p>
<p>Tretman vidi personalizirane preporuke. Kontrola vidi postojeći modul ili ništa, ovisno o pitanju koje testiramo. Primarni KPI može biti doprinosna marža po korisniku kroz 30 ili 90 dana. Guardrail metrike uključuju povrate, otkazivanja, vrijeme učitavanja i udio proizvoda bez zalihe.</p>
<p>Ako istog korisnika prebacuješ između varijanti pri svakom posjetu, tretmani se miješaju. Randomizacija po korisniku obično je čišća za dugoročan CLTV test.</p>
<h2>Sustav koji bih stvarno napravio</h2>
<p>Počeo bih s tri kandidata: proizvodi za ponovnu kupnju, proizvodi koji se često kupuju uz trenutačnu košaricu i popularni proizvodi unutar korisnikove kategorije. Zatim bih uklonio artikle bez zalihe, već kupljene trajne proizvode i ono što nema smisla zbog veličine ili kompatibilnosti.</p>
<p>Tek nakon toga model za rangiranje. Ulazne značajke trebaju imati poslovno značenje: frequency, recency, tipičan interval kupnje, afinitet prema kategoriji, trenutnu košaricu, cijenu i dostupnost. Rezultat modela nije konačni redoslijed ako ignorira maržu i ograničenja.</p>
<p>Ne bih u jedan proizvoljni score zbrojio vjerojatnost kupnje, maržu i popularnost s težinama koje smo izmislili u petak popodne. Razumniji početak je procijenjenu šansu kupnje pomnožiti doprinosnom maržom proizvoda.</p>
<p>Ni to ne dokazuje da je prikaz preporuke stvorio kupnju. Za stvarni dodatni učinak i dalje treba kontrolna skupina.</p>
<p>Preporuka je dobra tek kada pogodi relevantan proizvod, stigne u pravo vrijeme, ne pojede postojeću kupnju i ostavi više buduće marže nego kontrola.</p>
<p>Sve ostalo je samo još jedna polica.</p>
<h2>Izvori i provjera</h2>
<ul><li><a href="https://tech.instacart.com/3-million-instacart-orders-open-sourced-d40d29ead6f2">Instacart Engineering — 3 Million Instacart Orders, Open Sourced</a></li><li><a href="https://www.brucehardie.com/papers/rfm_clv_2005-02-16.pdf">Fader, Hardie i Lee — RFM and CLV: Using Iso-value Curves</a></li><li><a href="https://research.google/pubs/a-deep-probabilistic-model-for-customer-lifetime-value-prediction/">Google Research — A Deep Probabilistic Model for Customer Lifetime Value Prediction</a></li></ul>]]></content:encoded>
</item>
<item>
<title>Popust nije konverzija — uplift, marža i CRO</title>
<link>https://www.peremin.com/popust-nije-konverzija-uplift-marza-i-cro/</link>
<guid isPermaLink="true">https://www.peremin.com/popust-nije-konverzija-uplift-marza-i-cro/</guid>
<pubDate>Thu, 21 Nov 2024 00:00:00 +0000</pubDate>
<description>Kupon može podići konverziju i pojesti profit. Uplift pokazuje koje je kupce ponuda stvarno pomaknula, a koji bi kupili i bez popusta.</description>
<content:encoded><![CDATA[<p>Popust je najbrži način da conversion rate izgleda bolje na sastanku.</p>
<p>Pustiš kupon od 7 eura, prodaja skoči, dashboard pozeleni i svi nakratko izgledaju kao da znaju što rade. Problem počinje kada netko pita koliko je dodatnog profita ostalo nakon što smo popust dali i ljudima koji bi kupili bez njega.</p>
<p>Tu konverzija prestaje biti odgovor.</p>
<p>Pravo pitanje nije: <strong>tko je kupio nakon kupona?</strong></p>
<p>Pravo pitanje je: <strong>tko je kupio zbog kupona?</strong></p>
<p>Ta razlika zove se inkrementalni učinak ili uplift. Nije nova naljepnica za conversion rate. To je pokušaj mjerenja uzroka.</p>
<h2>Podaci koji dopuštaju pošten odgovor</h2>
<p>Za ovakav problem trebaju nam tretirana i kontrolna skupina. Bez kontrole imamo prodaju nakon kampanje, ali nemamo vjerodostojan odgovor što bi se dogodilo bez kampanje.</p>
<p><a href="https://ailab.criteo.com/criteo-uplift-prediction-dataset/">Criteo Uplift Prediction Dataset</a> nastao je spajanjem više randomiziranih testova inkrementalnosti oglašavanja. Ispravljena, nepristrana verzija sadrži 13.979.592 retka, prosječnu stopu posjeta od 4,6992%, prosječnu stopu konverzije od 0,292% i oko 85% tretiranih korisnika.</p>
<p>Objavljena shema navodi anonimizirane značajke <code>f0</code> do <code>f11</code> te četiri stupca koja su ovdje bitna:</p>
<table><thead><tr><th>stupac</th><th>značenje</th></tr></thead><tbody><tr><td><code>treatment</code></td><td>1 ako je korisnik dodijeljen tretmanu, 0 ako je u kontroli</td></tr><tr><td><code>conversion</code></td><td>1 ako je korisnik konvertirao</td></tr><tr><td><code>visit</code></td><td>1 ako je korisnik posjetio odredište</td></tr><tr><td><code>exposure</code></td><td>1 ako je tretirani korisnik stvarno bio izložen poruci</td></tr></tbody></table>
<p>Anonimizirani stupci nisu idealni za poslovno objašnjenje, ali struktura testa jest. U vlastitom web shopu umjesto <code>f0</code> želiš varijable koje postoje prije odluke o kuponu: broj prethodnih narudžbi, recency, kategoriju zadnje kupnje, prosječnu maržu, uređaj, izvor dolaska i je li proizvod već bio snižen.</p>
<p>Ako u model ubaciš podatak koji nastaje nakon slanja kupona, primjerice vrijednost košarice te narudžbe, model više ne predviđa odluku. Čita tragove događaja koji se već dogodio. To je leakage, samo uredno zapakiran.</p>
<h2>Uplift bez magle</h2>
<p>Za randomizirani test prosječni uplift u konverziji je razlika stopa između tretmana i kontrole:</p>
<div class="td-math td-math-display"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 158.27 9.4" fill="currentColor" aria-hidden="true" style="width:15.83em;height:0.94em;vertical-align:-0.22em"><path d="M4.59 3.13C4.53 2.89 4.32 2.89 4.13 2.89L1.33 2.89C1.13 2.89 0.74 2.89 0.42 3.36C0.18 3.72 0.02 4.2 0.04 4.26C0.04 4.26 0.06 4.36 0.18 4.36C0.26 4.36 0.27 4.32 0.31 4.24C0.61 3.47 1.18 3.47 1.39 3.47L2.22 3.47L2.04 6.68C2.03 6.8 2.02 7.01 2.03 7.05C2.06 7.16 2.17 7.32 2.39 7.32C2.72 7.32 2.7 7.04 2.69 6.89L2.51 3.47L4.19 3.47C4.32 3.47 4.68 3.47 4.59 3.13Z"/><path d="M15.84 3.73C15.84 3.62 15.75 3.53 15.64 3.53L9.38 3.53C9.27 3.53 9.18 3.62 9.18 3.73C9.18 3.84 9.27 3.93 9.38 3.93L15.64 3.93C15.75 3.93 15.84 3.84 15.84 3.73ZM15.84 5.67C15.84 5.56 15.75 5.47 15.64 5.47L9.38 5.47C9.27 5.47 9.18 5.56 9.18 5.67C9.18 5.78 9.27 5.87 9.38 5.87L15.64 5.87C15.75 5.87 15.84 5.78 15.84 5.67Z"/><path d="M25.96 2.23C25.96 1.25 24.97 0.37 23.6 0.37L20.07 0.37L20.07 0.68L20.31 0.68C21.08 0.68 21.1 0.79 21.1 1.15L21.1 6.42C21.1 6.78 21.08 6.89 20.31 6.89L20.07 6.89L20.07 7.2C20.42 7.17 21.16 7.17 21.54 7.17C21.92 7.17 22.67 7.17 23.02 7.2L23.02 6.89L22.78 6.89C22.01 6.89 21.99 6.78 21.99 6.42L21.99 4.04L23.68 4.04C24.88 4.04 25.96 3.23 25.96 2.23ZM24.93 2.23C24.93 2.7 24.93 3.78 23.34 3.78L21.96 3.78L21.96 1.08C21.96 0.75 21.98 0.68 22.45 0.68L23.34 0.68C24.93 0.68 24.93 1.74 24.93 2.23Z"/><path d="M29.85 9.58C29.85 9.55 29.83 9.52 29.81 9.5C28.77 8.72 28.08 6.72 28.08 5.12L28.08 4.28C28.08 2.68 28.77 0.68 29.81 -0.1C29.83 -0.12 29.85 -0.15 29.85 -0.18C29.85 -0.23 29.8 -0.28 29.75 -0.28C29.73 -0.28 29.71 -0.27 29.69 -0.26C28.59 0.57 27.54 2.57 27.54 4.28L27.54 5.12C27.54 6.83 28.59 8.83 29.69 9.66C29.71 9.67 29.73 9.68 29.75 9.68C29.8 9.68 29.85 9.63 29.85 9.58Z"/><path d="M37.8 0.68L37.8 0.37C37.49 0.39 37.09 0.4 36.82 0.4L35.67 0.37L35.67 0.68C36.08 0.68 36.24 0.87 36.24 1.07C36.24 1.18 36.18 1.31 36.14 1.37L34.49 4.05L32.68 1.1C32.61 1 32.61 0.98 32.61 0.93C32.61 0.72 32.86 0.68 33.31 0.68L33.31 0.37C32.95 0.4 32.22 0.4 31.83 0.4L30.53 0.37L30.53 0.68L30.71 0.68C31.39 0.68 31.47 0.79 31.63 1.05L33.73 4.47L33.73 6.42C33.73 6.78 33.71 6.89 32.94 6.89L32.7 6.89L32.7 7.2C33.06 7.17 33.77 7.17 34.16 7.17C34.55 7.17 35.26 7.17 35.62 7.2L35.62 6.89L35.39 6.89C34.62 6.89 34.59 6.79 34.59 6.4L34.59 4.47L36.52 1.33C36.89 0.72 37.48 0.68 37.8 0.68Z"/><path d="M45.14 3.73C45.14 3.62 45.05 3.53 44.94 3.53L38.68 3.53C38.57 3.53 38.48 3.62 38.48 3.73C38.48 3.84 38.57 3.93 38.68 3.93L44.94 3.93C45.05 3.93 45.14 3.84 45.14 3.73ZM45.14 5.67C45.14 5.56 45.05 5.47 44.94 5.47L38.68 5.47C38.57 5.47 38.48 5.56 38.48 5.67C38.48 5.78 38.57 5.87 38.68 5.87L44.94 5.87C45.05 5.87 45.14 5.78 45.14 5.67Z"/><path d="M49.89 7.2L49.89 6.89L49.57 6.89C48.67 6.89 48.64 6.78 48.64 6.41L48.64 0.8C48.64 0.56 48.64 0.54 48.41 0.54C47.79 1.18 46.91 1.18 46.59 1.18L46.59 1.49C46.79 1.49 47.38 1.49 47.9 1.23L47.9 6.41C47.9 6.77 47.87 6.89 46.97 6.89L46.65 6.89L46.65 7.2C47 7.17 47.87 7.17 48.27 7.17C48.67 7.17 49.54 7.17 49.89 7.2Z"/><path d="M55.61 9.5L55.61 -0.1C55.61 -0.21 55.52 -0.3 55.41 -0.3C55.3 -0.3 55.21 -0.21 55.21 -0.1L55.21 9.5C55.21 9.61 55.3 9.7 55.41 9.7C55.52 9.7 55.61 9.61 55.61 9.5Z"/><path d="M66.97 2.68L66.78 0.43L60.67 0.43L60.48 2.68L60.73 2.68C60.87 1.07 61.02 0.74 62.53 0.74C62.71 0.74 62.97 0.74 63.07 0.76C63.28 0.8 63.28 0.91 63.28 1.14L63.28 6.41C63.28 6.75 63.28 6.89 62.23 6.89L61.83 6.89L61.83 7.2C62.24 7.17 63.26 7.17 63.72 7.17C64.18 7.17 65.21 7.17 65.62 7.2L65.62 6.89L65.22 6.89C64.17 6.89 64.17 6.75 64.17 6.41L64.17 1.14C64.17 0.94 64.17 0.8 64.35 0.76C64.46 0.74 64.73 0.74 64.92 0.74C66.43 0.74 66.58 1.07 66.72 2.68Z"/><path d="M74.56 3.73C74.56 3.62 74.47 3.53 74.36 3.53L68.1 3.53C67.99 3.53 67.9 3.62 67.9 3.73C67.9 3.84 67.99 3.93 68.1 3.93L74.36 3.93C74.47 3.93 74.56 3.84 74.56 3.73ZM74.56 5.67C74.56 5.56 74.47 5.47 74.36 5.47L68.1 5.47C67.99 5.47 67.9 5.56 67.9 5.67C67.9 5.78 67.99 5.87 68.1 5.87L74.36 5.87C74.47 5.87 74.56 5.78 74.56 5.67Z"/><path d="M79.31 7.2L79.31 6.89L78.99 6.89C78.09 6.89 78.06 6.78 78.06 6.41L78.06 0.8C78.06 0.56 78.06 0.54 77.83 0.54C77.21 1.18 76.33 1.18 76.01 1.18L76.01 1.49C76.21 1.49 76.8 1.49 77.32 1.23L77.32 6.41C77.32 6.77 77.29 6.89 76.39 6.89L76.07 6.89L76.07 7.2C76.42 7.17 77.29 7.17 77.69 7.17C78.09 7.17 78.96 7.17 79.31 7.2Z"/><path d="M83 5.12L83 4.28C83 2.57 81.95 0.57 80.85 -0.26C80.83 -0.27 80.81 -0.28 80.79 -0.28C80.74 -0.28 80.69 -0.23 80.69 -0.18C80.69 -0.15 80.71 -0.12 80.73 -0.1C81.77 0.68 82.46 2.68 82.46 4.28L82.46 5.12C82.46 6.72 81.77 8.72 80.73 9.5C80.71 9.52 80.69 9.55 80.69 9.58C80.69 9.63 80.74 9.68 80.79 9.68C80.81 9.68 80.83 9.67 80.85 9.66C81.95 8.83 83 6.83 83 5.12Z"/><path d="M90.09 5.33L90.09 4.75L87.44 4.75L87.44 5.33Z"/><path d="M100.22 2.23C100.22 1.25 99.23 0.37 97.86 0.37L94.33 0.37L94.33 0.68L94.57 0.68C95.34 0.68 95.36 0.79 95.36 1.15L95.36 6.42C95.36 6.78 95.34 6.89 94.57 6.89L94.33 6.89L94.33 7.2C94.68 7.17 95.42 7.17 95.8 7.17C96.18 7.17 96.93 7.17 97.28 7.2L97.28 6.89L97.04 6.89C96.27 6.89 96.25 6.78 96.25 6.42L96.25 4.04L97.94 4.04C99.14 4.04 100.22 3.23 100.22 2.23ZM99.19 2.23C99.19 2.7 99.19 3.78 97.6 3.78L96.22 3.78L96.22 1.08C96.22 0.75 96.24 0.68 96.71 0.68L97.6 0.68C99.19 0.68 99.19 1.74 99.19 2.23Z"/><path d="M104.11 9.58C104.11 9.55 104.09 9.52 104.07 9.5C103.03 8.72 102.34 6.72 102.34 5.12L102.34 4.28C102.34 2.68 103.03 0.68 104.07 -0.1C104.09 -0.12 104.11 -0.15 104.11 -0.18C104.11 -0.23 104.06 -0.28 104.01 -0.28C103.99 -0.28 103.97 -0.27 103.95 -0.26C102.85 0.57 101.8 2.57 101.8 4.28L101.8 5.12C101.8 6.83 102.85 8.83 103.95 9.66C103.97 9.67 103.99 9.68 104.01 9.68C104.06 9.68 104.11 9.63 104.11 9.58Z"/><path d="M112.06 0.68L112.06 0.37C111.75 0.39 111.35 0.4 111.08 0.4L109.93 0.37L109.93 0.68C110.34 0.68 110.5 0.87 110.5 1.07C110.5 1.18 110.44 1.31 110.4 1.37L108.75 4.05L106.94 1.1C106.87 1 106.87 0.98 106.87 0.93C106.87 0.72 107.12 0.68 107.57 0.68L107.57 0.37C107.21 0.4 106.48 0.4 106.09 0.4L104.79 0.37L104.79 0.68L104.97 0.68C105.65 0.68 105.73 0.79 105.89 1.05L107.99 4.47L107.99 6.42C107.99 6.78 107.97 6.89 107.2 6.89L106.96 6.89L106.96 7.2C107.32 7.17 108.03 7.17 108.42 7.17C108.81 7.17 109.52 7.17 109.88 7.2L109.88 6.89L109.65 6.89C108.88 6.89 108.85 6.79 108.85 6.4L108.85 4.47L110.78 1.33C111.15 0.72 111.74 0.68 112.06 0.68Z"/><path d="M119.4 3.73C119.4 3.62 119.31 3.53 119.2 3.53L112.94 3.53C112.83 3.53 112.74 3.62 112.74 3.73C112.74 3.84 112.83 3.93 112.94 3.93L119.2 3.93C119.31 3.93 119.4 3.84 119.4 3.73ZM119.4 5.67C119.4 5.56 119.31 5.47 119.2 5.47L112.94 5.47C112.83 5.47 112.74 5.56 112.74 5.67C112.74 5.78 112.83 5.87 112.94 5.87L119.2 5.87C119.31 5.87 119.4 5.78 119.4 5.67Z"/><path d="M124.15 7.2L124.15 6.89L123.83 6.89C122.93 6.89 122.9 6.78 122.9 6.41L122.9 0.8C122.9 0.56 122.9 0.54 122.67 0.54C122.05 1.18 121.17 1.18 120.85 1.18L120.85 1.49C121.05 1.49 121.64 1.49 122.16 1.23L122.16 6.41C122.16 6.77 122.13 6.89 121.23 6.89L120.91 6.89L120.91 7.2C121.26 7.17 122.13 7.17 122.53 7.17C122.93 7.17 123.8 7.17 124.15 7.2Z"/><path d="M129.87 9.5L129.87 -0.1C129.87 -0.21 129.78 -0.3 129.67 -0.3C129.56 -0.3 129.47 -0.21 129.47 -0.1L129.47 9.5C129.47 9.61 129.56 9.7 129.67 9.7C129.78 9.7 129.87 9.61 129.87 9.5Z"/><path d="M141.23 2.68L141.04 0.43L134.93 0.43L134.74 2.68L134.99 2.68C135.13 1.07 135.28 0.74 136.79 0.74C136.97 0.74 137.23 0.74 137.33 0.76C137.54 0.8 137.54 0.91 137.54 1.14L137.54 6.41C137.54 6.75 137.54 6.89 136.49 6.89L136.09 6.89L136.09 7.2C136.5 7.17 137.52 7.17 137.98 7.17C138.44 7.17 139.47 7.17 139.88 7.2L139.88 6.89L139.48 6.89C138.43 6.89 138.43 6.75 138.43 6.41L138.43 1.14C138.43 0.94 138.43 0.8 138.61 0.76C138.72 0.74 138.99 0.74 139.18 0.74C140.69 0.74 140.84 1.07 140.98 2.68Z"/><path d="M148.82 3.73C148.82 3.62 148.73 3.53 148.62 3.53L142.36 3.53C142.25 3.53 142.16 3.62 142.16 3.73C142.16 3.84 142.25 3.93 142.36 3.93L148.62 3.93C148.73 3.93 148.82 3.84 148.82 3.73ZM148.82 5.67C148.82 5.56 148.73 5.47 148.62 5.47L142.36 5.47C142.25 5.47 142.16 5.56 142.16 5.67C142.16 5.78 142.25 5.87 142.36 5.87L148.62 5.87C148.73 5.87 148.82 5.78 148.82 5.67Z"/><path d="M153.98 4C153.98 3.2 153.93 2.4 153.58 1.66C153.12 0.7 152.3 0.54 151.88 0.54C151.28 0.54 150.55 0.8 150.14 1.73C149.82 2.42 149.77 3.2 149.77 4C149.77 4.75 149.81 5.65 150.22 6.41C150.65 7.22 151.38 7.42 151.87 7.42C152.41 7.42 153.17 7.21 153.61 6.26C153.93 5.57 153.98 4.79 153.98 4ZM153.15 3.88C153.15 4.63 153.15 5.31 153.04 5.95C152.89 6.9 152.32 7.2 151.87 7.2C151.48 7.2 150.89 6.95 150.71 5.99C150.6 5.39 150.6 4.47 150.6 3.88C150.6 3.24 150.6 2.58 150.68 2.04C150.87 0.85 151.62 0.76 151.87 0.76C152.2 0.76 152.86 0.94 153.05 1.93C153.15 2.49 153.15 3.25 153.15 3.88Z"/><path d="M157.26 5.12L157.26 4.28C157.26 2.57 156.21 0.57 155.11 -0.26C155.09 -0.27 155.07 -0.28 155.05 -0.28C155 -0.28 154.95 -0.23 154.95 -0.18C154.95 -0.15 154.97 -0.12 154.99 -0.1C156.03 0.68 156.72 2.68 156.72 4.28L156.72 5.12C156.72 6.72 156.03 8.72 154.99 9.5C154.97 9.52 154.95 9.55 154.95 9.58C154.95 9.63 155 9.68 155.05 9.68C155.07 9.68 155.09 9.67 155.11 9.66C156.21 8.83 157.26 6.83 157.26 5.12Z"/></svg><math class="td-math-a11y" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mo>τ</mo><mtext> </mtext><mtext>=</mtext><mtext> </mtext><mi>P</mi><mtext>(</mtext><mi>Y</mi><mtext>=</mtext><mn>1</mn><mtext> </mtext><mo>∣</mo><mtext> </mtext><mi>T</mi><mtext>=</mtext><mn>1</mn><mtext>)</mtext><mtext> </mtext><mtext>-</mtext><mtext> </mtext><mi>P</mi><mtext>(</mtext><mi>Y</mi><mtext>=</mtext><mn>1</mn><mtext> </mtext><mo>∣</mo><mtext> </mtext><mi>T</mi><mtext>=</mtext><mn>0</mn><mtext>)</mtext></mrow></math></div>
<p><code>Y</code> je ishod, ovdje kupnja. <code>T=1</code> označava tretman, a <code>T=0</code> kontrolu. Ako tretman konvertira 4,20%, a kontrola 3,55%, uplift iznosi 0,65 postotnih bodova.</p>
<p>To nije rast od 0,65%. Relativni rast iznosi približno 18,31%, jer se 0,65 dijeli s početnih 3,55. Miješanje postotaka i postotnih bodova proizvodi vrlo kreativne prezentacije i vrlo loše budžete.</p>
<p>Kasnije možemo tražiti segmente koji reagiraju bolje ili lošije: nove kupce, stare kupce, lovce na popuste ili ljude koji već mjesecima nisu kupili. Ali baza mora ostati ista — nasumično odabrana kontrolna skupina. Kod običnih povijesnih kampanja korisnici s kuponom često nisu usporedivi s onima bez kupona, pa razlika može biti posljedica načina odabira, a ne same ponude.</p>
<h2>Konverzija raste, profit pada</h2>
<p>Uzmimo transparentan radni primjer. Nije rezultat Criteovih podataka, nego mali kontrolni račun koji svatko može ponoviti.</p>
<p>U tretmanu imamo 10.000 korisnika i 420 kupnji. U kontroli također imamo 10.000 korisnika i 355 kupnji. Doprinosna marža prije kupona iznosi 24,50 eura po narudžbi, a kupon 7 eura.</p>
<table><thead><tr><th>skupina</th><th style="text-align:right">kupnje</th><th style="text-align:right">marža po kupnji</th><th style="text-align:right">ukupna marža</th></tr></thead><tbody><tr><td>kupon</td><td style="text-align:right">420</td><td style="text-align:right">17,50 €</td><td style="text-align:right">7.350,00 €</td></tr><tr><td>kontrola</td><td style="text-align:right">355</td><td style="text-align:right">24,50 €</td><td style="text-align:right">8.697,50 €</td></tr></tbody></table>
<p>Dobili smo 65 dodatnih narudžbi i izgubili 1.347,50 eura doprinosa. Razlog nije skriven u nekom sofisticiranom modelu. Kupon smo platili na svih 420 tretiranih kupnji, uključujući 355 kupnji koje kontrolna skupina sugerira da bi se dogodile i bez njega.</p>
<p>Račun je neugodno jednostavan: dodatna marža od novih kupnji mora biti veća od popusta koji smo podijelili na sve kupnje. Ako nije, conversion rate je narastao, a posao se smanjio.</p>
<figure class="td-chart td-chart-bar" data-td-chart-interactive>
<figcaption class="td-chart-caption">Konverzija po uplift segmentu — radni primjer</figcaption>
<div class="td-chart-frame">
<svg
  class="td-chart-svg"
  viewBox="0 0 720 360"
  role="img"
  aria-label="Konverzija po uplift segmentu — radni primjer"
>
<desc>bar chart with 4 labels and 2 series</desc>
<line
  class="td-chart-grid"
  x1="80"
  y1="302"
  x2="696"
  y2="302"
></line>
<text
  class="td-chart-value"
  x="70"
  y="306"
  text-anchor="end"
>0</text>
<line
  class="td-chart-grid"
  x1="80"
  y1="246.4"
  x2="696"
  y2="246.4"
></line>
<text
  class="td-chart-value"
  x="70"
  y="250.4"
  text-anchor="end"
>1</text>
<line
  class="td-chart-grid"
  x1="80"
  y1="190.8"
  x2="696"
  y2="190.8"
></line>
<text
  class="td-chart-value"
  x="70"
  y="194.8"
  text-anchor="end"
>2</text>
<line
  class="td-chart-grid"
  x1="80"
  y1="135.2"
  x2="696"
  y2="135.2"
></line>
<text
  class="td-chart-value"
  x="70"
  y="139.2"
  text-anchor="end"
>3</text>
<line
  class="td-chart-grid"
  x1="80"
  y1="79.6"
  x2="696"
  y2="79.6"
></line>
<text
  class="td-chart-value"
  x="70"
  y="83.6"
  text-anchor="end"
>4</text>
<line
  class="td-chart-grid"
  x1="80"
  y1="24"
  x2="696"
  y2="24"
></line>
<text
  class="td-chart-value"
  x="70"
  y="28"
  text-anchor="end"
>5</text>
<line
  class="td-chart-axis"
  x1="80"
  y1="302"
  x2="696"
  y2="302"
></line>
<line
  class="td-chart-axis"
  x1="80"
  y1="24"
  x2="80"
  y2="302"
></line>
<rect
  class="td-chart-bar td-chart-series-0"
  x="123"
  y="85.16"
  width="32"
  height="216.84"
  rx="4"
><title>Kontrola (%), negativni uplift: 3.9</title></rect>
<rect
  class="td-chart-bar td-chart-series-0"
  x="277"
  y="101.84"
  width="32"
  height="200.16"
  rx="4"
><title>Kontrola (%), slabi uplift: 3.6</title></rect>
<rect
  class="td-chart-bar td-chart-series-0"
  x="431"
  y="126.86"
  width="32"
  height="175.14"
  rx="4"
><title>Kontrola (%), jaki uplift: 3.15</title></rect>
<rect
  class="td-chart-bar td-chart-series-0"
  x="585"
  y="104.62"
  width="32"
  height="197.38"
  rx="4"
><title>Kontrola (%), svi korisnici: 3.55</title></rect>
<rect
  class="td-chart-bar td-chart-series-1"
  x="157"
  y="96.28"
  width="32"
  height="205.72"
  rx="4"
><title>Kupon (%), negativni uplift: 3.7</title></rect>
<rect
  class="td-chart-bar td-chart-series-1"
  x="311"
  y="79.6"
  width="32"
  height="222.4"
  rx="4"
><title>Kupon (%), slabi uplift: 4</title></rect>
<rect
  class="td-chart-bar td-chart-series-1"
  x="465"
  y="29.56"
  width="32"
  height="272.44"
  rx="4"
><title>Kupon (%), jaki uplift: 4.9</title></rect>
<rect
  class="td-chart-bar td-chart-series-1"
  x="619"
  y="68.48"
  width="32"
  height="233.52"
  rx="4"
><title>Kupon (%), svi korisnici: 4.2</title></rect>
<text
  class="td-chart-label"
  x="157"
  y="324"
  text-anchor="middle"
>negativni uplift</text>
<text
  class="td-chart-label"
  x="311"
  y="324"
  text-anchor="middle"
>slabi uplift</text>
<text
  class="td-chart-label"
  x="465"
  y="324"
  text-anchor="middle"
>jaki uplift</text>
<text
  class="td-chart-label"
  x="619"
  y="324"
  text-anchor="middle"
>svi korisnici</text>

<rect
  class="td-chart-series-0"
  x="80"
  y="336"
  width="12"
  height="12"
  rx="3"
  fill="currentColor"
></rect>
<text
  class="td-chart-legend-text"
  x="98"
  y="346"
  text-anchor="start"
>Kontrola (%)</text>
<rect
  class="td-chart-series-1"
  x="207.52"
  y="336"
  width="12"
  height="12"
  rx="3"
  fill="currentColor"
></rect>
<text
  class="td-chart-legend-text"
  x="225.52"
  y="346"
  text-anchor="start"
>Kupon (%)</text>
</svg>
</div>
</figure>
<p>Graf pokazuje zašto prosjek skriva novac. Segment s jakim upliftom reagira dovoljno da može pokriti cijenu kupona. Segment s negativnim upliftom kupuje manje uz kupon nego bez njega. Takav rezultat može biti šum, loša izvedba testa ili stvarna reakcija na poruku. U svakom slučaju nije dozvola da mu pošaljemo još tri kupona.</p>
<h2>Četiri vrste kupaca, jedna neugodna istina</h2>
<p>Uplift logika korisnike promatra kroz dva potencijalna ishoda: bi li kupili s ponudom i bi li kupili bez nje. Za istu osobu nikada ne možemo istodobno vidjeti oba ishoda. Zato govorimo o procjeni, ne o čitanju misli.</p>
<p>Poslovno su zanimljive četiri skupine. Persuadables kupuju zbog ponude. Sure things kupili bi svakako. Lost causes neće kupiti ni uz ponudu. Sleeping dogs mogu reagirati negativno.</p>
<p>Najskuplja pogreška obično nisu ljudi koji nisu kupili. To su kupci koji jesu kupili, ali bi kupili i bez popusta. Dashboard ih pripiše kampanji, marža ih pamti drukčije.</p>
<h2>CRO test mora imati financijski ishod</h2>
<p>Klasični A/B test često završava na stopi kupnje ili prihodu po posjetitelju. Za promociju to nije dovoljno. Minimalna tablica eksperimenta treba imati:</p>
<table><thead><tr><th>polje</th><th>zašto postoji</th></tr></thead><tbody><tr><td><code>assigned_variant</code></td><td>čuva izvornu randomizaciju</td></tr><tr><td><code>exposed</code></td><td>razlikuje dodjelu od stvarne izloženosti</td></tr><tr><td><code>converted</code></td><td>bilježi primarni događaj</td></tr><tr><td><code>gross_revenue</code></td><td>prihod prije povrata i poreznih prilagodbi</td></tr><tr><td><code>cogs</code></td><td>trošak robe</td></tr><tr><td><code>discount_amount</code></td><td>stvarno iskorišten popust</td></tr><tr><td><code>payment_and_fulfilment_cost</code></td><td>varijabilni trošak narudžbe</td></tr><tr><td><code>returned_amount</code></td><td>prihod izgubljen povratom</td></tr></tbody></table>
<p>Doprinosna marža tada nije ukrasni KPI. Od prihoda oduzmemo trošak robe, popust, varijabilne troškove plaćanja i dostave te povrate. Ono što ostane uspoređujemo između tretmana i kontrole.</p>
<p>Prije testa treba odrediti vremenski prozor. Ako kupnju brojimo sedam dana nakon kupona, isti prozor mora vrijediti za tretman i kontrolu. Ako promocija samo pomakne kupnju iz sljedećeg tjedna u ovaj tjedan, kratki prozor može prijaviti pobjedu tamo gdje se samo promijenio datum.</p>
<h2>Što bih stvarno pustio u produkciju</h2>
<p>Prvo običan randomizirani test s kontrolom. Zatim izvještaj po marži, ne samo po konverziji. Tek nakon dovoljno podataka uplift model i segmentacija.</p>
<p>Model bih evaluirao na odvojenom testnom razdoblju, a kampanju bih ipak ponovno randomizirao unutar odabranog segmenta. Model može dobro rangirati korisnike i svejedno propasti kada se promijene cijene, sezona ili ponuda.</p>
<p>Najvažnija odluka nije koji algoritam koristiti. Najvažnija odluka je odbiti slanje popusta ljudima za koje nemamo dokaz da ih treba pomaknuti.</p>
<p>Popust nije konverzija. Popust je trošak kojim pokušavamo kupiti inkrementalno ponašanje. Ako ne mjerimo inkrement, ostaje nam samo skuplja verzija prodaje koju smo već imali.</p>
<h2>Izvori i provjera</h2>
<ul><li><a href="https://ailab.criteo.com/criteo-uplift-prediction-dataset/">Criteo AI Lab — Uplift Prediction Dataset</a></li><li><a href="https://arxiv.org/abs/2111.10106">Diemert i sur. — A Large Scale Benchmark for Uplift Modeling</a></li></ul>]]></content:encoded>
</item>
<item>
<title>Ekonometrija u marketingu: Od podataka do rezultata</title>
<link>https://www.peremin.com/ekonometrija-u-marketingu-kako-pretvoriti-brojke-u-oruzje/</link>
<guid isPermaLink="true">https://www.peremin.com/ekonometrija-u-marketingu-kako-pretvoriti-brojke-u-oruzje/</guid>
<pubDate>Tue, 22 Oct 2024 00:00:00 +0000</pubDate>
<description>Kako ekonometrijski modeli odvajaju korelaciju od učinka i pomažu povezati marketinške aktivnosti s prodajom, maržom i poslovnim rezultatom.</description>
<content:encoded><![CDATA[<p>Marketing bez ekonometrije je kao rock koncert bez pojačala – svi trube, ali nitko ne čuje poruku. Evo kako integrirati modele u strategiju, a da ne postaneš rob tablica i formula.</p>
<h2>1. <strong>Ubij “zombie metriku” – fokusiraj se na pažnju, ne impresije</strong></h2>
<p>Forget CTR i doseg. <strong>Ekonometrija pažnje</strong> pokazuje da je ključno <em>koliko dugo</em> korisnik zaustavlja pogled na oglasu, a ne koliko puta ga je vidio.</p>
<ul><li><p><strong>Primjer:</strong> Ako 90% korisnika preskoči tvoj video oglas u prve 2 sekunde, tvoj CPM je bacanje novca.</p></li><li><p><strong>Rješenje:</strong> Koristi eye-tracking podatke i AI analitiku da mjeriš <em>stvarnu</em> pažnju (ne samo “viewability”).</p></li></ul>
<h2>2. <strong>Marketing mix modeliranje: Tko je kriv za pad prodaje?</strong></h2>
<p>Kad šef upita “Zašto nam je ROI pao?”, nemoj nagađati. <strong>Hanssens (2014)</strong> nudi framework za otkrivanje uzročno-posljedičnih veza:</p>
<ul><li><p><strong>Korak 1:</strong> Izoliraj utjecaj svakog kanala (npr. koliko je Facebook doprinio, a koliko offline reklame).</p></li><li><p><strong>Korak 2:</strong> Identificiraj <em>lag efekt</em> – možda je TikTok kampanja djelovala tek nakon 3 tjedna.</p></li><li><p><strong>Primjer iz prakse:</strong> Jedan brend je otkrio da je 40% rasta prodaje uzrokovano… nestankom konkurentnog proizvoda s police. Bez modela, krivili bi SEO.</p></li></ul>
<h2>3. <strong>Direktni marketing + SVM = Love bomb za high-value kupce</strong></h2>
<p>Dosta slanja promo poruka svima. <strong>Istraživanje</strong> pokazuje kako <strong>Support Vector Machine (SVM)</strong> može identificirati kupce koji će ne samo odgovoriti na kampanju, već i biti profitabilni:</p>
<ul><li><p><strong>Balansiranje podataka:</strong> Ako samo 5% baze generira 80% profita, klasični A/B testovi su beskorisni.</p></li><li><p><strong>Tactical move:</strong> Automatiziraj segmentaciju kupaca pomoću Python skripti (npr. scikit-learn biblioteka).</p></li></ul>
<h2>4. Dashboardi koji ne izgledaju kao NASA kontrolna ploča</h2>
<p><strong>Pauwels (2014)</strong> naglašava: “Dashboardi su za akciju, ne za impresije.” Evo kako ih dizajnirati u rebelskom stilu:</p>
<p><strong>3 pravila:</strong></p>
<ol><li><p><strong>Samo crveno/zeleno</strong> – ako metrika nije alarmantna ili nije pobjeda, ne zaslužuje boju.</p></li><li><p><strong>Heatmap za kanale</strong> – gdje gori, tamo šalji pojačanja.</p></li><li><p><strong>“Baci izvještaj” tipka</strong> – ako dashboard ne možeš objasniti za 30 sekundi, redesign.</p></li></ol>
<h2>5. Eksperimenti koji ne završavaju otkazima</h2>
<p><strong>Ariely</strong> kaže: “Kompanije ne eksperimentiraju jer se boje da će dokazati da su pogriješile.” Evo kako izvući što više iz testova:</p>
<ul><li><p><strong>Metoda:</strong> A/B/n testovi s više varijanti (npr. 10 različitih CTA poruka umjesto 2).</p></li><li><p><strong>Hack:</strong> Koristi Bayesian statistiku da prekineš test čim postane jasno što radi (ne čekaj “95% significance”).</p></li></ul>
<h2><strong>Eksperimenti s “attention ROI-jem”</strong></h2>
<p><strong>Michael H. Goldhaber</strong> naglašava: Pažnja je valuta, a ne cilj. Mjeri je kao KPI:</p>
<ul><li><p><strong>Formula:</strong>
<code>Attention ROI = (Ukupno vrijeme pažnje / Trošak kampanje) x 100</code></p></li><li><p><strong>Primjer:</strong> Ako YouTube campaign košta 10,000€ i generira 50,000 minuta pažnje, ROI je 5 min/€. Usporedi s drugim kanalima.</p></li></ul>
<h2>6. Integracija modela u stvarni svijet: Što radiš kad algoritam lupi glupost?</h2>
<p>Ekonometrijski modeli nisu sveti gral. <strong>Srinivasan et al. (2010)</strong> savjetuju kombinaciju “tvrdih” podataka i “mekih” insightsa:</p>
<ul><li><p><strong>Primjer:</strong> Ako model kaže da cijena treba biti $99, ali fokus grupe kažu da je “prejeftino”, poslušaj intuiciju.</p></li><li><p><strong>Lifehack:</strong> Napravi “model sanity check” checklistu (npr. “Jesmo li uključili sezonalnost?”).</p></li></ul>
<h2>Zaključak: Ekonometrija za buntovnike</h2>
<p>Integriraj modele kao što Keith Richards integrira rifove – s distinkcijom, ali bez pretjerivanja. Koristi ih da:</p>
<ul><li><p><strong>Razotkriješ lažne uzroke</strong> (npr. pad prodaje nije zbog lošeg SEO-a, već loše usluge)</p></li><li><p><strong>Automatski optimiziraj budžete</strong> (algoritamski, u stvarnom vremenu)</p></li><li><p><strong>Preokreni priču</strong> (“Da, potrošili smo više, ali smo izgradili brend equity”)</p></li></ul>
<p>Najbitnije: <strong>Nikad ne dopusti da modeli postanu religija.</strong> Kao što kaže <strong>Lilien et al.</strong>, najbolje marketinške odluke su mješavina krvi (podataka), znoja (testova) i suza (intuicije).</p>]]></content:encoded>
</item>
<item>
<title>7 elemenata povjerenja koji povećavaju prodaju web shopa</title>
<link>https://www.peremin.com/7-najefikasnijih-proof-elemenata-za-povecanje-povjerenja-u-web-shopu/</link>
<guid isPermaLink="true">https://www.peremin.com/7-najefikasnijih-proof-elemenata-za-povecanje-povjerenja-u-web-shopu/</guid>
<pubDate>Mon, 16 Sep 2024 00:00:00 +0000</pubDate>
<description>Sedam konkretnih elemenata koji smanjuju sumnju kupca, grade povjerenje i povećavaju vjerojatnost kupnje u web shopu.</description>
<content:encoded><![CDATA[<p>Znaš onaj osjećaj kad uđeš u web shop i misliš si: “Hmm, je li ovo legit ili će mi netko maznuti podatke s kartice i kupiti jahtu na Karibima?”</p>
<p>E pa, nisi jedini.</p>
<p>Tvoji kupci osjećaju isto. Svaki dan. I zato mnogi od njih napuste tvoj shop prije nego što kažeš “konverzija”.</p>
<p>Istina je brutalno jednostavna: ljudi ne vjeruju web shopovima koje ne poznaju. A zašto bi? Internet je pun prevaranata.</p>
<p>Ali postoji rješenje. I nije komplicirano.</p>
<h2>1. Recenzije kupaca - najmoćnije oružje u tvojoj arsenal</h2>
<p>Recenzije su tvoj najbolji prijatelj. Zašto? Jer ljudi vjeruju drugim ljudima više nego tebi.</p>
<p>Brutalna istina: nitko ne vjeruje tvojim marketinškim pričama. Ali vjeruju Marku iz Osijeka koji je kupio tvoj proizvod i napisao: “Stiglo za 2 dana, radi kao san.”</p>
<p><strong>Kako implementirati:</strong></p>
<ul><li><p>Stavi recenzije na stranicu proizvoda, ODMAH ispod gumba za kupnju</p></li><li><p>Koristi platforme poput <a href="https://g.co/kgs/QCMN1Vx">Google Reviewsa</a>, <a href="https://www.trustprofile.com/hr/webshop/Bima-shop_4002132">trustprofilea</a>.</p></li><li><p>Prikaži i negativne recenzije (da, ozbiljno) - to povećava vjerodostojnost</p></li><li><p>Dodaj filtere za recenzije po ocjeni i relevantnosti</p></li></ul>
<p>Bonus savjet: Zamoli kupce da pošalju sliku proizvoda u upotrebi. Takve recenzije s fotografijama povećavaju konverzije za 22%.</p>
<h2>2. Broj kupaca i prodanih proizvoda - igraj na FOMO kartu</h2>
<blockquote></blockquote>
<p>“Preko 10.000 zadovoljnih kupaca!”
“Prodano više od 5.000 komada!”</p>
<p>Ovo nije hvalisanje. Ovo je dokaz. Ljudi žele ono što drugi već imaju.</p>
<p><strong>Kako implementirati:</strong></p>
<ul><li><p>Prikaži broj prodanih proizvoda direktno na stranici proizvoda</p></li><li><p>Dodaj “X ljudi trenutno gleda ovaj proizvod” notifikacije</p></li><li><p>Koristi pop-up obavijesti o nedavnim kupnjama (“Marija iz Splita upravo je kupila…”)</p></li></ul>
<p>Ključ je u specifičnosti. Ne piši “Mnogi su kupili” nego “3.457 ljudi je kupilo ovaj proizvod u zadnjih 30 dana”.</p>
<h2>3. Jamstva - ukloni strah od kupnje</h2>
<p>Ljudi se boje potrošiti novac online. Daj im sigurnosnu mrežu.</p>
<p><strong>Kako implementirati:</strong></p>
<ul><li><p>Ponudi povrat novca bez pitanja (30, 60 ili 90 dana)</p></li><li><p>Dodaj jamstvo “Ako niste zadovoljni, vraćamo novac”</p></li><li><p>Napravi posebnu stranicu gdje objašnjavaš svoje jamstvo</p></li><li><p>Stavi ikonu jamstva pored gumba za kupnju</p></li></ul>
<p>Najluđi primjer? Tvrtka Zappos nudi povrat 365 dana nakon kupnje. Ekstremno? Da. Učinkovito? Apsolutno.</p>
<h2>4. Preporuke stručnjaka - posudi kredibilitet</h2>
<p>Ljudi vjeruju autoritetima. Iskoristi to.</p>
<p><strong>Kako implementirati:</strong></p>
<ul><li><p>Prikaži endorsemente od poznatih stručnjaka u tvojoj niši</p></li><li><p>Dodaj certifikate i preporuke relevantnih institucija</p></li><li><p>Koristi citate stručnjaka na stranicama proizvoda</p></li><li><p>Napravi video gdje stručnjak objašnjava prednosti tvog proizvoda</p></li></ul>
<p>Primjer: “Preporučeno od strane Hrvatskog društva nutricionista” vrijedi više nego 100 tvojih marketinških tvrdnji.</p>
<h2>5. Demonstracije proizvoda - pokaži, ne pričaj</h2>
<p>Ljudi ne vjeruju riječima. Vjeruju onome što vide.</p>
<p><strong>Kako implementirati:</strong></p>
<ul><li><p>Dodaj video demonstracije za svaki proizvod</p></li><li><p>Prikaži “prije i poslije” fotografije</p></li><li><p>Koristi video koji pokazuju proizvod u akciji</p></li></ul>
<p>Moj favorit? Blendtec i njihova <a href="https://www.youtube.com/watch?v=qg1ckCkm8YI">“Will It Blend?”</a> serija gdje blendaju iPhone. Ludo? Da. Učinkovito? Prodaja im je skočila 700%.</p>
<h2>6. Društveni dokaz - snaga mase</h2>
<p>Ljudi žele pripadati grupi. Pokaži im da nisu sami u kupnji tvog proizvoda.</p>
<p><strong>Kako implementirati:</strong></p>
<ul><li><p>Prikaži logotipe poznatih klijenata (“Koriste nas…”)</p></li><li><p>Dodaj broj pratitelja na društvenim mrežama</p></li><li><p>Prikaži broj pretplatnika na newsletter</p></li><li><p>Istakni medije koji su pisali o tebi</p></li></ul>
<p>Primjer: “Pridruži se našoj zajednici od 50.000+ zadovoljnih kupaca” je moćnija poruka od “Kupi sad”.</p>
<h2>7. Certifikati i oznake povjerenja - instant kredibilitet</h2>
<p>Ljudi traže prečice za procjenu tvoje vjerodostojnosti. Certifikati su ta prečica.</p>
<p><strong>Kako implementirati:</strong></p>
<ul><li><p>Dodaj <a href="https://www.cloudflare.com/application-services/products/ssl/">SSL certifikat</a>(i istakni zeleni lokot)</p></li><li><p>Prikaži oznake sigurnih plaćanja (Visa, Mastercard, PayPal)</p></li><li><p>Istakni certifikate kvalitete i industrije</p></li><li><p>Dodaj oznake za zaštitu podataka (GDPR compliant)</p></li></ul>
<p>Ključno mjesto? Footer tvoje stranice i checkout proces.</p>
<h2>Zaključak: Proof elementi nisu opcija, oni su nužnost</h2>
<p>Tvrdnje bez dokaza su prazne riječi. A internet je već prepun praznih riječi.</p>
<p>Proof elementi nisu samo marketinški trik - oni su most povjerenja između tebe i kupca. I taj most mora biti čvrst.</p>
<p>Implementiraj ovih 7 elemenata i gledaj kako tvoje konverzije rastu. Ne zato što si bolji prodavač, nego zato što ljudi konačno vjeruju da si stvaran.</p>
<p>A ako misliš da je ovo previše posla, zapitaj se: koliko ti vrijedi povjerenje kupaca?</p>
<p>P.S. Znaš što je najbolji proof element od svih? Odličan proizvod. Sve ostalo je samo šlag na torti.</p>]]></content:encoded>
</item>
<item>
<title>Zašto brendovi rastu? ...i zašto vaš možda stagnira</title>
<link>https://www.peremin.com/zasto-brendovi-rastu-i-zasto-vas-mozda-stagnira/</link>
<guid isPermaLink="true">https://www.peremin.com/zasto-brendovi-rastu-i-zasto-vas-mozda-stagnira/</guid>
<pubDate>Tue, 18 Jun 2024 00:00:00 +0000</pubDate>
<description>Zašto brendovi rastu kroz penetraciju, mentalnu i fizičku dostupnost te kako prepoznati kada brend stagnira unatoč glasnoj kampanji.</description>
<content:encoded><![CDATA[<h2>Uvod: Vrijeme je da pogledate istini u oči</h2>
<p>Ako ste ikad sjedili na marketinškom sastanku gdje se raspravlja o “emocionalnoj vezi s brendom”, vjerojatno ste izašli s više pitanja nego odgovora. U stvarnosti, brendovi ne rastu zbog leptirića u trbuhu — već zbog vidljivosti, dostupnosti i jasne <strong>brand diferencijacije</strong>.</p>
<h2>Što čini da brend raste?</h2>
<p>Rast brenda nije slučajnost. To je rezultat kombinacije nekoliko ključnih faktora:</p>
<ul><li><p><strong>Marketinška penetracija</strong>: Koliko ljudi zna za vas i koliko često vas biraju.</p></li><li><p><strong>Prepoznatljivost</strong>: Može li vas prosječan kupac izdvojiti iz mase?</p></li><li><p><strong>Diferencijacija</strong>: Što vas čini drugačijima (i boljima)?</p></li><li><p><strong>Dostupnost</strong>: Jeste li tamo gdje su vaši kupci – fizički i digitalno?</p></li></ul>
<blockquote></blockquote>
<p><strong>Važna poruka</strong>: Ako niste prisutni u svijesti kupca, ne postojite.</p>
<h2>Diferencijacija brenda: Ključ, ali ne čarolija</h2>
<p>Mnogi misle da je diferencijacija isto što i slogan. Nije. To je percepcija vrijednosti.</p>
<h3>Primjeri uspješne diferencijacije:</h3>
<ul><li><p><strong>Dove</strong> – koristi kampanju “Real Beauty” da se emocionalno poveže s kupcima.</p></li><li><p><strong>Fairy</strong> – dosljedno komunicira da pere bolje i traje duže.</p></li></ul>
<p>Ako vaš proizvod ne ostavlja trag u glavi potrošača, postajete još jedan sapun na polici.</p>
<h2>Stavovi vs. ponašanje: Što dolazi prvo?</h2>
<p>Tradicionalna teorija kaže: ljudi prvo zavole brend, pa ga kupe.
Realnost? Suprotno.</p>
<p>Koen Pauwels and Oliver Koll examine the complex relationship between consumers’ attitudes toward a brand and its market outcomes. An analysis of more than 150 brands in five countries reveals the intricate reciprocal connections between customer perceptions and behaviors, brand differentiation, and market penetration in both stable and emerging markets.</p>
<p><img src="https://www.peremin.com/media/posts/3/media.webp" alt="Koen Pauwels and Oliver Koll - Effects of Differentiation on the other studied metrics"></p>
<h3>Istraživanje:</h3>
<p>Prema Pauwelsu i Kollu (2013), <strong>ponašanje prethodi stavovima</strong>. Ljudi često isprobaju proizvod, a tek onda razviju emocionalni stav.</p>
<blockquote></blockquote>
<p>Pouka: Umjesto da pokušavate “osvojiti srce”, pobrinite se da vas ljudi mogu lako pronaći i kupiti.</p>
<h2>Veliki brendovi: Prednost i zamka</h2>
<p>Veliki brendovi žive od prepoznatljivosti, ali i najmanji propust ih može skupo stajati.
Mali brendovi? Oni moraju vrištati — <strong>memeovima, gerilom, pričom</strong>.</p>
<p>Ali samo priča nije dovoljna. Kupac mora jasno znati:</p>
<ul><li><p>Što nudite?</p></li><li><p>Zašto ste bolji?</p></li><li><p>Gdje vas može pronaći?</p></li></ul>
<h2>Rast brenda u novim tržištima</h2>
<p>Na <strong>rastućim tržištima</strong> poput Indonezije, Saudijske Arabije ili istočne Europe, diferencijacija i vrijednost su ključne.</p>
<h3>Strategija za rast:</h3>
<ul><li><p>Jasna komunikacija koristi</p></li><li><p>Pojednostavljen proces kupnje</p></li><li><p>Lokalna prilagodba poruka</p></li></ul>
<h2>Zaključak: Kupci ne traže bajke, već rješenja</h2>
<p>Ako ne investirate u prepoznatljivost i diferencijaciju, vaš brend je kao brod bez kompasa – lutat će dok ne potone.</p>
<p>Ne trebate biti Coca-Cola, ali morate znati:</p>
<ul><li><p><strong>Gdje se nalazite</strong></p></li><li><p><strong>Zašto vas ljudi biraju (ili ne biraju)</strong></p></li></ul>
<blockquote></blockquote>
<p>Brend ne raste sam od sebe. Raste jer ga gurate – pametno, konzistentno i jasno.</p>
<h2>Što možete napraviti odmah?</h2>
<p>✅ Pregledajte jeste li lako dostupni online i offline
✅ Usporedite svoje poruke s konkurencijom
✅ Ispitajte prepoznaju li vas korisnici po nečemu specifičnom
✅ Uklonite prazne fraze – uvedite konkretne koristi u komunikaciju</p>
<h2>📚 Dodatno čitanje</h2>
<ul><li>Sharp, B. (2010). <em>How Brands Grow: What Marketers Don’t Know</em></li><li>Romaniuk, J. et al. (2007). “Importance of Perceived Brand Differentiation”</li><li>Pauwels, K. et al. (2013). “Marketing u rastućim i zrelim tržištima”</li></ul>]]></content:encoded>
</item>
</channel>
</rss>
