Një hyrje në zbutjen eksponenciale dhe zbatimin e tij në Python për të kryer parashikime.

Sfondi

Zona e parashikimit përmban modele të ndryshme. Në postimin tim të mëparshëm kemi diskutuar disa "teknika bazë të parashikimit", të cilat shpesh ofrojnë një bazë të mirë për të përsëritur dhe ndërtuar modele më komplekse. Një përsëritje e tillë natyrore nga këto modele bazë është zbutja eksponenciale.

Ideja e zbutjes eksponenciale e ka origjinën në vitet 1950 dhe është në thelb një mënyrë fantastike për të thënë se ne do t'i kushtojmë më shumë peshë vëzhgimeve të fundit. Vëzhgimet e vjetra do të marrin më pak peshë me një ritëm të zbërthyer në mënyrë eksponenciale. Prandaj, quhet zbutje eksponenciale.

Ju mund ta mendoni se është në gjysmë të rrugës midis modelit naiv të parashikimit, ku ne vendosim parashikimet të barabarta me vlerën më të fundit të vëzhguar dhe modelit mesatar të parashikimit, ku ne vendosim parashikimin të barabartë me mesataren e të gjitha vëzhgimeve historike. Nëse dëshironi të lexoni më shumë rreth modeleve naive dhe mesatare të parashikimit, shikoni postimin tim të mëparshëm mbi temën këtu:



Në këtë artikull, unë dua të shqyrtoj modelin më themelor të zbutjes eksponenciale dhe si ta zbatoj atë në Python.

Çfarë është E thjeshtë Zbutja eksponenciale?

Vështrim i përgjithshëm

Siç u tha më lart, ky postim do të ketë të bëjë me modelin më themelor në familjen e zbutjes eksponenciale, zbutjen e thjeshtë eksponenciale. Arsyeja pse ky model është i thjeshtëështë sepse nuk merr parasysh trendin apo sezonalitetin. Megjithatë, është një pikënisje e mirë për të shtuar këtë kompleksitet të mëtejshëm më vonë. Nëse dëshironi të mësoni më shumë rreth trendit dhe sezonalitetit, referojuni artikujve të mi të mëparshëm këtu:





Në përgjithësi, ky model i thjeshtë është më i miri kur të dhënat tuaja nuk kanë ndonjë tendencë apo sezonalitet. Përndryshe, ju mund t'i transformoni të dhënat tuaja duke kryer diferencimin dhe transformimin e Box-Cox për t'i bërë ato të palëvizshme, duke hequr tendencën dhe sezonalitetin e tyre. Për të mësuar më shumë rreth këtyre transformimeve, shikoni postimet e mia të mëparshme mbi to këtu:





Teoria

Formula e përgjithshme matematikore për zbutjen eksponenciale (të thjeshtë) shkon si më poshtë:

Ku ŷ_{t+1}<është parashikimi, y_t, y_{t -1}dhey_{t-2}janë vlerat e vëzhguara më parë të serive kohore dhe α është parametri i zbutjes që mund të marrë vlerat 0 ≤ α ≤ 1.Parametri i zbutjes është parametri kryesor që duhet të vlerësojmë gjatë përshtatjes. këtë model. Parametri shpesh llogaritet me metodën e katrorëve më të vegjël, e cila fatmirësisht bëhet për ne nga shumica e paketave kompjuterike!

Parametri i zbutjes gjithashtu mund të zgjidhet vetëm nga intuita e parashikuesit.

Sa më e lartë të jetë vlera e α, aq më shumë peshë u vihet vëzhgimeve të fundit dhe anasjelltas për vlerat më të ulëta të α. Nëse α=1,atëherë rikuperojmë modelin naiv të parashikimit ku të gjitha parashikimet janë të barabarta me vëzhgimin më të fundit.

Ne mund ta thjeshtojmë formulën e mësipërme duke e shprehur në terma të parashikimeve të mëparshme, ŷ_{t-1}:

Prova për këtë riformulim është mjaft e parëndësishme, por pak shteruese, ndaj e kam lënë jashtë në këtë postim. Megjithatë, lexuesi i interesuar mund ta gjejë derivimin këtu!

Ashtu si të gjitha seritë kohore, metodat e zbutjes eksponenciale shpesh ndahen në komponentët e tyre si niveli, tendenca dhe sezonaliteti. Meqenëse zbutja e thjeshtë eksponenciale nuk merr parasysh trendin dhe as sezonalitetin, prandaj ai përbëhet vetëm nga komponenti i nivelit, l_t:

Aty ku hështë hapi i ardhshëm kohor që ne po parashikojmë dhe kemi bërë l_t= ŷ_{t+1}për të deklaruar në mënyrë eksplicite se ky është komponenti i nivelit. Ky paraqitje matematikore për zbutjen e thjeshtë eksponenciale mund të duket e padobishme pasi ka vetëm një komponent, megjithatë ai bëhet vërtet i fuqishëm kur shtohen komponentë të mëtejshëm si trendi dhe sezonaliteti.

Tani mjaft nga e gjithë kjo teori, le të kalojmë një shembull të jetës reale në Python!

Zbatimi i zbutjes eksponenciale në Python

Më poshtë është një zbatim i zbutjes së thjeshtë eksponenciale duke përdorur paketën statsmodel në grupin e të dhënave të pasagjerëve të linjës ajrore amerikane:

Të dhënat me burim nga Kaggle me një licencë CC0.

Parashikimet nuk janë padyshim të mëdha, por ky është me të vërtetë modeli më i thjeshtëzbutës eksponencial. Një gjë kyçe për t'u vënë në dukje është se parashikimet janë të sheshta, gjë që padyshim është për shkak të modelit që nuk ka trend apo komponent sezonaliteti. Ka modele të tjera si Holt Winter's,të cilat do t'i diskutoj në një postim të mëvonshëm, që modelojnë këta komponentë shtesë.

Ne mund të nxjerrim informacion të detajuar të modelit tonë të montuar duke përdorur metodën e mëposhtme:

model.summary()

Modeli gjeti vlerën optimale të parametrit zbutës, α,(smoothing_level), të jetë 0,995. Kjo është shumë e lartë dhe tregon se tendenca është mjaft e paqëndrueshme dhe ndryshon shpesh. Ka gjithashtu një bollëk informacionesh të tjera që parashikuesi (ose lexuesi) mund të diagnostikojë rreth modelit sipas gjykimit të tij.

Përmbledhje dhe mendime të mëtejshme

Në këtë postim ne kemi prezantuar idenë e zbutjes eksponenciale. Modeli më themelor në këtë familje është zbutja e thjeshtë eksponenciale pasi nuk përmban asnjë trend apo komponent sezonal. Ai thjesht peshon më shumë vëzhgimet e fundit dhe më pak vëzhgimet historike, dhe kjo peshë diktohet nga një parametër zbutës. Në shembullin e Python, ky model nuk ofroi një parashikim të mirë pasi të dhënat shfaqnin sezonalitet të dukshëm dhe një prirje të qartë.

Kodi i plotë i përdorur për këtë artikull mund të gjendet në GitHub tim këtu:



Referenca dhe lexim të mëtejshëm

Lidhu me Mua!

(Të gjitha emoji-t e krijuar nga OpenMoji — projekti i emoji-ve dhe ikonave me burim të hapur. Licenca: CC BY-SA 4.0)