Визуализация (часть 1)

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

кролик_утка

После того, как мы убедились, что визуализировать данные нужно (см. квартет Энскомба), возникает вопрос: на что и как смотреть при решении реальных задач. Для ответа на это вопрос обязательно «нарисуйте для себя Ваши данные». Например, в стандартной задаче машинного обучения с учителем данные выглядят так, см. рис. 1.

vis_all
Рис. 1. Данные в задаче обучения с учителем

Здесь явно выделяются два типа «одноразмерных» данных:

1. Вертикальные

  • признаки, которые описывают объекты (как исходно заданные, так и сгенерированные нами)
  • целевой признак (его для удобства выделим отдельно)
  • ответы алгоритмов на заданной выборке (для обучающей выборке лучше говорить об OOB-ответах)
  • dummy-признаки (это признаки, которые по логике не стоит использовать: номер строки, столбец случайных чисел, категория данных: обучение, валидация или тест и т.п.)

2. Горизонтальные

  • объекты или измерения (например, в задачах с сигналами)
  • статистики признаков (средние, дисперсии и т.п.)
  • dummy-информация (номера признаков, их категории и т.п.)

Визуализировать можно любые из перечисленных типов данных отдельно. Например, для признаков посмотреть на распределение значений. На рис. 2 показано распределение возрастов клиентов мебельного магазина. Видно, что распределение имеет несколько локальных максимумов. Посмотрев как они располагаются, можно сделать несколько интересных выводов. Так, 30-40 лет — возраст, в котором сейчас в Москве чаще покупают свою квартиру и мебелируют её. Разница между пиками соответствует разнице возрастов родителей и детей, поэтому возможно оба пика это покупки 30-40-летних, просто оформленные или на себя или на своих родителей.

pic_vis27.png
Рис. 2. Плотность распределения возрастов покупателей.

Главные советы при подобной визуализации:

  • не используйте сложных средств визуализации (Вы должны досконально понимать, как происходит сама визуализация),
  • не используйте параметров по умолчанию при визуализации («посмотреть на данные» — это тоже процедура, которая нуждается в обучении, т.е. настройке параметров),
  • понимайте достоинства и недостатки (что скрывает) конкретного типа визуализации.

Проиллюстрируем сказанное. На рис. 3 показано распределение целевого признака в задаче Kaggle Liberty. Смысл признака — сложность страхового случая, значения дискретны (1,2,3,..). Слева показана гистограмма распределения значений, построенная в matplotlib/Python с помощью стандартной функции hist с параметрами по умолчанию. Справа — число бинов (bins) выбрано равным числу значений признака (плюс для наглядности уменьшена ширина столбцов).

pic_vis28
Рис. 3. Целевой признак в задаче Kaggle Liberty.

Что стало видно на правом графике? Во-первых, что функция распределения не монотонно убывает, а во-вторых, что значения целевого признака идут тройками, посмотрите: высокий столбец, средний, низкий, потом опять высокий, средний и низкий. Скорее всего, страховые случаи делятся по степени ущерба, каждая из которых делится ещё на три категории: низкий ущерб, средний и высокий. Заметим, что мы бы не увидели ничего подобного если бы использовали не гистограмму, а сглаженную функцию плотности (как на рис. 2).

Ещё одна иллюстрация разумности обозначенных выше советов приведена на рис. 4. Ящики с усами (box plots) используют часто, но на них не видны многие особенности данных. На рис. 4 две разные выборки имеют практически идентичные визуализации. Для визуализации одномерных данных лучше использовать обычные гистограммы (иногда, сглаженные функции плотности)!

index
Рис. 4. Схожие ящики с усами для разных распределений.

Визуализировать можно также любые «одноразмерные» данные попарно. На рис. 5 показана диаграмма рассеивания (скатерплот) для данных из задачи Kaggle Biological Response. В этой задаче все признаки анонимизированы и приведены на отрезок [0, 1]. Несмотря на то, что заказчик ничего не сказал про природу данных, о некоторых особенностях можно догадаться с помощью визуализации.

pic_vis04.png
Рис. 5. Диаграмма рассеивания для данных Kaggle BR

Например, мы построили диаграмму рассеивания «номер признака» — «стандартное отклонение». Казалось бы, зачем использовать т.н. dummy-информацию (номера и категории признаков/объектов)?! Но из рис. 5 видно, что признаки идут группами: всего 5 групп (если увеличить масштаб, то можно и подгруппы разглядеть). Эта информация существенно облегчает построение модели, в частности, одну из групп можно полностью удалить без потери качества решения. Если Вы думаете, что такие выводы по картинкам полезны лишь в соревновательном анализе данных, то знайте, что недавно подобным образом в реальном проекте удалось найти странные зависимости, после чего заказчик «признался», что не всё рассказал о данных…

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

pic_vis08.png
Рис. 6. Что можно заметить с помощью скатерплотов.

В современных библиотеках много способов визуализации двумерной выборки, но для целей разведывательного анализа и «плохих» данных (с выбросами) лучше подойдут обычные диаграммы рассеивания. На рис. 6 показана визуализация данных в координатах «рост»-«вес» задачи про сердечно-сосудистые заболевания. Особенности (выбросы и границы значений) видны лишь на первом графике. Кстати, часто вместо всей выборки имеет смысл визуализировать подвыборку (быстрее строится визуализация, лучше видна плотность скопления точек). Имеет смысл также удалять часть экстремальных значений (чтобы все точки были сконцентрированы в одной области и координаты не растягивались из-за выбросов).

index2
Рис. 6. Разные способы визуализации двумерной выборки.

Если один из признаков категориальный, а другой вещественный, то лучше построить распределения по второму для разных значений категорий первого. На рис. 7 показана такая визуализация для пары признаков «зарплата» — «образование». Кстати, графики построены на реальных данных по Москве и иллюстрируют, «сколько в перспективе стоит высшее образование».

pic_vis24.png
Рис. 7. Распределение по зарплате жителей Москвы.

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

pic_vis25
Рис. 8. Распределение по зарплате жителей Москвы.

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

pic_vis00.png
Рис. 9. Скатерплот в координатах «разница» и «сумма» двух моделей на обучении и тесте

На рис. 9 показаны диаграммы рассеивания для ответов двух алгоритмов, построенные на обучающей выборке и тестовой. Для удобства система координат изменена: по горизонтали отложена разница ответов алгоритмов, а по вертикали — их сумма. Чётко видно, что точки, которые соответствуют ответам алгоритмов, иногда выстраиваются в отрезки. Важно понимать природу такого выстраивания. Часто это связано с особенностями кодирования и обработки категориальных признаков. Чтобы разобраться, достаточно взять объекты одного из отрезков и понять, что их связывает.

Для визуализации данных размерности больше 2, кроме (x,y)-координат приходится задействовать цвет, размер и форму объектов. По рис. 10 сразу становится понятно, что кодируют значения 1 и 2 признака gender в анонимизированных данных заказчика. Кстати, вместо легенды часто эффектней подписывать данные, как это сделано на рис.

index3
Рис. 10.Рост и вес пациентов.

При подготовке данных для визуализации помните, что

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

При создании рисунка помните, что, возможно, его кому-то придётся показывать

  • Подпишите график, оси, сделайте метки данным
  • Для объектов разной природы выберите цвета, которые и в градациях серого (например, при распечатке на чёрно-белом принтере) будут разными
  • Храните данные и код для получения картинки, а не только само изображение (в 99 случаях из 100 его придётся немного переделать)

Визуализация (часть 1): 3 комментария

  1. В графике сравнения результата двух моделей — почему выбраны такие координаты? Чем обсуловлено использование a1+a2? Почему не простой scatterplot с осями a1 и a2?

  2. График в координатах (x+y, x-y) — это просто поворот графика с координатами (x, y) (с небольшим растяжением), поэтому, по-сути, отображается та же информация. НО: поскольку ответы алгоритмов коррелируют, то в координатах (x, y) точки плотно лежат около диагонали, масштаб же выбирается так чтобы уместилась вся диагональ и отклонения от неё не видны. В координатах (x+y, x-y) масштаб выбирается так, чтобы разница между алгоритмами была хорошо заметна (по второй оси — соответствует максимальному отклонению).

    Можете сами поэкспериментировать с подобной визуализацией.
    Скажем,
    x = [0, 1, 2, 3, 4, 5, 6, 6.99, 8, 9, 10]
    y = [0, 1, 2, 3, 4, 5.01, 6, 7, 8, 9, 10]
    Заметите ли Вы в координтах (x, y) их различия?
    А в координатах (x+y, x-y)?

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

Connecting to %s