Применение математических достижений в решении сложных задач бизнеса

25.05.20

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

Как правило, самые сложные задачи решаются с точки зрения математики очень легко. Но чтобы найти правильное решение, важно понять бизнес-цель, которую достигает эта задача. О практическом применении математических достижений для эффективного решения сложных задач бизнеса на конференции Infostart Event 2019 Inception рассказал Дмитрий Мишнов.

Меня зовут Дмитрий Мишнов. Я руководитель проектов, с продуктами 1С работаю около 12 лет. Сам я по образованию математик, и как-то так еще с университета сложилось, что интересы у меня связаны с разработкой и построением экспертных систем, использованием различных инновационных продуктов. В то время инновационными были нейросети, они и сейчас набирают все большую и большую популярность, а также аналитические системы – статистические анализаторы.

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

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

Поэтому я призываю всех разработчиков, которые хотят развиваться, хотят, чтобы у них были какие-то профессиональные результаты (у них и в компании, в которой они работают), чтобы они не шли по простому пути – когда просто есть какое-то техзадание, и мы делаем это техзадание за зарплату. Я призываю разбираться в том, насколько адекватно построено техзадание, насколько оптимален алгоритм, который предлагает его реализовать.

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

 

История вопроса

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

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

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

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

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

 

Задача оптимального распределения товаров по магазинам

 

 

Первая задача – это задача оптимального распределения товаров по магазинам. Это боль почти любой торговой компании, у которой есть розничная сеть.

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

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

Очевидная задача – каждый с этим сталкивается. Обычно сидит суперумный человек, который говорит: «Я сейчас открою отчеты, сделаю там выборку, увижу, сколько куда переместить товаров, и все будет нормально».

Так и происходит. Этот человек, который сидит и думает, как все это сделать, здесь представлен в левом нижнем углу. Какие у него есть входные данные?

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

 

Метод решения задачи распределения

 

 

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

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

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

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

Так вот:

  • Оборачиваемость плюс поправка на достаточность статистики (мы как-то корректируем, иногда занижаем рассчитанные компьютером показатели количества, которые он рассчитал, как потребность) – в результате получается ожидаемая потребность товаров на каждый магазин.
  • Плюс у нас уже есть остатки на центральном складе (то, что мы можем отгрузить), и есть остатки – то, что уже в магазине лежит.
  • С учетом этой информации мы получаем уже распределение товаров по магазинам.

Может так получиться, что потребность товара выше, чем те остатки, которые есть в нашей сети. Как в этом случае поступать? Очевидно, что нужно перемещать эти товары туда, где они лучше всего продаются. Здесь тоже очевидный алгоритм, который можно спокойно использовать.

Какие в этой задаче могут быть ограничения:

  • Размер складов магазинов. Есть очень часто, особенно на столичных рынках, ограничения складского места в магазинах. Мы не можем туда привезти больше некоторого объема или больше некоторого веса. Здесь этот фактор тоже можно учитывать и в моменте распределения выбирать именно те товары, которые наиболее важны для нашего магазина – те товары, на которых мы более всего зарабатываем, и их в первую очередь отгружать.
  • Грузоподъемность и объем транспорта – тот транспорт, который к нам возит товары в магазины, не может погрузить больше, чем это физически возможно.
  • Периодичность перевозок. Для какого-то магазина у нас одна периодичность – например, каждые три дня. Где-то магазин далеко находится – там раз в семь дней и т.д. Это тоже можно обязательно учитывать.
  • Плюс есть еще некоторый фактор ассортиментной матрицы. Например, у меня по моему опыту было даже требование заказчика, что какой-то товар, даже если он не продается всегда, все равно должен быть в магазине. Как правило, это связано с топовыми товарами, чтобы люди приходили и знали, что он всегда там будет – не факт, что они его купят, но их это интересует, они могут прийти и отвлечься на какой-то другой товар, сделать какую-то конверсию с другими уже товарами.

 

Результаты решения задачи распределения

 

 

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

  • Так как у нас учитывается оборачиваемость, а не просто статистика продаж, это решение отлично работает для новых товаров. Мы начинаем замерять, насколько быстро товар начинает продаваться. Даже если мы небольшое количество отгружаем в магазин, мы уже понимаем скорость, с которой это у нас продается.
  • Повысилась эффективность товарных запасов – мы стали продавать больше, чем раньше. Мы оптимизировали потребность в товарах для покупателей, сделали более гибкой, и тем самым мы повысили и лояльность покупателей, и возможность, чтобы покупатели могли к нам прийти и купить конкретный товар.
  • Снизились трудозатраты – это очень важно. Когда есть некоторый отдел, который занимается этими распределениями, и есть какая-то быстрорастущая торговая сеть (например, год назад у нее было 20 магазинов, а через год у нее стало 150 магазинов), то тот ручной труд, который изначально был, начинает отнимать у этих людей очень большое время. Они начинают говорить, что не успевают, что нужно искать еще людей в отдел. А когда в этой сфере есть какая-то автоматизированная система, мы можем просто ее использовать. Конечно, нужно проверять за ней, что она рассчитала, но все равно это очень сильно снижает трудозатраты. И мы можем просто это время, которое мы высвобождаем у наших логистов, использовать для других задач в нашем бизнесе.
  • И, как следствие того, что увеличилась эффективность товарных запасов – у нас увеличилась выручка в товарной сети. На моей практике она выросла примерно на 15%.

 

Задача формирования ценообразования для товаров с условно-постоянным спросом

 

 

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

 

 

Рассмотрим упрощенную задачу – нужно организовать ценообразование для товаров с условно-постоянным спросом.

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

И, например, у нас есть организация, которая начала производить какой-то товар, и мы ожидаем на этот товар условно-постоянный спрос. Аналогичного товара у конкурентов нет. Мы не можем замерить, по какой цене нам продавать, потому что конкуренты такое не продают. У нас появляется задача – с какой ценой нам продавать? Мы можем брать этот товар, мы знаем его себестоимость.

  • Мы можем выставить его по высокой цене и продавать его меньше, потому что спрос будет меньше, так как цена выше.
  • Мы можем выставить по более низкой цене. Тогда у нас будет спрос больше, и количество продаж больше.

Но где этот баланс? Где найти оптимум – по какой цене его продавать?

 

 

Чтобы найти оптимальную цену продажи товара, можно использовать алгоритм решения стандартной математической «Задачи о многоруком бандите».

Задача очень интересная и простая – она легко гуглится, к ней есть детальное описание, описан алгоритм.

Мы приходим в казино с некоторым количеством монет. А в казино есть некоторое количество «одноруких бандитов» («однорукий бандит» – это автомат с ручкой, который выдает какой-то результат – либо ты ничего не выиграл, либо у тебя какой-то выигрыш) – есть N таких автоматов. Мы кидаем монетку, крутим, получаем выигрыш и т.д. Таким образом, расходуем все монетки.

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

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

Эта задача имеет оптимальное решение. Я не буду углубляться в то, как именно она решается – она решается не самым простым алгоритмом, но его может запрограммировать любой программист. Но есть теорема, которая доказывает асимптотическую оптимальность этого алгоритма.

 

 

Мы можем свести нашу задачу из бизнеса про цены (про которую мы сейчас говорили) к алгоритму решения математической задачи про многоруких бандитов:

  • у нас есть N одноруких бандитов – для нашей задачи это N вариантов цен (определяем минимальные и максимальные цены, определяем некоторый шаг, с которым мы можем эти цены разбить);
  • прайс – это цена;
  • а Gross – профит для каждой цены (валовая прибыль). Что такое валовая прибыль, я думаю, объяснять не надо – это то, сколько компания зарабатывает с продаж. В принципе, это одна из самых главных целей любой коммерческой компании – зарабатывать, увеличивать свою валовую прибыль.

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

По оси X – это у нас итерации, с которыми проходит каждое событие (на первой итерации у нас одна цена, на второй итерации – другая и т.д. до девятой итерации).

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

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

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

 

Динамическое ценообразование

 

Как мы можем улучшить существующий алгоритм? Мы сделали некоторую модель, которая нам дает статическую цену. Классно, мы зарабатываем в среднем максимальную валовую прибыль. Но мы можем определить некоторые метрики и учитывать:

  • время года;
  • будни\выходные;
  • и т.д.

Например, летом товар продается с одной ценой (и при этом мы летом имеем максимальную валовую прибыль), а зимой он продается с другой ценой. Например, летом можно с максимальной прибылью продавать мороженое, а зимой – кофе. Условно, на что выше спрос, за что люди готовы платить.

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

Есть некоторые метрики, которые, может быть, даже и не очевидны вам. Их можно искать с помощью программ, которые называются статистические анализаторы – в том числе и для 1С есть решения на Инфостарте. Мы можем как-то выискивать эти метрики в данных, которые у нас есть, решая, таким образом, как раз эту задачу динамического ценообразования.

 

Примеры задач, которые можно решать математическими методами

 

 

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

  • Первая задача – это задача оптимального закупа товаров при условии ограничения бюджета и опять же, складского места. Эта задача похожа на ту задачу, которую мы первой обсуждали (задача распределения товаров по магазинам), только здесь нам требуется товар не с центрального склада на магазины переместить, а понять – сколько на центральный склад закупить товара, чтобы нам хватило на нашу сеть. Такую задачу я тоже решал – мы выводили некоторую величину доходности торговой точки для определенного товара. Например, у нас есть торговая точка, где находится товар, и мы высчитываем, сколько прибыли он нам приносит на этой торговой точке (например, определенная модель телефона в среднем по сети нам приносит 1500 рублей в день с каждого магазина). Опять же, максимизация. Нужно всегда отталкиваться от того, какие цели у компании. Если у нашей торговой компании цель – зарабатывать больше, соответственно, мы должны как-то к этой цели двигаться и от нее искать алгоритмы.
  • Задача оптимального размещения товаров на витрине. У нас есть варианты, как нам расставить товары. Мы можем их поставить снизу, справа, сверху, сбоку. Можем компоновать что ближе, что дальше – в зависимости от того, где находится вход у нас в магазине. Соответственно, меняя разную компоновку нахождения товаров в магазине, мы можем увеличивать доходность. Мы не меняем запасы. Мы просто меняем местами товары и смотрим, что у нас получается. Более того, мы не сами это определяем, что с чем поменять, а система говорит нам – сегодня ты переставляешь этот товар туда, а этот товар на это место. И система смотрит эти результаты после того, как этот товар переставили. И дальше уже следующую рекомендацию дает. Таким образом, мы тоже приходим к какой-то модели, которая дает нам увеличение нашей выручки.
  • Задача определения ассортиментной матрицы. Я думаю, многие из вас эту задачу решали. Нам нужно понимать ключевые товары, которыми мы торгуем. Здесь есть детализация – мы можем составлять ассортиментную матрицу для отдела закупа не просто на статистике, а считать ее по каким-то метрикам, с какими-то дополнительными инструментами.
  • И четвертая задача – это определение оптимальной мотивации сотрудников. Ее мне тоже приходилось решать. Опять же, у нас есть продавцы, и есть магазины. Продавцы обслуживают клиентов, продают товар. Нам нужно понимать, как нам мотивировать этих продавцов, чтобы они продавали больше. Мы строим разную мотивацию. Мы можем просто отчислять им определенный процент от продажи – но как решить, какой именно процент будет оптимальным? Поскольку цель компании – зарабатывать больше, нам нужно оптимизировать валовую прибыль. Мы можем построить математическую модель и решить эту задачу очень просто – мы можем с помощью нескольких итераций, с помощью нескольких тестов прийти к оптимальному решению. Некоторая оптимальная мотивация, которая дает нам и заинтересованность продавцов, и при этом у нас не сильно валовая прибыль уменьшается. Мы находимся в разумном, оптимальном положении.

 

Вопросы

 

  • Я не очень понимаю аналогию, почему вы считаете задачу про многорукого бандита марковским (случайным) процессом. Люди помнят, какая цена была вчера и, если устраивать такую резкую смену цен, многие будут считать: «Да они обнаглели! Это вчера стоило 200 рублей, а сегодня уже 300». И даже если человеку вполне по карману купить этот товар, и цена в принципе разумная, тот факт, что товар подорожал в полтора раза, будет препятствовать покупке и исказит вам статистику.
  • Да, я согласен, что есть такая проблема, но эта проблема будет наблюдаться только на этапе, когда система обучается.
  • Вот именно, вы обучите систему на некорректных данных и получите соответствующий результат.
  • Почему на некорректных? Мы сделали цену 300, но покупатели не покупают.
  • Можно ли как-то учитывать в модели поправку на репутационный риск?
  • Вы имеете в виду, что лояльность покупателей страдает? Можно сделать фактор максимального увеличения цены, которое мы можем делать – чтобы как-то занижать. Да, мы будем решать задачу дольше, но мы будем этот фактор уменьшать. Это все тоже можно настраивать. Более того, я вам могу сказать точно, что сейчас крупные торговые компании, в том числе РЖД – если вы с разных телефонов, с разных устройств заходите на их сайт и хотите купить какой-то билет, там будут разные цены. И у меня есть знакомый, у которого iPhone, и он специально купил себе телефон на Android, чтобы у него была возможность покупать билеты дешевле.
  • Я правильно понимаю, что в первом примере (про рекламу) примерно то же самое – там параметризация, перебор итераций и подбор параметров для оптимизации кликов. Там же не выручка – там конверсия какая-то.
  • В примере, который я приводил про оптимизацию показов баннеров, необязательно имелись в виду именно баннеры – это могла быть просто оптимизация показов контента на некотором сайте. Эта задача решается по аналогии с задачей о многоруком бандите. У нас есть некоторая доходность, про которую мы говорим, причем она необязательно измеряется в деньгах – нашей задачей может просто увеличение времени нахождения человека на нашем ресурсе. Здесь важно определить целевую функцию. Очень часто проблема в том, что решается задача с неправильной целевой функцией, и получаются плохие результаты. Важно правильно ставить целевую функцию. Мы должны не увеличивать выручку, мы должны увеличивать валовую прибыль. Такие вещи, казалось бы, очевидные. Но часто изначально, когда мы понимаем, что задача есть, и ставим неправильную целевую функцию, мы находим решение не той задачи, которая нам нужна.
  • Хотелось бы узнать больше конкретики – какие математические аппараты вы используете? Линейное программирование или что? И второй вопрос – все это писалось на 1С? И как 1С проявляла себя по времени работы и т.д.?
  • По поводу того, какие аппараты использовались: во-первых, я призываю всех не придумывать велосипед с квадратными колесами. Если есть какое-то готовое решение, если есть на том же Инфостарте какие-то решения – смело их применяйте. Может быть, чуть-чуть обтесать, обточить и использовать. В моей практике мы в основном делали решение сразу на 1С. У нас там не было суперсложных в обучении систем, которые требуют больших серверных ресурсов. Но в принципе ничего не мешает вам какие-то дополнительные модули, которые есть, и какие-то библиотеки, которые есть уже, существуют, подключать в 1С и использовать их методы. Здесь я только за. И наоборот, даже рекомендую, если такие библиотеки есть, их разумно использовать, потому что скорость, конечно, в 1С гораздо ниже. И если нам нужно какие-то сложные системы обучения запускать, конечно, лучше использовать внешние библиотеки.
  • Вопрос по задаче с распределением по складам. Там было сказано, что вы изначально опробовали этот метод на небольшой партии нового товара. Насколько эта партия была небольшая? Потому что все эти методы практически неприменимы для небольших партий. Это другая уже партия – дискретная и штучный подбор должен быть.
  • Распределение по складам мы пробовали не на небольшой партии, мы делали распределение всех товаров. Я говорил о том, что, когда у нас, например, появляется новый товар, система не может сказать: «давайте этот новый товар распределим в эти магазины». Первая итерация ввода нового товара в сеть идет от человека – по-другому никак. Но когда товар в сети уже появился (обычно он появляется в сети сначала в каком-то небольшом объеме), и есть некоторая статистика, от которой мы можем отталкиваться (пусть она еще не достаточная) – мы уже можем делать какие-то корректировки (относительно тех изначальных количеств, которые были закуплены в нашу сеть). Я об этом говорил. И мы сразу видим скорость продажи. Я рассказывал про оборачиваемость – что ее показатель очень важен как раз для новых товаров, чтобы мы видели этот показатель и продавали больше. Потому что есть товары, которые имеют большой спрос на ближайшие три месяца, а на четвертый месяц спрос падает, потому что выходит что-то новое, и мы на эти моменты можем просто не успеть среагировать, пока у нас наберется статистика. Рынок сейчас такой, что конкуренция очень большая, и нам нужно быть в динамике, нужно быть очень быстрыми и быстро принимать решение – чтобы больше зарабатывать и выжить в этой конкуренции.

 

****************

Данная статья написана по итогам доклада (видео), прочитанного на конференции INFOSTART EVENT 2019.

 

30 мая - 1 июня 2024 года состоится конференция Анализ & Управление в ИТ-проектах, на которой прозвучит 130+ докладов.

Темы конференции:

  • Программная инженерия.
  • Инструментарий аналитика.
  • Решения 1С: архитектура, учет и кейсы автоматизации на 1С.
  • Управление проектом.
  • Управление продуктом.
  • Soft skills, управление командой проекта.

Конференция для аналитиков и руководителей проектов, а также других специалистов из мира 1С, которые занимаются системным и бизнес-анализом, работают с требованиями, управляют проектами и продуктами!

Подробнее о конференции.

 


См. также

Метод Дугласа-Пойкера для эффективного хранения метрик

Математика и алгоритмы Платформа 1C v8.2 Конфигурации 1cv8 Россия Абонемент ($m)

На написание данной работы меня вдохновила работа @glassman «Переход на ClickHouse для анализа метрик». Автор анализирует большой объем данных, много миллионов строк, и убедительно доказывает, что ClickHouse справляется лучше PostgreSQL. Я же покажу как можно сократить объем данных в 49.9 раз при этом: 1. Сохранить значения локальных экстремумов 2. Отклонения от реальных значений имеют наперед заданную допустимую погрешность.

1 стартмани

30.01.2024    1753    stopa85    12    

33

Алгоритм симплекс-метода для решения задачи раскроя

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

Разработка алгоритма, построенного на модели симплекс-метода, для нахождения оптимального раскроя.

19.10.2023    4415    user1959478    50    

34

Регулярные выражения на 1С

Математика и алгоритмы Инструментарий разработчика Платформа 1С v8.3 Мобильная платформа Россия Абонемент ($m)

Что ж... лучше поздно, чем никогда. Подсистема 1С для работы с регулярными выражениями: разбор выражения, проверка на соответствие шаблону, поиск вхождений в тексте.

1 стартмани

09.06.2023    7454    4    SpaceOfMyHead    17    

56

Модель распределения суммы по базе

Математика и алгоритмы Платформа 1С v8.3 Россия Абонемент ($m)

Обычно под распределением понимают определение сумм пропорционально коэффициентам. Предлагаю включить сюда также распределение по порядку (FIFO, LIFO) и повысить уровень размерности до 2-х. 1-ое означает, что распределение может быть не только пропорциональным, но и по порядку, а 2-ое - это вариант реализации матричного распределения: по строкам и столбцам. Возможно вас заинтересует также необычное решение этой задачи через создание DSL на базе реализации текучего интерфейса

1 стартмани

21.03.2022    7852    7    kalyaka    11    

44

Изменения формата файлов конфигурации (CF) в 8.3.16

Математика и алгоритмы Платформа 1С v8.3 Бесплатно (free)

Дополнение по формату файлов конфигурации (*.cf) в версии 8.3.16.

16.12.2021    4444    fishca    13    

36

Интересная задача на Yandex cup 2021

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

Мое решение задачи на Yandex cup 2021 (frontend). Лабиринт. JavaScript.

12.10.2021    8832    John_d    73    

46

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

Математика и алгоритмы Анализ учета Платформа 1С v8.3 Анализ и прогнозирование Бесплатно (free)

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

31.08.2021    7797    dusha0020    8    

70
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. pm74 199 25.05.20 11:50 Сейчас в теме
Понятно , что без математики никуда. А конкретика где ?


Эта задача имеет оптимальное решение. Я не буду углубляться в то, как именно она решается – она решается не самым простым алгоритмом, но его может запрограммировать любой программист

это в мемориз однозначно
SP2000; sm.artem; mpeg1989; asupsam; kuzyara; starik-2005; dnikolaev; CyberCerber; +8 Ответить
2. Mishnov 24 25.05.20 12:14 Сейчас в теме
(1) Задача о многоруком бандите легко гуглится. А также гуглится ее асимптотически оптимальное решение(алгоритм). На видео есть фраза о том, что это легко можно найти в интернете.
Если я бы ушел в математику и рассказывал как она решается, то все было бы достаточно скучно для публики и это заняло бы весь доклад.
7. dnikolaev 177 25.05.20 14:27 Сейчас в теме
(1) точно. я тоже не увидел никакой конкретики. общие фразы. я руководитель проекта( какого?) .. делал нейросети (для чего??) ..

Михаил. ну правда. )) выглядит как будто сам придумал легенду и сам в нее поверил.
3. CheBurator 3119 25.05.20 12:29 Сейчас в теме
Хороший материал!
также мучают вопросы закупа для розничных точек. и центральный складик есть. все хорошо и подходит.
но.
проблема в том, что у клиента очень подробно расписана номенклатура (с целью саксимизации удовлетовренности клиента типа ответить на вопрос клиента " а есть у вас чехольчик с красненькими цветочками на голубом фоне"). Соответственно , статистика по каждому экземпляру очень малая, так как даже на ходовые модели ассортимент большой, и каждый экземпляр (за исключением совсем ходовых) - малая оборачиваемость какая может быть если за полгода конкретный чехол продался 10 раз а то и меньше?
В итоге - закуп - практически ручная обработка с низкой эффективностью.
Как выявить что является "товаром"...? до каких "характеристик" товара следует укрупнять номенклатуру?
4. Mishnov 24 25.05.20 13:01 Сейчас в теме
(3)
алая оборачиваемость какая может быть если за полгода конкретный чехол продался 10 раз а то и меньше?

Да, сталкивался с такой проблемой именно с чехлами и аксессами для телефонов. Тут по разному можно подходить к решению данной задачи:
1) Укрупнение до категории товара на конкретную модель. Например, чехлы для Xiaomi Note 4 Pro. Считаем потребность общую как будто это один товар. А далее это количество распределяем на разные цвета, цветочки и т.д.
2) Мотивируем продавцов на продажу аксессов для телефонов, т.к. на них бОльшая маржа. В этом случае качественнее прогнозируем потребность именно в телефонах и к каждому телефону, перемещаемому на точку, кладем 2-3 неповторяющихся аксесса впридачу. Помимо этого, если покупателя не устроила расцветка или дизайн или качество, должна быть возможность у продавца посмотреть наличие аксессов к этому телефону на других ближайших точках и либо направить туда покупателя, либо заказать этот аксесс к себе на точку, чтобы покупатель смог зайти и приобрести попозже.
Но, на практике скажу, что аксессы в розничных сетях приобретают как раз те, кто сильно их выбирать не будет и выберет из того, что есть. Более требоватеные просто купят телефон, а потом найдут нужный себе чехол через интернет.

2 схема точно работает, опробовано в деле.

Насколько часто покупатель покупает разные аксессы без покупки телефона? На этот вопрос нужно для начала ответить, чтобы выбирать подходящую схему обеспечения. В учетной системе должна быть возможность замерять такую аналитику.
Аксессы, как и сами телефоны, товар очень быстро устаревающий в наше современное время, поэтому необходимо об этом не забывать и всегда делать поправку при закупе. Тут без экспертных знаний не обойтись.
5. CheBurator 3119 25.05.20 13:41 Сейчас в теме
(4) "1) Укрупнение до категории товара на конкретную модель. Например, чехлы для Xiaomi Note 4 Pro. Считаем потребность общую как будто это один товар. А далее это количество распределяем на разные цвета, цветочки и т.д."
- до этого я и сам дошел. Вопрос - как "это количество распределяем на разные цвета, цветочки и т.д." - методом экспертного мнения?
6. CheBurator 3119 25.05.20 13:48 Сейчас в теме
(4)
Насколько часто покупатель покупает разные аксессы без покупки телефона?

- точки телефонами не торгуют. аксесами только - чехлами и сопуткой. большой неликвид. вот и думаю, как ликвидировать/уменьшить. пока вменяемого не придумал, кроме как первым этапом перейти на более "укрупненный" товар. Опять же - укрупнять насколько? до модели телефона? - вряд ли? как минимум до типов чехлов - силикон/принт/кожа/итд. Опять же вопрос- наскольо до типов чехлов укрупнять? что является ЗНАЧИМЫМИ признаками для продажи, на которые ориентироваться при закупе? делить модели/рисунки ну хотя бы на "мужские/женские/унисекс"...? по цветам делит? потому что есть явно более обороачиваемые ЦВЕТА - красный и черный для кожи. как вычислить вообще значимые для продажи признаки товара, на которые опираться при закупе?
8. Mishnov 24 25.05.20 14:39 Сейчас в теме
(6)
. Опять же вопрос- наскольо до типов чехлов укрупнять? что является ЗНАЧИМЫМИ признаками для продажи, на которые ориентироваться при закупе? делить модели/рисунки ну хотя бы на "мужские/женские/унисекс"...? по цветам делит? потому что есть явно более обороачиваемые ЦВЕТА - красный и черный для кожи. как вычислить вообще значимые для продажи признаки товара, на которые опираться при закупе?

Укрупнять до такого объема, чтобы статистика была достаточной, для того, чтобы сделать выводы. Критерии достаточности можно получить экспертным мнением по Вашей сфере. Если Вы хотите получить значимые признаки для продажи, то можно решать данную задачу некоторым статистическим анализатором.
1) Нужно ввести свойства товара, которые мы можем замерить из занести в учетную систему. В Вашем случае это может быть цвет, материал, рисунок, размер и т.д.
2) Вносим значения свойств для каждого товара в учетную систему.
3) Строим целевую функцию. Например, мы хотим рассчитать какие самые значимые признаки у нас влияют на валовую прибыль(Валовая прибыль = Продажи - Себестоимость).
4) Запускаем статистический анализатор по собранным данным и свойствам. Статистический анализатор перебирает все измерения. Сначала по одному измерений(например, цвет), потом по парам измерений(цвет + материал), потом по тройкам измерений и т.д.
По каждому набору измерений вычисляется целевая функция и сравнивается со средним значением целевой функции в целом по поляне по данному виду товара. Берем в расчет только те случаи, где при определенных наборах измерений наша статистика для нас достаточна. Так вот после этих всех замеров выбираем ТОП 10-20 отклонений в плюс - это и будет самые значимые наборы признаков, которые позволяют нам хорошо зарабатывать(по которым сильно больше среднего валовая прибыль). А ТОП 10-20 снизу будут те товары, которые нам особо результата не приносят или даже приносят отрицательный результат.

Этот подход работает только в том случае, если у нас отличная объемная статистика продаж. Если статистики совсем не много, то такие инструменты результата не принесут.
9. CheBurator 3119 25.05.20 15:15 Сейчас в теме
(8)
отличная объемная статистика продаж

это понятно...
проблема в том что если "разложить" по характеристикам - то да, красного покупают много. извините, но красный мне закупить надо на конкретную модель.
если разложить по моделям - цвет-модель - получится, например, вообще малая статистика по конкретномуцвету-конкретной модели. и дальше как тогда? опять "экспертное мнение"..?
.
все проблемы с короткоживущим товаром. например диски с фильмами когда в ходу были - диск ждивет неделя-две. за это время 0-20 продаж. Вопрос - дальше как планировать на такой статистике?...
возможно - и скорее всего - я чего-то не понимаю...
10. CheBurator 3119 25.05.20 15:17 Сейчас в теме
(8)
Если Вы хотите получить значимые признаки для продажи, то можно решать данную задачу некоторым статистическим анализатором.

- была у меня такая мысль. получить выборку, разложенную по "характеристикам" - скажем так - не проблема.
а "статистический анализатор" - это что где и как пользоваться? готовый пакет какой-нить тим математики/матлаба? или что-то иное специализированное:?
13. Mishnov 24 25.05.20 18:13 Сейчас в теме
(10)
а "статистический анализатор" - это что где и как пользоваться? готовый пакет какой-нить тим математики/матлаба? или что-то иное специализированное:?

Именно в таком виде я готового не встречал. На базе 1С такие вещи реализовывали. Получали выборку, обрабатывали и записывали результат в отдельный документ. А потом анализировали результаты.
11. CheBurator 3119 25.05.20 15:18 Сейчас в теме
(8)
если у нас отличная объемная статистика продаж.

- "в граммах это сколько"..? как это понять - достаточно статистики или нет?
12. papami 55 25.05.20 17:39 Сейчас в теме
(11) В автобизнесе тот же VAG анализирует все продажи по рынку и с учетом локальных продаж рекомендует конкретному ДЦ что держать на складе.

Потом еще в расчетах учитывают выборки. Грубо говоря количество покупок, а не количество товара. Условно пришел один человек и купил разом 100 флешек. Нужно эти 100 штук брать в расчет или нет? А если это не флешки, а гвозди? Все очень индивидуально.
14. Mishnov 24 25.05.20 18:18 Сейчас в теме
(11)
Да, все очень индивидуально. Сильно зависит от объема продаж и что за товар. Насколько спрос на него может быть волонтильным. Можно строить референтный интервал, но как правило все сводится к некоторому простому условию вида "больше 15 продаж в месяц на одной ТТ это достаточная статистика". Соответственно если мы эти 15 продаж разделим еще и по 5 цветам, то наверняка это уже будет недостаточная статистика для того, чтобы доверять ей.
15. CheBurator 3119 25.05.20 18:30 Сейчас в теме
(14) "Соответственно если мы эти 15 продаж разделим еще и по 5 цветам, то наверняка это уже будет недостаточная статистика для того, чтобы доверять ей."
вот про то и речь
16. egorovntn 231 28.05.20 11:31 Сейчас в теме
Нобелевские премии математика не дают, у Нобеля был дуг математик и он видел как много достижений в математике.


Получили премию следующие математики:
Бертран Рассел. Нобелевская премия по литературе, 1950
Юджин Вигнер. Нобелевская премия по физике, 1963
Леонид Канторович. Нобелевская премия по экономике, 1975
Джон Нэш. Нобелевская премия по экономике, 1994 (Игры разума)
17. TerveRus 02.06.20 09:58 Сейчас в теме
Так вот, кто придумал, что Яндекс.Такси дороже на айфонах?)
Оставьте свое сообщение