You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ML-For-Beginners/translations/uk/7-TimeSeries/1-Introduction/README.md

199 lines
19 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "662b509c39eee205687726636d0a8455",
"translation_date": "2025-09-05T12:00:40+00:00",
"source_file": "7-TimeSeries/1-Introduction/README.md",
"language_code": "uk"
}
-->
# Вступ до прогнозування часових рядів
![Резюме часових рядів у вигляді скетчноту](../../../../sketchnotes/ml-timeseries.png)
> Скетчнот від [Tomomi Imura](https://www.twitter.com/girlie_mac)
У цьому уроці та наступному ви дізнаєтеся трохи про прогнозування часових рядів — цікавий і цінний аспект роботи науковця з машинного навчання, який менш відомий, ніж інші теми. Прогнозування часових рядів — це свого роду "кришталева куля": на основі минулих показників змінної, наприклад ціни, можна передбачити її потенційну майбутню вартість.
[![Вступ до прогнозування часових рядів](https://img.youtube.com/vi/cBojo1hsHiI/0.jpg)](https://youtu.be/cBojo1hsHiI "Вступ до прогнозування часових рядів")
> 🎥 Натисніть на зображення вище, щоб переглянути відео про прогнозування часових рядів
## [Тест перед лекцією](https://ff-quizzes.netlify.app/en/ml/)
Це корисна і цікава галузь, яка має реальну цінність для бізнесу завдяки її прямому застосуванню до проблем ціноутворення, інвентаризації та питань ланцюга постачання. Хоча методи глибокого навчання почали використовуватися для отримання більш точних прогнозів, прогнозування часових рядів залишається галуззю, значною мірою заснованою на класичних методах машинного навчання.
> Корисний навчальний матеріал з часових рядів від Penn State можна знайти [тут](https://online.stat.psu.edu/stat510/lesson/1)
## Вступ
Уявіть, що ви керуєте масивом розумних паркувальних лічильників, які надають дані про те, як часто і як довго вони використовуються з часом.
> Що, якщо ви могли б передбачити, на основі минулих показників лічильника, його майбутню вартість відповідно до законів попиту і пропозиції?
Точно передбачити, коли діяти для досягнення вашої мети — це виклик, який можна вирішити за допомогою прогнозування часових рядів. Це може не сподобатися людям, якщо їх будуть більше стягувати в години пік, коли вони шукають місце для паркування, але це буде ефективним способом отримання доходу для очищення вулиць!
Давайте розглянемо деякі типи алгоритмів часових рядів і почнемо роботу з блокнотом для очищення та підготовки даних. Дані, які ви будете аналізувати, взяті з конкурсу прогнозування GEFCom2014. Вони містять 3 роки годинних значень електричного навантаження та температури між 2012 і 2014 роками. Враховуючи історичні закономірності електричного навантаження та температури, ви можете передбачити майбутні значення електричного навантаження.
У цьому прикладі ви навчитеся прогнозувати один крок вперед, використовуючи лише історичні дані навантаження. Однак перед початком корисно зрозуміти, що відбувається "за лаштунками".
## Деякі визначення
Коли ви стикаєтеся з терміном "часовий ряд", важливо розуміти його використання в різних контекстах.
🎓 **Часовий ряд**
У математиці "часовий ряд — це серія точок даних, упорядкованих (або перерахованих чи нанесених на графік) у часовому порядку. Найчастіше часовий ряд — це послідовність, взята в рівновіддалених точках часу." Прикладом часових рядів є щоденна закриваюча вартість [Dow Jones Industrial Average](https://wikipedia.org/wiki/Time_series). Використання графіків часових рядів і статистичного моделювання часто зустрічається в обробці сигналів, прогнозуванні погоди, передбаченні землетрусів та інших галузях, де події відбуваються і точки даних можуть бути нанесені на графік з часом.
🎓 **Аналіз часових рядів**
Аналіз часових рядів — це аналіз згаданих вище даних часових рядів. Дані часових рядів можуть мати різні форми, включаючи "перервані часові ряди", які виявляють закономірності в еволюції часових рядів до і після перериваючої події. Тип аналізу, необхідний для часових рядів, залежить від природи даних. Дані часових рядів можуть бути представлені у вигляді серій чисел або символів.
Аналіз, який буде виконаний, використовує різноманітні методи, включаючи частотну і часову області, лінійні і нелінійні методи тощо. [Дізнайтеся більше](https://www.itl.nist.gov/div898/handbook/pmc/section4/pmc4.htm) про численні способи аналізу цього типу даних.
🎓 **Прогнозування часових рядів**
Прогнозування часових рядів — це використання моделі для передбачення майбутніх значень на основі закономірностей, які демонструють раніше зібрані дані, як вони відбувалися в минулому. Хоча можна використовувати регресійні моделі для дослідження даних часових рядів, з часовими індексами як змінними x на графіку, такі дані найкраще аналізувати за допомогою спеціальних типів моделей.
Дані часових рядів — це список упорядкованих спостережень, на відміну від даних, які можна аналізувати за допомогою лінійної регресії. Найпоширенішою моделлю є ARIMA, акронім, що означає "Автокореляційна Інтегрована Середня".
[Моделі ARIMA](https://online.stat.psu.edu/stat510/lesson/1/1.1) "пов'язують поточне значення серії з минулими значеннями і минулими помилками прогнозу." Вони найбільш підходять для аналізу даних у часовій області, де дані упорядковані за часом.
> Існує кілька типів моделей ARIMA, про які ви можете дізнатися [тут](https://people.duke.edu/~rnau/411arim.htm) і які ви розглянете в наступному уроці.
У наступному уроці ви створите модель ARIMA, використовуючи [Уніваріантні часові ряди](https://itl.nist.gov/div898/handbook/pmc/section4/pmc44.htm), які зосереджуються на одній змінній, що змінює своє значення з часом. Прикладом такого типу даних є [цей набір даних](https://itl.nist.gov/div898/handbook/pmc/section4/pmc4411.htm), який записує щомісячну концентрацію CO2 на обсерваторії Мауна-Лоа:
| CO2 | YearMonth | Year | Month |
| :----: | :-------: | :---: | :---: |
| 330.62 | 1975.04 | 1975 | 1 |
| 331.40 | 1975.13 | 1975 | 2 |
| 331.87 | 1975.21 | 1975 | 3 |
| 333.18 | 1975.29 | 1975 | 4 |
| 333.92 | 1975.38 | 1975 | 5 |
| 333.43 | 1975.46 | 1975 | 6 |
| 331.85 | 1975.54 | 1975 | 7 |
| 330.01 | 1975.63 | 1975 | 8 |
| 328.51 | 1975.71 | 1975 | 9 |
| 328.41 | 1975.79 | 1975 | 10 |
| 329.25 | 1975.88 | 1975 | 11 |
| 330.97 | 1975.96 | 1975 | 12 |
✅ Визначте змінну, яка змінюється з часом у цьому наборі даних
## Характеристики даних часових рядів, які слід враховувати
Коли ви дивитеся на дані часових рядів, ви можете помітити, що вони мають [певні характеристики](https://online.stat.psu.edu/stat510/lesson/1/1.1), які потрібно враховувати і зменшувати, щоб краще зрозуміти їх закономірності. Якщо ви розглядаєте дані часових рядів як потенційний "сигнал", який ви хочете аналізувати, ці характеристики можна вважати "шумом". Вам часто доведеться зменшувати цей "шум", компенсуючи деякі з цих характеристик за допомогою статистичних методів.
Ось деякі поняття, які вам слід знати, щоб працювати з часовими рядами:
🎓 **Тренди**
Тренди визначаються як вимірювані збільшення і зменшення з часом. [Дізнайтеся більше](https://machinelearningmastery.com/time-series-trends-in-python). У контексті часових рядів це про те, як використовувати і, якщо необхідно, видаляти тренди з ваших часових рядів.
🎓 **[Сезонність](https://machinelearningmastery.com/time-series-seasonality-with-python/)**
Сезонність визначається як періодичні коливання, наприклад, святкові сплески, які можуть впливати на продажі. [Подивіться](https://itl.nist.gov/div898/handbook/pmc/section4/pmc443.htm), як різні типи графіків демонструють сезонність у даних.
🎓 **Викиди**
Викиди — це точки даних, які значно відхиляються від стандартної варіації даних.
🎓 **Довгостроковий цикл**
Незалежно від сезонності, дані можуть демонструвати довгостроковий цикл, наприклад, економічний спад, який триває більше року.
🎓 **Постійна варіація**
З часом деякі дані демонструють постійні коливання, наприклад, використання енергії вдень і вночі.
🎓 **Різкі зміни**
Дані можуть демонструвати різку зміну, яка потребує додаткового аналізу. Наприклад, різке закриття бізнесів через COVID спричинило зміни в даних.
✅ Ось [зразок графіка часових рядів](https://www.kaggle.com/kashnitsky/topic-9-part-1-time-series-analysis-in-python), що показує щоденні витрати на внутрішньоігрову валюту протягом кількох років. Чи можете ви визначити будь-які з характеристик, зазначених вище, у цих даних?
![Витрати на внутрішньоігрову валюту](../../../../7-TimeSeries/1-Introduction/images/currency.png)
## Вправа — початок роботи з даними про використання електроенергії
Давайте почнемо створювати модель часових рядів для прогнозування майбутнього використання електроенергії на основі минулих даних.
> Дані в цьому прикладі взяті з конкурсу прогнозування GEFCom2014. Вони містять 3 роки годинних значень електричного навантаження та температури між 2012 і 2014 роками.
>
> Tao Hong, Pierre Pinson, Shu Fan, Hamidreza Zareipour, Alberto Troccoli і Rob J. Hyndman, "Ймовірнісне прогнозування енергії: Глобальний конкурс прогнозування енергії 2014 і далі", International Journal of Forecasting, vol.32, no.3, pp 896-913, липень-вересень, 2016.
1. У папці `working` цього уроку відкрийте файл _notebook.ipynb_. Почніть з додавання бібліотек, які допоможуть вам завантажувати та візуалізувати дані:
```python
import os
import matplotlib.pyplot as plt
from common.utils import load_data
%matplotlib inline
```
Зверніть увагу, що ви використовуєте файли з включеної папки `common`, які налаштовують ваше середовище і обробляють завантаження даних.
2. Далі, досліджуйте дані як датафрейм, викликаючи `load_data()` і `head()`:
```python
data_dir = './data'
energy = load_data(data_dir)[['load']]
energy.head()
```
Ви можете побачити, що є два стовпці, які представляють дату і навантаження:
| | load |
| :-----------------: | :----: |
| 2012-01-01 00:00:00 | 2698.0 |
| 2012-01-01 01:00:00 | 2558.0 |
| 2012-01-01 02:00:00 | 2444.0 |
| 2012-01-01 03:00:00 | 2402.0 |
| 2012-01-01 04:00:00 | 2403.0 |
3. Тепер побудуйте графік даних, викликаючи `plot()`:
```python
energy.plot(y='load', subplots=True, figsize=(15, 8), fontsize=12)
plt.xlabel('timestamp', fontsize=12)
plt.ylabel('load', fontsize=12)
plt.show()
```
![графік енергії](../../../../7-TimeSeries/1-Introduction/images/energy-plot.png)
4. Тепер побудуйте графік першого тижня липня 2014 року, надавши його як вхідні дані до `energy` у форматі `[від дати]: [до дати]`:
```python
energy['2014-07-01':'2014-07-07'].plot(y='load', subplots=True, figsize=(15, 8), fontsize=12)
plt.xlabel('timestamp', fontsize=12)
plt.ylabel('load', fontsize=12)
plt.show()
```
![липень](../../../../7-TimeSeries/1-Introduction/images/july-2014.png)
Чудовий графік! Подивіться на ці графіки і спробуйте визначити будь-які з характеристик, зазначених вище. Що ми можемо припустити, візуалізуючи дані?
У наступному уроці ви створите модель ARIMA для створення прогнозів.
---
## 🚀Виклик
Складіть список усіх галузей і сфер досліджень, які, на вашу думку, могли б отримати користь від прогнозування часових рядів. Чи можете ви придумати застосування цих методів у мистецтві? У економетриці? Екології? Роздрібній торгівлі? Промисловості? Фінансах? Де ще?
## [Тест після лекції](https://ff-quizzes.netlify.app/en/ml/)
## Огляд і самостійне навчання
Хоча ми не будемо розглядати їх тут, нейронні мережі іноді використовуються для покращення класичних методів прогнозування часових рядів. Дізнайтеся більше про них [у цій статті](https://medium.com/microsoftazure/neural-networks-for-forecasting-financial-and-economic-time-series-6aca370ff412)
## Завдання
[Візуалізуйте ще кілька часових рядів](assignment.md)
---
**Відмова від відповідальності**:
Цей документ було перекладено за допомогою сервісу автоматичного перекладу [Co-op Translator](https://github.com/Azure/co-op-translator). Хоча ми прагнемо до точності, зверніть увагу, що автоматичні переклади можуть містити помилки або неточності. Оригінальний документ мовою оригіналу слід вважати авторитетним джерелом. Для критично важливої інформації рекомендується професійний людський переклад. Ми не несемо відповідальності за будь-які непорозуміння або неправильні тлумачення, що виникли внаслідок використання цього перекладу.