7 июн. 2013 г.

Механизм анализа данных и прогнозирования, вводная.

Помимо традиционных инструментов представления данных (отчеты, диаграммы, сводные таблицы) в 1С есть механизм анализа данных и прогнозирования. Этот механизм позволяет выявлять неявные закономерности в базе, используя различные методы обработки данных.

Вкратце о методах:
Общая статистика используется для сбора общих сведений, предназначена для предварительного исследования.
Дерево решений чаще всего применяется для выявления причинно-следственных связей, может использоваться для решения задач оптимизации деятельности и оценки рисков.
Поиск последовательностей позволяет определить часто возникающие цепочки событий. Например, проанализировав результаты продаж можно спрогнозировать вероятный спрос в будущем.
Поиск ассоциаций изначально был разработан для определения сочетаний товаров при продаже.
Кластеризация используется для выделения из множества объектов одного типа похожих подгрупп - кластеров. Переход на групповое управление этими сегментами значительно упрощает взаимодействие с ними, в отличие от взаимодействия с каждым элементом этой группы.

Набросаю небольшую обработку для УТ 11.1, демонстрирующую возможности механизмов анализа. Результаты будут выводить через построитель отчета анализа.


&НаСервере
Процедура СформироватьДанные()

 Результат.Очистить();
 Прогноз.Очистить();
 
 Запрос = Новый Запрос;
 Запрос.Текст = 
  "ВЫБРАТЬ
  | ВыручкаИСебестоимостьПродажОбороты.Регистратор,
  | ВыручкаИСебестоимостьПродажОбороты.Период,
  | ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаПоПартнерам.Партнер КАК Партнер,
  | ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаНоменклатуры.Номенклатура КАК Номенклатура,
  | ВыручкаИСебестоимостьПродажОбороты.СуммаВыручкиОборот КАК Сумма,
  | ВыручкаИСебестоимостьПродажОбороты.КоличествоОборот КАК Количество
  |ИЗ
  | РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(, , Регистратор, ) КАК ВыручкаИСебестоимостьПродажОбороты";

 РезультатЗапроса = Запрос.Выполнить();

 Аналитика = Новый ПостроительОтчетаАнализаДанных;
 
 Аналитика.ИсточникДанных = РезультатЗапроса;
 Аналитика.ТипАнализа = Тип(ТипАнализа);
 
 Если Тип(ТипАнализа) = Тип("АнализДанныхОбщаяСтатистика") Тогда
  Аналитика.НастройкаКолонок.Регистратор.ТипКолонки = ТипКолонкиАнализаДанныхОбщаяСтатистика.НеИспользуемая;
 ИначеЕсли Тип(ТипАнализа) = Тип("АнализДанныхДеревоРешений") Тогда  
  Аналитика.НастройкаКолонок.Регистратор.ТипКолонки = ТипКолонкиАнализаДанныхДеревоРешений.НеИспользуемая;
  Аналитика.НастройкаКолонок.Партнер.ТипКолонки = ТипКолонкиАнализаДанныхДеревоРешений.Прогнозируемая;
  Аналитика.НастройкаКолонок.Номенклатура.ТипКолонки = ТипКолонкиАнализаДанныхДеревоРешений.НеИспользуемая;
  Аналитика.Параметры.МаксимальнаяГлубина.Значение = 100;
  Аналитика.Параметры.ТипУпрощения.Значение = ТипУпрощенияДереваРешений.НеУпрощать;
 ИначеЕсли Тип(ТипАнализа) = Тип("АнализДанныхКластеризация") Тогда
  Аналитика.НастройкаКолонок.Период.ТипКолонки = ТипКолонкиАнализаДанныхКластеризация.НеИспользуемая;
  Аналитика.НастройкаКолонок.Регистратор.ТипКолонки = ТипКолонкиАнализаДанныхКластеризация.НеИспользуемая;
  Аналитика.НастройкаКолонок.Партнер.ТипКолонки = ТипКолонкиАнализаДанныхКластеризация.Ключ;
  Аналитика.НастройкаКолонок.Номенклатура.ТипКолонки = ТипКолонкиАнализаДанныхКластеризация.ВходнаяИПрогнозируемая;
 ИначеЕсли Тип(ТипАнализа) = Тип("АнализДанныхПоискПоследовательностей") Тогда
  Аналитика.НастройкаКолонок.Регистратор.ТипКолонки = ТипКолонкиАнализаДанныхПоискПоследовательностей.НеИспользуемая;
  Аналитика.НастройкаКолонок.Номенклатура.ТипКолонки = ТипКолонкиАнализаДанныхПоискПоследовательностей.Элемент;
  Аналитика.НастройкаКолонок.Партнер.ТипКолонки = ТипКолонкиАнализаДанныхПоискПоследовательностей.Последовательность;
 ИначеЕсли Тип(ТипАнализа) = Тип("АнализДанныхПоискАссоциаций") Тогда
  Аналитика.НастройкаКолонок.Партнер.ТипКолонки = ТипКолонкиАнализаДанныхПоискАссоциаций.НеИспользуемая;
  Аналитика.НастройкаКолонок.Период.ТипКолонки = ТипКолонкиАнализаДанныхПоискАссоциаций.НеИспользуемая;
  Аналитика.НастройкаКолонок.Количество.ТипКолонки = ТипКолонкиАнализаДанныхПоискАссоциаций.НеИспользуемая;
  Аналитика.НастройкаКолонок.Сумма.ТипКолонки = ТипКолонкиАнализаДанныхПоискАссоциаций.НеИспользуемая;
 КонецЕсли;
 
 Аналитика.Выполнить();
 Аналитика.Вывести(Результат);
 
 Если Тип(ТипАнализа) = Тип("АнализДанныхОбщаяСтатистика") Тогда
  Возврат;
 КонецЕсли;
 
 МодельПрогноза = Аналитика.Результат.СоздатьМодельПрогноза();
 МодельПрогноза.ИсточникДанных = РезультатЗапроса;
 ТЗ = МодельПрогноза.Выполнить();
 
 Построитель = Новый ПостроительОтчета;
 Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТЗ);
 Построитель.Выполнить();
 Построитель.Вывести(Прогноз);
 
КонецПроцедуры 

&НаКлиенте
Процедура Сформировать(Команда)
 
 Если ПустаяСтрока(ТипАнализа) Тогда
  Возврат;
 КонецЕсли;
 
 СформироватьДанные();
 
КонецПроцедуры
 
Ниже результаты анализа по разным вариантам. В дальнейшем, в планах описать работу с каждым методом поподробнее, обработку можно взять здесь.





Комментариев нет:

Отправить комментарий