Ennustaminen on tekniikka, joka käyttää historiallisia tietoja ja tapahtumia arvioiden rakentamiseen tulevista trendeistä, mahdollisista katastrofeista ja minkä tahansa kohteen kokonaiskäyttäytymisestä. Ennustamista voidaan käyttää todennäköisyystukena päätöksentekoon, arvioitaessa menoja, tuloja ja budjettisuunnitelmia.
Ennuste liiketoiminnassa voidaan jakaa kahteen erilliseen luokkaan: laadullinen ennuste ja määrällinen ennuste .
Saat lisätietoja katsomalla Investopedian taloudellinen ennuste ensimmäinen.
Molemmat ennustetyypit ovat osoittaneet paljon lupauksia ja onnistuneet luomaan liiketoiminnan parannuksia monille yksiköille.
Jos haluat oppia lisää siitä, miten ennustaminen voi vaikuttaa markkinapäätöksiin, on hyvä aloittaa Ennustemarkkinat: perusteet, mallit ja sovellukset Stefan Luckner et ai.
Yksi ongelma, johon voimme puuttua määrällisen ennustamisen avulla, on kysynnän ennustaminen tai myynnin ennustaminen.
Oletetaan, että olet jälleenmyyjä, jolla on paljon kauppoja, ja jokaisessa kaupassa on staattinen tuotevarastojärjestelmä, joka perustuu ihmisten päätöksiin, jotka perustuvat tiettyihin tapahtumiin, kuten vuodenajat ja markkinatrendit.
Toisinaan törmäät johonkin näistä ongelmista, jotka voivat johtaa kahteen suureen ongelmaan:
Mukaan IHL-ryhmän kysely, johon osallistui 600 kotitaloutta ja jälleenmyyjää vähittäiskauppiaat menettävät lähes biljoonan dollarin myynnin vuosittain loppuunmyytyjen ongelmien takia.
'Ostajat kohtaavat loppuunmyytyjä varastoja niin usein kuin joka kolmas ostosmatkalla Retail Diveen lähetetyn raportin mukaan. Elintarvike-, lääke- ja joukkokaupoissa he kohtaavat loppuunmyytyjä tuotteita joka viides matka, tavarataloissa ja erikoisliikkeissä joka neljäs ja elektroniikkakaupoissa joka kolmas. ' IHL-ryhmä löytyi.
Vaikuttaa siltä, että molemmat ongelmat johtavat tulojen laskuun, koska joko menetimme myyntitodennäköisyyden tai investoimme enemmän rahaa myymättömiin tuotteisiin, mikä tarkoittaa, että meillä on omaisuutta, joka ei tuota tuloja lähiaikoina korvaamaan niiden kustannukset.
Tämä on selvästi haitallista yhteisön kassavirralle, ja tämän riskin poistamiseksi tarvitsemme kahta asiaa:
Joten kysymys on: Mitkä ovat viitteitä siitä, että sinun on käytettävä tekoälyä yrityksessäsi ennustamisprosessin helpottamiseksi?
Tarvitset tämän päätöksen tekemiseen asiantuntijavastauksia seuraaviin kysymyksiin:
Vastausten näihin kysymyksiin pitäisi olla selkeä signaali, joka auttaa sinua päättämään, aloitetaanko tekoälyn käyttäminen ennusteesi strategioihin vai ei.
Tekoäly on osoittanut hyviä tuloksia inhimillisten ennusteiden menestymisessä monissa yrityksissä, mikä mahdollistaa nopeamman päätöksenteon ja suunnittelun sekä luotettavammat riskienhallintastrategiat. Tämän vuoksi huippuyritykset käyttävät tekoälyä suunnittelussaan .
Kysynnän ennustamisongelman käsittelyssä aikasarjojen ennustemenetelmää voidaan käyttää kunkin tuotteen myynnin ennustamiseen, mikä antaa yrityksille mahdollisuuden optimoida varastojen täydennys ja minimoida edellä mainittujen ongelmien esiintyminen. Kuitenkin monet mallit kamppailevat ennustamisen kanssa yksittäisellä tuotetasolla tai tuoteryhmäluokalla tarvittavien ominaisuuksien puuttumisen vuoksi. Joten kysymys kuuluu: Kuinka voimme saada sen toimimaan ja hyödyntämään datamme parhaalla mahdollisella tavalla?
Tosielämän jälleenmyyjille nämä ongelmat ovat kaikkea muuta kuin triviaalia. Sinulla on joko yli 1000 tuotetta, jotka tuovat paljon epälineaarisuutta aineistoon ja monimuuttujariippuvuudet tai sinua on varoitettava suunnitellun varastojen täydennyksen määrästä etukäteen, jotta pystyt tuottamaan tai ostamaan sitä tai tekemään mitä tarvitset sen hankkimiseen mennessä, kun kysyntä toteutuu.
Tässä tapauksessa klassiset mallit pitävät ARIMA ja OLETKO ei toimi, ja tarvitsemme vankemman menetelmän, kuten RNN: t ja XGBoost , ja siksi tarvitsemme paljon ominaisuuksien luomista ongelman ratkaisemiseksi.
Jotta tämä toimisi, meidän on:
Tämän artikkelin vuoksi otamme XGBoostin esimerkkinä tällaisesta mallista.
Tämän ongelman edellyttämät ominaisuudet on jaettu neljään pääryhmään:
Toisin kuin syvä oppiminen (toistuva hermoverkko) , koneoppimismallit eivät voi saada pitkä- tai lyhytaikaisia riippuvuuksia aikasarjassa luomatta manuaalista ominaisuuksien poimintakerrosta treffiaika ominaisuus.
Päivämäärästä voidaan poimia monia ominaisuuksia, kuten:
Monet lähestymistavat vain poimivat nuo aikaominaisuudet ja käyttävät niitä syötteinä ja junamalleina, mutta jatkosuunnittelua voidaan tehdä. Kuten voimme nähdä, ominaisuudet (päivä, tunti, viikonpäivä) ovat jaksollisia, mikä tarkoittaa, että niillä on useita toistuvia arvoja. Kuinka malli voi käsitellä tätä?
Lyhyt vastaus on, että se ei voi, koska malli näkee, että tunti 00:00 on 23 tunnin päässä 23:00: sta, mutta itse asiassa se on tunnin päässä. Yksi tapa ratkaista tämä on muuntaa nämä ominaisuudet sykliseksi muunnokseksi.
Käyttämällä sini- ja kosini- tai vektoriesityksen käsitettä jokainen tunti (24 tuntia) voidaan muuntaa kulmaksi, ja niiden syntiä ja kosinia käyttämällä mallin on paljon helpompaa tunnistaa todelliset suhteet tuntien välillä riippumatta jaksottaisuudesta.
Tämä poistaa jaksottaisten aikaominaisuuksien tai minkä tahansa jaksollisen ominaisuuden epäjatkuvuuden.
Artikkelissamme käytämme Näyte Superstore-tietojoukosta, joka löytyy julkisesti ja yritä ennustaa tietyn tuoteryhmän kuukausittainen tavoitemyynti.
Lisäksi käytämme Python 3.7 -ympäristöä seuraavien kirjastojen kanssa:
Nyt näytän sinulle, kuinka rakennetaan ajanjakson ominaisuuden muunnosfunktio ja testaan, oliko siitä hyötyä vai ei.
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))
Kun tämä on paikallaan, olemme valmiita testaamaan, parantaako lisätty ominaisuus suorituskykyä vai ei.
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)
Kuten näemme, olemme tehneet log 1p -muunnoksen kohdemyyntiominaisuudellemme, koska se on vinossa ominaisuus (ei normaalisti jaettu).
Nyt sovitamme dataan XGBoost-regressorin.
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
Seuraavaksi yritämme luomamme ominaisuuden kanssa.
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
Kuten voimme nähdä, tappio parani 0,43 RMSE: stä 0,33 RMSE: hen.
Joitakin muita aikaan liittyviä ominaisuuksia, joita voit miettiä ongelmastasi riippuen, ovat:
Tämä on tärkein ydinominaisuus, jota tarvitaan myynnin ennustamiseen, joten kuinka saada eniten hyötyä myyntitiedoista? Voimme saavuttaa tämän käyttämällä viiveen ja autokorrelaation käsitettä.
Viiveominaisuudet ovat tuotteiden historiallisia myyntitietueita. Esimerkiksi, jos otimme 12 viive -ominaisuuden kuukausimyynnistä mallimme pohjana ennustamaan toukokuun 2020 myyntiä, se tarkoittaa, että toimitamme mallille tietueet toukokuun 2019 ja huhtikuun 2020 välillä. Tämä voi olla todella hyödyllistä.
Se voidaan myös tulkita autokorrelaatiokaavioiden avulla tarkistaakseen, kuinka kohdeominaisuus korreloi sen viivästyneiden ominaisuuksien kanssa. Tämä auttaa myös valitsemaan vain vastaavat toiminnot viivästyneiden ominaisuuksien joukosta, joten pienennämme muistin käyttöä ja ominaisuuksien redundanssia.
Näin voimme lisätä viiveominaisuuksia datakehykseen:
for i in range(3): df[f'lag_{i+1}'] = df['Sales'].shift(i+1) df = df.dropna() df.head()
Täällä valitsin kolmen viiveen ominaisuuden arvon sisällytettäväksi harjoittelusarjaan. Tämä ominaisuus on hyperparametri - voit valita sen autokorrelaatiokaavion perusteella tai kokeilemalla monia arvoja ja valitsemalla parhaiten viritysvaiheessa.
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
Nyt RMSE on parantunut arvoon 0,28 käyttämällä sekä viiveominaisuuksia että syklisiä muunnoksia.
Joitakin myyntiin liittyviä lisäominaisuuksia, jotka voit lisätä:
Vanhuus on konsepti, jonka tarkoituksena on antaa ikäraja myymälän uusille tuotteille:
Yksinkertainen argumentti on, että yksi myynnin nousun ja laskun suorista syistä on hinta ja myynninedistäminen. Hinta on yksi parhaista tavoista erottaa eri tuoteryhmät, alaluokat ja superluokat.
Oletetaan esimerkiksi, että kullekin tuotteelle on määritetty luokka ja alaluokka, voidaan luoda seuraavat hintaominaisuudet:
Tämä yhdistäminen voidaan suorittaa useita kertoja käyttämällä monia ryhmittelyjä aiheittain (olettaen, että pyrimme ennustamaan kuukausittaisen kysynnän), kuten:
Myös muita ominaisuuksia voidaan lisätä, lukuun ottamatta Kuukausittain ryhmittely hintojen käyttäytymisen tutkimiseksi kokonaisuudessaan.
Tämä ei ole niin yleinen vähittäiskauppiaiden ja myyntiennusteiden keskuudessa, mutta sillä on paljon eroja myynnin ennustemalleissa. Varastotiedoissa on pääasiassa kunkin tuotteen varastotiedot päivittäin jokaisessa kaupassa. Tästä voimme yhdistää sen myyntitietoihin saadaksemme kuukausittaisen liikevaihdon kullekin tuotteelle. Tämä suhde osoittaa, kuinka nopeasti tuotteen varastot myydään kokonaan, ja sillä on kaksi pääetua:
Tätä varten tarvitset jokaisen tuotteen päivittäiset varastotiedot sekä myyntitiedot ja voit sitten laskea varastojen liikevaihtosuhteen seuraavasti:
Vihje: Nämä yhdistelmät tehdään ajanjakson perusteella. Jos esimerkiksi ennustamme kuukausittaista myyntiä, ITO lasketaan viimeisen kuukauden kokonaismyynninä ja saman kuukauden keskimääräisenä varaston arvona.
Yhteenvetona voidaan todeta, että myynnin ennustaminen voi auttaa yrityksiä lisäämään tuloja ja tuottamaan voittoa, jos niillä on oikeat dataputket ja käytetään oikeita piirustekniikan menetelmiä. Tämä artikkeli oli kokeilu sen osoittamiseksi, että kaikenlaisista tiedoista voi olla hyötyä ongelman ratkaisemisessa.
Jokaisen yrityksen tulisi tutkia, tarvitaanko tekoälyä ennusteongelmiinsa, ja siinä tapauksessa se tarvitsee asiantuntija-tekoälyinsinöörejä ja koneoppimisinsinöörien neuvoja oman myyntiennustejärjestelmän luomiseksi.
Jos olet yritys / jälleenmyyjä, joka haluaa soveltaa tätä myynnin ennakointitekniikkaa, aloita keräämällä kaikki mahdolliset tiedot, erityisesti päivittäinen myynti, päivittäinen varasto ja päivittäiset tapahtumat.
Kun sinulla on nämä tiedot, voit käyttää niitä tulojesi kasvattamiseen ja varastojen täydennysstrategioiden optimointiin, jolloin yrityksesi voi saada parhaan mahdollisen voiton käytettävissä olevilla resursseilla, kuten useat yllä olevat esimerkit osoittavat, sekä johtavien jälleenmyyjien käyttämiä myynnin ennustekäytäntöjä. .
Tietojoukko
Lisätietoa talousennusteista
Keräämällä myynti-, varasto-, hintatiedot, luomalla heille tietokanta, esikäsittelemällä ne ja suorittamalla ominaisuuksien suunnittelun selitettävien ominaisuuksien luomiseksi ja soveltamalla sitten ennustusmenetelmää, kuten XGBoost tai RNN.
Myynnin ennustamisprosessi on jaettu neljään vaiheeseen: tiedonkeruu, tietojen esikäsittely, ominaisuuksien suunnittelu ja tietojen mallintaminen.
ARIMA ja ETS ovat täydellisiä kokonaismyynnille, mutta tuotetasolla XGBoostin tai RNN: n kaltaiset ominaisuudet toimivat paremmin.
Koska se ratkaisee kaksi kysynnän ja myynnin pääongelmaa, jotka ovat liialliset varastot ja loppu-ongelmat. Tämä johtaa suurempiin tuloihin ja parempaan kassavirtaan.
Myyntimahdollisuudet vastaavat kysymykseen: 'Kuinka monta tietyn tuotemerkin yksikköä voitaisiin myydä?' Toisaalta myyntiennuste vastaa kysymykseen: 'Kuinka monta yksikköä myydään?'