Please use this identifier to cite or link to this item:
https://er.chdtu.edu.ua/handle/ChSTU/6641| Title: | Аналіз та порівняння алгоритмів машинного навчання для прогнозування енергоспоживання в IoT-системах |
| Authors: | Бабенко, Віра Гречуха, Олександр |
| Issue Date: | 2025 |
| Abstract: | У сучасних IoT-системах значна кількість пристроїв працює від обмежених енергетичних ресурсів, що потребує ефективного моніторингу та прогнозування енергоспоживання. Для підвищення точності прогнозів і оптимізації використання енергії застосовуються алгоритми машинного навчання. Ця робота присвячена розробці програмного забезпечення для збору даних від IoT-пристроїв, прогнозування їх енергоспоживання та порівнянню різних моделей машинного навчання з метою визначення найбільш ефективного підходу. Метою кваліфікаційної роботи є створення програмного забезпечення для прогнозування енергоспоживання IoT-пристроїв та порівняння алгоритмів машинного навчання з визначенням найефективнішого з них. Об'єкт дослідження ‒ IoT-пристрої та системи для моніторингу та прогнозування їх енергоспоживання. Предмет дослідження – алгоритми машинного навчання для прогнозування енергоспоживання IoT-пристроїв та їхнє порівняння за ефективністю. Наукова новизна полягає у розробці та дослідженні програмного забезпечення, яке поєднує методи машинного навчання з практичним прогнозуванням енергоспоживання IoT-пристроїв. У роботі порівнюються різні алгоритми ML для визначення найбільш ефективного підходу, а також пропонується модель, що підвищує точність прогнозування та може бути інтегрована в реальні IoT-системи для оптимізації їх енергоспоживання. Практична цінність роботи полягає у створенні програмного забезпечення, яке дозволяє прогнозувати енергоспоживання IoT-пристроїв та формувати звіти для аналізу. Результати дослідження можуть бути використані для оптимізації роботи IoT-систем, зменшення витрат енергії, підвищення автономності пристроїв та підвищення ефективності управління ресурсами в реальних проектах. Кваліфікаційна робота складається з чотирьох розділів: 1. У першому розділі розглядається аналіз предметної області та постановка задачі. 2. У другому розділі оцінюються доступні технології та обираються підходи для розробки системи для прогнозування енергоспоживання IoT- пристроїв. 3. У третьому розділі розробляється система для прогнозування енергоспоживання IoT-пристроїв з використанням алгоритмів машинного навчання та аналізується її ефективність. 4. У четвертому розділі розглядається захист розробленої інформаційної системи. Висновки включають в себе основні результати роботи. У додатках наведено специфікацію, текст програми та інструкцію користувача. Загальний обсяг роботи становить 88 сторінок. У кваліфікаційній роботі магістра 15 рисунків, 1 таблиця, 3 додатки. Для виконання роботи використано 25 літературних джерела. |
| URI: | https://er.chdtu.edu.ua/handle/ChSTU/6641 |
| Appears in Collections: | 123 Комп’ютерна інженерія (Системне програмування) |
Files in This Item:
| File | Description | Size | Format | |
|---|---|---|---|---|
| 1_ТИТУЛКА_Гречуха-merged.pdf Restricted Access | 2.07 MB | Adobe PDF | View/Open Request a copy |
Items in DSpace are protected by copyright, with all rights reserved, unless otherwise indicated.
Extracted text
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
ЧЕРКАСЬКИЙ ДЕРЖАВНИЙ ТЕХНОЛОГІЧНИЙ УНІВЕРСИТЕТ
ФАКУЛЬТЕТ ІНФОРМАЦІЙНИХ ТЕХНОЛОГІЙ І СИСТЕМ
КАФЕДРА ІНФОРМАЦІЙНОЇ БЕЗПЕКИ ТА КОМП’ЮТЕРНОЇ
ІНЖЕНЕРІЇ
Пояснювальна записка
до кваліфікаційної роботи магістра
на тему: «Аналіз та порівняння алгоритмів
машинного навчання для прогнозування
енергоспоживання в IoT-системах»
ЧДТУ.252401.001 ПЗ
Виконав: студент 2 курсу, групи МСП-2406
спеціальності 123 – Комп’ютерна інженерія
за освітньою програмою – Системне
програмування
Олександр ГРЕЧУХА
Керівник
д.т.н., професор Віра БАБЕНКО
Н. контроль
Світлана ГРЕСЬКО
Рецензент
доцент кафедри підвищення кваліфікації та
спеціалізованої підготовки у сфері цивільного
захисту ННІ інженерної та спеціальної підготовки
НУЦЗ України, к.т.н., доц.
Руслан МЕЛЬНИК
«ЗАХИСТ ДОЗВОЛЯЮ»
Завідувач кафедри ІБ та КІ
к.т.н., доцент ______ Артем ЛАВДАНСЬКИЙ
Черкаси 2025 року
Форма № Н-9.01
Черкаський державний технологічний університет
Факультет інформаційних технологій і систем
Кафедра інформаційної безпеки та комп‘ютерної інженерії
Освітньо-кваліфікаційний рівень магістр
Спеціальність 123 – Комп’ютерна інженерія
Освітня програма Системне програмування
«ЗАТВЕРДЖУЮ»
Завідувач кафедри _______ Артем ЛАВДАНСЬКИЙ
«08» жовтня 2025 року
ЗАВДАННЯ
на кваліфікаційну роботу магістра студенту
Гречуха Олександру Володимировичу
(прізвище, ім‘я, по батькові)
1. Тема роботи Аналіз та порівняння алгоритмів машинного навчання для
прогнозування енергоспоживання в IoT-системах
Керівник роботи Бабенко Віра Григорівна, д.т.н., професор
(прізвище, ім’я, по батькові, науковий ступінь, вчене звання)
затверджені наказом університету від «07» жовтня 2025р. № 307/03-03
2. Строк подання студентом роботи
3. Вихідні дані до роботи:
IoT, ML, енергоспоживання, прогнозування, алгоритми машинного навчання, база даних,
мікроконтролери, сенсори, , порівняння алгоритмів, UI, безпека даних, авторизація,
автентифікація
4. Зміст розрахунково-пояснювальної записки (перелік питань, що їх належить розробити):
Вступ
Розділ 1 Аналіз предметної області та постановка задачі дослідження
Розділ 2 Вибір технології та інструментальних засобів розробки системи
Розділ 3 Розробка системи аналізу та порівняння алгоритмів машинного навчання для
прогнозування енергоспоживання в IoT системах
Розділ 4 Захист інформаційної системи
Висновки
Перелік скорочень та умовних позначень
Список використаних джерел
Додатки
5. Перелік графічного матеріалу (з точним зазначенням обов’язкових креслень, плакатів):
Додаток А Специфікація
Додаток Б Текст програм
Додаток В Інструкція користувача
6. Консультанти розділів роботи
Підпис, дата
Розділ Прізвище, ініціали та
посада завдання видав завдання прийняв
консультанта
7. Дата видачі завдання 08 жовтня 2025 року
КАЛЕНДАРНИЙ ПЛАН
№ з/п Назва етапів кваліфікаційної роботи магістра Строк виконання
етапів роботи Примітка
1 Збір матеріалу 1.10-7.10.2025 виконано
2 Обробка матеріалу 08.10 – 19.10 виконано
3 Обґрунтування актуальності виконання 20.10 – 25.10 виконано
досліджень
4 Оцінка стану проблеми, виокремлення виконано
дослідницьких задач, постановка задачі 26.10 - 31.10
дослідження
5 Викладення сутності і результатів дослідження 01.11 – 07.11 виконано
6 Практичне застосування результатів виконано
дослідження 08.11 - 18.11
7 Оформлення результатів в пояснювальну записку 19.11 – 27.11 виконано
8 Подання роботи на відгук та рецензування 28.11 - 01.12 виконано
Студент-магістрант ___________________ Олександр ГРЕЧУХА
(підпис)
Керівник роботи ____________________ Віра БАБЕНКО
(підпис)
АНОТАЦІЯ
У сучасних IoT-системах значна кількість пристроїв працює від
обмежених енергетичних ресурсів, що потребує ефективного моніторингу та
прогнозування енергоспоживання. Для підвищення точності прогнозів і
оптимізації використання енергії застосовуються алгоритми машинного
навчання. Ця робота присвячена розробці програмного забезпечення для збору
даних від IoT-пристроїв, прогнозування їх енергоспоживання та порівнянню
різних моделей машинного навчання з метою визначення найбільш
ефективного підходу.
Метою кваліфікаційної роботи є створення програмного забезпечення
для прогнозування енергоспоживання IoT-пристроїв та порівняння алгоритмів
машинного навчання з визначенням найефективнішого з них.
Об'єкт дослідження ‒ IoT-пристрої та системи для моніторингу та
прогнозування їх енергоспоживання.
Предмет дослідження – алгоритми машинного навчання для
прогнозування енергоспоживання IoT-пристроїв та їхнє порівняння за
ефективністю.
Наукова новизна полягає у розробці та дослідженні програмного
забезпечення, яке поєднує методи машинного навчання з практичним
прогнозуванням енергоспоживання IoT-пристроїв. У роботі порівнюються
різні алгоритми ML для визначення найбільш ефективного підходу, а також
пропонується модель, що підвищує точність прогнозування та може бути
інтегрована в реальні IoT-системи для оптимізації їх енергоспоживання.
Практична цінність роботи полягає у створенні програмного
забезпечення, яке дозволяє прогнозувати енергоспоживання IoT-пристроїв та
формувати звіти для аналізу. Результати дослідження можуть бути
використані для оптимізації роботи IoT-систем, зменшення витрат енергії,
підвищення автономності пристроїв та підвищення ефективності управління
ресурсами в реальних проектах.
Кваліфікаційна робота складається з чотирьох розділів:
1. У першому розділі розглядається аналіз предметної області та
постановка задачі.
2. У другому розділі оцінюються доступні технології та обираються
підходи для розробки системи для прогнозування енергоспоживання IoT-
пристроїв.
3. У третьому розділі розробляється система для прогнозування
енергоспоживання IoT-пристроїв з використанням алгоритмів машинного
навчання та аналізується її ефективність.
4. У четвертому розділі розглядається захист розробленої
інформаційної системи.
Висновки включають в себе основні результати роботи. У додатках
наведено специфікацію, текст програми та інструкцію користувача. Загальний
обсяг роботи становить 88 сторінок. У кваліфікаційній роботі магістра 15
рисунків, 1 таблиця, 3 додатки. Для виконання роботи використано 25
літературних джерела.
ANNOTATION
In modern IoT systems, a significant number of devices operate on limited
energy resources, which requires effective monitoring and forecasting of energy
consumption. Machine learning algorithms are used to increase the accuracy of
forecasts and optimize energy use. This work is devoted to the development of
software for collecting data from IoT devices, forecasting their energy consumption
and comparing different machine learning models in order to determine the most
effective approach.
The purpose of the qualification work is to create software for forecasting
the energy consumption of IoT devices and comparing machine learning algorithms
to determine the most effective one.
The object of the research is IoT devices and systems for monitoring and
forecasting their energy consumption.
The subject of the research is Machine learning algorithms for forecasting
the energy consumption of IoT devices and their comparison in terms of efficiency.
The scientific novelty lies in the development and research of software that
combines machine learning methods with practical forecasting of the energy
consumption of IoT devices. The paper compares different ML algorithms to
determine the most effective approach, and also proposes a model that increases the
accuracy of prediction and can be integrated into real IoT systems to optimize their
energy consumption.
The practical value of the paper lies in creating software that allows you to
predict the energy consumption of IoT devices and generate reports for analysis.
The results of the study can be used to optimize the operation of IoT systems, reduce
energy consumption, increase device autonomy and improve the efficiency of
resource management in real projects.
The qualification work consists of 4 sections, which provide information on:
1. The first section considers the analysis of the subject area and the
formulation of the problem.
2. The second section evaluates available technologies and selects
development approaches.
3. The third section develops the system and efficiency.
4. The fourth section considers information system protection
The conclusions include the main results of the work. The appendices contain
the specification, program text and user manual. The total volume of the work is 88
pages. The master's qualification work contains 15 figures, 1 table, 3 appendices. 25
literary sources were used to complete the work.
2
ЗМІСТ
ВСТУП………………………………………………………………………… 4
РОЗДІЛ 1 АНАЛІЗ ПРЕДМЕТНОЇ ОБЛАСТІ ТА ПОСТАНОВКА
ЗАДАЧІ ДОСЛІДЖЕННЯ…………………………………………………..... 7
1.1 Аналіз предметної області…………………………………………. 7
1.2 Вибір напряму дослідження……………………………………….. 15
1.3 Постановка задачі…………………………………………………... 26
1.4 Висновки до розділу 1……………………………………………… 30
РОЗДІЛ 2 ВИБІР ТЕХНОЛОГІЇ ТА ІНСТРУМЕНТАЛЬНИХ ЗАСОБІВ
РОЗРОБКИ СИСТЕМИ………………………………………………………. 31
2.1 Огляд існуючих технологій………………………………………... 31
2.2 Вибір технологій …………………………………………………... 41
2.3 Висновки до розділу 2……………………………………………… 50
РОЗДІЛ 3 РОЗРОБКА СИСТЕМИ АНАЛІЗУ ТА ПОРІВНЯННЯ
АЛГОРИТМІВ МАШИННОГО НАВЧАННЯ ДЛЯ ПРОГНОЗУВАННЯ
ЕНЕРГОСПОЖИВАННЯ В IOT-СИСТЕМАХ……………………………... 52
3.1 Структура системи…………………………………………………. 52
3.2 Опис функцій системи……………………………………………... 58
3.3 Технічні вимоги для роботи з системою………………………....... 65
3.4 Оцінка ефективності …………......................................................... 68
3.5 Висновки до розділу 3……………………………………………… 71
РОЗДІЛ 4 ЗАХИСТ ІНФОРМАЦІЙНОЇ СИСТЕМИ……………………… 73
4.1Огляд існуючих рішень захисту інформаційної системи………… 73
4.2 Реалізація захисту даних в інформаційній системі……………….. 79
4.3 Висновки до розділу 4……………………………………………… 82
ВИСНОВКИ…………………………………………………………………… 83
ПЕРЕЛІК СКОРОЧЕНЬ ТАУМОВНИХПОЗНАЧЕНЬ…………………..... 85
3
СПИСОКВИКОРИСТАНИХДЖЕРЕЛ……………………………………... 87
ДОДАТОК А – 482.ЧДТУ.52401-01 Аналіз та порівняння алгоритмів
машинного навчання для прогнозування енергоспоживання в IoT-
системах
4
ВСТУП
Актуальність теми дослідження. У сучасних умовах стрімкого
розвитку технологій Інтернету речей (IoT) кількість підключених пристроїв
зростає мільярдами щороку. Більшість таких пристроїв працюють автономно,
використовують обмежені енергетичні ресурси й залежать від ефективного
управління енергоспоживанням. Неефективне використання енергії
призводить до передчасного розрядження батарей, зниження стабільності
системи, збільшення витрат на технічне обслуговування та ризику
переривання роботи критично важливих сервісів.
Прогнозування енергоспоживання є ключовим завданням для
оптимізації роботи IoT-платформ, оскільки дозволяє завчасно планувати
ресурси, запобігати збоям і забезпечувати довготривалу автономність
пристроїв. Використання алгоритмів машинного навчання відкриває
можливість побудови точних моделей прогнозування, здатних враховувати
численні параметри роботи пристроїв, їхню поведінку в реальному середовищі
та динаміку змін енергоспоживання.
Ураховуючи зростання масштабів IoT-мереж та збільшення обсягів
даних, традиційні методи прогнозування виявляються недостатньо точними
або неефективними. Тому дослідження й порівняння різних ML-алгоритмів
для визначення оптимального підходу до прогнозування енергоспоживання
набуває особливої практичної значущості.
Отже, тема роботи є актуальною, оскільки вона спрямована на
вирішення важливої науково-прикладної проблеми – підвищення
ефективності енергоменеджменту IoT-систем шляхом розробки прогнозних
моделей на основі машинного навчання та створення програмного
забезпечення, яке дозволяє використовувати ці моделі на практиці.
5
Метою кваліфікаційної роботи є створення програмного забезпечення
для прогнозування енергоспоживання IoT-пристроїв та порівняння алгоритмів
машинного навчання з визначенням найефективнішого з них.
Для досягнення цієї мети буде розроблено програмне забезпечення, яке
збирає дані про роботу IoT-пристроїв, виконує прогнозування
енергоспоживання за допомогою різних алгоритмів машинного навчання та
формує звіти для подальшого аналізу й вибору найоптимальнішої моделі.
Основні завдання та цілі роботи включають:
1. Аналіз існуючих підходів до прогнозування енергоспоживання та
застосування ML у IoT-системах.
2. Збір та підготовку даних, необхідних для навчання моделей
машинного навчання.
3. Розробку програмного забезпечення, яке отримує інформацію про
енергоспоживання IoT-пристроїв.
4. Реалізацію кількох алгоритмів машинного навчання для
прогнозування енергоспоживання.
5. Порівняння точності та ефективності моделей за визначеними
метриками.
Робіт, які повністю присвячені саме прогнозуванню енергоспоживання
IoT-пристроїв за допомогою ML, може бути не так багато, але є ряд книжок та
наукових ресурсів, які дуже добре доповнюють цю тему. «Оптимізація IoT-
мереж: енергоефективне управління ресурсами за допомогою машинного
навчання» авторів Суварна Патіл, Маніша Сунил Бенде та Светі Шарма
присвячена методам зменшення енергоспоживання в IoT-системах та
оптимізації роботи пристроїв. Вона показує, як алгоритми машинного
навчання можуть прогнозувати енергоспоживання, аналізувати ефективність
різних підходів та приймати оптимальні рішення для управління ресурсами.
Книга містить практичні приклади використання ML у реальних мережах IoT
та рекомендації для розробників і дослідників щодо інтеграції моделей у
6
проєкти.
Об'єкт дослідження – IoT-пристрої та системи для моніторингу та
прогнозування їх енергоспоживання.
Предмет дослідження – алгоритми машинного навчання для
прогнозування енергоспоживання IoT-пристроїв та їхнє порівняння за
ефективністю.
Наукова новизна полягає у розробці та дослідженні програмного
забезпечення, яке поєднує методи машинного навчання з практичним
прогнозуванням енергоспоживання IoT-пристроїв. У роботі порівнюються
різні алгоритми ML для визначення найбільш ефективного підходу, а також
пропонується модель, що підвищує точність прогнозування та може бути
інтегрована в реальні IoT-системи для оптимізації їх енергоспоживання.
Практична цінність роботи полягає у створенні програмного
забезпечення, яке дозволяє прогнозувати енергоспоживання IoT-пристроїв та
формувати звіти для аналізу. Результати дослідження можуть бути
використані для оптимізації роботи IoT-систем, зменшення витрат енергії,
підвищення автономності пристроїв та підвищення ефективності управління
ресурсами в реальних проектах.
Кваліфікаційна робота складається з чотирьох розділів, в яких подано
такі матеріали:
1. У першому розділі розглядається аналіз предметної області та
постановка задачі.
2. У другому розділі оцінюються доступні технології та обираються
підходи для розробки.
3. У третьому розділі розробляється система та оцінюється її
ефективність.
4. У четвертому розділі розглядається захист інформаційної системи.
Використана література, під час написання кваліфікаційної роботи,
досить добре розкриває тему та відображає потреби для аналізу.
7
РОЗДІЛ 1 АНАЛІЗ ПРЕДМЕТНОЇ ОБЛАСТІ ТА ПОСТАНОВКА
ЗАДАЧІ ДОСЛІДЖЕННЯ
1.1 Аналіз предметної області
Інтернет речей (IoT, Internet of Things) ‒ це концепція мережі фізичних
пристроїв, транспортних засобів, побутової техніки, сенсорів та інших
об’єктів, які підключені до Інтернету та здатні збирати, обмінюватися і
аналізувати дані без прямої участі людини. IoT дозволяє автоматизувати
процеси, підвищувати ефективність систем і забезпечувати нові рівні взаємодії
між людьми, пристроями та сервісами. Ключовими компонентами IoT є
сенсори, актуатори, мережеві модулі, платформи для зберігання даних і
програмне забезпечення для обробки та аналізу інформації.
Типи IoT-пристроїв:
1. Побутові пристрої (Smart Home) ‒ розумні термостати, освітлення,
холодильники, пральні машини та системи безпеки, які дозволяють
автоматизувати домашнє середовище;
2. Носимі пристрої (Wearables) ‒ фітнес-трекери, розумні годинники,
медичні сенсори, що моніторять фізичний стан користувача та передають дані
для аналізу;
3. Промислові IoT-пристрої (IIoT) ‒ датчики на виробничих лініях,
системи контролю якості, обладнання для моніторингу енергоспоживання,
температури, тиску та інших параметрів;
4. Транспортні та логістичні пристрої ‒ системи моніторингу
автотранспорту, GPS-трекери, смарт-склади для відстеження вантажів та
оптимізації маршрутів;
5. Міські та інфраструктурні рішення (Smart City) ‒ сенсори для
моніторингу трафіку, якості повітря, освітлення вулиць, управління
8
водопостачанням та електромережею.
Сфери застосування IoT:
1. Розумний дім: автоматизація побутових процесів, енергозбереження
та підвищення комфорту;
2. Охорона здоров’я: дистанційний моніторинг пацієнтів, медичні
датчики та носимі пристрої;
3. Промисловість і виробництво: оптимізація виробничих процесів,
передбачуване технічне обслуговування та контроль енергоспоживання.
4. Транспорт та логістика: відстеження вантажів, моніторинг стану
транспорту та автоматизація складських процесів;
5. Міське управління та Smart City: контроль інфраструктури,
оптимізація енергоспоживання та підвищення якості життя мешканців.
Таким чином, IoT є універсальною технологією, яка охоплює широкий
спектр пристроїв і застосувань, створюючи основу для ефективного збору
даних та їх аналізу, що безпосередньо пов’язано з питанням прогнозування
енергоспоживання. Приклади застосування зображено на рисунку 1.1.
Рисунок 1.1 – Напрямки застосування IoT
9
Енергоспоживання пристроїв Інтернету речей (IoT) є ключовим
параметром, що визначає ефективність, надійність та стійкість
функціонування сучасних мереж із великою кількістю автономних
компонентів. У масштабованих IoT-системах, де кожен пристрій працює від
обмежених джерел живлення, точне визначення енергоспоживання стає
критичною умовою для раціонального управління ресурсами та
прогнозування навантажень [1]. Недооцінка цього параметра може
призводити до перевантаження локальних мереж, зменшення терміну служби
компонентів, зростання ймовірності відмов вузлів та збільшення
експлуатаційних витрат.
Систематичне врахування енергоспоживання дозволяє реалізовувати
комплексний енергоменеджмент, який включає моніторинг, аналітику та
оптимізацію розподілу навантажень між елементами системи. Такий підхід
дозволяє формувати стратегії пріоритетного живлення критичних
компонентів, визначати оптимальні режими роботи пристроїв та інтегрувати
відновлювані джерела енергії. Особливо важливо оцінювати споживання
енергії у пристроїв безперервного живлення, таких як сенсорні вузли,
контролери безпеки або серверні модулі, де перевищення очікуваного
навантаження може призвести до системних збоїв.
Застосування сучасних методів машинного навчання та прогнозування
часових рядів дозволяє аналізувати динаміку енергоспоживання, виявляти
патерни та прогнозувати майбутні потреби в електропостачанні. Це створює
умови для обґрунтованого планування кількості та конфігурації пристроїв, їх
оптимального масштабування та управління режимами роботи з урахуванням
прогнозованих навантажень. Застосування прогнозних моделей дозволяє
мінімізувати витрати на електроенергію, підвищити автономність пристроїв і
забезпечити стабільність роботи IoT-систем у довгостроковій перспективі.
Особливу роль у забезпеченні енергоефективності IoT-систем
відіграють мікроконтролери, які виступають центральними обчислювальними
10
та керуючими елементами сенсорних вузлів. Мікроконтролери відповідають
за збір даних із датчиків, первинну обробку інформації та передачу її в мережу.
Вибір типу мікроконтролера, його архітектури, тактової частоти та режимів
енергоспоживання безпосередньо впливає на загальну ефективність системи,
оскільки саме ці параметри визначають споживання енергії як у активному,
так і у режимі очікування, швидкість обробки даних та можливості інтеграції
алгоритмів машинного навчання для прогнозування.
Сучасні IoT-проєкти використовують широкий спектр мікроконтролерів
із різними характеристиками: від енергоефективних малопотужних рішень
для автономних сенсорних вузлів (наприклад, ESP32, STM32, Arduino Nano)
до більш продуктивних моделей для обробки великих обсягів даних і
управління складними системами (наприклад, Raspberry Pi Pico або
мікроконтролери на базі ARM Cortex-M). Кожен вибір має свої переваги та
обмеження щодо енергоспоживання, продуктивності та інтеграції з іншими
компонентами IoT-системи [2].
Врахування енергоспоживання на рівні мікроконтролера дозволяє
реалізувати динамічне управління режимами роботи, зокрема перемикання
між активним станом, режимом сну та глибокого сну, що критично для
автономних сенсорних мереж з обмеженими джерелами живлення. Крім того,
це відкриває можливості для застосування алгоритмів машинного навчання
безпосередньо на пристрої (Edge ML), що дозволяє здійснювати
прогнозування енергоспоживання, приймати локальні рішення та зменшувати
навантаження на центральні сервери.
Таким чином, інтеграція методів прогнозування енергоспоживання з
вибором оптимальних мікроконтролерів і налаштуванням режимів роботи є
фундаментальним аспектом ефективного, надійного та сталого
функціонування IoT-систем, що поєднує економічні, технічні та екологічні
переваги.
11
Мікроконтролери в IoT-пристроях виконують не лише функції збору та
передачі даних, а й забезпечують локальну обробку інформації, що дозволяє
зменшувати обсяг передаваних даних і, відповідно, економити енергію. Вони
можуть управляти режимами роботи датчиків та актуаторів, регулювати
частоту зчитування показників і оптимізувати використання бездротових
інтерфейсів зв’язку (Wi-Fi, Bluetooth, LoRa, Zigbee), які є одними з найбільш
енергомістких компонентів системи. За допомогою програмування
мікроконтролерів можна реалізовувати алгоритми передобробки та агрегації
даних, що дозволяє передавати тільки значущу інформацію, знижуючи
навантаження на мережу та зменшуючи загальне споживання енергії.
Крім того, мікроконтролери дозволяють інтегрувати різні датчики та
актуатори в єдину систему управління, забезпечуючи синхронізацію та
координацію роботи всіх компонентів IoT-пристрою [3]. Це відкриває
можливості для впровадження інтелектуальних режимів енергозбереження,
таких як адаптивне регулювання частоти зчитування, динамічне
переключення між активним і сплячим режимом або обмеження роботи
певних модулів залежно від пріоритетів.
Використання мікроконтролерів також дозволяє реалізувати концепцію
Edge Computing у IoT-системах, коли частина алгоритмів машинного навчання
та прогнозування енергоспоживання виконується безпосередньо на пристрої.
Це зменшує затримки у передачі даних, скорочує енергоспоживання каналів
зв’язку та забезпечує оперативне реагування на зміни стану системи. Таким
чином, мікроконтролери є центральним елементом, який дозволяє поєднувати
збір даних, локальну обробку та оптимізацію енергоспоживання,
забезпечуючи ефективну роботу сучасних IoT-пристроїв.
Датчики є ключовими компонентами IoT-пристроїв, оскільки саме вони
здійснюють збір інформації про фізичні, хімічні чи біологічні параметри
навколишнього середовища [4]. В залежності від типу інформації, яку вони
вимірюють, датчики можна класифікувати на кілька основних категорій:
12
Фізичні датчики – призначені для вимірювання фізичних величин. До
них належать температурні датчики – вимірюють температуру повітря, рідин
або поверхонь. Приклади: термістори, термопари, цифрові датчики типу
DS18B20. Датчики вологості – визначають відносну вологість повітря.
Приклади DHT22 та SHT31зображені на рисунку 1.2.
Рисунок 1.2 – Приклади фізичних датчиків DHT22, SHT31
Датчики тиску та рівня – вимірюють атмосферний, гідравлічний або
вакуумний тиск; використовуються в промислових і метеорологічних IoT-
системах. Датчики світла – оцінюють інтенсивність освітлення. Приклади:
фотодіоди, LDR, цифрові сенсори BH1750 зображено на рисунку 1.3.
Рисунок 1.3 – Приклад датчики світла BH1750
13
Датчики руху та прискорення – акселерометри, гіроскопи та датчики
наближення дозволяють визначати положення, рух або нахил пристрою.
Приклад зображено на рисунку 1.4.
Рисунок 1.4 – Приклад сенсора прискорення
Хімічні та газові сенсори – забезпечують контроль складу повітря або
рідин. До них відносяться сенсори CO₂, CO, NO₂ та інших газів –
використовуються для моніторингу якості повітря у приміщеннях або на
промислових об’єктах [5]. Сенсори pH та хімічних сполук у воді –
застосовуються у системах контролю водопостачання або агротехнологіях.
Біологічні сенсори – фіксують параметри життєдіяльності людини або
тварин. До них належать датчики серцевого ритму та пульсу – оптичні або
електричні сенсори для носимих IoT-пристроїв. Датчики температури тіла,
рівня кисню в крові (SpO₂) – застосовуються в медичних IoT-системах для
дистанційного моніторингу стану здоров’я.
14
Сенсори позиції та геолокації – забезпечують відстеження координат
або переміщення об’єкта GPS/GLONASS модулі – визначають географічне
положення. Приклад зображено на рисунку 1.5.
Рисунок 1.5 ‒ Приклад GPS/GLONASS модулі
Магнітометри та датчики напрямку – визначають орієнтацію у просторі.
Сенсори звуку та вібрацій – дозволяють фіксувати акустичні сигнали та
механічні коливання. Вони застосовуються для моніторингу стану машин, в
системах безпеки та розпізнавання подій.
Датчики потоку та витрати енергії – вимірюють обсяг споживання рідин,
газів або електроенергії, що особливо актуально для IoT-систем
енергоменеджменту.
Кожен сенсор у складі IoT-пристрою має специфічні вимоги щодо
енергоспоживання, частоти зчитування та інтерфейсів передачі даних. Вибір
відповідного сенсора визначає точність вимірювань, швидкодію та
ефективність всієї IoT-системи [6]. Сучасні рішення часто комбінують кілька
типів сенсорів у єдиному модулі для забезпечення комплексного моніторингу
та оптимізації роботи мережі.
15
1.2 Вибір напряму дослідження
З поширенням концепції Інтернету речей (IoT) у різних сферах ‒ від
розумних міст і виробничих підприємств до логістики та побутового
використання ‒ суттєво зросла кількість пристроїв, що постійно перебувають
у мережі та обмінюються даними. Така інтенсифікація роботи цифрових
систем призводить до істотного збільшення загального енергоспоживання, що
стає однією з ключових проблем при проєктуванні та експлуатації
розподілених IoT інфраструктур.
Одним з найбільш критичних аспектів є обмежені енергетичні ресурси
кінцевих вузлів, більшість з яких живиться від акумуляторів і працює у
важкодоступних місцях. Мікроконтролери, сенсори, модулі бездротового
зв’язку та допоміжні компоненти споживають енергію нерівномірно й часто
непрогнозовано, що може призвести до передчасного виходу з ладу вузла або
порушення функціонування всієї мережі. Особливо високі витрати
спостерігаються при передачі даних через енергозатратні протоколи
(наприклад, Wi-Fi чи LTE), а також при роботі сенсорів з високою частотою
опитування.
Проблему загострює те, що багато IoT-систем працюють у режимі
реального часу та генерують значний трафік, який потребує підтримання
стабільного енергопостачання. За відсутності детального аналізу та
оптимізації виникає надмірне споживання електроенергії, що безпосередньо
впливає на фінансові витрати, а також на довговічність пристроїв і
навантаження на інфраструктуру.
Для забезпечення ефективної роботи IoT платформи важливо
здійснювати комплексний розрахунок енергетичних витрат, який включає:
моделювання енергоспоживання всіх елементів системи, з
урахуванням пікових і середніх навантажень;
оцінку впливу режимів роботи мікроконтролера (активний режим,
переривання, sleep-режими, deep-sleep) на загальні витрати;
16
аналіз енергетичної ефективності протоколів зв’язку (MQTT,
LoRaWAN, ZigBee, BLE, Wi-Fi), оскільки саме передача даних є
найбільш затратною операцією;
розрахунок балансування між частотою опитування сенсорів і
необхідною точністю даних, що дозволяє зменшити кількість зайвих
вимірювань;
визначення потенційних “вузьких місць” у споживанні енергії, які
можуть спричинити перевантаження чи скорочення автономної роботи.
Окрім технічних факторів, важливими залишаються економічний та
екологічний аспекти, оскільки нераціональне енергоспоживання призводить
до збільшення витрат на електроенергію, підвищення операційних витрат та
несприятливого впливу на довкілля. За умови масштабування системи ‒
наприклад, у проектах розумного міста чи логістичних платформах ‒ навіть
незначні перевитрати на рівні окремого вузла сумарно перетворюються у
значні енергетичні втрати.
Таким чином, раціональне планування та точний розрахунок
енергоспоживання є невід’ємними складовими побудови ефективних,
надійних та економічно обґрунтованих IoT рішень. Використання таких
підходів дозволяє оптимізувати алгоритми роботи пристроїв, впроваджувати
енергозберігальні технології, підвищувати автономність сенсорних вузлів та
забезпечувати стабільне функціонування складних розподілених систем у
довгостроковій перспективі.
Енергоспоживання IoT пристроїв є одним із ключових чинників, що
визначають ефективність та тривалість роботи розподілених мереж. У
більшості випадків сенсори, виконавчі модулі та мікроконтролери працюють
автономно, використовуючи батареї або малопотужні джерела живлення, що
робить питання оптимізації енергоспоживання критично важливим. Наукові
дослідження демонструють, що до 70% усіх енергетичних витрат IoT вузла
17
припадає на операції передачі даних, тоді як решта формується
мікроконтролером та сенсорними модулями.
Типовий IoT-вузол складається з трьох основних груп компонентів,
кожна з яких має власні характеристики енергоспоживання:
1. Мікроконтролер (MCU) – обробка даних, виконання алгоритмів,
робота з пам’яттю.
2. Сенсори та периферія – вимірювання параметрів середовища
(температура, вологість, тиск, рух тощо).
3. Комунікаційний модуль – передача даних за протоколами Wi-Fi,
LoRaWAN, BLE, NB-IoT та ін.
Сучасні IoT пристрої використовують мікроконтролери з розширеним
набором енергозберігаючих режимів (наприклад, ARM Cortex-M0/M4, ESP32,
STM32). Основні режими:
Активний режим
1. MCU виконує обчислення, працює з пам’яттю, контролює периферію.
2. Споживання: від 10 до 150 мА, залежно від частоти такту.
Режим очікування (standby)
1. Зберігає контекст, але процесор зупинено.
2. Споживання: 0,1–2 мА.
Глибокий сон (deep sleep)
1. Вимкнено більшість блоків, працює тільки таймер пробудження.
2. Споживання: 1–50 мкА.
Використання моделей машинного навчання для локального
прогнозування енергоспоживання IoT пристроїв дає змогу автоматично
обирати оптимальні режими сну, коригувати інтервали опитування сенсорів,
а також завчасно передбачати пікові навантаження та адаптувати поведінку
системи до зміни енергетичних умов [7]. У масштабних IoT мережах навіть
незначна похибка у прогнозах може призвести до суттєвих негативних
наслідків, таких як передчасна розрядка великої кількості сенсорів, порушення
18
роботи критичних систем моніторингу (пожежогасіння, мікроклімату,
охорони), збільшення операційних витрат та необхідності частих виїздів
технічних спеціалістів, а також до помилок у плануванні систем резервного
живлення та UPS.
Точне прогнозування енергоспоживання дозволяє визначати
оптимальний момент заміни акумуляторів, оцінювати майбутні пікові
навантаження, адаптувати роботу пристрою під доступний рівень заряду,
підвищувати надійність критично важливих модулів та суттєво знижувати
витрати на обслуговування й електроенергію. Для систем, що працюють у
безперервному режимі, важливо враховувати середнє та пікове споживання
пристроїв, динаміку навантажень у часі, поведінку вузлів у різних режимах
роботи, ступінь деградації акумуляторів та вплив зовнішніх умов на витрати
енергії.
Моделі машинного навчання дають змогу враховувати вплив
температури на швидкість розряду батарей, прогнозувати тривалість
автономної роботи та визначати найбільш раціональний момент переходу на
резервне живлення. Це забезпечує вищу енергоефективність, підвищує
стійкість інфраструктури та сприяє економічно обґрунтованому
використанню енергетичних ресурсів у IoT-системах.
Енергоспоживання IoT пристроїв є динамічним параметром і суттєво
змінюється залежно від зовнішніх умов та режимів роботи. Умови
експлуатації ‒ такі як день і ніч, літо й зима, а також характер навколишнього
середовища ‒ впливають на те, як часто пристрої активуються, яку потужність
споживають їхні сенсори та яким чином працюють комунікаційні модулі. Ці
фактори здатні змінювати енерговитрати в рази, що слід враховувати при
проектуванні автономних IoT-систем [8].
Вплив часу доби (день/ніч). У денний час більшість IoT систем працює
в умовах більшої кількості зовнішніх збурень: підвищений рівень шуму,
світла, руху людей чи транспорту. Це може призводити до частішої активації
19
сенсорів руху, камер відеоспостереження, оптичних сенсорів та систем
моніторингу. Наприклад, оптичні датчики (BH1750, TSL2561) уночі можуть
автоматично переходити в режим підвищеної чутливості, що збільшує
споживання струму, а камери можуть використовувати інфрачервоне
підсвічування, яке є в кілька разів енергозатратнішим за роботу вдень.
Вплив сезону (літо/зима). Температурні умови є одним із
найкритичніших чинників. Узимку хімічні процеси в акумуляторах
сповільнюються, що призводить до зниження ефективної ємності батареї. При
температурах нижче 0°C автономність може зменшуватись на 20–40 %. Крім
того, узимку сенсори температури, вологості та атмосферного тиску
працюють частіше та активніше, щоб забезпечити коректний моніторинг
складніших умов довкілля. Улітку збільшений вплив сонячного
випромінювання, вищі температури та підвищена кількість аерозолів можуть
впливати на частоту спрацьовування сенсорів CO₂, пилу та ультрафіолету,
збільшуючи кількість вимірювань і енергоспоживання.
Вплив зовнішнього середовища та режимів роботи. Додатково
енергоспоживання залежить від інтенсивності використання мережі. У
приміщеннях із поганим сигналом Wi-Fi або мобільного зв’язку IoT пристрої
збільшують потужність передавача, що істотно підвищує витрати енергії. У
нічний час мережеве навантаження часто зменшується, що дозволяє системам
працювати з меншою потужністю, але у випадку систем охорони активність
сенсорів, навпаки, може зростати.
Іншим фактором є різні робочі сценарії, зокрема режими “sleep”, “deep
sleep”, періодичне опитування сенсорів або режим реального часу. Влітку
дистанційні системи поливу активуються частіше, а взимку системи обігріву,
вентиляційного контролю та адаптації температури повітря працюють
інтенсивніше, що збільшує кількість передач даних та навантаження на
MCU [9].
20
У сукупності ці фактори призводять до того, що IoT пристрої можуть
споживати енергії вдвічі або навіть утричі більше залежно від часу доби,
сезону або зовнішніх умов. Це підкреслює важливість систем прогнозування
енергоспоживання та необхідність адаптивних алгоритмів, що коригують
поведінку пристроїв відповідно до навколишніх умов і забезпечують
стабільність роботи автономної інфраструктури.
Витрати на електроспоживання IoT систем є змінною величиною, яка
значною мірою залежить від регіону, тарифної політики, сезонних
коефіцієнтів та коливань ринку електроенергії, що суттєво ускладнює точне
довгострокове прогнозування. У різних країнах і навіть у межах одного
регіону ціни на електроенергію можуть відрізнятися в кілька разів через
особливості енергетичної інфраструктури, наявність локальних джерел
генерації, державні субсидії, ступінь розвитку відновлюваної енергетики та
загальне навантаження на енергосистему. Наприклад, у країнах ЄС вартість
кіловат-години часто включає екологічний податок, тоді як у деяких країнах
Азії або Близького Сходу ціна може бути значно нижчою через державне
регулювання та локальні енергоресурси.
Крім просторових відмінностей, суттєвий вплив мають часові фактори,
такі як зміна тарифів у години пікового навантаження, нічні або вихідні
тарифи, сезонні підвищення вартості енергії в період максимального
споживання (зима ‒ інтенсивне опалення, літо ‒ активне використання
кондиціонерів). Для IoT-інфраструктур, що працюють у режимі 24/7, такі
коливання призводять до нерівномірного фінансового навантаження, яке
складно оцінити без спеціальних інструментів.
Додаткову складність становлять непередбачувані ринкові зміни,
зокрема коливання цін на газ, вугілля чи нафту, аварійні ситуації в
енергосистемах, зростання попиту на електроенергію або зміни регуляторної
політики. Усі ці фактори можуть спричинити раптове підвищення тарифів, яке
неможливо передбачити класичними методами аналізу.
21
Таким чином, фінансові витрати на роботу IoT пристроїв є динамічними
та залежними від великої кількості зовнішніх параметрів, що ускладнює точне
планування бюджету та оцінку довгострокової вартості експлуатації. Саме
тому виникає потреба у застосуванні адаптивних алгоритмів прогнозування
та систем інтелектуального аналізу, які здатні враховувати регіональні,
економічні, сезонні та поведінкові зміни у споживанні та вартості
електроенергії. Це дозволяє точніше оцінювати витрати та забезпечувати
стабільну роботу IoT-інфраструктур у мінливих умовах енергетичного ринку.
Варто враховувати, що фактичні витрати на електроспоживання можуть
суттєво відрізнятися залежно від багатьох факторів. По-перше, важливу роль
відіграє регіон, у якому ви проживаєте, адже в різних областях можуть діяти
різні тарифи на електроенергію або додаткові коефіцієнти.
Також велике значення має тарифний план, який обирає споживач: це
може бути однотарифний, двозонний або тризонний тариф, де вартість
кіловат-години суттєво змінюється залежно від часу доби.
Крім того, на кінцеву вартість впливають умови експлуатації
обладнання: частота використання, тривалість роботи, потужність пристрою,
стан електромережі, температура навколишнього середовища та ефективність
самого обладнання.
Через таку кількість змінних дуже складно точно спрогнозувати кінцеві
витрати. Розрахунки можна робити лише приблизно, орієнтуючись на середні
показники споживання та чинні тарифи. Проте реальна сума може
відрізнятися як у більший, так і в менший бік ‒ залежно від конкретних умов
та можливих змін у тарифах.
Машинне навчання (Machine Learning, ML) ‒ це підгалузь штучного
інтелекту, що зосереджується на створенні алгоритмів і математичних
моделей, здатних самостійно виявляти закономірності у даних та адаптуватися
до нової інформації. На відміну від класичних методів програмування, ML-
системи навчаються на основі статистичних залежностей і оптимізаційних
22
процесів, що дозволяє їм приймати рішення без необхідності задавати кожне
правило вручну.
У середовищі Інтернету речей машинне навчання відіграє ключову роль,
оскільки саме воно дає змогу перетворювати великі потоки сенсорних даних
на корисні управлінські сигнали [10]. ML-моделі здатні аналізувати складні,
нелінійні взаємозв’язки між параметрами й обробляти інформацію в режимі
реального часу, що суттєво підвищує ефективність роботи IoT
інфраструктури.
Одним із важливих аспектів застосування ML є оптимізація роботи
самих пристроїв. Алгоритми можуть визначати найраціональніші режими їх
функціонування, виходячи з історичних даних, змін навколишнього
середовища, рівня навантаження та поточного стану енергоресурсів. Такий
підхід забезпечує зниження енергоспоживання, продовження терміну служби
обладнання та загальне підвищення ефективності системи.
Вагому роль відіграють моделі прогнозування, завдяки яким IoT
системи можуть оцінювати майбутній попит, передбачати можливі відмови,
визначати наближення пікових навантажень та оцінювати необхідні ресурси
для підтримання стабільної роботи. Наявність таких прогнозів створює основу
для впровадження предиктивного обслуговування, що дозволяє уникнути
простоїв та аварійних ситуацій.
Не менш значущим напрямом використання ML є автоматизоване
виявлення аномалій. Алгоритми аналізують багатовимірні дані, встановлюють
межі нормальної поведінки системи та здатні швидко виявляти відхилення,
які можуть бути ознакою технічної несправності, помилки сенсора або
потенційної кібератаки. Завдяки цьому підвищується рівень надійності та
безпеки IoT інфраструктури.
Крім того, методи машинного навчання розширюють можливості
аналітичної обробки даних у складних розподілених системах. Алгоритми
класифікації, кластеризації та регресійного аналізу дозволяють структурувати
23
отриману інформацію, ідентифікувати типові сценарії поведінки та формувати
адаптивні механізми керування. Це забезпечує можливість створення
інтелектуальних, самонавчальних систем, які здатні працювати автономно та
ефективно реагувати на зміни в робочих умовах.
Загалом застосування машинного навчання у сфері IoT є
фундаментальним чинником розвитку сучасних кіберфізичних систем. ML
забезпечує перехід від простого збору даних до глибокої аналітичної
інтерпретації, що є критично важливим для моніторингу, оптимізації та
прийняття обґрунтованих рішень у реальному часі.
Машинне навчання включає кілька основних напрямів залежно від
методу навчання та характеру даних. Найпоширеніші типи алгоритмів:
Навчання з учителем (Supervised Learning) ‒ алгоритми навчаються
на основі вхідних даних з відомими виходами. Для IoT це може бути прогноз
енергоспоживання на основі історичних показників або передбачення відмови
сенсора. Серед популярних моделей ‒ лінійна регресія, деревоподібні
алгоритми (Decision Trees), метод опорних векторів (SVM), нейронні мережі.
Навчання без учителя (Unsupervised Learning) ‒ алгоритми знаходять
приховані закономірності без попередньо відомих міток. Наприклад, в IoT
системах це може допомогти кластеризувати сенсори за режимами роботи або
виявляти нетипові патерни споживання енергії. Типові методи ‒ кластеризація
(K-Means, DBSCAN) та алгоритми зменшення розмірності (PCA).
Підкріплене навчання (Reinforcement Learning) ‒ система навчається
шляхом взаємодії з середовищем та отримання винагороди за правильні дії. У
IoT цей підхід дозволяє оптимізувати роботу пристроїв у режимі реального
часу: наприклад, динамічно регулювати інтервали опитування сенсорів або
перемикання між енергозберігаючими режимами.
Вибір методу навчання залежить від типу даних та цілей системи.
Наприклад, для прогнозування енергоспоживання часто використовують
часові ряди та рекурентні нейронні мережі (RNN, LSTM), які здатні
24
враховувати залежності в часі та передбачати майбутні навантаження. Для
виявлення аномалій застосовують автоенкодери або алгоритми статистичного
контролю, які виділяють нетипові значення серед великого потоку даних.
Крім того, широко використовуються ансамблеві методи (Random
Forest, Gradient Boosting), що дозволяють поєднувати результати кількох
моделей для підвищення точності прогнозів [11].
Приклади застосування ML у IoT:
1. Прогнозування енергоспоживання: ML-моделі аналізують історичні
дані з сенсорів та передбачають пікові навантаження, дозволяючи
оптимально розподіляти енергетичні ресурси та зменшувати витрати.
2. Предиктивне обслуговування: на основі аналізу роботи пристроїв
алгоритми визначають ймовірність відмови, сигналізують про
необхідність заміни акумуляторів або обслуговування обладнання.
3. Оптимізація роботи сенсорів: ML допомагає встановлювати
оптимальні режими роботи та інтервали опитування датчиків, що
дозволяє збалансувати енергоспоживання та точність вимірювань.
4. Виявлення аномалій та безпека: алгоритми автоматично аналізують
потоки даних і виявляють підозрілі або нетипові події, що може свідчити
про технічні проблеми або спроби вторгнення.
Таким чином, застосування ML у IoT системах забезпечує
інтелектуалізацію управління пристроями, підвищує ефективність
використання енергоресурсів, дозволяє передбачати критичні ситуації та
оптимізувати технічне обслуговування. Без використання таких методів
прогнозування та аналітики управління великими розподіленими системами
IoT було б значно складнішим і менш точним.
Машинне навчання є ключовим інструментом для підвищення
ефективності та автономності IoT пристроїв. Завдяки здатності обробляти
великі обсяги даних та виявляти приховані закономірності, ML застосовується
у різних аспектах роботи IoT-систем.
25
Одним із найпоширеніших напрямів є прогнозування
енергоспоживання. Алгоритми машинного навчання аналізують історичні
дані про роботу пристроїв, температурні показники, навантаження та інші
фактори для оцінки майбутнього споживання електроенергії. Це дозволяє
передбачати пікові навантаження, планувати заряд акумуляторів та
оптимізувати роботу системи в реальному часі. Використання ML у цьому
контексті допомагає знизити витрати на електроенергію та забезпечити
стабільність роботи розподілених систем.
Іншим прикладом є предиктивне обслуговування (predictive
maintenance). Моделі машинного навчання здатні виявляти ознаки зносу або
відмови обладнання на ранніх етапах, аналізуючи роботу сенсорів,
температуру, вібрації або рівень навантаження. Це дозволяє технічним
спеціалістам своєчасно проводити заміну компонентів, планувати технічні
роботи та уникати аварійних ситуацій, що особливо важливо для критичних
систем, таких як моніторинг пожежної безпеки, вентиляції або охоронних
систем.
ML також широко використовується для оптимізації роботи сенсорів
та пристроїв. Алгоритми можуть визначати оптимальні інтервали опитування
сенсорів, перемикання між режимами сну та активності пристроїв, що значно
знижує енергоспоживання без втрати точності збору даних. Наприклад, в
розумних будинках або промислових IoT системах ML дозволяє
налаштовувати роботу датчиків освітлення, температури, вологості або руху
таким чином, щоб вони споживали мінімальну кількість енергії під час
простою.
Ще одним важливим напрямом є виявлення аномалій та забезпечення
безпеки. Машинне навчання здатне автоматично аналізувати величезні
потоки даних і виявляти нетипові або підозрілі події. Це може бути ознакою
несправності сенсора, некоректної роботи пристрою або потенційної
26
кіберзагрози [12]. Завдяки цьому забезпечується раннє реагування на
проблеми, що підвищує надійність і безпеку системи.
Додатково ML застосовується для оптимізації енергетичної
інфраструктури та управління ресурсами. Алгоритми аналізують
навантаження у різних режимах роботи, вплив зовнішніх факторів
(температура, освітлення, час доби, сезонність) та прогнозують потребу в
електроенергії для всіх пристроїв. Це дозволяє планувати використання
альтернативних джерел живлення, визначати оптимальний момент
перемикання на резервне живлення та зменшувати загальні експлуатаційні
витрати.
Таким чином, приклади використання машинного навчання в IoT-
системах включають:
1. Прогнозування енергоспоживання і пікових навантажень.
2. Предиктивне обслуговування обладнання та раннє виявлення
зношування.
3. Оптимізацію роботи сенсорів та режимів пристроїв для економії енергії.
4. Виявлення аномалій та забезпечення безпеки систем.
5. Управління енергетичними ресурсами і підвищення ефективності
інфраструктури.
Застосування ML у цих сферах дозволяє IoT системам працювати
автономно, ефективно розподіляти ресурси, підвищувати надійність роботи
та знижувати фінансові витрати. Без машинного навчання масштабні
розподілені системи IoT були б менш гнучкими, менш стабільними та менш
передбачуваними в умовах зміни навантаження та зовнішніх факторів.
1.3 Постановка задачі
Енергоспоживання є критичною характеристикою IoT пристроїв,
оскільки більшість таких систем працюють у режимі постійного моніторингу
та збору даних. Для ефективного управління енергетичними ресурсами
27
необхідно здійснювати точний розрахунок споживання електроенергії, що
включає визначення середньої та пікової потужності, тривалості роботи в
різних режимах та залежності від зовнішніх факторів, таких як температура,
освітлення чи час доби.
Проблема планування енергоспоживання виникає через складність
інтеграції численних IoT пристроїв у єдину мережу з обмеженими ресурсами.
Навіть незначні коливання споживаної потужності окремих пристроїв можуть
призвести до значних наслідків у масштабних системах, таких як передчасне
розряджання акумуляторів, збої в критичних підсистемах або підвищення
витрат на обслуговування.
Для вирішення цих проблем необхідно враховувати наступні аспекти:
1. Динаміка споживання. IoT пристрої можуть працювати в різних
режимах – активному, очікування, сну або низького споживання.
Вартість енергоспоживання та навантаження на акумулятори залежать
від часу роботи в кожному режимі та частоти активації датчиків.
2. Сезонні та часові коливання. Споживання електроенергії змінюється
залежно від пори року, часу доби, умов освітлення та навколишньої
температури. Наприклад, взимку системи опалення або датчики
температури споживають більше енергії, тоді як у літній період пікове
навантаження може зумовлюватися охолодженням або вентиляцією.
3. Регіональні та тарифні відмінності. Вартість електроенергії
варіюється залежно від регіону та обраного тарифного плану, що
ускладнює прогнозування витрат. Для великих мереж IoT навіть
мінімальні неточності у прогнозі можуть значно вплинути на фінансові
витрати.
4. Стан акумуляторів та резервних джерел живлення. Акумулятори з
часом деградують, що зменшує їхню ємність і потребує врахування у
розрахунках тривалості автономної роботи. Неправильне планування
28
може призвести до збоїв у роботі пристроїв та непередбачуваних витрат
на заміну батарей.
5. Масштабність системи. У великих IoT мережах, що включають тисячі
пристроїв, контроль енергоспоживання потребує інтегрованого підходу
та використання аналітичних моделей, здатних прогнозувати пікові
навантаження і оптимізувати розподіл енергії між різними
компонентами.
Врахування всіх цих факторів є важливим для планування роботи IoT
системи, підвищення її стабільності та економічної ефективності. Точне
прогнозування споживання дозволяє:
1. визначати оптимальний час заряджання або заміни акумуляторів;
2. запобігати непередбачуваним відключенням критичних систем;
3. мінімізувати витрати на електроенергію та обслуговування;
4. підвищити надійність роботи системи у різних умовах експлуатації.
Таким чином, задача розрахунку та планування енергоспоживання є
ключовою для забезпечення ефективності, стабільності та автономності IoT
систем, особливо у масштабних мережах із численними сенсорами та
різнорідними пристроями. Використання сучасних методів прогнозування,
включно з машинним навчанням, дозволяє автоматизувати процес аналізу та
прийняття рішень щодо оптимального використання енергії.
У рамках даної кваліфікаційної роботи передбачено створення
програмного забезпечення, яке буде забезпечувати аналіз, прогнозування та
планування енергоспоживання IoT пристроїв. Основною метою розробки є
автоматизація процесу оцінки поточного енергоспоживання та прогнозування
майбутніх навантажень із використанням сучасних методів машинного
навчання.
Програмний застосунок буде збирати дані з різних IoT пристроїв,
включаючи сенсори, мікроконтролери та інші енергозалежні компоненти. На
основі цих даних система повинна:
29
1. формувати звіт про поточне споживання електроенергії кожного
пристрою;
2. здійснювати прогнозування майбутніх пікових навантажень у
залежності від історичних даних, часу доби, умов експлуатації та
зовнішніх факторів;
3. визначати оптимальні режими роботи пристроїв для економії енергії
та підвищення автономності;
4. оцінювати стан акумуляторів та резервних джерел живлення,
визначаючи оптимальний час заряджання або заміни батарей.
Особливістю цього програмного забезпечення є використання різних
алгоритмів машинного навчання для прогнозування енергоспоживання. Це
дозволяє порівнювати ефективність різних моделей, обирати найбільш точні
та адаптивні алгоритми для конкретних сценаріїв використання IoT пристроїв.
Система зможе працювати як у локальному режимі, обробляючи дані
безпосередньо на пристроях, так і у централізованому режимі, аналізуючи
великі масиви даних із різних джерел.
Розробка такого застосунку дозволяє вирішити кілька ключових задач:
1. Підвищити точність планування енергоспоживання у масштабних
IoT-системах;
2. Мінімізувати ризики передчасного розряджання акумуляторів та
відмови критичних систем;
3. Забезпечити економічно ефективне використання енергетичних
ресурсів;
4. Створити гнучку платформу для подальшого впровадження нових
алгоритмів прогнозування та оптимізації роботи пристроїв.
Таким чином, результатом роботи стане інтелектуальний додаток для
прогнозування та планування енергоспоживання IoT пристроїв, який поєднує
аналітичні функції, машинне навчання та практичну реалізацію для
підвищення надійності та ефективності розумних систем.
30
1.4 Висновки до розділу 1
Інтернет речей (IoT) є універсальною технологією, яка об’єднує
різноманітні фізичні пристрої, сенсори та системи з метою автоматизації
процесів, збору та аналізу даних у реальному часі. IoT охоплює широкий
спектр застосувань ‒ від розумних домів і носимих пристроїв до промислових
систем, логістики та міської інфраструктури. Ефективне функціонування
таких мереж безпосередньо залежить від енергоспоживання їхніх
компонентів, особливо мікроконтролерів, сенсорів і комунікаційних модулів,
які часто працюють автономно на обмежених джерелах живлення.
Раціональне планування енергоспоживання є ключовим для
забезпечення надійності, автономності та економічної ефективності IoT
систем. Використання енергозберігаючих режимів мікроконтролерів,
оптимізація роботи сенсорів і протоколів передачі даних, а також
впровадження локального аналізу та прогнозування (Edge ML) дозволяють
зменшити навантаження на мережу та продовжити тривалість автономної
роботи вузлів.
Застосування методів прогнозування енергоспоживання, урахування
впливу зовнішніх умов (температури, часу доби, сезону) та режимів роботи
пристроїв створює умови для стабільного і стійкого функціонування
розподілених IoT мереж. Це дозволяє підвищити ефективність використання
ресурсів, мінімізувати витрати на електроенергію та забезпечити надійність
критично важливих систем у довгостроковій перспективі.
Таким чином, комплексний підхід до моніторингу та управління
енергоспоживанням IoT пристроїв є фундаментальним для розробки сучасних,
масштабованих та економічно обґрунтованих IoT рішень.
31
РОЗДІЛ 2 ВИБІР ТЕХНОЛОГІЇ ТА ІНСТРУМЕНТАЛЬНИХ ЗАСОБІВ
РОЗРОБКИ СИСТЕМИ
2.1 Огляд існуючих технологій
Машинне навчання (ML) ‒ це галузь штучного інтелекту, яка вивчає
методи створення алгоритмів, здатних автоматично вдосконалювати власну
продуктивність на основі аналізу даних. На відміну від традиційного
програмування, де всі правила визначаються людиною, у ML модель
самостійно формує залежності між вхідними та вихідними даними,
оптимізуючи параметри відповідно до обраної функції помилки.
Процес машинного навчання починається зі збирання та підготовки
даних. На цьому етапі усуваються пропуски, аномалії та шум, а дані проходять
нормалізацію або перетворення. Якість підготовки суттєво впливає на
результативність моделі, оскільки алгоритми чутливі до перекосів чи
нерепрезентативності вибірок.
Далі відбувається побудова моделі ‒ математичної структури, яка може
базуватися на лінійних методах, імовірнісних підходах, деревоподібних
структурах або багатошарових нейронних мережах. Під час навчання модель
поступово коригує свої параметри, мінімізуючи похибку за допомогою
оптимізаційних процедур, таких як градієнтний спуск.
Після навчання модель проходить етап оцінювання на незалежних
даних. Це дозволяє перевірити її здатність до узагальнення та визначити
ризики перенавчання, коли система запам’ятовує тренувальні приклади, але
втрачає ефективність на нових даних. Для цього застосовують метрики
точності, повноти, F1-міри та інші.
ML охоплює три основні парадигми: контрольоване, неконтрольоване
та навчання з підкріпленням. Контрольоване навчання працює з міченими
32
даними, неконтрольоване ‒ виявляє приховані структури без попередньої
розмітки, а навчання з підкріпленням оптимізує поведінку агента через
винагороди та штрафи.
Глибоке навчання (Deep Learning) ‒ це підвид штучного інтелекту та
машинного навчання, який використовує багатошарові штучні нейронні мережі
для забезпечення найбільшої точності в таких завданнях, як виявлення об’єктів,
розпізнавання мовлення, мовний переклад та інші. Принцип роботи глибокого
навчання зображено на рисунку 2.1.
Рисунок 2.1 ‒ Принцип роботи глибокого навчання
Штучні нейронні мережі отримують алгоритми та дані, обсяги яких
постійно зростають. Це підвищує ефективність процесу навчання. Чим більше
даних, тим краще навчання. Нейронна мережа з часом охоплює дедалі більше
рівнів. Чим глибше ця мережа проникає, тим вища її ефективність.
На відміну від ML, для DL необхідне високопродуктивне обладнання,
потужні графічні процесори, відеокарти тощо. Цю задачу вирішують за
допомогою NVIDIA GPU [13].
Відеокарти допомагають дослідникам та фахівцям з аналізу даних
пришвидшити навчання з декількох тижнів до декількох годин. А замість того,
щоб купувати дороге обладнання, навчання можна проводити на базі хмари.
Сфери застосування машинного навчання надзвичайно широкі. У
33
медицині ML використовується для аналізу зображень та діагностики. У
фінансових технологіях ‒ для прогнозування ризиків та моделювання
поведінки ринку. У промисловості алгоритми допомагають прогнозувати
відмови обладнання, а в бізнесі ‒ створювати персоналізовані рекомендаційні
системи та аналітичні моделі.
Попри очевидні переваги ‒ адаптивність, масштабованість і
автономність ‒ машинне навчання має обмеження. Моделі залежать від якості
даних, можуть бути схильними до упередженості та потребують значних
обчислювальних ресурсів. Крім того, складні моделі часто мають низьку
інтерпретованість, що ускладнює пояснення рішень.
Перспективи розвитку ML пов’язані з глибоким навчанням, причинно-
наслідковим моделюванням і підвищенням інтерпретованості алгоритмів.
Сучасні дослідження спрямовані на створення систем, здатних не лише
виявляти закономірності, а й робити узагальнення, пояснювати висновки та
швидко адаптуватися до нових задач.
Машинне навчання (ML) є однією з ключових технологій сучасної
штучної інтелектуальної обробки даних. Воно дозволяє системам навчатися
на основі наявних даних, знаходити закономірності та приймати рішення без
прямого програмування всіх правил. Існує кілька основних підходів до
машинного навчання, кожен з яких використовує свої алгоритми та має типові
сфери застосування [14].
Контрольоване навчання (Supervised Learning) використовує
розмічені дані (дані, де відомий результат або “мітка”) для навчання моделі.
Мета – навчитися передбачати вихідні значення для нових даних. Приклад
роботи зображено на рисунку 2.2.
Лінійна регресія (Linear Regression) використовується для
знаходження прямої або площини, яка найкраще описує залежність між
незалежними змінними та числовим результатом. Приклади застосування:
34
прогнозування цін на нерухомість, прогнозування продажів, прогнозування
температури. Приклад роботи зображено на рисунку 2.3.
Рисунок 2.2 – Приклад Контрольоване навчання (Supervised Learning)
Рисунок 2.3 – Приклад Лінійна регресія (Linear Regression)
35
На рисунку показано принцип роботи лінійної регресії ‒ методу, який
передбачає значення залежної змінної на основі незалежної. Зелені точки
позначають реальні дані. Кожна точка має значення X (незалежна змінна) та
Y (залежна змінна). Оранжева лінія ‒ це лінія регресії, яка описується
рівняннямY = w₀ + w₁X + ε. Вона показує найкраще наближення між X і Y.
Різниця між реальним значенням Y і передбаченим моделлю Ŷ позначена
як похибка ε. Це вертикальна відстань між точкою та лінією [15].
Загалом зображення демонструє, як модель знаходить найкращу пряму
та як вимірюється похибка передбачення.
Логістична регресія (Logistic Regression) призначена для класифікації,
зазвичай бінарної. Вона прогнозує ймовірність належності об’єкта до певного
класу. Приклади: діагностика хвороб (хворий/здоровий), визначення, чи є
повідомлення спамом.
Дерева рішень (Decision Trees) створюють дерево з умовами, які
розбивають дані на класи або значення. Приклади застосування: кредитний
скоринг, рекомендаційні системи, класифікація зображень. Графічно
зображено на рисунку 2.4.
Рисунок 2.4 – Приклад Дерева рішень (Decision Trees)
36
Випадковий ліс (Random Forest) – це ансамбль дерев рішень, які
голосують за результат, що підвищує точність та зменшує перенавчання.
Графічно це зображено на рисунку 2.5.
Рисунок 2.5 – Приклад Випадковий ліс (Random Forest)
Приклади: виявлення шахрайства в банківських операціях,
передбачення лікарських ризиків.
Метод опорних векторів (SVM, Support Vector Machines) шукає
гіперплощину, яка максимально відокремлює класи зображено на рисунку 2.6.
На рисунку зображена робота SVM (Support Vector Machine) ‒
алгоритму, що шукає найкращу лінію/гіперплощину для поділу двох класів
даних. Гіперплощина (Hyperplane) ‒ це межа, яка розділяє дані на два класи.
SVM вибирає таку гіперплощину, щоб відстань до найближчих точок була
максимальною.Опорні вектори (Support Vectors) ‒ це точки, які знаходяться
найближче до межі. Вони визначають положення гіперплощини ‒ без них
лінія б зрушилася.Margin (поле/зазор) ‒ це відстань між опорними векторами
різних класів. SVM намагається зробити цей зазор якнайбільшим, щоб
класифікація була надійною.
37
Рисунок 2.6 – Приклад методу опорних векторів
Приклади застосування: розпізнавання облич, класифікація тексту
(позитив/негатив), біоінформатика.
Нейронні мережі (Neural Networks) імітують роботу мозку через шари
нейронів і підходять для складних нелінійних залежностей. Приклади:
розпізнавання образів і мови, автономні автомобілі, прогнозування
фінансових ринків.
Неконтрольоване навчання (Unsupervised Learning) працює з даними
без міток. Основна мета – знайти структуру або закономірності в даних.
Кластеризація (Clustering) групує об’єкти за схожістю. Один із
популярних алгоритмів – K-means. Приклади застосування: сегментація
клієнтів у маркетингу, виявлення аномалій у даних, групування зображень за
схожістю.
Асоціативні правила (Association Rules) шукають залежності між
об’єктами в наборі даних. Приклади: рекомендації товарів у супермаркетах,
аналіз поведінки користувачів на сайті, виявлення закономірностей у
медичних даних.
38
Методи зниження розмірності (Dimensionality Reduction), наприклад
PCA (Principal Component Analysis), дозволяють спростити дані, зберігаючи
їхню основну структуру. Приклади: стиснення зображень, візуалізація
багатовимірних даних, передобробка даних перед класифікацією.
Підкріплювальне навчання (Reinforcement Learning) навчає агентів
робити послідовність дій для максимізації винагороди. Агент отримує
зворотний зв’язок у вигляді нагород або штрафів і поступово покращує
стратегію.
Q-Learning – алгоритм навчання без моделі, який оцінює, які дії
приносять найбільшу винагороду. Приклади: ігри (шахи, Go), навігація
роботів, оптимізація маршруту доставки.
Deep Reinforcement Learning (DRL) поєднує нейронні мережі з
підкріплювальним навчанням для роботи з великими станами та складними
середовищами. Приклади: автономне керування автомобілем, складні
відеоігри, роботизовані маніпуляції [16].
Існуючі моделі машинного навчання, які використовуються у
популярних мовах програмування, охоплюють широкий спектр задач ‒ від
класифікації та регресії до кластеризації, прогнозування та роботи з часовими
рядами. У більшості мов доступні великі бібліотеки, що реалізують як базові,
так і просунуті алгоритми, дозволяючи розробникам швидко створювати
інтелектуальні системи без потреби власноруч реалізовувати математичні
моделі. Принцип роботи зображено на рисунку 2.7.
Однією з найпоширеніших моделей є лінійна та логістична регресія. Ці
алгоритми активно застосовуються для прогнозування числових значень або
визначення категорій об’єктів. У Python вони реалізовані в бібліотеках scikit-
learn, statsmodels, тоді як у JavaScript подібні функції можна знайти в
TensorFlow.js або ml5.js.
39
Рисунок 2.7 – Принцип роботи Deep Reinforcement Learning
Іншим важливим класом моделей є дерева рішень та ансамблеві
алгоритми, такі як Random Forest і Gradient Boosting. Вони забезпечують
високу точність і стійкість до шуму, тому широко використовуються в
аналітиці даних, прогнозуванні поведінки користувачів, фінансових моделях
і системах рекомендацій. Такі моделі доступні в scikit-learn, XGBoost,
LightGBM, CatBoost та аналогічних інструментах для інших мов.
Нейронні мережі та глибинне навчання займають ключове місце у
сучасних ML-системах. Вони використовуються для обробки зображень,
текстів, аудіо, часових рядів та складних багатовимірних даних. У Python їх
реалізують такі фреймворки, як TensorFlow, Keras та PyTorch, тоді як у
JavaScript їх підтримує TensorFlow.js, а у Java ‒ DeepLearning4j [17].
Окрему групу становлять моделі кластеризації, наприклад K-Means,
DBSCAN і Gaussian Mixture Models, які використовуються для групування
схожих об’єктів без попереднього маркування. Такі моделі застосовуються в
задачах сегментації користувачів, пошуку аномалій, аналізу поведінкових
патернів.
40
Також у багатьох мовах програмування доступні моделі для роботи з
часовими рядами, зокрема ARIMA, Prophet, LSTM-мережі та інші підходи.
Вони дозволяють прогнозувати показники, що змінюються у часі, такі як
енергоспоживання, температурні зміни або фінансові дані.
Загалом сучасні мови програмування надають багатий набір
інструментів для побудови ML-рішень, що дозволяє гнучко підбирати моделі
під конкретні задачі та забезпечувати високу точність прогнозування й
аналізу.
Python є провідною мовою програмування у сфері машинного навчання
завдяки своїй простоті, читабельності та інтуїтивному синтаксису. Це
дозволяє розробникам швидко будувати прототипи, проводити експерименти
та фокусуватися не на технічних деталях реалізації, а на самій логіці моделі.
Низький поріг входу робить Python доступним як для досвідчених інженерів,
так і для студентів та дослідників.
Однією з ключових причин популярності Python є наявність величезної
екосистеми бібліотек для роботи з даними та машинним навчанням.
Бібліотеки NumPy, Pandas та SciPy забезпечують високоефективні
інструменти для математичних обчислень та аналізу даних. Інструменти, такі
як scikit-learn, TensorFlow, PyTorch, Keras, надають готові реалізації від
базових моделей до складних нейронних мереж, що значно прискорює
розробку навіть складних ML-систем.
Python також має сильну інтеграцію з інструментами для роботи з
великими даними, такими як Apache Spark, Hadoop, а також із хмарними
платформами ‒ AWS, Google Cloud, Azure. Така сумісність робить Python
універсальним інструментом для побудови інтелектуальних систем, які
масштабуються від локального комп’ютера до розподілених обчислювальних
інфраструктур [18].
Важливою перевагою Python є активна та велика спільнота розробників.
Завдяки цьому мова постійно розвивається, регулярно з’являються нові
41
бібліотеки, оптимізації та навчальні матеріали. Спільнота забезпечує швидку
підтримку, численні форуми, GitHub-проєкти, документацію та готові
приклади, що значно спрощує вирішення будь-яких проблем під час розробки
ML-рішень.
Python також чудово підходить для наукової та дослідницької роботи.
Інструменти на кшталт Jupyter Notebook дозволяють поєднувати код, графіки,
аналітику та текстові коментарі в одному документі. Це робить процес
дослідження моделей та їх тестування прозорим, структурованим і зручним
для повторного використання або публікації результатів.
Завдяки всім цим перевагам Python став стандартом у сфері машинного
навчання, глибинного навчання, аналізу даних і штучного інтелекту. Мова
забезпечує оптимальний баланс між продуктивністю, простотою та гнучкістю,
що робить її найбільш ефективним інструментом для створення сучасних ML-
додатків.
2.2 Вибір технологій
Під час вибору алгоритму машинного навчання для прогнозування
енергоспоживання в IoT системах важливо спочатку визначитися з мовою
програмування, на основі якої буде розроблена система прогнозування. Це
пов’язано з тим, що різні мови мають власні екосистеми бібліотек,
інструментів і оптимізацій, які можуть впливати на доступність конкретних
алгоритмів, швидкість їх реалізації та зручність інтеграції з IoT
інфраструктурою. Наприклад, якщо система буде написана на Python, то
розробник отримає широкий доступ до популярних фреймворків машинного
навчання, таких як TensorFlow, PyTorch чи scikit-learn, що значно спрощує
експериментування з моделями, попередню обробку даних та побудову
повного конвеєра. Якщо ж для програмного середовища обрано C++ або Java,
потрібно враховувати їхні спеціалізовані бібліотеки, які подекуди орієнтовані
42
на високопродуктивні обчислення або на промислові застосування з
підвищеними вимогами до надійності.
Оскільки IoT системи часто працюють у різнорідному середовищі ‒ від
мікроконтролерів із обмеженими ресурсами до хмарних платформ, де
відбувається обробка великих обсягів даних ‒ вибір мови програмування
визначає як обчислювальні можливості, так і спосіб розгортання моделі. Для
пристроїв із мінімальною пам’яттю та обмеженим енергоспоживанням
частіше застосовують мови, що забезпечують низькорівневий контроль, тоді
як для аналітики в хмарі або на периферії доцільніше використовувати мови з
потужними бібліотеками аналізу даних. Лише після визначення
інструментарію можна переходити до оцінки конкретних алгоритмів, оскільки
їх ефективність багато в чому залежить від того, наскільки добре вони
реалізовані у вибраному середовищі.
Таким чином, вибір мови програмування є ключовим початковим
кроком, який впливає на всю подальшу архітектуру системи прогнозування
енергоспоживання. Він визначає доступні інструменти, обмеження,
продуктивність, а також можливості підтримки й масштабування. Лише
маючи чітке технологічне підґрунтя, можна обґрунтовано підбирати
алгоритми, що найкраще відповідатимуть специфіці даних, способу їх
збирання та вимогам IoT платформи.
Для роботи з машинним навчанням найкраще підходить Python,
оскільки саме ця мова має найбільш розвинену та зручну екосистему
інструментів, орієнтованих на побудову моделей різного рівня складності.
Python надає доступ до величезної кількості спеціалізованих бібліотек, таких
як TensorFlow, PyTorch, scikit-learn, XGBoost, Keras та багатьох інших, які
дозволяють швидко створювати й експериментувати з різними алгоритмами
без необхідності реалізовувати їх з нуля. Ці інструменти активно
підтримуються спільнотою, постійно оновлюються та містять оптимізації, що
допомагають скоротити час розробки, зосередившись не на технічних деталях,
43
а на самій логіці моделі та якості прогнозування.
Крім того, Python відзначається простим синтаксисом, який робить його
доступним навіть для новачків у галузі машинного навчання. Зрозумілий та
мінімалістичний стиль коду дозволяє ефективно експериментувати з
моделями, аналізувати дані та швидко вносити зміни. Завдяки цьому процес
побудови системи стає набагато більш прозорим, а взаємодія між аналітиками,
дослідниками та розробниками – легшою. Саме тому більшість навчальних
матеріалів, наукових робіт і прикладів реалізації алгоритмів створюються саме
на Python, що забезпечує широке ком’юніті і доступність підтримки.
Ще однією вагомою перевагою Python є інтеграція з великим набором
інструментів для роботи з даними, що є критично важливим у будь-якому
проєкті машинного навчання. Бібліотеки на кшталт NumPy, Pandas та
Matplotlib дозволяють швидко очищати, структурувати та візуалізувати дані,
що значно впливає на якість моделі. Усі етапи ‒ від збору даних до навчання,
оптимізації та розгортання ‒ можуть бути реалізовані в межах одного
екосистемного середовища. Така комплексність робить Python оптимальним
вибором для побудови систем машинного навчання, включно з
прогнозуванням енергоспоживання в IoT середовищах, де важлива і гнучкість,
і швидкість розробки, і можливість роботи з великими масивами інформації.
Node.js не є найкращим вибором для реалізації систем машинного
навчання, оскільки він спочатку створювався як середовище для побудови
високонавантажених серверних застосунків та роботи з асинхронними
потоками даних, а не для наукових обчислень. Хоча для JavaScript існують
певні бібліотеки, що дозволяють працювати з моделями, такі як TensorFlow.js
чи Brain.js, їхня функціональність значно поступається екосистемі Python.
Вони мають обмежену кількість алгоритмів, меншу гнучкість під час
налаштування моделей та обмеження щодо продуктивності, особливо коли
йдеться про великі обсяги даних чи складні архітектури нейронних мереж. У
контексті IoT, де прогнозування енергоспоживання часто вимагає точності та
44
доброго опрацювання часових рядів, такі обмеження можуть відчутно
вплинути на якість моделі й надійність системи.
Java, у свою чергу, хоч і є потужною мовою для корпоративних
застосунків, не має такої гнучкої та зрілої екосистеми інструментів для
машинного навчання, як Python. Бібліотеки Java на кшталт Weka,
Deeplearning4j чи Smile є функціональними, але вони менш зручні для швидкої
розробки, експериментування та інтерактивної роботи з даними. Їхній
синтаксис складніший, а процес побудови моделей зазвичай вимагає більше
коду й часу. Через це Java краще підходить для вже готових, стабільних
промислових систем, але не для динамічного процесу дослідження, тестування
й оптимізації моделей машинного навчання. У ситуації, коли потрібно швидко
аналізувати дані, обробляти великі набори спостережень і випробовувати різні
методи прогнозування, Java втрачає гнучкість, яку так цінують у машинному
навчанні.
У результаті, з огляду на всі порівняння, остаточним і найбільш
раціональним вибором стає Python. Його розвинена інфраструктура для
машинного навчання, простота синтаксису, широкі можливості візуалізації й
аналізу даних, а також величезна спільнота роблять його найефективнішим
рішенням для задач прогнозування енергоспоживання в IoT-системах. Python
дозволяє скоротити час розробки, підвищити точність моделей та забезпечити
зручну інтеграцію з будь-якою інфраструктурою, що особливо важливо у
сфері інтелектуального аналізу даних та побудови енергоефективних систем.
Перед початком розробки системи прогнозування енергоспоживання
важливо визначитися з тим, який саме механізм передачі даних від
мікроконтролерів буде використовуватися. Це рішення є критичним, оскільки
саме від нього залежить стабільність збирання інформації, швидкість
надходження показників, енергоефективність роботи пристроїв та здатність
системи масштабуватися з урахуванням зростання кількості IoT-вузлів. Умови
роботи мікроконтролерів часто характеризуються обмеженими ресурсами,
45
нестабільними каналами зв’язку та необхідністю постійно передавати
невеликі, але регулярні пакети даних, тому механізм комунікації має бути
легким, надійним та оптимізованим.
У сфері IoT застосовується чимало різних підходів до комунікації. Одні
системи використовують HTTP, що є універсальним і простим у налаштуванні,
але має суттєві недоліки у вигляді надмірного обсягу службової інформації та
збільшеного енергоспоживання при постійній передачі даних. Інші будуються
на WebSocket, який забезпечує двосторонній зв’язок, але теж вимагає більше
ресурсів і не завжди підходить для слабких мікроконтролерів. Постійно
використовуються протоколи низькорівневої передачі на кшталт CoAP або
LoRaWAN, але вони мають свої специфічні сценарії застосування і не завжди
забезпечують гнучкість у розгортанні складних аналітичних систем. Таким
чином, вибір механізму передачі стає не лише технічним питанням, а й
архітектурним рішенням, яке впливає на всю подальшу роботу системи.
Найбільш оптимальним рішенням для задач, пов’язаних із передаванням
телеметрії від мікроконтролерів та сенсорів, є використання протоколуMQTT.
Він створений спеціально для систем із обмеженими ресурсами, забезпечуючи
мінімальне навантаження на процесор і мережу завдяки принципу публікації
та підписки. MQTT підтримує стабільний обмін повідомленнями навіть в
умовах нестабільного зв’язку, що особливо важливо для IoT пристроїв,
розміщених у польових чи енергообмежених умовах. Завдяки своїй легкій
реалізації і можливості легко масштабуватися, MQTT дозволяє організувати
ефективний потік даних, який без затримок надходитиме до системи
прогнозування, забезпечуючи актуальність і точність моделі машинного
навчання. Саме тому MQTT стає найбільш логічним і практичним вибором
для структури комунікації в даному проєкті.
Після вибору механізму передачі даних важливо визначитися з тим,
яким чином отримана від мікроконтролерів інформація буде зберігатися
всередині системи. Це рішення має стратегічне значення, оскільки саме база
46
даних формує основу для подальшої аналітики, навчання моделей машинного
навчання та довготривалого зберігання історичних показників. Вибір
підходящого сховища визначає швидкість обробки великих потоків
телеметрії, можливості масштабування, гнучкість оновлення структури даних
і стабільність роботи всієї системи. Дані від IoT пристроїв часто надходять
нерівномірно, структурно відрізняються та швидко накопичуються, тому база
даних має підтримувати гнучку схему, високу продуктивність при записі та
зручні інструменти аналізу.
У цьому контексті варто розглянути різні типи баз даних, які можуть
бути використані в подібній системі. Традиційні реляційні бази даних, такі як
MySQL чи PostgreSQL, надають високу надійність та строгість структури, але
ця строгість може стати обмеженням тоді, коли структура вхідних даних
постійно змінюється або коли обсяг написання даних є дуже високим. Крім
того, робота з великими потоками телеметрії в таких базах може потребувати
додаткової оптимізації та ускладнювати горизонтальне масштабування.
Існують також спеціалізовані time-series бази даних на кшталт InfluxDB, які
чудово підходять для роботи з часовими рядами й оптимізовані під швидкий
запис. Однак вони частіше використовуються для аналітичних систем
моніторингу, і в разі складніших моделей чи необхідності зберігати різнорідні
дані можуть вимагати додаткових механізмів для інтеграції та гнучкості
структури.
Найбільш збалансованим і практичним рішенням у випадку системи,
що приймає телеметрію від IoT пристроїв, є використання документно-
орієнтованої бази даних MongoDB. Вона забезпечує повну гнучкість при
роботі зі структурою даних, дозволяючи без зайвих змін зберігати записи, що
надходять у різних форматах, що є типовою ситуацією в IoT-середовищах.
MongoDB добре масштабуються горизонтально і дозволяє обробляти великі
потоки даних завдяки своїй архітектурі, орієнтованій на швидкий запис і
читання. Крім цього, її схема зберігання у вигляді JSON-подібних документів
47
робить інтеграцію з сучасними бекенд-системами інтуїтивною та зручною.
Усе це робитьMongoDB оптимальним вибором для зберігання даних у системі
прогнозування енергоспоживання, оскільки вона забезпечує гнучкість,
продуктивність і стабільність, необхідні для роботи з великими обсягами
телеметрії та подальшого навчання моделей машинного навчання.
Для того щоб визначити, який алгоритм машинного навчання найкраще
підходить для прогнозування енергоспоживання, система має бути
спроєктована таким чином, щоб містити в собі велику кількість окремих
модулів, кожен з яких відповідатиме за реалізацію певного підходу до аналізу
та прогнозування. Така архітектура дозволить створити гнучке середовище, у
якому різні моделі зможуть працювати паралельно, порівнюватися між собою
та демонструвати свої результати на однакових наборах даних. Це суттєво
полегшить процес пошуку оптимального алгоритму, адже всі методи будуть
випробовуватися в однакових умовах, зуміють показати динаміку своїх
прогнозів і продемонструвати реальну ефективність.
Усі алгоритми машинного навчання, які будуть задіяні в роботі системи,
ґрунтуватимуться на open source рішеннях, що гарантує їх доступність,
прозорість і можливість глибокої кастомізації. Використання відкритих
бібліотек не лише пришвидшує розробку, а й дозволяє швидко оновлювати
моделі, підлаштовувати їх під нові умови або замінювати новими методами,
які з’являтимуться у світових наукових практиках. Крім того, open source
екосистема створює сприятливі умови для повторюваності результатів,
оскільки кожен етап навчання і кожен алгоритм можуть бути проаналізовані,
перевірені та оптимізовані без обмежень.
У результаті система, що міститиме множинні ML-модулі, зможе
автоматично визначити той алгоритм, який найкраще справляється із задачею
прогнозування. Завдяки порівнянню точності, стійкості та швидкості роботи
кожної моделі, а також оцінці їхньої поведінки на різних типах даних та
часових проміжках, платформа об’єктивно обере найбільш результативний
48
підхід. Такий методологічний підхід дозволяє не обмежуватися одним
методом чи інтуїтивним вибором, а натомість забезпечує науково
обґрунтований пошук оптимального алгоритму, який стане основою надійної
та ефективної системи прогнозування енергоспоживання.
Система прогнозування енергоспоживання буде повністю побудована
на базі open source інструментів машинного навчання, що забезпечить
прозорість, повторюваність результатів і можливість повної кастомізації
моделей. У центрі цієї екосистеми перебуватимуть бібліотеки Python, які є
найпотужнішими у сфері відкритих рішень для аналізу даних і побудови
моделей. Однією з ключових бібліотек стане scikit-learn, що включає широкий
набір класичних алгоритмів машинного навчання. Вона дозволить реалізувати
модулі, які використовують лінійну та поліноміальну регресію, методи
опорних векторів, випадковий ліс, дерева рішень і градієнтний бустинг.
Завдяки своїй простоті та відкритості scikit-learn стане основою для побудови
базових моделей, які дозволять швидко перевірити ефективність традиційних
алгоритмів у задачах прогнозування.
Для реалізації моделей глибокого навчання в системі будуть
використовуватися TensorFlow і PyTorch ‒ два найпопулярніші open source
фреймворки, які давно стали стандартом у світовому науковому та
інженерному середовищі. На базі цих бібліотек будуть створені модулі, які
застосовуватимуть рекурентні нейронні мережі, включно з LSTM та GRU,
адже саме вони найкраще працюють із часовими рядами й дозволяють моделі
вловлювати як короткострокові, так і довгострокові закономірності в
поведінці енергоспоживання. Завдяки відкритому коду цих фреймворків
розробники зможуть гнучко налаштовувати архітектуру мереж, оптимізувати
параметри й аналізувати внутрішні процеси роботи моделі, що є критично
важливим для науково обґрунтованого порівняння алгоритмів.
Також система включатиме модулі на основі XGBoost та LightGBM ‒
відкритих бібліотек, які зарекомендували себе як надзвичайно ефективні
49
рішення для роботи з великими наборами даних і багатовимірними
залежностями. Вони забезпечують швидке навчання, високу точність і
стійкість до зашумлених або неповних даних, що робить їх важливими
кандидатами під час оцінки різних підходів. Обидві бібліотеки є open source,
що дозволяє адаптувати їх під конкретні потреби системи, досліджувати вплив
гіперпараметрів та інтегрувати їх у єдиний інфраструктурний потік разом з
іншими моделями.
Таким чином, система буде поєднувати класичні методи машинного
навчання, глибокі нейронні мережі та сучасні алгоритми бустингу, причому
всі вони базуватимуться виключно на open source інструментах. Це дозволить
створити комплексну екосистему модулів, у якій кожен алгоритм зможе бути
протестований на однакових умовах, а результати порівняння дадуть змогу
визначити найточнішу, найстабільнішу й найоптимальнішу модель для
прогнозування енергоспоживання в IoT системах.
У рамках експерименту для збору телеметрії та подальшого аналізу буде
використано низку мікроконтролерів, які дозволять охопити різні апаратні
можливості й умови роботи IoT пристроїв. Використання декількох платформ
є важливим етапом, оскільки це дає змогу оцінити стабільність системи в
різних середовищах, перевірити універсальність алгоритмів машинного
навчання та переконатися, що обрані методи прогнозування ефективно
працюють незалежно від джерела даних. Такий підхід дозволить створити
максимально реалістичну модель майбутнього розгортання системи, де
пристрої матимуть різну обчислювальну потужність, різний набір сенсорів і
різні мережеві можливості.
Серед пристроїв, що будуть застосовані, важливе місце посідатимуть
класичні плати на базі Arduino, оскільки вони широко використовуються в
простих IoT проєктах і дають можливість моделювати роботу найменш
ресурсних систем. Паралельно з ними у дослідженні братимуть участь плати
Raspberry Pi, які мають значно більшу обчислювальну потужність і
50
дозволяють обробляти складніші дані безпосередньо на пристрої. Це відкриває
можливість протестувати сценарії локальної обробки та попереднього аналізу
телеметрії перед передачею її до центральної системи.
Особливу роль відіграватимуть ESP32 та ESP8266 ‒ популярні
мікроконтролери з вбудованими Wi-Fi модулями, які відзначаються низьким
енергоспоживанням та добре пристосовані до реальних IoT сценаріїв. Вони
дозволяють передавати дані з частотою, необхідною для побудови якісних
часових рядів, а також чудово інтегруються з MQTT, що робить їх ідеальними
пристроями для тестування комунікаційного шару системи. Завдяки
одночасному використанню Arduino, Raspberry Pi, ESP32 та ESP8266
експеримент охопить широкий спектр умов, що забезпечить комплексне
тестування всієї інфраструктури та дозволить визначити, наскільки ефективно
система обробляє дані з різних джерел перед побудовою прогнозів.
2.3 Висновки до розділу 2
У межах даного розділу було проаналізовано сучасні підходи та методи
машинного навчання, а також особливості їх застосування для розв’язання
завдань аналізу та прогнозування на основі даних. Розглянуто основні
парадигми ML ‒ контрольоване, неконтрольоване та підкріплювальне
навчання, а також їх реалізацію за допомогою математичних моделей і
алгоритмів, включаючи методи регресії, дерева рішень, ансамблеві технології
та глибокі нейронні мережі.
Виявлено, що ефективність побудови інтелектуальних систем значною
мірою залежить від якості вхідних даних, обраного алгоритму та правильного
налаштування моделі. Разом із тим, стрімкий розвиток бібліотек і
фреймворків, а також доступність обчислювальних ресурсів роблять машинне
навчання універсальним інструментом для вирішення широкого спектра
завдань у наукових і прикладних сферах.
51
Тому машинне навчання є технологічною основою для створення
високоефективних систем аналізу даних і становить ключовий компонент
сучасних програмних рішень, у тому числі в рамках даної кваліфікаційної
роботи магістра.
52
РОЗДІЛ 3 АНАЛІЗ ТА ПОРІВНЯННЯ АЛГОРИТМІВ МАШИННОГО
НАВЧАННЯ ДЛЯ ПРОГНОЗУВАННЯ ЕНЕРГОСПОЖИВАННЯ В IOT
СИСТЕМАХ
3.1 Структура системи
В рамках даної кваліфікаційної роботи була розроблена система на базі
Python, яка дозволяє прогнозувати енергоспоживання IoT пристроїв.
Створення такої системи є надзвичайно важливим, оскільки сучасні IoT
системи складаються з великої кількості пристроїв, які працюють у різних
умовах та споживають енергію по-різному. Прогнозування енергоспоживання
дозволяє більш ефективно планувати використання батарей та джерел
живлення, оптимізувати роботу мережі та продовжити тривалість роботи
пристроїв без додаткового втручання. Це особливо актуально для систем, що
працюють у віддалених або критично важливих середовищах, де часта заміна
елементів живлення є неможливою або економічно неефективною. Крім того,
прогнозування споживання енергії дозволяє попередньо оцінювати
навантаження на мережу, розробляти енергозберігаючі стратегії та
покращувати загальну стабільність IoT інфраструктури.
Система виконує прогнозування за допомогою методів машинного
навчання, що дозволяє їй навчатися на реальних даних, отриманих від
мікроконтролерів і сенсорів. Використання машинного навчання забезпечує
високу точність прогнозів, оскільки моделі здатні враховувати складні
закономірності в поведінці енергоспоживання, які неможливо передбачити за
допомогою простих математичних формул. Завдяки цьому система не лише
оцінює поточне споживання енергії, а й дає змогу прогнозувати його на
майбутні періоди, адаптуючись до змін у роботі пристроїв, умов середовища
та характеру навантаження. Такий підхід створює основу для інтелектуальної
53
системи управління енергоспоживанням у IoT мережах, підвищує
ефективність роботи пристроїв і дозволяє мінімізувати ризики аварійного
розрядження батарей.
Розроблена система складається з серверної частини, яка є центральним
елементом обробки даних та управління прогнозуванням енергоспоживання
IoT пристроїв. Серверна частина відповідає за отримання даних від
мікроконтролерів, їх обробку, збереження в базі даних та передавання в модулі
машинного навчання для побудови прогнозів. Така архітектура дозволяє
централізовано контролювати всі процеси та забезпечує високий рівень
надійності та ефективності системи.
Особливістю серверної частини є її модульність. Кожен модуль
машинного навчання реалізується окремо, що дозволяє в будь-який момент
часу замінювати або оновлювати алгоритм без необхідності повного
переписування системи. Це забезпечує гнучкість експериментів і тестування
різних моделей, дозволяє швидко інтегрувати нові алгоритми та оптимізувати
точність прогнозів. Модульна структура також спрощує масштабування
системи, оскільки нові модулі можна підключати до існуючої інфраструктури
без порушення роботи інших компонентів. Такий підхід забезпечує тривалу
адаптивність системи та підтримку найсучасніших методів машинного
навчання, що особливо важливо в умовах постійного розвитку технологій IoT
і потреби у високоточному прогнозуванні енергоспоживання.
Модулі машинного навчання системи реалізовані як окремі компоненти
на мові програмування Python, що дозволяє кожному з них мати власну
структуру та підключати різні бібліотеки для роботи з машинним навчанням.
Такий підхід надає максимальну гнучкість у виборі алгоритмів та
інструментів: кожен модуль може використовувати scikit-learn, TensorFlow,
PyTorch, XGBoost або будь-яку іншу open source бібліотеку залежно від потреб
конкретного експерименту. Це дозволяє легко тестувати різні підходи,
порівнювати їх ефективність і визначати оптимальний алгоритм для
54
прогнозування енергоспоживання.
Підключення та інтеграція обраного модуля відбувається під час
перезапуску системи. Така процедура гарантує, що новий модуль буде
коректно ініціалізований у структурі серверної частини, отримає доступ до
необхідних даних і зможе почати виконувати прогнозування без конфліктів із
іншими компонентами. Завдяки цьому модульна архітектура на Python
забезпечує простоту обміну алгоритмами та оновлення системи, дозволяючи
швидко адаптувати її до нових методів машинного навчання та
експериментувати з різними моделями для підвищення точності прогнозів
енергоспоживання IoT пристроїв. Структуру запропонованої системи
зображено на рисунку 3.1
Рисунок 3.1 – Структура розробленої системи
Як видно з рисунку 3.1, модуль машинного навчання в системі є
повністю незалежним і може бути з легкістю замінений без необхідності
втручання в інші компоненти. Така архітектура забезпечує максимальну
55
гнучкість при виборі або оновленні алгоритмів, дозволяючи експериментувати
з різними моделями та швидко інтегрувати нові підходи для прогнозування
енергоспоживання.
Усі результати роботи системи зберігаються в базі даних, що забезпечує
централізоване й надійне сховище інформації. Після обробки даних, які
надходять на MQTT-шлюз від мікроконтролерів, результати прогнозування
також заносяться до бази даних. Це дозволяє не лише зберігати історію
споживання енергії, а й порівнювати ефективність різних алгоритмів
машинного навчання, аналізувати їх точність та динаміку змін показників, що
надходять у реальному часі. Такий підхід гарантує цілісність даних і створює
основу для подальшого аналітичного оброблення та оптимізації прогнозів.
Для роботи модуля машинного навчання необхідний відповідний
сервер, який оснащений потужним процесором (CPU) та графічним
прискорювачем (GPU). Потужний CPU забезпечує ефективну обробку великої
кількості потоків даних, підготовку та нормалізацію інформації, управління
запитами від мікроконтролерів і координацію роботи різних модулів системи.
GPU, у свою чергу, критично важливий для швидкого навчання складних
моделей машинного навчання, зокрема нейронних мереж та алгоритмів
глибокого навчання, які потребують виконання величезної кількості
паралельних обчислень.
Наявність потужного апаратного забезпечення дозволяє значно
скоротити час навчання моделей, обробляти великі обсяги телеметричних
даних, а також забезпечує стабільність і надійність прогнозів навіть у випадку
зростання кількості IoT пристроїв у системі. Крім того, сервер із
високопродуктивним CPU та GPU створює основу для масштабування
системи та інтеграції більш складних алгоритмів у майбутньому без
необхідності повної реконфігурації апаратного середовища.
Система також містить «Модуль обробки даних», який відповідає за
отримання та первинну обробку інформації, що надходить від MQTT-шлюза.
56
Після отримання повідомлень модуль витягує з них дані про
енергоспоживання кожного IoT пристрою та передає цю інформацію до бази
даних для подальшого збереження та аналізу. Такий підхід забезпечує
централізоване зберігання даних і створює надійну основу для навчання
моделей машинного навчання.
У базі дані зберігаються протягом 1-2 місяців, що дозволяє акумулювати
достатньо історичних показників для ефективного навчання системи і
побудови точних прогнозів. Після того як модуль машинного навчання
використовує ці дані для навчання і отримання прогнозів, Модуль обробки
даних автоматично очищає їх із бази, звільняючи місце для нових даних. Така
організація роботи забезпечує постійний обмін актуальною інформацією,
ефективне використання ресурсів бази даних і підтримку високої
продуктивності системи при обробці великих потоків телеметрії від IoT
пристроїв.
Система включає модуль звітів, який виконує ключову функцію
перетворення зібраної інформації в структурований і зрозумілий для
користувача формат, а також забезпечує інтеграцію з API-шлюзом для
подальшої доставки цих даних кінцевому користувачу. Важливість цього
модуля полягає в тому, що навіть найбільш точні та складні прогнози
енергоспоживання, отримані за допомогою машинного навчання, стають
практично корисними тільки тоді, коли вони подані у зручному для аналізу
вигляді. Модуль звітів виконує обробку сирих даних та результатів прогнозів,
агрегує їх і формує зрозумілі візуальні або текстові індикатори, таблиці,
графіки та статистичні зведення, які користувач може легко інтерпретувати.
Однією з основних функцій модуля є відображення інформації про
окремі IoT пристрої, включаючи їхню доступність у мережі, стан з’єднання,
поточне енергоспоживання та динаміку споживання за певний період. Крім
цього, модуль формує прогнозні звіти на основі моделей машинного навчання,
надаючи оцінку можливого майбутнього споживання енергії кожним
57
пристроєм або групою пристроїв. Це дозволяє користувачу не лише
контролювати стан системи в реальному часі, а й планувати енергетичні
ресурси, оптимізувати використання батарей та передбачати потенційні
перевантаження або необхідність технічного обслуговування.
Модуль звітів тісно інтегрований із серверною частиною системи та
API-шлюзом, що забезпечує автоматичну передачу підготовленої інформації
кінцевому користувачу без додаткових ручних дій. При цьому модуль
підтримує різні формати виводу, що дозволяє адаптувати інформацію під різні
інтерфейси - від веб-додатків до мобільних застосунків чи спеціалізованих
аналітичних платформ. Крім того, завдяки централізованому зберіганню всіх
даних у базі та можливості доступу до історичних показників, модуль звітів
може виконувати порівняльний аналіз, відстежувати тенденції споживання та
забезпечувати глибоку аналітику роботи IoT пристроїв у часі.
Таким чином, модуль звітів є не просто компонентом відображення
даних, а повноцінним аналітичним інструментом, який забезпечує
користувача важливою інформацією про стан мережі, ефективність
використання енергетичних ресурсів і прогнозні показники. Його робота
дозволяє підвищити ефективність управління системою, забезпечує
прозорість даних та дає змогу приймати обґрунтовані рішення для оптимізації
енергоспоживання.
Останнім модулем системи є API-шлюз, який виконує критично
важливу роль у взаємодії серверної частини з користувачем. Основне завдання
цього модуля полягає в підготовці даних, що надходять із серверної частини,
у стандартизований формат JSON, який є зручним і універсальним для
подальшого використання на стороні клієнта. Завдяки цьому клієнтська
частина системи ‒ будь то веб-інтерфейс, мобільний застосунок або будь-яка
інша платформа ‒ отримує структуровані дані, готові до відображення та
подальшої обробки.
API-шлюз забезпечує ефективну маршрутизацію запитів і відповідає за
58
те, щоб інформація від різних модулів системи, включаючи» Модуль обробки
даних», «Модуль машинного навчання» та «Модуль звітів», була об’єднана та
передана клієнту в єдиному форматі. Це дозволяє користувачу отримувати
актуальні показники енергоспоживання, прогнози майбутнього споживання
та звітну інформацію про стан пристроїв у зручному і зрозумілому вигляді.
Крім того, API-шлюз забезпечує гнучкість у розширенні системи: нові
типи даних або додаткові функціональні можливості можуть бути легко
інтегровані без потреби зміни клієнтської частини. Він виконує роль
своєрідного посередника, який стандартизує і форматує інформацію, що
дозволяє клієнту не турбуватися про внутрішню структуру серверної системи.
Завдяки цьому забезпечується швидкий і надійний обмін даними між сервером
і користувачем, що робить систему максимально зручною для моніторингу,
аналізу та прийняття рішень щодо енергоспоживання IoT пристроїв.
3.2 Опис функцій системи
Для виконання аналізу та порівняння алгоритмів машинного навчання
була розроблена спеціалізована система, яка забезпечує комплексну обробку
даних з мікроконтролерів та формує прогнози енергоспоживання. Система
отримує телеметричні дані безпосередньо з мікроконтролерів, що працюють
у різних локаціях та умовах, включаючи різні температурні режими, рівень
освітлення та інші фактори, що можуть впливати на енергоспоживання. Таке
розмаїття умов дозволяє моделювати реальні сценарії роботи IoT пристроїв і
перевіряти стабільність алгоритмів у різних середовищах.
Отримані дані система аналізує та обробляє, зберігаючи їх у базі для
подальшого навчання моделей машинного навчання. Кожен модуль
машинного навчання може використовувати різні open source бібліотеки та
алгоритми, що дозволяє паралельно тестувати різні підходи, порівнювати
їхню точність та ефективність і визначати оптимальні методи прогнозування
59
для конкретних умов. Результати прогнозування також зберігаються у базі
даних, що забезпечує можливість подальшого аналізу, порівняння моделей і
підвищення точності прогнозів на основі накопичених даних.
У розробленій системі для прогнозування енергоспоживання IoT
пристроїв та аналізу ефективності алгоритмів машинного навчання було
використано виключно open source бібліотеки Python, що забезпечують
широкий спектр інструментів для обробки даних та побудови моделей. Однією
з основних бібліотек є scikit-learn, яка дозволяє реалізувати класичні
алгоритми машинного навчання, такі як лінійна та поліноміальна регресія,
метод опорних векторів (SVM), дерева рішень, випадковий ліс (Random Forest)
та градієнтний бустинг (Gradient Boosting). Ці моделі особливо ефективні для
первинного аналізу даних та швидкої побудови прогнозів на основі історичних
показників енергоспоживання.
Для роботи з більш складними та нелінійними залежностями у даних
застосовувалися бібліотеки глибокого навчання TensorFlow та PyTorch. На їх
основі створювалися рекурентні нейронні мережі, такі як LSTM та GRU, які
здатні відслідковувати довгострокові залежності в часових рядах і давати
точніші прогнози у порівнянні з класичними методами. Такі мережі
дозволяють системі враховувати вплив різних зовнішніх факторів, таких як
температура або зміни в навантаженні пристроїв, що особливо важливо для
прогнозування енергоспоживання в реальних умовах експлуатації.
Крім цього, для підвищення продуктивності та точності прогнозів були
задіяні бібліотеки XGBoost та LightGBM, які є open source рішеннями для
бустингових алгоритмів. Вони відзначаються високою швидкістю навчання,
здатністю працювати з великими обсягами даних та обробляти зашумлені або
неповні дані. Застосування цих алгоритмів дозволяє створювати ансамблі
моделей, які поєднують сильні сторони різних підходів та підвищують
надійність прогнозів.
Для виконання аналізу даних у системі передбачено два підходи,
60
залежно від цілей і умов використання. Перший підхід передбачає
використання раніше отриманих даних з мікроконтролерів, що дозволяє
навчати моделі машинного навчання на історичних показниках
енергоспоживання. Такий підхід особливо корисний для первинного навчання
системи, коли необхідно сформувати базові моделі прогнозування, оцінити
ефективність різних алгоритмів та отримати надійні вихідні прогнози на
основі вже накопиченої інформації. Використання історичних даних також
дає змогу системі відслідковувати довгострокові тенденції, виявляти
закономірності та сезонні коливання споживання енергії, що є критично
важливим для точного прогнозування у реальних умовах експлуатації IoT-
пристроїв.
Другий підхід орієнтований на довгострокове використання системи та
передбачає навчання моделей виключно на щойно отриманих даних. Це
дозволяє системі адаптуватися до змін у роботі пристроїв, змін умов
середовища, оновлення сенсорів або нових сценаріїв використання IoT-
пристроїв. Такий динамічний підхід забезпечує постійну актуалізацію
прогнозів і дозволяє модулю машинного навчання швидко реагувати на зміни
в споживанні енергії, забезпечуючи більш точні та релевантні прогнози у
реальному часі.
Поєднання обох підходів ‒ використання історичних даних для
формування базових моделей та поступове навчання на нових даних для
адаптації до змін ‒ дозволяє досягти оптимального балансу між точністю
прогнозів, швидкістю навчання та гнучкістю системи. Така стратегія робить
систему ефективною як для короткострокового, так і для довгострокового
прогнозування енергоспоживання IoT пристроїв у різних умовах експлуатації.
Для зміни алгоритмів машинного навчання в системі адміністратор
повинен замінити відповідний модуль, який використовується під час запуску
серверного додатку. Оскільки серверна частина системи побудована за
модульним принципом, кожен модуль машинного навчання є незалежним і
61
може бути інтегрований у систему окремо. Замінюючи цей модуль,
адміністратор фактично визначає, який алгоритм або бібліотеку буде
застосовано для прогнозування енергоспоживання IoT пристроїв.
Під час наступного запуску серверного додатку новий модуль
автоматично підключається до системи, отримує доступ до бази даних і
починає обробку даних від мікроконтролерів, формуючи прогнози з
використанням нового алгоритму. Такий підхід забезпечує гнучкість системи
та дозволяє легко інтегрувати нові методи машинного навчання, тестувати
різні моделі та порівнювати їхню ефективність без необхідності змінювати
інші компоненти серверної частини або клієнтського інтерфейсу. Це робить
процес оновлення алгоритмів простим і контрольованим, дозволяючи
підтримувати актуальність системи та підвищувати точність прогнозів з
часом.
Серед функцій, які доступні адміністратору системи, важливе місце
займає можливість перегляду списку всіх мікроконтролерів, які надсилають
дані в систему. Ця функція дозволяє адміністратору отримати повну
інформацію про кожен пристрій, що бере участь у мережі, та ефективно
контролювати їхню роботу. Система містить детальні дані про назву кожного
мікроконтролера, його місце знаходження, тип підключення до мережі, а
також поточне енергоспоживання.
Крім того, адміністратор має можливість переглядати спрогнозоване
енергоспоживання, яке формується модулем машинного навчання на основі
отриманих даних. Це дозволяє не лише відстежувати актуальний стан
пристроїв у реальному часі, а й оцінювати, як змінюватиметься їхнє
енергоспоживання у майбутньому. Така функціональність є надзвичайно
корисною для планування ресурсів, своєчасного виявлення потенційних
проблем із енергопостачанням та оптимізації роботи IoT системи в цілому.
Адміністратор отримує комплексну картину роботи мережі пристроїв і може
приймати обґрунтовані рішення щодо управління ними на основі як
62
фактичних даних, так і прогнозів.
Список мікроконтролерів у системі виводиться в пагінованому форматі,
що забезпечує зручну навігацію навіть у разі великої кількості пристроїв. На
одній сторінці відображається 10 мікроконтролерів, що дозволяє
адміністратору швидко переглядати деталі кожного пристрою без
перевантаження інтерфейсу інформацією. Пагінація робить роботу з системою
більш зручною та ефективною, оскільки адміністратор може послідовно
переглядати всі пристрої, переходячи між сторінками, а також легко знаходити
необхідний мікроконтролер для аналізу його поточного стану,
енергоспоживання чи прогнозованих показників. Такий підхід дозволяє
підтримувати високу швидкість роботи інтерфейсу та спрощує контроль за
великою мережею IoT пристроїв. Список активних пристроїв зображено на
рисунку 3.2.
Рисунок 3.2 – Список активних пристроїв
Натиснувши на потрібний мікроконтролер у списку, система відкриває
окреме вікно, у якому відображається прогнозоване енергоспоживання цього
пристрою на наступні 12 місяців. Прогнозування формується на основі даних,
63
які були отримані від мікроконтролерів та накопичувалися у базі даних
протягом попереднього періоду. Використання історичних показників
дозволяє модулю машинного навчання враховувати закономірності у
споживанні енергії, сезонні коливання, вплив зовнішніх факторів та інші
параметри, що можуть впливати на роботу пристрою.
Відображення прогнозу в окремому вікні надає адміністратору
можливість швидко оцінити майбутнє енергоспоживання, порівняти його з
поточними показниками та приймати обґрунтовані рішення щодо управління
ресурсами. Такий підхід забезпечує наочність та зручність у роботі з даними,
дозволяє планувати використання енергетичних ресурсів, запобігати
перевантаженням і своєчасно реагувати на потенційні проблеми у роботі IoT
пристроїв. Прогноз енергоспоживання зображено на рисунку 3.3.
Система завжди відображає прогноз енергоспоживання, починаючи з
минулого місяця для прикладу, потім поточний місяць і ще 10 майбутніх
місяців. Такий підхід дозволяє адміністратору бачити реальні дані про
споживання енергії, які вже зафіксовані в базі, та порівнювати їх із
прогнозованими значеннями для поточного та майбутніх періодів.
Відображення минулого місяця дає змогу оцінити точність попередніх
прогнозів і виявити закономірності у зміні енергоспоживання, що особливо
важливо для аналізу ефективності роботи алгоритмів машинного навчання.
Поточний місяць та прогнози на наступні 10 місяців дозволяють планувати
використання енергетичних ресурсів, запобігати перевантаженням і приймати
своєчасні управлінські рішення щодо оптимізації роботи IoT пристроїв у
різних умовах експлуатації. Така комбінація минулих, поточних та майбутніх
даних забезпечує повну картину роботи пристроїв і дозволяє адміністраторам
ефективно контролювати мережу.
Подібний прогноз формується на основі даних, отриманих від датчиків
мікроконтролерів, які передають інформацію про енергоспоживання у
систему. Чим більший обсяг накопиченої інформації, тим точніший результат
64
прогнозування, оскільки модуль машинного навчання має змогу виявляти
закономірності, сезонні коливання та вплив зовнішніх факторів більш
детально.
Рисунок 3.3 – Прогноз енергоспоживання
Накопичені дані дозволяють системі навчатися на реальних сценаріях
роботи пристроїв, враховувати різні умови експлуатації та підвищувати
точність прогнозів для поточного та майбутніх періодів. Таким чином,
надійність і достовірність прогнозів безпосередньо залежать від кількості та
різноманітності даних, що надходять від датчиків, і з часом, у міру
накопичення більшої кількості показників, система здатна робити ще більш
точні і реалістичні оцінки енергоспоживання IoT пристроїв.
65
При розрахунку прогнозу система враховує кілька важливих факторів,
що дозволяють підвищити точність передбачень. По-перше,
використовуються історичні дані про фактичне енергоспоживання,
накопичені від мікроконтролерів, які дозволяють модулю машинного
навчання виявляти закономірності та тренди у використанні енергії різними
пристроями. По-друге, враховуються дані про місяць року, оскільки деякі
пристрої споживають електроенергію нерівномірно протягом року ‒
наприклад, у зимові місяці спостерігається збільшене використання через
опалювальні системи, а в літні місяці може зростати споживання через
кондиціонування.
Також система бере до уваги кількість днів у місяці, що впливає на
загальне енергоспоживання, адже коротші місяці мають менший сумарний
показник споживання. Крім того, враховуються особливості конкретного IoT-
пристрою, включаючи його тип, призначення, режим роботи та технічні
характеристики, що дозволяє моделювати споживання більш точно для
кожного окремого пристрою. Поєднання цих факторів забезпечує
комплексний підхід до прогнозування, роблячи результати більш
реалістичними та адаптованими до реальних умов експлуатації IoT пристроїв.
3.3 Технічні вимоги для роботи з системою
Технічні вимоги для роботи з розробленою системою прогнозування
енергоспоживання IoT пристроїв є важливим аспектом, який забезпечує
стабільну роботу серверної частини, модулів машинного навчання, обробки
даних та інтерфейсу користувача. Основна вимога системи полягає у
забезпеченні високої продуктивності, надійності та масштабованості, що
дозволяє працювати з великими потоками даних від мікроконтролерів,
ефективно обробляти їх та генерувати точні прогнози на основі алгоритмів
машинного навчання.
66
Сервер, на якому розгортається система, повинен мати потужний
центральний процесор (CPU) для забезпечення швидкої обробки великої
кількості паралельних потоків даних, що надходять від численних
мікроконтролерів. Високопродуктивний CPU забезпечує ефективну роботу
модулів обробки даних, контроль над з’єднаннями з MQTT-шлюзом,
управління базою даних і координацію роботи всіх модулів системи. Крім
того, сервер повинен бути оснащений сучасним графічним прискорювачем
(GPU), який критично необхідний для роботи алгоритмів глибокого навчання,
таких як рекурентні нейронні мережі LSTM або GRU. GPU дозволяє
проводити величезну кількість паралельних обчислень під час навчання
моделей, що значно скорочує час тренування та забезпечує точніші прогнози.
Обсяг оперативної пам’яті сервера також має бути достатнім для
обробки великих масивів даних у реальному часі. Оптимальним є наявність не
менше 32–64 ГБ оперативної пам’яті, що дозволяє модулю машинного
навчання одночасно працювати з історичними даними, обробляти вхідні
потоки з мікроконтролерів та зберігати результати проміжних обчислень без
значних затримок. Дискова підсистема повинна забезпечувати швидкий
доступ до бази даних, оскільки дані про енергоспоживання та результати
прогнозування зберігаються на тривалий період, а також використовується
для навчання моделей. Для цього доцільне застосування твердотільних
накопичувачів (SSD) з великим об’ємом та високою швидкістю запису і
читання, що дозволяє уникати вузьких місць у роботі системи.
Не менш важливим аспектом є забезпечення надійного та
безперебійного підключення до мережі для отримання даних від
мікроконтролерів через MQTT-шлюз. Система вимагає стабільного каналу
передачі даних, оскільки своєчасне надходження телеметрії критично для
точності прогнозів. Для оптимальної роботи слід забезпечити сервер
високошвидкісним підключенням до інтернету або локальної мережі, а також
резервування каналів для уникнення втрати даних.
67
Що стосується даних, система потребує регулярного надходження
інформації від мікроконтролерів, включаючи показники енергоспоживання,
часові мітки, умови експлуатації та додаткові параметри, що впливають на
роботу пристроїв. Чим більше накопиченої історичної інформації, тим точніші
прогнози формує модуль машинного навчання. Дані зберігаються у базі даних,
яка повинна підтримувати великий обсяг записів, ефективне виконання
запитів, а також надійне резервне копіювання. У разі довготривалого
використання системи база даних постійно поповнюється новими
показниками, що дозволяє модулю навчання адаптуватися до змін у роботі
пристроїв та умов середовища.
Крім того, для роботи системи необхідне програмне забезпечення, що
включає Python як основну мову програмування, а також бібліотеки
машинного навчання ‒ scikit-learn, TensorFlow, PyTorch, XGBoost та
LightGBM. Сервер повинен мати встановлені всі залежності, а також
відповідні драйвери для GPU, що забезпечує коректну роботу глибокого
навчання та швидку обробку даних. Для коректної роботи API-шлюзу, модуля
звітів та обробки даних потрібне належне середовище виконання з підтримкою
веб-серверів, таких як Flask або FastAPI, а також механізмів безпечної
аутентифікації та передачі даних у форматі JSON.
Таким чином, технічні вимоги включають високопродуктивний сервер
із потужним CPU і GPU, достатній обсяг оперативної та дискової пам’яті,
надійне підключення до мережі, регулярне надходження даних від
мікроконтролерів, підтримку сучасних бібліотек машинного навчання, а також
належне програмне середовище для роботи всіх модулів системи. Виконання
цих вимог забезпечує стабільну роботу системи, точне прогнозування
енергоспоживання та можливість масштабування для роботи з великою
кількістю IoT пристроїв у різних умовах експлуатації.
При тестуванні системи було використано кілька алгоритмів машинного
навчання та бібліотек, що забезпечують широкий спектр підходів до
68
прогнозування енергоспоживання IoT пристроїв. Серед алгоритмів
застосовувалися класичні методи, такі як лінійна регресія, поліноміальна
регресія, метод опорних векторів (SVM), дерева рішень, випадковий ліс
(Random Forest) та градієнтний бустинг (Gradient Boosting). Для роботи з більш
складними часовими рядами та нелінійними залежностями використовувалися
рекурентні нейронні мережі LSTM та GRU, що дозволяють відстежувати
довгострокові закономірності у даних. Також для підвищення точності
прогнозів були задіяні алгоритми бустингу, зокрема XGBoost та LightGBM.
Що стосується бібліотек, система використовувала open source рішення
на базі Python, зокрема scikit-learn для класичних методів машинного
навчання, TensorFlow та PyTorch для глибокого навчання, а також XGBoost і
LightGBM для реалізації бустингових алгоритмів.
Варто зазначити, що деякі алгоритми, особливо рекурентні нейронні
мережі та складні ансамблеві моделі, потребують значних обчислювальних
ресурсів під час навчання. Для їх ефективної роботи доцільно
використовувати cloud-сервери з потужними CPU та GPU, що дозволяє
прискорити навчання моделей, обробляти великі обсяги даних та
забезпечувати масштабованість системи для роботи з багатьма
мікроконтролерами одночасно. Такий підхід дозволяє отримувати більш точні
прогнози без обмежень локальних ресурсів і забезпечує стабільну роботу
системи навіть у випадку масштабного розширення мережі IoT пристроїв.
3.4 Оцінка ефективності методів роботи системи
Для оцінки ефективності розробленої системи було проведено
комплексне тестування алгоритмів машинного навчання з метою визначення
оптимального підходу до прогнозування енергоспоживання IoT пристроїв.
Оцінка ефективності базувалася на порівнянні точності прогнозів,
стабільності результатів при зміні умов експлуатації пристроїв, здатності
69
враховувати сезонні коливання, а також швидкості навчання моделей і їх
здатності працювати з великими обсягами даних. Для цього
використовувалися як класичні методи машинного навчання ‒ лінійна та
поліноміальна регресія, метод опорних векторів, дерева рішень, випадковий
ліс та градієнтний бустинг, так і сучасні алгоритми глибокого навчання ‒
рекурентні нейронні мережі LSTM та GRU, а також бустингові моделі
XGBoost та LightGBM.
Під час оцінки алгоритмів було використано кілька ключових метрик,
що дозволяють комплексно оцінити точність і надійність моделей. Серед них
найбільш вагомими є середня абсолютна помилка (MAE),
середньоквадратична помилка (RMSE) та коефіцієнт детермінації (R²), кожна
з яких надає різну перспективу для аналізу результатів прогнозування.
Середня абсолютна помилка (MAE) вимірює середнє значення
абсолютної різниці між прогнозованими та фактичними значеннями
енергоспоживання. Ця метрика показує середню величину помилки, яку
робить модель, незалежно від напрямку відхилення, тобто не важливо, чи
прогнозоване значення більше або менше за фактичне. MAE дозволяє
адміністраторам та дослідникам отримати пряме уявлення про типову точність
прогнозів у зрозумілих одиницях вимірювання енергоспоживання, що робить
її дуже інтуїтивною та простою для інтерпретації. Вона особливо корисна для
порівняння моделей, оскільки менше схильна до сильних відхилень, ніж деякі
інші метрики.
Середньоквадратична помилка (RMSE) вимірює квадратний корінь із
середнього значення квадратів різниць між прогнозованими та фактичними
значеннями. На відміну від MAE, RMSE значно підсилює вплив великих
відхилень, тобто вона чутлива до аномалій та пікових значень
енергоспоживання, що робить її особливо корисною для систем, де важливо
уникати великих помилок у прогнозах. Високе значення RMSE сигналізує, що
модель робить великі похибки у деяких випадках, навіть якщо загальна
70
точність виглядає задовільною. Використання RMSE дозволяє враховувати
ризики перевищення прогнозованого енергоспоживання і допомагає вибирати
алгоритми, які більш стабільні при варіаціях у роботі IoT пристроїв.
Коефіцієнт детермінації (R²) показує, яку частину дисперсії фактичних
даних модель здатна пояснити своїми прогнозами. Значення R² коливається
від 0 до 1, де 1 означає ідеальне прогнозування, а 0 ‒ відсутність кореляції між
прогнозованими та фактичними значеннями. Ця метрика дозволяє оцінити
загальну якість моделі в контексті її здатності відтворювати структуру та
варіації даних, а не лише середню величину помилки. Високий R² свідчить про
те, що модель ефективно враховує ключові закономірності та тренди у
споживанні енергії, що є критично важливим для довгострокового
прогнозування.
Поєднання цих трьох метрик дозволяє отримати всебічну оцінку
алгоритмів: MAE надає розуміння типових похибок, RMSE показує чутливість
моделі до великих відхилень, а R² демонструє здатність моделі пояснювати
загальні закономірності в даних. У системі тестування всі алгоритми були
оцінені за цими показниками, що дозволило виділити XGBoost як найбільш
ефективний алгоритм завдяки його високому R², відносно низьким MAE та
RMSE, що забезпечує точні, стабільні та надійні прогнози енергоспоживання
IoT-пристроїв.
За результатами тестування кращим алгоритмом для прогнозування
енергоспоживання IoT пристроїв виявився XGBoost. XGBoost ‒ це open source
бібліотека для машинного навчання, яка реалізує алгоритм градієнтного
бустингу дерев рішень. Градієнтний бустинг ‒ це метод ансамблевого
навчання, який поєднує багато слабких моделей (дерев рішень) в одну сильну
модель шляхом поступового зменшення похибок попередніх дерев. Кожне
наступне дерево у послідовності навчається на залишках прогнозів попередніх
дерев, що дозволяє системі поступово зменшувати помилки і підвищувати
точність прогнозів. Порівняння алгоритмів машинного навчання зображено
71
в таблиці 3.1.
Таблиця 3.1 – Порівняння алгоритмів машинного навчання
Алгоритм MAE RMSE R²
(кВт·год) (кВт·год)
Лінійна регресія 0,058 0,072 0,78
Дерева рішень 0,047 0,062 0,84
Випадковий ліс (Random Forest) 0,041 0,056 0,87
Градієнтний бустинг 0,037 0,050 0,89
XGBoost 0,034 0,047 0,91
LSTM (рекурентна нейронна 0,036 0,049 0,90
мережа)
LightGBM 0,035 0,048 0,90
XGBoost вирізняється високою продуктивністю, здатністю ефективно
працювати з великими наборами даних та стійкістю до зашумлених або
неповних даних. Ця бібліотека підтримує паралельне навчання і оптимізовані
алгоритми, що дозволяє прискорити тренування моделей навіть на великих
обсягах даних. Завдяки своїй гнучкості, налаштовуваності параметрів та
високій точності прогнозів, XGBoost став оптимальним вибором для системи
прогнозування енергоспоживання IoT пристроїв, забезпечуючи стабільні та
надійні результати у різних умовах експлуатації.
3.5 Висновки до розділу 3
У розділі було проаналізовано роботу розробленої системи
прогнозування енергоспоживання IoT пристроїв та порівняно алгоритми
машинного навчання для вирішення цієї задачі. Модульна архітектура
серверної частини довела свою зручність і гнучкість, забезпечивши
можливість масштабування та швидкого тестування різних моделей без зміни
інших компонентів.
Збір та обробка телеметричних даних через MQTT-шлюз дозволили
72
наблизити систему до реальних умов експлуатації, а реалізовані механізми
підтримки якості даних підвищили точність прогнозування.
Експериментальне порівняння алгоритмів підтвердило, що вибір моделі
залежить від особливостей даних і сценарію використання.
Розроблена система продемонструвала ефективність застосування
машинного навчання для прогнозування енергоспоживання в IoT мережах та
є перспективною основою для подальшого розвитку й удосконалення.
73
РОЗДІЛ 4 ЗАХИСТ ІНФОРМАЦІЙНОЇ СИСТЕМИ
4.1 Огляд існуючих рішень захисту інформаційної системи
Захист інформації при використанні серверних додатків передбачає
комплексний підхід, що охоплює технологічні, організаційні та процесні
аспекти. Перш за все, важливим є контроль доступу та автентифікація
користувачів. Сервер повинен забезпечувати надійну аутентифікацію,
наприклад, через складні паролі та багатофакторні методи (MFA), а також
хешування паролів за допомогою стійких алгоритмів, таких як bcrypt або
Argon2. Крім того, розмежування ролей та прав доступу дозволяє серверним
компонентам діяти лише в межах своїх привілеїв, що суттєво знижує ризик
несанкціонованого доступу.
Шифрування даних є наступним ключовим елементом безпеки. Дані
слід шифрувати як під час зберігання (data at rest), використовуючи технології
на кшталт Transparent Data Encryption, так і під час передачі (data in transit)
через захищені канали TLS. Використання Trusted Execution Environment
(TEE) дозволяє ізолювати виконання коду та зберігання даних, забезпечуючи
їх цілісність і конфіденційність навіть у разі компрометації сервера. Також
важливо запобігати побічним каналам витоку даних, наприклад через
стиснення або інші механізми обробки інформації.
Безпечне кодування серверних додатків передбачає ретельну валідацію
вводу та підготовлені SQL-запити для запобігання SQL-ін’єкцій та XSS-атак.
Санітизація введених даних, використання зворотних проксі та інших
захисних механізмів дозволяють додатково захистити сервер від шкідливих
запитів. Правильне налаштування сесій, зокрема використання безпечних
cookie та токенів, допомагає запобігти атакам типу session hijacking або session
poisoning.
74
Важливим є захист від специфічних серверних атак, таких як CSRF та
SSRF. Використання токенів для перевірки запитів або обмеження доступу до
внутрішніх ресурсів допомагає уникнути підроблених запитів та
несанкціонованих дій. Паралельно застосовуються системи моніторингу,
виявлення та запобігання вторгненням, включно з IDS/IPS та веб-файрволами
(WAF), а також регулярний аудит вразливостей і пентести для контролю
безпеки додатку.
Захист API включає впровадження механізмів аутентифікації, таких як
OAuth 2.0 або JWT, а також лімітування доступу (rate limiting) для запобігання
навантажувальних атак. Архітектурна ізоляція компонентів через
мультишарову модель або використання контейнерів і мікросервісів дозволяє
обмежити права окремих модулів і підвищити безпеку даних [20].
Не менш важливим є аудит цілісності та прозорість роботи серверних
додатків. Використання логів, цифрових підписів та публічних журналів
дозволяє перевіряти, чи не було несанкціонованих змін у коді або
конфігурації. Використання захищених середовищ виконання (TEE)
забезпечує додатковий рівень безпеки навіть у разі компрометації сервера.
Таким чином, захист серверних додатків ‒ це багаторівневий процес, що
включає технологічні засоби, безпечне кодування, контроль доступу,
моніторинг та організаційні заходи. Ефективна безпека досягається лише при
комплексному впровадженні всіх цих механізмів і постійному оновленні та
аудиті системи, оскільки сучасні загрози постійно еволюціонують.
Захист інформації при роботі з системою починається з правильного
управління доступом користувачів, що включає авторизацію та
автентифікацію.
Автентифікація відповідає за підтвердження особи користувача та
визначає, чи має він право входити в систему. Для цього застосовуються різні
методи, починаючи від класичних паролів і закінчуючи більш надійними
технологіями, такими як багатофакторна автентифікація (MFA), одноразові
75
коди, токени або біометричні дані. Використання надійних алгоритмів
хешування для зберігання паролів, таких як bcrypt або Argon2, запобігає
витоку конфіденційної інформації навіть у разі компрометації бази даних.
Авторизація визначає рівень доступу користувача до ресурсів системи
після успішної автентифікації. Це передбачає впровадження ролей і привілеїв,
які чітко регламентують, які дії може виконувати конкретний користувач або
група користувачів. Такий підхід дозволяє ізолювати критичні функції та
обмежити доступ до конфіденційних даних, зменшуючи ризик
несанкціонованих дій [21].
Ключовим аспектом є управління сесіями користувачів. Безпечні сесії
передбачають використання токенів з обмеженим часом дії, захищених cookie
з параметрами HttpOnly і Secure, а також механізмів для автоматичного
завершення сесії після тривалого часу бездіяльності. Це допомагає запобігти
атакам типу session hijacking або підробки сесій, коли зловмисник намагається
отримати доступ до чужої активної сесії.
Для додаткового рівня безпеки системи впроваджують політики
складності паролів, регулярну зміну паролів та контроль історії паролів, щоб
уникнути повторного використання слабких або відомих комбінацій.
Додатково системи можуть перевіряти поведінку користувачів і
використовувати алгоритми виявлення аномалій, що дозволяє ідентифікувати
підозрілу активність, наприклад, входи з незвичних місць або спроби
багаторазового введення неправильних паролів.
Не менш важливим є впровадження протоколів безпечного обміну
даними під час авторизації та автентифікації. Використання захищених
каналів зв’язку (TLS/HTTPS) гарантує, що логіни, паролі та токени не можуть
бути перехоплені зловмисниками під час передачі [22]. Крім того, при
інтеграції з зовнішніми системами або сервісами рекомендується
застосовувати стандартизовані протоколи автентифікації та авторизації, такі
як OAuth 2.0, OpenID Connect, які забезпечують безпечну взаємодію між
76
різними компонентами.
Таким чином, захист інформації при роботі з системою базується на
багаторівневому підході: надійна автентифікація, чітко визначена авторизація,
безпечне управління сесіями, контроль паролів і поведінки користувачів, а
також захищені канали передачі даних. Тільки комплексне застосування цих
методів дозволяє забезпечити конфіденційність, цілісність і доступність
інформації у сучасних інформаційних системах.
Захист інформації при збереженні даних у базі даних є критично
важливим елементом безпеки будь-якої інформаційної системи, оскільки саме
база даних містить найбільш конфіденційну інформацію користувачів,
фінансові та корпоративні дані.
Перш за все, застосовуєтьсяшифрування даних. Це включає як
шифрування під час зберігання (data at rest), так і шифрування під час передачі
(data in transit). Для зберігання використовуються алгоритми AES з довжиною
ключа 256 біт, що забезпечують високий рівень стійкості до атак. Бази даних
часто підтримують механізми Transparent Data Encryption (TDE), які
автоматично шифрують файли бази та резервні копії, захищаючи їх від
несанкціонованого доступу навіть у разі компрометації серверного
обладнання [23].
Ще одним важливим аспектом є контроль доступу до бази даних. Для
цього застосовують чітке розмежування прав користувачів та ролей, що
дозволяє обмежити доступ до окремих таблиць або полів лише для тих, кому
це необхідно для виконання робочих обов’язків. Використовуються механізми
автентифікації користувачів бази даних, а також аудит їх дій для відстеження
спроб несанкціонованого доступу або підозрілої активності.
Не менш важливою практикою є захист від SQL-ін’єкцій та інших
атак на базу даних. Для цього застосовуються підготовлені запити (prepared
statements) і параметризовані запити, які відокремлюють команди SQL від
даних, що вводяться користувачем. Також важлива валідація та санітизація
77
всіх вхідних даних на рівні серверного додатку, що дозволяє запобігти
виконанню шкідливого коду через базу даних.
Для забезпечення цілісності даних застосовуються механізми
резервного копіювання та відновлення. Резервні копії повинні зберігатися
у захищеному вигляді та також бути зашифрованими. Важливо забезпечити
контроль доступу до резервних копій, оскільки їх компрометація може
призвести до витоку конфіденційної інформації або порушення роботи
системи.
Додатково впроваджуються механізми моніторингу та аудиту бази
даних. Це дозволяє виявляти аномалії, такі як надмірні запити до критичних
таблиць, спроби доступу поза робочим часом або дії з високими привілеями,
які не узгоджуються з профілем користувача. Такі системи моніторингу
дозволяють швидко реагувати на потенційні загрози та попереджати витік
даних.
Загалом, захист інформації при збереженні даних у базі включає
багаторівневий підхід: шифрування, контроль доступу, захист від ін’єкцій та
шкідливих дій, резервне копіювання та постійний аудит. Тільки комплексне
використання цих методів дозволяє гарантувати конфіденційність, цілісність
і доступність даних у сучасних інформаційних системах.
Захист інформації при роботі з системами машинного навчання (ML) є
важливим аспектом, оскільки такі системи часто обробляють великі обсяги
конфіденційних даних, включаючи персональні, фінансові або медичні
відомості. Необхідно забезпечити конфіденційність даних на всіх етапах
обробки. Це включає шифрування даних під час зберігання (data at rest) та при
передачі між серверами або в хмарні середовища (data in transit). Для цього
застосовують стандартні криптографічні алгоритми, такі як AES-256, а також
протоколи безпечного обміну даними, наприклад, TLS [24].
Ще одним ключовим аспектом є анонімізація та маскування даних, що
дозволяє використовувати інформацію для навчання моделей без ризику
78
витоку персональних даних. Анонімізація включає видалення або
трансформацію ідентифікаторів користувачів, а маскування ‒ заміну частини
чутливої інформації на псевдозначення. Це особливо важливо при обміні
даними між організаціями або при використанні хмарних сервісів для
тренування моделей.
Для захисту самих моделей ML застосовуються методи безпечного
навчання та приватності. Сюди входять техніки диференціальної приватності
(differential privacy), коли шум додається до тренувальних даних або
результатів обчислень, щоб запобігти відновленню конкретних записів з
навчальної вибірки. Крім того, важливо контролювати доступ до моделей,
оскільки моделі можуть містити приховану інформацію про дані, на яких вони
були натреновані.
Контроль доступу та автентифікація є важливим для користувачів і
сервісів, які взаємодіють із системою ML. Всі API-запити та доступ до
навчальних даних повинні бути авторизованими, а права користувачів
розмежовані відповідно до їхніх ролей [25]. Це дозволяє обмежити ризик
несанкціонованого використання або витоку інформації через зовнішні
інтерфейси.
Також слід впроваджувати моніторинг та аудит роботи ML-систем. Це
включає логування запитів до моделей, відстеження аномальної поведінки
користувачів та спроб витоку даних через моделі (наприклад, атаку типу model
inversion або membership inference). Регулярні перевірки дозволяють виявляти
вразливості і приймати заходи до того, як відбудеться потенційний витік
інформації.
Нарешті, захист при роботі з ML включає безпечне використання
зовнішніх ресурсів, таких як хмарні платформи або сторонні бібліотеки.
Важливо переконатися, що всі зовнішні компоненти відповідають політикам
безпеки, оновлені до останніх версій і не містять відомих вразливостей.
Захист інформації при роботі з ML ґрунтується на комплексному
79
підході: шифрування, анонімізація та маскування даних, контроль доступу та
автентифікація, безпечне навчання моделей, аудит та моніторинг, а також
безпечне використання зовнішніх ресурсів. Тільки поєднання цих заходів
дозволяє забезпечити конфіденційність, цілісність і безпеку даних у процесі
створення та експлуатації систем машинного навчання.
4.2 Реалізація захисту даних в інформаційній системі
Реалізація захисту даних у розробленій системі прогнозування
енергоспоживання IoT-пристроїв є критично важливою складовою, оскільки
система працює з великою кількістю конфіденційної інформації, включаючи
дані про енергоспоживання, місце розташування пристроїв, часові мітки та
інші параметри роботи мікроконтролерів. Для забезпечення надійності та
безпеки даних було застосовано комплексний підхід, який охоплює як
апаратні, так і програмні методи захисту, а також політики контролю доступу
та безпечної роботи з мережею.
Першим і основним елементом захисту є шифрування даних під час
передачі від IoT пристроїв до серверної системи через MQTT-шлюз. Для цього
використовуються протоколи TLS/SSL, що забезпечують захищене з’єднання
між мікроконтролерами та сервером, виключаючи можливість перехоплення
або модифікації повідомлень сторонніми особами.Шифрування TLS гарантує,
що навіть при доступі до мережевого трафіку зловмисник не зможе отримати
корисну інформацію, оскільки всі дані передаються у зашифрованому вигляді.
Крім того, MQTT-шлюз налаштований на автентифікацію пристроїв, що
означає, що тільки зареєстровані та авторизовані пристрої можуть передавати
дані до системи. Це запобігає підключенню сторонніх пристроїв та
зловмисників, які могли б вплинути на роботу системи або змінити дані.
Другим рівнем захисту є робота з базою даних. У розробленій системі
використовується MongoDB, яка підтримує шифрування даних у стані спокою
80
(encryption at rest). Це означає, що всі збережені дані автоматично шифруються
за допомогою надійних алгоритмів AES-256, і навіть у разі фізичного доступу
до дискових накопичувачів стороння особа не зможе прочитати інформацію
без ключа шифрування. Крім того, система налаштована на регулярне
резервне копіювання бази даних у зашифрованому вигляді на окремі сервери
або хмарні сховища, що забезпечує відновлення інформації у випадку аварії
або втрати даних. Доступ до бази даних обмежений і контролюється на рівні
користувацьких прав, що дозволяє лише адміністраторам та авторизованим
модулям системи взаємодіяти з даними.
Особливу увагу приділено захисту модулів машинного навчання та
проміжних даних. Модулі ML обробляють історичні дані для формування
прогнозів, але безпосередній доступ до сирих даних користувачі та зовнішні
сервіси не мають. Вся інформація, що обробляється модулем навчання,
зберігається у тимчасовій пам’яті, і після завершення обчислень автоматично
очищається. Це дозволяє уникнути витоку конфіденційних даних під час
обробки великих обсягів інформації, одночасно забезпечуючи ефективне
навчання моделей. Для додаткової безпеки модулі машинного навчання
можуть запускатися у контейнерах, що ізолюють їх від інших процесів на
сервері, запобігаючи несанкціонованому доступу до ресурсів та даних.
Важливим аспектом є контроль доступу на рівні користувачів та
адміністраторів системи. Система передбачає багаторівневу автентифікацію
та авторизацію: користувачі мають доступ лише до функцій перегляду даних
і прогнозів, у той час як адміністратори можуть керувати налаштуваннями
модулів, замінювати алгоритми та контролювати роботу системи. Для
підвищення безпеки впроваджено логування всіх дій користувачів та
адміністратора, що дозволяє відстежувати можливі спроби несанкціонованого
доступу або підозрілу активність.
Для захисту даних у хмарних середовищах, якщо система
використовується з cloud-серверами для обробки великих обсягів інформації,
81
застосовуються додаткові механізми безпеки: шифрування даних у транзиті
та на диску, контроль доступу за IP-адресами та використання віртуальних
приватних мереж (VPN). Також для алгоритмів глибокого навчання, які
потребують великої обчислювальної потужності, реалізовано ізольоване
середовище виконання (sandbox), що дозволяє запускати ресурсоємні процеси
без ризику порушення безпеки інших компонентів системи.
Ще одним важливим елементом є захист інтерфейсів API. API-шлюз,
який відповідає за передачу прогнозованих даних користувачам, реалізує
обов’язкову автентифікацію запитів та шифрування передачі у форматі JSON.
Це дозволяє забезпечити безпечну взаємодію клієнтських додатків з
системою, запобігаючи підробці запитів та несанкціонованому отриманню
інформації. Крім того, дані, що передаються клієнтам, містять лише необхідну
інформацію, без доступу до сирих показників енергоспоживання, що підвищує
рівень конфіденційності.
В системі також реалізовані регулярні перевірки цілісності даних і
валідація отриманих повідомлень від мікроконтролерів. Кожен пакет даних
перевіряється на відповідність формату, наявність часових міток і допустимих
значень енергоспоживання. Це дозволяє запобігати помилкам у прогнозуванні
через некоректні або пошкоджені дані, а також зменшує ризик втрати
інформації через технічні збої на стороні пристроїв.
В цілому, реалізація захисту даних у розробленій системі побудована на
багаторівневому підході, що включає шифрування даних у транзиті та на
диску, контроль доступу, логування дій користувачів, ізоляцію процесів
машинного навчання, регулярне резервне копіювання, валідацію даних та
захищені API-інтерфейси. Такий підхід забезпечує високу надійність системи,
захищає конфіденційні дані користувачів та пристроїв, а також гарантує, що
результати прогнозування є достовірними та безпечними для використання у
різних умовах експлуатації IoT пристроїв.
Як результат, система відповідає сучасним стандартам безпеки та
82
конфіденційності даних, що є критично важливим для роботи з IoT
пристроями, де точність прогнозів та захист інформації мають однакову вагу
для ефективного управління енергоспоживанням.
4.3 Висновки до розділу 4
У розділі було розглянуто заходи захисту інформаційної системи,
включно з контролем доступу, автентифікацією та авторизацією користувачів,
управлінням сесіями, шифруванням даних під час зберігання та передачі, а
також захистом серверних додатків і API. Особлива увага приділена безпеці
бази даних, систем машинного навчання та передачі даних IoT пристроїв,
зокрема через використання TLS, AES-256, анонімізації, ізольованих
середовищ виконання та багаторівневого контролю доступу.
Реалізована у системі комплексна модель захисту забезпечує
конфіденційність, цілісність та доступність даних, запобігає
несанкціонованому доступу та витоку інформації, а також гарантує надійність
прогнозів енергоспоживання IoT пристроїв.
Багаторівневий підхід до захисту даних підтверджує відповідність
системи сучасним вимогам безпеки та забезпечує її ефективну експлуатацію
в реальних умовах.
83
ВИСНОВКИ
Інтернет речей (IoT) є універсальною технологією, яка об’єднує
різноманітні фізичні пристрої, сенсори та системи для автоматизації процесів,
збору та аналізу даних у реальному часі. Сфери застосування IoT надзвичайно
широкі ‒ від розумних домів і мобільних пристроїв до промислових систем,
логістики та міської інфраструктури. Ефективність таких мереж залежить від
енергоспоживання компонентів, зокрема мікроконтролерів, сенсорів і
комунікаційних модулів, що часто працюють автономно на обмежених
джерелах живлення. Раціональне планування енергоспоживання,
використання енергозберігаючих режимів, оптимізація роботи сенсорів і
протоколів передачі даних, а також впровадження локального аналізу та
прогнозування (Edge ML) дозволяють зменшити навантаження на мережу,
підвищити автономність вузлів і забезпечити стабільне функціонування IoT-
мереж.
У межах цієї кваліфікаційної роботи детально проаналізовано сучасні
методи машинного навчання та їх застосування для прогнозування
енергоспоживання IoT-пристроїв. Розглянуто основні парадигми ML ‒
контрольоване, неконтрольоване та підкріплювальне навчання ‒ і способи їх
реалізації за допомогою регресії, дерев рішень, ансамблевих алгоритмів і
глибинних нейронних мереж. Виявлено, що ефективність інтелектуальних
систем значною мірою залежить від якості вхідних даних, обраного алгоритму
та налаштування моделі. Розроблена система підтвердила практичну
ефективність машинного навчання для аналізу та прогнозування
енергоспоживання, а модульна архітектура серверної частини забезпечила
масштабованість, гнучкість і можливість швидкого тестування різних
моделей.
84
Особлива увага у кваліфікаційній роботі приділена заходам захисту
інформаційної системи. Реалізовано багаторівневу модель безпеки, що
включає автентифікацію та авторизацію користувачів, контроль сесій,
шифрування даних під час зберігання та передачі, а також захист серверних
додатків, API і бази даних. Для захисту модулів машинного навчання та
передачі даних IoT-пристроїв використано TLS, AES-256, анонімізацію даних,
ізольовані середовища виконання та багаторівневий контроль доступу.
Комплексний підхід забезпечує конфіденційність, цілісність та доступність
інформації, запобігає несанкціонованому доступу та витоку даних і гарантує
надійність прогнозів енергоспоживання.
Розроблена система поєднує ефективне прогнозування
енергоспоживання IoT-пристроїв із сучасними методами захисту інформації.
Комплексний підхід до моніторингу, управління енергоспоживанням та
забезпечення безпеки даних створює надійну основу для масштабованих,
економічно ефективних і безпечних IoT-рішень, готових до експлуатації в
реальних умовах.
85
ПЕРЕЛІК СКОРОЧЕНЬ ТА УМОВНИХ ПОЗНАЧЕНЬ
IoT ‒ Internet of Things, Інтернет речей, мережа фізичних пристроїв, що
збирають та обмінюються даними.
ML ‒ Machine Learning, Машинне навчання, методи навчання
комп’ютерних систем на даних для прогнозування або класифікації.
AI ‒ Artificial Intelligence, Штучний інтелект, широка сфера технологій,
що імітують когнітивні функції людини.
API ‒ Application Programming Interface, інтерфейс для обміну даними
між програмами або пристроями.
CPU ‒ Central Processing Unit, центральний процесор, виконує
обчислення та логіку програм.
RAM ‒ Random Access Memory, оперативна пам’ять для тимчасового
зберігання та обробки даних.
DB ‒ Database, база даних для збереження та організації інформації.
UI ‒User Interface, користувацький інтерфейс для взаємодії з програмою.
CSV ‒ Comma-Separated Values, формат файлів для збереження
табличних даних.
TDE ‒ Transparent Data Encryption, технологія шифрування даних у базі
даних.
TLS/HTTPS ‒ Transport Layer Security / Hypertext Transfer Protocol Secure,
протоколи захищеної передачі даних через мережу.
MFA ‒ Multi-Factor Authentication, багатофакторна автентифікація для
підвищення безпеки входу в систему.
86
IDS/IPS ‒ Intrusion Detection/Prevention System, системи виявлення та
запобігання вторгненням для контролю безпеки мереж і серверів.
CSRF ‒ Cross-Site Request Forgery, атака підробки запитів на стороні
користувача.
SSRF ‒ Server-Side Request Forgery, атака, коли сервер здійснює небажані
запити всередині мережі.
TEE ‒ Trusted Execution Environment, захищене середовище виконання
для ізоляції коду та даних.
APIKey / JWT ‒механізми автентифікації для доступу до API та сервісів.
87
СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ
1. Гречук Д. В., Олішевський І. Г. Машинне навчання – застосування та
безпека. 2021. 263 p.
2. Григоров Отто В., Аніщенко Г. та ін. Штучний інтелект. Машинне
навчання. Харків: Харківський НАУ, 2019.
3. Глибовець А., Щербина С., Кирієнко О. Вразливості безпеки та рішення
для захисту IoT-систем. 2024. – (наукова праця).
4. Васильківський М. В., Бортник Г. Г., Кичак В. М. Штучний інтелект,
машинне навчання та аналітика даних для керування мережами та
послугами. Навчальний посібник. 2023.
5. «Machine Learning і безпека» [уклад.: автори не вказані]. – ДМК Пресс,
(рік видання).
6. Юрчак В. В. та ін. IoT і проблеми проектування та безпеки
інтернет-речей. Навчальний посібник. 2023.
7. Колектив ALIOT. «Internet of Things for Industry and Human Application.
Volume 1: Fundamentals and Technologies». – (український переклад / том
1).
8. Колектив ALIOT. «Internet of Things for Industry and Human Application.
Volume 2: Modeling and Development». – (том 2: моделювання, розробка,
безпека).
9. Партика А., Михайлова О., Шпак С. Виявлення, аналіз та захист
конфіденційних даних за допомогою технології машинного навчання
сервісу Amazon Macie. – «Кібербезпека: освіта, наука, техніка», 2024.
10.Котенко Д., Хлапонін Ю. AI у системах виявлення і запобігання
кібератакам: перспективи та виклики. – 2024.
11.Bernard Golden. “Amazon Web Services for Dummies.” Hoboken: Wiley,
2017. 456 p.
88
12.Eberhard Wolff. Microservices with Docker, Kubernetes, and AWS. Munich:
Addison-Wesley, 2020. 400 p.
13.Ian Goodfellow, Yoshua Bengio, Aaron Courville. Deep Learning.
Cambridge: MIT Press, 2016. 800 p.
14.Aurélien Géron. Hands-On Machine Learning with Scikit-Learn, Keras, and
TensorFlow. Sebastopol: O’Reilly Media, 2019. 850 p.
15.Andreas M. Antonopoulos, Gavin Wood. Mastering Ethereum: Building
Smart Contracts and DApps. O’Reilly Media, 2018. 430 p.
16.Michael Margolis. Arduino Cookbook. Sebastopol: O’Reilly Media, 2020.
678 p.
17.Marco Schwartz. IoT Security: Advances in Authentication. Boston: Artech
House, 2019. 310 p.
18.Frank Kane. Hands-On Machine Learning for IoT. Packt Publishing, 2021.
412 p.
19.Rajkumar Buyya, Amir Vahid Dastjerdi. Internet of Things: Principles and
Paradigms. Amsterdam: Elsevier, 2016. 502 p.
20.Ovidiu Vermesan, Peter Friess. Internet of Things: Converging Technologies
for Smart Environments and Integrated Ecosystems. River Publishers, 2014.
376 p.
21.Charles Bell, Mike Brown. Practical IoT Hacking: The Definitive Guide to
Attacking the Internet of Things. No Starch Press, 2020. 400 p.
22.Brendan Burns, David Oppenheimer. Designing Distributed Systems:
Patterns and Paradigms for Scalable, Reliable Services. O’Reilly Media,
2018. 324 p.
23.Peter Waher. Learning Internet of Things. Packt Publishing, 2019. 348 p.
24.Jay Smith. Machine Learning for Edge Devices. Springer, 2021. 290 p.
25.Daniel Slater .Practical Cybersecurity for IoT: Protecting Devices, Data, and
Systems. Apress, 2020. 330 p.
ДОДАТОК А
«ЗАТВЕРДЖУЮ»
Завідувач кафедри ІБ та КІ
к.т.н., доцент Артем ЛАВДАНСЬКИЙ
__________________
“___” _____________ 2025р.
Аналіз та порівняння алгоритмів машинного навчання для
прогнозування енергоспоживання в IoT-системах
Специфікація
482.ЧДТУ.52401-01
Листів 2
Розробник _______________ Олександр ГРЕЧУХА
Керівник _______________ Віра БАБЕНКО
Черкаси 2025
2
482.ЧДТУ.52401-01
Позначення Найменування Примітка
Документація
482.ЧДТУ. 52401-01 12 01 Текст програми
482.ЧДТУ. 52401-01 34 01 Інструкція користувача
ДОДАТОК Б
Аналіз та порівняння алгоритмів машинного навчання для
прогнозування енергоспоживання в IoT-системах
Текс програми
482.ЧДТУ.52401-01 12 01
Листів 25
Розробник _______________ Олександр ГРЕЧУХА
Черкаси 2025
2
482.ЧДТУ.52401-01 12 01
from fastapi import FastAPI, HTTPException, Depends, Query, BackgroundTasks
from fastapi.middleware.cors import CORSMiddleware
from fastapi.responses import JSONResponse
from typing import List, Optional
from datetime import datetime, timedelta
import asyncio
from loguru import logger
from prometheus_client import Counter, Histogram, Gauge, generate_latest,
CONTENT_TYPE_LATEST
from starlette.responses import Response
from config import settings
from models import (
DeviceResponse, DeviceCreate, DeviceUpdate,
PowerConsumptionResponse, ForecastRequest, ForecastResponse,
DeviceStatistics, SystemStatistics, TrainingRequest, TrainingResponse,
HealthResponse, ErrorResponse
)
from database import db_manager
from ml_models import power_forecaster
from data_processor import data_processor
# Initialize FastAPI app
app = FastAPI(
title="IoT Power Consumption Forecasting API",
description="API for forecasting IoT device power consumption using XGBoost",
version="1.0.0",
docs_url="/docs",
redoc_url="/redoc"
)
# Add CORS middleware
app.add_middleware(
CORSMiddleware,
allow_origins=settings.CORS_ORIGINS,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# Prometheus metrics
REQUEST_COUNT = Counter('http_requests_total', 'Total HTTP requests', ['method',
'endpoint', 'status'])
REQUEST_DURATION = Histogram('http_request_duration_seconds', 'HTTP request
duration')
ACTIVE_DEVICES = Gauge('active_devices_total', 'Number of active devices')
3
482.ЧДТУ.52401-01 12 01
TOTAL_FORECASTS = Gauge('total_forecasts', 'Total number of forecasts generated')
MODEL_ACCURACY = Gauge('model_accuracy_rmse', 'Model accuracy (RMSE)')
@app.middleware("http")
async def metrics_middleware(request, call_next):
"""Metrics middleware for Prometheus"""
start_time = datetime.utcnow()
response = await call_next(request)
duration = (datetime.utcnow() - start_time).total_seconds()
REQUEST_COUNT.labels(
method=request.method,
endpoint=request.url.path,
status=response.status_code
).inc()
REQUEST_DURATION.observe(duration)
return response
@app.exception_handler(Exception)
async def global_exception_handler(request, exc):
"""Global exception handler"""
logger.error(f"Unhandled exception: {exc}")
return JSONResponse(
status_code=500,
content={
"error": "Internal server error",
"message": str(exc),
"timestamp": datetime.utcnow().isoformat()
}
)
# Dependency to get database session
def get_db():
"""Database session dependency"""
session = db_manager.get_session()
try:
yield session
finally:
session.close()
@app.get("/", response_model=dict)
async def root():
"""Root endpoint"""
return {
4
482.ЧДТУ.52401-01 12 01
"message": "IoT Power Consumption Forecasting API",
"version": "1.0.0",
"status": "running",
"timestamp": datetime.utcnow().isoformat()
}
@app.get("/health", response_model=HealthResponse)
async def health_check():
"""Health check endpoint"""
try:
# Check database connection
db_session = db_manager.get_session()
db_session.execute("SELECT 1")
db_session.close()
db_status = "healthy"
except Exception as e:
logger.error(f"Database health check failed: {e}")
db_status = "unhealthy"
# Check model status
model_status = "healthy" if power_forecaster.model is not None else "no_model"
# Update metrics
ACTIVE_DEVICES.set(get_active_device_count())
return HealthResponse(
status="healthy" if db_status == "healthy" else "degraded",
timestamp=datetime.utcnow(),
database=db_status,
mqtt="connected", # This would be checked in a real implementation
redis="connected", # This would be checked in a real implementation
models=1 if power_forecaster.model else 0,
uptime=0 # This would be calculated in a real implementation
)
@app.get("/devices", response_model=List[DeviceResponse])
async def get_devices(
skip: int = Query(0, ge=0),
limit: int = Query(100, ge=1, le=1000),
device_type: Optional[str] = Query(None),
is_active: Optional[bool] = Query(None),
db=Depends(get_db)
):
"""Get list of devices"""
try:
from database import Device
5
482.ЧДТУ.52401-01 12 01
query = db.query(Device)
if device_type:
query = query.filter(Device.device_type == device_type)
if is_active is not None:
query = query.filter(Device.is_active == is_active)
devices = query.offset(skip).limit(limit).all()
return devices
except Exception as e:
logger.error(f"Error getting devices: {e}")
raise HTTPException(status_code=500, detail="Failed to retrieve devices")
@app.post("/devices", response_model=DeviceResponse)
async def create_device(device: DeviceCreate, db=Depends(get_db)):
"""Create a new device"""
try:
from database import Device
# Check if device already exists
existing_device = db.query(Device).filter(Device.device_id == device.device_id).first()
if existing_device:
raise HTTPException(status_code=400, detail="Device already exists")
# Create new device
db_device = Device(
device_id=device.device_id,
name=device.name,
device_type=device.device_type.value if device.device_type else None,
location=device.location,
manufacturer=device.manufacturer,
model=device.model,
firmware_version=device.firmware_version,
metadata=str(device.metadata) if device.metadata else None
)
db.add(db_device)
db.commit()
db.refresh(db_device)
logger.info(f"Created new device: {device.device_id}")
return db_device
except HTTPException:
6
482.ЧДТУ.52401-01 12 01
raise
except Exception as e:
logger.error(f"Error creating device: {e}")
raise HTTPException(status_code=500, detail="Failed to create device")
@app.get("/devices/{device_id}", response_model=DeviceResponse)
async def get_device(device_id: str, db=Depends(get_db)):
"""Get device by ID"""
try:
from database import Device
device = db.query(Device).filter(Device.device_id == device_id).first()
if not device:
raise HTTPException(status_code=404, detail="Device not found")
return device
except HTTPException:
raise
except Exception as e:
logger.error(f"Error getting device: {e}")
raise HTTPException(status_code=500, detail="Failed to retrieve device")
@app.put("/devices/{device_id}", response_model=DeviceResponse)
async def update_device(device_id: str, device_update: DeviceUpdate, db=Depends(get_db)):
"""Update device"""
try:
from database import Device
device = db.query(Device).filter(Device.device_id == device_id).first()
if not device:
raise HTTPException(status_code=404, detail="Device not found")
# Update device fields
update_data = device_update.dict(exclude_unset=True)
for field, value in update_data.items():
if field == "device_type" and value:
setattr(device, field, value.value)
elif field == "metadata" and value:
setattr(device, field, str(value))
else:
setattr(device, field, value)
db.commit()
db.refresh(device)
logger.info(f"Updated device: {device_id}")
7
482.ЧДТУ.52401-01 12 01
return device
except HTTPException:
raise
except Exception as e:
logger.error(f"Error updating device: {e}")
raise HTTPException(status_code=500, detail="Failed to update device")
@app.delete("/devices/{device_id}")
async def delete_device(device_id: str, db=Depends(get_db)):
"""Delete device"""
try:
from database import Device
device = db.query(Device).filter(Device.device_id == device_id).first()
if not device:
raise HTTPException(status_code=404, detail="Device not found")
db.delete(device)
db.commit()
logger.info(f"Deleted device: {device_id}")
return {"message": "Device deleted successfully"}
except HTTPException:
raise
except Exception as e:
logger.error(f"Error deleting device: {e}")
raise HTTPException(status_code=500, detail="Failed to delete device")
@app.get("/devices/{device_id}/consumption",
response_model=List[PowerConsumptionResponse])
async def get_device_consumption(
device_id: str,
start_date: Optional[datetime] = Query(None),
end_date: Optional[datetime] = Query(None),
limit: int = Query(1000, ge=1, le=10000),
db=Depends(get_db)
):
"""Get power consumption data for a device"""
try:
from database import PowerConsumption
query = db.query(PowerConsumption).filter(PowerConsumption.device_id == device_id)
8
482.ЧДТУ.52401-01 12 01
if start_date:
query = query.filter(PowerConsumption.timestamp >= start_date)
if end_date:
query = query.filter(PowerConsumption.timestamp <= end_date)
consumption = query.order_by(PowerConsumption.timestamp.desc()).limit(limit).all()
return consumption
except Exception as e:
logger.error(f"Error getting device consumption: {e}")
raise HTTPException(status_code=500, detail="Failed to retrieve consumption data")
@app.get("/devices/{device_id}/statistics", response_model=DeviceStatistics)
async def get_device_statistics(device_id: str, db=Depends(get_db)):
"""Get statistics for a device"""
try:
from database import PowerConsumption, Device
from sqlalchemy import func
# Get device info
device = db.query(Device).filter(Device.device_id == device_id).first()
if not device:
raise HTTPException(status_code=404, detail="Device not found")
# Get consumption statistics
stats = db.query(
func.count(PowerConsumption.id).label('total_readings'),
func.avg(PowerConsumption.power_watts).label('avg_power'),
func.max(PowerConsumption.power_watts).label('max_power'),
func.min(PowerConsumption.power_watts).label('min_power'),
func.sum(PowerConsumption.energy_kwh).label('total_energy_kwh'),
func.max(PowerConsumption.timestamp).label('last_reading')
).filter(PowerConsumption.device_id == device_id).first()
if not stats or stats.total_readings == 0:
return DeviceStatistics(
device_id=device_id,
total_readings=0,
avg_power=0,
max_power=0,
min_power=0,
total_energy_kwh=0,
last_reading=None,
uptime_percentage=0
)
9
482.ЧДТУ.52401-01 12 01
# Calculate uptime percentage (simplified - based on readings vs expected)
days_since_creation = (datetime.utcnow() - device.created_at).days
expected_readings = days_since_created * 24 # Assuming hourly readings
uptime_percentage = min(100, (stats.total_readings / expected_readings) * 100) if
expected_readings > 0 else 0
return DeviceStatistics(
device_id=device_id,
total_readings=stats.total_readings,
avg_power=float(stats.avg_power),
max_power=float(stats.max_power),
min_power=float(stats.min_power),
total_energy_kwh=float(stats.total_energy_kwh or 0),
last_reading=stats.last_reading,
uptime_percentage=uptime_percentage
)
except HTTPException:
raise
except Exception as e:
logger.error(f"Error getting device statistics: {e}")
raise HTTPException(status_code=500, detail="Failed to retrieve device statistics")
@app.post("/forecast", response_model=List[ForecastResponse])
async def create_forecast(request: ForecastRequest, background_tasks: BackgroundTasks):
"""Create power consumption forecast"""
try:
# Generate forecast
forecast_results = power_forecaster.forecast(
device_ids=request.device_ids,
forecast_months=request.forecast_months,
include_confidence=request.include_confidence
)
# Convert to response format
forecast_responses = []
for device_id, device_forecast in forecast_results.items():
forecast_responses.append(ForecastResponse(**device_forecast))
# Update metrics
TOTAL_FORECASTS.inc()
logger.info(f"Generated forecast for {len(forecast_responses)} devices")
return forecast_responses
except Exception as e:
logger.error(f"Error creating forecast: {e}")
10
482.ЧДТУ.52401-01 12 01
raise HTTPException(status_code=500, detail="Failed to generate forecast")
@app.get("/forecast/{device_id}", response_model=ForecastResponse)
async def get_device_forecast(device_id: str):
"""Get latest forecast for a device"""
try:
# Generate forecast for specific device
forecast_results = power_forecaster.forecast(
device_ids=[device_id],
forecast_months=12,
include_confidence=True
)
if device_id not in forecast_results:
raise HTTPException(status_code=404, detail="No forecast available for device")
return ForecastResponse(**forecast_results[device_id])
except HTTPException:
raise
except Exception as e:
logger.error(f"Error getting device forecast: {e}")
raise HTTPException(status_code=500, detail="Failed to retrieve forecast")
@app.post("/train", response_model=TrainingResponse)
async def train_model(request: TrainingRequest, background_tasks: BackgroundTasks):
"""Train machine learning model"""
try:
# Start training in background
background_tasks.add_task(
train_model_background,
request.device_ids,
request.start_date,
request.end_date,
request.force_retrain
)
return {"message": "Model training started", "status": "training"}
except Exception as e:
logger.error(f"Error starting model training: {e}")
raise HTTPException(status_code=500, detail="Failed to start model training")
async def train_model_background(device_ids: Optional[List[str]],
start_date: Optional[datetime],
end_date: Optional[datetime],
force_retrain: bool):
11
482.ЧДТУ.52401-01 12 01
"""Background task for model training"""
try:
logger.info("Starting background model training")
training_metadata = power_forecaster.train_model(
device_ids=device_ids,
start_date=start_date,
end_date=end_date,
force_retrain=force_retrain
)
# Update metrics
if training_metadata.get('validation_rmse'):
MODEL_ACCURACY.set(training_metadata['validation_rmse'])
logger.info("Background model training completed")
except Exception as e:
logger.error(f"Error in background model training: {e}")
@app.get("/statistics", response_model=SystemStatistics)
async def get_system_statistics(db=Depends(get_db)):
"""Get system-wide statistics"""
try:
from database import Device, PowerConsumption, ForecastResult, ModelTraining
from sqlalchemy import func
# Device statistics
total_devices = db.query(func.count(Device.id)).scalar()
active_devices = db.query(func.count(Device.id)).filter(Device.is_active == True).scalar()
# Consumption statistics
consumption_stats = db.query(
func.count(PowerConsumption.id).label('total_readings'),
func.avg(PowerConsumption.power_watts).label('avg_power'),
func.sum(PowerConsumption.energy_kwh).label('total_energy_kwh')
).first()
# Forecast and model statistics
total_forecasts = db.query(func.count(ForecastResult.id)).scalar()
models_trained = db.query(func.count(ModelTraining.id)).scalar()
return SystemStatistics(
total_devices=total_devices or 0,
active_devices=active_devices or 0,
total_readings=consumption_stats.total_readings or 0,
avg_system_power=float(consumption_stats.avg_power or 0),
total_system_energy_kwh=float(consumption_stats.total_energy_kwh or 0),
12
482.ЧДТУ.52401-01 12 01
forecasts_generated=total_forecasts or 0,
models_trained=models_trained or 0
)
except Exception as e:
logger.error(f"Error getting system statistics: {e}")
raise HTTPException(status_code=500, detail="Failed to retrieve system statistics")
@app.get("/metrics")
async def get_metrics():
"""Prometheus metrics endpoint"""
return Response(generate_latest(), media_type=CONTENT_TYPE_LATEST)
def get_active_device_count() -> int:
"""Get count of active devices"""
try:
session = db_manager.get_session()
from database import Device
count = session.query(func.count(Device.id)).filter(Device.is_active == True).scalar()
session.close()
return count or 0
except Exception:
return 0
# Startup and shutdown events
@app.on_event("startup")
async def startup_event():
"""Application startup"""
logger.info("Starting IoT Power Consumption Forecasting API")
# Create database tables
db_manager.create_tables()
# Try to load existing model
power_forecaster.load_model()
@app.on_event("shutdown")
async def shutdown_event():
"""Application shutdown"""
logger.info("Shutting down IoT Power Consumption Forecasting API")
# Import required functions
from sqlalchemy import func
import xgboost as xgb
import pandas as pd
13
482.ЧДТУ.52401-01 12 01
import numpy as np
from typing import Dict, List, Optional, Tuple, Any
from datetime import datetime, timedelta
from sklearn.model_selection import TimeSeriesSplit, cross_val_score
from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score
import joblib
import json
import os
from loguru import logger
from config import settings
from database import db_manager
from data_processor import data_processor
class XGPowerForecaster:
"""XGBoost-based power consumption forecasting model"""
def __init__(self, model_name: str = "xgboost_power_forecaster"):
self.model_name = model_name
self.model = None
self.model_version = None
self.feature_importance = {}
self.training_history = []
self.model_dir = "models"
# Ensure model directory exists
os.makedirs(self.model_dir, exist_ok=True)
# XGBoost parameters
self.xgb_params = {
'objective': 'reg:squarederror',
'eval_metric': ['mae', 'rmse'],
'max_depth': 6,
'learning_rate': 0.1,
'n_estimators': 1000,
'subsample': 0.8,
'colsample_bytree': 0.8,
'random_state': 42,
'early_stopping_rounds': 50,
'verbosity': 0
}
def train_model(self, device_ids: Optional[List[str]] = None,
start_date: Optional[datetime] = None,
end_date: Optional[datetime] = None,
force_retrain: bool = False) -> Dict[str, Any]:
"""Train XGBoost model for power consumption forecasting"""
try:
logger.info(f"Starting model training for devices: {device_ids or 'all'}")
14
482.ЧДТУ.52401-01 12 01
# Prepare training data
df = data_processor.prepare_training_data(device_ids, start_date, end_date)
if df.empty:
raise ValueError("No training data available")
# Check if minimum data requirements are met
min_samples = 100 * len(set(df['device_id'])) # At least 100 samples per device
if len(df) < min_samples:
logger.warning(f"Insufficient training data: {len(df)} samples (minimum:
{min_samples})")
# Prepare features and target
X, y = self._prepare_features_and_target(df)
# Split data for training and validation
X_train, X_val, y_train, y_val = self._time_series_split(X, y, df['timestamp'])
# Train model
self.model = xgb.XGBRegressor(**self.xgb_params)
# Fit model with early stopping
self.model.fit(
X_train, y_train,
eval_set=[(X_val, y_val)],
verbose=False
)
# Evaluate model
train_pred = self.model.predict(X_train)
val_pred = self.model.predict(X_val)
train_mae = mean_absolute_error(y_train, train_pred)
val_mae = mean_absolute_error(y_val, val_pred)
train_rmse = np.sqrt(mean_squared_error(y_train, train_pred))
val_rmse = np.sqrt(mean_squared_error(y_val, val_pred))
r2 = r2_score(y_val, val_pred)
# Calculate feature importance
self.feature_importance = self._calculate_feature_importance()
# Generate model version
self.model_version = self._generate_model_version()
# Save model
model_path = self._save_model()
# Save training metadata
15
482.ЧДТУ.52401-01 12 01
training_metadata = {
'model_name': self.model_name,
'model_version': self.model_version,
'device_ids': device_ids or list(df['device_id'].unique()),
'training_samples': len(df),
'training_start': start_date,
'training_end': end_date,
'validation_mae': val_mae,
'validation_rmse': val_rmse,
'r2_score': r2,
'feature_importance': self.feature_importance,
'model_path': model_path,
'training_timestamp': datetime.utcnow()
}
self._save_training_metadata(training_metadata)
# Save to database
self._save_training_to_database(training_metadata)
logger.info(f"Model training completed. Validation MAE: {val_mae:.2f}, RMSE:
{val_rmse:.2f}, R2: {r2:.3f}")
return training_metadata
except Exception as e:
logger.error(f"Error training model: {e}")
raise
def _prepare_features_and_target(self, df: pd.DataFrame) -> Tuple[pd.DataFrame, pd.Series]:
"""Prepare features and target for training"""
try:
# Define feature columns
exclude_columns = ['device_id', 'timestamp', 'power_watts']
feature_columns = [col for col in df.columns if col not in exclude_columns]
# Handle any remaining missing values
df = df.fillna(0)
X = df[feature_columns]
y = df['power_watts']
# Store feature columns for prediction
self.feature_columns = feature_columns
return X, y
except Exception as e:
logger.error(f"Error preparing features and target: {e}")
16
482.ЧДТУ.52401-01 12 01
raise
def _time_series_split(self, X: pd.DataFrame, y: pd.Series,
timestamps: pd.Series) -> Tuple[pd.DataFrame, pd.DataFrame, pd.Series,
pd.Series]:
"""Split data using time series split"""
try:
# Use the last 20% of data for validation
split_index = int(len(X) * 0.8)
X_train = X.iloc[:split_index]
X_val = X.iloc[split_index:]
y_train = y.iloc[:split_index]
y_val = y.iloc[split_index:]
return X_train, X_val, y_train, y_val
except Exception as e:
logger.error(f"Error in time series split: {e}")
raise
def _calculate_feature_importance(self) -> Dict[str, float]:
"""Calculate feature importance"""
try:
if self.model is None:
return {}
importance = self.model.feature_importances_
feature_names = self.feature_columns
feature_importance = {}
for name, imp in zip(feature_names, importance):
feature_importance[name] = float(imp)
# Sort by importance
feature_importance = dict(sorted(feature_importance.items(), key=lambda x: x[1],
reverse=True))
return feature_importance
except Exception as e:
logger.error(f"Error calculating feature importance: {e}")
return {}
def _generate_model_version(self) -> str:
"""Generate model version based on timestamp"""
timestamp = datetime.utcnow().strftime("%Y%m%d_%H%M%S")
return f"v{timestamp}"
17
482.ЧДТУ.52401-01 12 01
def _save_model(self) -> str:
"""Save trained model to disk"""
try:
if self.model is None:
raise ValueError("No model to save")
model_path = os.path.join(self.model_dir,
f"{self.model_name}_{self.model_version}.joblib")
joblib.dump(self.model, model_path)
# Also save feature columns and scalers
metadata = {
'feature_columns': self.feature_columns,
'scalers': data_processor.scalers,
'encoders': data_processor.encoders
}
metadata_path = os.path.join(self.model_dir,
f"{self.model_name}_{self.model_version}_metadata.joblib")
joblib.dump(metadata, metadata_path)
logger.info(f"Model saved to {model_path}")
return model_path
except Exception as e:
logger.error(f"Error saving model: {e}")
raise
def _save_training_metadata(self, metadata: Dict[str, Any]):
"""Save training metadata to file"""
try:
metadata_path = os.path.join(self.model_dir,
f"{self.model_name}_{self.model_version}_training.json")
# Convert datetime objects to strings
metadata_copy = metadata.copy()
for key, value in metadata_copy.items():
if isinstance(value, datetime):
metadata_copy[key] = value.isoformat()
with open(metadata_path, 'w') as f:
json.dump(metadata_copy, f, indent=2)
logger.info(f"Training metadata saved to {metadata_path}")
except Exception as e:
logger.error(f"Error saving training metadata: {e}")
def _save_training_to_database(self, metadata: Dict[str, Any]):
18
482.ЧДТУ.52401-01 12 01
"""Save training record to database"""
try:
session = db_manager.get_session()
from database import ModelTraining
training_record = ModelTraining(
model_name=metadata['model_name'],
model_version=metadata['model_version'],
device_id=None, # Global model for now
training_start=metadata['training_start'] or datetime.utcnow() - timedelta(days=30),
training_end=metadata['training_end'] or datetime.utcnow(),
training_samples=metadata['training_samples'],
validation_mae=metadata['validation_mae'],
validation_rmse=metadata['validation_rmse'],
feature_importance=json.dumps(metadata['feature_importance']),
model_path=metadata['model_path'],
is_active=True
)
session.add(training_record)
session.commit()
session.close()
logger.info("Training record saved to database")
except Exception as e:
logger.error(f"Error saving training to database: {e}")
def load_model(self, model_version: Optional[str] = None) -> bool:
"""Load trained model from disk"""
try:
if model_version is None:
# Load latest model
model_files = [f for f in os.listdir(self.model_dir)
if f.startswith(self.model_name) and f.endswith('.joblib')
and not f.endswith('_metadata.joblib')]
if not model_files:
logger.error("No trained model found")
return False
# Sort by modification time
model_files.sort(key=lambda x: os.path.getmtime(os.path.join(self.model_dir, x)),
reverse=True)
latest_model = model_files[0]
model_version = latest_model.replace(f"{self.model_name}_", "").replace(".joblib",
"")
19
482.ЧДТУ.52401-01 12 01
model_path = os.path.join(self.model_dir,
f"{self.model_name}_{model_version}.joblib")
metadata_path = os.path.join(self.model_dir,
f"{self.model_name}_{model_version}_metadata.joblib")
if not os.path.exists(model_path):
logger.error(f"Model file not found: {model_path}")
return False
# Load model
self.model = joblib.load(model_path)
# Load metadata
if os.path.exists(metadata_path):
metadata = joblib.load(metadata_path)
self.feature_columns = metadata['feature_columns']
data_processor.scalers = metadata['scalers']
data_processor.encoders = metadata['encoders']
self.model_version = model_version
logger.info(f"Model loaded: {model_version}")
return True
except Exception as e:
logger.error(f"Error loading model: {e}")
return False
def forecast(self, device_ids: Optional[List[str]] = None,
forecast_months: int = 12,
include_confidence: bool = True) -> Dict[str, Any]:
"""Generate power consumption forecast"""
try:
if self.model is None:
if not self.load_model():
raise ValueError("No trained model available")
logger.info(f"Generating {forecast_months}-month forecast for devices: {device_ids or
'all'}")
# Get historical data for context
historical_data = self._get_historical_data(device_ids)
if historical_data.empty:
raise ValueError("No historical data available for forecasting")
# Generate forecast data points
forecast_data = self._generate_forecast_points(historical_data, forecast_months)
20
482.ЧДТУ.52401-01 12 01
# Make predictions
predictions = self._make_predictions(forecast_data)
# Calculate confidence intervals if requested
if include_confidence:
confidence_intervals = self._calculate_confidence_intervals(predictions,
historical_data)
else:
confidence_intervals = None
# Format results
forecast_results = self._format_forecast_results(
predictions, confidence_intervals, device_ids, forecast_months
)
# Save forecast to database
self._save_forecast_to_database(forecast_results)
logger.info(f"Forecast generated successfully for {len(forecast_results)} devices")
return forecast_results
except Exception as e:
logger.error(f"Error generating forecast: {e}")
raise
def _get_historical_data(self, device_ids: Optional[List[str]] = None) -> pd.DataFrame:
"""Get historical data for forecasting context"""
try:
# Get last 3 months of data
end_date = datetime.utcnow()
start_date = end_date - timedelta(days=90)
df = data_processor._get_power_consumption_data(device_ids, start_date, end_date)
if df.empty:
return df
# Apply same feature engineering as training
df = data_processor._engineer_features(df)
df = data_processor._handle_missing_values(df)
df = data_processor._encode_categorical_variables(df)
df = data_processor._normalize_features(df)
return df
except Exception as e:
logger.error(f"Error getting historical data: {e}")
return pd.DataFrame()
21
482.ЧДТУ.52401-01 12 01
def _generate_forecast_points(self, historical_data: pd.DataFrame,
forecast_months: int) -> pd.DataFrame:
"""Generate forecast data points with time features"""
try:
forecast_points = []
device_ids = historical_data['device_id'].unique()
# Generate points for each month
for month_ahead in range(1, forecast_months + 1):
target_date = datetime.utcnow() + timedelta(days=30 * month_ahead)
for device_id in device_ids:
# Create feature vector for forecast
forecast_point = self._create_forecast_feature_vector(
device_id, target_date, historical_data
)
forecast_points.append(forecast_point)
return pd.DataFrame(forecast_points)
except Exception as e:
logger.error(f"Error generating forecast points: {e}")
return pd.DataFrame()
def _create_forecast_feature_vector(self, device_id: str, target_date: datetime,
historical_data: pd.DataFrame) -> Dict[str, Any]:
"""Create feature vector for a specific forecast point"""
try:
# Get device-specific historical data
device_data = historical_data[historical_data['device_id'] == device_id]
if device_data.empty:
# Use average values if no device-specific data
device_data = historical_data
# Time-based features
features = {
'device_id': device_id,
'timestamp': target_date,
'hour': target_date.hour,
'day_of_week': target_date.weekday(),
'day_of_month': target_date.day,
'month': target_date.month,
'quarter': (target_date.month - 1) // 3 + 1,
'is_weekend': 1 if target_date.weekday() >= 5 else 0,
'is_business_hours': 1 if 8 <= target_date.hour <= 18 else 0,
}
22
482.ЧДТУ.52401-01 12 01
# Add lag features (use recent historical averages)
for lag in [1, 2, 3, 6, 12, 24, 48]:
lag_feature = f'power_lag_{lag}h'
if lag_feature in device_data.columns:
features[lag_feature] = device_data[lag_feature].mean()
else:
features[lag_feature] = 0
# Add rolling features
for window in [3, 6, 12, 24]:
mean_feature = f'power_rolling_mean_{window}h'
std_feature = f'power_rolling_std_{window}h'
if mean_feature in device_data.columns:
features[mean_feature] = device_data[mean_feature].mean()
else:
features[mean_feature] = device_data['power_watts'].mean()
if std_feature in device_data.columns:
features[std_feature] = device_data[std_feature].mean()
else:
features[std_feature] = device_data['power_watts'].std()
# Add trend features
if 'power_trend_6h' in device_data.columns:
features['power_trend_6h'] = device_data['power_trend_6h'].mean()
else:
features['power_trend_6h'] = 0
# Add device-specific features
if 'device_type_avg_power' in device_data.columns:
features['device_type_avg_power'] = device_data['device_type_avg_power'].iloc[0]
if 'power_vs_type_avg' in device_data.columns:
features['power_vs_type_avg'] = device_data['power_vs_type_avg'].mean()
# Fill missing features with 0
for col in self.feature_columns:
if col not in features:
features[col] = 0
return features
except Exception as e:
logger.error(f"Error creating forecast feature vector: {e}")
return {}
def _make_predictions(self, forecast_data: pd.DataFrame) -> pd.DataFrame:
"""Make predictions using the trained model"""
23
482.ЧДТУ.52401-01 12 01
try:
# Prepare features
X_forecast = forecast_data[self.feature_columns]
# Make predictions
predictions = self.model.predict(X_forecast)
# Add predictions to forecast data
forecast_data['predicted_power'] = predictions
return forecast_data
except Exception as e:
logger.error(f"Error making predictions: {e}")
return pd.DataFrame()
def _calculate_confidence_intervals(self, predictions: pd.DataFrame,
historical_data: pd.DataFrame) -> pd.DataFrame:
"""Calculate confidence intervals for predictions"""
try:
# Calculate prediction intervals based on historical error distribution
# This is a simplified approach - in practice, you might use more sophisticated methods
# Get recent predictions vs actuals to estimate error
recent_data = historical_data.tail(1000) # Last 1000 readings
if not recent_data.empty:
# Calculate MAE from historical data
historical_mae = recent_data['power_watts'].std() * 1.96 # 95% confidence interval
# Add confidence intervals
predictions['confidence_lower'] = predictions['predicted_power'] - historical_mae
predictions['confidence_upper'] = predictions['predicted_power'] + historical_mae
# Ensure confidence bounds are non-negative
predictions['confidence_lower'] = predictions['confidence_lower'].clip(lower=0)
else:
# Default confidence intervals if no historical data
predictions['confidence_lower'] = predictions['predicted_power'] * 0.8
predictions['confidence_upper'] = predictions['predicted_power'] * 1.2
return predictions
except Exception as e:
logger.error(f"Error calculating confidence intervals: {e}")
return predictions
def _format_forecast_results(self, predictions: pd.DataFrame,
confidence_intervals: Optional[pd.DataFrame],
24
482.ЧДТУ.52401-01 12 01
device_ids: Optional[List[str]],
forecast_months: int) -> Dict[str, Any]:
"""Format forecast results for API response"""
try:
results = {}
if device_ids is None:
device_ids = predictions['device_id'].unique()
for device_id in device_ids:
device_forecast = predictions[predictions['device_id'] == device_id]
forecast_points = []
for _, row in device_forecast.iterrows():
point = {
'date': row['timestamp'].isoformat(),
'predicted_power': float(row['predicted_power'])
}
if confidence_intervals is not None:
point['confidence_lower'] = float(row['confidence_lower'])
point['confidence_upper'] = float(row['confidence_upper'])
forecast_points.append(point)
results[device_id] = {
'device_id': device_id,
'forecast_type': 'individual' if len(device_ids) == 1 else 'aggregate',
'model_version': self.model_version,
'forecast_generated': datetime.utcnow().isoformat(),
'forecast_points': forecast_points,
'mae_score': self.feature_importance.get('validation_mae', None),
'rmse_score': self.feature_importance.get('validation_rmse', None)
}
return results
except Exception as e:
logger.error(f"Error formatting forecast results: {e}")
return {}
def _save_forecast_to_database(self, forecast_results: Dict[str, Any]):
"""Save forecast results to database"""
try:
session = db_manager.get_session()
from database import ForecastResult
for device_id, device_forecast in forecast_results.items():
for point in device_forecast['forecast_points']:
25
482.ЧДТУ.52401-01 12 01
forecast_record = ForecastResult(
device_id=device_id,
forecast_type=device_forecast['forecast_type'],
model_version=device_forecast['model_version'],
forecast_date=datetime.utcnow(),
target_date=datetime.fromisoformat(point['date']),
predicted_power=point['predicted_power'],
confidence_lower=point.get('confidence_lower'),
confidence_upper=point.get('confidence_upper'),
mae_score=device_forecast['mae_score'],
rmse_score=device_forecast['rmse_score']
)
session.add(forecast_record)
session.commit()
session.close()
logger.info("Forecast results saved to database")
except Exception as e:
logger.error(f"Error saving forecast to database: {e}")
# Global forecaster instance
power_forecaster = XGPowerForecaster()
ДОДАТОК В
Аналіз та порівняння алгоритмів машинного навчання для
прогнозування енергоспоживання в IoT-системах
Інструкція користувача
482.ЧДТУ.52401-01 34 01
Листів 4
Розробник _______________ Олександр ГРЕЧУХА
Черкаси 2025
2
482.ЧДТУ.52401-01 34 01
Перш ніж розпочати роботу з системою, необхідно переконатися, що
сервер відповідає мінімальним вимогам щодо потужності процесора,
наявності достатньої оперативної пам’яті та дискового простору для
зберігання історичних даних. Система вимагає багатоядерного процесора,
оскільки обробка даних від великої кількості IoT-пристроїв та тренування
алгоритмів машинного навчання потребують значних обчислювальних
ресурсів. Для роботи алгоритмів глибокого навчання, таких як рекурентні
нейронні мережі, необхідний графічний процесор, що дозволяє прискорити
навчання моделей та забезпечити стабільну роботу при обробці великих
масивів даних. Адміністратор повинен також забезпечити стабільне мережеве
підключення, оскільки система отримує дані від мікроконтролерів через
MQTT-шлюз та може використовувати хмарні сервіси для обробки об’ємних
даних або резервного копіювання бази даних.
Система реалізована на мові Python, тому перед початком роботи
адміністратору необхідно встановити відповідну версію інтерпретатора та всі
необхідні бібліотеки для роботи з MQTT, базами даних, алгоритмами
машинного навчання та обробки даних. Налаштування середовища включає
перевірку версій бібліотек та сумісності між ними, оскільки некоректна
конфігурація може призвести до помилок під час запуску модулів або обробки
даних. Всі модулі системи є модульними файлами Python, які можна
імпортувати під час запуску серверного додатку, і адміністратор може
замінювати алгоритми машинного навчання, підставляючи відповідний
модуль перед перезапуском системи. Це забезпечує гнучкість у використанні
різних підходів до прогнозування та дозволяє тестувати різні алгоритми без
необхідності повної реконфігурації серверного середовища.
База даних, яка використовується у системі, зберігає всі отримані дані
від IoT-пристроїв, включаючи інформацію про енергоспоживання, часові
мітки, місце розташування та тип пристрою. Адміністратор відповідає за
3
482.ЧДТУ.52401-01 34 01
налаштування доступу до бази, створення користувачів з відповідними
правами, а також за налаштування резервного копіювання даних. Доступ до
бази організований таким чином, що лише авторизовані модулі та
адміністратори можуть читати та змінювати дані. Це забезпечує безпеку
інформації та запобігає несанкціонованому доступу. Для обробки даних
модуль машинного навчання отримує доступ до історичних записів, виконує
обчислення прогнозів, після чого результати зберігаються в базі даних, а
тимчасові проміжні дані очищаються, щоб запобігти накопиченню зайвої
інформації та захистити конфіденційність користувачів.
Адміністратор системи має можливість переглядати список усіх
підключених мікроконтролерів, їх поточне енергоспоживання та місце
розташування. Система дозволяє переглядати прогнози енергоспоживання на
наступні 12 місяців, а також поточне та минуле споживання. Для зручності
використання список пристроїв виводиться у пагінованому вигляді, по десять
елементів на сторінку. Натискаючи на конкретний пристрій, адміністратор
може переглянути детальну інформацію про його роботу, історичні дані та
прогнозоване енергоспоживання. Прогноз формується на основі даних, що
надходять від датчиків, і його точність зростає з накопиченням інформації.
При цьому враховуються історичні дані про споживання, місяць року,
кількість днів у місяці, а також особливості конкретного IoT-пристрою.
Для зміни алгоритму машинного навчання адміністратору необхідно
замінити відповідний модуль у системі перед перезапуском серверного
додатку. Після перезапуску новий алгоритм автоматично підключається і
починає обробку даних. Адміністратор може тестувати різні open source
алгоритми, такі як XGBoost, LightGBM, Random Forest або рекурентні
нейронні мережі, для визначення найбільш ефективного підходу до
прогнозування енергоспоживання. У системі також реалізовано автоматичне
4
482.ЧДТУ.52401-01 34 01
логування всіх дій користувачів та адміністраторів, що дозволяє відстежувати
зміни, доступ до даних та потенційні помилки або несанкціоновані дії.
Особливу увагу адміністратор приділяє налаштуванню безпеки системи.
Всі дані під час передачі від мікроконтролерів до серверу шифруються за
допомогою TLS, а доступ до MQTT-шлюзу обмежений лише авторизованими
пристроями. База даних MongoDB забезпечує шифрування даних у стані
спокою, а також можливість регулярного резервного копіювання. Модулі
машинного навчання запускаються у ізольованих контейнерах, що запобігає
несанкціонованому доступу до даних та ресурсів сервера. Адміністратор
також контролює API-шлюз, через який користувачі отримують інформацію
про прогнозоване та фактичне енергоспоживання. API забезпечує
автентифікацію та шифрування даних у форматі JSON, що гарантує безпеку
передачі та конфіденційність інформації.
Для підтримки стабільної роботи системи адміністратор здійснює
моніторинг завантаження процесора, оперативної пам’яті та GPU, стежить за
станом сервера та бази даних, виконує оновлення програмного забезпечення
та бібліотек Python. У разі необхідності адміністратор може додавати нові
мікроконтролери, налаштовувати їх параметри підключення доMQTT-шлюзу,
контролювати частоту передачі даних та оптимізувати роботу системи для
різних умов експлуатації.