Modelowane listy odbiorców nie zawierają konkretnych osób, tylko prawdopodobieństwa. Wyjaśniam, jak powstają, gdzie ich szukać w panelu i jak czytać ich raporty.
Kiedy pytam w sklepie o listę bestsellerów, dostaję zestawienie sprzedanych sztuk. Kiedy pytam, jak długo dany towar leży na półce, zwykle zapada cisza albo ktoś obiecuje „sprawdzić w systemie”. A to druga liczba jest znacznie ciekawsza z punktu widzenia reklamy.
Sprzedane sztuki mówią, co się sprzedaje. Rotacja mówi, ile pieniędzy sklep trzyma zamrożone w towarze i jak długo. To zupełnie inna informacja i prowadzi do innych decyzji: czasem każe wstrzymać promocję dobrze sprzedającego się produktu, a czasem dołożyć budżet pozycji, która w rankingu sprzedaży jest daleko.
Pracowałem tak z kilkoma sklepami i za każdym razem najtrudniejszy był nie dobór grup, a uzgodnienie definicji. Poniżej opisuję, jak to liczę i jak przekładam na kampanie.
Rotacja to relacja sprzedaży do zapasu. Można ją zapisać na dwa sposoby i oba są w porządku, byle nie mieszać ich w jednym zestawieniu.
Pierwszy: ile razy zapas „obrócił się” w danym okresie, czyli sprzedane sztuki podzielone przez średni stan magazynowy. Drugi, dla mnie wygodniejszy w rozmowie z klientem: ile dni wystarczy obecnego zapasu przy dotychczasowym tempie sprzedaży. Druga liczba jest zrozumiała dla każdego i od razu podpowiada decyzję — trzysta dni zapasu brzmi inaczej niż „rotacja 1,2″.
Ustalam też trzy parametry, bez których wynik jest nieporównywalny. Okno czasowe: zwykle trzydzieści dni na decyzje bieżące i dziewięćdziesiąt na ocenę strukturalną. Jednostkę: sztuki, nie wartość, bo wartość zmienia się przy każdej obniżce. I wreszcie sposób traktowania zwrotów, który w części kategorii przewraca cały obraz.
Pilnuję jednej rzeczy: liczby liczę na poziomie, na którym sprzedaję. Jeśli w reklamie występuje wariant koloru, to rotację liczę dla warianta, a nie dla modelu.
Zanim pokażę komukolwiek podział, sprawdzam cztery rzeczy, bo każda z nich potrafi wywrócić ranking.
To nużąca robota, ale bez niej cały podział jest ładnym wykresem bez związku z magazynem. Zwykle zajmuje mi więcej czasu niż wszystko, co potem robię w Google Ads.
Próbowałem bardziej wyrafinowanych schematów, z klasyfikacją na trzy litery i macierzą wartości. W praktyce zawsze kończę na czterech koszykach, bo tyle da się utrzymać i wytłumaczyć.
Progi między szybką i wolną rotacją ustalam z klientem na danych, a nie z podręcznika — inaczej wyglądają w kategorii z produktami spożywczymi, inaczej w meblach. Zapisuję je w jednym miejscu wraz z datą ustalenia i przeglądam raz na kwartał.
Podział musi trafić do pliku produktowego, bo poza nim system reklamowy nie wie nic o magazynie. Dostępność to za mało: informuje tylko, czy towar jest, a nie jak długo już jest.
Najstabilniejszy układ, jaki udało mi się wdrożyć, wygląda tak. Raz na dobę z systemu magazynowego albo z bazy sklepu wychodzi zestawienie z identyfikatorem pozycji, stanem i sprzedażą z ostatniego okna. Osobny krok przelicza to na tempo i przypisuje koszyk. Wynik wpada do pliku dodatkowego, dołączanego do głównego po identyfikatorze — i to jest jedyne miejsce, w którym reklama styka się z magazynem.
Ważne, żeby cała logika była w tym jednym kroku przeliczającym, a nie rozsypana po regułach w panelu. Gdy po pół roku ktoś pyta, dlaczego produkt wpadł do „wolnej rotacji”, chcę mieć jedną odpowiedź, a nie trzy miejsca do sprawdzenia.
I rzecz banalna, o którą potykałem się osobiście: identyfikatory muszą być te same po obu stronach. Jeśli magazyn operuje kodem wewnętrznym, a plik produktowy identyfikatorem ze sklepu, potrzebna jest tabela łącząca i ktoś, kto ją utrzymuje.
Tu ten podział zaczyna zarabiać, ale zaznaczę od razu: żadna z tych decyzji nie jest automatyczna i wszystkie wymagają zgody osoby odpowiedzialnej za zakupy.
Grupa szybko rotująca z marżą dostaje najwyższy priorytet i osobny, spokojny cel. Grupa szybko rotująca bez marży trafia do kampanii z celem zauważalnie wyższym — jeśli sprzedaje się sama, niech reklama do niej dokłada mniej. Wolna rotacja z dużym zapasem to jedyna grupa, przy której rozmawiam o obniżeniu wymagań co do zwrotu, bo tu porównuję koszt reklamy nie z marżą, a z kosztem dalszego trzymania towaru. Ostatnia grupa zostaje w kampanii ogólnej i po prostu jej nie utrudniam.
Dwie rzeczy robię przy okazji, choć nie dotyczą stawek. Wyłączam z promocji pozycje, których zapas skończy się w kilka dni, żeby nie płacić za ruch na produkt, którego zabraknie w połowie tygodnia. I odwrotnie — pozycje z ogromnym zapasem i zerowym zainteresowaniem oddaję z powrotem do działu handlowego, bo problemem nie jest reklama, tylko cena albo opis.
Największym ryzykiem nie jest błąd w liczeniu, a to, że po dwóch miesiącach nikt tego nie pilnuje.
Trzymam się więc kilku ograniczeń. Cztery koszyki, nie dwanaście. Jedno okno pomiaru do decyzji bieżących. Jeden przegląd w miesiącu, z góry umówiony, na którym zestawiam podział z wynikami i pytam, czy progi nadal mają sens. Żadnych zmian struktury kampanii w tygodniu z dużą promocją.
Warto też z góry uzgodnić, kto podejmuje decyzję, gdy dane i intuicja handlowa się rozjeżdżają. Zdarza się, że pozycja o fatalnej rotacji jest w ofercie z powodów, o których nie wiem — bo dopełnia zestaw albo wynika z umowy z dostawcą. Moja rola kończy się na pokazaniu kosztu tej decyzji, a nie na jej podjęciu.
Jeśli miałbym z tego wpisu zostawić jedno zdanie, brzmiałoby ono tak: reklama nie jest osobnym światem od magazynu i im szybciej te dwa zestawy liczb spotkają się w jednym pliku, tym mniej pieniędzy leży bez ruchu.
Używamy plików cookies, aby ułatwić Ci nawigację oraz wykonywanie określonych funkcji. Szczegółowe informacje o wszystkich plikach cookies znajdziesz w każdej kategorii zgody poniżej.
Pliki cookies oznaczone jako "Niezbędne" są przechowywane w Twojej przeglądarce, ponieważ są one kluczowe dla zapewnienia podstawowych funkcji strony.
Używamy również plików cookies firm trzecich, które pomagają nam analizować, w jaki sposób korzystasz z tej strony, zapamiętują Twoje preferencje oraz dostarczają treści i reklamy odpowiednie dla Ciebie. Te pliki cookies będą przechowywane w Twojej przeglądarce tylko za Twoją uprzednią zgodą.
Możesz zdecydować, czy chcesz włączyć lub wyłączyć niektóre bądź wszystkie te pliki cookies, jednak wyłączenie niektórych z nich może wpłynąć na Twoje doświadczenia podczas przeglądania strony.
| Cookie | Czas przechowywania | Opis |
|---|---|---|
| __cf_bm | 13 minutes | Cloudflare bot management — distinguishes humans from bots. |
| rc::* | Persistent | Google reCAPTCHA — localStorage holding anti-bot challenge state. |
| Cookie | Czas przechowywania | Opis |
|---|---|---|
| wpEmojiSettingsSupports | Session | WordPress — sessionStorage flag caching whether the browser can render emoji (feature detection). |
| ytidb* | Persistent | YouTube — IndexedDB storing playback/search state for embedded videos. |
| Cookie | Czas przechowywania | Opis |
|---|---|---|
| _ga_* | 400 days | Google Analytics 4 — persists session state per property. |
| _ga | 400 days | Google Analytics — distinguishes unique users via a client id. |
| Cookie | Czas przechowywania | Opis |
|---|---|---|
| NID | 183 days | Google — stores preferences for personalized ads. |
| fr | 90 days | Meta — encrypted Facebook id and browser id for ads. |
| _gcl_au | 90 days | Google AdSense/Ads — experiments with advertising efficiency (conversion linker). |
| Cookie | Czas przechowywania | Opis |
|---|---|---|
| __Secure-YNID | 180 days | |
| YSC | Session | |
| __Secure-ROLLOUT_TOKEN | 180 days | |
| VISITOR_INFO1_LIVE | 180 days | |
| VISITOR_PRIVACY_METADATA | 180 days | |
| datr | 400 days | |
| sb | 400 days | |
| wd | 7 days |