Прогнозирането е техника, която използва исторически данни и събития за изграждане на прогнози за бъдещи тенденции, потенциални бедствия и цялостното поведение на всеки обект. Прогнозирането може да се използва като вероятностна подкрепа за анализ на решения, за оценка на разходи, приходи и бюджетни планове.
Прогнозирането в бизнеса може да бъде разделено на две отделни категории: качествено прогнозиране и количествено прогнозиране .
За повече информация можете да погледнете Investopedia’s Financial Forecasting първо.
И двата вида прогнози показаха много обещания и успяха да създадат подобрения в бизнеса за много субекти.
Ако искате да научите повече за това как прогнозирането може да повлияе на пазарните решения, добро място е да започнете Пазари за прогнози: основи, проекти и приложения от Stefan Luckner et al.
Един проблем, с който можем да се справим, използвайки количествено прогнозиране, е прогнозирането на търсенето или прогнозирането на продажбите.
Да предположим, че сте търговец на дребно, управляващ много магазини, и всеки магазин има статична система за попълване на стокови запаси, базирана на човешки решения, които се основават на определени събития като сезони и пазарни тенденции.
Понякога ще срещнете един от тези проблеми, които могат да доведат до два основни проблема:
Според проучване на IHL Group на 600 домакинства и търговци на дребно , търговците на дребно губят близо 1 трилион долара продажби годишно поради проблеми с изчерпаните наличности.
„Купувачите се сблъскват с изчерпани количества при всяко трето пътуване до пазаруване, според доклада, изпратен по имейл до Retail Dive. При търговците на дребно с храни, наркотици и масови продукти те срещат артикули, които не са на склад, при всяко пето пътуване, в универсалните магазини и специализираните търговци това е всеки четвърти, а в магазините за електроника всеки трети. ' IHL Group намерена.
Както изглежда, и двата проблема водят до намаляване на приходите, защото или сме загубили вероятност за продажба, или сме инвестирали повече пари в непродадени продукти, което означава, че разполагаме с активи, които скоро няма да генерират приходи, за да компенсират разходите си.
Това очевидно е в ущърб на паричния поток на предприятието и за справяне с този риск са ни необходими две неща:
И така, въпросът е: Какви са индикациите, че трябва да приемете AI във вашата компания, за да подпомогнете процеса на прогнозиране?
За да вземете това решение, се нуждаете от експертни отговори на следните въпроси:
Отговорите на тези въпроси трябва да са ясен сигнал, който ви помага да решите дали да започнете да използвате AI във вашите стратегии за прогнозиране или не.
AI показа страхотни резултати в превъзхождането на прогнозирането на хората в много компании, което позволява по-бързо вземане на решения и планиране, както и по-надеждни стратегии за управление на риска. Това е причината топ компаниите възприемат AI в своето планиране .
Когато се справя с проблем за прогнозиране на търсенето, методът за прогнозиране на времевите редове може да се използва за прогнозиране на продажбите за всеки продукт, като по този начин позволява на компаниите да оптимизират попълването на запасите и да сведат до минимум появата на гореспоменатите проблеми. Много модели обаче се борят с прогнозирането на ниво отделен продукт или ниво на категория продукти, поради липсата на необходимите функции. И така, въпросът е: Как можем да го накараме да работи и да се възползваме максимално от нашите данни?
За търговците в реалния живот тези проблеми са всичко друго, но не и тривиални. Или имате 1000+ продукта, които въвеждат много нелинейност в набора от данни и многовариантни зависимости , или трябва да бъдете предупредени за размера на прогнозираното попълване на запасите с много предварително известие, за да можете да го произведете или закупите или да направите каквото е необходимо, за да го придобиете, докато се материализира търсенето.
В този случай класическите модели харесват АРИМА и ВИЕ ЛИ СТЕ няма да се представи и ще ни трябва по-надежден метод като RNN и XGBoost , и затова се нуждаем от много създаване на функции, за да се справим с този проблем.
За да работи това, трябва:
Заради тази статия ще вземем XGBoost като пример за такъв модел.
Наборът от функции, необходими за този проблем, е класифициран в четири основни групи:
За разлика от дълбоко обучение (повтаряща се невронна мрежа) , моделите за машинно обучение не могат да получат дългосрочни или краткосрочни зависимости в рамките на времеви ред, без да създават ръчен слой за извличане на функции за Време за среща особеност.
Много функции могат да бъдат извлечени от датата, като:
Много подходи просто извличат тези времеви характеристики и ги използват като входни данни и модели на обучения, но може да се направи по-нататъшно инженерство. Както виждаме, характеристиките (ден, час, ден от седмицата) са периодични, което означава, че имат набор от повтарящи се стойности. Как може един модел да се справи с това?
Краткият отговор е, че не може, защото това, което моделът вижда, е, че час 00:00 е на 23 часа разстояние от 23:00, но всъщност е на един час път. Един от начините да се реши това е да се превърнат тези характеристики в циклична трансформация.
Използвайки концепцията за синус и косинус, или векторно представяне, човек може да преобразува всеки час (24 часа) в ъгъл и използването на греха и косинуса от тях ще улесни много за модела да открие реалните пропорции между часовете, независимо на периодичността.
Това ще премахне прекъсването, което се случва в периодичните времеви функции или всяка периодична функция.
За нашата статия ще използваме Примерен набор от данни на Superstore е намерен публично и се опитайте да предвидите целевите месечни продажби за определена категория продукти.
Също така ще използваме среда Python 3.7 със следните библиотеки:
Сега ще ви покажа как да изградите функция за преобразуване на функция за период и да тествате дали е била полезна или не.
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))
С това на място сме готови да тестваме дали добавената функция ще подобри производителността или не.
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)
Както виждаме, направихме регистрация 1p трансформация за нашата целева функция за продажби, защото тя е изкривена функция (обикновено не се разпространява).
Сега ще поставим 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
След това ще опитаме с нашата създадена функция.
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
Както виждаме, загубата се подобри от 0.43 RMSE на 0.33 RMSE.
Някои други свързани с времето функции, за които можете да помислите, в зависимост от вашия проблем, са:
Това е основната основна функция за въвеждане, необходима за прогнозиране на нашите продажби, така че как да извлечем максимума от данните за продажбите? Можем да постигнем това, като използваме концепцията за изоставане и автокорелация.
Характеристиките на изоставането са исторически записи за продажбите на продуктите. Например, ако вземем функция с 12 забавяния за месечни продажби като вход към нашия модел, за да прогнозираме продажбите за май 2020 г., това означава, че ще предоставим на модела записи с данни между май 2019 г. и април 2020 г. Това може да бъде наистина полезно.
Също така, тя може да бъде интерпретирана с помощта на графики за автокорелация, за да се провери доколко корелира целевата характеристика със своите изоставащи характеристики. Това също помага да се изберат само корелираните функции сред изоставащите функции, така че намаляваме използването на паметта и резервирането на функциите.
Ето как можем да добавим функции за забавяне в нашата рамка с данни:
for i in range(3): df[f'lag_{i+1}'] = df['Sales'].shift(i+1) df = df.dropna() df.head()
Тук избрах стойност на функция с три закъснения, която да бъде включена в нашия комплект за обучение. Тази функция е хиперпараметър - можете да го изберете въз основа на графиката за автокорелация или като изпробвате много стойности и просто изберете най-доброто в етапа на настройка.
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
Сега RMSE се подобри до 0,28, използвайки както функции за забавяне, така и циклични преобразувания.
Някои допълнителни функции, свързани с продажбите, които можете да добавите:
на какъв език е написан windows 10
Старшинство е концепция, въведена за присвояване на старшинство на нови артикули в магазин:
Прост аргумент е, че една от преките причини за нарастване и спад на продажбите са цените и промоциите. Цената е един от най-добрите начини за разграничаване на различните категории, подкатегории и супер-категории продукти.
Например, ако приемем, че на всеки продукт са присвоени категория и подкатегория, може да се създадат следните ценови характеристики:
Това обобщаване може да се извърши няколко пъти, като се използват много групировки по субект (ако приемем, че се стремим да прогнозираме месечното търсене), като например:
Също така могат да се добавят още функции, с изключение на Месечно групиране за изследване на поведението на цените като цяло.
Това не е толкова често срещано сред търговците на дребно и прогнозиращите продажби, но има голяма разлика в моделите за прогнозиране на продажбите. Наборите от данни за запасите съдържат основно инвентарни данни за всеки продукт, всеки ден във всеки магазин. От това можем да го комбинираме с данни за продажбите, за да получим месечен коефициент на оборот за всеки продукт. Това съотношение ще покаже колко бързо запасът от даден продукт се продава напълно и има две основни предимства:
За това са ви необходими ежедневни данни за запасите за всеки продукт, заедно с данните за продажбите и след това можете да изчислите коефициента на оборота на запасите, както следва:
Съвет: Тези обобщения се извършват въз основа на времеви диапазон. Например, ако работим по прогнозиране на месечните продажби, тогава ITO ще се изчислява като общи продажби през последния месец спрямо средната стойност на запасите през същия месец.
В обобщение, прогнозирането на продажбите може да помогне на фирмите да увеличат приходите и да реализират печалба, при условие че разполагат с правилните конвейери за данни и използват правилните методи за инженерни характеристики. Тази статия беше пробна версия, за да покаже, че всички видове данни могат да бъдат полезни при решаването на този проблем.
Всяка компания трябва да проучи дали AI е необходим за нейните проблеми с прогнозирането, а в случай че е необходимо, ще се нуждае от експертни инженери по AI и съвети от инженери за машинно обучение, за да създаде собствена система за прогнозиране на продажбите.
Ако сте компания / търговец на дребно, желаещи да приложите тази техника за прогнозиране на продажбите, започнете, като съберете всички данни, които можете, особено ежедневни продажби, дневни инвентаризации и ежедневни транзакции.
След като притежавате тези данни, можете да ги използвате, за да увеличите приходите си и да оптимизирате стратегиите за попълване на запасите, позволявайки на вашия бизнес да постигне възможно най-високата печалба с наличните ресурси, както е показано в няколко примера по-горе, както и практики за прогнозиране на продажбите, използвани от водещи търговци на дребно .
Наборът от данни
Допълнително четене относно финансовото прогнозиране
Чрез събиране на данни за продажбите, запасите, цените, създаване на база данни за тях, предварителна обработка и извършване на инженеринг на функции за създаване на обясними функции, след това прилагане на метод за прогнозиране като XGBoost или RNN.
Процесът на прогнозиране на продажбите е разделен на четири стъпки: събиране на данни, предварителна обработка на данни, инженеринг на функции и моделиране на данни.
ARIMA и ETS са идеални за общи продажби, но на ниво продукт, нещо като XGBoost или RNN се представя по-добре.
Тъй като решава двата основни проблема за търсенето и продажбите, които са прекомерните проблеми със запасите и изчерпаността. Това води до по-високи приходи и по-добър паричен поток.
Потенциалът за продажби отговаря на въпроса: „Колко бройки от определена марка могат да бъдат продадени?“ От друга страна, прогнозата за продажбите отговаря на въпроса: „Колко бройки ще бъдат продадени?“