Exploratory data analysis что это
Чернобровов Алексей Аналитик
Как наглядно показать Data Science: визуализация больших данных
В статье рассмотрены методы и средства визуализации больших данных: цели разведочного анализа и их значимость в Data Science, виды графиков и правила их представления, а также соответствующие инструменты.
Что такое EDA или визуализация данных для Data Science
В отличие от инфографики, которая ближе к дизайну, чем к Data Science, визуализация данных не содержит декоративных элементов, а отражает большие объёмы информации с учетом возможных взаимосвязей [1]. Но в Data Science визуализация данных используется не только для наглядного представления результатов в виде понятных графиков. Это скорее метод быстрого прототипирования, когда с помощью множества визуальных представлений одних и тех же данных аналитик или Data Scientist пытается обнаружить скрытые взаимосвязи и зависимости [2]. Этот подход называется разведочный анализ данных (Exploratory Data analysis, EDA) и применяется для решения следующих задач [3]:
Можно сказать, что EDA – часть процесса подготовки данных к ML-моделированию, когда после этапов выборки и очистки датасета выполняется генерация признаков (рис. 1.).
Рис. 1. Место EDA в Data Science
Кроме того, EDA позволяет Data Scientist’у убедиться в корректной интерпретации результатов и их применимости к желаемому бизнес-контексту. А бизнес-пользователи могут оперативно проверить правильность своих предположений, в т.ч. то, что они задают правильные вопросы. Таким образом, EDA играет роль средства валидации – оценки того, насколько данные соответствуют бизнес-целям. Это особенно важно при работе с Big Data, когда датасет собирается из множества различных источников с разными уровнями точности и детализации. На практике EDA даже приводит к интересным бизнес-инсайтам. Например, определение четкой зависимости суммы чека от времени суток, корреляция числа посетителей с погодными условиями и т.д. [4]
Математическую основу EDA составляют статистика и теория вероятностей, в частности, вероятностные распределения переменных, корреляционные матрицы, факторный анализ, дискриминантный анализ, многомерное шкалирование. В качестве практических инструментов для разведочного анализа используются специализированные математические программы (SAS, Matlab, KNIME, Weka, Orange), системы типа RStudio, оригинальные скрипты на Python и даже встроенные формулы табличных редакторов, таких как Excel и Google Sheets [5]. Подробнее инструменты EDA и визуализации данных рассмотрены далее.
Как показать данные: виды графиков
Выбирая наиболее подходящий вид графика для визуализации данных, следует, прежде всего, определить цель анализа и/или представления информации, например, [6]:
Для этих целей используется более 20 видов различных диаграмм, от линейных графиков до корреляционных матриц. Выбор конкретной диаграммы для визуализации данных также зависит от числа анализируемых переменных и временных периодов (рис. 2.) [7].
Рис. 2. Многообразие диаграмм для визуализации данных
На практике в Data Science наиболее часто используются следующие виды графиков и диаграмм [8]:
Рис. 5. Диаграмма размаха
Рис. 6. Тепловые матрицы для количественного и качественного анализа
Правильно выбранный вид диаграммы для визуализации данных соответствует следующим критериям [1]:
Инструменты визуализации данных
Современный рынок программного обеспечения предоставляет множество инструментов визуализации данных, от бесплатных интернет-сервисов до дорогих корпоративных пакетов: Excel, Google Sheets, Google Data Studio, RStudio, Tableau, Power BI, QlikView, OWOX BI Smart Data, SAS [6]. Большинство из них предоставляет не только встроенные средства для анализа датасетов, но и позволяет настраивать их и адаптировать исходный код к специфике отдельных проектов, а также создавать интерактивные динамические отчеты. Например, в [9] представлен подробный обзор целых 36 инструментов визуализации данных для различных прикладных задач, помимо EDA: картография, инфографика, создание интерактивных дэшбордов и т.д. Примечательно, что часть из них (Chart.js, Raw, Dygraphs, ZingChart, FusionCharts Suite XT, D3.js и многие другие) представляют собой плагины или библиотеки, которые можно интегрировать с другими средствами работы Data Scientist’a [9].
Интересен также сравнительный анализ наиболее популярных инструментов визуализации данных для маркетинговой аналитики, приведенный в [6] (рис. 8).
Рис. 8. Сравнительный анализ 5 популярных инструментов визуализации данных для маркетинговой аналитики
Хотя этот обзор больше относится к аналитике данных, чем непосредственно к Data Science и Big Data, он показывает еще одно важное применение визуализации – построение BI-дэшбордов для мониторинга различных бизнес-показателей (конверсия, характеристики пользователей и пр.) [6]. При проектировании дашбордов не стоит использовать все возможные виды диаграмм, стремясь по максимуму использовать все возможности визуализации: перегруженная витрина данных непонятна и сложна в эксплуатации. Пример удобного интерактивного дэшборда для ТОП-менеджера показан на рисунке 9 [2].
Рис. 9. Дашборд руководителя из Tableau
Заключение
Резюмируя использование методов и средств визуализации данных в Data Science и аналитике Big Data, можно сделать следующие выводы:
Разведочный анализ данных (EDA), ч. 1
Разведочный анализ данных (Exploratory Data Analysis) – предварительное исследование Датасета (Dataset) с целью определения его основных характеристик, взаимосвязей между признаками, а также сужения набора методов, используемых для создания Модели (Model) Машинного обучения (Machine Learning).
Давайте рассмотрим, на какие этапы EDA разбивают. Для этого мы используем данные банка, который автоматизирует выдачу кредитов своим клиентам. В реальной жизни получить такой датасет – довольно дорогое удовольствие, по карману зачастую это только среднему и крупному бизнесу. К счастью, мы располагаем обширным набором переменных (столбцов):
Теперь стало немного понятнее, почему менеджеры по продажам, звонящие из банков, ведут себя так странно? Они располагают именно таким набором данных о Вас.
Довольно увесистый датасет для восприятия, особенно если учесть, что записей в нем – более 40 тысяч. Однако приступим! Для начала импортируем датасет и посмотрим на «шапку». Параметр ‘sep’ используется, чтобы указать на нестандартный разделитель, в данном случае – точку с запятой, которая используется в Apple Numbers.
Итак, нам предстоит пройти несколько этапов разведочного анализа, и среди них будут взаимоисключающие, потому его придется импортировать несколько раз.
Удаление дубликатов
Дублирующие записи не только искажают статистические показатели датасета, но и снижают качество обучения модели, потому удалим полные дублирующие вхождения. Для начала уточним, сколько записей в датасете с помощью свойства Pandas.DataFrame.shape :
Удалим дублирующие записи с помощью Pandas.drop_duplicates() и обновим данные о размере данных:
Pandas нашел и удалил 12 дубликатов. Хоть число и небольшое, все же качество данные мы повысили.
Обработка пропусков
Стоит помнить, что в случае, если пропусков у признака слишком много (более 70%), такой признак удаляют. Проверим, насколько полны наши признаки: метод isnull() пройдется по каждой ячейке каждого столбца и определит, кто пуст, а кто нет, составив датафрейм такого же размера, состоящий из True / False. Метод mean() суммирует все значения True, определит концентрацию пропусков в каждом столбце. На 100 мы умножаем, чтобы получить значение в процентах:
Среди всех признаков слишком много пропусков оказалось в переменной ‘День’:
Возраст 0.000000
Работа 0.801438
Семейный статус 0.194288
Образование 4.201477
Кредитный дефолт 0.000000
Ипотека 0.000000
Займ 0.000000
Контакт 0.000000
Месяц 0.000000
День недели 0.000000
Длительность 0.000000
Кампания 0.000000
День 96.320672
Предыдущий контакт 0.000000
Доходность 0.000000
Колебание уровня безработицы 0.000000
Индекс потребительских цен 0.000000
Индекс потребительской уверенности 0.000000
Европейская межбанковская ставка 0.000000
Количество сотрудников в компании 0.000000
y 0.000000
dtype: float64
Таким образом, переменная подлежит удалению с помощью drop():
Существует несколько способов обозначить пропуски, и зачастую создатели датасета не описывают данные в достаточной мере, и определять, как обозначены пропуски, приходится вручную. Из встреченных доселе обозначений приведу следующие:
Встроенные методы Pandas позволяют с легкостью справиться с первыми двумя разновидностями таких пробелов. Разберемся для начала с категориальными переменными, объединив их в один вектор. Список получится совсем уж нелогичный, но это не столь важно в данной ситуации: мы лишь ищем способы обозначения пропуска.
Из общего списка уникальных значений этих переменных пропуски обозначаются словом «Неизвестно». Для числовых переменных пропуски – число 999 или пустая ячейка.
Процесс обработки пропусков, к счастью, можно сократить с помощью sklearn.impute.SimpleImputer . Мы выбираем все категориальные переменные и применяем стратегию «[вставить вместо пропуска] самое распространенное значение»:
Такой код можно сократить еще с помощью Пайплайнов (Pipeline), однако здесь обработаем каждую переменную построчно.
Признаки, принадлежащие к булевому типу данных, обрабатываются алгоритмом тем же образом. Целевую переменную Y мы не обрабатываем (если в этом столбце есть пропуски, такие строки стоит удалить):
Подобным образом заполняются пустоты в числовых переменных, только стратегия теперь – «вставить среднее значение».
Метод isnull() пробегается по каждой ячейке каждого признака и определяет, пустая ли ячейка, возвращая True / False. Метод mean()
Обнаружение аномалий
Самый легкий способ обнаружить выбросы – визуальный. Мы построим разновидность графика «ящик с усами» для одной из числовых переменных – «Возраст»:
Скучковавшиеся окружности в верхней части изображения – и есть аномалии, и от них, как правило, избавляются с помощью квантилей:
Во второй части статьи о разведочном анализе Вы узнаете про:
Ноутбук, не требующий дополнительной настройки на момент написания статьи, можно скачать здесь.
EDA под другим углом
Поговорим не про еду, а про разведочный анализ данных (exploratory data analysis, EDA) который является обязательной прелюдией перед любым суровым ML.
Будем честны, процесс довольно занудный, и чтобы выцепить хоть какие-то значимые инсайты про наши данные — требуется потратить достаточное количество времени активно используя любимую библиотеку визуализации.
А теперь представим что мы довольно ленивы (но любопытны) и будем следовать этому постулату всю эту статью.
Исходя из этого зададим себе вопрос: нет ли в природе такого хитрого инструмента который бы позволил просто нажать CTRL+ENTER в любимой IDE и вывести на одном лишь экране (без прокруток вниз и бесчисленных микроскопических фасетов) целостную картину с полезной информацией про наш датасет?
При этом держим в голове другую мысль — если такой инструмент и существует, то он не заменит классический EDA, но станет для нас сильным подспорьем для тех случаев когда не стоит часами упарываться по визуализации чтобы быстро подчеркнуть основные паттерны в наших данных.
Структура этой статьи:
Наиболее удобным в качестве примера мне показался Титаник, его размеры не слишком малы как Iris, он имеет малоинформативные переменные, он хорошо изучен и имеет понятные предикторы и что немаловажно — историческую основу.
Тем более, что я нашел на Хабре статью где автор провел достаточно скрупулезный EDA этого набора данных и на основе картинок продемонстрировал найденные выводы. Это будет свое рода наш Baseline.
Ссылка на статью с громким названием для нашего «Baseline_EDA»:
Титаник на Kaggle: вы не дочитаете этот пост до конца.
Чтобы не заморачиваться со скачиванием/чтением csv из сети сразу цепляем из CRAN оригинальный набор данных
Краткий препроцессинг
Данный пример настолько изъезжен в сети препроцессингом вдоль и поперек, что особо обсасывать эту тему не буду, делаю базовые вещи: извлекаю из имени гоноратив (титул) как важный предиктор, по нему делаю медианное заполнение пропусков в возрасте.
title | male | female |
---|---|---|
Mr | 517 | 0 |
Mrs | 0 | 126 |
Miss | 0 | 185 |
Master | 40 | 0 |
Sir | 8 | 0 |
Rev | 6 | 0 |
Dr | 6 | 1 |
Lady | 0 | 2 |
Не все йогурты одинаково полезны…
Обычно на старте анализа откладываю малоинформативные переменные в сторону (откладываю а не безвозвратно удаляю, потому что когда из модели выжал максимум, инжиниринг по некоторым из отложенных переменных дает таки определённый процент прироста качества модели).
Метрикой оценки «полезности» переменной являются freqRatio (соотношение частот самого популярного значения относительно второго значения по частотности) и percentUnique (мощность или cardinality — доля уникального числа значений от общего числа значений)
Детальную справку можно увидеть из пакета caret
?caret::nearZeroVar
Мне наиболее удобно мониторить переменные в двумерной плоскости (прологарифмировав обе оси чтобы не случился overplotting точек в одну маленькую кучу из-за точек-выбросов).
Никогда не задавался вопросом — является ли этот шаг EDA, но пока писал эту статью задумался: мы же сейчас проводим разведочный анализ некой полезности предикторов, их визуальную оценку, так почему ж это не EDA?
Малоинформативными считаем предикторы-выбросы либо по мощности (ось Х) либо по соотношению частот (ось Y) и соответственно откладываем в сторону:
PassengerId; Name; Ticket; Cabin
Эта вселенная дискретна
Для того чтобы понимать как нижеперечисленные библиотеки подготоавливают данные — в этом разделе покажем на небольших примерах что происходит в этих библиотеках на этапе подготовки данных.
На первом шаге необходимо привести все данные к единому типу — часто данные в одном наборе могут быть и категориальными и числовыми, причем числа могут иметь выбросы а категориальные данные — редкие категории.
Для конвертации непрерывных переменных в категориальные можно разложить наши числа по бинам с определённым периодом дискретизации.
Простейший пример разложения на 5 бинов:
Вместо 5 предикторов у нас их теперь 23, зато бинарных:
В общем то на этом трюки по преобразованию заканчиваются, но с этих этапов как раз начинается работа 2-х из 3-х библиотек для нашего «неклассического» EDA.
Далее я знакомлю с функциональностью 3-х библиотек визуализации:
На сцене первая библиотека.
correlationfunnel
correlationfunnel is to speed up Exploratory Data Analysis (EDA)
В виньетке к библиотеке неплохо описана методология, приведу фрагмент расчета корреляции по бинарным значениям
Библиотека предполагает наличие таргета (зависимой переменной) в наших данных и сразу на одной картинке показывает силу и направление взаимосвязи а так же ранжирует по убыванию этой силы образуя визуальную воронку (собственно отсюда и название).
Встроенные в библиотеку функции бинаризации позволяют так же сводить в Others малочисленные категории.
Так как библиотека не работает с целочисленными переменными — преобразуем их в numeric и вернемся к нашему Титанику.
По оси Х у нас сила и направление корреляции, по оси Y наши предкторы, отранжированные по убыванию. Первым сверху всегда отражается таргет т.к. у него самая сильная корреляция с самим собой (-1;1).
Давайте проверим как выводы по этому графику пересекаются с выводами автора нашего «Baseline_EDA».
Следующий график подтверждает теорию, что чем выше класс каюты пассажира — тем больше шансы выжить. (Под «выше»» я имею ввиду обратный порядок, т.к. первый класс выше чем второй и, тем более, третий.)
Сравним шансы выжить у мужчин и женщин. Данные подтверждают теорию, высказанную ранее.
(В целом, уже можно сказать, что основными факторами модели будет пол пассажира)
Также можно проверить гипотезу, что выживают более молодые, т.к. они быстрее двигаются, лучше плавают и т.д.
Как видно, явная зависимость здесь не просматривается.
Давайте введём такой показатель как Процент выживаемости и посмотрим на его зависимость от групп, которые получились на предыдущем этапе
(группы у автора — имеется в виду титул).
Воронка полностью подтверждает найденные выводы автора
Теперь посмотрим на информацию, которую можно получить из количества родственников на корабле.
Очень похоже, что на выживаемость отрицательно влияет как отсутствие родственников, так и большое из количество.
SibSP в воронке явно говорит о том же.
Ну и конечно помимо выводов автора здесь можно увидеть и другие закономерности, удовольствие от созерцания оставлю читателю
Lares
Автор данной библиотеки пошел еще дальше — он показывает зависимости не только на таргет, но и всех на все.
Ranked Cross-Correlations not only explains relationships of a specific target feature with the rest but the relationship of all values in your data in an easy to use and understand tabular format.
It automatically converts categorical columns into numerical with one hot encoding (1s and 0s) and other smart groupings such as “others” labels for not very frequent values and new features out of date features.
По ссылке выше можно посмотреть пример где автор скармливает датасет звездных войн своему пакету и демонстрирует найденные зависимости, я на его странице залип, оч.понравилось.
Попробуем на нашем примере.
Помимо пересечения с выводами на основе цитат в Correlationfunnell приведем отдельные цитаты которые здесь можем увидеть безотносительно таргета:
Также можно обнаружить и другие закономерности. Между возрастом и классом существует отрицательная корреляция, что, скорее всего, связано с более возрастные пассажиры чаще могли себе позволить более дорогую каюту.
Кроме того, стоимость билета и класс тесно связаны (высокий коэффициент корреляции), что вполне ожидаемо.
Третья строка сверху: Fare+P_Class_1
Помимо пересечения с выводами автора тут можно подчеркнуть так же много чего еще интересного, так же оставлю удовольствие от созерцания для читателя.
Помимо опционального выбора топ Х самых сильных инсайтов можно так же отразить всю картину и место этих значимых точек в общей массе
easyalluvial
Здесь автор так же как и в 2-х предыдущих пакетах выполняет на старте бинаризацию числовых переменных, однако дальше его пути с теми библиотеками расходятся: вместо
Числовые переменные раскладываются на категории HH (High High), MH(Medium High), M (Medium), ML (Medium Low), LL (Low Low)
Для начала возьмём наиболее значимые предикторы на основе графика из correlationfunnel:
Далее делаем график
Для цитат автора перерисуем график с использованием соответствующих предикторов
Например, по следующему графику прекрасно видно, что основные группы выживших — это женщины первого и второго класса всех возрастов.
График помимо этого показывает что выжившие женщины 3 класса так же не малочисленная группа
А среди мужчин выжили все мальчики моложе 15 лет кроме третьего класса обслуживания и небольшая доля мужчин более старшего возраста и в основном из первого класса.
Сказанное подтверждается, но опять таки видим потоки выживших мужчин 3 класса в категории возраста LL, ML.
Все выше было про пакет «easyalluvial», однако автор написал второй пакет «parcats» который поверх plotly делает вышеприведенный график интерактивным (как в заголовке этого раздела).
Это дает возможность не только видеть tooltip-контекст, но и переориентировать потоки для лучшего визуального восприятия. (к сожалению пока библиотека не очень оптимизирована и на титанике у меня подтормаживает)
Бонус
Библиотека easyalluvial помимо разведочного анализа данных также может использоваться как интерпретатор моделей-черных ящиков (модели, анализируя параметры которых невозможно понять — по какой логике модель дает ответ на основе тех или иных предикторов).
Ссылка на статью автора: Visualise model response with alluvial plots
Причем особенность в том что из всех библиотек, которые я видел, максимальное на одном графике объяснялся отклик черного ящика не более чем в 2 мерной системе координат (по одной на каждый предиктор), цветом объяснялся отклик.
Библиотека easyalluvial позволяет делать такое более чем по 2-м предикторам одновременно (лучше конечно не увлекаться).
Для примера обучим на нашем массиве данных случайный лес и отразим объяснение случайного леса по 3м предикторам.
Так же у автора есть коннектор к CARET-моделям (не знаю насколько это актуально сейчас учитывая tidymodels)
СОДЕРЖАНИЕ
Обзор
Тьюки определил анализ данных в 1961 году как: «Процедуры анализа данных, методы интерпретации результатов таких процедур, способы планирования сбора данных, чтобы сделать их анализ более простым, точным или более точным, а также все механизмы и результаты ( математическая) статистика, которая применяется для анализа данных «.
Разработка
Техники и инструменты
Существует ряд инструментов, которые могут быть полезны для EDA, но EDA характеризуется больше настроением, чем конкретными методами.
Типичные графические методы, используемые в EDA:
История
Многие идеи EDA восходят к более ранним авторам, например:
Пример
Результаты EDA ортогональны задаче первичного анализа. Для иллюстрации рассмотрим пример из Cook et al. где задача анализа состоит в том, чтобы найти переменные, которые наилучшим образом предсказывают чаевые официанту за ужином. Переменные, доступные в данных, собранных для этой задачи: сумма чаевых, общий счет, пол плательщика, раздел для курящих / некурящих, время суток, день недели и размер вечеринки. Задача первичного анализа решается путем подбора регрессионной модели, в которой показатель чаевых является переменной отклика. Подходящая модель
в котором говорится, что по мере увеличения размера обеда на одного человека (что приводит к увеличению счета) ставка чаевых уменьшится на 1%.
Однако изучение данных обнаруживает другие интересные особенности, не описанные в этой модели.
Гистограмма суммы чаевых, где ячейки покрывают приращения в 1 доллар. Распределение значений искажено вправо и одномодально, как это часто бывает при распределении небольших неотрицательных величин.
Гистограмма суммы чаевых, где ячейки покрывают приращение 0,10 доллара США. Наблюдается интересный феномен: пики возникают при суммах в целый доллар и полдоллара, что вызвано тем, что клиенты выбирают круглые числа в качестве чаевых. Такое поведение характерно и для других типов покупок, например, при покупке бензина.
Диаграмма разброса чаевых и счета, разделенных по полу плательщика и статусу раздела для курящих. На вечеринках для курящих гораздо больше вариантов советов, которые они дают. Мужчины, как правило, платят (несколько) более высокие счета, а некурящие женщины, как правило, очень часто дают чаевые (с тремя заметными исключениями, показанными в выборке).
То, что извлекается из графиков, отличается от того, что проиллюстрировано регрессионной моделью, даже несмотря на то, что эксперимент не был разработан для исследования каких-либо других тенденций. Паттерны, обнаруженные при изучении данных, предполагают гипотезы об опрокидывании, которые, возможно, не ожидались заранее, и которые могут привести к интересным последующим экспериментам, в которых гипотезы формально формулируются и проверяются путем сбора новых данных.