Общая постановка проблемы
В современном мире, в условиях быстро изменяющихся рынков, невозможно достичь ощутимых конкурентных преимуществ без использования современных информационных технологий. Наиболее передовыми в отношении использования современных информационных систем являются предприятия сферы бизнеса, в первую очередь крупные торговые структуры, в том числе и аптечные холдинги.
Фармацевтический сектор экономики является важным элементом, как в социальном, так и в экономическом плане. Существенными особенностями реализации лекарственных средств является многообразие ассортимента и высокая динамика его изменения, как в номенклатуре, так в и объемах и ценах. Все это влечет за собой требования в постоянном мониторинге реализации лекарственных средств, соответствующем анализе, использовании различных методов моделирования различных ситуаций и прогнозирования, поддержки принятия определенных решений в объемах в ценовой политике по закупке лекарственных средств аптечными холдингами и отдельными аптеками [1].
Важнейшей инновацией в этой области является способность ключевых бизнес-процессов к цифровизации, которая позволяет ускорить выполнение бизнес-процессов в закупочных процессах, обеспечивая большую достоверность и прозрачность информации для принятия обоснованных решений [2].
Закупочная деятельность - одна из основных коммерческих функций любого торгового предприятия, в том числе и аптечной сети. Правильно организованная и четко выстроенная закупочная стратегия не только способствует удовлетворению потребительского спроса, но и позволяет уменьшить риск, связанный с плохим сбытом товаров.
В настоящее время организация процесса управления запасами имеет огромное значение в фармацевтической отрасли, так как она направлена на поддержание необходимого и достаточного объема запасов для выполнения объема продаж, а также прямо влияет на безопасность людей [3].
Анализ и принятие решений менеджерами привычными методами затрудняется из-за огромного объема информации и большого количества характеристик для анализа. Принятие решений становится чрезвычайно ресурс-затратным процессом, снижается точность, повышается время, необходимое для решения основных задач, в том числе и по планированию закупок. Среди популярных рыночных предложений в настоящее время на рынке программного обеспечения для аптек представлено несколько видов продуктов: «Аналит-аптека» («Аналит»), «ФармаНет» («Фарманет»), СПО «еФарма», «АИС Аптекарь», «АИС Парацельс», «АИС 1С: Аптека».
Поскольку ни одно из выше описанных программных решений не обеспечивает требования заказчика по функциональности СППР, необходимой и актуальной становится задача разработки интеллектуальной системы поддержки принятия решений для закупочной деятельности аптеки, построенной на применении целого ряда информационных технологий.
Постановка задачи исследований
В более раннем исследовании по этой теме при помощи имитационных моделей было выполнено моделирование в аспекте динамики изменения финансовых показателей аптеки в зависимости от различных стратегий организации закупок и выбрана оптимальная стратегия, которая и была реализована в информационной системе [4].
На сегодняшний день одним из ведущих направлений в сфере информационных технологий являются интеллектуальные информационные системы. Эти системы позволяют решать неформализованные задачи, возникающие в ходе развития бизнеса. Закупочная функция также эволюционирует под воздействием развития цифровых технологий, что означает внедрение принципиально новых средств анализа и обработки данных в систему управления предприятием.
Постоянной функцией менеджера по закупкам аптеки является проведение анализа закупочных цен поставщиков и определение «оптимальной» цены, наиболее подходящей в данный момент для закупки товара. Возникает необходимость прогнозирования данных (цен) по историческому массиву цен из прайс-листов.
Реализация поставленной выше задачи предусматривает использование целого комплекса информационных технологий, применения различных математических методов и моделей, в том числе статистических и интеллектуальных. При этом возможно решение одной и той же задачи различными методами, что усложняет реализацию системы.
В работе [5] описано прогнозирование закупочных цен лекарств в условиях аптечной сети экстраполяционными методами прогнозирования временных рядов по типу традиционного статического подхода, при этом эксперименты показали достаточно высокую точность прогнозирования.
Представителями моделей искусственного интеллекта являются прогнозные модели на основе нейронных сетей. Использование данных моделей позволяет ассоциировать исследуемый показатель (цена на лекарственное средство) с набором различных факторов (не только исторических значений) и экстраполировать его значение на перспективу [6]. При этом задача прогнозирования закупочной цены, спроса и продаж лекарств обладает теми особенностями, которые делают целесообразным использование именно интеллектуальных нейросетевых методов моделирования и, в частности, с топологией «внутренний учитель»: небольшой объём данных; присутствуют пропуски данных; возможны искажения данных («шум»); необходима адаптация модели при поступлении новых данных; наличие большого количества позиций номенклатуры товаров[7,8].
Основная алгоритмическая часть ИС построена на прогнозировании «допустимой» закупочной цены среди цен разных производителей и поставщиков искусственной нейронной сетью, которую по имеющимся результатам оценки эффективности закупок станет возможно переобучать, чтобы картина соответствовала действительности в большей степени.
Искусственная нейронная сеть в процессе своей работы будет делать краткосрочный дневной либо недельный прогноз цен для формирования плана закупок товаров, на основании которых одна из подсистем должна проанализировать остатки на складе и, в случае возможной нехватки, вывести информацию, каких и сколько товаров необходимо закупить.
Анализ литературных источников показал, что алгоритмам и методам предобработки данных, а также формированию датасетов, уделено чрезвычайно мало внимания разработчиками нейронных сетей. Модели и алгоритмы машинного обучения учеными-практиками описаны с точки зрения их применения на чистых, уже подготовленных данных [9].
Предварительная обработка данных – это процесс анализа данных, который включает преобразование необработанной информации в удобный для анализа формат и дальнейшее их использование. Задачи предварительной подготовки данных в первую очередь связаны с обработкой прайс-листов цен лекарств.
В результате исследований необходимо решить следующие проблемы: обеспечить одинаковый интервал между рядами наблюдений; обеспечить количество пробелов данных на уровне не более 20%; выполнить заполнение промежутков данными; устранить пиковые мгновенные значения; устранить «шум».
Обзор основных методов и технологий
Временной ряд – последовательность значений, которые протекают и измеряются в обозначенном промежутке времени. Временной ряд отличается от обычной выборки данных тем, что он учитывает не только значения, но и время, в течение которого они были измерены [10].
При анализе, в общем случае, временной ряд предусматривает наличие четырех составляющих: Тренд (Tt), Сезонность (St), Цикличность (Ct), Случайные возмущения (Et). Тренд — это общая тенденция, сезонность, как следует из названия - влияния периодичности (день недели, время года и т.д.) и, наконец, шум — это случайные факторы. Циклическая компонента, по сравнению с сезонностью, имеет более длительный эффект и меняется от цикла к циклу. Поэтому, ее обычно объединяют с трендом. Обычно, выделяют три модели временного ряда:
- Аддитивная: Y[t]=T[t]+S[t]+E[t]
- Мультипликативная: Y[t]=T[t]*S[t]*E[t]
- Смешанная: Y[t]=T[t]*S[t]+E[t]
Построение этих моделей сводится к расчету тренда (T[t]), сезонности (S[t]) и случайных возмущений (E[t]) для каждого уровня ряда (Y[t]).
При выборе необходимой модели временного ряда смотрят на амплитуду колебаний сезонной составляющей. Если ее колебания относительно постоянны, то выбирают аддитивную модель. Если амплитуда сезонных колебаний возрастает или уменьшается, строят мультипликативную модель временного ряда, которая ставит уровни ряда в зависимость от значений сезонной компоненты.
Реальные данные часто являются непоследовательными, неполными и возможно недостающими в определенном поведении или тенденциях и могут содержать большое количество ошибок. Предварительная обработка данных – это проверенный метод решения проблем, связанных с обработкой необработанных данных. Она подготавливает данные для последующей обработки.
Преимущества предварительной обработки данных:
- Точность. При устранении отсутствующих и несогласованных значений данных, возникших по вине человека или компьютера, повышается точность вашего набора данных.
- Консистенция. В процессе предварительной обработки могут возникать дубликаты данных, которые необходимо исключить для обеспечения более согласованного анализ данных и получения надёжных результатов без искажений.
- Полнота данных. Предварительная обработка данных позволяет добавлять необходимые отсутствующие данные.
- Предварительная обработка данных обычно облегчает чтение, применение и интерпретацию информации, особенно когда используется автоматизированное программное обеспечение для машинного обучения [11].
Приведем процесс предварительной обработки данных при прогнозировании временного ряда нейросетевыми методами в виде схемы (рис. 1).

Целью первого шага является непосредственно получение данных, а также оценка полноты данных. Для этого надо оценить, достаточно ли количество имеющихся данных для решения задачи, насколько полно имеющиеся переменные описывают исследуемый процесс, и какие внешние факторы могут оказывать влияние на исследуемый процесс.
Сколько исторических данных следует использовать для тренировки модели? Необходимо начать с временных рядов, которые в несколько раз больше, чем временные интервалы прогноза, а затем проверить точность получаемого прогноза. Далее следует изменять длину истории и проводить тест повторно, чтобы определить необходимое количество данных.
На втором шаге желательно максимальным образом обеспечить полноту, корректность, непротиворечивость данных, структурированность, согласованность данных. Для этого необходимо использовать процедуры заполнения пропусков или восстановления данных, поиск невозможных значений и дубликатов, исправление форматов, сглаживание выбросов и устранение «шума».
Методов обработки пропусков числовых данных предостаточно, например, заполнение наиболее часто встречающимся значением или предопределенной константой, а также заполнение случайными значениями из выборки.
Интерполяция – это метод, который позволяет прогнозировать неизвестные значения между двумя известными значениями. Она может быть использована для заполнения пропусков в таблице данных, используя уже известные значения [12]. Методы сглаживания необходимы для удаления «шума» из временного ряда.
На третьем шаге выполняется приведение типов данных и кодирование номинативных переменных, нормализация данных, стандартизация данных, обогащение данных, оптимизация пространства признаков.
Задача процесса нормализации - улучшить качество работы алгоритмов за счёт приведения данных к нужному диапазону с помощью следующих методов: нормализация на максимум; нормализация на интервал; ранговая нормализация.
Задача стандартизации заключается в улучшении качеств работы алгоритмов за счёт приведения данных к стандартному нормальному распределению.
Нормализация и стандартизация существенно повышают эффективность метрических алгоритмов классификации: метода ближайшего соседа (k- Nearest Neighbors), метода k-средних (k-means), метода машин опорных векторов (Support Vector Machine).
После завершения всех алгоритмов предварительной обработки данных выполняется векторизация текстов, так как алгоритмы машинного обучения предназначены для работы с числовыми данными, и необходимо выполнить преобразование текста отзыва в числовой вектор признаков.
Весь процесс обработки данных, реализации и тестирования методов прогнозирования осуществлён в среде Google Colaboratory [13].
Для разработки методов прогнозирования и предварительной обработки данных были использованы следующие библиотеки языка Python:
- NumPy – библиотека Python, применяемая для математических вычислений: от базовых функций и до линейной алгебры [14].
- Pandas – библиотека Python, предназначенная для обработки и анализа структурированных данных. Такими данными называют информацию, которая получена в результате исследований и структурированную в виде таблиц. Для работы с такими массивами данных и создан Pandas [15].
- Matplotlib – библиотека Python, предназначенная для визуализации данных. В ней можно построить двумерные (плоские) и трехмерные графики [16].
- Scikit-learn (sklearn) – это один из наиболее часто используемых пакетов Python для Data Science и Machine Learning. Он содержит функции и алгоритмы для машинного обучения: классификации, прогнозирования или разбивки данных на группы [17].
- Keras –библиотека Python, применяемая для глубокого машинного обучения. Она даёт возможность быстрее создавать и настраивать модели – схемы, по которым распространяется и подсчитывается информация при обучении [18].
Результаты исследований
Данные, которые будут использоваться для прогнозирования цен (аналогично также продаж) взяты с источника Интернет и представляют собой датасет цен некоторой российской компании с 22.11.2011 по 30.12.23 в размере 2778 строк. Было принято решение взять его для обучения и тестирования рассмотренных методов и моделей, так как самым главным критерием является проверка работоспособности и точности разработанных алгоритмов. Отобрав данные, получаем в итоге набор данных со значениями цен и объёмов продаж одного лекарства. В результате подготовки набора данных для прогнозирования и моделирования, мы получили временной ряд в интервале от 22.11.2011 по 30.12.2022 со значениями цен и объёмов продаж по одному товару.
Временной ряд подготовленных данных за последний год можно разделить на четыре компоненты, представленные на рис. 2:
- уровень (level)– это среднее значение ряда;
- тренд (trend) – показывает, увеличивается или уменьшается значение со временем;
- сезонность (seasonal) – это краткосрочный повторяющийся цикл;
- шум (resid)– это случайное изменение, несвязанное с другими компонентами ряда [19].
Все эти составляющие можно разложить с помощью функции seasonal_decompose из модуля statsmodels в Python.


При получении реальных данных временных рядов мы сталкиваемся с тем, что они лишь изредка бывают в необходимом формате. Большая часть необработанных наборов данных слабо структурирована или содержит большое количество отсутствующих значений, что делает невозможным последующее обучение моделей.
Над набором данных была выполнена чистка значений дат и цен/объёмов продаж. Числа приведены к одинаковому виду, все даты приведены к одному формату с помощью функции to_datetime библиотеки Pandas в Python.
Пример:
Проанализировав данные, можно заметить, что в выборке присутствуют некоторые пропуски в датах по каким-либо причинам (множество пропущенных дат являются выходными днями или праздниками). Для более точного понимания тренда временного ряда и достижения хорошего результата прогнозирования необходимо заполнить пропущенные даты и значения для них.
Процесс заполнения пропущенных дат и достигнутый результат приведен на рисунке 3. Таким образом, недостающие значения цен/объёмов продаж были заполнены с помощью функции interpolate библиотеки pandas в Python. В результате преобразования размер выборки после заполнения увеличился до 4058 записей.
Очищенный график представлен на рис. 4.


При работе с рядами шум может затруднять анализ структуры ряда, соответственно можно использовать методы сглаживания ряда для его исключения, что позволит лучше рассмотреть структуру ряда. Сглаживание ряда – это представление тренда в определенной точке с помощью усредненного значения ряда, которое рассчитывается в окрестностях этой точки [20]. Результат сглаживания представлен на рис. 5.
Для сглаживания ряда использован один из выше представленных методов прогнозирования – метод экспоненциального сглаживания. Коэффициент сглаживания выбран равным 0,2.

Нормализация – это один из этапов предварительной обработки данных, который используется в машинном обучении. Она позволяет улучшить стабильность и скорость обучения, делая значения данных более сопоставимыми [21]. Для эффективного анализа и прогнозирования неоднородных изменений во времени на временных рядах может потребоваться приведение значений к определенному диапазону, например, от 0 до 1, путем масштабирования на основе минимальных и максимальных значений. Диапазон значений может быть различным для разных временных рядов, поэтому важно учитывать это при анализе.
Одним из методов нормализации является метод Min-Max нормализация, который позволяет привести данные к диапазону значений от 0 до 1 по следующей формуле:
где x – значение данных, xmin – минимальное значение во всем наборе данных, xmax – максимальное значение во всем наборе данных, xnorm – нормализованное значение.
Нормализация проведена с помощью объекта MinMaxScaler библиотеки Scikit-learn. Результат нормализации приведен на рис. 6.

Применение метода Min-Max нормализации к временным рядам позволяет привести данные к единому диапазону значений, что упрощает их анализ.
Задача прогнозирования закупочной цены обладает теми особенностями, которые делают целесообразным использование именно интеллектуальных нейросетевых методов моделирования и, в частности, небольшой размер набора данных; возможность адаптации модели при поступлении новых данных; наличие большого количества позиций номенклатуры.
В машинном обучении случайное разделение потока данных на тестовую и обучающую выборки считается нормой, так как существует независимость между одним наблюдением и другим. Однако, это утверждение не относится к временным рядам данных. Поэтому в данной задаче мы разделим сформированный датасет последовательно на 3 выборки:
- 90% данных будем использовать для обучения (train), итого 3643 записи;
- 10% для проверки (valid), итого 405 записей;
- данные за 10 последних дней будем использовать для тестирования (test), итого 10 записей.
Выводы
В статье обсуждены проблемы разработки аналитических подсистем закупок лекарств аптечной сети. Отмечена важность процесса предобработки данных для их последующего использования в качестве датасета задач машинного обучения.
В результате были реализованы такие задачи предварительной обработки данных, как, очистка данных, заполнение пропусков элементов ряда значениями, сглаживание временного ряда с целью устранения выбросов, нормализация переменных и получение набора данных для дальнейшего обучения и тестирования в машинных алгоритмах.
Литература
Статья поступила в редакцию 29.09.2023
Рекомендована к публикации доцентом Карабчевским В. В.