В платформе 1С:Предприятие присутствует специализированный встроенный механизм интеллектуального анализа данных (Data Mining). Разберем, как именно устроена внутренняя алгоритмическая база этого механизма, какие математические модели заложены разработчиками платформы, а также посмотрим на практический пример программного построения дерева решений.
Механизм представлен объектом платформы АнализДанных. Все вычисления производятся закрытым ядром платформы на C++, поэтому прямой доступ к исходному коду функций отсутствует. Однако в основе лежат классические алгоритмы интеллектуального анализа данных:
АнализДанныхДеревоРешений): построение основано на алгоритмах рекурсивного бинарного разбиения пространства признаков (аналоги подходов CART и C4.5). Система перебирает все возможные варианты разделения по числовым порогам и дискретным значениям, стремясь максимизировать однородность дочерних узлов и минимизировать ошибки классификации. При включении отсечения ветвей (свойство ТипУпрощенияДереваРешений.Упрощать) платформа задействует алгоритм пессимистического отсечения (Pessimistic Error Pruning), вводя штрафные коэффициенты за избыточную сложность узлов и сворачивая ветви с низкой статистической значимостью.АнализДанныхКластеризация): механизм поддерживает как метод k-средних (КСредних), итеративно пересчитывающий центроиды групп, так и агломеративные иерархические алгоритмы (БлижняяСвязь, ДальняяСвязь, ЦентрТяжести). Для вычисления расстояний между точками доступны метрики Евклида, квадрат расстояния Евклида, манхэттенская метрика и расстояние Чебышёва.МодельПрогноза): объект модели прогноза не выполняет отдельного адаптивного обучения временных рядов (таких как ARIMA). Это модуль инференса: для дерева решений входящая строка классифицируется проходом от корня к листу, для кластеризации — рассчитывается минимальное расстояние до известного центроида, а для ассоциаций — сопоставляются условия левой части правила.Рассмотрим, как инициализировать анализ данных программно и вывести результат в табличный документ на управляемой форме. Загрузим тестовый набор данных в объект ТаблицаЗначений, передадим его в АнализДанных и скомпонуем отчет с помощью объекта ПостроительОтчетаАнализаДанных.
Посмотрим на программную реализацию серверной и клиентской процедур:
&НаСервереБезКонтекста
Процедура ДеревоРешенийНаСервере(ТабличныйДокументРезультат)
// Формируем обучающую выборку данных
ТаблицаДанных = Новый ТаблицаЗначений;
ТаблицаДанных.Колонки.Добавить("СвободноМест", Новый ОписаниеТипов("Число"));
ТаблицаДанных.Колонки.Добавить("Номер", Новый ОписаниеТипов("Строка"));
СтрокаДанных = ТаблицаДанных.Добавить();
СтрокаДанных.Номер = "к101";
СтрокаДанных.СвободноМест = 1;
СтрокаДанных = ТаблицаДанных.Добавить();
СтрокаДанных.Номер = "к102";
СтрокаДанных.СвободноМест = 2;
СтрокаДанных = ТаблицаДанных.Добавить();
СтрокаДанных.Номер = "к203";
СтрокаДанных.СвободноМест = 0;
СтрокаДанных = ТаблицаДанных.Добавить();
СтрокаДанных.Номер = "к204";
СтрокаДанных.СвободноМест = 2;
СтрокаДанных = ТаблицаДанных.Добавить();
СтрокаДанных.Номер = "к205";
СтрокаДанных.СвободноМест = 0;
СтрокаДанных = ТаблицаДанных.Добавить();
СтрокаДанных.Номер = "к301";
СтрокаДанных.СвободноМест = 2;
// Инициализируем и настраиваем объект анализа
Анализ = Новый АнализДанных;
Анализ.ИсточникДанных = ТаблицаДанных;
Анализ.ТипАнализа = Тип("АнализДанныхДеревоРешений");
// Выполняем построение дерева
РезультатАнализа = Анализ.Выполнить();
// Формируем графическое представление результата
Построитель = Новый ПостроительОтчетаАнализаДанных;
Построитель.ТипАнализа = Тип("АнализДанныхДеревоРешений");
Построитель.Вывести(РезультатАнализа, ТабличныйДокументРезультат);
КонецПроцедуры
&НаКлиенте
Процедура ДеревоРешений(Команда)
ТабличныйДокументВывода = Новый ТабличныйДокумент;
ДеревоРешенийНаСервере(ТабличныйДокументВывода);
ТабличныйДокументВывода.Показать();
КонецПроцедуры
Проанализируем технические нюансы, с которыми сталкивается разработчик при использовании встроенного Data Mining в реальных учетных системах:
Анализ.Выполнить() все анализируемые данные должны быть предварительно считаны в память рабочего процесса сервера (в виде ТаблицаЗначений или РезультатЗапроса). На масштабных объемах в сотни тысяч строк это вызывает чрезмерное потребление памяти RAM.Null или битые ссылки. Перед подачей данных выборку необходимо тщательно валидировать.HTTPСоединение.