Разбор задачки на loginom «Случайная категория»

На работе не сильно много задач, решил немного поучиться. Удалось отхватить курс «Аналитик данных» в Фин Универе с поддержкой гос-ва. В качестве первого модуля изучаем пакет аналитики — loginom.

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

Задача была взята с отборочного тура Loginom Хакатон 2019. Нужно создать компонент «Случайная категория».

Входные данные:

На входе у нас две таблицы. Первая содержит список из N объектов с уникальными идентификаторами ID. Вторая таблица задаёт закон распределения дискретной случайной величины. Это случайное значение будем называть категорией (оно строкового типа).

Результат:

Список из N объектов с уникальным ID и присвоенная случайная категория из таблицы 2 с учетом закона распределения, заданного таблицей 2.

Дополнительно:

Дополнительно даётся набор данных hakaton_sales.lgd, в котором представлена историческая информация по продажам. Набор состоит из следующих полей:

  • Дата — дата продажи;
  • ID клиента — уникальный ID клиента;
  • Код товара — ID приобретенного товара;
  • Кол-во — кол-во приобретенного товара;
  • Сумма — сумма, потраченная клиентом.

Решение:

Из исходного набора данных подготовим требуемые для задачи массивы:

Группировка ‘список объектов’ — это выборка уникальных ID клиентов, а ‘распределение категорий’ — это группировка кода товара по количеству приобретенного товара.

Фактически, мы получаем абсолютное распределение товара в продажах. Т.е. если «Товара А» было продано больше, чем «Товара Б» в два раза, то ожидается, что данная категория товара будет встречаться в два раза чаще при использовании нашего компонента ‘случайная категория’.

Идея реализации

С помощью калькулятора мы легко можем добавить поле со случайным значением в таблицу 1. После этого, нужно как то присоединить таблицу 2, пользуясь ‘весами’ категорий. Если использовать компоненты из секции программирования — js или python, то нужные операции не сложно выполнить. Как пример, вот решение с использованием компонента js.

Реализация на JS

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

‘Нарастающий итог’ позволяет нам преобразовать ‘вес’ категории в шкалу категорий:

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

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

Реализация без JS

Преподаватель решил, что использование программирования — это оверинжениринг, так же он запретил использовать компонент ‘Цикл’.

Основная проблема — это сопоставить шкалу и таблицу 1. Мне удалось придумать, как это сделать используя компонент ‘Квантование’.

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

Узел ‘Диапазон’ на базе скользящего окна, позволяет превратить шкалу в диапазоны значений.

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

Используйте метод ‘внешние диапазоны’.

Т.к. квантование добавляет множество лишних полей, то для приведения к конечному результату, я еще использую модуль ‘Параметры полей’.

Мало букафф? Читайте есчо !

Хлебные крошки, версия 1.2

Июль 8, 2018 г.

Очередное обновление WP плагина Genzel Breadcrumbs. Версия 1.2. Что нового? Переработана логика "монтирования" Монтирование позволяет задать несколько условий в части выражения "what" (что монтировать?). К примеру, можно указать что монтировать ...

Читать

Фриланс без иллюзий: когда отказаться — лучший выбор

Апрель 29, 2025 г.

За годы фриланса я выработал для себя критерии или тревожные сигналы, к которым стоит прислушаться ещё до старта проекта. В этой статье делюсь своим опытом: ...

Читать

Тайная клинопись современных врачей

Май 28, 2012 г.

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

Читать

Как запретить Drupal использовать sites/default для неизвестных хостов

Июль 30, 2025 г.

В Drupal при использовании мультисайтовой конфигурации (sites/sites.php) существует скрытая особенность: если домен не найден в $sites, Drupal по умолчанию загружает настройки из sites/default. Это может привести к неожиданным проблемам: Открытие ...

Читать
 

Комментарии к «Разбор задачки на loginom «Случайная категория»»

Понравилась статья? Есть вопросы? - пишите в комментариях.



Комментарий:

Много комментариев в “Разбор задачки на loginom «Случайная категория»”

  1. Вероника:

    Здравствуйте! Можно вопрос, в моем задании сказано посчитать накопительный итог с помощью функции Data(“ИмяПоля”, RowNum()-1) и кэширования рассчитываемого поля. Подскажите, пожалуйста, каким образом это можно сделать??