НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ УКРАЇНИ «КИЇВСЬКИЙ ПОЛІТЕХНІЧНИЙ ІНСТИТУТ імені ІГОРЯ СІКОРСЬКОГО» Інститут прикладного системного аналізу Кафедра математичних методів системного аналізу «До захисту допущено» в. о. завідувача кафедри __________ О.Л. Тимощук «___»_____________20__ р. Дипломна робота на здобуття ступеня бакалавра з напряму підготовки 6.040303 «Системний аналіз» на тему: «Макроекономічні моделі для прогнозування обсягів продажів автомобілів на ринку України» Виконала: студентка IV курсу, групи КА-51 Зубко Марія Андріївна __________ Керівник: доцент, к. ф.-м. н. Каніовська І. Ю. __________ Консультант з економічного розділу: доцент, к. е. н. Шевчук О.А. __________ Консультант з нормоконтролю: доцент, к. т. н. Коваленко А. Є. __________ Рецензент: доцент, к. ф.-м. н. Буценко Ю.П. __________ Засвідчую, що у цій дипломній роботі немає запозичень з праць інших авторів без відповідних посилань. Студентка _____________ Київ – 2019 року Національний технічний університет України «Київський політехнічний інститут імені Ігоря Сікорського» Інститут прикладного системного аналізу Кафедра математичних методів системного аналізу Рівень вищої освіти – перший (бакалаврський) Напрям підготовки (програма професійного спрямування) – 6.040303 «Системний аналіз» («Системний аналіз і управління») ЗАТВЕРДЖУЮ В.о. завідувача кафедри __________ О.Л. Тимощук «___»_____________20__ р. ЗАВДАННЯ на дипломну роботу студентці Зубко Марії Андріївні 1. Тема роботи «Макроекономічні моделі для прогнозування обсягів продажів автомобілів на ринку України», керівник роботи доцент кандидат ф.-м. н., Каніовська Ірина Юріївна, затверджені наказом по університету від «25»травня 2019 р. №1353с. 2. Термін подання студентом роботи ________________________________ 3. Вихідні дані до роботи __________________________________________ ________________________________________________________________ 4. Зміст роботи __________________________________________________ ________________________________________________________________ ________________________________________________________________ 5. Перелік ілюстративного матеріалу (із зазначенням плакатів, презентацій тощо) _________________________________________________________ _______________________________________________________________ ________________________________________________________________ 6. Консультанти розділів роботи Прізвище, ініціали та посада консультанта Розділ Економічний Підпис, дата завдання завдання видав прийняв Шевчук О.А., доцент 7. Дата видачі завдання Календарний план № з/п Назва етапів виконання дипломної роботи Термін виконання етапів роботи Примітка Студентка ____________ ____________________ Керівник роботи ____________ ____________________ (підпис) (підпис) (ініціали, прізвище) (ініціали, прізвище) РЕФЕРАТ Дипломна робота: 103 с., 41 рис., 9 табл., 2 дод., 15 джерел. СТАЦІОНАРНІСТЬ МАКРОЕКОНОМІЧНІ ЧАСОВИХ ФАКТОРИ, РЯДІВ, КОІНТЕГРАЦІЯ, ВЕКТОРНА АВТОРЕГРЕСІЯ, ВЕКТОРНА МОДЕЛЬ КОРЕКЦІЇ ПОМИЛОК Об’єкт дослідження – часові ряди обсягів продажів автомобілів на ринку України та часові ряди деяких макроекономічних показників України. Предмет дослідження – моделі прогнозування з використанням макроекономічних параметрів. Мета дослідження – проаналізувати об’єкт дослідження, побудувати деякі макроекономічні моделі, провести порівняння результатів. Методи дослідження – метод перевірки стаціонарності: доповнений тест Діккі-Фуллера; метод перевірки коінтеграції: тест Йохансена. Актуальність – планування стратегії дій є обов’язковим для будь-якого бізнесу. Враховуючи досить складні економічну та політичну ситуації в Україні, необхідно будувати адекватні моделі прогнозування майбутнього попиту, що врахують їх вплив. Результати дослідження – було побудовано і порівняно результати двох моделей – векторної авторегресії та векторної моделі корекції помилок. Шляхи подальшого розвитку предмету дослідження – використання у прогнозуванні додаткових змінних, що можуть мати вплив на об’єкт дослідження, а також вивчення та порівняння результатів з іншими методами прогнозування. ABSTRACT The theme: ‘Macroeconomic models for forecasting car sales in the Ukrainian market’ Diploma work: 103 p., 41 fig., 9 tabl., 2 appendixes, 15 references. STATIONARITY OF THE TIME SERIES, COINTEGRATION, MACROECONOMIC FACTORS, VECTOR AUTOREGRESSION MODEL, VECTOR ERROR CORRECTION MODEL The object of the study – time series of car sales in the Ukrainian market and time series of some macroeconomic indicators of Ukraine. The subject of the study – forecasting models using macroeconomic parameters. The purpose of the study – to analyze the object of the study, to build some macroeconomic models, to compare the results. Methods of the study - method of checking stationarity: Augmented DickeyFuller test; method of checking cointegration: Johansen test. The relevance of the study – planning a strategy of action is a must for any business. Given the rather difficult economic and political situation in Ukraine, it is necessary to build adequate models for forecasting future demand that will consider their impact. The results of the study –two models - vector autoregression and vector error correction model were built and compared. Further improvements of the study – use in forecasting additional variables that may have an impact on the object of research, as well as studying and comparing the results with other methods of forecasting. 6 ЗМІСТ ПЕРЕЛІК УМОВНИХ СКОРОЧЕНЬ ............................................................... 8 ВСТУП..................................................................................................................... 9 ПОСТАНОВКА ЗАДАЧІ ................................................................................... 10 РОЗДІЛ 1 ДОСЛІДЖЕННЯ ПРЕДМЕТНОЇ ОБЛАСТІ ............................. 11 1.1 Особливості предметної області ................................................................ 11 1.2 Аналіз існуючих підходів прогнозування................................................. 13 1.3 Висновки ...................................................................................................... 15 РОЗДІЛ 2 МАТЕМАТИЧНІ ОСНОВИ........................................................... 16 2.1 Основні поняття .......................................................................................... 16 2.1.1 Визначення часового ряду................................................................... 16 2.1.2 Компоненти часового ряду ................................................................. 16 2.1.3 Поняття стаціонарності ....................................................................... 18 2.2 Перевірка стаціонарності часових рядів за допомогою доповненого тесту Діккі-Фуллера .......................................................................................... 19 2.3 Причинність про Грейнджеру .................................................................... 22 2.4 Модель векторної авторегресії ................................................................ 25 2.5 Дослідження коінтеграції часових рядів ................................................. 27 2.5.1 Визначення коінтеграції ...................................................................... 27 2.5.2 Перевірка коінтеграції за допомогою тесту Йохансена ................... 29 2.6 Векторна модель корекції помилок ......................................................... 31 2.7 Висновки ................................................................................................... 31 РОЗДІЛ 3 АНАЛІЗ ПРОГРАМНОЇ РЕАЛІЗАЦІЇ МОДЕЛЕЙ .................. 32 3.1 Аналіз вхідних даних ............................................................................... 32 3.2 Побудова моделей .................................................................................... 43 7 3.2.1 Векторна модель авторегресії ............................................................. 43 3.2.2 Векторна модель корекції помилок .................................................... 46 3.3 Аналіз отриманих результатів ................................................................. 48 3.4 Висновки ................................................................................................... 51 РОЗДІЛ 4 ЕКОНОМІЧНА ЧАСТИНА ........................................................... 52 4.1 Постановка задачі ..................................................................................... 52 4.2 Обґрунтування функцій ПП ..................................................................... 52 4.3 Обґрунтування системи параметрів ПП .................................................. 54 4.4 Аналіз експертного оцінювання параметрів ........................................... 58 4.5 Аналіз рівня якості варіантів реалізації функцій .................................... 62 4.6 Економічний аналіз варіантів розробки ПП ........................................... 63 4.7 Вибір кращого варіанта ПП ..................................................................... 69 4.8 Висновки ................................................................................................... 69 ВИСНОВКИ ......................................................................................................... 70 СПИСОК ВИКОРИСТАНОЇ ЛІТЕРАТУРИ................................................. 71 ДОДАТОК А ГРАФІЧНІ МАТЕРІАЛИ ДЛЯ ДОПОВІДІ .......................... 73 ДОДАТОК Б ЛІСТИНГ ПРОГРАМИ ............................................................ 73 8 ПЕРЕЛІК УМОВНИХ СКОРОЧЕНЬ VAR – векторна авторегресія (vector autoregression) VECM – векторна модель корекції помилок (vector error correction model) ECM – модель корекції помилок (error correction model) ADL – авторегресія з розподіленим лагом (autoregressive distributed lags) DF – тест Діккі-Фуллера (Dickey-Fuller) ADF – розширений тест Діккі-Фуллера (augmented Dickey-Fuller) AIC – інформаційний критерій Акаіке (Akaike information criterion) SIC – інформаційний критерій Шварца (Schwarz information criterion) RSS – залишкова сума квадратів (residual sum of squares) МНК – метод найменших квадратів ПП – програмний продукт 9 ВСТУП В рамках даної роботи проводиться аналіз автомобільного ринку в Україні та впливу на нього основних факторів, що характеризують поточну економічну ситуацію в країні з метою побудови моделей прогнозування обсягів продажів. Це є необхідним для кожної компанії задля постановки цілей, визначення напряму розвитку та оптимізації витрат. Традиційні моделі прогнозування враховують одновимірну інформацію з минулого, але не можуть передбачати макроекономічних подій. Запропонований у цій роботі підхід враховує зв’язок обсягів продажів автомобілів з основними макроекономічними показниками, такими як ВВП, курси валют, рівень безробіття, рівень інфляції та розмір кредитної ставки. Побудова та тестування моделей проводилися на історичних даних за останні вісім років. Робота складається з чотирьох розділів. У першому розділі розглядаються особливості предметної області, описуються існуючі методи прогнозування та порівняння їх з обраними методами. Другий розділ присвячено опису математичного апарату, який є необхідним для аналізу часових рядів та побудови моделей. В ньому описані основні поняття, що стосуються часових рядів, статистичні тести, що використовуються для перевірки стаціонарності і коінтеграції часових рядів, а також формальний вигляд векторних моделей авторегресії та корекції помилок. Третій розділ містить покроковий опис аналізу вхідних даних та побудови моделей та їх порівняння. У четвертому розділі наведений економічний аналіз створеного програмного продукту. 10 ПОСТАНОВКА ЗАДАЧІ 1. Провести збір даних та початковий аналіз вхідних часових рядів обсягів продажів автомобілів на ринку України та рядів макроекономічних параметрів України 2. Дослідити кожен часовий ряд на стаціонарність та виходячи з цього прийняти рішення щодо вигляду моделей 3. Дослідити зв’язок між часовими рядами та перевірити їх на наявність коінтеграції 4. Побудувати макроекономічні моделі прогнозування, порівняти результати та зробити висновки 11 РОЗДІЛ 1 ДОСЛІДЖЕННЯ ПРЕДМЕТНОЇ ОБЛАСТІ 1.1 Особливості предметної області Автомобільний ринок – це сукупність економічних відносин, що пов’язують суб’єктів ринку з кінцевою метою обміну автомобілів на гроші. Обсяг продажів – це дуже важливий показник для кожної компанії. Він може представлятися у вигляді як кількості проданих одиниць товару, так і в сумі грошей, яку отримала компанія за певний період часу. Автомобільна промисловість є одним з найважливіших секторів економіки світу за рахунок доходів. Вона характеризується тривалими процесами розробки та виробництва, тому довгострокові прогнози продажів нових автомобілів надають цінну інформацію багатьом зацікавленим сторонам. Розробники та виробники автомобілів, а також дилери автомобілів, маркетологи та національні ліцензійні органи користуються надійними прогнозами майбутнього попиту на нові автомобілі. Не дивно, що багато зусиль було вкладено в спроби розробити надійні моделі прогнозування. На всі підприємства, чи то національні, чи міжнародні, впливають динамічні умови економічного середовища, що переважають на ринку. Серед багатьох економічних факторів, що впливають на бізнес, деякі з них: відсоткові ставки, попит і пропозиція, інфляція тощо [1]. Всі підприємства хочуть максимізувати свій прибуток. Все це може бути досягнуто шляхом аналізу вимог споживачів, забезпечення відповідних поставок їм та забезпечення високої якості товарів і послуг. Сума грошей, що інвестується в канали довгострокової модернізації, і фінанси людей, що живуть у суспільстві в цілій країні, визначається економічним зростанням країни. Серед усіх економічних факторів, які впливають на бізнес, розвиток є найважливішим. Іншим важливим аспектом економіки, що впливає на бізнес, є рівень доходу та зайнятості в певній країні. Рівень зайнятості визначає рівень 12 попиту в компанії і навіть країні, включаючи купівельну спроможність фізичних осіб. Загальний рівень цін на товари також є ключовим економічним фактором, що впливає на бізнес і відіграє велику роль у його зростанні. Можна говорити про вартість сировини для виробництва товарів у будьякому економічному середовищі, платоспроможність потенційних клієнтів, витрати на виробництво та тарифи на перевезення, як одні з найважливіших елементів, які в кінцевому підсумку впливають на роздрібні ціни, тим самим знижується прибуток, що генерується бізнесом. Бізнес цикли - теж відіграють невід'ємну роль у коливанні вартості товарів і послуг, що продаються бізнесом. Цикли включають депресію, рецесію, відновлення і процвітання. Це всі етапи, що складають бізнес-цикл, що диктують попит і пропозицію всіх товарів і послуг і загальні ціни на всі товари, будь то істотні або несуттєві. Інфляція - як правило, відбувається тоді, коли пропозиція грошей є занадто великою на ринку економічного середовища, а не однаково підтримується аналогічною наявністю товарів і послуг. Ціни на товари мають збільшуватися так чи інакше, щоб підтримувати бізнес. І тому відбувається збільшення вартості сировини, необхідної для виробництва. Такий підйом вартості сировини явно впливає на роздрібні ціни. Компанії, як правило, отримують великі збитки і стикаються з падінням продажів і прибутків під час рецесії. А для того, щоб зменшити свої витрати, більшість з них зазвичай вдаються до скорочення персоналу, скорочення та звільнення, скорочення капітальних витрат, рекламних бюджетів, досліджень і розробок тощо. Звичайно, це впливає на компанії та організації всіх розмірів, незалежно від економічних умов, в яких вони перебувають. Отже, надзвичайно важливо враховувати макроекономічний вплив у кожному аспекті бізнесу. Саме тому було прийнято рішення розглянути 13 динаміку обсягів продажів на ринку України і знайти той самий зв’язок із спадами та підйомами української економіки. 1.2 Аналіз існуючих підходів прогнозування Стратегічне планування, засноване на надійних прогнозах, є важливим ключовим компонентом для успішного управління бізнесом у ринково орієнтованій компанії. Особливо це стосується автомобільної промисловості, оскільки вона є одним з найважливіших секторів у багатьох країнах. Математичні моделі необхідні як для точності прогнозів, так і для ефективності їх розрахунків. Застосування моделей часових рядів до прогнозів реєстрацій нових транспортних засобів спочатку було встановлено Lewandowski у 1970-х роках. Dudenho ̈ffer та Borscheid опублікували дуже важливе застосування методів часових рядів до німецького автомобільного ринку. Моделювання часових рядів - це динамічна дослідницька область, яка за останні десятиліття привернула увагу науковців. Основною метою моделювання часових рядів є ретельне збирання та ретельне вивчення минулих спостережень часових рядів для розробки відповідної моделі, що потім використовується для створення майбутніх значень, тобто для прогнозування. Таким чином, прогнозування часових рядів можна назвати актом прогнозування майбутнього шляхом розуміння минулого. У зв'язку з необхідністю прогнозування часових рядів у багатьох практичних галузях, таких як бізнес, економіка, фінанси, наука та інженерія тощо, необхідно належним чином пристосувати відповідну модель до основних часових рядів. Багато років дослідники робили багато зусиль для розробки ефективних моделей для підвищення точності прогнозування. Як результат, у літературі розвивалися різні важливі моделі прогнозування часових рядів. Однією з найбільш популярних і часто використовуваних моделей стохастичних часових рядів є модель авторегресії з інтегрованим ковзним 14 середнім (ARIMA). Основне припущення щодо реалізації цієї моделі полягає в тому, що розглянуті часові ряди є лінійними і слідують за певним відомим статистичним розподілом, таким як нормальний розподіл. Модель ARIMA має підкласи інших моделей, таких як авторегресійні (AR), ковзного середнього (MA) і авторегресійні з ковзним середнім (ARMA). Для прогнозування сезонних часових рядів було запропоновано досить вдалу варіацію моделі ARIMA, а саме: Сезонна ARIMA (SARIMA). Популярність моделі ARIMA в основному пояснюється її гнучкістю представлення декількох різновидів часових рядів та простотою, але серйозним обмеженням цих моделей є попередньо передбачена лінійна форма відповідного часового ряду, яка у багатьох практичних ситуаціях стає неадекватною. Більшість дослідницьких робіт враховують лише одновимірну інформацію, не беручи в огляд фактори, що можуть впливати на бізнес ззовні. В останні роки спостерігається зростаючий інтерес до вивчення прогностичної сили макроекономічних змінних при прогнозуванні. Використання VAR в аналізі економічних систем стало популярним після впливової роботи Sims. У Hülsmann розглянуто кілька моделей прогнозування, які використовуються для прогнозування кількості нових зареєстрованих автомобілів у Німеччині та США. Встановлено, що результати можуть бути додатково поліпшені за допомогою ринкових абсолютних, нормалізованих екзогенних параметрів [2]. VAR може іноді відхилятися від довгострокового рівноваги. Boender, Van Aalst і Heemskerk поширюють модель VAR на VECM, яка додатково враховує зміни економічного режиму та довгострокові рівноваги. В Sangasoonsong виявили довготривалі відносини рівноваги між продажами автомобілів і деякими економічними показниками. Вони оцінили модель корекції векторних помилок, яка перевершила інші методи прогнозування часових рядів. 15 1.3 Висновки У першому розділі було описано необхідність прогнозування в автомобільній промисловості, а головне важливість врахування впливу на неї економічної ситуації в країні. Було досліджено існуючі методи прогнозування з урахуванням цього впливу. Багато робіт присвячено аналізу зв’язку обсягів продажів автомобілів з макроекономічними показниками в інших країнах за допомогою моделей VAR та VECM. Після цього було прийнято рішення провести аналогічне дослідження для автомобільного ринку в Україні. 16 РОЗДІЛ 2 МАТЕМАТИЧНІ ОСНОВИ 2.1 Основні поняття 2.1.1 Визначення часового ряду Часовий ряд - це набір точок даних, які зазвичай вимірюються послідовно. Вимірювання взяті під час події в часовому ряді розташовуються в належному хронологічному порядку. Часові ряди, що містять результати вимірювання однієї змінної, називаються одномірними. Але якщо розглядати вимірювання більш ніж однієї змінної, це називається багатовимірним часовим рядом. Часові ряди можуть бути неперервними або дискретними. У неперервному часовому ряді спостереження вимірюються в кожний момент часу, тоді як дискретні часові ряди містять спостереження, виміряні в дискретних точках часу. Зазвичай в дискретних рядах послідовні спостереження записуються з однаковими інтервалами часу, такими як погодинне, щоденне, щотижневе, щомісячне або щорічне розділення часу. Змінна, що спостерігається в дискретних часових рядах, вважається виміряною як неперервна змінна з використанням шкали реальних чисел. Крім того, неперервні часові ряди можуть бути легко перетворені в дискретні, об'єднуючи разом дані протягом заданого інтервалу часу. 2.1.2 Компоненти часового ряду В часовому ряді взагалі виділяють чотири основні компоненти: тренд, циклічна, сезонна та випадкова компоненти. Загальна тенденція тимчасових рядів збільшувати, зменшуватися або застоюватися протягом тривалого періоду часу називається трендом. Таким чином, можна сказати, що тренд є довгостроковим рухом у часових рядах. Наприклад, ряди, що стосуються зростання чисельності населення, кількості будинків у місті тощо, показують 17 тенденцію до зростання, тоді як низхідна тенденція може спостерігатися в рядах, пов'язаних зі смертністю, епідеміями тощо. Сезонні коливання часових рядів є коливаннями, повторюваними кожного року у певний сезон. Важливими факторами, що викликають сезонні коливання, є: кліматичні та погодні умови, звичаї, традиційні звички тощо. Циклічні варіації в часових рядах описують середньострокові зміни, викликані обставинами, які повторюються в циклах. Тривалість циклу поширюється на більш тривалий період часу, як правило, два або більше років. Більшість економічних та фінансових часових рядів демонструють певну циклічну варіацію. Економічний цикл складається з чотирьох етапів, а саме: 1) Процвітання 2) Зниження 3) Депресія 4) Відновлення і зображений на рис. 2.1. Рисунок 2.1 – Етапи економічного циклу Нерегулярні або випадкові зміни в часових рядах викликані непередбачуваними впливами, які не є регулярними, а також не 18 повторюються за певною схемою. Ці зміни викликані такими випадками, як війна, страйк, землетрус, повені, революція і т.д. Не існує певного статистичного методу для вимірювання випадкових коливань у часових рядах. Враховуючи вигляд цих чотирьох компонентів для різних часових рядів зазвичай використовуються два різних типи моделей: 1) Мультиплікативна: Y (t) = T (t) × S (t) × C (t) × I (t) 2) Адитивна: Y (t) = T (t) + S (t) + C (t) + I (t) Тут Y (t) є спостереженням, а T (t), S (t), C (t) і I (t) є відповідно трендом, сезонною, циклічною і випадковою компонентами в момент часу t. Мультиплікативна модель ґрунтується на припущенні, що чотири компоненти часового ряду не обов'язково є незалежними і можуть впливати один на одного, тоді як в адитивній моделі передбачається, що чотири компоненти є незалежними один від одного. 2.1.3 Поняття стаціонарності Поняття стаціонарності стохастичного процесу можна уявити як форму статистичної рівноваги. Статистичні властивості, такі як середнє і дисперсія стаціонарного процесу, не залежать від часу. Існують два типи стаціонарних процесів. Процес {x(t), t = 0,1,2, ...} є сильно стаціонарним або строго стаціонарним, якщо функція розподілу випадкових величин {x t-s, xt-s+1, ..., xt, ... xt+s-1, xt+s} не залежить від t для всіх s. Таким чином, для сильно стаціонарного процесу спільний розподіл будь-якого можливого набору випадкових величин з процесу не залежить від часу. Однак для практичних застосувань не завжди потрібне припущення про сильну стаціонарність, тому розглядається дещо слабша форма. Стохастичний процес називається слабко стаціонарним порядку k або інтегрованим порядку k (I (k)), якщо випадкові моменти процесу до цього 19 порядку залежать тільки від часових різниць, а не від часу входження даних, що використовуються для оцінки моментів. Важливо відзначити, що ні сильна, ні слабка стаціонарність не передбачає іншого. Однак слабко стаціонарний процес, що слідує за нормальним розподілом, також сильно стаціонарний. 2.2 Перевірка стаціонарності часових рядів за допомогою доповненого тесту Діккі-Фуллера Статистика та економетрика використовують одномірні або багатомірна регресійні моделі часових рядів для моделювання змінних та їх взаємозв'язків. Ці моделі ґрунтуються на методології Box та Jenkins [3] і фундаментальним припущенням для їх використання є стаціонарність часових рядів. Однак на практиці ця умова не завжди виконується, оскільки більшість економічних часових рядів є нестаціонарними. Ці часові ряди позначаються як інтегровані порядку d, коли вони є стаціонарними після диференціювання d разів. Тому побудова аналітичних моделей вимагає ідентифікації порядку інтегрованості або порядку диференціації d. Економетристи використовують кілька підходів для визначення цього порядку. Найпростішим методом є оцінка графіків часових рядів. Оригінальні часові ряди порівнюються з рядами перших та других різниць. Хоча цей метод має суб'єктивний характер, він є дуже ефективним у багатьох випадках, особливо для досвідчених аналітиків. Форма функцій автокореляції (ACF) і часткової автокореляції (PACF) є ще одним простим методом, що забезпечує достатні результати. Якщо ACF повільно зменшується, приблизно з лінійною швидкістю, а PACF має дуже високе перше значення, часові ряди повинні бути диференційовані. Якщо часові ряди класифікуються як нестаціонарні, то аналізуються їх перші різниці. Аналогічно, якщо часові ряди перших різниць є нестаціонарними, аналізується часовий ряд других різниць. Проте 20 вищевикладений підхід не дає точних результатів і є лише приблизним. Отже, зручно підходити до цієї проблеми формально і використовувати відповідні статистичні тести для визначення порядку інтеграції. Визначення та перевірка порядку інтеграції є досить широкою областю, яка включає в себе широкий перелік тестів, відомих як тести одиничного кореня, де найчастіше використовуються DF-тест Діккі-Фуллера та розширений тест Діккі-Фуллера ADF [4], тест Філліпса-Перрона, тест KPSS [5], менш часто використовуваний тест ADF і NGP тест. DF тест є одним з найбільш відомих і найбільш широко використовуваних тестів на одиничний корінь. Він базується на моделі авторегресійного процесу першого порядку: 𝑦𝑡 = 1 𝑦𝑡−1 + 𝑡 , 𝑡 = 1, … , 𝑇, де 1 - параметр авторегресії, 𝑡 - випадкова складова моделі, що відповідає характеристикам процесу білого шуму. Нульова гіпотеза 𝐻0 : 1 = 1, тобто процес містить одиничний корінь і тому нестаціонарний, і позначається як I (1). Альтернативна гіпотеза 𝐻1 : |1 | < 0, тобто процес не містить одиничного кореня і є стаціонарним, I (0). Для обчислення тестової статистики для тесту DF використовуємо рівняння, яке отримуємо, якщо 𝑦𝑡−1 вираховується з обох сторін рівняння: ∆𝑦𝑡 = 𝛽𝑦𝑡−1 + 𝑡 , де 𝛽 = 1 − 1. Статистика випробування визначається як: 𝑡𝐷𝐹 ̂ −1 = 1 , 𝑆̂ 1 21 ̂ є МНК оцінкою і 𝑆̂ − є її стандартна оцінка помилки. Під нульовою де 1 1 1 гіпотезою ця тестова статистика слідує за розподілом DF, критичні значення для цього розподілу були отримані шляхом моделювання і були відображені в таблицях у Dickey і Fuller [6, 7]. Модель може бути розширена константою або лінійним трендом: 𝑦𝑡 = 𝛽0 + 1 𝑦𝑡−1 + 𝑡 𝑦𝑡 = 𝛽0 + 𝛽1 𝑡 + 1 𝑦𝑡−1 + 𝑡 У випадку, коли випадкова компонента в моделях DF є автокорельованою (часто зустрічається у випадках макроекономічних рядів), побудовано ADF тест. Модель за ним трансформується як: 𝑝−1 𝑦𝑡 = 1 𝑦𝑡−1 + ∑ 𝛾𝑖 ∆𝑦𝑡−𝑖 + 𝑡 𝑖=1 і наступне рівняння використовується для розрахунку статистики тесту ADF: 𝑝−1 ∆𝑦𝑡 = (1 − 1)𝑦𝑡−1 + ∑ 𝛾𝑖 ∆𝑦𝑡−𝑖 + 𝑡 𝑖=1 Практичною проблемою цього випробування є вибір кількості лагів p. Schwert пропонує вибрати максимальне p = 12 ∗ ( 𝑇 100 1 4 ) , тому що якщо p є занадто низьким, то тест буде мати автокореляцію, а якщо p занадто велике, потужність тесту буде нижчою [8]. 22 2.3 Причинність про Грейнджеру У багатьох випадках з даними часових рядів ми можемо зробити припущення, що якщо подія А відбувається перед подією B, то можливо, що A викликає B. Ці інтуїтивні ідеї можна досліджувати за допомогою регресійних моделей, що включають поняття Грейнджера або регресивної причинності. Основна ідея полягає в тому, що змінна X Грейнджер-викликає Y, якщо минулі значення X можуть допомогти пояснити Y. Причинність Грейнджера стосується лише змінних часових рядів. Щоб проілюструвати основні поняття, розглянемо причинність Грейнджера між двома змінними (X і Y), які обидві є стаціонарними. Нижче буде наведено нестаціонарний випадок, де X і Y коінтегровані. Оскільки X і Y є стаціонарними, модель ADL є доречною. Маємо: 𝑌𝑡 = 𝛼 + 𝜙𝑌𝑡−1 + 𝛽1 𝑋𝑡−1 + 𝜀𝑡 Ця модель передбачає, що значення X минулого періоду має пояснювальну силу для поточного значення Y. Коефіцієнт 𝛽1 є мірою впливу 𝑋𝑡−1 на 𝑌𝑡 . Якщо 𝛽1 = 0, то минулі значення X не впливають на Y і не існує способу, яким X міг би Грейнджер-викликати Y. Іншими словами, якщо 𝛽1 = 0, то X не Грейнджер-викликає Y. Оскільки ми знаємо, як оцінювати ADL і проводити випробування гіпотез, просто перевірити причинність Грейнджера або, іншими словами, перевірити: ̂1 є статистично значущим (тобто його p-значення 𝐻0 : 𝛽1 = 0: якщо 𝛽 <0,05), то ми робимо висновок, що X Грейнджер-викликає Y. Зауважимо, що нульова гіпотеза, що перевіряється тут, є гіпотезою, що не існує причинності Грейнджера. Ми розглянемо цю процедуру як тест на причинність Грейнджера. 23 Загалом, можна припустити, що взаємодія (X, Y) описується моделлю ADL (p, q) виду (це також називається необмеженою моделлю): 𝑌𝑡 = 𝛼 + 𝛿𝑡 + 𝜙1 𝑌𝑡−1 + ⋯ +𝜙𝑝 𝑌𝑡−𝑝 + 𝛽1 𝑋𝑡−1 + ⋯ + 𝛽𝑞 𝑋𝑡−𝑞 + 𝜀𝑡 Ми говоримо, що X не Грейнджер-викликає Y, якщо всі 𝛽𝑖 = 0. Використовуючи описану раніше методику для моделі ADL ми можемо перевірити спільне значення 𝛽̂𝑖 : ми робимо висновок, що X Грейнджер̂1 , ..., 𝛽 ̂𝑞 є статистично значущими. Якщо викликає Y, якщо будь-які (або всі) 𝛽 X в будь-який час в минулому має пояснювальну силу для поточного значення Y, то ми говоримо, що X Грейнджер-викликає Y. Оскільки ми припускаємо, що X і Y не містять одиничних коренів, регресійний аналіз з МНК може бути використаний для оцінки цієї моделі (також називається обмежена модель): 𝑌𝑡 = 𝛼 + 𝛿𝑡 + 𝜙1 𝑌𝑡−1 + ⋯ +𝜙𝑝 𝑌𝑡−𝑝 Ми не відкидаємо нульову гіпотезу 𝐻0 : 𝛽1 = 0, ..., 𝛽𝑞 = 0, якщо моделі є "більш-менш однаковими", тобто якщо 𝑅𝑆𝑆𝑈𝑅 ≈ 𝑅𝑆𝑆𝑅 . Найбільш популярним тут є F-тест. Якщо тест статистики: 𝐹= (𝑅𝑆𝑆𝑅 − 𝑅𝑆𝑆𝑈𝑅 )/𝑞 𝑅𝑆𝑆𝑈𝑅 /(𝑛 − 𝑘) більше, ніж 0,95 квантиля розподілу F з (q, n - k), де n – розмір вибірки, k – кількість параметрів моделі, ми говоримо, що X Грейнджер-викликає Y. Це коротке обговорення причинності Грейнджера було зосереджено на двох змінних: X та Y. Однак немає ніяких причин, чому ці основні методики не можуть бути поширені на багато змінних. 24 Наприклад, якщо ми маємо три змінні, X, Y і Z, і зацікавлені у дослідженні того, чи X або Z Грейнджер-викликає Y, ми просто регресуємо Y на лагах Y, лагах X і лагах Z. Якщо, скажімо, лаги Z виявилися значними, а лаги X - ні, то можна сказати, що Z Грейнджер-викликає Y, але X не викликає. Тестування причинності Грейнджера серед коінтегрованих змінних дуже схоже з описаним вище методом. Зауважимо, що якщо змінні виявляються коінтегрованими, то слід працювати з ECM, що включає ці змінні. У випадку, коли у вас є дві змінні, це робиться шляхом: ∆𝑌𝑡 = 𝛼 + 𝛿𝑡 + 𝜆𝑒𝑡−1 + 𝛾1 ∆𝑌𝑡−1 + ⋯ + 𝛾𝑝 ∆𝑌𝑡−𝑝 + 𝜔1 ∆𝑋𝑡−1 + ⋯ + 𝜔𝑞 ∆𝑋𝑡−𝑞 + 𝜀𝑡 Це, по суті, модель ADL, за винятком наявності 𝜆𝑒𝑡−1 , де 𝑒𝑡−1 = 𝑌𝑡−1 − 𝛼 − 𝛽𝑋𝑡−1 . X Грейнджер-викликає Y, якщо минулі значення X мають пояснювальну силу для поточних значень Y. Застосовуючи цю інтуїцію до ECM, можна побачити, що минулі значення X з'являються у виразах ∆𝑋𝑡−1 , ..., ∆𝑋𝑡−𝑞 і 𝑒𝑡−1 . Це означає, що X не Грейнджер-викликає Y, якщо 𝜔1 = ⋯ = 𝜔𝑞 = 𝜆 = 0. t-статистика і p-значення можуть бути використані для тестування причинності Грейнджера так само, як і в стаціонарному випадку. Крім того, F - тести можуть бути використані для формального вигляду 𝐻0 : 𝜔1 = ⋯ = 𝜔𝑞 = 𝜆 = 0. Якщо X Грейнджер-викликає Y, це не означає, що X викликає Y, це лише означає, що X покращує передбачуваність Y (тобто зменшує залишки моделі). Наше обговорення причинності Грейнджера природно приводить нас до інтересу до моделей з кількома рівняннями – VAR моделей. 25 Спочатку будемо вважати, що всі змінні стаціонарні. Якщо вихідні змінні мають одиничні корені, то ми припускаємо, що диференціювання були прийняті таким чином, що модель включає змінні, які не мають одиничних коренів. Пізніше буде розглянуто поширення цього випадку на коінтеграцію. 2.4 Модель векторної авторегресії VAR є однією з найбільш успішних, гнучких і простих у використанні моделей для аналізу багатовимірних часових рядів. Вона є природним продовженням одномірної авторегресійної моделі до динамічних багатовимірних часових рядів. З її допомогою роблять прогнози для одновимірних часових рядів на основі одночасних рівнянь. Крім опису даних та прогнозування, модель VAR також використовується для структурного висновку та аналізу політики. У структурному аналізі встановлюються певні припущення щодо причиннонаслідкової структури досліджуваних даних, а також підсумовується результуючий причинний вплив несподіваних шоків або нововведень на задані змінні. Коли ми досліджували причинність Грейнджера між X і Y, ми почали з моделі ADL (p, q) для Y як залежної змінної. Ми використовували його для дослідження, якщо X Грейнджер-викликав Y. Можна продовжити розглядати причинність в іншому напрямку, що включає перемикання ролей X і Y в ADL. Зокрема, X стане залежною змінною. Ми можемо написати наступні два рівняння: 𝑌𝑡 = 𝛼1 + 𝛿1 𝑡 + 𝜙11 𝑌𝑡−1 + ⋯ +𝜙1𝑝 𝑌𝑡−𝑝 + 𝛽11 𝑋𝑡−1 + ⋯ + 𝛽1𝑞 𝑋𝑡−𝑞 + 𝜀1𝑡 𝑋𝑡 = 𝛼2 + 𝛿2 𝑡 + 𝜙21 𝑌𝑡−1 + ⋯ +𝜙2𝑝 𝑌𝑡−𝑝 + 𝛽21 𝑋𝑡−1 + ⋯ + 𝛽2𝑞 𝑋𝑡−𝑞 + 𝜀2𝑡 Перше з цих рівнянь перевіряє, чи X Грейнджер-викликає Y; другий, чи Y Грейнджер-викликає X. 26 Ці два рівняння вже і є VAR. VAR є розширенням моделі авторегресії (AR) до випадку, коли досліджується більше однієї змінної. VAR має більш ніж одну залежну змінну (наприклад, Y і X) і, таким чином, має більше одного рівняння. Кожне рівняння використовує в якості пояснювальних змінних лаги всіх досліджуваних змінних (і, можливо, детерміновану тенденцію). Термін "VAR" стає більш прозорим, якщо використовувати матрицю. VAR першого порядку в двох змінних буде задано: 𝑌𝑡 = 𝛼1 + 𝜙11 𝑌𝑡−1 + 𝜙12 𝑋𝑡−1 + 𝜀1𝑡 𝑋𝑡 = 𝛼2 + 𝜙21 𝑌𝑡−1 + 𝜙22 𝑋𝑡−1 + 𝜀2𝑡 , де 𝜀1𝑡 і 𝜀12 - два процеси білого шуму (незалежні від історії Х і Y), які можуть бути корельовані. Якщо, наприклад, 𝜙12 ≠ 0, це означає, що історія Х допомагає пояснити Y, тобто X є Грейнджер-причиною для Y. Система може бути записана як: 𝑌𝑡 𝛼1 𝜙 ( ) = ( ) + ( 11 𝜙21 𝑋𝑡 𝛼2 𝜀1𝑡 𝜙12 𝑌𝑡−1 )( )+( ) 𝜙22 𝑋𝑡−2 𝜀2𝑡 або відповідним виглядом: ⃗⃗⃗𝑡 = 𝛼 + Θ1 ⃗⃗⃗⃗⃗⃗⃗⃗ 𝑌 𝑌𝑡−1 + ⃗⃗⃗ 𝜀𝑡 Взагалі, модель VAR (p) для d - мірного вектора ⃗⃗⃗ 𝑌𝑡 задається як: ⃗⃗⃗𝑡 = 𝛼 + 𝛿 𝑡 + Θ1 ⃗⃗⃗⃗⃗⃗⃗⃗ 𝑌 𝑌𝑡−1 + … + Θ𝑝 ⃗⃗⃗⃗⃗⃗⃗⃗ 𝑌𝑝−1 + ⃗⃗⃗ 𝜀𝑡 , де Θ𝑗 - матриця d × d, ⃗⃗⃗ 𝜀𝑡 - d - мірний вектор вигляду білого шуму. 27 Подібно до одномірного випадку, VAR (p) є стаціонарною, якщо всі корені рівняння det (𝐼𝑘 − Θ1 𝑧 − Θ2 𝑧 2 − ⋯ − Θ𝑝 𝑧 𝑝 ) = 0 знаходяться поза одиничним комплексним колом. Кажуть, що VAR має єдиний корінь, якщо вищевказане рівняння має рівно один корінь z = +1, тобто det (𝐼𝑘 − Θ1 − Θ2 − ⋯ − Θ𝑝 ) = 0. Це відбудеться, якщо принаймні одна з змінних у VAR містить одиничний корінь [9]. Чому ми хотіли б працювати з такими моделями? Однією з причин є тестування причинності Грейнджера. Тобто, VAR надають основу для тестування причинності Грейнджера між кожним набором змінних. Визначення довжини запізнювання p в емпіричному застосуванні не завжди просте і однофакторна автокореляційна або часткова автокореляційна функції не допоможе. Розумною стратегією є оцінка моделі VAR для різних значень p, а потім вибір на основі критеріїв AIC або SIC. Після встановлення порядку p необхідно оцінити коефіцієнти. Виявляється, що для цього ми можемо застосувати МНК до кожного рівняння індивідуально. 2.5 Дослідження коінтеграції часових рядів 2.5.1 Визначення коінтеграції Значна частина економічної теорії в основному стосується довгострокових відносин. Відповідно, більшість емпіричних економетричних досліджень, що тягнуть за собою часові ряди, можуть бути інтерпретовані як спроби оцінити такі відносини в динамічних рамках. Свого часу загальноприйнята думка полягала в тому, що для застосування стандартних процедур в таких дослідженнях змінні в системі повинні бути стаціонарними, оскільки переважна більшість економетричної теорії будується на припущенні стаціонарності. Отже, протягом багатьох років економетрики вважали, ніби можна досягти стаціонарності, просто видаливши з даних детерміновані компоненти. Проте стаціонарні ряди 28 повинні мати принаймні постійне безумовне середнє і дисперсійне значення у часі, що навряд чи задовольняється в економіці навіть після усунення цих детермінованих термінів. Ці проблеми так чи інакше ігнорувалися в прикладній роботі до тих пір, поки важливі документи Granger та Newbold і Nelson та Plosser не показали економетричні наслідки. Зокрема, більша частина уваги була зосереджена на наслідках роботи з інтегрованими змінними, які є специфічним класом нестаціонарних змінних. Статистики, у свою чергу, після впливового підходу Box та Jenkins, виступали за перетворення інтегрованих часових рядів у стаціонарні шляхом послідовного диференціювання ряду перед моделюванням. Тому, з їхньої точки зору, усунення одиничного кореня через диференціювання повинно бути передумовою регресійного аналізу. Однак деякі автори почали критикувати за низкою підстав специфікацію динамічних моделей тільки з точки зору диференційованих змінних, особливо через труднощі виведення довгострокової рівноваги з розрахункової моделі [10]. Granger, спираючись на попередні ідеї, зазначив, що вектор змінних, які досягають стаціонарності після диференціювання, може мати лінійні комбінації, які є стаціонарними. Пізніше Engle та Granger [11] першими формалізували ідею інтегрованих змінних, що мають довгостроковий зв’язок, який виявився або стаціонарним, або меншим ступенем інтеграції, ніж вихідний ряд. Вони назвали цю властивість коінтеграцією. Часові ряди 𝑦𝑡 = (𝑦1𝑡 , … , 𝑦𝐾𝑡 )𝑇 інтегровані першого порядку I (1) називаються коінтегрованими, якщо існує такий вектор 𝛼 = (𝛼1 , … , 𝛼𝐾 )𝑇 , що 𝑡 = 𝛼 𝑇 𝑦𝑡 є стаціонарним процесом. 29 Слід помітити, що економічні ряди ведуть себе в більшості випадків, як I (1) процеси, але друга річ, яку слід помітити, полягає в тому, що вони, здається, дрейфують таким чином, що не відходять один від одного. 2.5.2 Перевірка коінтеграції за допомогою тесту Йохансена Методологія Йохансена починає свою відправну точку у VAR порядку p, заданої 𝑦𝑡 = 𝜇 + 𝐴1 𝑦𝑡−1 + ⋯ + 𝐴𝑝 𝑦𝑡−𝑝 + 𝑡 , де 𝑦𝑡 - вектор nx1 змінних, інтегрованих першого порядку I (1). Цей VAR можна переписати як: 𝑝−1 ∆𝑦𝑡 = 𝜇 + П𝑦𝑡−1 + ∑ Г𝑖 ∆𝑦𝑡−𝑖 + 𝑡 , 𝑖=1 𝑝 𝑝 де П = ∑𝑖=1 𝐴𝑖 − 𝐼 та Г = − ∑𝑗=𝑖+1 𝐴𝑗 Якщо матриця коефіцієнтів Π має ранг 0 < r < n, тоді існують матриці nxr α і β з рангом r такі, що П = 𝛼𝛽 Т і 𝛽 Т 𝑦𝑡 є стаціонарним. r - кількість коінтеграційних відносин або ранг коінтеграції, елементи α відомі як параметри корекції, а кожен стовпець β є коінтегрованим вектором. Якщо ранг П дорівнює n, це означає, що модель VAR стаціонарна, а якщо дорівнює нулю, то це означає, що серед рядів немає коінтеграційних відносин [12]. Є два варіанти тестування наявності коінтеграції у підході Йохансена: 1) Тест максимального власного числа 2) Тест сліду 30 Для обох варіантів тест Йохансена є тестом нульової гіпотези про відсутність коінтеграції проти альтернативної – наявність коінтеграції. Випробування відрізняються з точки зору альтернативної гіпотези. В першому варіанті спочатку нульова гіпотеза полягає в тому, що ранг (Π) = 0, а альтернативна гіпотеза полягає в тому, що ранг (Π) = 1. Для подальших тестів нульова гіпотеза полягає в тому, що ранг (Π) = 1, 2 ... і альтернативна гіпотеза в тому, що ранг (Π) = 2, 3, .... Тест максимального власного числа має таку статистику випробування: 𝐿𝑅(𝑟0 , 𝑟0 + 1) = −𝑇𝑙𝑛(1 − 𝜆𝑟0+1 ), де 𝐿𝑅(𝑟0 , 𝑟0 + 1) є статистичним показником перевірки, чи ранг (Π) = 𝑟0 проти альтернативної гіпотези, що ранг(Π) = 𝑟0 + 1 [13]. В другому варіанті гіпотеза полягає в тому, що ранг (Π) = 𝑟0 . Альтернативна гіпотеза полягає в тому, що 𝑟0 < ранг (Π) ≤ n, де n - максимальна кількість можливих коінтегрованих векторів. Для наступного тесту, якщо ця нульова гіпотеза відхилена, наступна нульова гіпотеза полягає в тому, що ранг (Π) = 𝑟0 + 1 і альтернативна гіпотеза полягає в тому, що 𝑟0 + 1 < ранг (Π) ≤ n. Статистика випробування має такий вигляд: 𝑛 𝐿𝑅(𝑟0 , 𝑛) = −𝑇 ∑ 𝑙𝑛(1 − 𝜆𝑖 ), 𝑖=𝑟0 +1 де 𝐿𝑅(𝑟0 , 𝑛) є статистичним показником перевірки, чи ранг (Π) = 𝑟0 проти альтернативної гіпотези, що ранг (П) ≤ n. 31 2.6 Векторна модель корекції помилок Якщо між часовими рядами виявлено коінтеграцію, то ми знаємо, що між ними існує довгострокове рівноважне відношення, тому ми застосовуємо VECM для корекції короткострокових відхилень коінтегрованих рядів від цієї рівноваги. Форма VECM виглядає так: 𝑝−1 ∆𝑦𝑡 = 𝜇 + 𝐴𝐵𝑇 𝑦𝑡−1 + ∑ Г𝑖 ∆𝑦𝑡−𝑖 + 𝑡 , 𝑖=1 де 𝜇 - детермінований вектор зсуву. Г є (k × k) матрицею параметрів лагованих стаціонарних різниць, B - матриця (k × r) коінтегрованих векторів та Α - відповідна (k × r) матриця коефіцієнтів корекції помилок. Матриця П = 𝐴𝐵𝑇 являє собою довгостроковий зв'язок між змінними [14, 15]. VECM дозволяє оцінити довгострокові ефекти та проаналізувати процес короткострокової адаптації в рамках однієї моделі. 2.7 Висновки У даному розділі була розглянута основна теорія, що стосується побудови обраних моделей і з цього можна зробити висновки, що починати будь-який аналіз часових рядів потрібно з перевірки їх стаціонарності. Від цього залежить вибір моделі та подальший план дій. У випадку, якщо всі ряди будуть стаціонарними, то є сенс досліджувати VAR модель. У випадку нестаціонарності рядів можна будувати VAR модель на різницях та досліджувати причинність по Грейнджеру, але слід враховувати коінтеграційні зв’язки, якщо такі існують. В такому доцільно будувати VECM. 32 РОЗДІЛ 3 АНАЛІЗ ПРОГРАМНОЇ РЕАЛІЗАЦІЇ МОДЕЛЕЙ 3.1 Аналіз вхідних даних В роботі було використано вісім часових рядів з місячними даними в період з січня 2011 року по грудень 2018 року. Розробка моделей почалася з вибору часового ряду, який буде прогнозуватися. Під обсягами продажів автомобілів певної марки в роботі мається на увазі кількість одиниць, проданих за певний період часу на території України. В роботі було розглянуто два варіанти: дані обсягів продажів однієї з найпопулярніших за останні роки серед українського населення фірми автомобілів – Volkswagen (рис. 3.1) та середня кількість продажів (рис. 3.2). Ця середня кількість була взята як середнє арифметичне між дев’ятнадцятьма найпопулярнішими фірмами – Toyota, Renault, Volkswagen, Nissan, Skoda, Hyundai, Kia, Ford, Mazda, Audi, Mercedes-Benz, Suzuki, Peugeot, Mitsubishi, BMW, Citroen, Honda, Fiat, Opel. Рисунок 3.1 – Обсяги продажів автомобілів Volkswagen 33 Рисунок 3.2 – Середня кількість обсягів продажів автомобілів У якості макроекономічних параметрів було взято шість рядів: 1) Місячні дані курсу долара (рис. 3.3) Рисунок 3.3 – Курс долара 2) Місячні дані курсу євро (рис. 3.4) 34 Рисунок 3.4 – Курс євро 3) Місячні дані зміни індексу споживчих цін (рис. 3.5), що розраховується як відношення різниці індексу споживчих цін поточного року та базового року на індекс споживчих цін базового року: ІСЦ𝑡 − ІСЦ0 ІСЦ0 де індекс споживчих цін розраховується як відношення суми добутків цін поточного року на випуски базового року на суму добутків цін на випуски базового року: ∑𝑖 𝑄𝑖0 𝑃𝑖𝑡 ІСЦ = ∑𝑖 𝑄𝑖0 𝑃𝑖0 35 Рисунок 3.5 – Зміна індексу споживчих цін 4) Місячні дані приросту рівня безробіття, що розраховується як відношення різниці рівня безробіття поточного року та базового року на рівня безробіття базового року: РБ𝑡 − РБ0 РБ0 де рівень безробіття – це відношення кількості безробітних на загальну величину робочої сили, поданий як квартальні дані (рис. 3.6) 36 Рисунок 3.6 – Приріст рівня безробіття 5) Квартальні дані приросту ВВП (рис. 3.7), що розраховується як відношення різниці реального ВВП поточного року та базового року на реальний ВВП базового року: ВВП𝑡 − ВВП0 ВВП0 37 Рисунок 3.7 – Приріст ВВП 6) Місячні дані середньої по Україні кредитної відсоткової ставки (рис. 3.8) Рисунок 3.8 – Середня по Україні кредитна відсоткова ставка Квартальні дані рівня безробіття та приросту ВВП були перетворені у місячні за допомогою лінійної інтерполяції. Як видно з попередніх графіків – усі макроекономічні параметри змінювали своє значення у політично та економічно складний для України період – 2014-2015 рік. Можна явно спостерігати зміни в економіці країни та їх зв’язок з обсягами продажів. Усі дані були приведені до однакової шкали [0;1] за допомогою перетворення: 𝑥𝑖 − min(𝑥) max(𝑥) − min(𝑥) 38 Першим етапом аналізу кожного ряду було проведення ADF тесту на одиничний корінь. В якості критерію на визначення оптимальної кількості лагів був взятий AIC: 𝐴𝐼𝐶 = 2𝑘 − 2 ln(𝐿), де k – число параметрів моделі, L – максимальне значення функції правдоподібності моделі. Нульова гіпотеза говорить про те, що ряд нестаціонарний і на рівні значущості 0.05 для кожного ряду тест показав нестаціонарність (рис. 3.9 – 3.16). Рисунок 3.9 – Результати ADF тесту для обсягів продажів Volkswagen Рисунок 3.10 – Результати ADF тесту для середніх обсягів продажів 39 Рисунок 3.11 – Результати ADF тесту для курсу долара Рисунок 3.12 – Результати ADF тесту для курсу євро Рисунок 3.13 – Результати ADF тесту для зміни індексу споживчих цін 40 Рисунок 3.14 – Результати ADF тесту приросту рівня безробіття Рисунок 3.15 – Результати ADF тесту для приросту ВВП Рисунок 3.16 – Результати ADF тесту середньої відсоткової ставки Після взяття перших різниць на рівні значущості 0.05 для кожного ряду тест показав стаціонарність (рис. 3.17 – 3.24). 41 Рисунок 3.17 – Результати ADF тесту для перших різниць обсягів продажів Volkswagen Рисунок 3.18 – Результати ADF тесту для перших різниць середніх обсягів продажів Рисунок 3.19 – Результати ADF тесту для перших різниць курсу долара 42 Рисунок 3.20 – Результати ADF тесту для перших різниць курсу євро Рисунок 3.21 – Результати ADF тесту для перших різниць зміни індексу споживчих цін Рисунок 3.22 – Результати ADF тесту для перших різниць приросту рівня безробіття 43 Рисунок 3.23 – Результати ADF тесту для перших різниць приросту ВВП Рисунок 3.24 – Результати ADF тесту для перших різниць середньої кредитної відсоткової ставки Тобто всі ряди є інтегрованими першого порядку I(1). Виходячи з цього першим рішенням було побудувати VAR модель на перших різницях усіх рядів. 3.2 Побудова моделей 3.2.1 Векторна модель авторегресії Одним з припущень будь-якої множинної регресії є відсутність мультиколінеарності, тобто відсутність строгої лінійної залежності між пояснюючими змінними. Тому було пораховано коефіцієнт кореляції Пірсона (рис. 3.25) для кожної пари часових рядів аби перевірити, чи не включаємо ми в регресію сильно залежні змінні. 44 Рисунок 3.25 – Кореляційна матриця для вхідних даних Для оцінки сили зв’язку була використана шкала Чеддока (табл. 3.1). Таблиця 3.1 – Шкала Чеддока Значення кореляції Інтерпретація 0 – 0.3 дуже слабка 0.3 – 0.5 слабка 0.5 – 0.7 середня 0.7 – 0.9 висока 0.9 - 1 дуже висока Висока кореляція спостерігалася лише між курсами долара та євро, через що часовий ряд курсу євро було вирішено виключити з моделювання обсягів продажів Volkswagen, через те, що він мав меншу кореляцію з обсягами продажів ніж курс долара. І з аналогічних міркувань було 45 виключено курс долара з моделювання середнього значення обсягів продажів. Оптимальну кількість лагів для моделі знову ж таки було обрано згідно AIC і у випадку моделювання обох рядів вона була рівна дванадцяти лагам. Після побудови моделі VAR було проведено статистичний тест Грейнджера на причинність. Для ряду Volkswagen на рівні значущості 0.05 нульова гіпотеза про те, що цей ряд не є Грейнджер-наслідком, не було відхилено (рис. 3.26). Рисунок 3.26 – Результати тесту Грейнджера на причинність у моделі VAR для обсягів продажів Volkswagen Аналогічні результати було отримано і для середніх обсягів продажів (рис. 3.27). Рисунок 3.27 – Результати тесту Грейнджера на причинність у моделі VAR для середніх обсягів продажів Залишки моделі були перевірені на нормальність за допомогою статистичного тесту Харке-Бера. Нульова гіпотеза тесту – третій момент (асиметрія) дорівнює нулю та четвертий момент (ексцес) дорівнює трьом (як в нормальному розподілі). Статистика тесту виглядає так: 46 𝑆 2 (𝐾 − 3)2 𝐽𝐵 = 𝑛( + ) 6 24 де 𝑆 = ∑ 𝑒𝑖 3 ̂ 3 𝑀𝐿 𝑛𝜎 , 𝑆= ∑ 𝑒𝑖 4 ̂ 4 𝑀𝐿 𝑛𝜎 , 𝑒𝑖 – залишки моделі, 𝜎̂ 2 𝑀𝐿 = ∑ 𝑒𝑖 2 𝑛 , n – кількість спостережень. ML означає метод максимальної правдоподібності. Дана статистика має розподіл хі-квадрат з двома степенями вільності. Якщо залишки розподілені нормально, це означає, що згідно теореми Гауса-Маркова оцінки МНК будуть найкращими (тобто мати найменшу дисперсію в класі лінійних незміщених оцінок), а коефіцієнти регресії будуть розподілені асимптотично нормально. Для обох рядів, як Volkswagen, так і середніх обсягів гіпотеза про нормальність залишків була відхилена на рівні значущості 0.05 (рис. 3.28 – 3.29). Рисунок 3.28 – Результати тесту Харке-Бера у моделі VAR для обсягів продажів Volkswagen Рисунок 3.29 – Результати тесту Харке-Бера у моделі VAR для середніх обсягів продажів З отриманих результатів було зроблено висновок, що моделі VAR в даному випадку не є адекватними і прийнято рішення перейти до етапу тестування коінтеграції та у випадку її наявності – побудови VECM. 3.2.2 Векторна модель корекції помилок 47 Знаючи той факт, що більшість економічних рядів є інтегрованими першого порядку, але в лінійній комбінації можуть давати стаціонарний ряд, тобто вони коінтегрують і те, що в такому випадку моделі на різницях, які не враховують довгострокової рівноваги дають значно гірші результати, було прийнято рішення перевірити вхідні ряди на наявність коінтеграції і в такому випадку побудувати VECM. Оптимальна кількість лагів, що була обрана згідно AIC для моделювання обсягів продажів Volkswagen дорівнювала десяти. Ранг коінтеграції для вхідних рядів був досліджений за допомогою тесту Йохансена. У випадках обох тестових статистик – сліду та максимального власного числа на рівні значущості 0.05 не була відхилена гіпотеза про те, що він дорівнює п’яти. Оптимальна кількість лагів, що була обрана згідно AIC для моделювання середніх обсягів продажів дорівнювала 8. У випадках обох тестових статистик Йохансена на рівні значущості 0.05 не була відхилена гіпотеза про те, що він дорівнює трьом. Після побудови VECM було проведено статистичний тест Грейнджера на причинність. Для ряду Volkswagen на рівні значущості 0.05 нульова гіпотеза про те, що цей ряд не є Грейнджер-наслідком, було відхилено (рис. 3.30). Рисунок 3.30 – Результати тесту Грейнджера на причинність у VECM для обсягів продажів Volkswagen Аналогічні результати було отримано і для середніх обсягів продажів (рис. 3.31). 48 Рисунок 3.31 – Результати тесту Грейнджера на причинність у VECM для середніх обсягів продажів Залишки моделі були перевірені на нормальність за допомогою статистичного тесту Харке-Бера. Для обох рядів, як Volkswagen, так і середніх обсягів гіпотеза про нормальність залишків не була відхилена на рівні значущості 0.05 (рис. 3.32 – 3.33). Рисунок 3.32 – Результати тесту Харке-Бера у VECM для обсягів продажів Volkswagen Рисунок 3.33 – Результати тесту Харке-Бера у VECM для середніх обсягів продажів Отже, побудовані VECM є адекватними і їх можна використовувати для прогнозування. 3.3 Аналіз отриманих результатів Для обох моделей VECM був розрахований коефіцієнт детермінації: 2 𝑅 =1− 𝜎̂ 2 𝜎̂𝑦 2 =1− 𝑆𝑆𝑟𝑒𝑠 , 𝑆𝑆𝑡𝑜𝑡 49 де 𝑆𝑆𝑟𝑒𝑠 − сума квадратів залишків моделі, 𝑆𝑆𝑡𝑜𝑡 − загальна сума квадратів. Він показує, яка доля результату пояснюється незалежними змінними. Але основним недоліком такого коефіцієнту є те, що він має властивість збільшуватися від додавання в модель більшої кількості змінних. Для того, щоб можна було оцінити модель уникнувши цього, розраховують скорегований коефіцієнт детермінації: 𝑅𝑎𝑑𝑗 2 = 1 − (1 − 𝑅2 ) 𝑛−1 , 𝑛−𝑘−1 де n – кількість спостережень, k – кількість параметрів моделі. Результати для обох моделей та коефіцієнтів наведено в табл. 3.2 – 3.3 Таблиця 3.2 – Коефіцієнти детермінації VECM для обсягів продажів Volkswagen Коефіцієнт Значення 𝑅2 0.9608 Adjusted 𝑅2 0.9581 Таблиця 3.3 – Коефіцієнти детермінації VECM для середніх обсягів продажів Коефіцієнт Значення 𝑅2 0.7619 Adjusted 𝑅2 0.7460 Для обох VECM була зроблена процедура бектестингу (рис. 3.34 – 3.35). Вона полягає в тому, щоб розбити дані на дві вибірки – тренувальну та тестову, навчити модель на тренувальній вибірці, зробити прогноз та перевірити його співпадіння із даними тестової вибірки. 50 Рисунок 3.34 – Результати бектестингу VECM для обсягів продажів Volkswagen Рисунок 3.35 – Результати бектестингу VECM для середніх обсягів продажів Як видно з отриманих результатів, прогнозування продажів Volkswagen є набагато кращим, ніж прогнозування середніх обсягів продажів. Це можна пояснити тим, що кожна фірма має досить різну політику, клієнтуру, рівень 51 розвитку та стійкість до зміни макроекономічних факторів і середнє значення обсягів продажів усіх цих фірм не може описуватися спільною моделлю. 3.4 Висновки У цьому розділі було проаналізовано часові ряди обсягів продажів автомобілів Volkswagen, середніх обсягів продажів автомобілів в Україні та основних макроекономічних показників. Усі ряди виявилися інтегрованими першого порядку, тому біло розглянуто два види моделей – VAR на перших різницях та VECM. Обидві моделі VAR не пройшли тест на причинність по Грейнджеру та тест на нормальність залишків. Було знайдено коінтеграційні відношення між рядами і побудовано VECM, які пройшли тест на причинність по Грейнджеру та тест на нормальність залишків, а також показали непогані результати прогнозу. Як показала процедура бектестингу даний вид моделі може бути застосований для прогнозування обсягів продажів автомобілів конкретної фірми. 52 РОЗДІЛ 4 ЕКОНОМІЧНА ЧАСТИНА 4.1 Постановка задачі Проводиться оцінка основних характеристик програмного продукту, призначеного для побудови моделей VAR та VECM. ПП був розроблений за допомогою мови програмування Python у середовищі розробки PyCharm. Програмний продукт призначено для використання на персональних комп’ютерах під управлінням операційних систем MacOS, Linux, Windows. Нижче наведено аналіз різних варіантів реалізації ПП з метою вибору оптимального, з огляду при цьому як на економічні фактори, так і на характеристики продукту, що впливають на продуктивність роботи і на його сумісність з апаратним забезпеченням. Для цього було використано апарат функціонально-вартісного аналізу. 4.2 Обґрунтування функцій ПП Головна функція F0 – розробка ПП, який аналізує процес за вхідними даними та будує його модель для подальшого прогнозування. Виходячи з конкретної мети, можна виділити наступні основні функції ПП: F1 – вибір мови програмування; F2 – вибір оптимальних бібліотек; F3 – постачальник економічних даних. Кожна з основних функцій може мати декілька варіантів реалізації. Функція F1: а) мова програмування R; б) мова програмування Python; Функція F2: а) vars; б) statsmodels. Функція F3: 53 а) CeicData; б) Trading Economics. Варіанти реалізації основних функцій наведені у морфологічній карті системи (рис. 4.1). МоваR МоваPytho n vars statsmodels CeicData TradingEco nomics Рисунок 4.1 – Морфологічна карта Морфологічна карта відображує всі можливі комбінації варіантів реалізації функцій, які складають повну множину варіантів ПП. На основі цієї карти побудовано позитивно-негативну матрицю варіантів основних функцій (табл. 1). Таблиця 4.1 – Позитивно-негативна матриця Основні Варіанти функції реалізації А F1 Переваги Недоліки Більш зрозуміла конструкція Складність в обробці мови великих даних Універсальність в сенсі Б взаємодії з будь-якою Нижча швидкодія операційною системою F2 А Більший статистичний Обмежена документація 54 інструментарій Б Вища швидкість розробки А Дешевий доступ Б Зручно отримувати дані Більш вузький функціонал Нижча зручність в користуванні F3 Висока вартість підтримки На основі аналізу позитивно-негативної матриці робимо висновок, що при розробці програмного продукту деякі варіанти реалізації функцій варто відкинути, тому, що вони не відповідають поставленим перед програмним продуктом задачам. Ці варіанти відзначені у морфологічній карті. Функція F1: Оскільки нам важлива універсальність ПП та ми маємо справу з великими даними, варіант а) має бути відкинутий. Функція F2: Оскільки для даного продукту не використовуються складні та ексклюзивні функції, але важливо отримати результат якомога швидше, відкидаємо варіант а). Функція F3: Оскільки обидва ресурси містять достовірна дані, вважаємо варіанти а) та б) гідними розгляду. Таким чином, будемо розглядати такі варіанти реалізації ПП: 1. F1б – F2б – F3а 2. F1б – F2б – F3б Для оцінювання якості розглянутих параметрів, описана нижче. 4.3 Обґрунтування системи параметрів ПП функцій обрана система 55 Для того, щоб охарактеризувати ПП, будемо використовувати наступні параметри: X1 – час ознайомлення з мовою програмування; X2 – об’єм пам’яті для збереження даних; X3 – час обробки даних; X4 – час парсингу даних. X1: Відображає час, необхідний для підготовки до написання програмного коду. X2: Відображає об’єм пам’яті в оперативній пам’яті ПК, необхідний для збереження та обробки даних під час виконання програми. X3: Відображає час, який витрачається на дії. X4: Показує час, який треба витратити аби дістати дані з ресурсу. Гірші, середні і кращі значення параметрів вибираються на основі вимог замовника й умов, що характеризують експлуатацію ПП як показано у табл. 4.2. Таблиця 4.2 – Основні параметри ПП Назва Умовні Параметра позначення виміру Час ознайомлення з Одиниці Значення параметра гірші середні кращі X1 год 30 15 5 X2 Мб 20 10 3 Час обробки даних X3 мс 1000 500 100 Час парсингу даних X4 с 1500 1000 500 мовою програмування Об’єм пам’яті для збереження даних За даними таблиці 4.2 будуються графічні характеристики параметрів (рис. 4.2 – рис. 4.5). 56 Рисунок 4.2 – Х1, час ознайомлення з мовою програмування Рисунок 4.3 – Х2, об’єм пам’яті для збереження даних 57 Рисунок 4.4 – Х3, час обробки даних Рисунок 4.5 – Х4, час парсингу даних 58 4.4 Аналіз експертного оцінювання параметрів Після детального обговорення й аналізу кожний експерт оцінює ступінь важливості кожного параметру для конкретно поставленої цілі – розробка програмного продукту, який дає найбільш точні результати при знаходженні параметрів моделей прогнозування і обчислення прогнозних значень. Значимість кожного параметра визначається методом попарного порівняння. Оцінку проводить експертна комісія із 7 людей. Визначення коефіцієнтів значимості передбачає: – визначення рівня значимості параметра шляхом присвоєння різних рангів; – перевірку придатності експертних оцінок для подальшого використання; – визначення оцінки попарного пріоритету параметрів; – обробку результатів та визначення коефіцієнту значимості. Результати експертного ранжування наведені у табл.4.3. Таблиця 4.3 – Результати ранжування параметрів Познач. параметр а Ранг параметра за Сум Відхи Назва Одиниці оцінкою експерта а - параметра виміру ранг лення ів Ri Δi 1 2 3 4 5 6 7 Δ i2 Час ознайомлення X1 з мовою год 2 1 1 3 1 1 2 11 -6,5 42,25 Мб 1 1 1 1 2 1 2 9 -8,5 72,25 програмуванн я X2 Об’єм пам’яті 59 для збереження даних Час обробки X3 даних Мс 4 4 4 4 3 4 4 27 9,5 90,25 с 3 4 2 3 3 4 4 23 5,5 30,25 0 235 алгоритмом Час X4 парсингу даних Разом 14 15 15 12 12 12 17 70 Для перевірки степені достовірності експертних оцінок, визначимо наступні параметри: а) сума рангів кожного з параметрів і загальна сума рангів: 𝑁 𝑅𝑖 = ∑ 𝑟𝑖𝑗 𝑅𝑖𝑗 = 𝑖=1 𝑁𝑛(𝑛 + 1) = 70 2 де N – число експертів, n – кількість параметрів; б) середня сума рангів: 𝑇= R ij = 17,5. n в) відхилення суми рангів кожного параметра від середньої суми рангів: ∆𝑖 = 𝑅𝑖 − 𝑇 Сума відхилень по всім параметрам повинна дорівнювати 0; 60 г)загальна сума квадратів відхилення: N 𝑆 = ∑ ∆2i = 235. i=1 Порахуємо коефіцієнт узгодженості: 𝑊= 12𝑆 2820 = = 0,95 > 𝑊𝑘 = 0,67 𝑁 2 (𝑛3 − 𝑛) 2940 Ранжування можна вважати достовірним, тому що знайдений коефіцієнт узгодженості перевищує нормативний, який дорівнює 0,67. Скориставшись результатами ранжування, проведемо попарне порівняння всіх параметрів і результати занесемо у табл. 4.4. Таблиця4.4 – Попарне порівняння параметрів Параметри Експерти Кінцева Числове 1 2 3 4 5 6 7 оцінка значення X1 і X2 > = = > < = = = 1 X1 і X3 < < < < < < < < 0,5 X1 і X4 < < < < < < < < 0,5 X2 і X3 < < < < < < < < 0,5 X2 і X4 < < < < < < < < 0,5 X3 і X4 > = > > = = = = 1 Числове значення, що визначає ступінь переваги i–го параметра над j– тим, aij визначається по формулі: 1,5 при Хі>Xj 61 1.0 при Хі= Хj 0.5 при Хі<Xj З отриманих числових оцінок переваги складемо матрицю A=║aij║. Для кожного параметра зробимо розрахунок вагомості Kві за наступними формулами: 𝑏𝑖 𝐾ві = ∑𝑛 𝑖=1 𝑏𝑖 , де 𝑏𝑖 = ∑𝑁 𝑖=1 𝑎𝑖𝑗 . Відносні оцінки розраховуються декілька разів доти, поки наступні значення не будуть незначно відрізнятися від попередніх (менше 2%).На другому і наступних кроках відносні оцінки розраховуються за наступними формулами: 𝐾ві = 𝑏𝑖′ ∑𝑛𝑖=1 𝑏𝑖′ , де 𝑏𝑖′ = ∑𝑁 𝑖=1 𝑎𝑖𝑗 𝑏𝑗 . Як видно з табл. 4.5, різниця значень коефіцієнтів вагомості не перевищує 2%, тому більшої кількості ітерацій не потрібно. Таблиця 4.5 – Розрахунок вагомості параметрів Параметри𝑥𝑖 Параметри𝑥𝑗 Перша ітер. Друга ітер. Третя ітер Х1 Х2 Х3 Х4 𝑏𝑖 𝐾ві 𝑏𝑖1 𝐾ві1 𝑏𝑖2 𝐾ві2 Х1 1,0 1,0 0,5 0,5 3 0,187 9 0,132 27 0,089 Х2 1,0 1,0 0,5 0,5 3 0,187 9 0,132 27 0,089 Х3 1,5 1,5 1,0 1,0 5 0,313 25 0,368 125 0,411 X4 1,5 1,5 1,0 1,0 5 0,313 25 0,368 125 0,411 62 Всього: 16 Четверта ітер 1 П’ята ітер 68 1 Шоста ітер 304 1 Сьома ітер 𝑏𝑖4 𝐾ві4 𝑏𝑖5 𝐾ві5 𝑏𝑖6 81 0,06 243 0,036 729 0,023 2187 0,014 81 0,06 243 0,036 729 0,023 2187 0,014 625 0,467 3125 0,464 15625 0,477 78125 0,486 625 0,467 3125 0,464 15625 0,477 78125 0,486 1339 1 6736 1 𝐾ві6 32708 1 𝑏𝑖7 160624 𝐾ві7 1 4.5 Аналіз рівня якості варіантів реалізації функцій Визначаємо рівень якості кожного варіанту виконання основних функцій окремо. Абсолютні значення параметрів Х1(час ознайомлення з мовою програмування), X2(об’єм пам’яті для збереження даних) Х3 (час обробки даних) та відповідають технічним вимогам умов функціонування даного ПП. Абсолютне значення параметра Х4 (час парсингу даних) обрано не найгіршим (не максимальним), тобто це значення відповідає або варіанту а) 1400 с або варіанту б) 900 с. Коефіцієнт технічного рівня для кожного варіанта реалізації ПП розраховується так (табл.4.6): 𝑛 𝐾𝐾 (𝑗) = ∑ 𝐾в𝑖,𝑗 𝐵𝑖,𝑗 , 𝑖=1 де n – кількість параметрів;𝐾в𝑖 – коефіцієнт вагомості i–го параметра; Вi – оцінка i–го параметра в балах. 63 Таблиця 4.6 – Розрахунок показників рівня якості варіантів реалізації основних функцій ПП Основні Варіант Параметри Абсолютне Бальна Коефіцієнт Коефіцієнт функції реалізації значення функції F1 Б F2 Б F3 оцінка вагомості рівня параметра параметра параметра якості Х1 6 9 0,014 0,126 Х2 7 9 0,014 0,126 X3 200 9 0,486 4,374 А X4 1400 1 0,486 0,486 Б X4 900 8 0,486 3,888 За даними з таблиці 4.6 за формулою 𝐾𝐾 = 𝐾ТУ [𝐹1𝑘 ] + 𝐾ТУ [𝐹2𝑘 ]+. . . +𝐾ТУ [𝐹𝑧𝑘 ], визначаємо рівень якості кожного з варіантів: КК1 = 0,126 + 0,126 + 4,374 + 0,486 = 5,112 КК2 = 0,126 + 0,126 + 4,374 + 3,888 = 8,514 Як видно з розрахунків, кращим є другий варіант , для якого коефіцієнт технічного рівня має найбільше значення. 4.6 Економічний аналіз варіантів розробки ПП Для визначення вартості розробки ПП спочатку проведемо розрахунок трудомісткості. Всі варіанти включають в себе два окремих завдання: 1. Розробка проекту програмного продукту; 2. Розробка програмної оболонки; 64 Завдання 1 за ступенем новизни відноситься до групи А, завдання 2 – до групи Б. За складністю алгоритми, які використовуються в завданні 1 належать до групи 1; а в завданні 2 – до групи 3. Для реалізації завдання 1 використовується довідкова інформація, а завдання 2 використовує інформацію у вигляді даних. Проведемо розрахунок норм часу на розробку та програмування для кожного з завдань. Проведемо розрахунок норм часу на розробку та програмування для кожного з завдань. Загальна трудомісткість обчислюється як ТО = ТР⋅ КП⋅ КСК⋅ КМ⋅ КСТ⋅ КСТ.М, (5.1) де ТР – трудомісткість розробки ПП;КП – поправочний коефіцієнт; КСК – коефіцієнт на складність вхідної інформації; КМ – коефіцієнт рівня мови програмування; КСТ – коефіцієнт використання стандартних модулів і прикладних програм; КСТ.М – коефіцієнт стандартного математичного забезпечення Для першого завдання, виходячи із норм часу для завдань розрахункового характеру степеню новизни А та групи складності алгоритму 1, трудомісткість дорівнює: ТР =100 людино-днів. Поправочний коефіцієнт, який враховує вид нормативно-довідкової інформації для першого завдання: КП = 1,9. Поправочний коефіцієнт, який враховує складність контролю вхідної та вихідної інформації для всіх семи завдань рівний 1: КСК = 1. Оскільки при розробці першого завдання використовуються стандартні модулі, врахуємо це за допомогою коефіцієнта КСТ = 0,8. Тоді, за формулою 5,1, загальна трудомісткість програмування першого завдання дорівнює: Т1 = 100⋅1,9⋅0,8 = 152 людино-днів. Проведемо аналогічні розрахунки для подальших завдань. 65 Для другого завдання (використовується алгоритм третьої групи складності, степінь новизни Б), тобто ТР = 30 людино-днів, КП = 0,7,КСК = 1,КСТ =0,8: Т2 = 30⋅0,7⋅ 0,8 = 16.8людино-днів. Складаємо трудомісткість відповідних завдань для кожного з обраних варіантів реалізації програми, щоб отримати їх трудомісткість: ТI = (112,2 + 16,8+ 16,8 + 30,9) ⋅ 8 = 1413,6людино-годин; ТII = (112,2 + 16,8+ 16,8 + 21,3) ⋅ 8 = 1336,8 людино-годин; Найбільш високу трудомісткість має варіант I. В розробці бере участь один програміст з окладом 20000 грн. Визначимо зарплату за годину за формулою: СЧ = М грн., 𝑇𝑚 ⋅ 𝑡 де М – місячний оклад працівників;𝑇𝑚 – кількість робочих днів тиждень;𝑡 – кількість робочих годин в день. СЧ = 20000 = 119,05 1 ∗ 21 ∗ 8 Тоді, розрахуємо заробітну плату за формулою СЗП = Сч ⋅ Т𝒊 ⋅ КД, 66 де СЧ– величина погодинної оплати праці програміста; Т𝒊 – трудомісткість відповідного завдання; КД – норматив, який враховує додаткову заробітну плату. Зарплата розробника становить: I. СЗП = 119,05 ∙ 1413,6 ∙ 1,2 = 201946,9 II. СЗП = 119,05 ∙ 1336,8 ∙ 1,2 = 190975,25 Відрахування на соціальний внесок становить 22,0%: I. СВІД = СЗП ∙ 0,22 = 201946,9 ∙ 0,22 = 44428,32 II. СВІД = СЗП ∙ 0,22 = 190975,25 ∙ 0,22 = 42014,56 Тепер визначимо витрати на оплату однієї машино-години. (СМ) Так як одна ЕОМ обслуговує одного інженера з окладом 20000 грн., з коефіцієнтом зайнятості 0,2 то для однієї машини отримаємо: СГ = 12⋅M⋅KЗ = 12 ⋅20000⋅ 0,2 = 48000 грн. З урахуванням додаткової заробітної плати: СЗП =СГ⋅ (1+ KЗ) = 48000 ⋅ (1 + 0,2) =57600 грн. Відрахування на соціальний внесок: СВІД= СЗП ⋅ 0,22 = 57600 * 0,22 = 12672грн. Амортизаційні відрахування розраховуємо при амортизації 25% та вартості ЕОМ – 30000 грн. 67 СА = КТМ⋅ KА⋅ЦПР = 1,15 ⋅ 0,25 ⋅30000 = 8625 грн., де КТМ– коефіцієнт, який враховує витрати на транспортування та монтаж приладу у користувача; KА– річна норма амортизації; ЦПР– договірна ціна приладу. Витрати на ремонт та профілактику розраховуємо як: СР = КТМ⋅ЦПР ⋅ КР = 1,15 ⋅30000⋅ 0,05 = 1725грн., де КР– відсоток витрат на поточні ремонти. Ефективний годинний фонд часу ПК за рік розраховуємо за формулою: ТЕФ =(ДК – ДВ – ДС – ДР) ⋅ tЗ ⋅ КВ = (365 – 104 – 11 – 16) ⋅ 8 ⋅ 0.9 = 1684,8годин, де ДК – календарна кількість днів у році; ДВ, ДС – відповідно кількість вихідних та святкових днів; ДР – кількість днів планових ремонтів устаткування; t –кількість робочих годин в день; КВ– коефіцієнт використання приладу у часі протягом зміни. Витрати на оплату електроенергії розраховуємо за формулою: СЕЛ = ТЕФ⋅ NС⋅ KЗ⋅ ЦЕН =1684,8⋅ 0,4⋅3,2⋅2,7515 = 5933,73грн., де NС – середньо-споживча потужність приладу; KЗ– коефіцієнтом зайнятості приладу; ЦЕН – тариф за 1 КВт-годин електроенергії. Накладні витрати розраховуємо за формулою: СН = ЦПР⋅0.67 = 30000 ⋅ 0,67 = 20100 грн. Тоді, річні експлуатаційні витрати будуть: 68 СЕКС =СЗП+ СВІД+ СА + СР+ СЕЛ + СН СЕКС = 57600 + 12672 + 8625 + 1725 + 5933,73 + 20100 = 106655,73 грн. Собівартість однієї машино-години ЕОМ дорівнюватиме: СМ-Г = СЕКС/ ТЕФ = 106655,73/1684,8= 63,3грн/час. Оскільки в даному випадку всі роботи, які пов‘язані з розробкою ПП ведуться на ЕОМ, витрати на оплату машинного часу складають: СМ = СМ-Г ⋅T I. CM = 63,3 ∙ 1413,6 = 89480,88грн. II. CM = 63,3 ∙ 1336,8 = 84619,44 грн. Накладні витрати складають 67% від заробітної плати: СН = СЗП ⋅ 0,67 I. СН = 201946,9 ∙ 0,67 = 135304,42 грн. II. CH = 190975,25 ∙ 0,67 = 127953,42 грн. Отже, вартість розробки ПП становить: СПП = СЗП+ СВІД+ СМ +СН I. СПП = 201946,9 + 44428,32 + 89480,88 + 135304,42 = 471160,52грн. II. СПП = 190975,25 + 42014,56 + 84619,44 + 127953,42 = 445562,67 грн. 69 4.7 Вибір кращого варіанта ПП Розрахуємо коефіцієнт техніко-економічного рівня за формулою: КТЕРj =ККj ⁄ СФj, КТЕР1 = 5,112/ 471160,52 = 1,1⋅10-5; КТЕР2 = 8,514/ 445562,67 = 1,9⋅10-5; Як бачимо, найбільш ефективним є другий варіант реалізації програми з коефіцієнтом техніко-економічного рівня КТЕР1= 1,9⋅10-5. 4.8 Висновки В даному розділі проведено повний функціонально-вартісний аналіз ПП, який було розроблено в рамках дипломного проекту. Після виконання функціонально-вартісного аналізу програмного комплексу що розроблюється, можна зробити висновок, що з альтернатив, що залишились після першого відбору двох варіантів виконання програмного комплексу оптимальним є другий варіант реалізації ПП. У нього виявився найкращий показник техніко-економічного рівня якості КТЕР= 1,9⋅10-5. Цей варіант реалізації ПП має такі параметри: - мова програмування – Python; - бібліотека statsmodels; - постачальник економічних даних TradingEconomics. Даний варіант виконання програмного комплексу дає користувачу можливість будувати макроекономічні моделі з достатньою точністю та швидкодією. 70 ВИСНОВКИ У даній дипломній роботі було проведено аналіз довгострокового та короткострокового зв’язку макроекономічних параметрів з обсягами продажів автомобілів в Україні як окремої фірми так і середнього значення за допомогою моделей VAR та VECM. Змінні, що використовувалися при побудові моделі, включають курс євро та долара, приріст ВВП та безробіття, індекс споживчих цін та середню кредитну відсоткову ставку. Для того, щоб встановити вплив економічної ситуації країни на обсяги продажів, був використаний період 2011-2018 років. Всі змінні виявилися інтегрованими порядку I (1), що було виявлено за допомогою ADF тесту. Модель VAR виявилася невідповідною до даних часових рядів. Кількість коінтеграційних зв’язків була виявлена тестом Йохансена, і VECM була застосована відповідно до його результату. Результати моделі адекватні і вказують на зв’язок між змінними як на довгий, так і на короткий. Потім тест Грейнджера був застосований для встановлення причинності між змінними. Було виявлено, що зміна макроекономічних показників спричиняє значний вплив на обсяг продажів автомобілів. Порівнявши отримані результати, можна зробити висновок, що VECM не дає точних результатів у випадку середніх обсягів продажів, але може бути застосована для прогнозування обсягів продажів автомобілів окремої фірми на ринку України. В подальшому планується дослідити більшу кількість макроекономічних показників та їх зв'язок з об'єктом дослідження, а також протестувати інші підходи до прогнозування. 71 СПИСОК ВИКОРИСТАНОЇ ЛІТЕРАТУРИ 1. Berkovec J. New Car Sales and Used Car Stocks: A Model for the Automobile. The RAND Journal of Economics. 1985. №2. p. 195–214. 2. Beveridge S., Nelson C. A new approach to decomposition of economic time series into permanent and transitory components with particular attention to measurement of the “Business Cycle”. Journal of Monetary Economics. 1981. №7. p. 151–174. 3. Box G. Jenkins G. Time series analysis: forecasting and control. San Francisco: Holden Day, 1970. 712 p. 4. Dickey D., Fuller W. Distribution of the Estimators for Autoregressive Time Series with a Unit Root. Journal of the American Stat. Association. 1979. №74. p. 427–431. 5. Kwiatkowski D., Phillips P., Schmidt, P. Shin Y. Testing the Null Hypothesis of Stationarity Against the Alternative of a Unit Root. Journal of Econometrics. 1992. №54. p. 159–178. 6. Dickey D. Estimation and Hypothesis Testing in Nonstationary Time Series. Iowa State University, 1976. 125 p. 7. Dickey D., Fuller W. Likelihood Ratio Statistics for Autoregressive Time Series with a Unit Root. Econometrica. 1981. №49. p. 1057–1072. 8. Perron P. Lag Length Selection and the Construction of Unit Root Tests with Good Size and Power. Econometrica. 2001. №69. p. 1519–1554. 9. Co-integration, error correction and the econometric analysis of nonstationary data/ Banerjee A., Dolado J., Galbraith J., Hendry D. Oxford University Press, 1993. 352 p. 10. Hansen P., Johansen S. Workbook on Cointegration. Oxford University Press, 1998. 176 p. 11. Engle R., Granger C. Co-integration and error correction: Representation, estimation and testing. Econometrica. 1987. №55. p. 251–276. 72 12. Balke N., Fomby T. Threshold cointegration. International Economic Review. 1997. №38. p. 627–645. 13. Mackinnon J. Critical Values for Cointegration Tests. Oxford University Press, 1991. 17 p. 14. Campbell J., Shiller J. Cointegration and tests of present value models. Journal of Political Economy. №38. 1987. p. 1062–1088. 15. Engle R., Yoo B. Forecasting and testing in cointegrated systems. Journal of Econometrics. 1987. №35. p. 143–159. 73 ДОДАТОК А ГРАФІЧНІ МАТЕРІАЛИ ДЛЯ ДОПОВІДІ 74 75 76 77 78 79 80 81 82 83 ДОДАТОК Б ЛІСТИНГ ПРОГРАМИ import pandas as pd import numpy as np import matplotlib.pyplot as plt from pylab import rcParams import statsmodels from statsmodels.tsa.stattools import adfuller, grangercausalitytests from sklearn import preprocessing from statsmodels.graphics.tsaplots import plot_acf from statsmodels.graphics.tsaplots import plot_pacf from statsmodels.tsa.vector_ar import * from statsmodels.tsa.vector_ar.vecm import * from datetime import date from dateutil.rrule import rrule, MONTHLY rcParams['figure.figsize'] = 15, 7 df = pd.read_excel('/Users/masha/Desktop/DiplomaNewData.xlsx') df = df.loc[df['date'] >= 20110101] ###############################################reading car sales############################################## target_1 = df['Volkswagen'] target_2 = df['All'] ###############################################reading macro variables############################################## 84 USD_ = df['USD'] EUR_ = df['EUR'] CPIyoy_ = df['CPIyoy'] URindex_ = df['URindex'] GDPyoy_ = df['GDPyoy'] LendingRate_ = df['LendingRate'] ###############################################date iteration############################################### start = date(2011, 1, 1) end = date(2018, 12, 1) date_ = list() for dt in rrule(MONTHLY, dtstart=start, until=end): date_.append(dt.strftime("%Y-%m")) ##############################################visual analysis############################################## plt.plot(date_, target_1, color = 'purple') plt.xticks(fontsize=7, rotation=90) plt.title('Volkswagen') plt.show() plt.plot(date_, target_2, color = 'purple') plt.xticks(fontsize=7, rotation=90) plt.title('average') plt.show() 85 plt.plot(date_, USD_, color = 'purple') plt.xticks(fontsize=7, rotation=90) plt.title('USD') plt.show() plt.plot(date_, EUR_, color = 'purple') plt.xticks(fontsize=7, rotation=90) plt.title('EUR') plt.show() plt.plot(date_, CPIyoy_, color = 'purple') plt.xticks(fontsize=7, rotation=90) plt.title('CPIyoy') plt.show() plt.plot(date_, URindex_, color = 'purple') plt.xticks(fontsize=7, rotation=90) plt.title('URindex_D1') plt.show() plt.plot(date_, GDPyoy_, color = 'purple') plt.xticks(fontsize=7, rotation=90) plt.title('GDPyoy') plt.show() plt.plot(date_, LendingRate_, color = 'purple') plt.xticks(fontsize=7, rotation=90) plt.title('LendingRate') plt.show() 86 ################################################data normalizing################################################ target = target_1.values target = target.reshape((len(target), 1)) sca_target = preprocessing.MinMaxScaler().fit(target) target = pd.Series(sca_target.transform(target).reshape(1,-1)[0]) target2 = target_2.values target2 = target2.reshape((len(target2), 1)) sca_target2 = preprocessing.MinMaxScaler().fit(target2) target2 = pd.Series(sca_target2.transform(target2).reshape(1,-1)[0]) USD = USD_.values USD = USD.reshape((len(USD), 1)) sca_USD = preprocessing.MinMaxScaler().fit(USD) USD = pd.Series(sca_USD.transform(USD).reshape(1,-1)[0]) EUR = EUR_.values EUR = EUR.reshape((len(EUR), 1)) sca_EUR = preprocessing.MinMaxScaler().fit(EUR) EUR = pd.Series(sca_EUR.transform(EUR).reshape(1,-1)[0]) CPIyoy = CPIyoy_.values CPIyoy = CPIyoy.reshape((len(CPIyoy), 1)) sca_CPIyoy = preprocessing.MinMaxScaler().fit(CPIyoy) CPIyoy = pd.Series(sca_CPIyoy.transform(CPIyoy).reshape(1,-1)[0]) URindex = URindex_.values 87 URindex = URindex.reshape((len(URindex), 1)) sca_URindex = preprocessing.MinMaxScaler().fit(URindex) URindex = pd.Series(sca_URindex.transform(URindex).reshape(1,-1)[0]) GDPyoy = GDPyoy_.values GDPyoy = GDPyoy.reshape((len(GDPyoy), 1)) sca_GDPyoy = preprocessing.MinMaxScaler().fit(GDPyoy) GDPyoy = pd.Series(sca_GDPyoy.transform(GDPyoy).reshape(1,-1)[0]) LendingRate = LendingRate_.values LendingRate = LendingRate.reshape((len(LendingRate), 1)) sca_LendingRate = preprocessing.MinMaxScaler().fit(LendingRate) LendingRate = pd.Series(sca_LendingRate.transform(LendingRate).reshape(1,1)[0]) ##############################################ADF test for stationarity############################################## class StationarityTests: def __init__(self, significance=.01): self.SignificanceLevel = significance self.pValue = None self.isStationary = None def ADF_Stationarity_Test(self, timeseries, printResults=True, reg = 'ct', max = 12): # Dickey-Fuller test: adfTest = adfuller(timeseries, maxlag = max, regression= reg, autolag = 'AIC') 88 self.pValue = adfTest[1] if (self.pValue < self.SignificanceLevel): self.isStationary = True else: self.isStationary = False if printResults: dfResults = pd.Series(adfTest[0:4], index=['ADF Test Statistic', 'P-Value', '# Lags Used', '# Observations Used']) print(dfResults) # Add Critical Values for key, value in adfTest[4].items(): dfResults['Critical Value (%s)' % key] = value print('Augmented Dickey-Fuller Test Results:') print(dfResults) sTest = StationarityTests() sTest.ADF_Stationarity_Test(target, printResults = True, reg = 'ct') print("Is the Volkswagen sales stationary? {0}".format(sTest.isStationary)) sTest.ADF_Stationarity_Test(target2, printResults = True, reg = 'ct') print("Is the average sales stationary? {0}".format(sTest.isStationary)) sTest.ADF_Stationarity_Test(USD, printResults = True, reg = 'ct') print("Is the USD stationary? {0}".format(sTest.isStationary)) 89 sTest.ADF_Stationarity_Test(EUR, printResults = True, reg = 'ct') print("Is the EUR stationary? {0}".format(sTest.isStationary)) sTest.ADF_Stationarity_Test(CPIyoy, printResults = True, reg = 'ct') print("Is the CPIyoy stationary? {0}".format(sTest.isStationary)) sTest.ADF_Stationarity_Test(URindex, printResults = True, reg = 'ct') print("Is the URindex stationary? {0}".format(sTest.isStationary)) sTest.ADF_Stationarity_Test(GDPyoy, printResults = True, reg = 'ct') print("Is the GDPyoy stationary? {0}".format(sTest.isStationary)) sTest.ADF_Stationarity_Test(LendingRate, printResults = True, reg = 'ct') print("Is the Lending Rate stationary? {0}".format(sTest.isStationary)) ##############################################all time series are nonstationary############################################## ##############################################first differencing############################################## target_D1 = target.diff()[1:] target2_D1 = target2.diff()[1:] USD_D1 = USD.diff()[1:] EUR_D1 = EUR.diff()[1:] CPIyoy_D1 = CPIyoy.diff()[1:] URindex_D1 = URindex.diff()[1:] GDPyoy_D1 = GDPyoy.diff()[1:] LendingRate_D1 = LendingRate.diff()[1:] 90 ##############################################ADF test for stationarity############################################## sTest.ADF_Stationarity_Test(target_D1, printResults = True, reg = 'nc') print("Is the Volkswagen D1 stationary? {0}".format(sTest.isStationary)) sTest.ADF_Stationarity_Test(target2_D1, printResults = True, reg = 'nc', max = 9) print("Is the average sales D1 stationary? {0}".format(sTest.isStationary)) sTest.ADF_Stationarity_Test(USD_D1, printResults = True, reg = 'nc') print("Is the USD D1 stationary? {0}".format(sTest.isStationary)) sTest.ADF_Stationarity_Test(EUR_D1, printResults = True, reg = 'nc') print("Is the EUR D1 stationary? {0}".format(sTest.isStationary)) sTest.ADF_Stationarity_Test(CPIyoy_D1, printResults = True, reg = 'nc') print("Is the CPI yoy D1 stationary? {0}".format(sTest.isStationary)) sTest.ADF_Stationarity_Test(URindex_D1, printResults = True, reg = 'nc') print("Is the URindex D1 stationary? {0}".format(sTest.isStationary)) sTest.ADF_Stationarity_Test(GDPyoy_D1, printResults = True, reg = 'nc') print("Is the GDPyoy D1 stationary? {0}".format(sTest.isStationary)) sTest.ADF_Stationarity_Test(LendingRate_D1, printResults = True, reg = 'nc') print("Is the Lending Rate D1 stationary? {0}".format(sTest.isStationary)) ##############################################now all time series are stationary so we have all I(1) time 91 series############################################## ##############################################stationary time series visual analysis############################################## plt.plot(date_[1:], target_D1, color = 'purple') plt.xticks(fontsize=7, rotation=90) plt.title('Volkswagen_D1') plt.show() plt.plot(date_[1:], target2_D1, color = 'purple') plt.xticks(fontsize=7, rotation=90) plt.title('average_D1') plt.show() plt.plot(date_[1:], USD_D1, color = 'purple') plt.xticks(fontsize=7, rotation=90) plt.title('USD_D1') plt.show() plt.plot(date_[1:], EUR_D1, color = 'purple') plt.xticks(fontsize=7, rotation=90) plt.title('EUR_D1') plt.show() plt.plot(date_[1:], CPIyoy_D1, color = 'purple') plt.xticks(fontsize=7, rotation=90) plt.title('CPIyoy_D1') plt.show() 92 plt.plot(date_[1:], URindex_D1, color = 'purple') plt.xticks(fontsize=7, rotation=90) plt.title('URindex_D1') plt.show() plt.plot(date_[1:], GDPyoy_D1, color = 'purple') plt.xticks(fontsize=7, rotation=90) plt.title('GDPyoy_D1') plt.show() plt.plot(date_[1:], LendingRate_D1, color = 'purple') plt.xticks(fontsize=7, rotation=90) plt.title('LendingRate_D1') plt.show() ##############################################multivariate analysis############################################## for_corr = {"USD_D1": USD_D1, "EUR_D1": EUR_D1, "CPIyoy_D1": CPIyoy_D1, "URindex_D1": URindex_D1, "GDPyoy_D1": GDPyoy_D1, "LendingRate_D1": LendingRate_D1, "target_D1": target_D1, "target2_D1": target2_D1} corr = pd.DataFrame(for_corr) names = ['USD_D1', 'EUR_D1', 'CPIyoy_D1', 'URindex_D1', 'GDPyoy_D1', 'LR_D1', 'Volkswagen_D1', 'average_D1'] correlations = corr.corr() 93 fig = plt.figure() ax = fig.add_subplot(111) cax = ax.matshow(correlations, vmin=-1, vmax=1) fig.colorbar(cax) ticks = np.arange(0,8,1) ax.set_xticks(ticks) ax.set_yticks(ticks) ax.set_xticklabels(names, rotation = 90) ax.set_yticklabels(names) plt.show() ##############################################excluding EUR because of high correlation with USD because USD has higher correlation with target############################################## ##############################################excluding USD because of high correlation with EUR because EUR has higher correlation with target############################################## ##############################################VAR model for all stationary time series############################################## for_model = {"USD_D1": USD_D1, "CPIyoy_D1": CPIyoy_D1, "URindex_D1": URindex_D1, "GDPyoy_D1": GDPyoy_D1, "LendingRate_D1": LendingRate_D1, "Volkswagen_D1": target_D1} for_model = pd.DataFrame(for_model) model = VAR(for_model) 94 print(model.select_order()) res = model.fit(maxlags = 12) print(res.summary()) print(test_normality(res, signif=0.05)) granger_results = res.test_causality(caused="Volkswagen_D1", causing = [0,1,2,3,4], signif=0.05) print(granger_results.summary()) for_model = {"EUR_D1": EUR_D1, "CPIyoy_D1": CPIyoy_D1, "URindex_D1": URindex_D1, "GDPyoy_D1": GDPyoy_D1, "LendingRate_D1": LendingRate_D1, "average_D1": target2_D1} for_model = pd.DataFrame(for_model) model = VAR(for_model) print(model.select_order()) res = model.fit(maxlags = 12) print(res.summary()) print(test_normality(res, signif=0.05)) granger_results = res.test_causality(caused = "average_D1", causing = [0,1,2,3,4], 95 signif=0.05) print(granger_results.summary()) ##############################################VECM model############################################## for_model = {"USD": USD, "CPIyoy": CPIyoy, "URindex": URindex, "GDPyoy": GDPyoy, "LendingRate": LendingRate, "target": target} for_model = pd.DataFrame(for_model) lag_order = select_order(data = for_model, deterministic = 'co', maxlags = 10) print(lag_order) rank_test = select_coint_rank(for_model, 0, 10, method="trace", signif=0.05) ###maxeig gives the same result print(rank_test.rank) model = VECM(for_model, deterministic = 'cі', k_ar_diff = 10, coint_rank = 5) res = model.fit() print(res.summary()) granger_results = res.test_granger_causality(caused="target", signif=0.05) print(granger_results.summary()) norm_test = res.test_normality() print(norm_test.summary()) fit = res.fittedvalues.T[5] r2 = r2_score(target[11:-6],fit[:-6]) 96 adj_r2 = 1 - ( 1 - r2)*78/73 print(r2) print(adj_r2) def _linear_trend(nobs, k_ar, coint=False): """ Construct an ndarray representing a linear trend in a VECM. Parameters ---------nobs : int Number of observations excluding the presample. k_ar : int Number of lags in levels. coint : boolean, default: False If True (False), the returned array represents a linear trend inside (outside) the cointegration relation. Returns ------ret : ndarray (nobs) An ndarray representing a linear trend in a VECM Notes ----The returned array's size is nobs and not nobs_tot so it cannot be used to construct the exog-argument of VECM's __init__ method. """ ret = np.arange(nobs) + k_ar if not coint: 97 ret += 1 return ret def ppredict(self, steps=6, alpha=None, exog_fc=None, exog_coint_fc=None): """ Calculate future values of the time series. Parameters ---------steps : int Prediction horizon. alpha : float, 0 < `alpha` < 1 or None If None, compute point forecast only. If float, compute confidence intervals too. In this case the argument stands for the confidence level. exog : ndarray (steps x self.exog.shape[1]) If self.exog is not None, then information about the future values of exog have to be passed via this parameter. The ndarray may be larger in it's first dimension. In this case only the first steps rows will be considered. Returns ------forecast - ndarray (steps x neqs) or three ndarrays In case of a point forecast: each row of the returned ndarray represents the forecast of the neqs variables for a specific period. The first row (index [0]) is the forecast for the next period, the last row (index [steps-1]) is the steps-periods-aheadforecast. 98 """ if self.exog is not None and exog_fc is None: raise ValueError("exog_fc is None: Please pass the future values " "of the VECM's exog terms via the exog_fc " "argument!") if self.exog is None and exog_fc is not None: raise ValueError("This VECMResult-instance's exog attribute is " "None. Please don't pass a non-None value as the " "method's exog_fc-argument.") if exog_fc is not None and exog_fc.shape[0] < steps: raise ValueError("The argument exog_fc must have at least steps " "elements in its first dimension") if self.exog_coint is not None and exog_coint_fc is None: raise ValueError("exog_coint_fc is None: Please pass the future " "values of the VECM's exog_coint terms via the " "exog_coint_fc argument!") if self.exog_coint is None and exog_coint_fc is not None: raise ValueError("This VECMResult-instance's exog_coint attribute " "is None. Please don't pass a non-None value as " "the method's exog_coint_fc-argument.") if exog_coint_fc is not None and exog_coint_fc.shape[0] < steps - 1: raise ValueError("The argument exog_coint_fc must have at least " "steps elements in its first dimension") last_observations = self.y_all.T[-(self.k_ar+steps):-steps] exog = [] trend_coefs = [] # adding deterministic terms outside cointegration relation 99 exog_const = np.ones(steps) nobs_tot = self.nobs + self.k_ar if self.const.size > 0: exog.append(exog_const) trend_coefs.append(self.const.T) if self.seasons > 0: first_future_season = (self.first_season + nobs_tot) % self.seasons exog_seasonal = seasonal_dummies(self.seasons, steps, first_future_season, True) exog.append(exog_seasonal) trend_coefs.append(self.seasonal.T) exog_lin_trend = _linear_trend(self.nobs, self.k_ar) exog_lin_trend = exog_lin_trend[-1] + 1 + np.arange(steps) if self.lin_trend.size > 0: exog.append(exog_lin_trend) trend_coefs.append(self.lin_trend.T) if exog_fc is not None: exog.append(exog_fc[:steps]) trend_coefs.append(self.exog_coefs.T) # adding deterministic terms inside cointegration relation if "ci" in self.deterministic: exog.append(exog_const) trend_coefs.append(self.alpha.dot(self.const_coint.T).T) exog_lin_trend_coint = _linear_trend(self.nobs, self.k_ar, coint=True) exog_lin_trend_coint = exog_lin_trend_coint[-1] + 1 + np.arange(steps) if "li" in self.deterministic: 100 exog.append(exog_lin_trend_coint) trend_coefs.append(self.alpha.dot(self.lin_trend_coint.T).T) if exog_coint_fc is not None: if exog_coint_fc.ndim == 1: exog_coint_fc = exog_coint_fc[:, None] # make 2-D exog_coint_fc = np.vstack((self.exog_coint[-1:], exog_coint_fc[:steps - 1])) exog.append(exog_coint_fc) trend_coefs.append(self.alpha.dot(self.exog_coint_coefs.T).T) # glueing all deterministics together exog = np.column_stack(exog) if exog != [] else None if trend_coefs != []: trend_coefs = np.row_stack(trend_coefs) else: trend_coefs = None # call the forecasting function of the VAR-module if alpha is not None: return forecast_interval(last_observations, self.var_rep, trend_coefs, self.sigma_u, steps, alpha=alpha, exog=exog) else: return forecast(last_observations, self.var_rep, trend_coefs, steps, exog) pred = ppredict(self = res, steps = 6).T[5] 101 result = sca_target.inverse_transform(np.array(target[:-6].tolist()+ pred.tolist()).reshape(-1,1)).reshape(1,-1)[0] plt.plot(date_, target_1, label = 'Volkswagen', color = 'purple') plt.plot(date_[-7:], result[-7:], label = 'forecast', color = 'pink') plt.legend() plt.xticks(fontsize=7, rotation=90) plt.show() for_model = {"EUR": EUR, "CPIyoy": CPIyoy, "URindex": URindex, "GDPyoy": GDPyoy, "LendingRate": LendingRate, "target": target2} for_model = pd.DataFrame(for_model) lag_order = select_order(data = for_model, deterministic = 'co', maxlags = 8) print(lag_order) rank_test = select_coint_rank(for_model, 0, 8, method="trace", signif=0.05) ###maxeig gives the same result print(rank_test.rank) model = VECM(for_model, deterministic = 'ci', k_ar_diff = 8, coint_rank = 3) res = model.fit() print(res.summary()) granger_results = res.test_granger_causality(caused="target", signif=0.05) print(granger_results.summary()) norm_test = res.test_normality() 102 print(norm_test.summary()) fit = res.fittedvalues.T[5] r2 = r2_score(target[9:-6],fit[:-6]) adj_r2 = 1 - ( 1 - r2)*80/75 print(r2) print(adj_r2) pred = ppredict(self = res, steps = 6).T[5] result = sca_target2.inverse_transform(np.array(target2[:-6].tolist()+ pred.tolist()).reshape(-1,1)).reshape(1,-1)[0] plt.plot(date_, target_2, label = 'average', color = 'purple') plt.plot(date_[-7:], result[-7:], label = 'forecast', color = 'pink') plt.legend() plt.xticks(fontsize=7, rotation=90) plt.show()