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.
Prognozowanie popytu na frazy kluczowe to jedno z tych zadań, które w prezentacjach wyglądają znacznie lepiej niż w arkuszu. Pomysł jest prosty: mamy historię wyszukiwań, mamy sezonowość, więc powinniśmy umieć powiedzieć, ile zapytań o dany produkt pojawi się w marcu przyszłego roku i odpowiednio zaplanować budżet oraz treści.
Robię takie prognozy od kilku lat, głównie pod planowanie roczne w sklepach i pod decyzje o tym, kiedy zaczynać pracę nad kategorią, żeby zdążyć na sezon. Wniosek, który wyniosłem, jest trochę rozczarowujący: wybór modelu jest najmniej istotną częścią tej pracy. Prawdziwe problemy leżą w danych, w definicji tego, co właściwie prognozujemy, i w sposobie sprawdzania, czy prognoza była dobra.
Poniżej opisuję to, co u mnie działa, i miejsca, w których takie projekty najczęściej się rozpadają. Bez obietnicy, że algorytm zastąpi znajomość branży klienta.
Zanim ktokolwiek uruchomi jakikolwiek model, warto odpowiedzieć na pytanie, jaka decyzja zależy od wyniku. Bez tego dostaniemy ładny wykres, którego nikt nie użyje.
W praktyce sprowadza się to do czterech zastosowań. Pierwsze to rozkład budżetu reklamowego w czasie — kiedy zwiększyć wydatek, a kiedy nie ma sensu przepłacać za aukcje przy niskim popycie. Drugie to harmonogram pracy nad treścią: jeśli wiem, że szczyt zapytań o kategorię przypada w maju, to strona kategorii musi być gotowa i zindeksowana w lutym, nie w kwietniu. Trzecie to planowanie asortymentu i stanów, jeśli ktoś w firmie w ogóle chce słuchać marketingu w tej sprawie. Czwarte to ocena, czy spadek ruchu w danym miesiącu to nasz problem, czy zwykły spadek popytu na rynku.
To ostatnie zastosowanie uważam za najbardziej niedocenione. Połowa nerwowych rozmów o spadkach w wyszukiwarce wygląda inaczej, gdy obok wykresu naszego ruchu położymy wykres popytu na frazy z naszej kategorii.
To jest moment, w którym najczęściej wychodzi, że zadanie jest trudniejsze, niż wyglądało.
Wniosek jest taki, że nie mamy jednego czystego szeregu czasowego popytu. Mamy cztery częściowe obrazy, każdy zniekształcony inaczej. Dobra prognoza zaczyna się od świadomej decyzji, który z nich jest miarą, i od pilnowania, żeby nie sklejać ich w jeden wykres.
Drugie pytanie, które trzeba zadać przed modelem: prognozujemy popyt rynkowy czy nasze wyświetlenia?
To dwie różne rzeczy i mieszanie ich jest najczęstszym błędem w takich projektach. Nasze wyświetlenia zależą od pozycji, od tego, czy nie wypadliśmy z indeksu i czy nie skończył się budżet. Jeśli wytrenuję model na własnych wyświetleniach, to nauczy się on nie tylko sezonowości rynku, ale też historii moich wdrożeń, awarii i decyzji budżetowych — a potem będzie je przewidywał w przyszłość jako prawidłowość.
Dlatego rozdzielam warstwy. Popyt rynkowy modeluję na danych, które nie zależą ode mnie, i traktuję jako czynnik zewnętrzny. Osobno modeluję swój udział w tym popycie, czyli to, jaką jego część potrafię przechwycić. Prognoza ruchu jest wtedy iloczynem obu, a nie jedną liczbą z jednego modelu — i, co ważniejsze, gdy się nie zgodzi, wiem, która część zawiodła.
Analogicznie w reklamie: liczba dostępnych aukcji to jedno, a mój udział w wyświetleniach to drugie. Sklejenie tego w jedną prognozę kliknięć zwykle prowadzi do wniosku, że model „nie działa”.
Teraz część, która wszystkich najbardziej interesuje, choć jak napisałem — jest najmniej istotna.
W kampaniach reklamowych warto pamiętać, że Google udostępnia gotowy planer skuteczności, który prognozuje wyniki na podstawie danych konta. Nie zastępuje własnej analizy popytu, ale przy planowaniu budżetu na kwartał bywa szybszym punktem startu niż budowanie czegokolwiek samemu.
Ta sekcja odróżnia projekt analityczny od ładnego wykresu.
Model oceniam wyłącznie na danych, których nie widział. W szeregach czasowych oznacza to, że nie mogę losowo podzielić zbioru — muszę uczyć na przeszłości i sprawdzać na późniejszym okresie. Robię to kilka razy, przesuwając granicę, żeby zobaczyć, czy błąd jest stabilny, czy model po prostu trafił raz.
Błąd wyrażam jako średnie odchylenie od wartości rzeczywistej i zawsze porównuję z bazą odniesienia. Sama liczba nic nie znaczy — znaczenie ma to, czy model jest lepszy od naiwnej prognozy sezonowej i o ile.
Osobno patrzę na to, gdzie model się myli. Prognoza, która ma niewielki błąd przez jedenaście miesięcy i kompletnie rozjeżdża się w szczycie sezonu, jest do niczego, bo szczyt sezonu to jedyny moment, w którym potrzebowałem tej prognozy. Uśredniony wskaźnik to ukryje, wykres nie.
I rzecz najważniejsza dla rozmowy z klientem: podaję przedział, nie jedną liczbę. Prognoza bez informacji o niepewności zachęca do planowania z dokładnością, której te dane nie mają.
Pierwsza pułapka to zmiany w samych danych. Historia wyszukiwań to nie tylko historia rynku, ale też historia zmian po stronie Google — modyfikacje typów dopasowania, sposobu grupowania wariantów czy prezentacji wyników przecinają szereg czasowy w miejscu, w którym nic się na rynku nie stało. Model tego nie wie i potraktuje to jako trend.
Druga to jednorazowe zdarzenia. Ostatnie lata dostarczyły ich w nadmiarze: lockdowny, gwałtowne zmiany zachowań zakupowych, wzrost cen energii. Zostawienie takich okresów w danych treningowych bez oznaczenia oznacza, że model będzie ich oczekiwał ponownie.
Trzecia to kanibalizacja wewnątrz zbioru fraz. Popyt nie znika, tylko przenosi się na inne sformułowanie. Prognoza dla pojedynczej frazy potrafi więc pokazywać spadek przy zupełnie stabilnym popycie na kategorię — dlatego prognozuję grupy tematyczne, nie pojedyncze słowa.
Czwarta jest organizacyjna: prognoza, której nikt nie aktualizuje, po kwartale jest gorsza niż brak prognozy, bo ludzie wciąż się na nią powołują. Jeśli nie mamy jak jej odświeżać co miesiąc, lepiej zrobić prostszą.
Nie zaczynam od infrastruktury. Zaczynam od jednego arkusza i jednej kategorii produktowej.
Pobieram dane z Search Console przez interfejs programistyczny lub eksport, tak samo z Google Ads, dokładam kształt sezonu z Trendów i buduję najprostszą prognozę bazową. To wystarcza, żeby sprawdzić dwie rzeczy: czy w tych danych jest w ogóle powtarzalna sezonowość i czy ktokolwiek w firmie użyje wyniku do decyzji. Jeśli odpowiedź na którekolwiek z tych pytań brzmi „nie”, projekt się kończy i to jest dobry wynik — zaoszczędzone tygodnie.
Jeśli odpowiedź brzmi „tak”, dopiero wtedy przenoszę dane do hurtowni, dokładam model sezonowy, automatyzuję odświeżanie i podłączam wykres do raportu, który klient i tak otwiera. Sam raport buduję w Looker Studio — narzędziu, które do października nazywało się Data Studio.
Ostatnia uwaga, bardziej o postawie niż o technice. Uczenie maszynowe w tym zadaniu nie odpowiada na pytanie „ile będzie zapytań”. Odpowiada na pytanie „jak wyglądałby najbliższy rok, gdyby zachował się jak poprzednie”. Wartość tej odpowiedzi jest duża, ale całą różnicę robi to, czy ktoś pamięta, że takie założenie zostało zrobione.
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 |