Как устроен встроенный механизм анализа данных и прогнозирования в 1С и как его использовать?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

В платформе 1С:Предприятие присутствует специализированный встроенный механизм интеллектуального анализа данных (Data Mining). Разберем, как именно устроена внутренняя алгоритмическая база этого механизма, какие математические модели заложены разработчиками платформы, а также посмотрим на практический пример программного построения дерева решений.

Математический аппарат и алгоритмы встроенного анализа данных

Механизм представлен объектом платформы АнализДанных. Все вычисления производятся закрытым ядром платформы на C++, поэтому прямой доступ к исходному коду функций отсутствует. Однако в основе лежат классические алгоритмы интеллектуального анализа данных:

  1. Дерево решений (АнализДанныхДеревоРешений): построение основано на алгоритмах рекурсивного бинарного разбиения пространства признаков (аналоги подходов CART и C4.5). Система перебирает все возможные варианты разделения по числовым порогам и дискретным значениям, стремясь максимизировать однородность дочерних узлов и минимизировать ошибки классификации. При включении отсечения ветвей (свойство ТипУпрощенияДереваРешений.Упрощать) платформа задействует алгоритм пессимистического отсечения (Pessimistic Error Pruning), вводя штрафные коэффициенты за избыточную сложность узлов и сворачивая ветви с низкой статистической значимостью.
  2. Кластерный анализ (АнализДанныхКластеризация): механизм поддерживает как метод k-средних (КСредних), итеративно пересчитывающий центроиды групп, так и агломеративные иерархические алгоритмы (БлижняяСвязь, ДальняяСвязь, ЦентрТяжести). Для вычисления расстояний между точками доступны метрики Евклида, квадрат расстояния Евклида, манхэттенская метрика и расстояние Чебышёва.
  3. Поиск ассоциаций и последовательностей: базируется на алгоритме Apriori. Сначала выявляются устойчивые наборы элементов, часто встречающиеся вместе в рамках установленного порога поддержки, после чего формируются правила «если — то» с фильтрацией по достоверности и значимости.
  4. Механизм прогнозирования (МодельПрогноза): объект модели прогноза не выполняет отдельного адаптивного обучения временных рядов (таких как ARIMA). Это модуль инференса: для дерева решений входящая строка классифицируется проходом от корня к листу, для кластеризации — рассчитывается минимальное расстояние до известного центроида, а для ассоциаций — сопоставляются условия левой части правила.

Практический пример: построение дерева решений на управляемых формах

Рассмотрим, как инициализировать анализ данных программно и вывести результат в табличный документ на управляемой форме. Загрузим тестовый набор данных в объект ТаблицаЗначений, передадим его в АнализДанных и скомпонуем отчет с помощью объекта ПостроительОтчетаАнализаДанных.

Посмотрим на программную реализацию серверной и клиентской процедур:


&НаСервереБезКонтекста 
Процедура ДеревоРешенийНаСервере(ТабличныйДокументРезультат) 

    // Формируем обучающую выборку данных
    ТаблицаДанных = Новый ТаблицаЗначений; 
    ТаблицаДанных.Колонки.Добавить("СвободноМест", Новый ОписаниеТипов("Число")); 
    ТаблицаДанных.Колонки.Добавить("Номер", Новый ОписаниеТипов("Строка")); 

    СтрокаДанных = ТаблицаДанных.Добавить();
    СтрокаДанных.Номер = "к101";
    СтрокаДанных.СвободноМест = 1; 

    СтрокаДанных = ТаблицаДанных.Добавить();
    СтрокаДанных.Номер = "к102";
    СтрокаДанных.СвободноМест = 2; 

    СтрокаДанных = ТаблицаДанных.Добавить();
    СтрокаДанных.Номер = "к203";
    СтрокаДанных.СвободноМест = 0; 

    СтрокаДанных = ТаблицаДанных.Добавить();
    СтрокаДанных.Номер = "к204";
    СтрокаДанных.СвободноМест = 2; 

    СтрокаДанных = ТаблицаДанных.Добавить();
    СтрокаДанных.Номер = "к205";
    СтрокаДанных.СвободноМест = 0; 

    СтрокаДанных = ТаблицаДанных.Добавить();
    СтрокаДанных.Номер = "к301";
    СтрокаДанных.СвободноМест = 2; 

    // Инициализируем и настраиваем объект анализа
    Анализ = Новый АнализДанных; 
    Анализ.ИсточникДанных = ТаблицаДанных; 
    Анализ.ТипАнализа = Тип("АнализДанныхДеревоРешений"); 

    // Выполняем построение дерева
    РезультатАнализа = Анализ.Выполнить(); 

    // Формируем графическое представление результата
    Построитель = Новый ПостроительОтчетаАнализаДанных; 
    Построитель.ТипАнализа = Тип("АнализДанныхДеревоРешений"); 
    Построитель.Вывести(РезультатАнализа, ТабличныйДокументРезультат); 

КонецПроцедуры 

&НаКлиенте 
Процедура ДеревоРешений(Команда) 

    ТабличныйДокументВывода = Новый ТабличныйДокумент; 
    ДеревоРешенийНаСервере(ТабличныйДокументВывода); 
    ТабличныйДокументВывода.Показать(); 

КонецПроцедуры

Ограничения механизма и практические рекомендации

Проанализируем технические нюансы, с которыми сталкивается разработчик при использовании встроенного Data Mining в реальных учетных системах:

  1. Нагрузка на оперативную память: для выполнения методов Анализ.Выполнить() все анализируемые данные должны быть предварительно считаны в память рабочего процесса сервера (в виде ТаблицаЗначений или РезультатЗапроса). На масштабных объемах в сотни тысяч строк это вызывает чрезмерное потребление памяти RAM.
  2. Синхронное исполнение: анализ работает в один поток в рамках текущего серверного вызова, что способно приводить к тайм-аутам клиентских соединений при сложных выборках. Выполнять такие расчеты рекомендуется исключительно в фоновых заданиях.
  3. Чувствительность к чистоте данных: встроенный алгоритм требует строгой типизации колонок и не умеет самостоятельно обрабатывать значения Null или битые ссылки. Перед подачей данных выборку необходимо тщательно валидировать.
  4. Альтернативные подходы: для стандартных прикладных задач (ABC/XYZ-классификация, расчет скользящего тренда) эффективнее использовать возможности языка запросов 1С. Если же предприятию требуется сложное машинное обучение (градиентный бустинг, прогнозирование рядов на базе нейросетей), оптимальным решением является интеграция со сторонними сервисами на Python через HTTPСоединение.
← На главную