Valdage ajaseria ennustamine Pythoniga. See põhjalik juhend hõlmab kõike ARIMA-st ja SARIMA-st masinõppeni ja LSTM-ideni täpse ennustava analüüsi jaoks.
Pythoni ennustav analüüs: põhjalik sukeldumine ajaseria ennustamisse
Meie andmepõhises maailmas ei ole tuleviku ennustamise oskus enam müstiline kunst, vaid kriitiline äri funktsioon. Alates müügi prognoosimisest globaalses jaekettis kuni energiatarbimise ennustamiseni nutikates linnades on tulevaste suundumuste ennetamine võtmetähtsusega konkurentsieelis. Selle ennustava jõu keskmes on ajaseria ennustamine ning kaasaegsete andmeteadlaste valik on Python.
See põhjalik juhend viib teid läbi ajaseria ennustamise maailma, kasutades Pythonit. Alustame põhitõdedega, uurime klassikalisi statistilisi mudeleid, süüvime kaasaegsesse masinõppesse ja süvaõppetehnikatesse ning varustame teid teadmistega, et luua, hinnata ja rakendada usaldusväärseid ennustusmudeleid. Olenemata sellest, kas olete andmeanalüütik, masinõppe insener või ärijuht, pakub see artikkel teile praktilise teekaardi ajalooliste andmete muutmiseks tegevusvalmis tulevikku suunatud teadmiste saamiseks.
Ajaseria andmete põhitõdede mõistmine
Enne mudelite ehitamist peame kõigepealt mõistma oma andmete unikaalset olemust. Ajaseria on andmepunktide jada, mis on kogutud järjestikustel, võrdselt jaotatud ajahetkedel. See ajaline sõltuvus on see, mis muudab sellega töötamise nii väljakutseid esitavaks kui ka põnevaks.
Mis teeb ajaseria andmed eriliseks?
Ajaseria andmed võib tavaliselt jagada neljaks põhielemendiks:
- Trend: Andmete aluseks olev pikaajaline suund. Kas see üldiselt suureneb, väheneb või jääb aja jooksul püsivaks? Näiteks nutitelefonide globaalne kasutuselevõtt on näidanud järjepidevat tõusutrendi üle kümne aasta.
- Hooajalisus: Ennustatavad, korduvad mustrid või kõikumised, mis esinevad fikseeritud ajavahemike järel. Mõelge jaemüügi müügi haripunktidele pühadehooajal igal aastal või veebisaidi liikluse suurenemisele tööpäevadel.
- Tsüklilisus: Mustrid, mis ei ole fikseeritud perioodiga, mis on sageli seotud laiemate majandus- või äri tsüklitega. Need tsüklid on pikemad ja muutlikumad kui hooajalised mustrid. Mitmeaastane tõus ja langus äri tsükkel on klassikaline näide.
- Ebakorrapärasus (või müra): Andmete juhuslik, ettearvamatu komponent, mis jääb üle pärast trendi, hooajalisuse ja tsüklite arvestamist. See esindab süsteemi sisemist juhuslikkust.
Stationaarsuse tähtsus
Üks olulisemaid mõisteid klassikalises ajaseria analüüsis on stationaarsus. Ajaseria loetakse statsionaarseks, kui selle statistilised omadused — täpsemalt keskmine, dispersioon ja autokorrelatsioon — on aja jooksul konstantsed. Lihtsamalt öeldes on statsionaarne seria see, mille käitumine aja jooksul ei muutu.
Miks see nii oluline on? Paljud traditsioonilised ennustusmudelid, nagu ARIMA, on üles ehitatud eeldusel, et ajaseria on statsionaarne. Need on loodud modelleerima protsessi, mis on statistilises mõttes stabiilne. Kui seria on mittestatsionaarne (nt sellel on selge trend), on mudeli võime täpseid ennustusi teha tõsiselt kahjustatud.
Õnneks saame sageli muuta mittestatsionaarse seeria statsionaarseks selliste tehnikatega nagu diferentseerimine (lahutades eelmise vaatluse praegusest) või logaritmiliste või ruutjuure teisenduste rakendamine.
Pythoni keskkonna seadistamine ennustamiseks
Pythoni võimsus tuleneb selle tohutust avatud lähtekoodiga teekondest. Ajaseria ennustamiseks on mõned hädavajalikud.
Hädavajalikud teegid, mida vajate
- pandas: Andmete manipuleerimise ja analüüsi nurgakivi Pythonis. Selle võimas DataFrame'i objekt ja spetsiaalsed ajaseria funktsioonid on hädavajalikud.
- NumPy: Teadusliku arvutamise põhiline pakett, mis pakub tuge suurtele, mitmemõõtmelistele massiividele ja maatriksitele.
- Matplotlib & Seaborn: Andmete visualiseerimise teegid. Ajaseria graafikute loomine on esimene samm selle mustrite mõistmisel.
- statsmodels: Statistilise modelleerimise jõujaam. See pakub klasse ja funktsioone paljude erinevate statistiliste mudelite, sealhulgas klassikaliste ajaseria mudelite (nt ARIMA ja SARIMA) hindamiseks.
- scikit-learn: Kõige populaarsem teek üldotstarbeliseks masinõppeks. Me kasutame seda andmete eeltöötluseks, funktsioonide konstrueerimiseks ja ML-mudelite rakendamiseks ennustusprobleemidele.
- Prophet: Meta (varem Facebook) poolt arendatud teek on loodud ennustamise hõlbustamiseks ja juurdepääsetavaks muutmiseks, eriti äri-seotud ajaseriate puhul, millel on tugevad hooajalised mõjud.
- TensorFlow & Keras / PyTorch: Need on süvaõppe raamistikud, mida kasutatakse keerukate mudelite, nagu LSTM-id, ehitamiseks, mis võivad järjestikustes andmetes jäädvustada väga keerulisi, mittelineaarseid mustreid.
Andmete laadimine ja ettevalmistamine
Andmete ettevalmistamine on kriitiline esimene samm. Enamik ajaseria andmeid on sellistes formaatides nagu CSV- või Exceli failid. Kasutades pandas, saame need andmed laadida ja analüüsimiseks seadistada. Kõige olulisem samm on veenduda, et teie andmetel on õige DatetimeIndex.
import pandas as pd
# Laadi andmekogum
# Eeldame, et 'data.csv' sisaldab kahte veergu: 'Kuupäev' ja 'Müük'
df = pd.read_csv('data.csv')
# Muuda veerg 'Kuupäev' datetime objektiks
df['Kuupäev'] = pd.to_datetime(df['Kuupäev'])
# Määra veerg 'Kuupäev' indeksiks
df.set_index('Kuupäev', inplace=True)
# Nüüd on meie DataFrame indekseeritud aja järgi, mis on ennustamiseks ideaalne
print(df.head())
Praktiline ülevaade: andmetest prognoosini
Vaatame läbi ajaseria ennustusprojekti tüüpilise töövoo, kasutades hüpoteetilist globaalset müügiandmekogumit.
1. samm: uuriv andmeanalüüs (EDA)
Ärge kunagi alustage modelleerimist, ilma et kõigepealt oma andmeid vaataksite. Visualiseerimine on võtmetähtsusega.
Visualiseerige ajaseria: Lihtne joonkujuline graafik võib paljastada suundumusi, hooajalisust ja ebatavalisi sündmusi.
import matplotlib.pyplot as plt
df['Müük'].plot(figsize=(12, 6), title='Globaalne müük aja jooksul')
plt.show()
Lagundage seria: Komponentide selgema pildi saamiseks saame kasutada `statsmodels`it seeria lagundamiseks selle trendi, hooajaliste ja jääkide osadeks.
from statsmodels.tsa.seasonal import seasonal_decompose
tulemus = seasonal_decompose(df['Müük'], model='additive', period=12) # Oletades kuuandmeid aastase hooajalisusega
tulemus.plot()
plt.show()
Kontrollige stationaarsust: Levinud statistiline stationaarsuse test on Augmenteeritud Dickey-Fulleri (ADF) test. Nullhüpotees on see, et seeria on mittestatsionaarne. Kui testi p-väärtus on väiksem kui olulisuse tase (nt 0,05), saame nullhüpoteesi tagasi lükata ja järeldada, et seeria on statsionaarne.
2. samm: klassikalised ennustusmudelid
Klassikalised statistilised mudelid on olnud ajaseria ennustamise aluseks aastakümneid ja on endiselt uskumatult võimsad ja tõlgendatavad.
ARIMA: Ajaseria ennustamise tööloom
ARIMA tähistab Autoregressiivset Integreeritud Liikuvat Keskmist. See on mitmekülgne mudel, mis ühendab kolm komponenti:
- AR (Autoregressiivne): Regressioonimudel, mis kasutab sõltuvussuhet vaatluse ja teatud arvu viivitatud vaatluste (p) vahel.
- I (Integreeritud): Toores vaatluste diferentseerimise kasutamine (d), et ajaseria statsionaarseks muuta.
- MA (Liikuv Keskmine): Mudel, mis kasutab sõltuvust vaatluse ja viivitatud vaatlustele rakendatud liikuvate keskmiste mudeli jääkide vahel (q).
Mudelit tähistatakse kui ARIMA(p, d, q). Optimaalsete väärtuste leidmine nende parameetrite jaoks on modelleerimisprotsessi põhiosa.
from statsmodels.tsa.arima.model import ARIMA
# Eeldame, et andmed on jagatud treening- ja testkomplektideks
# model = ARIMA(train_data['Müük'], order=(5, 1, 0))
# model_fit = model.fit()
# Saa prognoos
# forecast = model_fit.forecast(steps=len(test_data))
SARIMA: hooajalisuse käsitlemine elegantselt
SARIMA (Hooajaline ARIMA) on ARIMA laiendus, mis toetab selgesõnaliselt ajaseria andmeid, millel on hooajaline komponent. See lisab veel ühe parameetrite komplekti (P, D, Q, m), et võtta arvesse hooajalisi mustreid.
from statsmodels.tsa.statespace.sarimax import SARIMAX
# model = SARIMAX(train_data['Müük'], order=(1, 1, 1), seasonal_order=(1, 1, 1, 12))
# model_fit = model.fit()
3. samm: masinõppe lähenemisviisid
Samuti saame ajaseria probleemi raamistada kui juhendatud õppimise probleemi. See võimaldab meil kasutada võimsaid masinõppe algoritme, nagu Gradient Boosting.
Funktsioonide konstrueerimine ajaseria jaoks
ML-mudelite kasutamiseks peame looma funktsioone oma ajaindekseeritud andmetest. See võib sisaldada:
- Ajal põhinevad funktsioonid: Aasta, kuu, nädala päev, kvartal, aasta nädal.
- Viivituse funktsioonid: Seeria väärtus eelmistel ajahetkedel (nt eelmise kuu müük).
- Liikuva akna funktsioonid: Statistikud, nagu liikuv keskmine või liikuv standardhälve teatud ajaakna kohta.
XGBoosti või LightGBM-i mudelite kasutamine
Kui meil on funktsioonide komplekt, saame treenida regressioonimudelit, nagu XGBoost, et ennustada sihtmuutujat. Siht on väärtus, mida soovime prognoosida (nt `Müük`), ja funktsioonid on konstrueeritud ajapõhised ja viivituse funktsioonid.
4. samm: süvaõpe keerukate mustrite jaoks
Väga keerukate, mittelineaarsete mustritega ajaseriate puhul võivad süvaõppemudelid pakkuda paremat jõudlust.
LSTM-võrgud: mineviku meenutamine
Pikaajaline lühiajaline mälu (LSTM) võrgud on korduvate närvivõrkude (RNN) tüüp, mis on spetsiaalselt loodud pikaajaliste sõltuvuste õppimiseks. Need sobivad suurepäraselt järjestikustele andmetele, nagu ajaseriad, kuna neil on sisemine 'mälu', mis võib säilitada teavet varasematest ajahetkedest, et teavitada tulevasi ennustusi.
LSTM-mudeli ehitamine hõlmab:
- Andmete skaleerimist (närvivõrgud toimivad paremini skaleeritud andmetega, nt vahemikus 0 ja 1).
- Andmete ümberstruktureerimist fikseeritud pikkusega järjestusteks (nt kasutage viimase 60 päeva andmeid järgmise päeva ennustamiseks).
- LSTM-i arhitektuuri ehitamist, kasutades teeki nagu Keras või PyTorch.
- Mudeli treenimist treeningandmetel ja selle kasutamist tulevaste väärtuste prognoosimiseks.
Teie prognoosi hindamine: kui head on teie ennustused?
Mudel on kasutamatu, kui te ei tea, kui hästi see toimib. Hindamine on kriitiline samm.
Peamised jõudlusnäitajad
Täpsuse hindamiseks kasutatavad levinud mõõdikud on:
- Keskmine absoluutviga (MAE): Ennustatud ja tegelike väärtuste absoluutsete erinevuste keskmine. Seda on lihtne mõista ja tõlgendada.
- Keskmine ruutviga (MSE): Ruutude erinevuste keskmine. See karistab suuremaid vigu rohkem kui MAE.
- Ruutkeskmine viga (RMSE): MSE ruutjuur. See on samades ühikutes nagu originaalandmed, muutes selle tõlgendatavamaks kui MSE.
- Keskmine absoluutne protsentuaalne viga (MAPE): Absoluutsete protsentvigade keskmine. See väljendab täpsust protsentides, mis võib olla kasulik äriaruandluse jaoks.
Hold-out testkomplekti tähtsus
Erinevalt standardsetest masinõppeprobleemidest ei saa te ajaseria andmeid treenimiseks ja testimiseks juhuslikult jagada. Sellega kaasneks andmete leke, kus mudel õpib tulevasest teabest, millele tal ei tohiks juurdepääsu olla. Jagamine peab alati austama ajalist järjekorda: treenige minevikus ja testige kõige uuematel andmetel.
Täpsemad teemad ja kaasaegsed teegid
Ennustamise automatiseerimine Prophetiga
Prophet on Meta (endine Facebook) Core Data Science'i meeskonna poolt välja töötatud teek. See on loodud väga automatiseerituks ja häälestatavaks, muutes selle suurepäraseks valikuks äriennustamise rakenduste jaoks. See toimib kõige paremini ajaseriatega, millel on tugevad hooajalised mõjud ja mitu ajalooliste andmete hooaega.
Prohveti peamised tugevused on selle võime:
- Käsitsege automaatselt mitut hooajalisust (nt nädalane, aastane).
- Kaasake pühade ja erisündmuste mõju.
- Käsitsege robustselt puuduvaid andmeid ja äärmuslikke väärtusi.
# from prophet import Prophet
# # Prophet nõuab, et veerud oleksid nimetatud 'ds' (kuupäev) ja 'y' (sihtmärk)
# df_prophet = df.reset_index().rename(columns={'Date': 'ds', 'Müük': 'y'})
# model = Prophet()
# model.fit(df_prophet)
# future = model.make_future_dataframe(periods=365)
# forecast = model.predict(future)
# model.plot(forecast)
Multivariatsiooniline ajaseria ennustamine
Siiani oleme arutanud univariatsioonilist ennustamist (ühe seeria ennustamine, mis põhineb selle enda minevikul). Multivariatsiooniline ennustamine hõlmab mitme ajasõltuva muutuja kasutamist ühe eesmärgi ennustamiseks. Näiteks võite kasutada turunduskulusid, majandusnäitajaid ja konkurentide hinnakujundust (kõik ajaseriadena), et prognoosida oma müüki. Sellised mudelid nagu VAR (Vektor Autoregressioon) ja VECM-id, samuti keerukamad süvaõppearhitektuurid, saavad neid stsenaariumeid käsitseda.
Kokkuvõte: Ennustamise tulevik Pythoniga
Ajaseria ennustamine on rikkalik ja mitmekesine valdkond ning Python pakub täielikku ökosüsteemi mis tahes ennustusväljakutse lahendamiseks. Oleme rännanud trendide ja hooajalisuse põhimõistetest kuni keerukate süvaõppemudelite rakendamiseni.
Peamine järeldus on see, et kõigi probleemide jaoks pole ühtegi 'parimat' mudelit. Valik sõltub teie andmete omadustest, teie ennustamishorisondist ja teie konkreetsetest ärivajadustest. Lihtne ARIMA-mudel võib olla ideaalne stabiilsete, ennustatavate andmete jaoks, samas kui keerukas LSTM-võrk võib olla vajalik muutlike finantsturgude nüansside hõivamiseks.
Omandades arutatud tööriistad ja tehnikad — alates andmete ettevalmistamisest ja EDA-st kuni modelleerimise ja hindamiseni — saate kasutada Pythoni jõudu, et muuta ajaloolised andmed strateegiliseks varaks, võimaldades teadlikumaid otsuseid ja ennetavaid strateegiaid tulevikuks.