Механизм анализа данных. Кластеризация.

Публикация № 1486999 31.08.21

Разработка - Математика и алгоритмы

Анализ данных Big Data кластерный анализ CRM кластеризация статистика

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

Вступление.

В последние годы я все чаще сталкиваюсь с внешними решениями в области управления товарными запасами, логистическими операциями, WMS и CRM. В той или иной реализации эти решения представляют собой даже не сторонний по отношению к 1С софт, который решает отдельные задачи, а, как правило, внешние ресурсы, которыми владеют третьи лица и на которые мы отправляем данные из 1С, чтобы получить результат их обработки какими-то (как нам говорят) сверхсложными алгоритмами на супермощных серверах. Ибо это же Big Data, ребята, и куда Вы со своим унылыми софтом и вычислительной мощностью лезете?

Конечно 1С, это не Боливар, и слишком многих он не вынесет, но взглянуть под капот имеющихся решений мне хотелось все больше и больше. А одна из самых загадочных подсистем, включенных в платформу 1С это подсистема анализа данных. Причем ее загадочность обусловлена не столько сложностью применения, а отсутствием внятной справки и примеров использования. Ну и, может быть, сложностью математического аппарата используемого при анализе.

Вот отсюда и родилась идея сесть и спокойно разобраться в этом вот всем, решив по ходу ряд понятных примеров.

Как Вы понимаете кластерный анализ это лишь часть возможностей подсистемы анализа данных, так что здесь пахнет циклом статей, но обещать всего, и тем более сразу не буду.

Итак, можно считать что с предисловием к будущему циклу я закончил, теперь перейдем непосредственно к кластерному анализу. А начнем с постановки задачи.

Постановка задачи.

Давайте представим, что у нас есть розничный on-line магазин в котором очень много клиентов и товаров тоже не мало. И есть какая-то CRM-ка в рамках которой имеются сведения, введенные пользователями в их профиле. Плюс, конечно, информация об истории взаимоотношений (просмотров, обращений, жалоб, комментариев, оценок и т.п). А также есть история покупок.

В общем-то, учитывая количество наших клиентов это все уже достаточно большая Data, пользы от которой, если мы ее не обработаем не будет никакой, а расходы, связанные со сбором и хранением имеются. И вот здесь важно понять, что с этим можно сделать и как коммерчески эффективно это использовать.

Это, конечно, задача маркетологов, а нам как программистам необходимо требовать ТЗ и понимать при этом, что никакого внятного ТЗ от них мы не получим. Зато на нашего маркетолога (или его начальника) выйдут маркетологи или продавцы компании, продающей услуги по обработке данных и впарят что-то, что должно выдать по нашим же данным понятный нашим маркетологам результат и бизнес станет эффективнее аж на 100500%.

И вот в промежутке между требовать ТЗ и купить слона на стороне наш правильный программист может сделать презентацию возможностей обработки данных непосредственно в 1С. Про сравнительную экономию, безопасность данных и возможность гибкого изменения механизма - это описывать не буду. Все люди опытные и умные. Ниже просто условный пример на условных данных кластеризации, анализа и прогнозирования поведения покупателей по мотивам всех имеющихся в нашем распоряжении Data. Или почти всех.

Разделение на кластеры.

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

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

И еще я решил, что кластеров должно быть 5. Опять же 2,3,4,6,7 и т.д. ничем не хуже. Просто так решил. Или, допустим, у нас есть 5 менеджеров по работе с клиентами и я хочу, чтобы кластер покупателей был закреплен за менеджером. В общем это не константа. Когда будем исследовать результат я еще вернусь к вопросу их количества.

А вот и сам код инициализации анализа:

Анализ = Новый АнализДанных;
Анализ.ТипАнализа = Тип("АнализДанныхКластеризация");
Анализ.Параметры.КоличествоКластеров.Значение = 5;
Анализ.Параметры.ТипЗаполненияТаблицы.Значение = ТипЗаполненияТаблицыРезультатаАнализаДанных.ВсеПоля;

Анализ.ИсточникДанных = тИсточника;

Дальше необходимо назначить тип и вес колонок источника. Не тип значений в колонках, а тип взаимоотношений анализа и данных в колонке. Тип колонки определяется логикой анализа. Как и вес, конечно.

Давайте посмотрим на исходные данные и постараемся понять какие данные будут влиять на отнесение покупателя к тому или иному кластеру. Скорее всего это будут все наши колонки из CRM, кроме наименования покупателя, ведь возраст, пол и т.д. вполне могут влиять как на интенсивность покупок, так и на предпочтения покупателя. Как и знак зодиака, хотя я лично в это не верю, но гипотетически... В общем-то, включив его во входящие параметры я ничего не потеряю, кроме времени обработки, зато полученные результаты позволят подтвердить или опровергнуть гипотезу о влиянии гороскопа на поведение покупателей. Если этот фактор окажется не существенным, то он будет поровну присутствовать во всех кластерах. И не более.

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

Допустим мы хотим поручить разработку маркетингового мероприятия для каждого кластера его менеджеру. И установить цель, чтобы после реализации мероприятия продажи в кластере увеличились на 20% сверх ожидаемых значений. Очевидно, что нам нужно получить прогноз по кластеру именно в продажах и включить сумму прогноза +20% в KPI менеджера.

В этом случае мы должны сделать данные о продажах и входящими и прогнозируемыми, чтобы опираться при прогнозе не только на возраст и пол, но и на качественную историю продаж.

Итак, на данном этапе мы установим колонку с наименованием покупателя, как НеИспользуемую. Колонки из CRM как Входящие и колонки с показателями продаж, как ВходящиеИПрогнозируемые.

Теперь вес. Вес - это значимость колонки в анализе. По умолчанию он для каждого показателя равен 1. Но мы можем его уменьшить или увеличить в зависимости от контекста задачи. Так как потребительские предпочтения мужчин и женщин, как правило, очень сильно отличаются и я в этом твердо уверен, то я могу сознательно увеличить вес показателя пола до 2. Можно этого и не делать, особенно если выборка достаточно велика и правильное разделение скорее всего произойдет без наших подсказок.

Определив типы колонок и веса для таблицы источника данных из цели анализа и смысла показателей, записываем это кодом:

Анализ.НастройкаКолонок.Клиент.ТипКолонки = ТипКолонкиАнализаДанныхКластеризация.НеИспользуемая;
Анализ.НастройкаКолонок.ЗнакЗодиака.ТипКолонки  = ТипКолонкиАнализаДанныхКластеризация.Входящая;
Анализ.НастройкаКолонок.Возраст.ТипКолонки  = ТипКолонкиАнализаДанныхКластеризация.Входящая;
Анализ.НастройкаКолонок.Пол.ТипКолонки  = ТипКолонкиАнализаДанныхКластеризация.Входящая;
Анализ.НастройкаКолонок.Пол.ДополнительныеПараметры.Вес = 2;
//...
Анализ.НастройкаКолонок.СреднийЧекВКатегории_ТоварыДляДетей.ТипКолонки  = ТипКолонкиАнализаДанныхКластеризация.ВходящаяИПрогнозируемая;

Дальше выполняем сам анализ и выводим результат в специальный построитель отчета для анализа данных. Да. Есть такой специальный построитель. Для вывода ему нужны лишь результат анализа и табличный документ.

Ну и подсказка о применяемом типе анализа, конечно. В общем все просто.

Если же Вы не собираетесь анализировать результаты, то вывод отчета можно пропустить и сразу перейти к прогнозам. Но мы все-таки посмотрим на результат:

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

Результат = Новый ТабличныйДокумент;
     
ПостроительОтчетаАнализаДанных = Новый ПостроительОтчетаАнализаДанных();
ПостроительОтчетаАнализаДанных.Макет = Неопределено;
ПостроительОтчетаАнализаДанных.ТипАнализа = Тип("АнализДанныхКластеризация");
 
ПостроительОтчетаАнализаДанных.Вывести(РезультатАнализа, Результат);
 
Результат.ПоказатьУровеньГруппировокСтрок(1);
Результат.Показать();

И вот что у нас получилось:

В результатах, как видим, у нас 5 кластеров и целая куча каких-то свойств.

Анализ данных.

Так как входящих данных было довольно мало, то все уместилось в пределах экрана и я на глаз отметил то, на что нужно обратить внимание в первую (красным) и вторую (оранжевым) очередь. Это, как можно заметить, значения свойств выборки по которым между кластерами наблюдается наиболее существенная вариация. Также можно заметить, что для непрерывных (числовых) величин как центр кластера выводится среднее значение, а для дискретных (строка, булево и т.п.) частота конкретного значения в кластере. То есть в каждом кластере сумма значений для Пол = М и Пол = Ж равна единице, как и сумма частот всех знаков зодиака.

Теперь можно дать описание кластеров, используя самые значимые по частоте и вариации признаки. Конечно оценить на глаз вариацию по частоте редких значений тяжело (например, различия между кластерами в значении Образование = Иное), но если сам случай редкий, то он едва ли станет значимой особенностью кластера.

Например:

Кластер1 - это молодые женщины в основном с автомобилями, совершающие покупки чаще 4-х раз в месяц и в основном интересующиеся товарами для детей и бытовой техникой.

Кластер6 - это пожилые мужчины лишь половина из которых имеет автомобиль, но они серьезно увлекаются охотой, рыбалкой и туризмом. Совершают покупки около 2-х раз в месяц. Меньше всего интересуются одеждой, обувью, косметикой и детскими товарами.

И вот именно здесь, если кто-то дочитал до этого места, как пасхалку, я дам простое определение кластера. Думаю, что к этому моменту повествования определение стало уже очевидным, но на всякий случай сформулирую: если каждого покупателя представить точкой в многомерном пространстве, измерениями которого служат колонки входящих данных, то кластерами будут облака или группы точек расположенных относительно близко друг к другу.

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

1. Кластеры 3,4,5 покупают намного реже чем 1,2. Самая очевидная мысль - это связано с возрастом покупателей. Может для них такой способ приобретения просто непривычен, может слишком сложный интерфейс сайта и оформления покупки и т.д. Что с этим делать? Можно провести дополнительный анализ, разбив исследуемый кластер на новые кластеры. Может быть кроме возраста мы увидим в новом приближении еще какие-то важные для интенсивности покупок факторы: пол, наличие детей и т.д. Можно просто сделать репрезентативную выборку по кластеру и посадить менеджера на обзвон клиентов для выяснения причины. В любом случае мы должны сформулировать план действий, результатом которого должно стать выявление причины и меры по повышению интенсивности продаж в кластерах.

2. Аналогично п1 можно проанализировать почему кластеры 3,4,5 намного меньше покупают бытовой техники и сделать выводы.

3. "Мужские" кластеры 2,4,5 покупают в разы меньше товаров для детей. В чем причина? Может быть они просто не знают о существовании такого раздела на сайте?

И.т.д.

Замечу, что данные примера это чисто условная модель и реальность может оказаться совсем иной. Главный вывод для нас программистов состоит в том, что по результатам анализа мы должны выдать аналитикам не только параметры кластеров, но и состав самих кластеров, чтобы дальше делить уже эти кластеры на подкластеры, опрашивать покупателей кластера или вести по ним маркетинговый обстрел.

Так где же состав самих кластеров?  Он находится в свойстве ТаблицаКластеризации результата анализа. Это всего лишь таблица значений, повторяющая исходные данные с добавленной колонкой "Кластер". Т.е. по обращению  РезультатАнализа.ТаблицаКластеризации мы получим ТЗ примерно как на картинке:

Последняя колонка таблицы указывает на текущий кластер покупателя. Дальше можете отобрать из нее покупателей нужного кластера и обработать как захотите.

Построение прогноза.

Переходя к прогнозу мы снова попадаем на вопрос о цели прогноза. Очевидных целей может быть несколько, но для меня очевидными являются две:

1. Планирование и оценка эффективности мероприятий связанных с увеличением продаж в существующих кластерах. Этот прогноз включает в качестве исходных данных сведения о продажах.

2. Прогнозирование поведения новых/потенциальных покупателей, не имеющих истории продаж. Этот прогноз не должен опираться на данные о продажах, а анализировать только доступные после регистрации покупателя данные из профиля.

Могут быть и другие варианты, главное, чтобы Вы понимали, что состав исходных данных для прогнозирования зависит от того по каким данным Вы будете делать необходимый прогноз.

Итак прогноз для цели №1 может быть получен из имеющегося у нас результата анализа, так как он включал, кроме данных профиля, и данные о продажах. В коде это выглядит так:

МодельПрогноза = РезультатАнализа.СоздатьМодельПрогноза();
МодельПрогноза.ИсточникДанных = тПрогноза;
тРезультатПрогноза = МодельПрогноза.Выполнить();

тПрогноза здесь это любая таблица значений, содержащая полный набор входящих колонок, использованных в источнике данных для результата анализа. Т.е. для первой цели мы можем вполне использовать тИсточника, тем более, что она содержит как раз необходимые для построения прогноза данные. Если же нам нужны прогнозы по отдельным кластерам - данные для прогноза можно получить отбором из таблицы кластеризации.  Если нужен прогноз по мужчинам водолеям и т.д. просто делаем отбор из исходных данных.

Ну и конечно в качестве источника данных прогноза могут выступать результат запроса и  область ячеек табличного документа. Главное чтобы в них совпадали колонки входящих и прогнозируемых данных.

Впрочем, колонки модели прогноза, после установки источника можно переопределить изменив роль и источник данных, но вот зачем?

А теперь посмотрим в тРезультатПрогноза:

Я специально вывел таблицу в консоли построителя, так как колонок очень много, и вывести все в табличный документ адекватного размера нельзя. Впрочем и информативным такой прогноз не назовешь. Как видим по каждому прогнозируемому показателю (тип колонки АнализаДанных = Прогнозируемая/ВходящаяИПрогнозируемая) прогноз добавил к таблице источника 3 колонки: ЗначениеС, ЗначениеПо и Вероятность. Но это нам мало говорит о том, каким собственно будет математическое ожидание показателя для кластера. Есть лишь диапазон значений с наибольшей вероятностью в него попасть.

Если же нам нужно математическое ожидание придется использовать допил решения кодом. Приведу пример для поля "СреднееКоличествоЧековВмесяц":

ПолеПрогноза = "СреднееКоличествоЧековВМесяц";
ПараметрыПрогнозирования = Новый Соответствие;

Для Каждого Кластер Из МодельПрогноза.Кластеры Цикл
	
	НомерКластера = МодельПрогноза.Кластеры.Найти(Кластер) + 1;
	
	ПараметрыПрогнозирования.Вставить(НомерКластера, Новый Соответствие);

	Для Каждого ЗначениеПоляПрогноза Из Кластер.ЗначенияПолейПрогноза Цикл
		Если ЗначениеПоляПрогноза.Ключ = ПолеПрогноза Тогда
			Прервать;
		КонецЕсли;
	КонецЦикла;
	
	
	Для Каждого РешениеАнализаДанных Из ЗначениеПоляПрогноза.Значение Цикл
		
		Вероятность = РешениеАнализаДанных.Вероятность;
		ТекРешение = РешениеАнализаДанных.Решение;
		
		Если ТекРешение[0].ВидСравнения = ВидСравнения.МеньшеИлиРавно Или ТекРешение[0].ВидСравнения = ВидСравнения.Меньше Тогда
			
			ЦентральнаяВеличина = ТекРешение[0].Значение / 2;
						
		ИначеЕсли ТекРешение[0].ВидСравнения = ВидСравнения.ИнтервалВключаяОкончание Тогда
			
			ЦентральнаяВеличина = (ТекРешение[0].ЗначениеС + ТекРешение[0].ЗначениеПо) / 2;
			
		ИначеЕсли ТекРешение[0].ВидСравнения = ВидСравнения.БольшеИлиРавно Или ТекРешение[0].ВидСравнения = ВидСравнения.Больше Тогда
			
			ЦентральнаяВеличина = 2 * ТекРешение[0].Значение - ЦентральнаяВеличина;
			
		КонецЕсли;
		
		ПараметрыПрогнозирования[НомерКластера].Вставить(ЦентральнаяВеличина,Вероятность);		
		
	КонецЦикла;
	
КонецЦикла;

МатематическиеОжиданияПоКластерам = Новый Соответствие;

Для Каждого ПараметрПрогноза Из ПараметрыПрогнозирования Цикл
	
	МатОжидание = 0;
	Для Каждого ОценкаВероятности Из ПараметрПрогноза.Значение Цикл
		МатОжидание = МатОжидание + ОценкаВероятности.Ключ * ОценкаВероятности.Значение / 100;
	КонецЦикла;
	
	МатематическиеОжиданияПоКластерам.Вставить(ПараметрПрогноза.Ключ, МатОжидание);
	
КонецЦикла;

Суть кода в том, что я обхожу каждый кластер из модели прогноза и собираю центральные значения и вероятности из всех рассчитанных диапазонов значений. А потом суммирую произведения центров диапазонов на их вероятности.

Вот что в итоге окажется в соответствии МатематическиеОжиданияПоКластерам:

Ключ Значение
1 4,3900185556722678665745
2 4,44971263772954127807075
3 1,99142345578457535242179
4 2,09649335029940116220585
5 1,990430605855855696439885

Если же идти в прогнозировании дальше и строить доверительные интервалы, то необходимо определиться с видом распределения значений. И получить параметры такого распределения. Это отдельная тема и здесь я не буду в нее погружаться, итак статья выходит длинноватой. Отмечу лишь, что подавляющее большинство практических данных сходятся к распределениям Пуассона или Гаусса (нормальному). Для Пуассона - единственным параметром будет математическое ожидание, а для Гаусса нужно еще посчитать среднеквадратичное отклонение в кластерах, с чем, думаю, все справятся.

Как пример приведу график функции вероятности Пуассона и практического распределения среднего количества чеков в месяц для кластера 1 (параметр мат. ожидания для распределения Пуассона = 4.39)

Схожесть распределений, конечно, очень не идеальна, но и исходные данные совсем не из практики.

Если же нам нужна оценка продаж за период нужно сложить математические ожидания продаж по группам номенклатуры в чеке, умножить это на математическое ожидание количества чеков в кластере и умножить это на количество месяцев и, не забыть умножить на размер самого кластера. Вот и готов ориентировочный KPI менеджеру кластера. С другой стороны понятно, что любой показатель в прогнозируемом периоде может с определенной вероятностью принять любое значение. А значит KPI может быть достигнут случайно, а не благодаря кому-то. К этому нужно относиться с пониманием и опираться в установке целей не только на математическое ожидание, но и на доверительные интервалы.

 

Теперь совсем немного расскажу про прогноз поведения новых покупателей. Для его построения необходимо в исходных данных колонки, связанные со сведениями о продажах, сделать просто прогнозируемыми и провести кластеризацию. Затем добавить в таблицу исходных данных для прогнозирования сведения о новых покупателях (без данных о продажах, естественно) и выполнить по ней прогноз. Вот эта таблица. Клиенты новые и не имеют истории продаж:

Помним, что таблицу источника данных для объекта анализа мы оставили ту же, но колонки с продажами настроили как ТипКолонкиАнализаДанныхКластеризация.Входящая

В результате получим такой результат прогноза:

Если приглядитесь, то заметите, что ничего нового в плане продаж этот прогноз не дал - те же оценки по тем же кластерам. Главное, что мы получили - кластеризацию новых покупателей. Дальше их оценки соответствуют оценкам всего кластера.

Как это использовать на постоянной основе?

Этот вопрос я выделил подпунктом потому что для меня он остается открытым. Может у читателей будут мысли, которые мы обсудим в комментариях.

Здесь я просто изложу свои мысли и предположения:

1. Очевидно, что нагрузка на оборудование и длительность анализа будут зависеть в первую очередь от объема BigData. Поэтому дальнейшие планы можно строить только на основе оценки нагрузки и наших возможностей.

2. Если данных много, то нет смысла пересчитывать их при каждом изменении и я бы не стал создавать для анализа фоновые задания с определенной периодичностью. Скорее мерой должна служить степень изменения данных. Допустим изменение количества и/или итогов по записям на 3, 5 или 10% приводит к обновлению кластеризации в фоновом задании в период наименьшей нагрузки на сервера.

3. Если нам нужно присвоить кластер новому элементу, но проводить кластерный анализ ради этого не хочется можно брать готовое решение. Результат анализа можно хранить в хранилище значения и при необходимости извлекать оттуда и классифицировать новые объекты через инструментарий прогноза. Для того, чтобы не помещать в хранилище весь массив исходных данных результат анализа можно избавить от таблицы кластеризации, указав в параметрах анализа:

Анализ.Параметры.ТипЗаполненияТаблицы.Значение = ТипЗаполненияТаблицыРезультатаАнализаДанных.НеЗаполнять;

РезультатАнализа после этого будет содержать только данные о кластеризации, без огромной таблицы исходных данных.

4.  Если имеет смысл нагружать анализом отдельную базу данных, которая будет получать данные из основной (основных) баз. Отдавать для использования в основные базы она должна только итоги работы в виде результата анализа и списка объектов, у которых изменился кластер в ходе последнего пересчета. В основных же базах производить только изменения значения этого реквизита и обновлять хранилища с готовыми решениями.

 

И вот на этом, надеюсь, пока все.

P.S. Использованная версия платформы 8.3.12.1595

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. ZLENKO 392 01.09.21 11:17 Сейчас в теме
Интересно было бы узнать как оно работает на реальных данных
2. dusha0020 1019 01.09.21 12:44 Сейчас в теме
(1) Вот как-то с реальными задачами напряг. Может кто-то из сообщества найдет применение и поделится результатом:)
3. Yashazz 4083 01.09.21 18:26 Сейчас в теме
(2) Вот поэтому и не используют, и примеров мало. Не нужно оно почти никому...

Интересно, сколько народу заглянет в эту тему, привлечённую словом "Кластеризация", значение которого может намекать на вовсе даже не "анализ данных", а разнесение серверной нагрузки?))
triviumfan; dusha0020; Ветер в поле; +3 Ответить
4. SlavaKron 02.09.21 10:52 Сейчас в теме
Похожая задача в графике – квантизация изображений. Когда, например, для изображения с глубиной цвета 24 бит необходимо найти оптимальную палитру из 256 цветов (когда-то это было актуально для gif). Правда, в графике расстояния между цветами в кубе RGB не соответствуют психофизическому восприятию цвета.
5. dusha0020 1019 02.09.21 12:47 Сейчас в теме
(4)
расстояния между цветами в кубе RGB не соответствуют психофизическому восприятию цвета
Очень интересно. Не знал.
Думал, что RGB соответствует физиологии глаза. Хотя после физиологии идет еще и обработка мозгом...
6. tormozit 6402 03.09.21 07:04 Сейчас в теме
Можно ли количество кластеров сделать динамическим, т.е. чтобы алгоритм сам подобрал их количество на основе максимальных расстояний от центра кластера?
7. dusha0020 1019 03.09.21 13:59 Сейчас в теме
(6) В результате анализа есть описания кластеров. А в каждом кластере есть массив с "центрами тяжести" по всем входящим колонкам.
В принципе можно после определения N кластеров посчитать СКО для числовых значений элементов кластера и сравнить с критерием максимального расстояния. Ну или даже просто сравнить модули. Здесь проблем нет.

Для не числовых центром тяжести является частота появления в кластере и здесь все сложнее. При удачной кластеризации одни из значений будут стремиться к 1 в то время как другие к 0 и объединять их оценки нельзя. Здесь, имхо, имеет смысл что-то вроде принципа Парето. Т.е. частота вхождения в кластер 20% минимально отклоняющихся по частоте значений показателя должна быть 80% всех значений в кластере. Ну проценты могут быть иные, а вот сам критерий качества кластера я бы формулировал так.

Так что ответ на Ваш вопрос: "теоретически ДА":)

Анализ также выдает таблицу межкластерных расстояний в свойстве МежкластерныеРасстояния результата анализа. Можно попробовать максимизировать среднее расстояние между кластерами или лучше дисперсию.

Пример таблицы межкластерных расстояний:
Прикрепленные файлы:
8. tormozit 6402 06.09.21 10:35 Сейчас в теме
Добавил инструмент "Анализ данных" с генератором кода в ИР https://www.hostedredmine.com/issues/932820
triviumfan; dusha0020; BigMih; +3 Ответить
Оставьте свое сообщение

См. также

Excel vs 1С: битва с неожиданным исходом Промо

Анализ учета Универсальные обработки Загрузка и выгрузка в Excel Финансовые Управленческие v8 1cv8.cf Россия Бесплатно (free)

Что лучше 1С или Excel? Разберемся, в казалось бы, очевидном, чтобы получить невероятное!

11.04.2019    41394    bolefirenko    122    

Практическое применение операции копирования массива

Математика и алгоритмы v8 Бесплатно (free)

Решение задачи https://projecteuler.net/problem=250 из Project Euler средствами 1C.

02.08.2021    881    scientes    2    

Запрос всей номенклатуры с характеристиками

Математика и алгоритмы v8 ERP2 УТ11 КА2 Бесплатно (free)

Сравнение различных вариантов запроса всей номенклатуры с характеристиками (УТ11.4, КА 2.4, ERP 2.4).

1 стартмани

30.07.2021    798    Daemonold    3    

Распределенные алгоритмы РИБ 1С

Распределенная БД (УРИБ, УРБД) Математика и алгоритмы v8 Бесплатно (free)

Небольшое исследование на тему применимости классических распределённых алгоритмов репликации и синхронизации данных между узлами обмена РИБ 1С.

02.07.2021    1206    zhichkin    1    

Автоматические и управляемые блокировки применительно к типовым конфигурациям 1С Промо

Математика и алгоритмы Практика программирования v8 v8::blocking 1cv8.cf Бесплатно (free)

Основные принципы работы с режимами автоматических и управляемых блокировок в 1С Предприятие 8. Теория и применение в типовых конфигурациях: БП, УТ, ЕРП

10.11.2018    44161    ids79    45    

Чем воспользоваться для распознавания котиков в 1С?

Практика программирования Математика и алгоритмы v8 Бесплатно (free)

На митапе по инструментам для расширения возможностей 1С выступил Олег Филиппов. Он сравнил подходы Native API, COM, Docker и Serverless, и рассказал, как упростить использование в 1С алгоритмов, реализованных на других языках, с помощью облачной технологии «Функция как сервис».

12.04.2021    3343    comol    10    

Рекурсия для начинающих

Математика и алгоритмы Практика программирования v8 Бесплатно (free)

Рассмотрен подход к пониманию рекурсий. Приведены примеры из реальной практики.

10.02.2021    2290    szv    5    

Настройка отчета "Паспорт просрочен" в ЗУП 3

Анализ учета Зарплата v8 v8::СПР ЗУП3.x БУ Бесплатно (free)

Обновили программу с 3.1.10 до 3.1.14 и в карточке сотрудника всплывает информация о просроченных паспортах для пользователя с полными правами, а у кадровика нет.  Я решила настроить для кадровика отчет.

30.09.2020    1778    Hla    4    

Как работает серверный вызов в 1С Промо

Математика и алгоритмы v8::УФ Бесплатно (free)

Клиент-серверная архитектура заложена в платформе изначально — со времен «1С:Предприятие 8.0». Однако при разработке на 8.0 и 8.1 о разделении кода на клиентскую и серверную часть можно было не заботиться, поскольку на клиенте (на толстом клиенте) был доступен тот же функционал, что и на сервере. Всё изменилось с выходом платформы «1С:Предприятие 8.2», когда появился тонкий клиент. Теперь на клиенте доступен один функционал, на сервере — другой. Клиент и сервер «общаются» между собой с помощью серверного вызова. Конечно, это усложнило процесс разработки, но с другой стороны – можно создавать более оптимальные (быстрые) решения, поскольку все сложные задачи выполняются на сервере.

18.11.2017    66245    pahich    83    

Использование com-соединения для сопоставления номенклатуры, контрагентов

Анализ учета v8 1cv8.cf Бесплатно (free)

Com-подключение для сравнения номенклатуры, контрагентов, остатков.

06.05.2020    2094    Rustig    12    

Как сделать сторно в 1С

Анализ учета v8 v8::ОУ КА2 УУ Бесплатно (free)

Сторно – это исправление ошибок учета, когда ошибочно внесенную операцию записывают с отрицательными числами. В программах 1С есть два вида документа, с помощью которых можно выполнить сторно необходимых данных. Это "Корректировка регистров" и "Операция" в 1С 8.3.

30.03.2020    4136    Koder_Line    0    

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

Математика и алгоритмы Учет ТМЦ v8 1cv8.cf Оптовая торговля, дистрибуция, логистика Россия УУ Бесплатно (free)

Особенности учета партионной системы при наличии двух количественных показателей.

26.03.2020    4421    lastcontra    5    

Будни автоматизации или "мне нужна программка для 3D упаковки" Промо

Практика программирования Математика и алгоритмы Оптовая торговля Оптовая торговля v8 1cv8.cf УУ Бесплатно (free)

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

24.03.2014    46590    ildarovich    116    

Получение значений всех полей в иерархии структуры отчета

Практика программирования Математика и алгоритмы v8::СКД Россия Бесплатно (free)

При обработке расшифровки данных в отчете (да и не только отчете), основанном на СКД, может потребоваться получить значения всех полей, находящихся в текущей группировке и её родителях. Представляю вашему вниманию алгоритм, выполняющий эту задачу. Как говорится, "просто оставлю это здесь".

28.02.2020    2500    real_MaxA    1    

Treemapping — способ визуализации данных древовидной структуры. Карта-схема дерева

Математика и алгоритмы Работа с интерфейсом v8 1cv8.cf Бесплатно (free)

Предлагается ознакомиться с редким способом графического представления иерархических данных. Приводится алгоритм формирования и пример реализации.

18.02.2020    6394    randomus    20    

[После]Новогодние задачи

Практика программирования Математика и алгоритмы v8 Бесплатно (free)

Совсем немного времени осталось до того момента, когда отзвучат куранты, шампанское будет выпито, мандарины съедены, и даже оливье закончится. Возникнет вопрос: чем бы занять неожиданно появившееся свободное время?

30.12.2019    3383    Alxby    23    

Приемы обработки больших данных в 1С Промо

Универсальные обработки Математика и алгоритмы Перенос данных из 1C8 в 1C8 v8 1cv8.cf Бесплатно (free)

Рассказ об эффективных приемах организации обработок больших объемов данных на платформе 1С

07.08.2015    71029    tormozit    29    

Регистры бухгалтерии. Общая информация

Практика программирования Математика и алгоритмы v8 v8::БУ БУ Бесплатно (free)

Общая информация о внутреннем устройстве регистров бухгалтерии.

05.09.2019    45411    YPermitin    25    

"Хочу универсально!" [Часть 1]

Математика и алгоритмы Практика программирования Разработка v8 1cv8.cf Бесплатно (free)

Сентябрьская серия статей про то, как начинающий разработчик Вася проходит путь от простой задачки к созданию своего механизма. На этот раз - открытие значения из текущей колонки.

02.09.2019    10639    SeiOkami    35    

Иерархия без "В ИЕРАРХИИ"

Математика и алгоритмы v8 Бесплатно (free)

Говорится о том, как эффективно представлять иерархию в СУБД, как получать и использовать эти представления при решении задач в запросной технике. Уточняются и дополняются запросы из статьи "Уровни, глубина, прародители, циклы и аналоги запросом" [https://infostart.ru/public/160707/].

22.08.2019    14852    ildarovich    24    

XDTO - это просто Промо

Математика и алгоритмы v8 1cv8.cf Бесплатно (free)

С появлением платформы 8.1 фирма “1С” представила механизм, носящий интригующее название XML Data Transfer Objects или, если коротко - XDTO. По традиции, документирование механизма составлял тот, кто хорошо разбирался в вопросе, а стало быть опустил “и так понятные” с его точки зрения моменты. Целью данной статьи (или цикла статей, как получится) стало желание поделиться накопленным опытом. Мне кажется, многие неочевидные вещи в механизме XDTO необходимо осветить получше.

24.12.2012    328678    Evil Beaver    184    

EnterpriseData – часть 3. Загрузка данных, идентификация объектов

Практика программирования Математика и алгоритмы Перенос данных из 1C8 в 1C8 Разработка v8 v8::УФ 1cv8.cf Бесплатно (free)

Основные этапы загрузки данных через EnterpriseData. Идентификация объектов загружаемых полностью и по ссылке. Приведены схемы процессов загрузки данных. Описание основных операций и обработчиков. Перечень процедур БСП, используемых при загрузке данных, структура «КомпонентыОбмена».

22.08.2019    18504    ids79    8    

Обработчики событий при записи объектов. Зачем и что за чем?

Математика и алгоритмы v8 Бесплатно (free)

Программисту, имеющему немного опыта на платформе 1С 8.3, бывает сложно разобраться: ПередЗаписью, ПриЗаписи, ПослеЗаписи, на сервере, на клиенте, в модуле формы, в модуле объекта.... Эта шпаргалка была создана в процессе обучения и реального опыта с целью разложить всё по полочкам, чтобы было четкое понимание в каком случае какой обработчик нужно использовать и в какой последовательности они запускаются при записи и проведении документов. Данная статья будет полезна в большей степени начинающим разработчикам. Но и опытным позволит освежить информацию, упорядочить её.

25.07.2019    107447    AlbinaAAA    47    

Как проводятся документы в типовых конфигурациях от 1С

Математика и алгоритмы Практика программирования Разработка v8::ОУ ERP2 УТ11 Россия УУ Бесплатно (free)

В свое время, когда только начинал шаги в 1С и изучал, как проводятся документы в конфигурациях на платформе 1С по книге "Разработка управляемого интерфейса" (Хрусталева Е.Ю.), и там были представлены примеры совсем далекие от того, как сейчас проводятся документы в современных конфигурациях от 1С.

24.07.2019    35760    skv_79    37    

Самоучитель языка запросов 1С. Промо

Практика программирования Решение задач на 1С:Специалист Математика и алгоритмы v8 v8::Запросы Бесплатно (free)

Сервис для изучения запросов 1С: "Консоль изучения запросов 1С:Предприятие 8". Теперь и с конструктором запросов!

07.05.2013    114828    bpc222    327    

FizzBuzz на 1С. Чем короче, тем веселее. Варианты принимаются...

Практика программирования Математика и алгоритмы v8 Бесплатно (free)

Мне было скучно, я не мог себя заставить написать ничего полезного. И читал статью на Хабре. Потом я читал комментарии, а потом... нет я не ушел смотреть котиков на ютюбе. Я решил сделать несколько решений задачки FizzBuzz на 1С, с целью "чем короче, тем лучше". Прошу сильно не пинать, это просто развлечение для вечера.

24.07.2019    5960    vandalsvq    19    

Управление качеством кода

Математика и алгоритмы Рефакторинг и качество кода SonarQube EDT v8 Бесплатно (free)

О SonarQube, АПК, EDT. Какие преимущества дает их использование. Для каких команд подходит.

22.07.2019    19347    Stepa86    40    

Что делает "В ИЕРАРХИИ" в запросе?

Математика и алгоритмы v8 Бесплатно (free)

Описание действий платформы 1С при использовании конструкции "В ИЕРАРХИИ" в запросах.

16.07.2019    45307    YPermitin    34    

Решение транспортной задачи запросом Промо

Математика и алгоритмы v8 Бесплатно (free)

Списание по двум последовательностям партий запросом (без программной обработки)

1 стартмани

30.04.2014    36025    bforce    22    

Создание отчетов с помощью СКД - основные понятия и элементы

Практика программирования Математика и алгоритмы v8 v8::СКД Бесплатно (free)

Основные принципы работы СКД. Понятия схемы компоновки и макета компоновки. Описание основных элементов схемы компоновки: наборы данных, поля, вычисляемые поля, ресурсы, параметры.

25.06.2019    74688    ids79    28    

Реализуем Стек, Очередь и Приоритетную очередь в 1С

Практика программирования Математика и алгоритмы v8 1cv8.cf Россия Бесплатно (free)

В статье рассматриваются способы реализации таких абстрактных структур данных, как стек, очередь и приоритетная очередь, используя готовые типы данных 1С. Выявляются "узкие" места, сложные моменты в реализации и сравнивается скорость работы.

24.06.2019    16274    RonX01    66    

Почему вообще работает мой запрос? или Ещё раз о планах запросов

Математика и алгоритмы Практика программирования Разработка v8::Запросы Бесплатно (free)

Другие статьи на эту тему объясняют, что такое план выполнения запроса, но не рассказывают о том, как его получить. Эта заметка призвана заполнить этот пробел. Её цель - популяризировать общедоступные инструменты получения плана запроса среди разработчиков, которые ещё не начали их использовать.

10.06.2019    10218    DataReducer    12    

Парсер запросов 1С. Часть 1: Введение, разбор математических выражений Промо

Математика и алгоритмы v8 Бесплатно (free)

Рано или поздно становится скучно решать типичные задачи, для которых придумана 1С. Голова пухнет от бухгалтерских терминов и очередных "хотелок" пользователей. Именно в такие моменты хочется гордо поднять голову, воскликнуть "Но я же программист!" и заняться чем-то интересным. В цикле статей я постараюсь доступно описать, как устроены парсеры в целом и на примере парсера языка запросов 1С. Требования к навыкам читающего: основы языка 1С, основы алгоритмизации.

1 стартмани

04.12.2013    31253    juntatalor    49    

Организация хранения промежуточных данных

Математика и алгоритмы v8 Бесплатно (free)

Организация хранения промежуточных данных в процедуре сверки.

29.05.2019    4529    scientes    1    

Вычисление 200 тысяч знаков числа pi

Математика и алгоритмы v8 Россия Бесплатно (free)

В статье рассматриваются возможности платформы выполнять сверхточные вычисления без использования сложных алгоритмов и внешних компонент на примере вычисления числа pi.

28.05.2019    9241    Oleg_nsk    97    

Регистры накопления. Виртуальные таблицы. Часть №1: Обороты

Практика программирования Математика и алгоритмы Разработка v8 1cv8.cf Бесплатно (free)

Описание работы платформы 1С:Предприятие 8.2 с виртуальной таблицей "Обороты" регистров накопления.

20.05.2019    44624    YPermitin    8    

Сервис для изучения методов платформы 1С:Предприятие 8. Бесплатно! Промо

Практика программирования Решение задач на 1С:Специалист Математика и алгоритмы v8 Бесплатно (free)

Бесплатный ON-Line сервис изучения методов платформы 1С:Предприятие 8. Подготовка к аттестации 1С:Специалист on-line! Тестовые задания по различным видам учета! Подсказки для оптимального решения!

27.06.2013    51194    bpc222    53    

Даем названия переменным: как префиксы экономят наше время

Практика программирования Математика и алгоритмы Разработка v8 Бесплатно (free)

Понятные названия переменных экономят время и силы разработчика : в начале, когда мы даём названия переменным, в процессе развития разработки, когда мы "на лету" понимаем назначение той или иной переменной, в конце, когда мы передаём разработку на поддержку других программистов, сами переходя к новым разработкам

06.05.2019    8795    Designer1C    81    

Консилиум во флаконе

Бухгалтерский учет Анализ учета v8::БУ v8::Запросы v8::СКД 1cv8.cf Бесплатно (free)

Ошибки, держитесь крепче. Flowcon вышел на охоту.

14.03.2019    9002    1c-intelligence    10    

Заметки по SQL: Срез последних - аналог запроса

Математика и алгоритмы Практика программирования v8 1cv8.cf Россия Бесплатно (free)

В статье описывается создание среза последних данных средствами классического языка запросов. Причем метод построения запроса был разработан еще во времена, когда автор работал с СУБД Oracle 9i и программировал на PL SQL. Основная идея заключается преобразовании запроса с подзапросом, в запрос без подзапроса (в примерах описывается преобразование до двух вложенных подзапросов). Запросы тестировались на реальных базах данных. Платформа - 1С:Предприятие 8.3 (8.3.10.2561).

15.01.2019    14216    IVC_goal    16    

v8: Концепция минимального изменения конфигурации для легкого обновления Промо

Математика и алгоритмы v8 1cv8.cf Бесплатно (free)

"Лучше день потерять потом за пять минут долететь" ((с) "Крылья, ноги и хвосты") или как сделать так чтобы обновление конфигурации проходило с минимальными трудозатратами.

28.01.2013    38723    MarSeN    57    

Многопоточное восстановление последовательностей

Производительность и оптимизация (HighLoad) Практика программирования Математика и алгоритмы Универсальные функции v8 Бесплатно (free)

Универсальный алгоритм многопоточного фонового восстановления любой последовательности.

05.12.2018    15175    _ASZ_    33    

Основные понятия и механизмы оптимизации клиент-серверного взаимодействия в 1C

Математика и алгоритмы Практика программирования v8 Россия Бесплатно (free)

У многих начинающих 1С программистов часто возникают вопросы про клиент-серверное взаимодействие в 1С и чтобы разобраться в непростых механизмах платформы, необходимо понять, что же такое контекст, для чего предназначены директивы компиляции, что представляют собой контекстные/внеконтекстные вызовы и как наиболее оптимально описывать прикладные задачи в модулях управляемых форм.

23.08.2018    47719    Rain88    49    

Пример выбора несколько обработчиков событий записи объекта для решения одной задачи Промо

Математика и алгоритмы v8 Бесплатно (free)

Данная публикация предназначена для начинающих разработчиков и является продолжением статьи "Обработчики событий при записи объектов. Зачем и что за чем?" (ссылка далее). Содержит пример использования несколько обработчиков событий для решения одной задачи и объясняется почему выбраны именно они.

27.09.2012    196877    AlbinaAAA    65    

Ошибка №2 внедрения "Бюджетирования" в 1С:ERP2 и 1С:КА2: реализация бизнес-логики на уровне отборов правил получения фактических данных

Финансовый учет и бюджетирование (FRP) Анализ учета Финансовый учет и бюджетирование (FRP) v8 ERP2 Россия УУ Бесплатно (free)

Ошибка настройки правил получения фактических данных в 1C:ERP2 и 1С:КА2 довольно распространена. Попытка реализовать бизнес-логику на уровне правил получения фактических данных делает отчетность сложно проверяемой, увеличивает время формирования отчетов и практически всегда приводит к искажению фактических данных в бюджетных отчетах.

22.08.2018    9927    SergeyN    5    

Преобразование запросов

Математика и алгоритмы v8 Бесплатно (free)

Использование математических методов для языка запросов.

15.03.2018    12433    vasilev2015    24    

"Взлом" теста "1С:Профессионал" методом машинного обучения

Практика программирования Математика и алгоритмы v8 1cv8.cf Бесплатно (free)

Нейронные сети – не единственная модель, реализующая принципы машинного обучения. Есть еще байесовская модель, которая математически строже и определеннее, поскольку построена на надежном фундаменте теории вероятностей. Применению байесовского вывода к решению интересной теоретической задачи и посвящена данная статья. Слово "взлом" в заголовке использовано для привлечения внимания. Речь идет исключительно о математическом методе, показанном на примере знакомой всем задачи. 

12.03.2018    20919    ildarovich    19    

Альтернативные способы работы с XML. Часть 2: Введение в xPath или запросы к XML Промо

Обмен через XML Математика и алгоритмы v8 1cv8.cf Бесплатно (free)

В предыдущей статье "Введение в DOM или объектная модель документа" было описано понятие объектной модели документа (DOM), раскрыты плюсы и минусы использования модели при разборе файлов XML, приведено сравнение с построчным последовательным разбором. Были представлены варианты выборки данных с помощью объекта 1С ДокументDOM. Теперь настало время познакомить читателей с самым, на мой взгляд, интересным способом извлечения данных из XML - при помощи языка запросов xPath.

09.08.2012    43218    1cspecialist    13    

Введение в CI для 1С

Математика и алгоритмы v8 Россия Бесплатно (free)

Значение роли тестирования при разработке ПО трудно переоценить, его применение позволяет повысить надёжность продукта и улучшить качество кода. Для продуктов для платформы 1С:Предприятие существует ряд инструментов для проведения тестирования, в том числе и от самого вендора. Но, также появились открытые инструменты, реализующие мировые практики проведения тестирования (проверки продукта), поддерживаемые сообществом. В этой статье описаны базовые принципы, которые необходимо понимать перед началом применения этих инструментов.

21.11.2017    24717    real_MaxA    22