Привет братвам и сестричкам! Прошло много времени с тех пор, как я в последний раз писал на Medium. Мои оправдания? В последнее время я работаю над некоторыми другими интересными инициативами. Однако мое отсутствие длилось недолго. Теперь я снова здесь — после того, как так долго жаждал чувства выполненного долга, возникающего в результате решения проблем, использования моих знаний и навыков для создания ценности. Есть интересные идеи? Ударь меня ;)

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

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

Обзор продукта

Здесь я играю очень осторожно, сосредотачиваясь только на продаже закусок и напитков. Это проверенная стратегия! Поскольку я не собираюсь тратить время на создание здесь бизнеса по продаже торговых автоматов, с моей стороны было бы разумно минимизировать риски, когда это возможно. Поскольку в наши дни конкуренция усиливается, операторы проявляют творческий подход , и часто вы замечали автоматы, продающие другие расходные материалы, такие как сладкая вата, кофе, мороженое и, совсем недавно, букет в лучших местах! Что дальше? Давайте заглянем в Японию, не так ли? :Р

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

Разработка функций (данные о продуктах и ​​транзакциях)

Через облачную базу данных я мог получить доступ к данным о продажах в реальном времени на моей машине и объединить их с данными о продуктах, хранящимися в Интернете (личные Google Таблицы). После слияния я получу некоторые новые функции, которые, как мне кажется, будут полезны для последующего анализа, например, profit_to_max_profit_ratio (объем), profit_per_hour (ставка), items_per_hour (скорость) и т. д. Конечно, существует множество других способов разработки новых измерений, но я всегда предпочитаю начинать с простых и интуитивно понятных для интерпретируемости.Если вы хотите вознаградить меня некоторыми предлагать инженерные идеи, вы можете сделать это в разделах комментариев или через DM. Спасибо. :)

Многомерный анализ (численные данные)

Время поиска сокровищ, друзья! Что вы заметили на графиках выше? Я предоставлю вам одно примерное наблюдение здесь:

Для продуктов с более высокой удельной стоимостью маржа прибыли, как правило, сокращается по мере того, как ценники приближаются к «верхней границе» покупательной способности покупателей.

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

Распределение продаж продукции

После отчаянного ожидания в течение месяца (сразу после нашего Дня Независимости) я наконец смог провести анализ полных данных. Подумайте только о том, как вы распаковываете товары для электронной коммерции — момент истины! Посмотрите на гистограмму с накоплением ниже; технически это табель успеваемости моего торгового автомата за август 2022 года. Как вы можете заметить, продажи относительно лучше в середине недели. Это потому, что я получаю свой доход в основном от работающих взрослых. Транзакции, как правило, замедляются ближе к выходным, но не останавливаются, так как всегда будут люди, работающие по выходным.

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

Определение возможностей пополнения запасов (метод оптимизации Дженкса)

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

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

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

В этом случае пригодился бы алгоритм оптимизации естественного разрыва Дженкса. На одномерных данных он стремится минимизировать дисперсию внутри группы и максимизировать дисперсию между классами, как и k-Means. С помощью модуля jenkspy оптимальное количество естественных перерывов будет определяться итеративно на основе тех же принципов, что и в методе k-средних. Это намного лучше, чем фиксировать время вручную — как только это будет автоматизировано, мы также сможем зафиксировать изменение поведения в случае дрейфа распределения!

К счастью, есть один свободный слот для прерывания обслуживания около 19:00 после работы. Пополнение запасов обычно занимает до 30 минут, и я сопоставил их после каждого перерыва, чтобы в дальнейшем выбрать лучший слот среди предложений. Визуально кажется, что сейчас 03:00. Приятно знать, но этого не произойдет!

Кластеризация продуктов (k-Means)

Я сказал, что мы быстро взглянем на пополнение запасов, но я работал дольше, чем ожидал. Ой! Теперь сосредоточимся на продажах. Я снова выполняю k-Means неконтролируемое машинное обучение в этом эксперименте с моей комбинированной транзакцией + данными о продукте. Поскольку я делал то же самое для этого проекта в сфере недвижимости ранее, я призываю вас вернуться/посетить эту статью для более глубокого погружения в мой подход, мыслительный процесс и рассуждения (особенно в отношении интерпретации сгруппированных результатов).

Здесь кластеризация продуктов — это просто прелюдия к задачам оптимизации позже. Из-за различий в данных я бы не стал тратить слишком много времени на определение каждого кластера здесь, как я это сделал для рынка недвижимости PJ. В этом сценарии из-за минимальной стоимости переключения продукта, меньшего ценника, обилия выбора и т. д. мы можем время от времени наблюдать динамичные, зашумленные, частые данные. Таким образом, на мой взгляд, пока с помощью метода локтя и метода силуэта мы можем определить оптимальное количество кластеров, обеспечивая высокое внутрикластерное сходство и наоборот (что можно визуализировать в уменьшенном размере), мы достигаем наших целей путем получение кластеров хорошего качества. В нашем случае такие межкластерные различия ясно изображаются с помощью диаграмм технических характеристик (например, ratio_profit_max_profit, ratio_items_per_hour, ratio_profit_per_hour).

Реконфигурация слотов продуктов относительно Требовать

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

Короче говоря, для каждого кластера я узнаю, какую часть продаж, c(с плавающей запятой), они фактически внесли, а затем преобразую представление в назначенные слоты, x (целое число) соответственно. Основная цель здесь — уменьшить дельту |integer: slots — float: процент| насколько это возможно, учитывая общее ограничение слота, S.

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

Оптимизация внутри кластеров

Что делать с предложениями дальше? Как настроить слоты в каждом кластере? Давайте еще больше оптимизируем результаты.

Здесь мы хотим максимально увеличить потенциальный доход (просто говоря). Теперь мы назначим коэффициенты в качестве коэффициентов нашим переменным решения для нашей целевой функции. В этом проекте я определил подходящий коэффициент-кандидат a (подсказка: комбинация инженерных функций) для целевой функции. Обратите внимание, что здесь я назначил резервную переменную y_{N+1} с коэффициентом b, так что, когда текущий продукт приводит к тому, что функция целевой ценности падает ниже a определенный порог, наша модель вызовет запрос на удаление/замену продукта (что позволит исследовать). В этой задаче C обозначает максимальное количество слотов, которые может занять продукт — интуитивно мы не хотим, чтобы наша машина была полностью занята одним самым продаваемым продуктом. Разнообразие! Разнообразь! Разнообразьте!

Подведение итогов и заключительные мысли

Вот ваш файл cookie за чтение этой статьи! 🍪

Я знаю, это звучит смешно, но идея превратить бизнес-задачу с торговыми автоматами в проект по науке о данных пришла мне в голову, когда я случайно делал покупки в Sunway Pyramid. Хуже того, в тот вечер у меня был с собой iPad, и я провел следующие 3 часа, размышляя и набрасывая свои мыслительные процессы в кафе. Так что в следующий раз, когда вы заметите меня сидящим в одиночестве в кафе, вы, вероятно, догадаетесь, что происходит… ;P

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

Надеюсь, вам понравилось читать эту статью, мой друг.

Ценность проблемы: -Первоначальные капитальные затраты на машину + Ежемесячный операционный денежный поток.
Время, затраченное на решение проблемы: 18 часов в течение 4 дней.

Если у вас есть какие-либо отзывы или вопросы по этой статье, свяжитесь со мной по адресу [email protected] или оставьте комментарий ниже. Давайте учиться вместе! Спасибо.