Інтелектуальний пакет PREDICTOR. Посібник користувача
Інтелектуальний пакет PREDICTOR
(версія для обчислювального кластера та Grid-мережі)
Посібник користувача
Призначення пакету
Призначення бібліотеки Predictor - статистичне прогнозування в бізнес-розрахунках, наприклад, з метою аналізу обсягів передбачуваних продажів, вибору асортименту товарів та послуг за спрогнозованими цінами, задоволення потреб у чисельності персоналу.
Основні напрямки використання пакету - Finance (фінанси); Planning (планування); Pricing (ціноутворення); Marketing (маркетинг); Production (виробництво); Operations Stock (фонди, склади); Demand (попит на товари і послуги); Personal (потреба в кадрах).
Бібліотека призначена для роботи на обчислювальному кластері з використанням MPI або в грід-мережі. Бібліотеки Predictor дозволяють користувачеві використовувати готові програми з пакету для швидкого прогнозування або створення свого додатку, який буде використовувати функції бібліотеки Predictor.
У Predictor реалізовані 26 методів прогнозування, серед яких назвемо прості і лінійні ковзаючі середні; згладжування просте, адаптивне, лінійне за Холтом, лінійне за Брауном, квадратичне за Брауном, адитивне сезонне за Вінтерзом, сезонне за Холтом-Вінтерзом, сезонне за Брауном-Харріссоном; регресія: авторегресія, S-криві, крива Ґомпертця, логістична крива, популярні і визначені користувачем тренди; методологія Бокса-Дженкінса, ARARMA, ARIMA-моделі з сезонністю в AR і MA, узагальнена адаптивна фільтрація GAF; множинна регресія; нейронні мережі.
Підтримується динамічне прогнозування по мірі надходження даних, управління сценаріями і повторне їх використання. Поряд з документацією, в поставку пакету входить багато тестових прикладів.
Ключовий момент - максимальна рекомендаційна здатність пакету Predictor стосовно надійності прогнозів.
За визначенням неможливо апріорі оцінити точність прогнозів, тому в спеціальному режимі Тест, припускаючи невідомими останні значення вхідної послідовності даних, робиться спроба їх спрогнозувати обраним методом, а потім отримані прогнози порівнюються з реальними значеннями.
Якщо вони сильно відрізняються, недоцільно будувати прогноз цим методом з вказаними параметрами. В іншому випадку прогнозування триває в режимі Прогноз з використанням всіх значень вихідних даних, тому результати відрізняються від режиму Тест і виходять більш точними.
Робота з пакетом
Автоматичний режим побудови прогнозу
Перш ніж почати будувати прогноз, необхідно створити паспорт задачі для програми Predictor.
Паспорт задачі описується в текстовому файлі і має наступну структуру.
Вміст файлу Task.ini:
[PREDICTOR]
[Files] - секція файли
FileInput=y_in.txt; - файл з вхідними даними
FileOutput=y_out.txt; - файл з результатом побудови прогнозу
FileRes=y_res.txt; - файл з результатом підбору методів прогнозування
[MakeForecast] - секція параметри прогнозування
SeasonNum=1; - кількість сезонів
HorizontNum=3; - глибина (горизонт) прогнозу
NumBestRes=4; - кількість методів з кращим результатом прогнозу
Method1=mtdSimpleAR; - якщо параметр відсутній – ведеться пошук кращого методу, інакше будується прогноз тільки вказаним методом (назви методів описані нижче)
//Metod name: mtdNaive1, mtdNaive2, mtdSingleMA, mtdLinearMA, mtdAdaptiveES, mtdESMA, mtdHolt, mtdHoltWinters, mtdAdditiveWinters, mtdBrown1, mtdBrown2, mtdSimpleAR, mtdSimpleARIMA, mtdSeasonalARIMA, mtdGAF, mtdClassicalDecomposition, mtdAdditiveDecomposition, mtdCensus2,mtdHarrison_HS, mtdSeasonIndices, mtdLogisticT, mtdGompertzT, mtdRegression
Після заповнення файлу задачі запустити прогнозування можна таким способом:
Просто ім'я програми predictor (у цьому випадку передбачається, що паспорт задачі зберігається в директорії, звідки йде запуск програми і називається task.ini) або predictor zadanie.ini (паспорт задачі у файлі zadanie.ini).
Стосовно до СКІТ3, запуск прогнозу виглядає наступним чином:
sbatch -p scit3 -J predictor -n 4 /opt/slurm/bin/run.ompi predictor zadanie.ini
Побудова прогнозу в грід
Паспорт задачі для грід-мережі з налаштованим середовищем виконання PREDICTOR виглядає так:
&(executable="run_predictor")
(arguments="zadanie.ini")
(inputfiles=
("zadanie.ini" "zadanie.ini")
("y_in.txt" "y_in.txt")
)
(outputfiles=
("y_out.txt" "y_out.txt")
("y_res.txt" "y_res.txt")
)
(jobname=prognoz)
(stdout=stdout.txt)
(stderr=stderr.txt)
(cpuTime="240")
(count=4)
(runTimeEnvironment="PREDICTOR")
В середовищі виконання PREDICTOR програма працює в режимі розпаралелювання.
Для побудови прогнозу, з використанням грід-вузлів, на яких немає середовища виконання PREDICTOR, необхідно використовувати задачу:
&(executable="./predictor")
(arguments="zadanie.ini")
(inputfiles=
("zadanie.ini" "zadanie.ini")
("y_in.txt" "y_in.txt")
("predictor" "gsiftp://nordug.bitp.kiev.ua/predictor/predictor")
)
(outputfiles=
("y_out.txt" "y_out.txt")
("y_res.txt" "y_res.txt")
)
(jobname=prognoz)
(stdout=stdout.txt)
(stderr=stderr.txt)
В представленій задачі прибраний атрибут runTimeEnvironment та доданий шлях до програми ("predictor" "gsiftp://nordug.bitp.kiev.ua/predictor/predictor").
В цьому випадку програма виконується без режиму розпаралелювання.
Використання функцій бібліотеки
Функції бібліотеки можна використовувати при розробці своїх програм, які будуть виконуватися на обчислювальному кластері або в грід-мережі.
Функції написані на мові С++ для комп'ютерів MIMD-архітектури та систем паралельного програмування MPI.
Для того, щоб будувати прогноз на СКІТ-3 з використанням функцій і класів з бібліотеки libpredictor необхідно:
1) написати main-програму для середовища паралельного програмування MPI із зверненням на необхідні функції і класи бібліотеки libpredictor. Для компілятора необхідно вказати додаткові параметри:
-I/opt/predictor/include -L/opt/predictor/lib -lpredictor;
2) запустити main-програму на виконання на СКИТ-3 на необхідній кількості процесорів.
Приклад програми:
#include "predictor.h" //Підключення заголовочного файлу
int main(int argc, char* argv[])
{
CPredictor pr1; //Створення екземпляру об'єкту типу CPredictor
res=ReadTask(pr1); //Читання параметрів задачі
pr1.loadY(); //Завантажити ряд даних
pr1.prepData(); //Перевірити та підготувати дані для обробки
pr1.fOutOpen(); //Відкрити файли для результату
MPI_Init(&argc, &argv); //Початок паралельної частини
pr1.automakeTest(); //Пошук кращих методів
if(g_nNode==0)
{
pr1.saveRes(); //Збереження списку обраних методів та їх параметрів
pr1.automakePredict(); //Автоматична побудова прогнозу кращими методами
}
else
{
pr1.make(); //Побудова прогнозу одним методом
pr1.saveY();//Збереження результату
}
MPI_Finalize(); //Закінчення паралельної частини
pr1.fOutClose(); //Закриття результуючих файлів
return(0);
}
Опис основних функцій інтерфейсного класу CPredictor:
class CPredictor:
Змінні-члени класу:
FileInput, Ім'я файлу з вхідними даними
FileOutput, Ім'я файлу для результату прогнозування
FileTestY, Ім'я файлу для проміжного результату (якщо необхідно)
FileRes; Ім'я файлу для списку кращих методів та їх інтегральної оцінки
SeasonNum, Кількість сезонів у вхідному ряду даних
HorizontNum; Глибина побудови прогнозу
NumBestRes; Кількість визначення кращих методів
Функції-члени класу:
loadY(); Завантажити новий ряд даних
prepData(); Перевірити-підготувати дані для обробки
automakeTest(); Виконати пошук кращих методів для ряду даних
automakePredict(); Виконати прогнозування кращими методами
saveY(); Зберегти результат прогнозу
saveRes(); Зберегти список кращих методів та їх інтегральні оцінки
…
Детально основні функції бібліотеки описані в документації.
Приклад файлів даних
Вхідні дані
0
1
4
9
16
25
36
49
64
81
…
Результат
Resultat
NAME IE
Brown2_ES 75.994693
AdaptiveES 65.663391
SimpleMA 63.745591
ESMA 63.363777
Прогноз
mtdBrown2
0.000000
1.000000
-16.811633
2.008173
13.578748
24.136541
35.683960
48.881854
63.955133
80.982779
99.993348
120.997423
143.999001
168.999613
195.999851
224.999942
255.999978
...
mtdAdaptiveES
0.000000
0.000000
0.000386
0.001929
0.005400
0.011571
0.021212
0.035092
0.053983
0.078654
0.109873
0.148411
121.000000
144.000000
169.000000
Лог файл
Predictor.log
res=0,
Naive1
residuals are NOT:
1) autocorrelated insignificantly
2) stochastic
3) normally distributed
4) equal to zero in mean
…
Make Forecast better methods!
NumMetod#=1, of 4,
mtdBrown2
MakeForecast res=0, residuals are NOT:
1) autocorrelated insignificantly
2) stochastic
3) normally distributed
4) equal to zero in mean
…
NumMetod#=4, of 4,
mtdESMA
MakeForecast res=0, residuals are NOT:
1) autocorrelated insignificantly
2) stochastic
3) normally distributed
4) equal to zero in mean
Make Forecast End!