# 4. Домашнє завдання (написання програми) > **Джерело завдання.** Завдання **доповнює матеріали курсу** (у вихідному архіві > домашнє завдання для теми 14 відсутнє). Постановку сформульовано природно для > теми — читання часового ряду, згладжування, прогноз і графік. Готового коду тут > **немає** — це індивідуальне завдання; техніку обчислень показано на інших даних > у [2method.md](2method.md) та [3classroom.md](3classroom.md). ## Постановка Реалізувати **аналіз часового ряду** (**мову додатку студент обирає самостійно**). Програма читає ряд із файлу **CSV** (час / значення), **згладжує** його (ковзним середнім та експоненційним згладжуванням), **прогнозує** наступні $k$ значень і **будує графік** (сирий ряд, згладжений ряд і прогноз на одному рисунку). ## Вхід і вихід - **Вхід:** шлях до файлу CSV із часовим рядом — по одному спостереженню на рядок. Припускаємо два стовпці: **час/індекс** (мітка періоду — дата чи порядковий номер) і **значення** (число). Крок за часом вважають однаковим. Параметри згладжування (вікно $w$, стала $\alpha$) і горизонт прогнозу $k$ задають ззовні (аргументи командного рядка, параметри або запит). - **Вихід:** згладжені ряди та прогноз наступних $k$ значень (консоль/файл — на розсуд студента; числа округлюйте розумно, напр. 3–4 значущі цифри), а також **графік** (файл-зображення чи вікно). ## Рівні складності Оцінка відповідає найвищому **повністю й правильно** виконаному рівню. ### Базовий рівень — 60–74 балів 1. Прочитати часовий ряд із файлу CSV (стовпець значень; час/індекс — за наявності). 2. Обчислити **просте ковзне середнє** із заданим вікном $w$ (формулу реалізувати **самостійно**, а не викликати готову функцію як основне обчислення). 3. Побудувати **графік**: сирий ряд і згладжений ряд (ковзне середнє) на одному рисунку з підписами осей та легендою. ### Середній рівень — 75–89 балів Додатково до базового: 4. Реалізувати **просте експоненційне згладжування** $\hat{x}_t = \alpha x_t + (1-\alpha)\hat{x}_{t-1}$ із заданою сталою $\alpha$ і нанести згладжений ряд на графік поряд із ковзним середнім. 5. Побудувати **простий прогноз** на наступні $k$ значень (щонайменше один метод: наївний, за ковзним середнім або за експоненційним згладжуванням) і показати прогноз на графіку (напр., пунктиром, як продовження ряду). 6. Коректно опрацьовувати файл із **заголовком** і **двома стовпцями** (час і значення); параметри $w$, $\alpha$, $k$ задавати ззовні. ### Високий рівень — 90–100 балів Додатково до середнього (виконати **щонайменше один** із пунктів 7–8; пункт 9 обов'язковий): 7. **Оцінити якість прогнозу.** **Відкласти** останню частину ряду (тестову, $m$ останніх значень), побудувати прогноз на цю частину за наявними на початку даними та обчислити метрики **MAE**, **RMSE** і **MAPE**; порівняти щонайменше два методи прогнозу (обов'язково — проти **наївного** еталона). 8. **Виокремити тренд** лінійною регресією на час $\hat{x}_t = b_0 + b_1 t$ (метод найменших квадратів, [Лекція 5](../../Lectures/DA-L05.md)); нанести лінію тренду на графік і використати її для прогнозу наступних $k$ значень. 9. Передбачити **перевірку коректності** вводу (порожній файл, нечислові значення, пропуски, некоректні $w$, $\alpha \notin (0, 1)$) з інформативним повідомленням. ## Що здавати - Вихідний код програми (з коротким `README`: як запустити, формат вхідного CSV, як задають $w$, $\alpha$, $k$). - Приклад запуску на **тестовому** файлі разом із **графіком**. Обов'язково перевірте програму на даних аудиторних задач ([3classroom.md](3classroom.md)): за рядом Задачі 1 очікуване ковзне середнє ($w = 3$) — $18,\ 19.333,\ 21,\ 22.333,\ 24,\ 25.667$; за рядом Задачі 2 експоненційне згладжування з $\alpha = 0.5$ дає $50,\ 51,\ 49.5,\ 51.25,\ 53.125$. - Оформлення звіту — за [5report.md](5report.md); перелік запитань до захисту — у [6questions.md](6questions.md).