Optymalizacja przychodów detalistów dzięki sztucznej inteligencji do prognozowania sprzedaży
Opublikowany: 2022-03-11Prognozowanie to technika wykorzystująca dane i zdarzenia historyczne do tworzenia szacunków dotyczących przyszłych trendów, potencjalnych katastrof i ogólnego zachowania dowolnego podmiotu. Prognozowanie może służyć jako probabilistyczne wsparcie analizy decyzji, szacowania wydatków, przychodów i planów budżetowych.
Prognozowanie w biznesie można podzielić na dwie odrębne kategorie: prognozowanie jakościowe i prognozowanie ilościowe .
- Prognozy jakościowe. Prognozowanie jakościowe dotyczy badań rynku i strategii rynkowych, dlatego jest bardziej ukierunkowane na ekspertów i pod wpływem czynników ludzkich. Zwykle ma na celu budowanie strategii krótkoterminowej.
- Prognozy ilościowe. Prognozowanie ilościowe wyklucza jakikolwiek czynnik ludzki. Zależy to tylko od danych historycznych posiadanych przez jednostkę i ma na celu przewidzenie, jakie niektóre czynniki, takie jak sprzedaż, ceny i inne aspekty finansowe, będą wyglądały w dłuższej perspektywie.
Aby uzyskać więcej informacji, zapoznaj się z podkładem prognoz finansowych Investopedia.
Oba rodzaje prognoz okazały się bardzo obiecujące i zdołały stworzyć usprawnienia biznesowe dla wielu podmiotów.
Jeśli chcesz dowiedzieć się więcej o tym, jak prognozowanie może wpływać na decyzje rynkowe, dobrym miejscem do rozpoczęcia jest Rynki prognoz: podstawy, projekty i aplikacje autorstwa Stefana Lucknera i in.
Jednym z problemów, który możemy rozwiązać za pomocą prognoz ilościowych, jest prognozowanie popytu lub prognozowanie sprzedaży.
Prognozowanie popytu i podejścia do prognozowania sprzedaży
Załóżmy, że jesteś sprzedawcą prowadzącym wiele sklepów, a każdy sklep ma statyczny system uzupełniania zapasów produktów oparty na ludzkich decyzjach opartych na określonych wydarzeniach, takich jak pory roku i trendy rynkowe.
Czasami napotkasz jeden z tych problemów, które mogą prowadzić do dwóch głównych problemów:
- Produkty przepełnione. Posiadanie znacznego zapasu produktu, który ma zostać sprzedany w określonym czasie, ale nie zostanie sprzedany.
- Produkty niedostępne. Możliwość sprzedaży produktu, ale niemożność, ponieważ produkt jest niedostępny.
Według ankiety przeprowadzonej przez IHL Group obejmującej 600 gospodarstw domowych i sprzedawców detalicznych, detaliści tracą rocznie prawie 1 bilion dolarów ze sprzedaży z powodu problemów z brakiem zapasów.
„Kupujący napotykają braki w magazynie nawet podczas jednej na trzy wyprawy na zakupy, zgodnie z raportem, który został przesłany pocztą elektroniczną do Retail Dive. W sklepach spożywczych, farmaceutycznych i masowych napotykają braki w magazynie podczas co piątej podróży, w domach towarowych i sklepach specjalistycznych – co czwarty, a w sklepach elektronicznych – co trzeci” – stwierdziła IHL Group.
Jak się wydaje, oba te problemy prowadzą do spadku przychodów, ponieważ albo straciliśmy prawdopodobieństwo sprzedaży, albo zainwestowaliśmy więcej pieniędzy w niesprzedane produkty, co oznacza posiadanie aktywów, które nie przyniosą w najbliższym czasie przychodów, aby zrekompensować ich koszty.
Jest to wyraźnie szkodliwe dla przepływów pieniężnych jednostki, a aby zaradzić temu ryzyku, potrzebujemy dwóch rzeczy:
- Więcej danych, które pomogą nam w podjęciu decyzji
- Zespół prognostyczny, który może przeprowadzać długoterminowe planowanie strategiczne dla systemów uzupełniania zapasów
Pytanie zatem brzmi: Jakie są przesłanki, że musisz wdrożyć sztuczną inteligencję w swojej firmie, aby wspomóc proces prognozowania?
Aby podjąć tę decyzję, potrzebujesz eksperckich odpowiedzi na następujące pytania:
- Czy przewidywanie twojego lejka sprzedaży jest trudne?
- Czy Twoje prognozy sprzedaży są niedokładne lub niewystarczająco dokładne (nawet jeśli masz dane historyczne)?
- Czy cierpisz z powodu braku lub przepełnienia zapasów?
- Czy nie jesteś w stanie wydobyć opisowych i wnioskujących spostrzeżeń z danych, które posiadasz, aby kierować decyzjami i planowaniem?
Odpowiedzi na te pytania powinny być jasnym sygnałem, który pomoże Ci zdecydować, czy zacząć wykorzystywać sztuczną inteligencję w swoich strategiach prognozowania, czy nie.
Jak sztuczna inteligencja może skorzystać na procesie prognozowania sprzedaży?
W wielu firmach sztuczna inteligencja wykazała świetne wyniki, przewyższając ludzkie prognozy, umożliwiając szybsze podejmowanie decyzji i planowanie, a także bardziej niezawodne strategie zarządzania ryzykiem. Dlatego najlepsze firmy wykorzystują sztuczną inteligencję w swoich planach.
W przypadku problemu prognozowania popytu metoda prognozowania szeregów czasowych może być wykorzystana do przewidywania sprzedaży każdego produktu, co pozwala firmom zoptymalizować zatowarowanie zapasów i zminimalizować występowanie wyżej wymienionych problemów. Jednak wiele modeli boryka się z prognozowaniem na poziomie pojedynczego produktu lub na poziomie kategorii produktów z powodu braku niezbędnych funkcji. Tak więc pytanie brzmi: jak możemy sprawić, by to działało i jak najlepiej wykorzystać nasze dane?
Dla prawdziwych sprzedawców te problemy nie są trywialne. Masz ponad 1000 produktów, które wprowadzają wiele nieliniowości w zbiorze danych i zależności wielowymiarowych, lub musisz zostać ostrzeżony o przewidywanej ilości uzupełnienia zapasów z dużym wyprzedzeniem, aby móc je wyprodukować lub kupić, lub rób wszystko, czego potrzebujesz, aby je zdobyć, zanim pojawi się zapotrzebowanie.
W tym przypadku klasyczne modele, takie jak ARIMA i ETS, nie będą działać i będziemy potrzebować bardziej niezawodnej metody, takiej jak RNN i XGBoost, i dlatego potrzebujemy dużo tworzenia funkcji, aby rozwiązać ten problem.
Aby to zadziałało, musimy:
- Zdobądź niezbędne funkcje wejściowe wymagane do wyjaśnienia różnorodności i różnorodności produktów.
- Kategoryzuj nasze dane, aby każda kategoria miała to samo zachowanie szeregu czasowego, a każda kategoria będzie rozwiązywana za pomocą samodzielnego modelu.
- Trenuj nasze modele na podstawie zdobytych skategoryzowanych funkcji wejściowych.
Na potrzeby tego artykułu jako przykład takiego modelu weźmiemy XGBoost.
Funkcje wymagane w modelach prognozowania sprzedaży
Zestaw cech potrzebnych do tego problemu dzieli się na cztery główne grupy:
- Funkcje związane z czasem
- Funkcje związane ze sprzedażą
- Funkcje związane z ceną
- Funkcje związane z zapasami
Funkcje związane z czasem
W przeciwieństwie do uczenia głębokiego (Recurrent Neural Network) modele uczenia maszynowego nie mogą uzyskać długoterminowych lub krótkoterminowych zależności w ramach szeregów czasowych bez tworzenia ręcznej warstwy wyodrębniania funkcji dla funkcji daty/godziny.
Z tej daty można wyodrębnić wiele funkcji, takich jak:
- Rok
- Dzień
- Godzina
- Weekend lub dzień powszedni (niezależnie od tego, czy dzień jest dniem tygodnia, czy weekendem)
- Dzień tygodnia
Wiele podejść po prostu wyodrębnia te cechy czasu i wykorzystuje je jako dane wejściowe i modele szkoleniowe, ale można przeprowadzić dalszą inżynierię. Jak widać, cechy (dzień, godzina, dzień tygodnia) są okresowe, co oznacza, że mają szereg powtarzalnych wartości. Jak modelka może sobie z tym poradzić?
Krótka odpowiedź brzmi: nie może, ponieważ model widzi, że godzina 00:00 to 23 godziny od 23:00, ale w rzeczywistości jest to jedna godzina drogi. Jednym ze sposobów rozwiązania tego problemu jest przekształcenie tych funkcji w transformację cykliczną.
Korzystając z koncepcji sinusa i cosinusa lub reprezentacji wektorowej, każdą godzinę (24 godziny) można przekształcić w kąt, a użycie ich sinusa i cosinusa znacznie ułatwi modelowi wykrycie rzeczywistych proporcji między godzinami, niezależnie od okresowości.
Spowoduje to usunięcie nieciągłości występujących w funkcjach okresowych lub jakiejkolwiek funkcji okresowej.
W naszym artykule użyjemy zestawu danych Sample Superstore znalezionego publicznie i spróbujemy przewidzieć docelową miesięczną sprzedaż dla określonej kategorii produktów.
Wykorzystamy również środowisko Python 3.7 z następującymi bibliotekami:
- NumPy
- Pandy
- XGBoost
- Wyczyść
Teraz pokażę Ci, jak zbudować funkcję konwersji funkcji okresu i sprawdzić, czy była pomocna, czy nie.

def convert_periodic(val,period): theta = 2*np.pi*val/period sin_period = np.sin(theta) cos_period = np.cos(theta) return sin_period,cos_period def convert_month(x): return convert_periodic(x,12) df['sin_month'], df['cos_month'] = zip(*df['month'].map(convert_month))
Mając to na miejscu, jesteśmy gotowi do przetestowania, czy dodana funkcja poprawi wydajność, czy nie.
X = df.drop(['Order Date','Sales','sin_month', 'cos_month'],axis = 1) y = np.log1p(df['Sales']) X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.2, shuffle=False)
Jak widać, dokonaliśmy transformacji log 1p dla naszej docelowej funkcji sprzedaży, ponieważ jest to funkcja przekrzywiona (nie dystrybuowana normalnie).
Teraz dopasujemy do danych regresor XGBoost.
y_pred = model.predict(X_test) print(f'Loss without cyclic conversion on testing set is {sqrt(mean_squared_error(y_pred,y_test))}') Loss without cyclic conversion on testing set is 0.4313676193485837
Następnie spróbujemy z naszą utworzoną funkcją.
X = df.drop(['Order Date','Sales'],axis = 1) y = np.log1p(df['Sales']) X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.2, shuffle=False) y_pred = model.predict(X_test) print(f'Loss with cyclic conversion on testing set is {sqrt(mean_squared_error(y_pred,y_test))}') Loss with cyclic conversion on testing set is 0.33868030449130826
Jak widać, strata poprawiła się z 0,43 RMSE do 0,33 RMSE.
Niektóre inne funkcje związane z czasem, o których możesz pomyśleć, w zależności od problemu, to:
- Liczba miesięcy odkąd przedmiot był w sklepie
- Liczba dni od ostatniej sprzedaży
Funkcje związane ze sprzedażą
Jest to główna podstawowa funkcja wejściowa potrzebna do przewidywania naszej sprzedaży, więc jak najlepiej wykorzystać dane sprzedażowe? Możemy to osiągnąć za pomocą koncepcji opóźnienia i autokorelacji.
Cechy opóźnień to historyczne rekordy sprzedaży produktów. Na przykład, jeśli przyjęliśmy funkcję 12 opóźnień dla miesięcznej sprzedaży jako dane wejściowe do naszego modelu w celu prognozowania sprzedaży na maj 2020 r., oznacza to, że dostarczymy modelowi rekordy danych między majem 2019 r. a kwietniem 2020 r. To może być naprawdę pomocne.
Można go również interpretować za pomocą wykresów autokorelacji, aby sprawdzić, jak skorelowana jest cecha docelowa z jej cechami opóźnionymi. Pomaga to również wybrać tylko skorelowane funkcje spośród funkcji opóźnionych, dzięki czemu zmniejszamy zużycie pamięci i redundancję funkcji.
W ten sposób możemy dodać funkcje opóźnień do naszej ramki danych:
for i in range(3): df[f'lag_{i+1}'] = df['Sales'].shift(i+1) df = df.dropna() df.head()
Tutaj wybrałem wartość funkcji trzech opóźnień, która ma być zawarta w naszym zestawie szkoleniowym. Ta funkcja jest hiperparametrem — możesz ją wybrać na podstawie wykresu autokorelacji lub próbując wielu wartości i wybierając najlepszą na etapie strojenia.
X = df.drop(['Order Date','Sales'],axis = 1) y = np.log1p(df['Sales']) X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.2, shuffle=False) y_pred = model.predict(X_test) print(f'Loss with lag features on testing set is {sqrt(mean_squared_error(y_pred,y_test))}') Loss with lag and aggregated sales features on testing set is 0.2862175857169188
Teraz RMSE poprawiło się do 0,28, wykorzystując zarówno funkcje opóźnień, jak i cykliczne konwersje.
Niektóre dodatkowe funkcje związane ze sprzedażą, które możesz dodać:
- Ułamek sprzedanych przedmiotów (ułamek sprzedanych przedmiotów w całkowitej sprzedaży w sklepie)
- Częstotliwość wyprzedaży dla kategorii przedmiotu
- Dodanie pojęcia stażu pracy
Staż to pojęcie wprowadzone w celu przypisania poziomu stażu do nowych pozycji w sklepie:
- Staż 0: przedmioty nowe w firmie
- Starszeństwo 1: przedmioty nigdy nie sprzedawane w tym sklepie, ale sprzedawane w innych sklepach firmy
- Starszeństwo 2: przedmioty, które były wcześniej sprzedawane w tym sklepie
Funkcje związane z ceną
Prostym argumentem jest to, że jedną z bezpośrednich przyczyn wzrostu i spadku sprzedaży są ceny i promocje. Cena to jeden z najlepszych sposobów na rozróżnienie różnych kategorii, podkategorii i superkategorii produktów.
Przykładowo, zakładając, że do każdego produktu została przypisana kategoria i podkategoria, można stworzyć następujące cechy cenowe:
- (Średnia, maks., minimalna, mediana) ceny w całej kategorii
- (Średnia, Maks., Min., Mediana) ceny w podkategorii
- Porównania między tymi statystykami, takie jak różnica między każdą statystyką zarówno w kategorii, jak i podkategorii
Ta agregacja może być wykonywana kilka razy przy użyciu wielu grupowań tematycznych (przy założeniu, że chcemy przewidywać miesięczne zapotrzebowanie), takich jak:
- Miesięczny, Sklep, kategoria
- Miesięczny, Sklep, podkategoria
- Miesięczny, sklep, przedmiot, kategoria
- Miesięczny, Sklep, Przedmiot, podkategoria
Ponadto można dodać więcej funkcji, z wyjątkiem grupowania miesięcznego , aby zbadać ogólne zachowanie cen.
Funkcje związane z zapasami
Ten nie jest tak powszechny wśród sprzedawców detalicznych i prognostów sprzedaży, ale ma duże znaczenie w modelach prognozowania sprzedaży. Zbiory danych magazynowych zawierają głównie dane inwentaryzacyjne każdego produktu, codziennie w każdym sklepie. Na tej podstawie możemy połączyć je z danymi sprzedażowymi, aby uzyskać miesięczny wskaźnik obrotu dla każdego produktu. Ten stosunek wskaże, jak szybko zapasy produktu zostaną całkowicie sprzedane i ma dwie główne zalety:
- Może pomóc modelowi prognozować sprzedaż na podstawie aktualnego poziomu zapasów.
- Może nam pomóc wykorzystać tę wartość do grupowania produktów w produkty wolno, średnio i szybko rotujące. Takie grupowanie pomoże nam w podejmowaniu decyzji i modelowaniu.
W tym celu potrzebne są dzienne dane magazynowe dla każdego produktu wraz z danymi sprzedażowymi, a następnie można obliczyć wskaźnik rotacji zapasów w następujący sposób:
Wskazówka: te agregacje są wykonywane na podstawie zakresu czasu. Na przykład, jeśli pracujemy nad prognozowaniem miesięcznej sprzedaży, ITO będzie obliczane jako całkowita sprzedaż w ostatnim miesiącu w stosunku do średniej wartości zapasów w tym samym miesiącu.
Prognozowanie sprzedaży może zmienić dane w okazję
Podsumowując, prognozowanie sprzedaży może pomóc firmom zwiększyć przychody i osiągnąć zysk, pod warunkiem, że mają odpowiednie potoki danych i stosują właściwe metody inżynierii funkcji. Ten artykuł był próbą wykazania, że wszelkiego rodzaju dane mogą być przydatne w rozwiązaniu tego problemu.
Każda firma powinna zbadać, czy sztuczna inteligencja jest potrzebna do rozwiązywania problemów z prognozowaniem, a jeśli tak, będzie potrzebować ekspertów inżynierów AI i porad inżynierów uczenia maszynowego, aby stworzyć własny system prognozowania sprzedaży.
Jeśli jesteś firmą/sprzedawcą chcącym zastosować tę technikę prognozowania sprzedaży, zacznij od zebrania wszystkich możliwych danych, w szczególności dziennej sprzedaży, codziennych zapasów i codziennych transakcji.
Gdy już zdobędziesz te dane, możesz je wykorzystać do zwiększenia przychodów i optymalizacji strategii uzupełniania zapasów, co pozwoli Twojej firmie osiągnąć najwyższy możliwy zysk dzięki dostępnym zasobom, jak pokazano na kilku przykładach powyżej, a także praktykach prognozowania sprzedaży stosowanych przez wiodących detalistów .
Bibliografia:
Zbiór danych
Dalsza lektura na temat prognoz finansowych