Data science. Начало

06.06.22

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

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

Скачать файлы

Наименование Файл Версия Размер
Обработка с учебными данными
.epf 203,04Kb
2
.epf 203,04Kb 2 Скачать

Обратимся к документации по платформе. В самом начале главы, посвященной анализу данных и прогнозированию, авторы прямо и без обиняков говорят нам, что не будут ничего говорить нам о способах использования того, что они описывают. И это, на мой взгляд, и есть первая и едва ли не основная причина того, что объект "АнализДанных" до сих пор применяется далеко не так активно, как он того заслуживает. Все-таки 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. Код обработки полностью открыт.

См. также

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

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

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

12000 руб.

02.09.2020    116191    635    389    

686

Infostart PrintWizard

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

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

18000 руб.

06.10.2023    6470    13    4    

35

SALE! 30%

PowerTools

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

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

3600 2520 руб.

14.01.2013    176449    1064    0    

840

Infostart УДиФ: Управление данными и формами

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

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

10000 руб.

10.11.2023    2698    4    1    

26

Многопоточность. Универсальный «Менеджер потоков» 2.1

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

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    98627    238    97    

292

Выполнение произвольного кода или запроса с параметрами через Web-сервис (замена COM-подключений)

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

В процессе работы в 1С часто возникает потребность получить данные из другой базы.  Обычно это делается через COM-соединение, и время выполнения запроса при этом оставляет желать лучшего. В данной публикации представлено универсальное решение, позволяющее практически моментально выполнить произвольный код или запрос с параметрами в другой информационной базе через Web-сервис.

2400 руб.

24.09.2019    23280    15    15    

31

Менеджер конфигураций 1С

Инструментарий разработчика Платные (руб)

Менеджер конфигураций 1С — альтернативный стартер информационных баз 1С:Предприятие.

1800 руб.

21.02.2023    6330    4    34    

16

Data science. 1С и Python

Языки и среды Бесплатно (free)

Это вторая статья из серии Data science. Почему Python? Зачем он может понадобиться 1С-нику.

27.11.2022    14252    mkalimulin    61    

60
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Indgo 337 06.06.22 11:09 Сейчас в теме
Блокчейн - не попорло, теперь новая тема ДатаСайнс?
Тут как не крути - либо 1С-ник, либо Аникейщик ;-)
2. mkalimulin 1047 06.06.22 11:14 Сейчас в теме
(1) Рад вас видеть! У вас что новенького? Ничего?
smtkachev_1cbit; DoReMu; +2 Ответить
3. Indgo 337 06.06.22 11:16 Сейчас в теме
(2) У меня голова как то болеть начинает, после того как я представлю, что гигабайты данных закину в ваш макет (Макет=РеквизитФормыВЗначение("Объект").ПолучитьМакет("ИсходныеДанные"))
4. mkalimulin 1047 06.06.22 11:26 Сейчас в теме
5. mkalimulin 1047 06.06.22 14:16 Сейчас в теме
(3) Кстати, тут не мешало бы посчитать. В учебных данных 1400 сделок, каждая из которых описывается 79 параметрами. И это 450 килобайт примерно. Даже если мы добудем откуда-то данные на 1.4 млн сделок, это все еще будет меньше одного гигабайта. Память большинства современных вычислительных устройств спокойно все это пережевывает
6. Indgo 337 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 337 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 2303 06.06.22 16:42 Сейчас в теме
Тема интересная. Спасибо за подробный разбор.
Думаю тема не до конца раскрыта, где это можно применять?
В вашем прогнозе, как я понял, вы предсказываете цену жилья по характеристикам, по уже осуществившемся сделкам.
Приведите пример, если не сложно, что еще можно так считать?
18. mkalimulin 1047 07.06.22 19:18 Сейчас в теме
(8) Кстати. На этот вопрос есть еще и смешной ответ. Регрессию используют для того, чтобы заполнять пустые значения в базе данных, чтобы хорошо работала... регрессия )))
9. mkalimulin 1047 06.06.22 17:57 Сейчас в теме
(8) Если оставаться в разделе недвижимости, то я совершенно точно знаю, что, например Cian, вычисляет срок т.н. экспозиции квартиры (т.е. как долго вы будете искать покупателя). Можно цену автомобиля определять. Avito это делает. Правда, я подозреваю, что он определяет не реальную цену, а цену, за которую то или иное авто обычно выставляют на продажу.
Вообще, регрессия - это универсальный инструмент. С его помощью вы можете выявлять связи, которые от вас по каким-то причинам были скрыты. Это не последняя статья. Дальше я расскажу об этом подробнее
Diversus; +1 Ответить
14. s22 19 07.06.22 12:24 Сейчас в теме
(9)
(8) Если оставаться в разделе недвижимости, то я совершенно точно знаю, что, например Cian, вычисляет срок т.н. экспозиции квартиры (т.е. как долго вы будете искать покупателя). Можно цену автомобиля определять. Avito это делает. Правда, я подозреваю, что он определяет не реальную цену, а цену, за которую то или иное авто обычно выставляют на продажу.
Вообще, регрессия - это универсальный инструмент. С его помощью вы можете выявлять связи, которые от вас по каким-то причинам были скрыты. Это не последняя статья. Дальше я расскажу об этом подробнее


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

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


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