Podcast

Data Talk #78: Martina Gelnerová (Apify)

epizoda#78 |  vyšlo  |  délka  | 825 poslechů |   |  mp3

Do další epizody přijala pozvání Martina Gelnerová z Apify. Rozhovorem vás provede Hynek Walner a Jiří Vicherek. Uslyšíte, jaká byla cesta Martiny z turistického ruchu do dat. Probereme, co Martině daly Czechitas a jaký byl přechod do světa dat. Do detailu probereme i monitorování falešných slev a jak do procesu zasahuje legislativa a zakázky ze strany EU. Probereme, jak řešit datovou kvalitu a jaké všechny komplikace přináší dodatečné slevy a podobné překážky.

Strojový přepis

Dobrý den, mé jméno je Jirka Vecherek. Dobrý den všem, mé jméno je Hinek Valner. Vítáme vás u dalšího dílu podcastu Datatolk.

Mám velkou radost, že po delší době můžeme opět přivítat ženu ve studiu. Je jí Martina Gelnerová, Data Analyst z Epify. Ahoj, Martino.
Ahoj vám i posluchačům.

Martinu jsme si dnes pozvali, aby nám povyprávěla o své epické cestě. Říkáme jí „epická“, protože po velmi dlouhou dobu, dvacet let, pracovala v turistickém duchu, v cestovce, a poté se rozhodla přesunout do našeho světa, do světa technologií a dat. A už tři roky v něm pracuje na velmi zajímavých projektech. O těch se také budeme bavit, takže to bude mít dvě linie.

První je Martinina kariérní cesta a to, co ji poslední tři, čtyři, pět let naučila. A druhá linka je o projektech, na kterých pracuje, jako jsou Hlídač shopů a price monitoring.

Martino, když mluvíme o tvé historii, pověz nám prosím o své cestovkové kariéře a o tom, proč a kde se najednou objevila data a tvá touha vydat se jiným směrem. To zní jako velmi dávná historie.

Za tři roky v datech jsem skoro zapomněla na svůj život v cestovce. V cestovce jsem pracovala přes dvacet let a myslela jsem, že tam zůstanu po celý život. Práce mě moc bavila. Dělala jsem v cestovce, která vozila turisty do střední Evropy, do Čech a obecně do střední Evropy.

Vždycky jsem pracovala s cenami, kalkulacemi cen, což znamenalo vytvářet obrovské Excelové tabulky a různé ruční srovnávače, tehdy v té době, k počítání marží. Neustále jsme tedy pracovali s cenami. Moc mě to bavilo a kdyby nenastal covid, pravděpodobně bych to dělala do důchodu.

Nicméně přišel covid a celý cestovní ruch zkolaboval. Nešlo o to, že by padla jen jedna cestovka a já bych si sbalila kufřík a šla vedle ke konkurenci. Nejdříve jsem rok čekala, jestli se situace nezlepší a když jsem viděla, že se nic nezlepšuje a žádná zářná budoucnost se tam neobjevuje, začala jsem přemýšlet, že nastal čas na změnu.

Cestovní ruch je velmi uzavřená oblast. Měla jsem nějaké dovednosti, ale bydlím mimo Prahu, mám několik dětí a potřebovala jsem práci na částečný úvazek a s možností home office. To není úplně ideální nastavení na vstup na pracovní trh v novém oboru.

Takže jsem si udělala průzkum, kde by takové podmínky byly standardem, a vyšlo mi logicky IT. Říkala jsem si, že vzhledem k tomu, že pracuji s čísly, půjdu do IT, začala jsem si plánovat, jestli se naučím programovat v JavaScriptu, Javě nebo něčem jiném.

Pak jsem narazila na kurzy CheckItas a tehdy jsem poprvé slyšela pojem „data“. Říkala jsem si, že to je dost blízké tomu, co jsem dělala předtím, navíc to působilo tak, že data se naučíte rychle. Během tří měsíců vystoupíte z kurzu a můžete vstoupit na trh práce, na rozdíl od webdesignu nebo programování, kde je cesta mnohem delší.

No, takže to byla Datová akademie CheckItas?
Ano, Datová akademie CheckItas právě před třemi lety začínala. Byla to velká výzva, velmi intenzivní. Šest dní v týdnu, tři hodiny denně. Ale ty holky, které do toho dají všechno, mají velké odhodlání a nasazení. Učí se úplně základy, ale během tří měsíců opravdu vyrostou, vytvoří si projekt, naučí se hodně a jsou připravené vstoupit na trh práce.

Martino, pojď nás prosím trochu přenést do tvých začátků v digitální akademii. Jaké to bylo? Jaké byly první hodiny? Zmínila jsi, že jsi měla nějakou lehkou průpravu a pracovala jsi s daty, nebyla jsi úplně imunní vůči datům a číslům, ale přesto, jaké byly začátky?

Upřímně, můj první dojem byl, že to je nějaká sekta, všichni jsou strašně pozitivní a podporující, a říkala jsem si, že to asi nezvládnu. Zdravíme naší komunitu. Ale pak jsem si uvědomila, že je to jen můj blok nebo předsudek.

Když jsem tu rezervovanost odstranila, bylo to úžasné. Prostředí je opravdu velmi podporující, lektoři, mentoři a kouči do toho vstupují s cílem pomáhat a provázet nás. Jsou k dispozici, když jste v úzkých, a to opakovaně, protože to, co vám hodinu vysvětlují, zní v tu chvíli logicky, ale druhý den ráno už tomu nerozumíte.

Struktura je zaměřená na Python, Snowflake SQL a na vizualizaci primárně v Tablu. Takto je to v Praze, v Brně mají možná jiné nástroje a jako ETL používají Kebulu. Holky se tedy naučí celý stack od přípravy dat, workflow, nastavení, extrakce, úpravy, nahrání čistých dat do vizualizačního nástroje a poté vytvoří dashboard.

To vše se vyučuje teoreticky, jsou úkoly, průběžné projekty a pak dívky vytvoří dvoučlenné týmy, které několik týdnů až dva měsíce pracují na svém vlastním projektu. Musí si vybrat téma, sehnat data a vytvořit něco, co pak prezentují, včetně blogového článku. Na závěrečném gala večeru se nejlepší tři projekty ocení různými cenami – technický unicorn, obecní unicorn a další.

Pro holky je to náročné, ale mají skvělé mentory, kteří jim hodně pomáhají, směřují je a dávají mantinely. Vizí jsou velké věci, ale reálné cíle jsou menší, aby stihly dokončit projekt za dva měsíce.

Skvělé je, že nakonec opouštějí digitální akademii s reálným projektem, s něčím, co mohou ukázat firmám při hledání práce a říct: „Tohle jsem vytvořila.“

A co jsi tedy vytvořila ty?
Můj projekt v první iteraci analyzoval dojezdové časy do poboček CheckItas ze všech obcí České republiky, s cílem ukázat, že mají málo poboček, špatnou dostupnost a že by měli otevřít pobočku třeba v Hradci nebo v Pardubicích.

Asi v Hradci nebo v Pardubicích?
Ani jedno. Jsem od Plzně a ta je blízko Prahy, takže dojezd ještě šel.

Já jsem rád, že vaše předchozí zkušenost z cestovního ruchu našla uplatnění.
V Pajtnu jsem vytvořila skript, který scrapeoval dojezdové časy ze všech obcí v ČR do třinácti krajských měst. Data jsem vizualizovala v Tablu jako mapu, která podle kombinace otevřených poboček v krajských městech zobrazovala červeně a zeleně, kde byl dojezd do jedné hodiny a kde ne.

Vypočítali jsme také procento obyvatel, kteří touto dostupností nebyli pokryti. Protože to bylo dost uzavřené, rozšířili jsme to s mé partou o scraping inzerátů na Jobs.cz, ze kterých jsme identifikovali relevantní pozice ke kurzům CheckItas, tedy nejen IT pozice obecně, ale zejména ty odpovídající teoretické průpravě kurzů.

Rozlišovali jsme juniorní a seniorní pozice a vytvořili jsme tak analýzu trhu, po jakých pozicích a v kterých městech je poptávka. Zjistili jsme, že z pohledu dojezdů by bylo fajn otevřít pobočku v Karlových Varech, ale v té době tam byly třeba jen dvě nabízené juniorní IT pozice, takže jsme tam otevření pobočky nedoporučili.

Tím se dostáváme k závěru akademie. Prezentovala jsi svůj projekt. Co se dělo potom? Nebo už během akademie jsi hledala pracovní pozici a věděla, jakým směrem chceš jít? Jaké bylo tvé uvažování o kariéře, když jsi byla ještě v roli career switch, kdy je všechno možné?

Když jsem začínala digitální akademii, například v motivačním videu, které je součástí přihlášky, jsem sebevědomě tvrdila, že se stanu business analytikem a budu dělat business dashboardy. Mám know-how z cestovky a obchodu, to byla jasná cesta.

Ale během tří měsíců jsem zjistila, že mě to neláká, spíše mě baví práce s daty – jejich úprava, transformace a hledání souvislostí, třeba jestli je něco profitabilní nebo ne, ale jinými cestami.

Takže představa jít do nějaké konzultační firmy mě trochu opustila. Navíc jsem měla štěstí, že můj mentorské tým byl z Epify, shodou okolností, možná i proto, že jsem uvedla, že budu skrejpovat dojezdové časy, jsme se s nimi spřátelili.

Jakub Balada a Zuzana Palechová byli moji mentoři, kteří mě tím protáhli. Když skončila digitální akademie, Kuba mi nabídl práci u nich v týmu na hlídači shopů.

Byla to ta nabídka, na kterou jsi čekala? Přesunulo se ti to víc z konzultantské a byznysové role do technologie a startupů? Nebo jsi už u nich měla jasno?

Myslím, že velký problém career switche je nízké sebevědomí ohledně vlastních schopností a toho, co můžete nabídnout.

Mým cílem bylo hlavně získat práci. Kdyby byla práce něčím jiným, než mému srdci blízkým, tak aspoň získat praxi a pak teprve přejít jinam.

Zároveň jsem od začátku potřebovala práci na částečný úvazek a možnost remote, abych zvládala rodinnou agendu.

Když mi Kuba nabídl hlídače, přišlo mi to jako super startovací projekt, protože nebyl problém, že nebudu full-time, nebylo potřeba tolik času a šlo to dělat z domu.

A protože to byl neziskový projekt, říkala jsem si, že je to bezpečné území, že pokud něco nevýjde, tak to neovlivní výrobu tisíců výrobků a že se tam můžu naučit a růst.

Ptám se i proto, že Apify je podle mě jedna z mála firem, která opravdu nabírá juniorky. Žádný jiný partner CheckItas tak nevyužil absolventky. I Zuzka, o které jsi mluvila, je absolventkou, takže už tam je několik generací.

Z tvého pohledu, když jsi byla v akademii, co dělala Apify dobře? Protože něco musí dělat dobře, aby to fungovalo.

Funguje to, protože jiní by možná chtěli, ale integrace juniorů do týmu je velmi složitá, je tam diskrepance mezi chtěním a realitou.

Myslím si, že je tedy víc partnerských firem, které absolventky akademie berou, například i konzultační firmu Billigence. Vím, že v bankovnictví se hodně holek uchytí, možná proto, že banky mají dobře nastavený kariérní žebřík a způsob růstu juniorů.

U nás je přístup trochu jiný. Je nás z CheckItas v Epify hodně, asi deset, ale přímo na data jsme tam byly jen Zuzka a já, takže z datové akademie na data v Epify jsme dvě.

Ale k ostatním holek přistupujeme tak, že jsou velmi motivované, naučily se za tři měsíce spoustu věcí, víme, že se chtějí učit, chtějí přijmout zodpovědnost a učí se. Spousta pak pokračuje na jiné technické pozici, například na našem storu, kde kontrolujeme, že všechno funguje.

Víme, že to, co neumí, se naučí, mají entuziasmus a chytí práci za pačesy.

Zajímá mě přechod z role účastnice datové akademie, která je trochu chráněné prostředí, vlastně škola, k roli datové profesionálky, kdy už jsi zaměstnaná, existují očekávání a dostáváš za to zaplaceno. Byl to pro tebe výrazný přechod? Nebo to bylo plynulé?

Bylo to pro mě stresující období. Měla jsem pocit, že vše trvá hrozně dlouho, protože jsem neměla zkušenost, jak dlouho věci běžně trvají, jak často se pokazí, jaké jsou bugy. Měla jsem málo důvěry ve své zkušenosti a vše raději dvakrát kontrolovala, než jsem práci pustila dál.

Měla jsem pocit, že nedodávám, ale Zuzka, tehdejší vedoucí, byla velmi podporující a říkala mi, že to dělám dobře, že mám pokračovat tímto stylem, že základ je, že práce funguje a postupně se budu zlepšovat, což se stalo.

Pojďme se teď podívat na neziskový projekt, který byl tvou první datovou prací, Hlídač shopu.

Než o něm povíš, pro pár posluchačů, kteří Apify neznají, co vlastně Apify dělá a jak je s hlídačem shopu spojeno?

Apify provozuje webovou platformu, která slouží jako konzole pro web scraping. Je to prostředí pro tvorbu scraperů, které řeší všechny technické problémy spojované se scrapováním, aniž by autor scraperu musel tyto problémy řešit.

Poskytujeme řešení pro škálování, plánování (scheduling) a další funkce. Máme také velkou komunitu a store s hotovými scrapers – tzv. ektory, které jsou specifické pro konkrétní úkoly. Není to pouze pro programátory, ale i pro poloprogramátory. Uživatel si může ve storu vybrat například scraper na Google Maps, upravit parametry a začít stahovat data k dalšímu zpracování.

A co je Hlídač shopu?

Hlídač shopu je neziskový projekt, který společně provozují Apify, TopMonks a Kebula. Vznikl v roce 2018, jeho cílem bylo upozornit na to, že slevy v online obchodech často nejsou reálné.

Typicky totiž před Black Friday prodávající krátkodobě zvýšili cenu, aby pak mohli uvést slevu z nafouknuté ceny, která reálná nebyla.

Já jsem se připojila do již rozjetého projektu, přebírala jsem hotové query a scrapery. Přidávala jsem nové shopy, takže aktuálně sledujeme zhruba 40 obchodů.

Každý den kompletně scrapeujeme jejich nabídku, tedy crawlujeme stránky všech produktů a ukládáme jejich prodejní cenu a případně přeškrtnutou referenční cenu.

Na základě těchto dat vyhodnocujeme, zda vyčíslena sleva nebo referenční cena odpovídá realitě, zda je sleva skutečná nebo nafouknutá.

Jaké byly tvé první úkoly, když jsi začínala na Hlídači shopů?
Nejdříve jsem asi dva týdny četla kód, který tam byl napsán. Psal ho kdysi Padák, takže to pro mě bylo technicky náročné.

Pojďme tedy na code review Padákova kódu.

Pro mě to bylo jako číst detektivku. Každý kus kódu jsem si musela vyzkoušet na datech, abych viděla, jestli dělá to, co si myslím, že dělá, a jestli to dělá správně.

Díky tomu, když jsme se rozhodli změnit přístup k vyhodnocování slev, Kuba Balada mi řekl: „Teď tam prosím doplň tuto logiku, že nebudeme slevy vyhodnocovat jen jednorázově…“

To znamená, že klesne cena a my uvedeme, jakou slevu to představuje, ale budeme respektovat i takzvané stupňovité zlevňování, jak to požaduje Evropská unie. To znamená, že pokud se produkt slevňuje souvisle v několika krocích, přeškrtnutá cena může být stále původní a nemusí se po každém kroku upravovat.

Když jsem již rozuměla tomu kódu, byla jsem schopná ho i doplňovat. Jinak co znamená přidat nový obchod? To je vlastně docela komplikovaný proces, protože pro každý obchod programátoři, většinou z Topmonks, někdy i z Apify, vytvoří dedikovaný scraper, který je na daný obchod laděný. Ten scraper pak projde všechny kategorie a produkty a ukládá prodejní ceny a přeškrtlé ceny.

Když chceme přidat nový obchod, požádám kluky, aby mi to naprogramovali. Pak se data z naší platformy Apify rovnou posílají do Kebuly a nad tím probíhá asi sedm transformací, po kterých se data uloží do S3. V případě, že přidáváte jeden obchod, je to docela dobré řešení. Pokud však chcete přidat deset obchodů, nastavení 70 transformací v Kebule a všech tabulek je dost komplikované, takže jsme se Zuzkou naprogramovali ETL na Apify, který přes API založí všechny transformace a tabulky v Kebule, což bylo super.

Abych to mohla udělat, musela jsem se tehdy naučit JavaScript, protože všechno na Apify se tehdy psalo jen v JavaScriptu. Dnes by to bylo jednodušší, protože nyní podporujeme Python, takže se současnou znalostí Pythonu bych to napsala určitě jednodušší a rychleji.

V každém případě, když jsme teď například přidávali asi pět nových obchodů, bylo to otázkou jednoho kliknutí, protože stačilo zadat názvy obchodů a vše se v Kebule zázrakem založilo.

Když se podíváme na tým kolem Hlídače a tvou pozici – jak se to vyvíjelo? Na začátku, předpokládám, na tebe padaly ty nejjednodušší, ale manuálně nejnáročnější úkoly. Jak se to vyvíjelo v čase?

Je to přesně, jak popisuješ. Od začátku mám na starosti, aby všechno běželo, jak má. Sleduji, že scrapeři obchodů běží, že vracejí výsledky, že výsledky nejsou nesmyslné a že se data propisují celým řetězcem našich procesů. To je spíš projektově technologická část práce – když je něco rozbité, komunikuji, aby nám to opravili.

Další část byla, a na té jsem velmi vyrostla, práce na úpravách kódu, kdy doslova zasahuji do produkčního kódu s troškou nervozity, vkládám nové řádky a čekám, co z toho vyleze. Potom jsem zjistila, že některé případy se původně vyhodnocovaly špatně. Někdy jsem nebyla jistá, jestli je možné, že já jako LF docházím k jiným výsledkům než kód, ale potvrdilo se, že tam opravdu byl malý bug, který jsme opravili.

Moje první Black Friday bylo nekonečně mnoho ruční práce, kdy jsem nastavovala scrapery, které na Black Friday běží čtyřikrát denně. Jsou specifické, protože berou kategorii Black Friday a celý provoz je oproti běžnému režimu urychlený. Poté bylo potřeba udělat vyhodnocení všech čísel a zároveň vybrat vhodné ukázky porušení pravidel k ilustraci, protože před třemi lety, když jsem začínala, bylo neshod ve slevách opravdu hodně.

Většina obchodů tehdy neplnila pravidla, ale vybrat z těch slev typ porušení tak, aby to bylo jednoduše komunikovatelné a pochopitelné pro média, nebylo jednoduché. Potřebujete jasný případ, žádné kolísání. Když je něco liché na začátku, musí to znamenat konkrétní důsledek. Tehdy jsem tomu moc nerozuměla, viděla tisíce produktů, než mi došlo, co vlastně hledám.

Následující roky to bylo jednodušší, protože když máte jasno, co hledáte, pomáhají data a dá se předfiltrovat to, co nemá předchozí pohyby cen.

Martine, strašně mě fascinuje, že tvá zkušenost – pracovat v cestovce, pak zásadní kariérní změna, absolvovat digitální akademii, hned nastoupit jako datový profesionál do Apify a pracovat na Hlídači – je časově velmi kondenzovaná. Jaké jsou největší lessons learned, které jsou přenositelné? Kdybys teď designovala digitální akademii na téma Hlídač obchodů, co bys chtěla předat dál?

Myslím si, že zaměření digitální akademie nebo datové akademie je skvělé a univerzální. Sama mentoringově vedu následující běhy, protože mě to baví, už jsem součástí té komunity a šířím ji dál.

Je pravda, že holky jsou velmi silné v Pythonu, což oceňuji i na jejich projektech. První přístup k datům volí často přes Python, ale v dalších pracech s Pythonem už dělají pokročilejší věci, které junior často ještě nedělá. Proto bych holkám vysvětlila, že s největší pravděpodobností začnou na SQL, ať se ho nebojí a naučí se common table expressions, protože některé nástroje to vyžadují a není možné spouštět více dotazů za sebou.

Jinak bych je chtěla povzbudit, že stejně jako za tři měsíce zvládly daný stack, naučí se i další věci, na které pak pravděpodobně narazí.

Kromě technologických věcí – jsou nějaké velké lessons learned v řízení projektů? Něco, co bys chtěla opakovaně zdůrazňovat?

Když mě můj mentorsky tým Kuba se Zuzkou vedl, hodně nás zaměřoval na agilní přístup a na mapu činností. Ale moje praktická zkušenost je, že se to děje hodně živelně – hezké je nakreslit mapu projektu, ale stejně se vše řeší, jak přichází.

Čekala jsem systematičtější přístup, ale na druhou stranu asi je to startupová kultura, kde se věci berou postupně – něco se vezme, vyřeší a hned se pokračuje s dalším.

Na Hlídači se mi moc líbí, že to byla grassroots akce – vlastně občanská iniciativa, která kontrolovala velké obchody, zda nedělají nějaké šedé, manipulativní praktiky vůči spotřebitelům, svým zákazníkům. A že to z tohoto prostředí vzniklo.

Líbí se mi, že historie Hlídače dala hodně za pravdu. Už od roku 2018 jsme si říkali, co je sleva, co je falešná sleva, co je reálná cena a i terminologie se vyjasnila. Dnes máme jasné pojmosloví a většina obchodů je compliant.

Co se v této oblasti stalo? Můžeš nás provést touto změnou? Jak se z Hlídače stal nepřítel obchodů, že jste vlastně byli občanská iniciativa, ale zároveň služby pro e-shopy?

Je to přesně, jak jsi popsal. Tým Hlídače si na začátku sám určil způsob vyhodnocování slevy. Jednoduchou úvahou – sleva musí znamenat, že cena je nižší než cena v nějakém předchozím časovém období.

Debatovali jsme o délce tohoto období a nakonec jsme se shodli na 30 dnech, což nám později potvrdila i evropská legislativa.

Neměli jsme však žádnou oporu v zákoně, v nějakých vymahatelných pravidlech. Bylo to čistě na našem úsudku.

Pak vstoupila v platnost evropská legislativa, kterou měly státy implementovat do května 2022. V Česku to nestihli, takže se začala platit až začátkem ledna 2023. Ta legislativa jasně stanoví, co je sleva, jak se vyčísluje a jak se uvádí. Pravidla jsou velmi jednoduchá – pokud obchod uvádí slevu, musí referenční „přeškrtnutou“ cenu počítat jako nejnižší prodejní cenu produktu za posledních 30 dní před slevovou akcí, aby bylo jasné, že aktuální sleva je větší než ta předchozí.

Dále jsou tam další podmínky, například možnost kontinuálního zlevňování – když si produkt původně stojí 100, klesne na 90 a pak na 80, stále můžete držet přeškrtnutou cenu 100, pokud mezi těmito poklesy cena neklesla a neklesla.

Tato legislativa nám dala za pravdu, lehce jsme upravili pravidla Hlídače, aby byla v souladu s legislativou.

Obchody na to reagovaly a některé se daly dohromady, protože věděly, že pravidla jsou vymahatelná. Některé obchody nás samy kontaktovaly, žádaly vysvětlení a úpravy výpočtů.

Mimochodem mnohé obchodní společnosti vůbec neevidovaly historii cen, takže si to nemohly spočítat, a musely provést zásahy ve své infrastruktuře.

My jsme takto fungovali na českém trhu a čekali jsme, co se stane, až začne legislativa platit a obchodní inspekce obchody skutečně sledovat a případně postihovat.

Měl jsem možnost být u Hlídače během Black Friday ve spolupráci s Irčou a Zatloukalovou. Byla sranda, že k vyhodnocení do médií jsme chtěli Výbor pro ochranu hospodářské soutěže a Českou obchodní inspekci, aby se vyjádřili.

Pro ně to byl podklad, vše bylo zpracované a jasně ukázané, ale přišlo mi, že byly dost bezmocní – říkali, že vědí o tom, ale nemohou s tím nic dělat.

To se změnilo změnou legislativy – pravidla se stala vymahatelnými, ale chyběl nástroj.

A v tom okamžiku přišla výzva Evropské komise, která hledala řešení pro monitorování cen a vyčíslování slev, což vlastně odpovídalo Hlídači.

Bylo legrační, když jsme se poprvé dočetli na Slacku, že Evropská unie vypsala výběrové řízení na scraping, a nabízeli jsme se: „To je Hlídač, máme k tomu mnohem víc co říct, nejen scraping, máme celý know-how, víme, co sledovat a jak vyhodnocovat.“

A to myslím bylo rozhodující při získání projektu.

Výběrové řízení bylo vyhlášeno na jaře 2022, směrnice měla platit od května, my jsme se v srpnu dohodli a společně se dvěma lidmi z Topmonks a dvěma z Apify jsme do podzimu postavili prototyp, abychom začali se scrapingem na Black Friday.

To znamenalo začít v říjnu skrejpovat první obchody – opravdu rychlý start.

Co změnil tento projekt pro Hlídač? Co se muselo změnit na produktu?

Museli jsme změnit přístup – řešení muselo být generické, umožnit scraping velkého množství obchodů.

Na Hlídači máme pro každý obchod speciální scraper, který je na jeho strukturu naladěný.

Tady se ale očekávalo stovky obchodů, které má systém automaticky zacvaknout a sledovat.

Proto jsme na Apify vyvíjeli AI scraper, který dokáže na stránce automaticky identifikovat, co je prodejní cena a co přeškrtnutá cena ze všech čísel na stránce.

To umožňuje velký počet obchodů scrapovat bez manuálního nastavování selektorů.

Změnil se i přístup jak scrapujeme – na Hlídači nám stačí samotná data (cena a produkt), tam scraping končí.

Evropská unie ale potřebuje důkazní materiál, který inspekce použijí pro spory s obchody – tedy screenshoty a kompletní zdrojový kód stránky pro případ soudního sporu.

To mělo pár zásadních důsledků – Evropská unie trvá na tom, aby provozování probíhalo na území EU.

Naše scrapeři běží v Americe, což bylo velké téma, nakonec jsme našli řešení: neukládat data v Americe, ale hned je posílat do Evropy.

Ukládání screenshotů a zdrojových kódů generuje velké objemy dat, což bylo nákladové zatížení, takže jsme kalkulaci trošku přepracovali.

Změnil se něco v oblasti antiscrapingu? Původně jsme měli problém – technologie a právně nám házely klacky pod nohy, pak to bylo víceméně „červený koberec“, protože EU sdílela data s námi.

Při škálování projektu se musí povolit robotům přístup, protože Evropská komise to vyžaduje.

Měli jsme o tom dlouhé diskuze.

Pokud by se scraping rozrostl do problému, úřady by měly pravomoc roboty regulovat.

EU si však velmi hlídá, aby data, která se zveřejňují, byla stejná, jaká vidí uživatel nebo zákazník.

Nakonec se ukázalo, že blokování bylo velice vzácné.

Scrapovali jsme přes 700 obchodů a skutečně blokování bylo jen u čtyř.

Dokážeme blokování i prolomit – ne každý den a ne soustavně, ale pro vyhodnocení nekompliance stačí i neúplná datová řada.

Obchod, který manipuluje s cenami, se odhalí i na dírčích datech.

Bylo to uspokojující, když nám irští uživatelé Hlídače psali, že i když nemají kompletní data, vyvolali řízení a udělili pokutu, protože to bylo jasné.

Hinek říkal „Hlídač 2.0“, vy tomu říkáte price monitoring nebo jinak?

Tvořili jsme to pro agenturu Evropské unie. Uživatelé jsou obchodní inspekce členských států – aktuálně 16 zemí.

Mají monitorovací kampaně – zadávají třeba 50 obchodů ze své země a sledují výsledky.

Uživatelům jsme vytvořili webovou aplikaci, kam zadávají URL sledovaných produktů…

Na pozadí potom každý den probíhají ty scrapey, a v té aplikaci si uživatelé mohou prohlédnout screenshoty. Vykreslujeme jim tam graf vývoje, ať už prodejní ceny nebo přeškrtnuté ceny. Nad každou cenou pak probíhá vyhodnocení compliance či non-compliance.

Bylo to docela legrační, protože jsme jim jen označovali, že určitý produkt je non-compliant, a zjistili jsme, že uživatelé často vůbec nevědí proč, neumí to určit ani z grafu, ani z cen. Proto jsme jim tam jako uživatelsky doplnili vysloveně napsáno: „non-compliance vznikla 5. 12., protože prodejní cena a přeškrtnutá cena nesouhlasí,“ a oni si to mohou srovnat s tímto datem. Museli jsme tedy přidat trochu vysvětlovací logiky, což je síla té zkušenosti z hlídače shopů, kdy to know-how prostě máme. My jsme nedostali zadání od Evropské unie „počítejte to takhle“. Naopak jsme přišli za Evropskou unií a řekli jsme jí, že z naší zkušenosti víme, že existuje sedm modelů, jak vzniká non-compliance, a my tam tedy to napočítávání a vyhodnocování takto zadáme. A oni souhlasili.

Mě ještě zajímá, jaký je pocit mít instituce a úřady jako zákazníky. Předtím jste měli open source nadšenecké řešení, dělali jste to vlastně ne pro sebe, ale pro lidi, kteří vytvářeli komunitu v Čechách, a najednou došlo ke switchi – dodáváte to pro úřady různých zahraničních států.

Co se týče samotného projektu, je to velké zadostiučinění, protože to potvrzuje, že to, co jsme dělali, je validní a důležité, protože to kultivuje trh e-shopů. Ale myslím si, že dodávat řešení pro Evropskou unii je jenom pro silné povahy. My vlastně máme kontrakty na dvě strany – máme agenturu, které přímo dodáváme řešení a která zprostředkovává kontakt na koncové uživatele, a pak další agenturu, přes kterou jde veškerá smluvní a fakturační agenda. Evidentně se tyto dvě agentury moc nemusí, což nepomáhá rychlosti řešení a plynulosti procesu.

Jenom pro ilustraci – měli jsme proof of concept (POC) během Black Friday 2022, smlouva skončila ke konci roku 2022 a pak se půl roku řešila nová smlouva. Ačkoli uživatelé byli nadšeni a chtěli to používat, my jsme jim dovolili to používat z naší dobré vůle, ale reálná a podepsaná smlouva a spolupráce začaly až od července.

Co to znamená pro tebe? Jirka tě nazval elevem v začátcích hlídače – člověk, který musel dělat těžkou manuální práci, protože ji nechtěl dělat nikdo jiný. Hlavně Marta sama říkala, že byla ráda, že si vybrala neziskovou aktivitu, kde nemá velkou odpovědnost, a kde na konci kontrolovala tisíc výrobků. No, o pár měsíců později…

Přesně tak, kontroluje veškeré e-shopy v celé Evropě. Jaká je tedy teď tvoje role na tomto projektu?

Můj oficiální titul je „data quality“, což znamená, že ručím za to, že ať už AI scraper nebo následná custom řešení vrací správná data. Celá evaluace je totiž validní jen tehdy, když běží na správných datech. V POC fázi jsem to kontrolovala já tím, že jsem porovnávala uložená čísla a hodnoty se screenshoty. Nyní máme čtyři anotátorky a systém monitoringu, který hlídá, zda dojde k nějaké změně, například začala či skončila sleva, a pokud ano, systém vyhodí upozornění, aby někdo ověřil, jestli jde o reálnou změnu, a ne jen o nějakou změnu na stránce, kterou AI nesprávně vyhodnotila. Human in the loop, přesně tak.

Já se posunula více k rozvoji produktu. Díky tomu, že jsem dělala na Hlídači a dobře vím, jak na ta data koukat, co potřebuji vidět a najít, tak stejným způsobem přistupuji i k tomuto projektu a vlastně definuji aplikaci – co uživatelé potřebují vidět, jak jim to zobrazíme, co jim přidáme.

Jak jsem zmiňovala, zadání bylo velmi vágní a nakonec jsme to celé vydefinovali sami. Říkali jsme si, že půjdeme agilním přístupem, zkusíme to, ale nefungovalo to, takže máme sice systém sprintů, ale přicházíme s funkcemi, které jim doporučujeme v daném sprintu implementovat. Podkládáme to argumenty a ukazujeme, co to řeší.

Zajímavé je, že my, dodávající Evropské unii, nejsme v přímém kontaktu s uživateli, což je limitující. Komunikace je jen jednosměrná, přes issues, které od uživatelů dostaneme, když něco nefunguje. Dohodli jsme se proto s Evropskou unií, že abychom mohli dobře prezentovat aplikaci a produkt uživatelům, začali jsme pořádat workshopy pro uživatele, které zajišťujeme my. A tam jsme se poprvé setkali s uživateli face to face, respektive online, ale přímý kontakt to je. Tam jsme slyšeli zpětnou vazbu a mohli vysvětlit, proč je vše tak navrženo, co jim to přináší, jak si třeba exportují historii screenshotů dat, nebo jak oslovit daný obchod.

Máte nějaké logy, takzvaně. Nebo i tam je zeď, že nevidíte, jak uživatelé aplikaci používají, co v ní dělají, a nemáte feedback od produktu jako takového?

Máme logy pouze na technickou část, tedy na scraping, aby vše běželo. Další logy máme na vyhodnocování cen, ale uživatelské chování nehodnotíme. To dostáváme jako zpětnou vazbu na workshopech. Je to úsměvné, protože je podle mě důležité být v produktu ponořený. Když jsem začínala, sama jsem upravovala ceny a věděla jsem, co mě otravuje. Věděla jsem, že není dobré, když se musím vracet zpět, abych něco mohla udělat.

Vždy, když jsme přišli s návrhy vylepšení, byla reakce uživatelů: „Jo, to by nás třeba nenapadlo, ale opravdu nám to ulehčí život.“ Bylo to fajn. Z jejich strany jsme také zkoušeli zjistit, jaký to má reálný dopad. Vidíme, že scrapeujeme, a asi 70 % shopů je compliant, ale zatím nevíme, jaké kroky uživatelé podnikají. Jestli jen kontrolují shopy a vyzývají k nápravě.

Úplně nám vyrazil dech uživatel z Řecka, který nám řekl, že když jsme vyzvali k sdílení zkušeností, oni spustili kampaně na zhruba 50 e-shopů, naskrappovali je a uložili pokuty za 2,5 milionu eur. Žádný obchod to nerozporoval, a věřím, že si slevy dali do pořádku. To se říká pevná ruka.

Chci Martě poděkovat, že se to platí z veřejných peněz.

Ano, ale to šlo na řecké veřejné peníze, které máme rádi také.

Napsal jsem si ještě jednu věc, kterou jsi několikrát zmínila – AI scraper, že tam byla nějaká inovace. Můžeš nám popsat rozdíl mezi klasickým Apify aktorem a právě AI scraperem? Jak to funguje a co vlastně udržuješ? Co je to vlastně AI v AI scraperu?

Já to neupravuji, jen dám impulzy, co nefunguje dobře a co by se mělo vyřešit. Zásadní rozdíl je v obecnosti. Běžný aktor či scraper je konkrétní pro konkrétní web – může mít přesně definované, co je cena, kterou ukládá, co ignoruje, a všechny ostatní ceny ignoruje. Má velmi přesnou kontrolu nad tím, co vrací, a dokud se nezmění struktura stránky, není potřeba zásahu. Jinak jsou nutné úpravy selektorů.

Myšlenka AI scraperu je, aby byl obecný – pustíte ho na libovolný e-shop a on dokáže identifikovat správnou cenu hlavního produktu, který je zobrazený. Dokáže identifikovat přeškrtnutou cenu, kterou uloží jako referenční cenu. To umožňuje obecné řešení.

Není samozřejmě stoprocentně úspěšný, máme za sebou mnoho iterací. Daří se nám dosahovat asi 70% úspěšnosti, tedy dokážeme vyřešit 70 % domén bez nutnosti dalších zásahů. V případě, že AI scraper není úspěšný na konkrétní stránce, nasazuje se custom solution, kde je třeba použít selektory.

Důvodů, proč je to někdy nutné, je mnoho. Například jsou tam produktové varianty a stránka nemá unikátní URL pro konkrétní variantu – například rtěnky různých barev s různými cenami. Pak máte místo rtěnky červené i růžovou, každá s jinou cenou, což „zasviní“ data.

Nebo je na stránce více produktů, například boty, a dole nabídka bundy nebo kabelky – na stránce je několik cen, což může AI scraper zmást.

Velký problém je i struktura cen. Lidské oko a mozek zpracují stránku jinak než stroje v kódu. Například stránka může hezky zobrazovat cenu s malými desetinnými místy nahoře, což znamená, že v datech je cena rozdělena na celá čísla a desetinná místa. AI scraper se musel naučit toto poznat a správně spojit, aby desetinná část nebyla interpretována jako přeškrtnutá cena.

Mám ještě dva dotazy. Zaprvé, není AI scraper nákladnější, třeba kvůli výpočetnímu výkonu? Myslíš to z pohledu renderování nebo přípravy?

Myslíš běh v produkci? Ano, je to náročnější kvůli výpočetní složitosti. Na druhou stranu vyhodnocujeme data v balíčcích (bundlech), například stránka má deset produktů a AI scraper vyhodnotí celý balíček jednou, pak použije stejnou logiku na všechny položky.

Bylo to nutné, protože není reálné ladit scraper pro každý shop ručně. Třeba při posledním Black Friday nám v první polovině října během tří dnů přibylo 170 shopů, což by znamenalo 170 scraperů – to není možné ručně zvládnout.

Zmínila jsi „zasviněná data“. Jak velký je to problém? Chápu, že je to kontinuální práce, ale kolik času věnujete tomu, aby data byla kvalitní?

Snažíme se to řešit na vstupu. Workflow je takový, že pokud uživatel zadá novou doménu, která ještě není v systému, data jsou označená jako neprošlá kvalitou (neapproved). Anotátorky pak kontrolují aspoň deset příkladů, že data na screenshotu odpovídají uloženým hodnotám.

Mají logiku, jaký typy produktů a kombinace cen vytipovat, aby pokryly obvyklé případy. Pokud je vše v pořádku, doména se schválí (e-proof) a v budoucnu už se nebude kontrolovat, protože inspekce se často vrací ke stejným shopům a produktům.

Je to ale nekonečná kontrola, velmi složitá. Abychom omezili ruční práci, protože zpočátku jsme nesrovnalosti ručně opravovali – například pokud bylo ve výsledku uloženo 50, ale správně mělo být 100, někdo to ručně přepisoval. To sice chvíli jde, ale není to udržitelné.

Nyní nám velmi pomáhá, že máme uložené zdrojové kódy stránek (snapshoty). Když opravíme scraper či řešení, můžeme data znova extrahovat zpětně i z historických snapshotů, tím opravíme datovou historii. Co dříve bylo velmi manuálně a časově náročné, nyní zvládneme jedním klikem, což je funkčně lepší a škálovatelnější.

Zmínila jsi varianty produktů, například červená rtěnka. Díky spolupráci s Heurekou vím, že párování a matching produktů je obrovská věda a téměř neřešitelný problém.

Jaký je tvůj pocit z e-commerce světa z hlediska kvality dat a datové kultury v Evropě a v Česku? Máš nějaké naučené lekce, které bys mohla sdílet s posluchači z e-commerce?

Poradila bych, aby nešpekulovali a přijali pravidla tak, jak jsou. Pokud chtějí dělat slevovou akci, ať ji postaví na skutečném produktu, kde opravdu sleva je.

Zákazníci jsou už poučenější. Sice tu jsou absurdní řešení, kdy se uvede minimální cena podle pravidel EU za posledních 30 dní, zároveň ale i několik přeškrtnutých cen najednou, a zákazník vidí, že to, co je uváděno jako sleva 50 %, ve skutečnosti před 14 dny stálo o 200 Kč méně.

Je to o kultivaci prostředí. Zákazníci jsou informovanější a poučenější než dříve. Dříve bylo složité vysvětlit, co je reálná sleva, teď obecná informovanost roste, takže je potřeba pracovat se správnými daty.

Martino, co nás čeká v budoucnu s Pricemonitoringem? Co bude hlídat verze 3.0? Kam se bude odvětví a projekt vyvíjet?

Počítáme s dalším vývojem, protože existuje stále mnoho situací, které aktuální řešení neřeší. Mluvím například o vylepšování AI scraperu – například by měl umět lépe rozpoznávat více přeškrtnutých cen, aby poznal relevantní, kterou má uložit.

Kvalita dat často klesá na výjimkách ze směrnice, například klubové nebo členské ceny nejsou upraveny směrnicí, a my je tedy v scraperu musíme ignorovat. To znamená, že jejich cenu neinterpretujeme jako slevu, ale bereme ji jako plnou cenu, aby historie cen a vyhodnocení byly správné.

To jsou limity, které momentálně vyžadují custom řešení a ruční zásahy, ale chceme to vyřešit.

Co se týče schopností projektu, teď plánujeme další velký krok vyřešit…

[Text v originále zde končí.]

Marketplaces, protože u marketplace máte jeden produkt a několik prodejců, což v tuto chvíli vlastně znamená opět zašpiněná data, protože nemůžete srovnávat ceny prodejce A a ceny prodejce B. Takže dalším krokem řešení je, abychom tohle uměli odlišit a interpretovat odlišně. Stále tam tedy jsou další kroky, jak – ať už v té aplikaci, nebo ve vyhodnocování – vlastně posouvat věci dál.

Mně se líbí, jak marketplaces představují další úroveň komplexity. Sleduji Hlídáče dlouhou dobu a je vidět, že i ty velmi compliant e-shopy nebo firmy, které najednou uzavřou marketplace, ztrácejí kontrolu nad tím, co vlastně nabízí a jakou formou se tam slevy vyskytují. A najednou se tam začnou objevovat věci, které se oni už naučili nedělat, ale jejich prodejci a dodavatelé to stále zkouší, protože nejsou tak zkušení. To je pro mě zajímavé.

Co ty jako profesionál s tříletou zkušeností v datech přikládáš?

Že se nevrátíš do cestovky? Určitě ne.

Jak se na to celé díváš, když teď takto rekapitulujeme tvůj career switch, tvou kariéru v datech? Co bude dalšího pro tebe samotnou? Říkala jsi, že ses vrátila zpátky k produktu, k něčemu – jak vnímáš svou kariéru a ten další vývoj?

Musím říct, že si myslím, že moje datová cesta byla trošku nestandardní, ať už typem projektů, nebo mou pozicí na projektu. Mezitím v Epify vznikl datový tým, který tam při mém nástupu ještě nebyl, a já jsem jeho hrdým členem. Věnuji se produktovým datům – teď to mám rozděléné půl na půl, půl na evropském projektu, půl na produktových datech. A musím říct, že je to kombinace, která je zábavná. Když pořád děláte ty samé data, je to úmorné – pořád se vás ptají na podobné věci, pořád to nefunguje, je to vyčerpávající. A když k tomu máte něco jiného, co k těm datům patří, ale je to úplně jiný přístup, úplně jiný pohled, tak je to velmi osvěžující. To je nastavení, které bych chtěla zachovat, mít to takto nakombinované.

Mě na tom moc fascinuje tvoje cesta. Na začátku nahrávání jsme uvedli tvou epickou cestu z cestovky do dat. Myslím, že je zřejmé všem, že to rozhodně nekončí a že to nebude kruh, kdy se vrátíš zpátky do cestovky.

Ale zajímá mě tvůj přechod – zkušenost dvaceti let vedení cestovní kanceláře a teď práce na datovém produktu. Je něco, co denně nebo každý týden využíváš? Něco, co ti Martina, vedoucí cestovní kanceláře, radí v tvé současné práci?

Asi je v pozadí nějaké nastavení vůči klientovi. Cestovní kancelář přece poskytuje službu, a všechno se točí kolem spokojenosti klienta, kolem nacítění jeho potřeb a očekávání. To stejné používám v datech. Ať už na evropském projektu, kde jsme museli nacítit potřeby a očekávání uživatelů, se kterými jsme nebyli v přímém kontaktu, ale zprostředkovaně. Vidím to i v práci datového analytika. Není to jen o výrobě nějakého grafu a čísla, ale také o pochopení potřeb uživatele toho grafu a čísla.

Líbí se mi, a hosté v Datatolku to potvrzují, že čím seniornější datový profesionál je, tím méně řeší samotný kód a tím víc se zaměřuje na to, k čemu data budou sloužit, na produkt a uživatele. Tím je lepším člověkem.

Přesně, čím seniornější datový profesionál, tím lepší člověk.

Martino, moc děkujeme, že jsi s námi sdílela tento příběh. Podle mě je to velmi důležité, zvlášť když znám spoustu mladých lidí, kteří vystudovali vysokou školu a teď se bojí dělat něco jiného, než co studovali. Zmínila bych také starší lidi – mně bylo přes čtyřicet, když jsem do toho šla, tedy také. Když vás to láká, nebojte se udělat ten krok a jděte do toho, stojí to za to.

Stoprocentně! Děkuji, že to říkáš, protože právě to jsme tady chtěli městu a světu předat, a myslím, že jsme si nemohli vybrat lepšího věrozvěsta než tebe.

Díky moc.

Moc rádi, děkujeme.

Já vám děkuji.

A to je všechno. Děkujeme, že jste doposlouchali další díl Data Talku. Děkujeme také našim partnerům Big Hub, Vypnout, Manta, Natin, Atakama, Jean Bim, Seznam CZ a Muse. Máte-li zájem o více informací ze světa datových technologií a československé datové scény, navštivte naše stránky datatalk.cz. Nechť vás provází data.

Odebírejte Data Talk

Apple Podcasts Spotify Deezer Overcast Podcast Index RSS Feed