MASARYKOVA U N I V E R Z I T A FAKULTA INFORMATIKY Dynamické oceňování produktů Diplomová práce KAROLÍNA KOLOUCHOVÁ Brno, jaro 2023 MASARYKOVA U N I V E R Z I T A FAKULTA INFORMATIKY Dynamické oceňování produktů Diplomová práce KAROLÍNA KOLOUCHOVÁ Vedoucí práce: doc. RNDr. Vojtěch Řehák, Ph.D. Katedra teorie programování Brno, jaro 2023 Prohlášení Prohlašuji, že tato diplomová práce je mým původním autorským dílem, které jsem vypracovala samostatně. Všechny zdroje, prameny a literaturu, které jsem při vypracování používala nebo z nich čerpala, v práci řádně cituji s uvedením úplného odkazu na příslušný zdroj. Karolína Kolouchová Vedoucí práce: doc. RNDr. Vojtěch Řehák, Ph.D. iii Poděkování Děkuji vedoucímu práce doc. RNDr. Vojtěchu Řehákovi, Ph.D. za trpělivost a také pomoc s písemnou částí práce. Dále děkuji Ing. Janu Stejskalovi za konzultace k implementaci a firmě KOBOZ SERVICE s.r.o. za projevenou důvěru a poskytnutou příležitost automatizovat cenotvorbu v jejich e-shopech. iv Shrnutí Tato práce se zabývá automatizací cenotvorby pro firmu KOBOZ SERVICE s.r.o. pomocí vhodného nástroje pro dynamické oceňování. Výsledkem je výběr nástroje PriceKit a jeho integrace do systému firmy. Následně bylo též provedeno testování strategií oceňování poskytovaných nástrojem PriceKit. Klíčová slova Dynamické oceňování, dynamická cenotvorba, dynamic pricing, Pri­ ceKit v Obsah Úvod 1 1 Dynamické oceňování 2 2 Firma a její požadavky 4 3 Porovnání nástrojů 5 3.1 Price2Spy 6 3.2 Pricemonitor 7 3.3 Sniffie 7 3.4 Disivo 8 3.5 Prisync 8 3.6 PriceShape 10 3.7 PriceKit 12 3.8 Rozhodnutí 14 4 Implementace 15 4.1 Struktura systému 15 4.1.1 Produkty 15 4.1.2 Ceníky 17 4.2 Úpravy systému 18 4.3 Propojení PriceKit 21 4.3.1 Import produktů 21 4.3.2 Update produktů 22 4.3.3 Deaktivace produktu 22 4.3.4 Reaktivace produktu 22 4.3.5 Změna URL konkurence 23 4.3.6 Získání návrhu ceny 23 4.3.7 Integrace tlačítka webového rozhraní 24 5 Testování strategií 25 5.1 Průběh testování a testované strategie 25 5.2 Vyhodnocení 26 6 Závěr 31 vi Bibliografie 33 A Appendix - podrobné výsledky testování 35 vii Seznam tabulek 5.1 Součty hodnot porovnávaných kritérií pro jednotlivé strategie 29 A . l Výsledky testovaných produktů při testované strategii Nejlevnější, v horní části doména nazuby.cz a ve spodní holime.cz 36 A.2 Výsledky testovaných produktů při testované strategii Nejlepší možná pozice, v horní části doména nazuby.cz a ve spodní holime.cz 37 A.3 Výsledky testovaných produktů při testované strategii 2- 3. pozice, v horní části doména nazuby.cz a ve spodní holime.cz 38 A.4 Výsledky testovaných produktů při testované strategii Průměrná cena, v horní části doména nazuby.cz a ve spodní holime.cz 39 A.5 Výsledky testovaných produktů při manuálním nastavování cen před testováním, v horní části doména nazuby.cz a ve spodní holime.cz 40 viii Seznam obrázků 3.1 Část formuláře pro nastavení jednoduchého pravidla oceňování v nástroji Prisync [21] 10 3.2 Část formuláře pro nastavení cenové strategie v nástroji PriceShape [22] 11 3.3 Výběr strategie pro výpočet ceny v nástroji PriceKit [23] . 13 4.1 Class diagram části systému 16 4.2 Diagram možných změn atributu pricekitStatus 19 4.3 Sekvenční diagram změny cen podle externího zdroje . . 20 5.1 Porovnání strategií podle prodaných kusů, v procentech vztažených ke strategii Nejlevnější 27 5.2 Porovnání strategií podle podílu počtu prodaných kusů . 27 5.3 Porovnání strategií podle zisku, v procentech vztažených ke strategii Nejlevnější 28 ix Úvod V současné době, kdy stále více lidí nakupuje na internetu a existují nejrůznější vyhledávače zboží a porovnávače cen, je pro nakupující snadné porovnávat ceny v mnoha obchodech. Pro obchodníky je tedy důležité, aby jejich ceny byly konkurenceschopné v porovnání s ostatními prodejci [1]. Pokud ochodníkova nabídka zahrnuje tisíce produktů, je téměř nemožné spravovat všechny ceny manuálně a s dostatečnou pravidelností kontrolovat konkurenci. Zejména když se ceny na internetových obchodech mění i několikrát denně. Z tohoto důvodu začíná stále více obchodů používat nástroje k automatizaci oceňování produktů, tedy k tzv dynamickému oceňování či cenotvorbě [2]. Firmou, která má zájem o automatizaci cenotvorby je také KOBOZ SERVICE s.r.o. Tato firma provozuje několik e-shopů v České republice, Německu a na Slovensku. Na každém z těchto e-shopů nabízí kolem 2-3 tisíc produktů. Cílem této práce je vybrat vhodný nástroj na dynamické oceňování dle požadavků firmy a následně jej integrovat do jejich systému. Součástí je také otestování a zhodnocení různých možností nastavení pro výpočet cen ve vybraném nástroji. V této práci nejprve přibližuji téma dynamického oceňování a jeho různé podoby. Následně podrobněji popisuji firmu KOBOZ SERVICE s.r.o. a její požadavky na nástroj k dynamickému oceňování. Dále pak porovnávám sedm vybraných z dostupných nástrojů dle požadavků firmy a také zmiňuji některé vyřazené nástroje a důvody pro jejich vyřazení. V další části nejprve popisuji relevantní části systému firmy a poté popisuji implementaci propojení systému s vybraným nástrojem. V poslední části pak popisuji testování dostupných strategií pro výpočet ceny ve vybraném nástroji a jejich dopady na prodejnost produktů. 1 1 Dynamické oceňování Dynamické oceňování produktů (také dynamická cenotvorba, anglicky dynamic pricing) se zabývá nalezením optimálních cen produktů a služeb. Podniky ho využívají za účelem zvýšení zisků či prodeje. Často se používá v odvětvích jako je pohostinství (např. ceny ubytování a jejich rozdíly v sezoně a mimo sezónu), doprava (ceny letenek i dalších jízdenek) a maloobchod (zejména internetové obchody) [3]. Podniky se snaží optimalizovat ceny v závislosti na současných podmínkách na trhu. Mohou při vytváření cen zohlednit ceny u konkurence, nabídku a poptávku i další okolnosti. Mohou tedy například zvolit vždy nejnižší cenu, o X % nižší nebo vyšší cenu než má konkrétní konkurent, či zdražit, pokud zboží není jinde k dispozici [4]. Tématem dynamické cenotvorby se zabývají nejrůznější odvětví, od managementu a marketingu, přes ekonomii až po informatiku. Dynamické oceňování je obzvlášť vhodné při prodávání na Internetu, kde si zákazníci mohou jednoduše porovnat ceny od různých prodejců a nakoupit tam, kde je to nejvýhodnější. Zároveň je zde změna ceny relativně snadná v porovnání s nutností vyměnit cenovky na prodejně nebo vytisknout nové katalogy. V digitálním prostředí je navíc snadnější získávat data o prodejnosti a chování zákazníků [4]. Dynamické oceňování lze rozdělit do dvou kategorií - mechanismus zveřejněné ceny (posted price mechanism) a mechanismus zjišťování ceny (price discovery mechanism). V první kategorii je produkt či služba prodávána za prodejcem určenou cenu, kterou může zákazník buďto přijmout a produkt koupit, nebo nepřijmout. Tyto zveřejněné ceny mohou být dynamické a prodejce je může měnit v čase v závislosti na prodejnosti, poptávce atd. Při mechanismu zjišťování ceny jsou ceny určované pomocí přihazování, např. formou aukce [1]. Vzhledem k cíli práce, která hledá vhodný nástroj dynamického oceňování pro e-shopy, se zde dále budu zabývat pouze první ze zmíněných kategorií, tedy mechanismu zveřejněné ceny. Většina nástrojů pro cenotvorbu používá jeden nebo kombinaci obou ze dvou možných přístupů. První z nich a pravděpodobně nejčastější je založen na sledování konkurence (tzv. competition-based pricing), kde se pravidelně monitorují ceny a dostupnost produktů u konkurenčních obchodů a na základě získaných dat je pak vypočí- 2 i . DYNAMICKÉ OCEŇOVÁNÍ tána „optimální" cena produktu. Optimálnost je zde obvykle stanovena zvolenou strategií, která určuje podmínky pro výpočet ceny. Jednou z možných strategií je například strategie nejlevnější ceny, kde je referenční cenou pro výpočet optimální taková, která je nižší než u všech konkurentů. Další možností je například zvolit jednoho zásadního konkurenta a jako referenční cenu použít tu jeho. Také je možné jako referenční použít průměrnou cenu ze všech nabídek. Tím se sice pravděpodobně sníží počet prodaných kusů, ale z každého kusu bude vyšší zisk, což může být ve výsledku výhodnější. Dále se u strategií určí vztah optimální ceny k referenční (tj. o kolik procent se má lišit) a jak má být nastavena cena, pokud nejsou konkurenti nebo nemají zboží skladem. Také je vhodné určit minimální povolenou cenu, aby se například neprodávalo za nižší cenu než byla pořizovací. Na základě takovýchto nastavených pravidel a získaných dat o konkurenci je pak vypočítávána optimální cena. Výhodou přístupu založeného na konkurenci je, že bere v potaz současnou situaci na trhu a může tak reagovat na náhlé změny v cenách. Nevýhodou naopak je, že nebere ohled na aspekty související s poptávkou (např. cenovou elasticitu) a může tak zbytečně prodávat za nízkou cenu ačkoliv by vyšší byla výhodnější [5]. Druhým přístupem je pak optimalizace na základě poptávky, kdy se různými způsoby snaží odhadnout poptávkovou křivku, tj. za jakou cenu se bude produkt jak prodávat. Používají se k tomu zejména data o prodejnosti, tedy např. kolik lidí si produkt koupilo za jakou cenu, případně počet zobrazení produktu atd. Na základě poptávkové křivky je pak možné porovnávat, jestli je výhodnější prodat více kusů s nižší marží, nebo méně kusů s vyšší marží, odhadovat, jak se bude produkt prodávat za konkrétní cenu atd. Optimální cena je vypočtena z těchto dat tak, aby byl maximalizován celkový zisk z produktu. Zkoumané nástroje, které tento přístup využívaly, k nalezení optimální ceny používali například metody založené na strojovém učení (nástroj Sniffie [6]) čibayesovské statistice (Disivo [7]). Přehled těchto a dalších metod lze najít v „Dynamic pricing models for electronic business" [1] a „Dynamic pricing and learning: historical origins, current research, and new directions" [3]. 3 2 Firma a její požadavky Firma KOBOZ SERVICE s.r.o. je menší firma, která provozuje e-shopy se sortimentem pro ústní hygienu a holicími potřebami. E-shop pro ústní hygienu provozuje v České republice, Německu a na Slovensku, ten s holicími potřebami pak v České republice a na Slovensku. V sortimentu mají tisíce produktů, kterým je potřeba kontrolovat a nastavovat cenu pro každou zemi. Cenu je nutné pravidelně kontrolovat a upravovat, aby byla v rámci ostatních prodejců konkurenceschopná, ale také, aby z prodeje vznikl dostatečný zisk. Při takovém množství produktů není možné u všech manuálně kontrolovat ceny příliš často. Proto ceny sledují zejména u dražších produktů a to přibližně jednou týdně. U ostatních se ceny nastavují dle nákupní ceny přidáním stanovené marže. Vzhledem k tomu, že v prostředí internetových obchodů se ceny mohou měnit i několikrát denně, tímto přístupem ztrácejí mnoho příležitostí. Z tohoto důvodu se rozhodli vyzkoušet dynamické oceňování produktů. Jejich požadavky na použitý nástroj zahrnovaly pravidelné sledování cen a skladovosti produktů u konkurence, důležitá byla schopnost sledovat buďto různé e-shopy nebo sledovat srovnávače zboží, jako je například Heuréka v Česku a na Slovensku nebo Idealo v Německu. Dalším požadavkem byla možnost výběru strategie výpočtu ceny a možnost propojení s vlastním e-shopovým systémem pro automatické získávání případně i nastavování navržených cen. Důležitým kritériem při výběru nástroje byla také cena. Pro implementaci propojení systému s nástrojem bylo požadováno zachovat možnost ručního nastavování ceny nebo synchronizace ceny z účetního systému, dále umožnit automatický import a aktualizaci produktu v nástroji. Také požadovali možnost určení minimální ceny produktu, pod kterou by se cena automaticky nenastavovala. 4 3 Porovnání nástrojů Všechny porovnávané nástroje jsou placené software as a service nástroje s webovým rozhraním a různými možnostmi integrace. Snažila jsem se také najít nějaké opensource alternativy, to se mi ale nepoda­ řilo. Při hledání nejvhodnějšího nástroje pro potřeby firmy jsem nejprve vyhledala dostupné nástroje. Z nalezených nástrojů jsem vyřadila ty, které jsou zaměřeny na jiné odvětví, než kterým se firma zabývá (např. RateTiger [8], který je zaměřený na nabídky ubytování) nebo nástroje, které jsou určeny k řízení cen na velkých online tržištích jako Amazon nebo eBay (např. Repricer nebo Sellermania [9,10]). U dalších nástrojů se ukázalo, že pouze monitorují ceny u konkurence (např. PriceManager, Skuuudle [11,12]). Další nástroje zase neposkytují možnost sledování konkurence. Data o konkurenci je buď nutné jim poskytnout (PGP [13]), jsou schopné je získávat pouze ze stránek jako Google Shoppping, Walmart, Amazon či eBay (SellerActive [14]), nebo s nimi nepracují vůbec (Open Pricer [15], Increff Markdown Optimization [16]). Tyto nástroje byly také vyřazeny. Dále jsem po konzultacích se zástupci firem narazila na nástroje, které se specializují na spolupráci s většími podniky, s vysokými ročními obraty. Mezi ně patřil nástroj PricingHUB [17], který podle zástupce, se kterým jsem komunikovala, obvykle spolupracuje s podniky s obratem od 20 milionů eur a z České republiky prý spolupracovali například s rohlik.cz. Dalším takovým nástrojem byl Competera [18], který údajně přináší nejlepší výsledky pro podniky s obratem přes 100 milionů dolarů a desítkami až stovkami tisíci produkty. Tyto už jsem také dále neuvažovala. Kritéria, na která jsem se zaměřila v dalším výběru, byla především možnosti propojení nástroje a sledování konkurence. Ohledně propojení mě zejména zajímalo, zda poskytují možnost propojení nástroje s vlastním e-shopovým systémem přes API (případně jiným způsobem, který není závislý na některém z častých e-shopových systémů, jako Magento, Shoptet apod.). Co se týče sledování konkurence, zjišťovala jsem zda dokáží sledovat jednotlivé e-shopy, nebo používají pouze nějaké srovnávače zboží. U sledování samostatných konkurentů jsem pak chtěla vědět, jestli je 5 3- POROVNÁNÍ NÁSTROJŮ jim třeba poskytnout seznam konkurentů, případně i adresy produktů u nich. U srovnávačů mě zajímalo, které mohou sledovat. V dalších sekcích popisuji sedm vybraných nástrojů s ohledem na výše zmíněná kritéria. Z těchto sedmi nástrojů byly dále vybrány tři Prisync, PriceShape a PriceKit, u kterých jsem založila zkušební účet a vyzkoušela možnosti tvorby cenových strategií. U těchto vybraných nástrojů pak popisuji i tvorby strategií a úspěšnost při sledování cen. 3.1 Price2Spy Price2Spy [19] je nástroj pro sledování, analýzu a změnu cen, spuštěný v roce 2011. Umožňuje sledování konkurence pomocí srovnávačů i monitorováním samostatných e-shopů. Pro sledování cen je třeba pro každý produkt poskytnout url, které se mají monitorovat. Mezi stránkami, které dokážou monitorovat je i Heuréka. Kontrolu cen provádí až osmkrát denně. Mimo monitorování cen také nabízí možnost upozornění na změnu ceny u konkurence či možnost přecenění produktu e-mailem. Tento nástroj umožňuje propojení přes API pro zákazníky s prémiovými nebo enterprise účty. Přes API ale není možné získat navrhované ceny produktů. Pro automatické nastavování cen je nutné použít přímé nebo nepřímé přeceňování (direct/indirect repricing), které je za příplatek 100, resp. 50 dolarů měsíčně. Při nepřímém přeceňování Price2Spy pravidelně připravuje CSV soubor s produkty k přecenění a jejich novými cenami a nahraje ho na zadané FTP umístění nebo ho odešle na zadaný e-mail. Přímé přeceňování buď probíhá přes integraci s velkými e-shopovými systémy Magento, Shopify, Woo Commerce, Big Commerce, 3DCart a Shopware, nebo data potřebná pro přecenění odešlou e-shopu přes web hook. Ceny pro prémiové účty s přístupem k API začínají na 338 dolarech měsíčně, při kterých je možné monitorovat maximálně 2000 produktových url. Tedy pokud by se sledovala pouze Heuréka, bylo by možné monitorovat až 2000 produktů. Více produktových url (až 10000, či 50000) pak vyjde na 675, resp. 1350 dolarů za měsíc. 6 3- POROVNÁNÍ NÁSTROJŮ 3.2 Pricemonitor Pricemonitor [20] umožňuje sledování nejrůznějších a mezinárodních srovnávačů a tržišť, mezi nejpopulárnější patří Amazon, Google Shopping, Idealo a eBay. Po domluvě mohou napojit i další portály, případně i samostatné e-shopy. Běžně je sledován jen jeden portál, ale je možné přidat další portály, každý za 20% příplatek. Sledování cen typicky provádí jednou denně, ale za příplatek je možné vybrat produkty, které se budou monitorovat častěji. E-shopové systémy jako Shopware, JTL, Magento atd. mohou být na Pricemonitor napojeny pomocí pluginů. Dále Pricemonitor nabízí také API připojení nebo synchronizaci pomocí CSV feedů. Pro výpočet ceny je možné nastavit různé filtry, aby se některé konkurenční nabídky ve výpočtu nezohledňovaly. Jako strategii výpočtu je možné na kolikáté pozici v nabídce chcete být, případně o kolik dražší či levnější chcete být v porovnání s nabídkou na určené pozici. Dále je možné určit, jestli se do výpočtu mají zahrnovat také ceny dopravy. V základních cenových balíkách cena začíná na 179 eurech měsíčně pro maximálně 150 produktů a končí na 899 eurech pro až 10000 produktů. 3.3 Sniffie Sniffie [6] umožňuje sledovat každého konkurenta samostatně, k čemuž potřebují seznam konkurentů, nebo nabízejí novou možnost monitorování trhu (ať už lokálního nebo mezinárodního). Při monitorování trhu nepotřebují předem znát konkurenty. Podporuje integraci se systémy jako Shopify a Magento a také s Google Shopping, kde po změně ceny produktu může ihned upravit i cenu nabízenou na Google Shopping. Dále je možné se domluvit na integraci jiných systémů. Pro výpočet cen je možné si vybrat různé strategie v závislosti na celkové situaci na trhu nebo jen konkrétních konkurentech. Sniffie dokáže optimalizovat cenu v závislosti na prodejních datech pomocí strojového učení a upravovat postupně cenu, pokud je třeba některý produkt vyprodat do určitého data, např. kvůli blížícímu se datu 7 3- POROVNÁNÍ NÁSTROJŮ spotřeby (tzv. markdown). Nabízí i možnost nastavení minimální marže. Ceny začínají na 389 eurech měsíčně, kdy je možné sledovat maximálně 1000 produktů a jsou k dispozici základní oceňovací moduly. Od 978 eur měsíčně již jsou k dispozici všechny oceňovací moduly a také možnost sledování celého trhu pro až 3600 produktů. 3.4 Disivo Disivo [7] je jako jediný ze zkoumaných nástrojů český. Umožňuje sledování cen konkurence a to Heureku (se kterou spolupracuje) nebo přímo zvolené e-shopy. Základní propojení s nástrojem je možné přes produktový feed a data z Google Analytics a datové exporty. Je možné přidat i další datové vstupy např. nahrát ceny konkurence z vlastního zdroje namísto sledování konkurence pomocí Disivo. Pro výpočet ceny mají různé možnosti - výpočet řízený náklady, kde se dle zvolených cenových pásem určuje cena dle požadované marže, založený na sledování cen konkurence, nebo na kombinaci odbytu a skladovosti. Dále nabízí model pro plně automatickou optimalizaci, kde hledá optimální cenu pro maximální zisk na základě elasticity poptávky a bayesovské statistice. V nabídce je Disivo automate pro e-shopy s obratem do 12 milionů Kč ročně, kde není k dispozici model pro plně automatickou optimalizaci, za 20000 Kč měsíčně. Pro větší e-shopy pak nabízí Disivo optimize, kde je i model pro automatickou optimalizaci a možné vlastní typy dat, neuvádí k tomu však cenu. K oběma variantám nabízí také monitoring konkurence s cenou od 0,76 Kč za produkt. Po poptání nám byla navržena cena 50000 Kč měsíčně pro jednu doménu - tj. za monitoring a výpočet ceny pro 2-3 tisíce produktů. 3.5 Prisync Prisync [21] umožňuje výběr mezi monitorováním založeným na sledováním url konkrétních konkurentů, kde je nutné poskytnout pro každý produkt konkurenty a jejich url produktu, a monitorováním založeným na sledování online tržiště, kde nabízejí sledování Google 8 3- POROVNÁNÍ NÁSTROJŮ Shopping a Amazon, oboje s výběrem země. Není zde tedy možnost sledování Heureky. Při sledování tržiště používají k identifikaci produktů jejich čárové kódy (GTIN, UPC, E A N , ISBN, JAN). Umožňuje integraci s e-shopovými systémy Magento a Shopify a export cen do Google Shopping. Dále umožňuje propojení přes API, ale pouze pro prémium a platinum účty a to za 20% příplatek k měsíčnímu poplatku. Cena za prémium účet s monitorováním cen přes tržiště vyjde na 399 dolarů měsíčně. Tento účet umožňuje monitorovat a přeceňovat pouze 1000 produktů, platinum účet za 599 dolarů pak umožňuje až 5000 produktů. Cenu určuje na základě uživatelem vytvořených pravidel. Těch je možné vytvořit velké množství pro různé segmenty sortimentu. Pravidlo může být jednoduché (single rule mode), nebo některá z variant složeného pravidla (multiple rule mode). V jednoduchém pravidle je možné vybrat (viz obrázek 3.1), zda má být cena nižší, vyšší, nebo rovna nejnižší, nejvyšší, či průměrné ceně konkurence. U vyšší nebo nižší ceny se dá určit o kolik procent nebo korun (resp. jiné měny). Dále se vybere, pro jaké produkty pravidlo platí a může se nastavit také minimální a maximální povolená cena (v závislosti na nákupní ceně produktu). Mohou se také vybrat konkurenti, na které se má při výpočtu brát ohled, nebo naopak vybrat konkurenti, kteří se mají z výpočtu vyřadit. Také je možné nastavit, že pokud vypočtená cena porušuje minimální (resp. maximální) limit, tak bude místo ní použit právě tento limit. V opačném případě dané pravidlo nelze použít. Ještě je možné nastavit, aby navrhované ceny za desetinnou čárkou měly jistá psychologicky přívětivá čísla (např. 49,50, 95, nebo 99). Složená pravidla pak sestávají ze dvou a více jednoduchých pravidel. Jednotlivé varianty se pak liší tím, jak vybírají, které z jednoduchých pravidel se aplikuje. Varianty jsou čtyři, jedna použije pravidlo, podle kterého vychází nejnižší cena, druhá to, podle kterého vychází cena nejvyšší. Další varianta pak vybere pravidlo, podle kterého je cena nejbližší té původní a poslední varianta postupně prochází pravidla a vybere první, které je možné aplikovat. Jedno omezení, které mě překvapilo u složených pravidel, bylo, že všechna jednoduchá pravidla, která jsou součástí jednoho složeného pravidla, musí být aplikována na stejné produkty. 9 3- POROVNÁNÍ NÁSTROJŮ Add New Rule | Single Rule M o d e - S t a n d a r d 1 WOULD LIKE TO BE POSITION LANDSCAPE ® 5,00 CZK higher w than the average w ® 5,00 CZK higher w than the average w include 1 Select competitors - applies to all with no selection O equal to the cheapest APPLYTO AS LONG AS 1 RESPECT MARGIN/MARKUP in Product w Select products - applies to all with no selection Min Level as Cost • + • 5,00 CZK T Max Level as Cost " 1 1 5,00 % T H ^ Force Fallback C If the calculated SmartPrice is below the min limit, Designate the Min Level fortheSmartPrice. • If the calculated SmartPrice is above the max limit, Designate the Max Level for the SmartPrice. A Set Preferences Custom Decimal Always end prices with decimal 95 Obrázek 3.1: Část formuláře pro nastavení jednoduchého pravidla oceňování v nástroji Prisync [21] Co se týče sledování konkurence, bylo zkoušeno monitorování přes český Google Shopping. Prvotní nalezení konkurence probíhá hned po přidání produktu. U některých produktů se podařilo najít kolem 15-20 konkurentů. U jiných ale zase nalezl například jen dva konkurenty, přestože jich na stránce produktu na Google Shopping bylo více než deset. 3.6 PriceShape PriceShape [22] používá na nalezení konkurence online tržiště a zbožové srovnávače a následně scrapuje data přímo z e-shopů jednotlivých konkurentů. Obvykle konkurenci vyhledává na Google Shopping, Amazonu a eBay, ale je možné se domluvit i na jiných portálech včetně Heureky. Nicméně při porovnání použití Google Shopping s Amazonem a Heureky jsou prý nalezené shody z velké části identické. Konkurenci monitorují jednou denně, ale v případě potřeby by se bylo možné domluvit na častějším sledování. Produkty k monitorování se do PriceShape posílají pomocí produktového feedu ve formátu X M L , CSV nebo jako Excelový soubor. Integrace cenotvorby pak probíhá přes API nebo nabízí integrace pro 10 3- POROVNÁNÍ NÁSTROJŮ Obrázek 3.2: Část formuláře pro nastavení cenové strategie v nástroji PriceShape [22] systémy jako Shopify Dále je také možné do nástroje připojit Google Analytics k získávání dat o návštěvnosti, konverzích apod. Ceny na stránkách neuvádějí, ale dle komunikace se zástupcem začínají na 300 eurech měsíčně a závisí na počtu sledovaných produktů a tomu, jestli máme zájem také o "poradce" z jejich týmu a pravidelné konzultace. Cena 300 euro by měla platit pro uživatele s počtem produktů do 2000 bez "poradce" a konzultací, s poradcem a konzultacemi by pak byla kolem 500 euro měsíčně. Je možné vytvářet oddělené strategie pro různé segmenty produktů, například podle značky nebo kategorie. U jednotlivých strategií se dají zvolit konkurenti, které má strategie zohledňovat a zda zohledňovat i ty, kteří nemají produkt skladem. Dále lze nastavit minimální (i maximální) zisk a co se má stát, pokud by vypočtená cena byla pod minimální hranicí. Hlavním nastavením strategie je volba zda cenu založit na doporučené ceně nebo na cenách u konkurence. U konkurenční strategie lze zvolit jako referenční cenu první, druhou nebo třetí nejnižší, dále nejvyšší cenu a pak také medián nebo průměrnou cenu. Dále se pak zvolí, jestli se výsledná cena má rovnat referenční, či o kolik procent nebo korun má být vyšší či nižší. Toto lze vidět na obrázku 3.2. 11 3- POROVNÁNÍ NÁSTROJŮ Dále pak lze nastavit jaká hodnota by měla být za desetinnou čárkou a zda se na ní dostat zaokrouhlením nahoru, dolu či k tomu co je blíž. Dále lze zvolit, co se má stát, pokud je u všech konkurentů produkt vyprodaný, žádné nemá nebo kvůli nastaveným omezením nelze vypočtenou cenu použít. Také lze nastavit časový rozsah od kdy do kdy lze strategii použít. U výběru segmentu produktů, na které se strategie vztahuje mě překvapilo, že pokud se zde nevybere žádná značka, kategorie apod., tak se strategie neaplikuje na žádné produkty. Pro aplikaci na všechny produkty je tedy nutné zaškrtnout všechny značky nebo všechny kategorie, případně v přehledu produktů všem tuto strategii přiřadit. To by ovšem mohlo způsobit problém při přidávání nových produktů. U sledování konkurence se nástroji nepovedlo najít shody pro přibližně 20 % zadaných produktů. Navíc se párkrát stalo, že mezi konkurenty u nějakého produktu byl zobrazen od nějakého konkurenta úplně jiný produkt s cenou i několikanásobně vyšší než u hledaného produktu. To samozřejmě může hodně ovlivnit výslednou cenu. 3.7 PriceKit PriceKit [23] pro každý produkt potřebuje seznam konkurentů, které má monitorovat. To mohou být samostatné e-shopy nebo i např. Heuréka. Url produktu u jednotlivých konkurentů se mu buď přímo poskytne, nebo ji může za poplatek (formou předplacených kreditů) najít sám. Monitorování cen může provádět až třikrát denně. Nabízí propojení se systémy jako Magento, Shoptet, WooCommerce apod., případně také pomocí API. Produkty je možné importovat také z CSV nebo XLS souboru nebo je přidat manuálně. Jsou také možně exporty produktů zasílané na e-mail. Ceny začínají na 35 eurech měsíčně za velmi omezený balíček pro 50 produktů bez API připojení a návrhů cen. Další balíčky již všechny návrhy cen obsahují. API připojení nabízí jen balíček PRO s 1200 produkty za 240 euro měsíčně a balíček na míru, kde je cena domluvena na základě požadavků. Strategii pro výpočet cen je možné nastavit globálně pro celý e-shop a dále pro jednotlivé produkty. Strategie u produktu má přednost, pokud není nastavená, používá se strategie e-shopu. Stejně tak je možné 12 3- POROVNÁNÍ NÁSTROJŮ Acquisition price to m i n i m u m price percent 125 Acquisition price to m a x i m u m price percent 300 Choose a pricing strategy O No strategy for this product O No strategy, does not use the Webshop strategy either O Best available position O I want this product to be the cheapest (1. position) ® I want to set up a position O I want to set up a position compared to one competitor O Average price strategy O Proposal based on m i n i m u m price and given percentage Position range 2.-3. ~*\ Only consider competitors w h o has this product in their store Obrázek 3.3: Výběr strategie pro výpočet ceny v nástroji PriceKit [23] nastavit minimální cenu (jako procenta nákupní ceny) pro celý e-shop i pro každý produkt zvlášť. Na úrovni produktu je navíc možné uvést konkrétní minimální a maximální cenu. Výběr strategie je možné vidět na obrázku 3.3. U strategií je možné si vybrat mezi nejlepší dostupnou pozicí, kde se nástroj snaží nastavit cenu, která je nižší než u největšího možného počtu konkurentů s ohledem na nastavená omezení minimální ceny. Dále je možné vybrat, že má být produkt nejlevnější, či na některé jiné konkrétní pozici. V tomto případě nebude navržena žádná cena, pokud by nesplňovala nastavená omezení. Další možná strategie je počítat cenu na základě jednoho konkrétního konkurenta nebo průměrné ceny od všech konkurentů. U všech strategií lze vybrat, zda započítávat i konkurenty, kteří nemají produkt skladem a zda brát v potaz případné slevy, nebo pouze základní ceny. U strategie s průměrnou cenou je navíc také možné rozhodnout, zda se do průměru započítává i vlastní cena. U monitorování konkurence je pro získání údajů o konkurenci a návrhu ceny po přidání nového produktu třeba počkat do dalšího 13 3- POROVNÁNÍ NÁSTROJŮ času, kdy se aktualizují data. Také po změně strategie se navrhovaná cena ihned nespočítá. Stejně jako u ostatních zkoušených nástrojů nebyli vždy u všech produktů nalezeni všichni konkurenti. 3.8 Rozhodnutí Možnosti nastavení strategií byly u všech zkoušených nástrojů velmi podobné. Zásadnější rozdíl je pouze u PriceKitu, kde je oproti zbylým nástrojům omezená možnost výběru produktů zahrnutých do strategie a není možné nastavit požadovanou hodnotu za destinnou čárkou. Na druhou stranu u PriceShape bylo složitější aplikovat strategii na všechny produkty. Při vyhledávání konkurence měly všechny nástroje nedostatky, které by se ale nejspíš daly s pomocí podpory vyřešit. Stejně tak všechny nástroje nabízejí API připojení. Vzhledem k podobným vlastnostem všech nástrojů jsme nakonec rozhodovali zejména na základě ceny. Vybrali jsme PriceKit, který za podobnou cenu jako má PriceShape nabízí častější monitorování konkurence (třikrát denně u PriceKitu proti jedenkrát denně u Price­ Shape). 14 4 Implementace Firma vyvíjí vlastní systém, na kterém e-shopy běží. Systém má třívrstvou architekturu, je psán v Javě a postaven na frameworku Spring Boot, používá databázi MariaDB. Objekty ukládající data jsou pomocí Java Persistence API a Hibernate mapovány do databáze. Pro dotazy do databáze se používá zejména Hibernate a Querydsl framework. 4.1 Struktura systému Pro lepší pochopení fungování systému a implementace propojení s PriceKitem, nejprve přiblížím strukturu relevantních částí systému. Jedná se zejména o produkty a ceníky. Tato část systému je také vyobrazena formou v diagramu 4.1. Zeleně jsou zobrazeny třídy nově vytvořené během implementace. 4.1.1 Produkty Fyzický produkt je reprezentován třídou Product, na kterou jsou vazbou one-to-many vázaný objekty třídy ProductShop, které reprezentují nabídku produktu na jednotlivých doménách. V Product jsou například uloženy výrobní údaje, váha, hodnocení produktu, nebo se do něj synchronizují skladová data a vážená nákupní cena z účetního sytému. V ProductShop jsou například lokalizovaný název produktu, lokalizovaný popis nebo se u něj nastavuje sazba D P H . Také má vazbu na různé kategorie a na URL detailu produktu na e-shopu. Dále se na ProductShop váže vazbou one-to-many entita ProductExternalLink, ve které jsou uloženy odkazy na produkt v různých kanálech jako Heuréka, Zboží.cz nebo Google Merchant. K ProductExternalLink se vazbou many-to-one váže MerchantChannel, který reprezentuje právě výše zmíněné kanály ProductShop má také parametry whStatus, který nabývá hodnot 0 az 5, a whSubstatus, s možnými hodnotami 0 až 2,v závislosti na hodnotě whStatus. Tyto dvě hodnoty společně odpovídají některé hodnotě enumu EWhState, který reprezentuje stav produktu v závislosti na jeho skladovosti a řídí některé chování produktu, např. možnost vlo- 15 4- IMPLEMENTACE Product - inSale:boolean - name:String - nameInternal:String - mpnCode:String - productCode:String - purchasePrice:BigDecimal - warehouseAvailabilityDate - warehouseOrdered:BigDecimal - warehouseStock:BigDecimal - weight:BigDecimal ProductExternalLink link:String Products hop description:String name:String eanCode:String disabled :Boolean freeDeliveryFlag:Boolean inSale:Boolean intro:String searchPriority:lnteger vatRate:EVatRate whStatus:int whSubStatus:int MerchantChannel - name:String - type:EChannelType - productReviewsUri:String - shopReviewsUrl: String «enumeration» EP rice Kit Stat us NONE TO_ACTIVATE ACTIVE DEACTIVATED TO_DEACTIVATE TO REACTIVATE ProductPriceExtSource • currency:ECurrencyCode • disabled: boo lea n • importEnabled:boolean • internaINote:String • namelntemal:String • withVat:boolean «enumeration» EPriceExtSourceType POHODA PRICEKIT ProductPrice discount:BigDecimal discountFixed:boolean priceChanged :LocalDateTime sellingPrice:BigDecimal sellingPriceBasic:BigDecimal sellingPriceWithVat:BigDecimal • sync:EPriceSyncType syncFixed:boolean • vatPercentage:BigDecimal ((enumeration)) EPriceSyncType NONE PRICELIST EXTERNAL - discount:BigDecimal takes price from belongs to * ~T,0..1 PriceLevel cancelTime:LocalDateTime intemaINote:String minPriceToFreeDelivery:BigDecimal name:String primary: boolean showPricesWrthoutVat: boolean 0..1 ProductPriceExt productCode:String sellingPrice:BigDecimal revld:Long changed :LocalDateTime extld:String ProductGroup name:String activeFrom:LocaIDateTime activeTo:LocalDateTime PriceLevelGroup nameInternal:String intemaINote:String position: Integer IF Obrázek 4.1: Class diagram části systému žení do košíku, zobrazování ve výpisech, či některé textace v detailu produktu. Produkt, který je skladem má EWhState.ON a tedy jeho whStatus i whSubstatus mají oba hodnotu 0. Takový produkt lze vložit do košíku a ve výpisech se zobrazuje na pozici dle řadícího kritéria. U produktů, které nejsou skladem bývá whStatus 1 a vyšší; postupně se zvyšuje v závislosti na tom, kolik dní uběhlo ode dne, kdy byl produkt naposledy skladem. Produkty s whStatus 1 je stále možné vložit do košíku a objednat, také se dále zobrazují ve výpisech na své pozici. Pokud má produkt whStatus 2, pak už ho nelze vložit do košíku, ale stále se zobrazuje ve výpisech na své pozici. Při přechodu na whStatus 3 se pak produkt přesune ve výpisech na konec. Když dosáhne whStatusu 4, tak se již ve výpisech nezobrazuje vůbec. 16 4- IMPLEMENTACE 4.1.2 Ceníky Ceníky jsou reprezentovány entitou PriceLevel a jsou vždy vázané na jednu doménu. Mají příznaky zda uživatel s daným ceníkem může používat slevové kódy či množstevní slevy, nebo jestli se m u mají nabízet případné služby a dárky. Dále je tam také určena minimální cena, od které může získat dopravu zdarma. Na PriceLevel je navázáno pravidlo PriceRule, které určuje, jakým způsobem se defaultně v tomto ceníku produktům přiřazují ceny. To je určeno zejména atributem syne enumového typu EPriceSyncType, který může nabývat hodnot N O N E , PRICELIST, nebo EXTERNAL. Pokud má hodnotu N O N E , cena se mění pouze manuálněv určeném formuláři. Hodnota E X T E R N A L pak znamená synchronizaci ceny z externího zdroje. Při hodnotě PRICELIST je cena počítána na základě ceny z nadřazeného ceníku parentLevel a případné slevy z atributu discount. Pro určování nadřazeného ceníku platí omezení, že není možné jako nadřazený ceník zvolit takový, který je sám závislý na jiném ceníku. To z toho důvodu, aby se nevytvářely složité řetězce, kde by bylo nutné také kontrolovat možné vzniknutí cyklů. Kromě výchozího cenového pravidla může mít PriceLevel i další pravidla, která platí pro vybrané skupiny produktů. Ty jsou na PriceLevel napojená přes vazební entitu PriceLevelGroup, která má vždy vlastní PriceRule, skupinu produktů ProductGroup, pro kterou pravidlo platí, a také pozici, která určuje, které pravidlo platí, pokud by se na nějaký produkt vztahovalo více pravidel - přednost má pravidlo s „vyšší" pozicí. Při změně pravidel ceníku se vždy pravidla vyhodnotí a pro každý produkt se údaje z prvního pravidla, které se na něj vztahuje, uloží také do ProductPrice. ProductPrice jsou přiřazeny ke každému PriceLevel a určují cenu jednotlivých ProductShop pro daný ceník. N a úrovni ProductPrice je možné přepsat pravidla pro určování ceny. Jsou tam atributy syne a discount stejně jako u pravidel v PriceLevel. Tyto atributy ve výchozím stavu nabývají hodnoty podle pravidel ceníku. Pokud se ale příznaky syncPixed či discountFixed nastaví na true, pak je možné pro daný ProductPrice nastavit i jinou hodnotu atributu syne, respektive discount. Tyto atributy se pak také nezmění v případě, že jsou upravena pravidla ceníku. 17 4- IMPLEMENTACE V ProductPrice je uložena procentuální hodnota sazby D P H (denormalizovaná ze sazby nastavené v ProductShop a číselníku sazeb DPH) a také ceny produktu. SellingPriceBasic je základní cena produktu bez D P H a bez započtení případné slevy, tento atribut nabývá samostatné hodnoty jen pokud je vypnutá synchronizace ceny (syne má hodnotu NONE). Pokud se cena získává z externího zdroje, má SellingPriceBasic stejnou hodnotu jako sellingPrice, protože v takovém případě se sleva neuvažuje. Pokud se cena získává z nadřazeného ceníku, SellingPriceBasic má hodnotu null a místo ní se používá hodnota SellingPriceBasic z nadřazeného ceníku. SellingPrice je cena produktu bez D P H se započtenou případnou slevou. Výpočet této hodnoty závisí na atributu syne - pokud syne = N O N E , pak je vypočtena podle rovnice (4.1), pokud syne = EXTERN A L , tak je rovna získané ceně z externího zdroje stejně jako SellingPriceBasic (viz rovnice (4.2)) a pokud syne = PRICELIST, vypočte se podle rovnice (4.3). Poslední z uložených cen je sellingPriceWithVat, což je cena získaná ze sellingPrice připočtením DPH, denormalizovaná kvůli snadnějším výpočtům a dotazům do databáze. sellingPrice = SellingPriceBasic (1 — discount /100) (4.1) sellingPrice = SellingPriceBasic = externalPrice (4.2) sellingPrice = parentSellingPriceBasic(l — discount /100) (4.3) 4.2 Úpravy systému Do ProductShop byl přidán atribut priceKitStatus, který určuje, zda byl nebo má být produkt do PriceKit importován a případně v jakém je tam stavu. Má šest možných hodnot - NONE, TO_ACTIVATE, ACTIVE, DEACTIVATED, TO_DEACTIVATE a TO_REACTIVATE. Výchozí status je N O N E , pro import do PriceKit je třeba status ručně změnit na TO_ACTIVATE. Podmínky, za kterých se mění status, jsou zobrazeny v diagramu 4.2. 18 4- IMPLEMENTACE Obrázek 4.2: Diagram možných změn atributu pricekitStatus Ve třídě MerchantChannel přibyl atribut competitorId, který určuje ID zdroje dat konkurence (v našem případě tedy ID Heureky) v PriceKitu. Tento údaj je nutný při importu produktu a také při změně url produktové stránky na Heurece (případně jiném zdroji). Externím zdrojem ceny byl před implementací propojení s nástrojem pro dynamické oceňování pouze účetní systém Pohoda. Pro rozlišení jednotlivých zdrojů byla vytvořena entita ProductPriceExternalSource, která pomocí atributu type určuje typ zdroje (EPriceExtSourceType) - momentálně Pohodu nebo PriceKit. Dále také příznakem withVat určuje, zda daný zdroj poskytuje ceny s D P H , nebo bez ní. Ve zděděné třídě ProductPriceExtSourcePriceKit jsou navíc uložené ještě přístupové údaje pro API připojení do externího zdroje. Vazby na tyto zdroje jsou v ProductPrice a PriceRule. Dále byla zavedena třída ProductPriceExt, která reprezentuje aktuální uloženou cenu z externího zdroje. Ceny z externích zdrojů se tedy načítají a ukládají pravidelně pro všechny produkty, které jsou ve zdroji dostupné, bez ohledu na to, zda se v danou chvíli využijí. Máme tedy uložené aktuální ceny ze všech dostupných zdrojů. To se hodí například v případě, že někdo chce v ceníku pro nějaký produkt změnit zdroj, ze kterého se cena načítá. Nová cena je tak okamžitě k dispozici a uživatel si může předem zkontrolovat, jakou cenu to vlastně nastavuje. Klíčem záznamu pro externí cenu jsou produktový kód (productCode) a i d externího zdroje. Dále je v ProductPriceExt cena daného produktu dle daného zdroje (sellingPrice), timestamp času, kdy byla 19 4- IMPLEMENTACE :Pricel_istService :PriceListDao :External Source :External Channel readAndSavePricesFromExtemalSourcesO for every active external source , readAndSavePricesFromExtemalSource(si request product price data saveOrUpdateExternalPricesO updateProductP ricesByExtem alSourceO return updated pslds getProductPricesForDefauItPLQ return updated prices send changed prices Obrázek 4.3: Sekvenční diagram změny cen podle externího zdroje externí cena naposledy změněna (revld) a také id daného produktu v externím zdroji (extld). Musela být také vytvořena metoda pro ukládání externích cen. Ta má název saveOrUpdateExternalPrices() a nachází se v PriceListDaolmpl. K uložení externích cen používá PreparedStatement a jako návratovou hodnotu vrací revld právě uložených cen. Podle revld se po aktualizaci externích cen naleznou v metodě updateProductPricesByExternalSource() ve třídě PriceListDaolmpl externí ceny, které byly právě změněny a měly by se podle nich upravit ceny v cenících. V metodě se změní ceny v záznamech ProductPrice závislých na daném externím zdroji a upraví se historie cen pro dané produkty. Následně se pak upraví ceny a historie pro záznamy ProductPrice, které jsou závislé na cenících s právě aktualizovanými cenami. Celý proces změny cen podle externího zdroje lze vidět v diagramu 4.3. 20 4- IMPLEMENTACE 4.3 Propojení PriceKit PriceKit nabízí propojení přes REST API. Pro přístup do API je nutná OAuth2 autentizace. Před odesíláním požadavků je tedy nutné nejprve získat přístupový token pomocí Clientld a ClientSecret. Přístupový token má platnost jednu hodinu, poté je nutné ho obnovit. Každý e-shop má vlastní přístupové údaje a musí získat vlastní přístupový token. Autentizace je implementovaná ve třídě PriceKitClient a jsou zde také uloženy přístupové tokeny pro jednotlivé e-shopy. Před odesláním požadavku se vždy kontroluje, jestli už byl získán token a zda je ještě platný a v případě potřeby se získá nový. Pro integraci nástroje bylo nutné použít endpoint pro import produktu, úpravu produktu, získání seznamu produktů a deaktivaci produktu. PDF dokumentaci API je možné najít v přílohách. Ve webovém rozhraní PriceKitu je také tlačítko pro přijetí navrhované ceny u jednotlivých produktů, které funguje při integraci s některým z běžně používaných e-shopových systémů, jako například ShopTet nebo WooCommerce. Pro integraci s vlastním systémem bylo třeba implementovat některé endpointy, které nabízí tyto e-shopové systémy, nebo implementovat PricePush API, které PriceKit k tomuto účelu navrhl. 4.3.1 Import produktů Import produktu lze provést POST metodou přes endpoint /companyproduct-import. Touto metodou se vloží název produktu, SKU, U R L produktu v e-shopu a případně také u konkurence. Je možné také vložit tágy, kategorie a nabízí až pět vlastních polí pro uložení libovolných údajů. Tento endpoint je volán ve třídě PriceKitClient a volá se asynchronně po změně údajů u produktu (v ProductService.update()), pokud má produkt vyplněnou URL na Heurece a má povolené odesílání do PriceKitu (pricekitStatus je TO_ACTIVATE). Tělo požadavku je reprezentováno třídou PriceKitProductlmport. 21 4- IMPLEMENTACE 4.3.2 Update produktů Pro úpravu názvu, vlastních polí a tagů je produktu slouží endpoint I'company-product-batch/' {webshopld}/update, kde parametr webshopld )e identifikátor e-shopu založeného v PriceKitu. Narozdíl od importu je v tomto případě možné odeslat až 25 produktů v jednom požadavku. Navíc je zde také možnost uvést nákupní cenu produktu. Nejde zde ale změnit U R L produktu u konkurence, k tomu slouží samostatný endpoint. Tento endpoint je volán každý den v noci (ze Scheduler.updatePriceKitProducts ()) pro všechny produkty, které jsou již naimportovány v PriceKitu, aby u nich byla aktuální nákupní cena. Vzhledem k limitovanému počtu produktů v jednom požadavku je volán z PriceKitClient opakovaně, data produktu jsou uložena v objektu třídy PriceKitProductUpdate. 4.3.3 Deaktivace produktu Pokud je produkt v PriceKitu deaktivován, PriceKit již pro něj nenavrhuje změny ceny, ani nesleduje jeho ceny u konkurence. Tím se také přestává počítat do limitu pro počet produktů. K deaktivaci slouží endpoint lvi /company-product-passivate/ {id}/new, kde id je identifikátor produktu v PriceKitu. Tento endpoint se volá ve třídě PriceKitClient. Požadavky na deaktivaci se odesílají jednou denně v noci, pro všechny produkty, které mají atribut whStatus (určující stav produktu ve skladu, viz sekce 4.1.1) rovný 4 a zároveň mají ještě aktivní priceKitStatus, případně ty, které byly ručně označeny k deaktivaci (priceKitStatus mají TO_DEACTIVATE). WhStatus roven 4 byl zvolen jako kritérium pro deaktivaci z toho důvodu, že v tomto bodě už produkt není dlouhou dobu skladem a jeho prodej je považován za ukončený. Není tedy již moc pravděpodobné, že by se tento produkt znovu začal prodávat. 4.3.4 Reaktivace produktu Přes API je možná také opětovná aktivace produktu, přes endpoint /company-product-passivate/{id}/restore. Ten se stejně jako deaktivace volá ze třídy PriceKitClient jednou denně v noci. Požadavky se posílají pro produkty, které byly ručně označeny k opětovné aktivaci 22 4- IMPLEMENTACE (t).priceKitStatus mají TO_REACTIVATE). Produkty, které mají whStatus menší než 4 a jejich priceKitStatus je DEACTIVATED se automaticky nereaktivují, aby nedocházelo k reaktivaci produktů, které byly záměrně ručně deaktivovány. 4.3.5 Změna URL konkurence U R L produktu u konkurence nelze změnit ve webovém rozhraní a jediný způsob jak ji změnit je tedy pomocí endpointu /companyproduct/{id}/competitor-product-url-refresh. Tento endpoint se volá vždy pro jednoho konkurenta. Změna URL konkurence je volána po úpravě produktu (v ProductService.updateQ), pokud byl změněn ProductExternalLink. 4.3.6 Získání návrhu ceny Objekt CompanyProductPositionProposal obsahující návrh ceny je součástí objektu CompanyProductListltem v seznamu pruduktů vraceném endpointem /company-product. Návrh ceny obsahuje minimální, maximální a doporučenou cenu návrhu, všechny jako číselný údaj i ve zformátované formě jako řetězec. Požadavek na tento endpoint metodou GET potřebuje parametr webshopld a volitelně může také obsahovat stránkovací parametry limit a offset, které určují velikost stránky a od kolikáté položky se má stránka začínat. Maximální povolená velikost stránky je 100 produktů. Endpoint nenabízí žádné možnosti filtrování, pro nalezení konkrétního produktu je tedy třeba postupně procházet všechny produkty, dokud ho nenalezneme. Endpoint je volán ve třídě PriceKitClient, odpověd se ukládá do PriceKitProductListing, detail produktu v PriceKitProductListingltem. Návrhy se získávají pro všechny produkty, kterých jsou stovky až tisíce, při velikosti stránky 100 je tedy nutné endpoint volat mnohokrát. Získané návrhy cen se následně ukládají do databáze jako entita ProductPriceExt a následně se nastaví produktům, které mají nastavenou synchronizaci ceny s PriceKitem a zároveň mají jinou cenu, než je ta doporučená. Cena se nastavuje pomocí SQL dotazu v PreparedStatement a současně s cenou se upravuje také historie cen. 23 4- IMPLEMENTACE Získávání návrhů ceny probíhá pravidelně každých šest minut (v Scheduler.syncProductPrices()), stejně jako získávání cen z účetního systému. 4.3.7 Integrace tlačítka webového rozhraní Pro integraci tlačítka na změnu ceny ve webovém rozhraní PriceKitu jsem zvolila možnost implementace PricePush API. Jedná se o tři endpointy zabezpečené pomocí ApiKey řetězce posílaného v HTTP headeru s názvem X-API-KEY. Pokud se přijatý klíč neshoduje s klíčem uloženým v konfiguraci, endpointy vrací HTTP status 403 Forbidden a v těle odpovědi vrací chybový kód a chybovou zprávu "Invalid API key." Endpointy jsou implementované v PriceKitController. První endpoint /test-connection pouze testuje připojení a správnost A P I klíče. Pokud je klíč nesprávný vrací status 403, pokud je klíč správný, vrací 204 No content. Druhý endpoint /sku-check zjišťuje, zda produkt s daným S K U existuje v našem systému. Pokud je daný produkt nalezen, vrací status 204 No content a pokud neexistuje, pak endpoint vrací 404 Not found. Tento endpoint volá PriceKit periodicky pro všechny produkty a pokud některý produkt není nalezen, deaktivuje ve webovém rozhraní pro tento produkt tlačítko ke změně ceny. Poslední endpoint /product-price je ten, který je v PriceKitu volán při zmáčknutí tlačítka a zajišťuje nastavení nové ceny. Metodou PUT je v těle požadavku odesíláno SKU produktu a cena, která se má nastavit. Pokud dojde ke změně ceny, vrací HTTP status 204, pokud se změna nepodaří vrací status 404. 24 5 Testování strategií Součástí požadavku firmy bylo také otestování jednotlivých strategií oceňování, které vybraný nástroj nabízí a vyhodnocení jejich účinnosti. Pro otestování strategií nabízených PriceKitem byly vybrány produkty z obou českých domén firmy (tedy z obchodů nazuby.cz a holime.cz). Při jejich výběru jsem hleděla na to, aby v nich byly zastoupeny různé produktové kategorie a také různé cenové hladiny. 5.1 Průběh testování a testované strategie Z obchodu nazuby.cz bylo vybráno deset produktů z kategorií elektrických kartáčků, klasických kartáčků, zubních past a náhradních hlavic na elektrické kartáčky. Z obchodu holime.cz pak bylo vybráno 7 produktů z kategorií elektrických holicích strojků a epilátorů, příslušenství pro holicí strojky, a náhradní hlavice pro žiletkové holicí strojky. Produkty z e-shopu nazuby.cz měly nastaveny minimální povolenou cenu jako 125 % nákupní ceny, s výjimkou trojbalení kartáčků Curaprox (produkt 7006), které mělo 112 % nákupní ceny z důvodu vysoké konkurence. U produktů holime.cz pak byla minimální cena všude nastavena na 110 % nákupní ceny. Z testování byly také vyňaté velkoobchodní objednávky, na které se momentálně dynamická cenotvorba nevztahuje. Testované byly čtyři strategie, Nejlevnější, Nejlepší možná pozice, 2.-3. pozice a Průměrná cena. Porovnány byly také s výsledky produktů při manuálním nastavování cen z období před testováním. Strategie Nejlevnější vždy navrhuje o několik korun nižší cenu, než za kterou produkt prodává nejlevnější konkurent. Pokud takovou cenu ale nemůže navrhnout z důvodu nastavených omezení (např. by byla nižší než minimální povolená cena), tak není navržena žádná cena a produktu zůstává nastavena ta původní. Strategie Nejlepší možná pozice zjistí na kterou pozici je možné se dle nastavených omezení dostat a navrhne o něco nižší cenu než nabízí prodejce na dané pozici. Strategie 2.-3. pozice funguje stejně jako strategie Nejlevnější, pouze s tím rozdílem, že cenu navrhuje tak, aby byla druhá či třetí nejlevnější. 25 5- TESTOVÁNÍ STRATEGIÍ Stejně jako u strategie Nejlevnější nenavrhuje žádnou cenu, pokud by třetí nejnižší cena byla nižší než minimální povolená. Strategie Průměrná cena navrhuje cenu v závislosti na průměrné ceně mezi všemi konkurenty. Je zde možné určit zda má být navržená cena rovna průměrné či zda má být nižší nebo vyšší než průměrná a o kolik procent. V testování byla použita cena rovna té průměrné. Každá strategie byla testována po dobu jednoho týdne. Právě testovaná strategie byla vždy nastavena všem testovacím produktům. Po ukončení testování jsem zhodnotila počet prodaných kusů testovaných produktů a také vypočítala zisk z jejich prodeje pro jednotlivé strategie. V rámci měsíce ale mohou být týdny, kdy se obecně nakupuje více, např. kvůli výplatám. Z tohoto důvodu jsem ještě porovnala procentuální podíl počtu prodaných kusů testovaných produktů z celkového počtu prodaných položek. 5.2 Vyhodnocení V grafu 5.1 je možné vidět porovnání jednotlivých strategií a manuálního nastavování cen podle prodaných kusů. Hodnoty jsou vyjádřeny v procentech, kde základ je hodnota ze strategie Nejlevnější. Porovnání podle procentuálního podílu počtu prodaných kusů je zobrazeno v grafu 5.2. Tyto hodnoty byly vypočteny z počtu prodaných kusů testovacího produktu a celkového počtu prodaných kusů všech produktů na daném e-shopu. V grafu 5.3 si lze prohlédnout porovnání podle zisku. Podobně jako v porovnání dle prodaných kusů jsou hodnoty vyjádřeny v procentech se základem ve strategii nejlevnější. Celkové výsledky je pak možné vidět v appedixu A. U dražších produktů byl problém s tím, že v období jednoho týdne se jich prodá jen velmi málo. To je pravděpodobně způsobeno částečně onou vyšší cenou a dále také charkterem zboží, kterým je většinou elektronika a nikoliv spotřební zboží, které se nakupuje pravidelně. Získaná data pro tyto produkty proto nejsou statisticky významná. U většiny produktů se jako nejvhodnější strategie ukázaly Nejlevnější a Nejlepší možná pozice, které měly nejvyšší počet produktů s nejvyšším ziskem (6, resp. 5 ze 17, viz graf 5.3) a vysoký počet 26 5. TESTOVÁNÍ STRATEGIÍ • Manuální • Nej levnější • Nejlepší možná pozice 2.-3. pozice • Průměrná cena Produkty Obrázek 5.1: Porovnání strategií podle prodaných kusů, v procentech vztažených ke strategii Nejlevnější l Manuální l Nejlevnější i Nejlepší možná pozice 12.-3. pozice l Průměrná cena „ c ř ď & o * JŠ> A * ^ b * 4° o ° b - \ ° b o*'" ^ ^? /íy Produkty Obrázek 5.3: Porovnání strategií podle zisku, v procentech vztažených ke strategii Nejlevnější nejlepších výsledků v ostatních kritériích. Nejlepší výsledky měla strategie Nejlevnější zejména u produktů nazuby.cz (u 4 produktů z 10 podle počtu kusů a u 5 z 10 podle poměru prodaných kusů), zatímco Nejlepší možná pozice měla lepší výsledky hlavně na holime.cz. Pokud porovnáme součty všech produktů v tabulce 5.1, má nejlepší výsledky strategie Nejlevnější jak podle počtu prodaných kusů, tak i dle zisku. Podle celkového zisku měla strategie Nejlepší možná pozice nejhorší výsledek ze všech strategií. Pokud ale porovnáme součet pouze mezi produkty z e-shopu holime.cz, její výsledky podle počtu kusů a podílu prodaných kusů jsou nejlepší. U několika produktů dosáhla dobrých výsledků i strategie 2.-3. pozice. Za zmínku zde stojí například zubní pasta Opalescence (produkt 29004), u které byl při této strategii o více než 4500 Kč (cca 18 %) vyšší zisk, než u strategie Nejlevnější a to s asi o čtvrtinu méně prodanými kusy. Strategie Průměrná cena pak měla nejlepší výsledek dle zisku u jednoho produktu z domény nazuby.cz a dvou produktů z holime.cz. To i přestože počet prodaných kusů byl nižší než u jiných strategií, 28 5- TESTOVÁNÍ STRATEGIÍ Tabulka 5.1: Součty hodnot porovnávaných kritérií pro jednotlivé strategie Krit. Strategie Nazuby.cz Holime.cz Celkem Manuální 1021,00 65,00 1086,00 Prod, ks Nejlevnější Nejlepší pozice 2.-3. pozice Průměrná cena 1227,00 1080,00 1117,00 770,00 70,00 91,00 46,00 52,00 1297,00 1171,00 1163,00 822,00 Manuální 8,94 % 8,44 % 17,38 % Podíl ks Nejlevnější Nejlepší pozice 2.-3. pozice Průměrná cena 9,11 % 7,68 % 7,65 % 5,07 % 7,61 % 10,36 % 6,15 % 4,65 % 16,72 % 18,05 % 13,80 % 9,71 % Manuální 54582,35 Kč 3376,57 Kč 57958,92 Kč Nejlevnější 61752,16 Kč 10110,30 Kč 71862,46 Kč Zisk Nejlepší pozice 2.-3. pozice 44773,85 Kč 57523,11 Kč 9809,18 Kč 6329,18 Kč 54583,03 Kč 63852,28 Kč Průměrná cena 47463,57 Kč 10124,99 Kč 57588,56 Kč v případě Braun CombiPack břitu (produkt 71999) dokonce nejnižší ze všech strategií. To nám ukazuje, že i tato strategie může mít své uplatnění, musí být ale použita na vhodné produkty. Z grafu 5.3 pak můžeme vidět, že při manuálním nastavování cen došlo i k tomu, že se epilátor Braun (produkt 71803) prodával za cenu nižší, než za jakou byl pořízen. Také je patrné, že výsledky podle zisku jsou u většiny produktů horší než při použití dynamické cenotvorby. S ohledem na výsledky testování bych doporučila používat zejména strategii Nejlevnější, která měla největší celkové zisky i nejvyšší počet prodaných kusů. Nevýhodou této strategie může být, že v případě, kdy minimální povolená cena není dostatečně nízká, aby umožnila dosažení první pozice, neposkytuje žádný návrh ceny. Ta se tedy nezmění pokud konkurent náhle skokově zlevní pod úroveň minimální ceny. Dále bych doporučila zvážit použití strategie Průměrná cena u některých vybraných produktů, zejména těch nejvíce prodávaných (např. v řádu stovek prodaných kusů týdně). Toto by bylo vhodné důklad- 29 5. TESTOVÁNÍ STRATEGIÍ něji otestovat na více produktech se zaměřením pouze na strategie Nejlevnější a Průměrná cena. 30 6 Závěr Cílem této práce bylo vybrat nástroj pro dynamické oceňování produktů na základě požadavků firmy KOBOZ SERVICE s.r.o. a integrovat jej do jejich systému. Za tímto účelem jsem porovnala přes 15 dostupných nástrojů, blíže jsem se zabývala sedmi z nich. Z těch jsem dále vybrala tři kandidáty, které jsem také vyzkoušela. Ze třech kandidátů byl nakonec vybrán nástroj PriceKit a to zejména z důvodu ceny. Pro integraci nástroje jsem implementovala API, které PriceKit nabízí, zejména metody pro import a update produktů, deaktivaci a reaktivaci produktů a získání seznamu produktů pro získávání cenových návrhů. A dále vytvořila metody, které dle návrhů mění ceny. Dále jsem implementovala PricePush API pro integraci tlačítka pro změnu ceny z webového rozhraní nástroje. Toto ale nebylo propojeno ze strany PriceKitu, protože za propojení chtěli další poplatky a ve firmě bylo rozhodnuto, že to není v současné době nutné. Od ledna postupně začal nástroj být používán. Bylo provedeno testování čtyř vybraných strategií a jejich dopadu na prodejnost a zisky. Z výsledků se jako nejvhodnější strategie jeví Nejlevnější, případně ještě Nejlepší možná pozice. Přestože nástroj vesměs funguje dobře, objevily se i nějaké problémy a nedostatky. Jedním z nedostatků je, že nedává vědět, pokud je nastavená URL produktu na Heurece nesprávná. V takovém případě se chová stejně jako když produkt nemá žádné konkurenty a tyto dva případy zatím nelze odlišit jinak, než ruční kontrolou. Na tomto problému již údajně pracují. Dalším problémem bylo, že několikrát PriceKit navrhl cenu, která byla nižší, než nastavená povolená minimální cena. Z tohoto důvodu jsem přidala jednoduchou kontrolu, aby se prodejní cena nezměnila, pokud ta navrhovaná bude nižší než nákupní. Další zvláštností je, že nástroj nedává žádné návrhy cen od půlnoci do doby prvního scrapování dat. Údajně je to z toho důvodu, že získaná data mají v jejich systému platnost pouze do půlnoci a v tomto mezičase tedy nejsou žádná platná data. 31 6. ZÁVĚR Nástroj se stále vyvíjí a nedávno přibyla možnost nastavení až tří strategií. Ty se aplikují postupně, tedy pokud první zvolenou strategii nelze použít, přejde se na další atd. Tím by také například bylo možné obejít nevýhodu strategie Nejlevnější, zmíněnou v předchozí kapitole (tedy tu, že strategie za určitých podmínek nevytváří návrh ceny). Dále také přibyla možnost nastavovat minimální a maximální ceny přes API, což dříve nebylo možné. Do budoucna je v plánu tuto možnost využít a začít nastavovat minimální a maximální ceny na straně firmy. Také by bylo vhodné tuto informaci dále využít k lepší kontrole minimální ceny při změně cen dle získaných návrhů. 32 Bibliografie 1. N A R A H A R I , Y; RAJU, CVL; RAVIKUMAR, K; S H A H , Sourabh. Dynamic pricing models for electronic business. Sadhana. 2005, roc. 30, s. 231-256. 2. LIU, Jiaxi; Z H A N G , Yidong; W A N G , Xiaoqing; DENG, Yuming; W U , Xingyu. Dynamic Pricing on E-commerce Platform with Deep Reinforcement Learning: A Field Experiment. arXiv preprint arXiv:1912.02572. 2019. 3. D E N BOER, Arnoud V. Dynamic pricing and learning: historical origins, current research, and new directions. Surveys in operations research and management science. 2015, roc. 20, c. 1, s. 1-18. 4. FISHER, Marshall; G A L L I N O , Santiago; LI, Jun. Competitionbased dynamic pricing in online retailing: A methodology validated with field experiments. Management science. 2018, roc. 64, c. 6, s. 2496-2514. 5. HINTERHUBER, Andreas; LIOZU, Stephan. Is it time to rethink your pricing strategy? MIT Sloan management review. 2012. 6. Sniffle [online]. Helsinky: Sniffle, 2022 [cit. 2022-11-12]. Dostupne z:https://www.sniffie.io/. 7. Disivo [online]. Brno: Disivo, 2022 [cit. 2022-11-12]. Dostupne z: https://www.disivo.com/. 8. RateTiger [online]. RateTiger, 2022 [cit. 2022-11-12]. Dostupne z: https://ratetiger.com/. 9. Repricer [online]. xSellco, 2019 [cit. 2022-11-12]. Dostupne z: https://www.xsellco.com/repricer. 10. Sellermania [online]. Paris: Sellermania, 2019 [cit. 2022-11-12]. Dostupne z: https: //www. sellermania. com/en/. 11. PriceManager [online]. Teaneck: PriceManager, 2022 [cit. 2022- 11-12]. Dostupne z: https : //www. pricemanager. com/. 12. Skuudle [online]. Manchester: Skuuudle, 2022 [cit. 2022-11-12]. Dostupne z: https: //www. skuuudle. com/. 13. PGP [online]. Prexus, 2022 [cit. 2022-11-12]. Dostupne z: https: //by.prexus.co/. 33 BIBLIOGRAFIE 14. SellerActive [online]. Portland: SellerActive, 2022 [cit. 2022-11-12]. Dostupné z: https: //www. selleractive. com/. 15. Open Pricer [online]. Paris: Open Pricer, 2022 [cit. 2022-11-12]. Dostupné z: https: //www. openpricer. com/. 16. Increff Markdown Optimization [online]. Increff, 2022 [cit. 2022- 11-12]. Dostupné z: https : / /www . increff . com/markdown- optimization/. 17. PricingHUB [online]. PricingHUB, 2022 [cit. 2022-11-12]. Dostupné z: https://www.pricinghub.net/en/. 18. Competera [online]. Competera, 2014/2022 [cit. 2022-11-12]. Dostupné z: https://competera.net/. 19. PricelSpy [online]. Bělehrad: WEBCentric, 2022 [cit. 2022-11-12]. Dostupné z: https: //www. price2spy. com/. 20. Pricemonitor [online]. Darmstadt: Patagona, 2020 [cit. 2022-11- 12]. Dostupné z: https ://patagona.de/pricemonitor/. 21. Prisync [online]. Istanbul: Prisync, 2022 [cit. 2022-11-12]. Dostupné z: https://prisync.com/. 22. PriceShape [online]. Risskov: PriceShape, 2022 [cit. 2022-11-12]. Dostupné z: https: //priceshape. com/. 23. PriceKit [online]. Veszprém: PriceKit, 2022 [cit. 2022-11-12]. Dostupné z: https://www.pricekit.eu/. 34 A Appendix - podrobné výsledky testování Podrobné výsledky testování je možné vidět v tabulkách A.1, A.2, A.3 a A.4. V tabulkách VNC znamená váženou nákupní cenu, Cena je průměrná cena, za kterou se produkt v daném týdnu prodával, Prodáno je počet prodaných kusů a Podíl představuje podíl prodaných kusů produktu z celkového počtu prodaných kusů všech produktů na daném e-shopu. Uvedené ceny jsou bez D P H . Tučně jsou vyznačeny hodnoty s lepším výsledkem, než bylo dosaženo v ostatních testovaných strategiích. V tabulce A.5 pak jsou pro porovnání výsledky produktů při manuálním nastavování ceny. Zde jsou tučně vyznačeny hodnoty, které jsou lepší než u testovaných strategií. 35 A . APPENDIX - PODROBNÉ VÝSLEDKY TESTOVÁNÍ Tabulka A.1: Výsledky testovaných produktů při testované strategii Nejlevnější, v horní části doména nazuby.cz a ve spodní holime.cz Produkt V N C Cena Prodáno Podíl Zisk 17045 990,85 Kč 1349,39 Kč 7 0,05 % 2509,78 Kč 1976 257,78 Kč 342,30 Kč 19 0,14 % 1629,57 Kč 2125 383,70 Kč 484,20 Kč 42 0,31 % 4224,55 Kč 23015 57,20 Kč 75,02 Kč 24 0,18 % 423,56 Kč 24013 55,09 Kč 71,82 Kč 118 0,88 % 1973,93 Kč 2758 667,64 Kč 880,29 Kč 82 0,61 % 17482,94 Kč 29004 106,25 Kč 143,95 Kč 672 4,99 % 25379,19 Kč 3652 3803,53 Kč 4776,78 Kč 1 0,01 % 973,24 Kč 4170 938,59 Kč 1184,49 Kč 2 0,01 % 502,82 Kč 7006 158,05 Kč 180,45 Kč 259 1,92 % 5650,43 Kč 70324 299,78 Kč 330,50 Kč 4 0,43 % 122,86 Kč 70706 1178,36 Kč 1392,28 Kč 21 2,28 % 4492,37 Kč 71081 259,76 Kč 347,02 Kč 10 1,09 % 878,88 Kč 71324 484,33 Kč 543,26 Kč 17 1,85 % 1001,83 Kč 71803 1859,93 Kč 2049,50 Kč 1 0,11 % 189,57 Kč 71999 457,46 Kč 509,21 Kč 15 1,63 % 776,45 Kč 72566 3832,77 Kč 5156,94 Kč 2 0,22 % 2648,34 Kč Celkem 1297 16,72 % 71862,46 Kč 36 A . APPENDIX - PODROBNÉ VÝSLEDKY TESTOVÁNÍ Tabulka A.2: Výsledky testovaných produktů při testované strategii Nejlepší možná pozice, v horní části doména nazuby.cz a ve spodní holime.cz Produkt V N C Cena Prodáno Podíl Zisk 17045 990,85 Kč 1347,02 Kč 6 0,04 % 2137,07 Kč 1976 257,78 Kč 323,41 Kč 39 0,28 % 2555,01 Kč 2125 383,70 Kč 480,99 Kč 30 0,21 % 2918,89 Kč 23015 57,20 Kč 71,82 Kč 20 0,14 % 292,36 Kč 24013 55,09 Kč 72,64 Kč 115 0,82 % 2018,78 Kč 2758 761,61 Kč 958,60 Kč 29 0,21 % 5712,65 Kč 29004 105,22 Kč 142,07 Kč 590 4,20 % 21736,61 Kč 3652 3803,53 Kč 4776,78 Kč 0 0,00 % 0,00 Kč 4170 938,59 Kč 1173,52 Kč 5 0,04 % 1174,64 Kč 7006 158,05 Kč 177,53 Kč 245 1,74 % 4771,15 Kč 70324 299,79 Kč 429,67 Kč 1 0,11 % 129,88 Kč 70706 1178,36 Kč 1355,29 Kč 24 2,73 % 4246,30 Kč 71081 253,50 Kč 347,02 Kč 14 1,59 % 1309,31 Kč 71324 481,39 Kč 533,06 Kč 38 4,33 % 1963,45 Kč 71803 1859,93 Kč 2049,50 Kč 2 0,23 % 379,15 Kč 71999 443,39 Kč 505,40 Kč 11 1,25 % 671,80 Kč 72566 3832,77 Kč 4942,07 Kč 1 0,11 % 1109,30 Kč Celkem 1171 18,04 % 54583,03 Kč 37 A . APPENDIX - PODROBNÉ VÝSLEDKY TESTOVÁNÍ Tabulka A.3: Výsledky testovaných produktů při testované strategii 2.-3. pozice, v horní části doména nazuby.cz a ve spodní holime.cz Produkt V N C Cena Prodáno Podíl Zisk 17045 990,85 Kč 1347,02 Kč 4 0,03 % 1424,72 Kč 1976 257,78 Kč 350,52 Kč 26 0,18 % 2411,33 Kč 2125 383,70 Kč 485,24 Kč 28 0,19 % 2840,58 Kč 23015 57,20 Kč 71,82 Kč 25 0,17 % 365,46 Kč 24013 55,09 Kč 76,78 Kč 141 0,97 % 3057,85 Kč 2758 761,61 Kč 958,60 Kč 36 0,25 % 7091,57 Kč 29004 105,14 Kč 165,86 Kč 505 3,46 % 29990,19 Kč 3652 3803,53 Kč 4776,78 Kč 1 0,01 % 973,24 Kč 4170 938,59 Kč 1482,01 Kč 0 0,00 % 0,00 Kč 7006 158,05 Kč 181,29 Kč 350 2,4 % 7911,5 Kč 70324 299,79 Kč 669,34 Kč 0 0,00 % 0,00 Kč 70706 1178,36 Kč 1480,01 Kč 11 1,47 % 3318,12 Kč 71081 253,50 Kč 380,08 Kč 8 1,07 % 1012,64 Kč 71324 481,48 Kč 537,11 Kč 19 2,54 % 1056,99 Kč 71803 1859,93 Kč 2049,50 Kč 2 0,27 % 379,15 Kč 71999 443,39 Kč 537,11 Kč 6 0,80 % 562,28 Kč 72566 3832,77 Kč 5545,37 Kč 0 0,00 % 0,00 Kč Celkem 1163 13,80 % 63852,28 Kč 38 A . APPENDIX - PODROBNÉ VÝSLEDKY TESTOVÁNÍ Tabulka A.4: Výsledky testovaných produktů při testované strategii Průměrná cena, v horní části doména nazuby.cz a ve spodní holime.cz Produkt V N C Cena Prodáno Podíl Zisk 17045 990,85 Kč 1372,75 Kč 0 0,00 % 0,00 Kč 1976 257,78 Kč 404,88 Kč 3 0,02 % 441,29 Kč 2125 383,70 Kč 578,43 Kč 11 0,07 % 2142,08 Kč 23015 57,20 Kč 76,78 Kč 14 0,09 % 275,73 Kč 24013 55,09 Kč 82,47 Kč 100 0,66 % 2716,44 Kč 2758 761,61 Kč 1051,01 Kč 12 0,08 % 3487,82 Kč 29004 105,14 Kč 182,21 Kč 379 2,49 % 29218,13 Kč 3652 3803,53 Kč 5303,64 Kč 0 0,00 % 0,00 Kč 4170 938,59 Kč 1491,20 Kč 0 0,00 % 0,00 Kč 7006 158,05 Kč 195,14 Kč 251 1,65 % 9182,07 Kč 70324 299,79 Kč 670,72 Kč 0 0,00 % 0,00 Kč 70706 1178,36 Kč 1578,43 Kč 9 0,80 % 3600,63 Kč 71081 310,25 Kč 470,99 Kč 1 0,09 % 160,74 Kč 71324 481,52 Kč 621,51 Kč 36 3,22 % 5050,88 Kč 71803 1859,93 Kč 2039,62 Kč 2 0,18 % 359,37 Kč 71999 443,39 Kč 681,74 Kč 4 0,36 % 953,37 Kč 72566 3832,77 Kč 5549,50 Kč 0 0,00 % 0,00 Kč Celkem 822 9,71 % 57588,56 Kč 39 A . APPENDIX - PODROBNÉ VÝSLEDKY TESTOVÁNÍ Tabulka A.5: Výsledky testovaných produktů při manuálním nastavování cen před testováním, v horní části doména nazuby.cz a ve spodní holime.cz Produkt V N C Cena Prodáno Podíl Zisk 17045 990,85 Kč 1395,87 Kč 10 0,09 % 4050,22 Kč 1976 257,78 Kč 306,61 Kč 26 0,23 % 1269,67 Kč 2125 383,70 Kč 492,02 Kč 41 0,36 % 4329,40 Kč 23015 57,20 Kč 85,09 Kč 5 0,04 % 139,45 Kč 24013 55,31 Kč 76,21 Kč 103 0,90 % 2121,00 Kč 2758 618,13 Kč 982,66 Kč 36 0,32 % 13122,97 Kč 29004 107,62 Kč 148,18 Kč 527 4,61 % 21384,64 Kč 3652 3986,14 Kč 5577,69 Kč 2 0,02 % 3183,09 Kč 4170 938,59 Kč 1042,88 Kč 3 0,03 % 312,86 Kč 7006 158,05 Kč 176,53 Kč 268 2,35 % 4669,05 Kč 70324 299,78 Kč 378,66 Kč 3 0,39 % 236,63 Kč 70706 1178,36 Kč 1525,44 Kč 4 0,52 % 1388,31 Kč 71081 281,67 Kč 351,24 Kč 11 1,43 % 765,27 Kč 71324 533,10 Kč 544,63 Kč 36 4,68 % 384,49 Kč 71803 2066,59 Kč 2066,00 Kč 1 0,13 % -0,59 Kč 71999 492,63 Kč 552,89 Kč 10 1,30 % 602,46 Kč 72566 3832,77 Kč 5946,28 Kč 0 0,00 % 0,00 Kč Celkem 1086 17,38 % 57958,92 Kč 40