Data science. Начало

06.06.22

База данных - Статистика базы данных

Для многих 1С-ников (в том числе и достаточно опытных) может быть открытием то, что модные сейчас Data science и Machine learning уже довольно давно присутствуют в платформе. По причинам, которые я постараюсь раскрыть в дальнейшем, эти технологии почти никем не используются. Но лично я убежден, что как минимум базовые навыки в этой области пригодятся любому специалисту 1С. В этой серии статей я попробую достаточно детально, но без лишних сложностей рассказать о том, что это такое и "с чем это едят"

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Обработка с учебными данными
.epf 203,04Kb
2
2 Скачать (1 SM) Купить за 1 850 руб.

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

Сейчас в арсенале специалиста по DS(data science) и ML(machine learning) есть довольно много различных средств и технологий. Что-то из этого есть в платформе 1С, чего-то нет. Но мы начнем знакомство со всем этим с одной проверенной и заслуженной технологии, которую коротко называют "регрессией".

В платформе 1С для всех возможных типов анализа используется один и тот же объект "АнализДанных". Регрессии в этом объекте соответствует тип анализа "Дерево решений".

	Анализ=новый АнализДанных;
	Анализ.ТипАнализа=Тип("АнализДанныхДеревоРешений");

Рассказывать, как работает регрессия, я буду на примере, который должен быть близок всем. Почти каждому из нас (прямо или косвенно, через родственников, друзей, знакомых) приходилось иметь дело с арендой или покупкой недвижимости. И, соответственно, так или иначе приходилось решать вопрос оценки. Мы будем использовать регрессию для того, чтобы не ломать голову, а получать оценку на научной основе. К тому же, вам по любому не будет жаль потраченного на чтение статьи времени. В конце вы получите на руки инструмент, который вам наверняка пригодится в будущем.

Учебные данные я взял на законной основе с Kaggle. Это одна их наиболее известных "тусовок" специалистов по DS и ML, с некоторых пор под эгидой Google. Это данные о реальных сделках по покупке-продаже недвижимости. Хороши они еще и тем, что достаточно детальны.  Вы можете увидеть это на иллюстрации.

 

 

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

Чтобы построить дерево решений в 1С, надо сделать следующее:

	Анализ=новый АнализДанных;
	Анализ.ТипАнализа=Тип("АнализДанныхДеревоРешений");
	Анализ.ИсточникДанных=ТЗМодель;
	Анализ.Параметры.ТипУпрощения.Значение=ТипУпрощенияДереваРешений.НеУпрощать;
	РДерево=Анализ.Выполнить();

А для того, чтобы получить расчет предполагаемых цен, надо сделать вот это:

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

Как видно, все сводится к тому, чтобы задать источники данных для модели и для прогноза. Учебные данные я сохранил в макет внешней обработки. И хотя объект "АнализДанных" допускает табличный документ (а также и результат запроса) в качестве источника данных, я все же буду использовать таблицу значений. Причины этого будут понятны ниже.

	//получение данных
	Макет=РеквизитФормыВЗначение("Объект").ПолучитьМакет("ИсходныеДанные");
	ТЗМодель=новый ТаблицаЗначений;
	ТЗМодель.Колонки.Добавить("ПлощадьУчастка");
	ТЗМодель.Колонки.Добавить("ГодПостройки");
	ТЗМодель.Колонки.Добавить("Площадь1этажа");
	ТЗМодель.Колонки.Добавить("Площадь2этажа");
	ТЗМодель.Колонки.Добавить("КоличествоПолныхСанузлов");
	ТЗМодель.Колонки.Добавить("КоличествоСпален");
	ТЗМодель.Колонки.Добавить("КоличествоКомнат");
	ТЗМодель.Колонки.Добавить("Цена");
	ТЗПрогноз=ТЗМодель.Скопировать();
	для й=2 по Макет.ВысотаТаблицы цикл
		нстр=ТЗМодель.Добавить();
		нстр.ПлощадьУчастка=число(Макет.Область(й,5).Текст);
		нстр.ГодПостройки=число(Макет.Область(й,20).Текст);
		нстр.Площадь1этажа=число(Макет.Область(й,44).Текст);
		нстр.Площадь2этажа=число(Макет.Область(й,45).Текст);
		нстр.КоличествоПолныхСанузлов=число(Макет.Область(й,50).Текст);
		нстр.КоличествоСпален=число(Макет.Область(й,52).Текст);
		нстр.КоличествоКомнат=число(Макет.Область(й,55).Текст);
		нстр.Цена=число(Макет.Область(й,81).Текст);
		если й<11 тогда
			нстрпрогноз=ТЗПрогноз.Добавить();
			ЗаполнитьЗначенияСвойств(нстрпрогноз,нстр);
		конецесли;	
	конеццикла;
	
	//подготовка
	Анализ=новый АнализДанных;
	Анализ.ТипАнализа=Тип("АнализДанныхДеревоРешений");
	Анализ.ИсточникДанных=ТЗМодель;
	Анализ.Параметры.ТипУпрощения.Значение=ТипУпрощенияДереваРешений.НеУпрощать;
	РДерево=Анализ.Выполнить();
	
	//прогноз
	Прогноз=РДерево.СоздатьМодельПрогноза();
	Прогноз.ИсточникДанных=ТЗПрогноз;
	Результат=Прогноз.Выполнить();
	
	//визуализация
	ТабДок.Очистить();
	ТабДок.УстановитьРастягиваниеПоГоризонтали(Истина);
	для й=1 по Результат.Колонки.Количество()-1 цикл
		ТабДок.Область(1,й).Текст=Результат.Колонки[й-1].Имя;
		ТабДок.Область(1,й).Шрифт=Новый Шрифт(ТабДок.Область(1,й).Шрифт, ,, Истина);
	конеццикла;
	для й=1 по Результат.Количество() цикл
		для ы=1 по Результат.Колонки.Количество()-1 цикл
			ТабДок.Область(й+1,ы).Текст=строка(Результат[й-1][ы-1]);
		конеццикла;
	конеццикла;

 

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

 

Потрясающая точность прогноза! Но, я думаю, все уже догадались - в чем здесь "секрет". Я проверяю работу модели на тех же данных, которые использовались для ее построения. Конечно же это неправильно. Разобьем исходные данные на две части. Первую используем для построения модели, а вторую для поверки точности прогноза. Чтобы точно не зависеть от того, в каком порядке данные попадали в подборку, воспользуемся генератором случайных чисел.

	Макет=РеквизитФормыВЗначение("Объект").ПолучитьМакет("ИсходныеДанные");
	ТЗМодель=новый ТаблицаЗначений;
	ТЗМодель.Колонки.Добавить("ПлощадьУчастка");
	ТЗМодель.Колонки.Добавить("ГодПостройки");
	ТЗМодель.Колонки.Добавить("Площадь1этажа");
	ТЗМодель.Колонки.Добавить("Площадь2этажа");
	ТЗМодель.Колонки.Добавить("КоличествоПолныхСанузлов");
	ТЗМодель.Колонки.Добавить("КоличествоСпален");
	ТЗМодель.Колонки.Добавить("КоличествоКомнат");
	ТЗМодель.Колонки.Добавить("Цена");
	ТЗПрогноз=ТЗМодель.Скопировать();
	
	МодельСтроки=новый массив;
	ГСЧ=новый ГенераторСлучайныхЧисел(1969);
	й=0;
	пока й<цел(Макет.ВысотаТаблицы/2) цикл
		сч=ГСЧ.СлучайноеЧисло(2,Макет.ВысотаТаблицы);
		если МодельСтроки.Найти(сч)=неопределено тогда
			МодельСтроки.Добавить(сч);
			й=й+1;
		конецесли;
	конеццикла;
	для й=2 по Макет.ВысотаТаблицы цикл
		если МодельСтроки.Найти(й)=неопределено тогда
			нстр=ТЗПрогноз.Добавить();
		иначе
			нстр=ТЗМодель.Добавить();
		конецесли;
		нстр.ПлощадьУчастка=число(Макет.Область(й,5).Текст);
		нстр.ГодПостройки=число(Макет.Область(й,20).Текст);
		нстр.Площадь1этажа=число(Макет.Область(й,44).Текст);
		нстр.Площадь2этажа=число(Макет.Область(й,45).Текст);
		нстр.КоличествоПолныхСанузлов=число(Макет.Область(й,50).Текст);
		нстр.КоличествоСпален=число(Макет.Область(й,52).Текст);
		нстр.КоличествоКомнат=число(Макет.Область(й,55).Текст);
		нстр.Цена=число(Макет.Область(й,81).Текст);
	конеццикла;

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

	//Прогноз
	Прогноз=РДерево.СоздатьМодельПрогноза();
	Прогноз.ИсточникДанных=ТЗПрогноз;
	Результат=Прогноз.Выполнить();
	
	//Визуализация
	ТабДок.Очистить();
	ТабДок.УстановитьРастягиваниеПоГоризонтали(Истина);
	для й=1 по Результат.Колонки.Количество()-1 цикл
		ТабДок.Область(1,й).Текст=Результат.Колонки[й-1].Имя;
		ТабДок.Область(1,й).Шрифт=Новый Шрифт(ТабДок.Область(1,й).Шрифт, ,, Истина);
	конеццикла;
	для й=1 по Результат.Количество() цикл
		для ы=1 по Результат.Колонки.Количество()-1 цикл
			ТабДок.Область(й+1,ы).Текст=строка(Результат[й-1][ы-1]);
		конеццикла;
	конеццикла;

Теперь картина гораздо ближе к реальной. 

Где-то прогноз довольно точен. Где-то не очень. Для того, чтобы увидеть насколько точен прогноз вообще, вычисляют так называемую Среднюю абсолютную ошибку (Mean absolute error MAE).

СуммаОшибок=0;
для каждого стр из Результат цикл
	СуммаОшибок=СуммаОшибок+макс(стр.Цена-стр.ЦенаПрогнозЗначение,стр.ЦенаПрогнозЗначение-стр.Цена);
конеццикла;
СредняяАбсолютнаяОшибка=СуммаОшибок/Результат.количество();

 

В нашем случае средняя абсолютная ошибка будет вот такой

 

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

 

 

Мы видим, что на 730 исходных строк получено 703 листа в дереве решений. Т.е. большинство групп состоит ровно из одного элемента. Какое будет стандартное отклонение в случае 1 элемента? Самое лучшее, круглый 0. Только это так не работает. Как и вообще везде в статистике, нам нужно иметь не один и не два и даже не десять случаев, чтобы оперировать средними значениями. Другими словами нельзя давать оценку на основании одного уникального случая. Наше дерево решений получилось чересчур подробным, или "переученным" (overfitting). Это надо исправить. Те, кто повнимательнее, могли заметить что у меня появился еще один параметр.

	Анализ.Параметры.МинимальноеКоличествоСлучаев.Значение=0;

В этом параметре мы можем задать минимальный размер группы и, таким образом, избежать "переучивания". По умолчанию там стоит 0, т.е "не задано". На практике это приводит к тому, что дерево строится что называется "до упора". Не спешите пенять на на разработчиков платформы. Они все сделали правильно. Дело в том, что не существует никакой формулы, по которой можно было бы вычислить оптимальный минимум в каждом конкретном случае. Если бы такая формула была, то самого Data science не было бы, а был бы еще один раздел математики. В математике доказали теорему Пифагора, и все. Бери любой треугольник и все будет строго по этой формуле. А в Data science все не так. Тут нет доказательств, а есть только "работает" или "не работает". Прогноз совпадает с реальностью? Вот вам и доказательство. Поэтому, берешь и делаешь цикл с перебором различных вариантов, с целью выбрать лучший. "Ты ж программист" )))

	//Подготовка
	Анализ=новый АнализДанных;
	Анализ.ТипАнализа=Тип("АнализДанныхДеревоРешений");
	Анализ.ИсточникДанных=ТЗМодель;
	Анализ.Параметры.ТипУпрощения.Значение=ТипУпрощенияДереваРешений.НеУпрощать;
	
	МинСредняяАбсолютнаяОшибка=99999;
	ЛучшийРазмер=0;
	для й=1 по 10 цикл
		Анализ.Параметры.МинимальноеКоличествоСлучаев.Значение=50+й*10;
		РДерево=Анализ.Выполнить();
		
		//Прогноз
		Прогноз=РДерево.СоздатьМодельПрогноза();
		Прогноз.ИсточникДанных=ТЗПрогноз;
		Результат=Прогноз.Выполнить();
		
		//Визуализация
		ТабДок.Очистить();
		ТабДок.УстановитьРастягиваниеПоГоризонтали(Истина);
		СуммаОшибок=0;
		для каждого стр из Результат цикл
			СуммаОшибок=СуммаОшибок+макс(стр.Цена-стр.ЦенаПрогнозЗначение,стр.ЦенаПрогнозЗначение-стр.Цена);
		конеццикла;
		СредняяАбсолютнаяОшибка=окр(СуммаОшибок/Результат.количество(),4);
		если СредняяАбсолютнаяОшибка<МинСредняяАбсолютнаяОшибка тогда
			МинСредняяАбсолютнаяОшибка=СредняяАбсолютнаяОшибка;
			ЛучшийРазмер=50+й*10;
		конецесли;	
	конеццикла;
	
	ТабДок.Область(1,1).Текст="Лучший минимальный размер группы "+строка(ЛучшийРазмер);
	ТабДок.Область(1,1).Шрифт=Новый Шрифт(ТабДок.Область(1,1).Шрифт,,,Истина);
	ТабДок.Область(2,1).Текст="Лучшая средняя абсолютная ошибка "+строка(МинСредняяАбсолютнаяОшибка);
	ТабДок.Область(2,1).Шрифт=Новый Шрифт(ТабДок.Область(1,1).Шрифт,,,Истина);

В результате получим

 

Можно сказать, что наше достижение совсем небольшое. Но это всего лишь один из множества моментов, и он работает! Существует большое количество способов улучшения модели. Один из самых очевидных: можно добавить к нашим 7 колонкам еще парочку. Поглядеть вдумчиво на список колонок и выбрать самые подходящие. Есть, конечно, и другой путь. Повыбирать 9 колонок из 80 всеми возможными способами. Следует только учесть, что в этом случае у нас будет больше 200 миллиардов итераций. В общем, чтобы решать задачи в области Data science нужно иметь или очень хорошую интуицию или очень мощную вычислительную технику. А зачастую требуется и то, и другое. Впрочем, наша задача считается совсем несложной. И вы можете сами попробовать добиться хороших результатов. На учебных данных, которые использовал я, или на своих собственных.

В приложении обработка с учебными данными.  

Обработка тестировалась на управляемых формах. Платформа 8.3.19.1467. Код обработки полностью открыт.

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    151538    833    397    

841

Инструментарий разработчика Программист Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки.

9360 руб.

17.05.2024    20337    58    42    

106

Инструментарий разработчика Программист Платформа 1С v8.3 Платные (руб)

OneRPA - платформа роботизации рутинных операций, в основе которой лежит платформа 1С:Предприятие. Данная платформа позволяет использовать современные технологии роботизации, не теряя при этом наработки, которые были созданы в ходе автоматизации. При этом платформа роботизации сохраняет все преимущества платформы 1С: гибкость, кроссплатформенность, мобильный и Web доступ, простоту расширения. Ну и конечно же роботы создаются и сопровождаются простыми специалистами 1С, при этом не обязательно программистами. Self hosted версия

300000 руб.

03.03.2021    14177    12    27    

36

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Платформа 1С v8.3 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя.

6900 руб.

20.08.2024    3822    22    6    

36

Пакетная печать Печатные формы Инструментарий разработчика Программист Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

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

18000 руб.

06.10.2023    13985    35    7    

69

Инструменты администратора БД Инструментарий разработчика Роли и права Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

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

10000 руб.

10.11.2023    9069    32    10    

56

SALE! %

Инструментарий разработчика Инструменты администратора БД Системный администратор Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

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

4800 3840 руб.

14.01.2013    185370    1127    0    

899

Инструментарий разработчика Программист 8.3.14 1С:Конвертация данных Россия Платные (руб)

Расширение для конфигурации “Конвертация данных 3”. Добавляет подсветку синтаксиса, детальную контекстную подсказку, глобальный поиск по коду.

15000 руб.

07.10.2021    16735    6    29    

42
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Indgo 413 06.06.22 11:09 Сейчас в теме
Блокчейн - не попорло, теперь новая тема ДатаСайнс?
Тут как не крути - либо 1С-ник, либо Аникейщик ;-)
2. mkalimulin 1228 06.06.22 11:14 Сейчас в теме
(1) Рад вас видеть! У вас что новенького? Ничего?
Lenten; smtkachev_1cbit; DoReMu; +3 Ответить
3. Indgo 413 06.06.22 11:16 Сейчас в теме
(2) У меня голова как то болеть начинает, после того как я представлю, что гигабайты данных закину в ваш макет (Макет=РеквизитФормыВЗначение("Объект").ПолучитьМакет("ИсходныеДанные"))
4. mkalimulin 1228 06.06.22 11:26 Сейчас в теме
5. mkalimulin 1228 06.06.22 14:16 Сейчас в теме
(3) Кстати, тут не мешало бы посчитать. В учебных данных 1400 сделок, каждая из которых описывается 79 параметрами. И это 450 килобайт примерно. Даже если мы добудем откуда-то данные на 1.4 млн сделок, это все еще будет меньше одного гигабайта. Память большинства современных вычислительных устройств спокойно все это пережевывает
6. Indgo 413 06.06.22 14:20 Сейчас в теме
(5)
ных 1400 сделок, каждая из которых описывается 79 параметрами. И это 450 килобайт примерно. Даже если мы добудем откуда-то данные на 1.4 млн сделок, это все еще будет меньше одного гигабайта. Память большинства современных вычислительных устройств спокойно все это пережевывает

Откуда? ну из кубов.. в край из 1С

import cudf
from cuml.cluster import DBSCAN

... 

from dask.distributed import Client
client = Client(cluster)

# Read CSV file in parallel across workers
import dask_cudf
df = dask_cudf.read_csv("/path/to/csv")

# Fit a NearestNeighbors model and query it
from cuml.dask.neighbors import NearestNeighbors
nn = NearestNeighbors(n_neighbors = 10, client=client)
nn.fit(df)
neighbors = nn.kneighbors(df)
Показать


Это вам к примеру как из csv затягиваются данные в Видеопамять RTX3060-3090
7. Indgo 413 06.06.22 14:41 Сейчас в теме
(5)А это как вам пересчитать ваш приватный блокчейн
import cudf
from cuml.cluster import DBSCAN

# Create and populate a GPU DataFrame
gdf_float = cudf.DataFrame()
gdf_float['0'] = [1.0, 2.0, 5.0]
gdf_float['1'] = [4.0, 2.0, 1.0]
gdf_float['2'] = [4.0, 2.0, 1.0]

# Setup and fit clusters
dbscan_float = DBSCAN(eps=1.0, min_samples=1)
dbscan_float.fit(gdf_float)

print(dbscan_float.labels_)
Показать
8. Diversus 2327 06.06.22 16:42 Сейчас в теме
Тема интересная. Спасибо за подробный разбор.
Думаю тема не до конца раскрыта, где это можно применять?
В вашем прогнозе, как я понял, вы предсказываете цену жилья по характеристикам, по уже осуществившемся сделкам.
Приведите пример, если не сложно, что еще можно так считать?
18. mkalimulin 1228 07.06.22 19:18 Сейчас в теме
(8) Кстати. На этот вопрос есть еще и смешной ответ. Регрессию используют для того, чтобы заполнять пустые значения в базе данных, чтобы хорошо работала... регрессия )))
9. mkalimulin 1228 06.06.22 17:57 Сейчас в теме
(8) Если оставаться в разделе недвижимости, то я совершенно точно знаю, что, например Cian, вычисляет срок т.н. экспозиции квартиры (т.е. как долго вы будете искать покупателя). Можно цену автомобиля определять. Avito это делает. Правда, я подозреваю, что он определяет не реальную цену, а цену, за которую то или иное авто обычно выставляют на продажу.
Вообще, регрессия - это универсальный инструмент. С его помощью вы можете выявлять связи, которые от вас по каким-то причинам были скрыты. Это не последняя статья. Дальше я расскажу об этом подробнее
Diversus; +1 Ответить
14. s22 22 07.06.22 12:24 Сейчас в теме
(9)
(8) Если оставаться в разделе недвижимости, то я совершенно точно знаю, что, например Cian, вычисляет срок т.н. экспозиции квартиры (т.е. как долго вы будете искать покупателя). Можно цену автомобиля определять. Avito это делает. Правда, я подозреваю, что он определяет не реальную цену, а цену, за которую то или иное авто обычно выставляют на продажу.
Вообще, регрессия - это универсальный инструмент. С его помощью вы можете выявлять связи, которые от вас по каким-то причинам были скрыты. Это не последняя статья. Дальше я расскажу об этом подробнее


"связи, которые от вас по каким-то причинам были скрыты" - жесть. регрессия выявляет только явные связи.
У регрессии нет скрытого слоя (или аналога).
15. mkalimulin 1228 07.06.22 12:41 Сейчас в теме
(14) Все явное когда-то было тайным
10. tormozit 7218 07.06.22 10:41 Сейчас в теме
В ИР тоже можно развлекаться с этим анализом данных
DmitrySinichnikov; evgen7938; ixijixi; +3 Ответить
11. mkalimulin 1228 07.06.22 11:21 Сейчас в теме
(10) Я надеюсь, что следующие статьи этого цикла дадут вам материал для добавления в ИР
12. RustIG 1728 07.06.22 11:57 Сейчас в теме
инструмент "Анализ данных" хорошо описан в книге Радченко издание 2007года "Практическое пособие разработчика"
13. mkalimulin 1228 07.06.22 12:08 Сейчас в теме
(12) Что вам больше всего понравилось в том описании?
16. RustIG 1728 07.06.22 12:43 Сейчас в теме
(13) Михаил, я поддерживаю все ваши начинания - начну с этого. Мне нравится , что вы иначе смотрите на 1с, чем я.
Я добавил коммент только для справки.
...в свое время для получения сертификата Профессионал по платформе 8.1 надо было знать механизм (или инструмент) Анализ данных. Я в свое время читал, изучал его. Как сейчас - нужен ли для сертификата Проф для управляемых форм - не знаю.
...это было давно, я не помню нюансов, но там были примеры разные - мне понравились...но участвовать в дискуссии не могу - по существу нечего добавить
17. mkalimulin 1228 07.06.22 13:05 Сейчас в теме
(16) Показательно, что из последующих редакций эту главу изъяли
19. 2tvad 70 09.06.22 08:47 Сейчас в теме
Спасибо. И не знал о такой вкусной возможности.

Получается можно так остатки и движения крутить. На предмет страховых резервов...
20. mkalimulin 1228 09.06.22 08:56 Сейчас в теме
(19) Спасибо за отзыв! На самом деле там все еще интереснее. В следующих статьях постараюсь показать
21. starik-2005 3080 21.11.22 20:34 Сейчас в теме
(20) ждем-с. Заказал себе 13600kf - будет чем занять....
22. mkalimulin 1228 27.11.22 22:14 Сейчас в теме
23. Lenten 26 06.12.22 14:14 Сейчас в теме
Прежде, чем обращаться к методам объекта "АнализДанных", не помешает разобраться как это работает в принципе. Математика тут совсем простая, если не сказать примитивная. Тем более должно быть удивительным - что из этой простоты можно получить. Вообще описаний метода регрессионного анализа существует чуть ли не миллион. Для разных людей подойдут разные. Я же попробую дать описание, подходящее для программистов.


сколько же воды. Вот нафига так писать?
24. mkalimulin 1228 06.12.22 14:17 Сейчас в теме
(23) Самому не очень нравится. Попробую лучше, извините
Оставьте свое сообщение