Overview
Как часто бывает
Типичный процесс формирования датасетов для моделей машинного обучения обычно состоит из следующих этапов:
- Построение широкой (зачастую очень широкой) витрины, которая включает в себя избыточный набор всех возможных атрибутов
- Построение отдельного датасета для каждой модели на основе атрибутов широкой витрины с использованием дополнительных атрибутов из пользовательских песочниц
- Обогащение датасетов результатами работы других моделей по мере появления данных
В таком случае организация работы с данными при необходимости построения нового датасета выглядит следующим образом:
- Data Scientist (DS) формулирует требования к инженеру данных на новый датасет
- Data Engineer (DE) работает с требованиями, консультирует DS по источникам и алгоритмам, дорабатывает широкую витрину - разбирается в чужих скриптах, добавляет необходимые поля, перепроверяет, что существующие атрибуты не поломались
- DE выполняет сборку датасета, передаёт результаты DS
- DS проверяет датасет и понимает, что какие-то атрибуты рассчитаны неверно, а какие-то не были учтены изначально
- Всё начинается сначала
Работы DE может также проводить DS, но в этом случае до половины рабочего времени DS будет тратиться на подготовку данных, а не на их исследование и анализ.
Такая организация работы с данными выглядит неэффективно.
Feature Store
Что меняется:
- Не используется широкая витрина. DE не тратит время на разбор тысяч строк кода построения широкой витрины, а выстраивает новые потоки данных
- DE дополняет приложение только действительно новыми данными, а не занимается историческим пересчётом сотен атрибутов при появлении очередного типового агрегата, который требуется рассчитать за новый период
- DS получает понятный и удобный каталог переменных с поддержкой документирования и версионирования алгоритмов - больше не надо ковыряться в сотнях разрозненных таблиц, тоннах писем и других документов
- DS самостоятельно создаёт датасет по параметрам, конфигурируя типовые преобразования с использованием конструктора агрегатов и пользовательских формул, что позволяет проводить больше экспериментов за меньшее время и сконцентрироваться на исследовании данных
- DE не занимается ручным построением датасетов, процесс сборки датасета по заданным параметрам становится автоматическим
Управление данными
Каждый объект, будь это таблица или столбец, регистрируется в приложении, что позволяет в будущем работать с данными через интерфейсы приложения без прямых обращений в источник данных.
Регистрация данных является подробным описанием источника данных. Все это делается для:
- Корректной работы движка приложения с данными при выполнении преобразований
- Накопление исторических данных
- Удобство поиска необходимых данных в интерфейсе приложения
Описание источника данных в SDK:
from FSClient.catalogue import (
entity as ent, # <-- Сокращение для удобства
feature as feat,
loader as load
)
new_loader = load.create(
source='table' # <-- Тип источника данных
)
new_loader.config = {
'loader_name': 'CUSTOMER_INFO_HIST', # <-- Название источника данных в каталоге
'description': 'Информация по клиенту из карточки клиента АБС',
'src_schema_name': 'stage', # <-- Схема таблицы
'src_table_name': 'customer_hist', # <-- Название таблицы
'entity': ent.CUSTOMER # <-- Сущность таблицы
}
Выполнение трансформаций над данными
Широкий функционал приложения дает возможность строить датасеты на основе зарегистрированных данных, используя типовые преобразования с использованием конструктора и пользовательских формул. Все это помогает сконцентрироваться на исследовании данных, а не сборе.
Создание датасета в SDK:
my_dataset = ds.create(
entity=ent.CUSTOMER, # <-- Сущность датасета
name='AGG_TRANS_CUSTOMER_DATA',
description='Данные по транзакциям клиентов в разбивке по количеству транзакций'
)
my_dataset.add_feature(
features=[
feat.TRN_AMT.CT_W_V1.alias('TRN_AMT') # <-- список версий фичей на агрегирование
],
agg=[ # список агрегирующих функций
func.sum(),
func.max(),
func.min()
],
domain=[ # условия агрегации
(feat.TRN_CNT.CT_W_V1 <= 10).set(alias='L10'), # <-- количество транзакций меньше 10
(feat.TRN_CNT.CT_W_V1 > 10).set(alias='M10') # <-- количество транзакций больше 10
]
)
Процесс сборки датасета по заданным параметрам становится автоматическим и не требует пользовательского вмешательства.
Благодаря структурированной системе хранения данных обеспечивается высокая скорость расчета датасета, позволяя получать датасеты при разработке решений машинного обучения или для анализа "на лету".
Мониторинг качества загруженных данных
Приложение предоставляет набор инструментов расчета статистик для загруженных данных. Таким образом обеспечивается сквозной мониторинг качества данных на всех этапах трансформаций.
Экспорт/импорт данных и алгоритмов без потерь
Каталогизация в приложении осуществляется не только на уровне объектов в виде источников данных, но и на уровне логических сущностей, таких как алгоритмы. Алгоритмы трансформаций данных в приложении пишутся, оперируя объектами каталогов, то есть по сути ссылками на реальные объекты.
Все это позволяет отделять бизнес-логику от конкретных объектов в БД и, как следствие, переносить ее на другие объекты не только внутри одной той же БД, но и на любую другую.