01 - Вступ до прогнозування

Прогнозування часових рядів

Ігор Мірошниченко

КНЕУ::ІІТЕ

оновлено: 2022-09-02

Про мене

  • Мірошниченко Ігор Вікторович
  • кандидат економічних наук
  • доцент кафедри математичного моделювання і статистики КНЕУ
  • викладач Міжнародного інституту бізнесу (MBA)

ihor.miroshnychenko@kneu.ua

aranaur.rbind.io

@aranaur

@ihormiroshnychenko

Data Mirosh

Що можна прогнозувати?

Прогнозувати складно

Прогнозувати складно

Що можна прогнозувати?

Що можна прогнозувати?

Що можна прогнозувати?

Що можна прогнозувати?

Що можна прогнозувати?

Що можна прогнозувати?

Що можна прогнозувати?

Головні питання щодо складності?

  • Як визначтит “простоту” прогнозування?

  • Що впливає на простоту/складність прогнозування?

Фактори, що впливають на якість прогнозу

Щось легше спрогнозувати, якщо:

  1. Ми добре розуміємо фактори, які цьому сприяють;

  2. Є багато даних;

  3. Майбутнє чимось схоже на минуле

  4. Прогнози не можуть вплинути на те, що ми намагаємось передбачити.

Дані часових рядів

Найпростіші приклади

  • Річний прибуток Google

  • Щоквартальне виробництво пива

  • Щомісячні опади

  • Щотижневі роздрібні продажі

  • Щоденні ціни акцій IBM

  • Погодинний попит на електроенергію

  • Прогноз навантаження на автостради

  • Дані про транзакції за певний час

Щоквартальне виробництво пива

Щоквартальне виробництво пива

Приклади досліджень

Приклад 1. Компанія з виробництва паперового посуду

Проблема: Хочемо будувати прогнозии для сотень найменувань. Часові ряди різні: стаціонарні, трендові, сезонні. Наразі є готовий софт з прогнозування, але результати виглядають незадовільними. Необхідно провести аналітику та визначити слабкі місця.

Додаткова інформація:

  • Програма, написана на COBOL, обмежує числові розрахунки. Неможливо здійснити оптимізацію.

  • Їх програміст має невеликий досвід чисельних обчислень.

  • Вони не наймають статистиків/аналітиків/дата-сайнтистів і хочуть, щоб програма автоматично створювала прогнози.

Приклад 1. Компанія з виробництва паперового посуду

Методи, що використовуються в даний час:

  • середнє за 12 місяців

  • середнє за 6 місяців

  • лінійна регресія за останні 12 місяців

  • лінійна регресія за останні 6 місяців

  • середня зміна між значеннями минулого та цього року

  • середня зміна між значеннями за 6 місяців

Приклад 2. Схема фармацевтичних переваг (PBS)

Це програма Уряд Австралії що субсидує ліки за рецептом для громадян Австралії та постійних мешканців, а також іноземних відвідувачів, на яких поширюється угода про взаємне медичне обслуговування.

  • Багато ліків, куплених в аптеках, субсидуються, щоб забезпечити більш справедливий доступ до сучасних ліків.

  • Витрати для уряду визначаються кількістю та видами придбаних ліків. В даний час майже 1 % ВВП.

  • Загальна вартість кошторису формується на основі прогнозів вживання ліків

Приклад 2. Схема фармацевтичних переваг (PBS)

  • У 2001 році: бюджет на $ 4,5 млрд., Прогноз на суму $ 800 млн.

  • Тисячі продуктів. Сезонний попит.

  • Прихований маркетингу, нестабільність продукції, неконтрольовані витрати.

  • Хоча щомісячні дані доступні за останні 10 років, дані узагальнюються до річних значень, і лише перші три роки використовуються для оцінки прогнозів.

  • Усі прогнози виконуються за допомогою функції ПРЕДСКАЗ у MS-Excel!

Приклад 3. Авіалінії

Приклад 3. Авіалінії

Проблема: як спрогнозувати пасажиропотік на основних маршрутах?

Додаткова інформація: * Вони можуть надавати велику кількість даних про попередні маршрути.

  • На рух впливають шкільні канікули, спеціальні події, рекламні кампанії, поведінка конкурентів тощо.

  • У них досвідчена команда людей, які здатні робити більшість обчислень.

Основи статистичного прогнозування

Прості прогнози

Довірчі інтервали

Що слід згадати?

  • Що прогнозуємо: випадкова величина, yt.

  • Розподіл прогнозу: якщо \({\cal T}\) - це всі спостереження, то \(y\_{t} \| {\cal T}\) означає “випадкову змінну yt, враховуючи те, що ми знаємо в \({\cal T}\).

  • “Точковий прогноз” - це середнє значення (або медіана) \(y\_{t}\|{\cal T}\)

  • “Дисперсія прогнозу” - \(\text{var}[y\_{t}\|{\cal T}]\)

  • Інтервал прогнозування або “інтервальний прогноз” - це діапазон значень yt з високою ймовірністю.

  • З часовими рядами yt|t − 1 = yt|{y1, y2, …, yt − 1}.

  • T + h|T = E[yT + h|y1,…,yT] ( h -кроковий прогноз з урахуванням усіх спостережень до часу T).

R та RStudio

Мова програмування та IDE

  • Мова програмування

  • RStudio IDE

Встановлення софту та реєстрація

  1. Завантажити R.

  2. Завантажити RStudio.

Якщо виникли питання на будь-якому кроці, звертайтесь.

Також рекомендую ознайомитись з інструкціями до Дженні Брайана - Happy Git and GitHub for the useR

Деякі доповнення для ОС

Я докладно розповім про додаткові вимоги до програмного забезпечення, коли виникне така потреба. Однак, щоб допомогти усунути деякі проблеми з встановленням програмного забезпечення, виконайте також наступне (залежно від вашої ОС):

  • Windows: Встановіть Rtools.
  • Mac: Рекомендую встановити (не обов’язково) Homebrew.
  • Linux: Все ок.

Чому R та RStudio?

Чому R та RStudio? (прод.)

Data science positivism

  • Поряд з Python, R став де-факто мовою для науки про дані.
  • З відкритим кодом (безкоштовно!) із великою базою користувачів, що охоплює наукові кола та промисловість.
    • Компанії які використовують R: Amazon, Google, Meta, Twitter, Uber, Deloitte, Glovo…

Місток до прикладних сфер та інших інструментів

  • Уже має підтримку всієї статистики та економетрики та дивовижно адаптується як «клей» до інших мов програмування та API.
  • RStudio IDE та її екосистема забезпечують бездоганну інтеграцію.

Залежність

  • Це мова яку я люблю та популяризую^[Але вивчення кількох мов є гарною ідеєю.].

Деякі основи R

  1. Усе є об’єктом.

  2. Усе має ім’я

  3. Ви все робите за допомогою функцій.

  4. Функції поставляються у попередньо створених пакетах, хоча ви можете — і повинні — також писати власні функції.

R приклад коду (лінійна регресія)

fit <- lm(mpg ~ wt, data = mtcars)
summary(fit)

Call:
lm(formula = mpg ~ wt, data = mtcars)

Residuals:
    Min      1Q  Median      3Q     Max 
-4.5432 -2.3647 -0.1252  1.4096  6.8727 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  37.2851     1.8776  19.858  < 2e-16 ***
wt           -5.3445     0.5591  -9.559 1.29e-10 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 3.046 on 30 degrees of freedom
Multiple R-squared:  0.7528,    Adjusted R-squared:  0.7446 
F-statistic: 91.38 on 1 and 30 DF,  p-value: 1.294e-10

Базова візуалізація R

par(mar = c(4, 4, 1, .1)) ## Це просто налаштування до відображення на слайді
plot(mtcars$wt, mtcars$mpg)
abline(fit, col = "red")

ggplot2

library(ggplot2)
ggplot(data = mtcars, aes(x = wt, y = mpg)) + 
  geom_smooth(method = "lm", col = "red") + 
  geom_point() 

ggplot2: Gapminder

Оскільки ми будемо будувати графік набору даних gapminder, корисно знати, що він містить панельні дані про тривалість життя, чисельність населення та ВВП на душу населення для 142 країн з 1950-х років.

library(gapminder)
gapminder
# A tibble: 1,704 x 6
   country     continent  year lifeExp      pop gdpPercap
   <fct>       <fct>     <int>   <dbl>    <int>     <dbl>
 1 Afghanistan Asia       1952    28.8  8425333      779.
 2 Afghanistan Asia       1957    30.3  9240934      821.
 3 Afghanistan Asia       1962    32.0 10267083      853.
 4 Afghanistan Asia       1967    34.0 11537966      836.
 5 Afghanistan Asia       1972    36.1 13079460      740.
 6 Afghanistan Asia       1977    38.4 14880372      786.
 7 Afghanistan Asia       1982    39.9 12881816      978.
 8 Afghanistan Asia       1987    40.8 13867957      852.
 9 Afghanistan Asia       1992    41.7 16317921      649.
10 Afghanistan Asia       1997    41.8 22227415      635.
# ... with 1,694 more rows

ggplot2: Gapminder

ggplot(data = gapminder, mapping = aes(x = gdpPercap, y = lifeExp)) + 
  geom_point()

ggplot2: Gapminder

ggplot(data = gapminder, aes(x = gdpPercap, y = lifeExp,
                             size = pop, col = continent)) + geom_point(alpha = 0.3)

ggplot2: Gapminder

ggplot(data = gapminder, aes(x = gdpPercap, y = lifeExp)) + 
  geom_point(aes(size = pop, col = continent), alpha = 0.3) +
  scale_color_brewer(name = "Continent", palette = "Set1") + ## Інша плітра кольорів
  scale_size(name = "Population", labels = scales::comma) + ## Інші позначки легенди
  scale_x_log10(labels = scales::dollar) + ## Логарифмування на осі х. Використання знаку долара.
  labs(x = "Log (GDP per capita)", y = "Life Expectancy") + ## Кращі підписи до осей
  theme_minimal() ## Мінімалистична (ч/б) тема рисунку

ggplot2: Gapminder

library(hrbrthemes)
ggplot(data = gapminder, aes(x = gdpPercap, y = lifeExp)) +
  geom_point(aes(size = pop, col = continent), alpha = 0.3) +
  scale_color_brewer(name = "Continent", palette = "Set1") +
  scale_size(name = "Population", labels = scales::comma) +
  scale_x_log10(labels = scales::dollar) + 
  theme_modern_rc() + 
  geom_point(aes(size = pop, col = continent), alpha = 0.2)

ggplot2: Gapminder

library(gganimate)
gapminder %>% 
  filter(continent != "Oceania") %>% 
  ggplot(aes(gdpPercap, lifeExp, size = pop, colour = country)) +
  geom_point(alpha = 0.7, show.legend = FALSE) +
  scale_colour_manual(values = country_colors) +
  scale_size(range = c(2, 12)) +
  scale_x_log10() +
  facet_wrap(~continent) +
  labs(title = 'Year: {frame_time}', x = 'Log (GDP per capita)', y = 'Life expectancy') +
  transition_time(year) +
  ease_aes('linear')

Дякую за увагу!