Для правильного принятия бизнес-решений необходимо владеть наиболее полной и подробной информацией о состоянии дел в компании. Но нередко такая информация ограничена годовыми да квартальными отчётами.
Этого, безусловно, мало. Для эффективного анализа на предприятиях часто внедряют системы бизнес-аналитики (англ. business intelligence, далее — BI-системы). Сегодня мы хотим поделиться несколькими советами, которые могут помочь при создании BI-системы в вашей компании (и которые помогли бы нам самим год назад).
Проектирование
Храните исходные данные, а не срезы по ним
Никогда не стоит надеяться на то, что фиксированных графиков и отчётов будет достаточно. Наоборот, менеджеры будут просить вас построить всё более детальные графики. И уточнений будет масса.
Например, к нам поступил запрос о том, сколько денег потратили холостые гетеросексуалы из Калифорнии возрастом до 25 лет за каждый месяц прошлого года. Чтобы быть готовым ответить на подобный вопрос, нам необходимо иметь под рукой не только таблицу с полными профилями пользователей, но и таблицу с их платежами.
Анализируйте «сырые» данные, а не готовые срезы
Старайтесь анализировать «сырые» данные. Не делайте предварительной агрегации. Помните: как только вы делаете агрегацию данных, вы теряете информацию.
Например, необходимо получить статистику о количестве новых контактов в день для жителей Нью-Йорка. Если делаете анализ непосредственно самих данных, то вы можете подтвердить полученные результаты конкретными примерами: кто, когда и с кем.
Забудьте про синдром «Not Invented Here»
Помните, что вы — не первый, кто создает BI-систему. И для многих задач уже существуют готовые решения. Потому большая часть разработки может просто сводиться к сбору данных и конфигурированию программ анализа.
Сегодня в Badoo используется колоночная база данных Vectorwise и аналитический «фронтэнд» Pentaho. Таким образом практически всё сводится к загрузке данных в БД.
Помните о заказчиках
Системой, которую вы проектируете, будут пользоваться обычные менеджеры, у которых слова «первая производная по времени» могут вызвать нестерпимую изжогу. Интерфейс к данным должен быть предельно простым и однозначным. Именно поэтому не стоит заново изобретать интерфейс. Лучше посмотреть, что уже придумано до вас.
У многих BI-инструментов есть демостраницы, где можно посмотреть на конкретный инструмент в действии. Желательно попросить будущих пользователей BI-системы оценить, насколько понятен им тот или иной инструмент.
Не откладывайте создание BI-системы
Проектирование, разработка и внедрение BI-системы — процесс довольно долгий и сложный. Это тот самый случай, когда 9 женщин не смогут родить ребёнка за один месяц. Внедрение BI-системы в Badoo ещё не завершено, но первые значимые результаты были достигнуты как раз примерно через 9 месяцев после начала. В составе BI команды было 3 человека плюс 1 консультант.
Разработка
Собирайте данные асинхронно
Если вы хотите начать собирать данные о поведении пользователей, то делайте это асинхронно. Можно писать в логи, можно писать в Scribe. Помните, что сбор данных об объекте надо проводить без заметного вмешательства в поведение этого объекта. Да и в принципе неполадки в BI-системе не должны отражаться на исследуемом объекте.
При разработке инфраструктуры для сбора информации о поведении пользователей мы знали о большом объёме обрабатываемых данных. И все эти данные было необходимо собрать в одном хранилище данных. Разумеется, любые проблемы в работе этого хранилища должны быть незаметны пользователям сайта. Потому было решено записывать первичные данные в логи, и только затем перекладывать их в хранилище отдельным фоновым скриптом. В дальнейшем логи и парсеры были заменены сервисом Scribe.
Забудьте про нормализацию
Не бойтесь «денормализовать» данные. Так, если у вас есть таблица с пользователями и таблица с их платежами, возможно, вам окажется полезна таблица с парами «пользователь-платёж» (результат соединения двух таблиц). С одной стороны, вы получаете жёсткое дублирование данных. С другой стороны, вместо сложной операции «join» на каждый запрос вы получите более простую операцию подсчёта уникальных значений.
В качестве примера эффективности работы с упомянутой таблицей возьмём запрос, который выдаст количество потраченных денег женщинами и мужчинами прошлом году:
SELECT sum(money), gender FROM UserPayment WHERE gender IN (‘M’,’F’) and year(payment_date) = year(now()) GROUP BY 2
Этот запрос может быть легко «распараллелен», так как всё, что нужно сделать СУБД для его выполнения — обработать таблицу за один проход.
Следите за потоками данных
Обязательно нарисуйте для себя схему перемещения данных в системе. Следите, чтобы не возникало циклов (обратных связей).
Не допускайте, чтобы исследуемые объекты получали информацию из BI-системы. Например, менеджер после анализа данных решает отправить напоминание по почте определённой группе пользователей. Непосредственно список получателей не должен формироваться в BI-системе.
Внедрение
Проверяйте собранные данные
При внедрении BI-системы необходимо проверять поступающие данные, причём делать это нужно очень тщательно. Например, если вы получаете параметры пользователей системы, обязательно проверьте распределение дат регистрации, дней рождения и т.д. В идеале стоит проверить распределение значений в каждом столбце или даже в парах столбцов.
Часто при добавлении новых данных встречается ситуация, когда значение столбца во всех строках одинаково. Практически всегда причиной является человеческий фактор — разработчик просто забыл про этот столбец.
Лишних данных не бывает, бывают повторы
Когда вы смотрите, какие данные нужно импортировать в систему, помните, что лишних данных не бывает. Бывают повторы данных. И вот к повторам нужно отнестись с подозрением. Лучше взять дополнительные данные и убедиться, что у вас есть те же самые значения, чем заранее отказаться от повторов. Это помогает выявить ошибки в системах.
Именно так в процессе внедрения BI-системы в Badoo было исправлено множество ошибок. Это были и ошибки в профилях пользователей, и ошибки в данных о городах, и даже несколько ошибок в финансовых данных.
Не стремитесь за 100% соответствием
Сравнивая и сопоставляя данные из разных источников, не гонитесь за 100% соответствием. Если вы достигли 95% совпадения, этого, скорее всего, уже достаточно. Вы всё же не бухгалтерскую систему проектируете, когда за каждой копейкой следить надо.
Очень часто расхождение данных вызвано объективными причинам, например, такими как рассинхронизация времени. Например, время регистрации платежа в собственном «биллинге» и в платёжной системе. Разница во времени в 1 секунду 31 декабря может привести к тому, что один и тот же платёж будет датирован разными годами.
Заключение
Эти советы не универсальны, на каждый из них можно найти исключение. Не нужно их воспринимать как абсолютную истину. Наоборот, чем больше контр-примеров вы сможете привести, тем лучше вы поймёте суть этих правил. А если у вас есть конкретные вопросы, мы постараемся на них ответить.
Автор: Badoo