Skip to content

Instantly share code, notes, and snippets.

@AndreiChenchik
Created January 20, 2020 16:34
Show Gist options
  • Save AndreiChenchik/d469a02c7ee0c3c8c7b837eaee22611f to your computer and use it in GitHub Desktop.
Save AndreiChenchik/d469a02c7ee0c3c8c7b837eaee22611f to your computer and use it in GitHub Desktop.

Инструкция для джуниор-аналитиков в Y analyzer

Разберем процесс анализа данных по этапам.

Постановка и уточнение задачи

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

Давайте разберем на что может повлиять каждый из факторов:

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

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

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

Что еще можно почитать на эту тему:

  • Системное мышление,
  • Критическое мышление,
  • Формулирование гипотез в бизнесе.

Сбор данных

Учитывая, что вы четко сформулировали задачу - вы уже должны примерно понимать, какие данные вам нужны, теперь пришло время их получить. Тут ситуация может складываться по разным сценариям, рассмотрим самые распространенные из них.

Требуемых данных нет

Во-первых возможно это ошибочное мнение и данные все же где-то есть, обратитесь к Data инженерам вашей компании, посмотрите структуру таблиц баз данных, и используя ваше понимание задачи попытайтесь прикинуть как вы сможете использовать существующие данные для решения вашей задачи, возможно данные придется комбинировать. Если же данных нет, то подумайте, как их можно собрать: возможно вы сможете быстро настроить аналитику в продукте, который анализируете используя популярные сервисы: Google Analytics, Firebase, Amplitude, Yandex Metrica. Возможно вы сможете быстро провести онлайн опрос ваших пользователей используя Google Forms или Yandex Forms.

Требуемые данные есть в хранилищах компании, но доступа к ним нет

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

У вас есть доступ к данным

Все просто - выгружайте то, что вам необходимо. Если вы работаете с большими объемами данных не забудьте поставить в известность администраторов, чтобы не вызвать внеплановый скачок нагрузки на серверах. Если вы работаете со сторонними сервисами, то будет полезно обращаться к API для выгрузки данных методами python, тут вам поможет библиотека requests или библиотеки под каждое хранилище данных. В случае если вы работает с SQL сервером - воспользуйтесь библиотекой sqlalchemy.

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

  • При сборе/выгрузке данных вам нужно оценить объем выборки статистическими методами, чтобы вы смогли эффективно работать с данными и не обрабатывать/собирать излишние объемы, которые не требуются в задаче, а также не начинать работу раньше времени с недостаточным объемом данных. Также
  • Загружать данные в ваш проект можно используя библиотеку pandas.

Предобработка данных

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

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

Неэффективные типы данных

Иногда при загрузке данных pandas автоматически будет выбирать не самый оптимальный тип хранения данных. Например если у нас есть набор данных о покупках в двух магазинах сети и мы хотим сравнить статистики по этим магазинам, а в данных для идентификации магазина используется его адрес. Стандартное поведение pandas выставить адресу магазина тип obj (string), что приведет к использованию лишних объемов памяти, ведь для каждой покупки будет указываться полная строка адреса и это займет очень много места в памяти, если объем выгрузки велик. В данном случае можно использовать кодирование присвоить адресам разные короткие int ID, либо перевести столбец в тип category, что позволит оптимизировать использование памяти.

Дубликаты

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

Полные дубликаты - можно удалять сразу, используя метод drop_duplicates() в библиотеке pandas.

Частичные дубликаты - можно искать ориентируясь на айди, например на email пользователя, или хеш файла. В данном случае нужно будет принимать решение какой вариант наблюдения считать валидным, тут можно ориентироваться на первый из списка.

Выбросы

Иногда при подсчете некоторых статистик внятной оценке картины мешают выбросы, например если вы необходимо рассчитать среднее время ожидания клиента в очереди магазина. Если нас будет несколько наблюдений с ожиданием в пару часов, а все остальные будут укладываться в 5 секунд, то эти несколько наблюдений могут существенно изменить картину статистику, что приведет к ошибочным выводам. В данном случае полезно ограничивать выборку наблюдений отфильтровывая аномальные наблюдения. Для поиска аномалий рекомендую использовать оценку 5/95 и 1/99 перцентилей распределения признака, а также строить графики используя seaborn или matplotlib библиотеки. Важно понимать, что не все задания требуют поиска и исключения выбросов, так что этот этап опционален.

Пропуски

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

Типы пропусков:

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

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

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

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

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

Прототип решения

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

В создании прототипа решения поможет ваше понимание бизнеса и взаимосвязей между разными наблюдениями.

В итоге вы должны получить финальный ответ на поставленную задачу.

Проверка реальностью

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

Финализация и подготовка отчета

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

Вернитесь к поставленной задаче и напишите выводы, которые четко отвечают на поставленный бизнесом запрос. Не больше и не меньше. При необходимости - подготовьте презентацию.


На этом все, если будут вопросы, комментарии, предложения - смело вносите правки в эту инструкцию, т.к. этот документ может быть изменен со временем.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment