# Лекція 14. Аналіз часових рядів ## Огляд Досі кожне спостереження в наших даних було **самостійним**: у [Лекції 3](DA-L03.md) вибірку $x_1, \dots, x_n$ можна було переставляти як завгодно — середнє, дисперсія чи гістограма від порядку не залежали. Але величезний клас даних аналітики має одну додаткову властивість: спостереження **впорядковані в часі** й ідуть із рівними проміжками — щогодинний трафік сайту, щоденні продажі, щомісячна температура, щоквартальний виторг. Такі дані називають **часовим рядом**, і порядок у них — не випадковість, а **носій інформації**: сьогоднішнє значення тісно пов'язане із вчорашнім, а грудневі продажі схожі на торішні грудневі. Через цей зв'язок сусідніх спостережень до часових рядів **не можна** прямо застосувати інструменти попередніх лекцій, що припускали **незалежність** даних (довірчі інтервали [Лекції 3](DA-L03.md), перевірку гіпотез [Лекції 4](DA-L04.md)). Натомість ряд **розкладають** на осмислені складові (тренд, сезонність, шум), **згладжують**, щоб побачити основну тенденцію, вимірюють внутрішню залежність **автокореляцією** й, нарешті, **прогнозують** майбутнє. Багато ідей ми запозичимо з уже вивченого: згладжування спирається на **середнє** ([Лекція 3](DA-L03.md)), прогноз за трендом — це пряма **лінійна регресія на час** ([Лекція 5](DA-L05.md)), а оцінка похибки прогнозу — близький родич залишків регресії. Так аналіз часових рядів об'єднує описову статистику, регресію та прогнозування в один робочий цикл. > **Практичний бік.** Ковзне середнє, експоненційне згладжування та метрики > похибки прогнозу ви обчислите «руками» й **програмою** в > [Лабораторній роботі 14](../Laboratory/Laboratory14/main.md). > **Завершальна лекція курсу.** Це **остання** тема «Аналітики даних» і другий > розділ змістового модуля «Розширені методи аналітики даних» (після > [Лекції 13](DA-L13.md)). Вона замикає повний маршрут аналітика: від опису даних > ([Лекції 1](DA-L01.md)–[3](DA-L03.md)) через висновок ([Лекції 4](DA-L04.md)–[5](DA-L05.md)) > і методи навчання ([Лекції 6](DA-L06.md)–[11](DA-L11.md)) до **прогнозування > майбутнього** за впорядкованими в часі даними. --- ## 14.1 Часовий ряд і його компоненти > **Означення (часовий ряд).** **Часовим рядом** (англ. *time series*) називають > послідовність значень $x_1, x_2, \dots, x_n$ однієї величини, виміряних у > послідовні моменти часу $t = 1, 2, \dots, n$, зазвичай через **однакові** > проміжки (крок дискретизації). Індекс $t$ задає **порядок** спостережень. Дві риси відрізняють часовий ряд від звичайної вибірки: - **Впорядкованість.** Порядок значень фіксований і змістовний; переставляти спостереження не можна, бо втратиться сама динаміка. - **Залежність спостережень.** Сусідні значення, як правило, **не незалежні**: знаючи $x_{t-1}$, ми вже дещо знаємо про $x_t$. Це порушує припущення незалежності, на якому будувалися класичні статистичні висновки. **Приклади.** Щоденна кількість відвідувачів сайту; щомісячний обсяг продажів; щогодинна температура повітря; щоквартальний ВВП; хвилинне навантаження на сервер. У кожному випадку природний перший крок — **лінійний графік** значень проти часу (див. [Лекцію 3](DA-L03.md)): він одразу показує напрям руху, повторювані коливання й аномалії. ### Компоненти ряду Складну поведінку ряду зручно уявляти як накладання кількох простих **компонент**: - **Тренд** ($T_t$, англ. *trend*) — повільна довгострокова тенденція до зростання чи спадання (наприклад, поступове зростання аудиторії продукту рік за роком). - **Сезонність** ($S_t$, англ. *seasonality*) — коливання зі **сталим відомим періодом** $L$ (доба, тиждень, рік): пік продажів щогрудня, спад трафіку щоночі. - **Циклічність** ($C_t$, англ. *cyclic component*) — коливання **без фіксованого періоду**, пов'язані з довгими хвилями (економічні цикли підйому й спаду). На відміну від сезонності, довжина циклу заздалегідь невідома й змінна. - **Шум** ($e_t$, англ. *noise*, нерегулярна/випадкова компонента) — те, що лишилось після вилучення регулярних складових: непередбачувані дрібні коливання. ![Розклад часового ряду на чотири панелі: вихідний ряд, тренд, сезонність і шум, які в сумі складаються у вихідний ряд](img/l14_decomposition.png) > **Сезонність проти циклічності.** Сезонність має **сталий** період (рівно рік, > рівно тиждень) і прив'язана до календаря; цикл — **плаваючий** і календарем не > визначений. Тому сезонність прогнозувати легко, а цикл — важко. ### Адитивна та мультиплікативна моделі Компоненти поєднують у ряд одним із двох способів. > **Означення (адитивна та мультиплікативна моделі).** **Адитивна** модель складає > компоненти: > $$ x_t = T_t + S_t + C_t + e_t. $$ > **Мультиплікативна** модель їх перемножує: > $$ x_t = T_t \cdot S_t \cdot C_t \cdot e_t. $$ Вибір моделі підказує **графік**. Якщо розмах сезонних коливань **сталий** (не залежить від рівня ряду) — беруть **адитивну** модель. Якщо розмах коливань **зростає разом із рівнем** ряду (продажів усе більше, і сезонні піки теж усе вищі) — беруть **мультиплікативну**. Мультиплікативну модель зводять до адитивної **логарифмуванням**: $\ln x_t = \ln T_t + \ln S_t + \ln C_t + \ln e_t$. ![Порівняння адитивної моделі зі сталим розмахом сезонних коливань і мультиплікативної, де розмах коливань зростає разом із рівнем ряду](img/l14_additive_mult.png) **Приклад 14.1 (адитивний розклад).** Нехай продажі мають лінійний тренд $T_t = 100 + 2t$ і сезонність із періодом $L = 4$ та сезонними поправками $S = (+8,\ -3,\ -6,\ +1)$, що повторюються. Тоді (нехтуючи шумом) за перші $4$ кроки: | $t$ | $T_t = 100 + 2t$ | $S_t$ | $x_t = T_t + S_t$ | |:--:|:--:|:--:|:--:| | 1 | 102 | $+8$ | 110 | | 2 | 104 | $-3$ | 101 | | 3 | 106 | $-6$ | 100 | | 4 | 108 | $+1$ | 109 | Тут рівень ряду щокроку зростає на $2$ (тренд), а всередині кожного періоду з $4$ кроків повторюється той самий сезонний візерунок. Сума сезонних поправок за період $8 - 3 - 6 + 1 = 0$ — нормування, характерне для адитивної сезонності. --- ## 14.2 Згладжування: ковзне середнє Сирий ряд «тремтить» через шум, і за коливаннями важко розгледіти тренд. **Згладжування** прибирає дрібні коливання, лишаючи основну тенденцію. Найпростіший згладжувач — **ковзне середнє**. > **Означення (просте ковзне середнє).** **Простим ковзним середнім** (англ. > *simple moving average, SMA*) з **вікном** $w$ називають середнє $w$ останніх > спостережень: > $$ \mathrm{MA}_t^{(w)} = \frac{1}{w}\sum_{j=0}^{w-1} x_{t-j} > = \frac{x_t + x_{t-1} + \dots + x_{t-w+1}}{w}, \qquad t \ge w. $$ Кожне нове значення «вкочується» у вікно, а найстаріше — «викочується»; звідси й назва. Ширина вікна $w$ керує силою згладжування: **більше** $w$ — гладкіша крива, але сильніше **запізнення** за реальними змінами й втрата початкових $w - 1$ точок; **менше** $w$ — крива ближча до даних, але й «шумніша». **Приклад 14.2 (ковзне середнє, вікно 3).** Тижневі продажі ($n = 8$): $12,\ 15,\ 14,\ 16,\ 19,\ 18,\ 20,\ 23$. Обчислимо $\mathrm{MA}^{(3)}$ (перші два кроки невизначені, бо вікно ще не заповнене): | $t$ | $x_t$ | $\mathrm{MA}_t^{(3)}$ | |:--:|:--:|:--:| | 1 | 12 | — | | 2 | 15 | — | | 3 | 14 | $(12+15+14)/3 = 13.667$ | | 4 | 16 | $(15+14+16)/3 = 15.000$ | | 5 | 19 | $(14+16+19)/3 = 16.333$ | | 6 | 18 | $(16+19+18)/3 = 17.667$ | | 7 | 20 | $(19+18+20)/3 = 19.000$ | | 8 | 23 | $(18+20+23)/3 = 20.333$ | Згладжений ряд ($13.667 \to 20.333$) монотонно зростає, тимчасом як сирий ряд скаче вгору-вниз — ковзне середнє **виявило висхідний тренд**. ![Сирий ряд тижневих продажів і його згладження ковзним середнім з вікном 3](img/l14_moving_average.png) ### Центроване ковзне середнє У наведеній формі $\mathrm{MA}_t$ спирається лише на **минулі** значення (кінцеве, англ. *trailing*), тож зручне для **прогнозу**, але зсунуте вправо відносно даних. Щоб згладжене значення стояло **навпроти** відповідної точки (для виділення тренду в розкладі ряду), беруть **центроване** ковзне середнє: для непарного $w = 2k + 1$ $$ \mathrm{MA}_t^{(w)} = \frac{1}{w}\sum_{j=-k}^{k} x_{t+j}, \qquad k < t \le n - k. $$ Для парного $w$ вікно несиметричне, тож застосовують **подвійне** згладжування (центрування) — усереднюють два сусідні ковзні середні. ### Зважене ковзне середнє Просте ковзне середнє надає всім $w$ точкам вікна **однакову** вагу. Але свіжіші спостереження зазвичай важливіші. **Зважене ковзне середнє** (англ. *weighted moving average, WMA*) дає їм більшу вагу: $$ \mathrm{WMA}_t = \frac{\sum_{j=0}^{w-1} w_j\, x_{t-j}}{\sum_{j=0}^{w-1} w_j}, $$ де ваги $w_j$ спадають від найсвіжішого до найстарішого спостереження. **Приклад 14.2а (WMA).** Для тих самих даних візьмемо вікно $3$ з вагами $1, 2, 3$ (найбільша — найсвіжішому). У точці $t = 8$ значення вікна — $x_6 = 18$, $x_7 = 20$, $x_8 = 23$, тож $$ \mathrm{WMA}_8 = \frac{1 \cdot 18 + 2 \cdot 20 + 3 \cdot 23}{1 + 2 + 3} = \frac{18 + 40 + 69}{6} = \frac{127}{6} = 21.167. $$ Порівняно з простим $\mathrm{MA}_8^{(3)} = 20.333$ зважене середнє **вище** ($21.167$) — воно сильніше «тягнеться» за останнім високим значенням $23$, тобто швидше реагує на зміни. --- ## 14.3 Експоненційне згладжування Ковзне середнє «пам'ятає» рівно $w$ останніх точок, а решту **різко забуває**. **Експоненційне згладжування** робить забування **плавним**: ваги спостережень спадають геометрично що далі в минуле. > **Означення (просте експоненційне згладжування).** **Простим експоненційним > згладжуванням** (англ. *single exponential smoothing, SES*) називають рекурентну > оцінку рівня ряду > $$ \hat{x}_t = \alpha\, x_t + (1 - \alpha)\,\hat{x}_{t-1}, \qquad 0 < \alpha < 1, $$ > зі стартом $\hat{x}_1 = x_1$. Параметр $\alpha$ називають **сталою згладжування**. Кожна оцінка — це **компроміс** між свіжим спостереженням $x_t$ (вага $\alpha$) і всією накопиченою історією $\hat{x}_{t-1}$ (вага $1 - \alpha$). Розкривши рекурсію, дістаємо явні **геометрично спадні** ваги: $$ \hat{x}_t = \alpha x_t + \alpha(1-\alpha) x_{t-1} + \alpha(1-\alpha)^2 x_{t-2} + \dots $$ - **велике** $\alpha$ (близьке до $1$) — швидка реакція на зміни, слабке згладжування (майже повторює ряд); - **мале** $\alpha$ (близьке до $0$) — сильне згладжування, повільна реакція (крива інертна). ![Експоненційне згладжування того самого ряду за двох значень сталої: alpha 0.6 швидко реагує на зміни, alpha 0.2 дає гладкішу, інертнішу криву](img/l14_exp_smoothing.png) **Приклад 14.3 (експоненційне згладжування, $\alpha = 0.3$).** Візьмемо ряд $12,\ 15,\ 14,\ 16,\ 19$ і $\alpha = 0.3$. Старт $\hat{x}_1 = 12$; далі за формулою: $$ \hat{x}_2 = 0.3 \cdot 15 + 0.7 \cdot 12 = 4.5 + 8.4 = 12.900, $$ $$ \hat{x}_3 = 0.3 \cdot 14 + 0.7 \cdot 12.900 = 4.2 + 9.030 = 13.230, $$ $$ \hat{x}_4 = 0.3 \cdot 16 + 0.7 \cdot 13.230 = 4.8 + 9.261 = 14.061, $$ $$ \hat{x}_5 = 0.3 \cdot 19 + 0.7 \cdot 14.061 = 5.7 + 9.843 = 15.543. $$ Згладжений ряд $12 \to 12.9 \to 13.23 \to 14.061 \to 15.543$ плавно рухається за даними, не повторюючи їхні різкі стрибки. ### Подвійне згладжування (метод Гольта) Просте SES добре працює для рядів **без тренду**: за стійкого зростання його оцінка **систематично відстає**. Метод **Гольта** (англ. *Holt's double exponential smoothing*) додає окрему компоненту **тренду** й згладжує дві величини — рівень $L_t$ і нахил $b_t$: $$ L_t = \alpha\, x_t + (1 - \alpha)(L_{t-1} + b_{t-1}), \qquad b_t = \beta\,(L_t - L_{t-1}) + (1 - \beta)\, b_{t-1}. $$ Прогноз на $h$ кроків уперед враховує тренд: $\hat{x}_{t+h} = L_t + h\, b_t$. Розширення методом **Гольта–Вінтерса** додає ще й сезонну компоненту. Ці методи — природне продовження SES, коли в ряді є тренд або сезонність. --- ## 14.4 Автокореляція та стаціонарність Головна особливість часового ряду — **залежність** спостережень одне від одного. Виміряти її дає змогу **автокореляція** — кореляція ряду із його ж зсунутою копією. > **Означення (лаг, автокореляція).** **Лагом** (англ. *lag*) $k$ називають зсув > ряду на $k$ кроків. **Вибірковою автокореляційною функцією** (англ. > *autocorrelation function, ACF*) на лазі $k$ називають > $$ r_k = \frac{\sum_{t=1}^{n-k} (x_t - \bar{x})(x_{t+k} - \bar{x})} > {\sum_{t=1}^{n} (x_t - \bar{x})^2}, \qquad \bar{x} = \frac{1}{n}\sum_{t=1}^{n} x_t. $$ Це той самий коефіцієнт кореляції Пірсона ([Лекція 5](DA-L05.md)), але між парами $(x_t, x_{t+k})$ — значенням та його «минулим» на $k$ кроків. Властивості: $r_0 = 1$ завжди; $-1 \le r_k \le 1$; знак показує напрям зв'язку значення з його минулим. **Приклад 14.4 (автокореляція лагу 1).** Для ряду $12,\ 15,\ 14,\ 16,\ 19$ ($\bar{x} = 15.2$) відхилення від середнього: $-3.2,\ -0.2,\ -1.2,\ 0.8,\ 3.8$. Чисельник (сума добутків сусідніх відхилень): $$ (-3.2)(-0.2) + (-0.2)(-1.2) + (-1.2)(0.8) + (0.8)(3.8) = 0.64 + 0.24 - 0.96 + 3.04 = 2.96. $$ Знаменник (сума квадратів відхилень): $$ 3.2^2 + 0.2^2 + 1.2^2 + 0.8^2 + 3.8^2 = 10.24 + 0.04 + 1.44 + 0.64 + 14.44 = 26.8. $$ Отже, $r_1 = 2.96 / 26.8 = 0.110$ — слабка додатна автокореляція. Натомість для «пилкоподібного» ряду $10,\ 2,\ 9,\ 3,\ 8,\ 4$ (значення чергуються високе/низьке) $r_1 = -0.810$ — сильна **від'ємна** автокореляція: за високим значенням майже завжди йде низьке. ![Автокореляційна функція пилкоподібного ряду: стовпці за лагами з великою відʼємною автокореляцією на лазі 1 і чергуванням знаку](img/l14_acf.png) > **Практичний зміст ACF.** Пік ACF на лазі $k = L$ виказує **сезонність** із > періодом $L$ (наприклад, для щоденних даних $r_7$ великий за тижневої > сезонності). Повільне спадання ACF свідчить про **тренд**. Тому графік ACF — > стандартний діагностичний інструмент перед вибором моделі прогнозу. ### Стаціонарність > **Означення (стаціонарність, спрощено).** Ряд називають **стаціонарним** (англ. > *stationary*), якщо його статистичні властивості **не змінюються з часом**: > сталі середнє й дисперсія, а автокореляція $r_k$ залежить лише від лагу $k$, а не > від моменту $t$. Тренд і сезонність роблять ряд **нестаціонарним** (середнє «пливе»). Багато методів прогнозування (зокрема родина **ARIMA**, що виходить за межі курсу) вимагають стаціонарності, тож ряд спершу **стаціонаризують**. Найпростіший спосіб — **різницювання** (англ. *differencing*): перехід до ряду приростів $$ \nabla x_t = x_t - x_{t-1}, $$ який прибирає лінійний тренд (сталий приріст перетворюється на стале значення). Логарифмування стабілізує зростаючу дисперсію, а сезонне різницювання $x_t - x_{t-L}$ прибирає сезонність. --- ## 14.5 Прогнозування **Прогнозування** (англ. *forecasting*) — оцінювання майбутніх значень ряду $\hat{x}_{n+1}, \hat{x}_{n+2}, \dots$ за наявною історією. Розгляньмо чотири базові методи від найпростішого до найзмістовнішого. - **Наївний прогноз** (англ. *naive forecast*). Прогноз дорівнює **останньому** відомому значенню: $\hat{x}_{n+1} = x_n$. Попри примітивність, це важливий **еталон** (baseline): складніший метод має бути **кращим** за наївний, інакше він зайвий. - **Прогноз за ковзним середнім.** Прогноз — середнє $w$ останніх спостережень: $\hat{x}_{n+1} = \frac{1}{w}(x_n + x_{n-1} + \dots + x_{n-w+1})$. Придатний для ряду **без тренду**, що коливається навколо сталого рівня. - **Прогноз за трендом (лінійна регресія на час).** Будуємо пряму $\hat{x}_t = b_0 + b_1 t$ **методом найменших квадратів** ([Лекція 5](DA-L05.md)), де роль незалежної змінної грає **час** $t = 1, 2, \dots, n$, і **екстраполюємо** її на майбутні $t$. Годиться для рядів із вираженим трендом. - **Прогноз за експоненційним згладжуванням.** Прогноз дорівнює останній згладженій оцінці: $\hat{x}_{n+1} = \hat{x}_n$ (просте SES — для ряду без тренду; метод Гольта — для ряду з трендом). **Приклад 14.5 (чотири прогнози).** Місячні дані ($n = 6$) з чітким зростанням: $10,\ 12,\ 13,\ 15,\ 16,\ 18$. Спрогнозуємо значення на місяць $7$. **Наївний:** $\hat{x}_7 = x_6 = 18$. **Ковзне середнє, $w = 3$:** $\hat{x}_7 = (15 + 16 + 18)/3 = 49/3 = 16.333$. **Тренд (регресія на час).** За $t = 1, \dots, 6$: $\bar{t} = 3.5$, $\bar{x} = 14$. За формулами найменших квадратів ([Лекція 5](DA-L05.md)): $$ b_1 = \frac{\sum (t - \bar{t})(x_t - \bar{x})}{\sum (t - \bar{t})^2} = \frac{27}{17.5} = 1.543, \qquad b_0 = \bar{x} - b_1 \bar{t} = 14 - 1.543 \cdot 3.5 = 8.600. $$ Прогноз: $\hat{x}_7 = 8.600 + 1.543 \cdot 7 = 19.400$ (а на місяць $8$ — $\hat{x}_8 = 8.600 + 1.543 \cdot 8 = 20.943$). **Експоненційне згладжування, $\alpha = 0.5$:** послідовно $\hat{x}_1 = 10$, $\hat{x}_2 = 11$, $\hat{x}_3 = 12$, $\hat{x}_4 = 13.5$, $\hat{x}_5 = 14.75$, $\hat{x}_6 = 16.375$; прогноз $\hat{x}_7 = \hat{x}_6 = 16.375$. | Метод | Прогноз $\hat{x}_7$ | |---|:--:| | Наївний | 18.000 | | Ковзне середнє ($w = 3$) | 16.333 | | Тренд (регресія на час) | 19.400 | | Експоненційне ($\alpha = 0.5$) | 16.375 | Прогнози помітно різняться. Оскільки ряд **зростає**, ковзне середнє та SES **відстають** (усереднюють уже застарілі нижчі значення), наївний прогноз повторює останнє значення, і лише **тренд-модель екстраполює зростання далі** ($19.4 > 18$). Це головний висновок: **метод має відповідати структурі ряду** — для трендового ряду виграє прогноз за трендом. ![Прогноз за лінійним трендом на три кроки вперед із зоною похибки, що розширюється з горизонтом прогнозу](img/l14_forecast.png) --- ## 14.6 Оцінка похибки прогнозу Щоб порівняти методи, прогноз перевіряють на даних, для яких **відоме** фактичне значення. Стандартний прийом — **відкласти** (англ. *hold out*) останню частину ряду: навчати метод на початку, а перевіряти на кінці, порівнюючи прогнози $\hat{x}_t$ з фактами $x_t$. Похибку зводять до одного числа трьома метриками. > **Означення (MAE, RMSE, MAPE).** Для $m$ пар «факт $x_t$ — прогноз $\hat{x}_t$»: > $$ \mathrm{MAE} = \frac{1}{m}\sum_{t} |x_t - \hat{x}_t|, \qquad > \mathrm{RMSE} = \sqrt{\frac{1}{m}\sum_{t} (x_t - \hat{x}_t)^2}, $$ > $$ \mathrm{MAPE} = \frac{100\%}{m}\sum_{t} \left| \frac{x_t - \hat{x}_t}{x_t} \right|. $$ - **MAE** (*mean absolute error*, середня абсолютна похибка) — середня величина промаху **в одиницях ряду**; проста й стійка, усі похибки враховані однаково. - **RMSE** (*root mean square error*, корінь із середньоквадратичної похибки) — теж в одиницях ряду, але через квадрат **сильніше карає великі** промахи; чутлива до викидів. Завжди $\mathrm{RMSE} \ge \mathrm{MAE}$. - **MAPE** (*mean absolute percentage error*, середня абсолютна відсоткова похибка) — **безрозмірна** (у відсотках), тож дає змогу порівнювати точність на рядах різного масштабу. **Приклад 14.6 (обчислення метрик).** Порівняємо прогноз ($\hat{x}$) із фактом ($x$) на $m = 5$ періодах: | $x_t$ (факт) | $\hat{x}_t$ (прогноз) | $x_t - \hat{x}_t$ | $|x_t - \hat{x}_t|$ | $(x_t - \hat{x}_t)^2$ | $|{\cdot}| / x_t$ | |:--:|:--:|:--:|:--:|:--:|:--:| | 20 | 19 | $+1$ | 1 | 1 | 0.0500 | | 22 | 23 | $-1$ | 1 | 1 | 0.0455 | | 19 | 20 | $-1$ | 1 | 1 | 0.0526 | | 24 | 22 | $+2$ | 2 | 4 | 0.0833 | | 23 | 25 | $-2$ | 2 | 4 | 0.0870 | | | | | **7** | **11** | **0.3184** | $$ \mathrm{MAE} = \frac{7}{5} = 1.400, \qquad \mathrm{RMSE} = \sqrt{\frac{11}{5}} = \sqrt{2.2} = 1.483, \qquad \mathrm{MAPE} = \frac{100\%}{5} \cdot 0.3184 = 6.37\%. $$ RMSE ($1.483$) більша за MAE ($1.400$) — сказалися два більші промахи по $2$; у середньому прогноз хибить на $\approx 1.4$ одиниці, або на $\approx 6.4\%$. ``` Алгоритм: оцінка прогнозу з відкладеною частиною Вхід: ряд x[1..n], метод прогнозу, розмір тесту m 1. train ← x[1 .. n-m]; test ← x[n-m+1 .. n] 2. навчити метод на train; отримати прогнози x̂ на m кроків 3. e ← test − x̂ 4. MAE ← mean(|e|) RMSE ← sqrt(mean(e^2)) MAPE ← 100 * mean(|e| / |test|) 5. return MAE, RMSE, MAPE ``` > **Типова помилка (MAPE і нулі).** MAPE ділить на факт $x_t$, тож **не визначена** > при $x_t = 0$ і роздувається при малих $x_t$. Для рядів із нулями чи близькими до > нуля значеннями беруть MAE або RMSE (або симетричні варіанти на кшталт sMAPE). > **Типова помилка (оцінка «на тих самих даних»).** Не можна оцінювати прогноз на > даних, на яких метод «навчали»: він підлаштувався саме під них і покаже > оманливо-малу похибку. Чесна оцінка — лише на **відкладеній** (майбутній для > моделі) частині ряду. --- ## Застосування в аналітиці даних - **Планування й бюджетування.** Прогноз продажів, попиту, трафіку — основа планування закупівель, персоналу та потужностей. - **Моніторинг і аномалії.** Згладжений ряд задає «очікуваний коридор»; різке відхилення факту від прогнозу сигналізує про аварію, атаку чи зміну поведінки. - **Виявлення сезонності.** ACF та розклад ряду показують тижневі/річні цикли, які враховують у розкладі змін, рекламних кампаніях, тарифах. - **Порівняння методів.** MAE / RMSE / MAPE на відкладеній частині — стандартний спосіб обрати найкращий метод прогнозу для конкретного ряду (обов'язково проти наївного еталона). - **Підготовка ознак.** Лаги ($x_{t-1}, x_{t-2}, \dots$), ковзні середні та сезонні індикатори — типові ознаки для моделей машинного навчання ([Лекції 6](DA-L06.md)–[7](DA-L07.md)), коли прогноз зводять до регресії. ## Підсумок - **Часовий ряд** — впорядкована в часі послідовність значень із **залежними** сусідніми спостереженнями; тому інструменти для незалежних вибірок прямо не застосовні. - Ряд розкладають на **компоненти**: тренд, сезонність (сталий період), циклічність (плаваючий період), шум; моделі — **адитивна** ($x_t = T_t + S_t + e_t$, сталий розмах) та **мультиплікативна** ($x_t = T_t S_t e_t$, розмах росте з рівнем). - **Ковзне середнє** $\mathrm{MA}_t^{(w)}$ згладжує ряд (більше $w$ — гладкіше, але з більшим запізненням); **зважене** середнє надає свіжим точкам більшу вагу. - **Експоненційне згладжування** $\hat{x}_t = \alpha x_t + (1-\alpha)\hat{x}_{t-1}$ забуває минуле плавно (геометричні ваги); мале $\alpha$ — сильніше згладжування. Метод **Гольта** додає компоненту тренду. - **Автокореляція** $r_k$ вимірює зв'язок значення з його минулим на лазі $k$; пік на лазі $L$ виказує сезонність. **Стаціонарний** ряд має незмінні в часі властивості; тренд усувають **різницюванням** $\nabla x_t = x_t - x_{t-1}$. - **Прогнозування:** наївний ($\hat{x}_{n+1} = x_n$, еталон), за ковзним середнім, за трендом (**регресія на час**, [Лекція 5](DA-L05.md)), за експоненційним згладжуванням. Метод обирають **під структуру** ряду. - **Похибку** прогнозу оцінюють на **відкладеній** частині метриками **MAE**, **RMSE** (карає великі промахи; $\ge \mathrm{MAE}$) та **MAPE** (у відсотках, для порівняння різномасштабних рядів). - **Курс завершено.** Аналіз часових рядів замикає шлях аналітика: **опис** даних → **висновок** про них → **навчання** моделей → **прогноз** майбутнього. ## Вправи ### Для розігріву 1. Чим часовий ряд відрізняється від звичайної вибірки? Поясніть, чому до нього не можна прямо застосувати довірчі інтервали з [Лекції 3](DA-L03.md). 2. Назвіть чотири компоненти часового ряду. Чим **сезонність** відрізняється від **циклічності**? 3. Для ряду $4,\ 6,\ 5,\ 7,\ 9,\ 8$ обчисліть просте ковзне середнє з вікном $3$ (значення для $t = 3, \dots, 6$). 4. Як стала згладжування $\alpha$ впливає на поведінку експоненційного згладжування? Що дає $\alpha$, близьке до $1$, а що — близьке до $0$? ### Стандартні 5. Для ряду $30,\ 32,\ 31,\ 35$ виконайте просте експоненційне згладжування з $\alpha = 0.2$ (старт $\hat{x}_1 = x_1$). Наведіть усі кроки й прогноз на наступний період. *(Відповідь: $30,\ 30.4,\ 30.52,\ 31.416$.)* 6. Оберіть адитивну чи мультиплікативну модель для: (а) ряду, де сезонні коливання мають сталий розмах; (б) ряду, де розмах коливань зростає разом із рівнем. Обґрунтуйте. 7. Для факту $x = (50,\ 60,\ 55)$ і прогнозу $\hat{x} = (48,\ 63,\ 50)$ обчисліть MAE, RMSE та MAPE. *(Відповідь: $\mathrm{MAE} = 3.333$, $\mathrm{RMSE} = 3.559$, $\mathrm{MAPE} = 6.03\%$.)* 8. Ряд $8,\ 11,\ 13,\ 16,\ 18$ має чіткий тренд. Побудуйте лінійну регресію на час $\hat{x}_t = b_0 + b_1 t$ і спрогнозуйте значення для $t = 6$. ### Підвищеної складності 9. Розкрийте рекурсію експоненційного згладжування й покажіть, що ваги спостережень $x_t, x_{t-1}, x_{t-2}, \dots$ утворюють геометричну прогресію $\alpha, \alpha(1-\alpha), \alpha(1-\alpha)^2, \dots$. Чому їхня сума прямує до $1$? 10. Поясніть, чому просте ковзне середнє й просте експоненційне згладжування **систематично відстають** від ряду з лінійним трендом. Як цю ваду виправляє метод Гольта? 11. Доведіть, що для стаціонарного (без тренду) ряду прогноз за ковзним середнім і прогноз за трендом (регресія на час) дають близькі результати, а їхня різниця зростає з силою тренду. 12. Часовий ряд має яскраво виражену **тижневу** сезонність (дані щоденні). Опишіть, який вигляд матиме його ACF (на яких лагах очікувати піки) і як сезонне різницювання $x_t - x_{t-7}$ змінить ряд.