Интеллектуальный пакет 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!