08 Time Series

🆕 Դասերն անցկացված են։ Սլայդերը, նշումներով PDF-երը և տեսանյութերը ներքևում են։
⚠️ Տեսանյութերը մոնտաժ չարած են՝ (դեռ youtube-ն էլ լրիվ չի մշակել, մի տաս րոպե կտևի ինձ թվում ա)։
🎲 Random
Շաբաթվա պատահական հղումը՝ TBD։
Ժամանակային շարքեր — այն դեպքը, երբ տողերի հերթականությունը հենց ինքը ինֆորմացիա է 📈
📚 Նյութը
Երկու դասախոսություն․ առաջինը՝ դասական վիճակագրական մեթոդներ, երկրորդը՝ նույն խնդիրը որպես մեքենայական ուսուցում։ Սլայդերը ml/08_time_series/ պանակում։
- [29] Ժամանակային շարքեր — դասական մեթոդներ — ի՞նչն է ժամանակային շարքը տարբերում մնացած խնդիրներից, տրենդ / սեզոնայնություն / աղմուկ, STL դեկոմպոզիցիա, ստացիոնարություն և դիֆերենցում (ADF և KPSS), ACF/PACF՝ նաև հենց մեր շարքի վրա, AR/MA/ARMA/ARIMA/SARIMA (և ինչու MA-ն նույնը չէ, ինչ rolling mean-ը), էքսպոնենցիալ հարթեցում (Holt-Winters), baseline-ներ և գնահատում՝ MASE-ը ձեռքով հաշված։ 🎞️ Սլայդեր · 📝 PDF (նշումներով) · 📺 Տեսանյութ
- [30] Ժամանակային շարքեր — մեքենայական ուսուցման մոտեցում — կանխատեսումը որպես supervised learning, leakage և ժամանակ-գիտակ բաժանում, lag / rolling / օրացուցային ֆիչերներ,
TimeSeriesSplit(gap,max_train_size), gradient boosting և տրենդի էքստրապոլյացիայի թակարդը, multi-step կանխատեսում (recursive vs direct), արդյունաբերական ստանդարտները — Prophet-ը (piecewise տրենդ changepoint-ներով, Fourier սեզոնայնություն, տոներ) և production stack-ը (Nixtla, sktime, Darts), deep learning ու foundation մոդելներ։ 🎞️ Սլայդեր · 📝 PDF (նշումներով) · 📺 Տեսանյութ
📝 Թեմայի վերաբերյալ հարցաշար (Google Form): TBD
Սլայդերը հիմնված են Hyndman & Athanasopoulos, Forecasting: Principles and Practice (3rd ed.) բաց դասագրքի վրա, ինչպես նաև scikit-learn / statsmodels / Nixtla-ի փաստաթղթերի։ Foundation-մոդելների մասը՝ 2025–2026 թթ. աղբյուրներից (TimesFM, Chronos-2, Moirai-2, TimeGPT, Time-MoE)։
🏡 Տնային
Assignment — Build a leakage-safe forecaster 🧀🧀
Take a real seasonal series (suggested: a daily or monthly one you can download once — e.g. energy demand, retail sales, or a currency series). Forecast it end to end and respect the arrow of time at every step.
- EDA + decomposition. Plot the series. Run an STL decomposition and describe the trend and seasonality. Is it additive or multiplicative?
- Stationarity. Run the ADF test on the raw series and after 1st (and, if needed, seasonal) differencing. Report the p-values.
- Baselines first. Implement naive and seasonal-naive forecasts on a time-ordered holdout. These are the numbers everything else must beat.
- Classical model. Fit a SARIMA (or Holt-Winters) — use
auto_arima/AutoARIMAif you like. Report a forecast with a prediction interval. - ML model. Reframe the series as a supervised table: build lag, (shifted) rolling, and calendar features. Train a gradient-boosting regressor. Remember the extrapolation trap: if the series trends, predict the difference, not the level.
- Honest validation. Use
TimeSeriesSplitfor any tuning. Nevershuffle=True. Fit every scaler/encoder on the training part only. - Compare with MASE. Put all models on one table (MAE + MASE vs seasonal naive). Which wins on your series, and why? Score every model at the same horizon — a 1-step number and a 12-step number do not belong in the same column.
Additional
- Fit Prophet on the same series and add it to the table. Does its automatic changepoint trend help or hurt on your data? (Deck [30] argues it is a strong default, not a winner.)
- Try a foundation model (e.g. TimesFM or Chronos via its Python package) zero-shot, and compare it to your tuned baseline.
- Produce a multi-step forecast (horizon > 1) both recursively and directly; discuss the error growth.
Գլխի նախագիծ — Հայաստանի էլեկտրաէներգիայի արտադրության կանխատեսում 🧀🧀
Վերևի առաջադրանքի ամբողջական worked walkthrough-ը՝ իրական տվյալների վրա։ Դուք ձեր շարքն եք ընտրում, իսկ այս notebook-ը ցույց է տալիս նույն յոթ քայլը սկզբից մինչև վերջ մեկ կոնկրետ շարքի վրա — ուստի սա օրինակ է, ոչ թե պատասխան։
Տվյալները․ ՀՀ վիճակագրական կոմիտեի ամսական շարքը (ArmStatBank, IC-ind-m-01.px, «35. Էլեկտրականություն, գազ, գոլորշի»), 2010-01 – 2026-06, 198 ամիս։ Ներբեռնվում է py_src/fetch_armstat_electricity.py-ով, այնպես որ ամեն բան վերարտադրելի է։
Հարցը․ ունենալով տվյալները մինչև 2024-ի դեկտեմբեր, կանխատեսել 2025-ի ամեն ամիսը (հորիզոնը՝ 12 ամիս)։
Երեք բան, որ արժե նշել․
- Մոդելավորումից առաջ՝ աուդիտ։ 2011–2013-ին տարեկան աճը +43.8%, +28.7%, +18.3% է, հետո՝ միանիշ։ Էլեկտրաէներգիայի արտադրությունը մեկ տարում 44%-ով չի աճում — շարքը անվանական դրամով է, ուստի սա սակագնի կամ հաշվառման փոփոխություն է, ոչ թե պահանջարկ։ Կտրում ենք մինչև 2014-ը։ Ավելի շատ տվյալը ավելի լավ տվյալ չէ։
- Baseline-ը հենց ինքը արդյունք է։ Seasonal naive-ը զրո պարամետրով տալիս է MASE 1.16։ Ամեն հաջորդ մոդել պետք է դա հաղթի։
- Դիագնոստիկան վարկած է, ոչ թե դատավճիռ։ Notebook-ը երկու անգամ անում է նույն բանը՝ դիագնոստիկա, հետո ստուգում held-out տարվա վրա — և արդյունքները հակառակ են․ Part 2b-ի ստուգումը ճիշտ է կանխագուշակում multiplicative սեզոնայնությունը (հաստատվում է), իսկ Part 3-ի ADF/KPSS-ը խորհուրդ է տալիս
d=0, և հենց այդ մոդելը վերջին տեղն է զբաղեցնում։ Եզրակացությունը «դիագնոստիկան անօգուտ է» չէ, այլ՝ ստուգելը արժե երկու տող կոդ, չստուգելը՝ notebook-ի ամենավատ մոդելը։
Հաղթում է ամենապարզ մոդելը՝ Holt-Winters (multiplicative), MASE 0.578 ընդդեմ baseline-ի 1.159-ի։ Այն ինքն է իր beta-ն և gamma-ն դնում 0.000 — այսինքն մնում է «դանդաղ շարժվող մակարդակ × ֆիքսված սեզոնային պրոֆիլ», մեկ ակտիվ պարամետրով։
Notebook-ը կատարվում է ամբողջությամբ ~45 վայրկյանում, CPU-ի վրա (104 cell, 13 գրաֆիկ, 0 սխալ)։
Լուծումը (ամբողջական walkthrough): 31_electricity_forecast_solution.ipynb (download) · view on GitHub
🎥 Practical walkthrough: 📺 Տեսանյութ