Станьте лучшим специалистом по данным

Эксперт - это человек, совершивший все ошибки, которые можно допустить в очень узкой сфере.

Нильс Бор - квантовый физик

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

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

  1. Не замыкая цель,
  2. Не думая о размерностях,
  3. Скорость обучения слишком высока,
  4. Не задумываясь о том, откуда взялась ошибка,
  5. Не понимая предвзятости и дисперсии,
  6. Одержимость шириной и глубиной полностью связанных нейронных сетей,
  7. Не обращая внимания на PEP 8,
  8. Не уронив цель,
  9. Не масштабируя цель или функции,
  10. Не работать с образцом данных во время разработки,
  11. Запись поверх сырых данных,
  12. Не использовать $ HOME для хранения данных.

1. Отсутствие цели

Прогнозирование - это то, что отличает специалиста по анализу данных от специалиста по анализу данных. Аналитик данных анализирует прошлое - аналитик данных предсказывает будущее.

Машинное обучение с учителем обычно используется специалистами по обработке данных для прогнозирования. Базовый процесс обучения с учителем - это использование функций x для прогнозирования цели y.

Понимание распределения цели - естественный первый шаг для любого контролируемого учебного проекта. Распределение цели влияет на многие решения, которые принимает специалист по данным, в том числе:

  • какие модели использовать,
  • требуется ли масштабирование,
  • если у цели есть выбросы, которые следует удалить,
  • если цель несбалансирована.

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

Цели регрессии

В задаче регрессии специалист по данным хочет знать о цели следующее:

  • минимум и максимум,
  • насколько нормально распределена цель,
  • если распределение мультимодальное,
  • если есть выбросы.

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

Гистограмма показывает два нормальных и два равномерных распределения, которые сгенерировали этот набор данных.

Цели классификации

В задаче классификации специалист по данным хочет знать о цели следующее:

  • сколько классов есть,
  • насколько сбалансированы классы.

Мы можем ответить на эти вопросы с помощью гистограммы:

Гистограмма показывает, что у нас есть три класса, и показывает, что наш класс сновидений недостаточно представлен.

2. Не думать с точки зрения размерности.

Размерность обеспечивает структуру для понимания мира.

Ценность низкоразмерных данных

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

Возьмем, к примеру, решение идти пешком или ехать на автобусе - решение, которое зависит от того, идет ли дождь или нет.

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

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

Обратите внимание, что большая часть работы специалиста по данным заключается в использовании машинного обучения для уменьшения размерности:

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

Каждый из выходных данных низкой размерности может использоваться в бизнесе, а данные высокой размерности - нет.

В отличие от входных исходных данных большой размерности, выходные данные меньшей размерности могут использоваться для принятия решений:

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

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

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

Проблемы с данными большой размерности

Сложность работы в многомерном пространстве - это проклятие размерности.

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

Мы можем представить себе плотный набор данных - большое количество разнообразных выборок на небольшом пространстве. Мы также можем представить себе разреженный набор данных - небольшое количество образцов в большом пространстве.

Что происходит с плотностью набора данных при добавлении размеров? Он становится менее плотным, потому что данные теперь более разбросаны.

Однако уменьшение плотности данных с увеличением размерности не линейно, а экспоненциально. По мере увеличения размеров пространство становится экспоненциально труднее для понимания.

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

Эта комбинация с любой другой комбинацией приводит к экспоненциальному увеличению.

Это проклятие размерности - экспоненциальное увеличение пространства по мере того, как мы добавляем измерения. В приведенном ниже коде показан этот эффект:

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

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

Четыре области применения проклятия размерности в рабочем процессе Data Science

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

1. Слишком много гиперпараметров.

Специалисты по обработке данных могут тратить время на чрезмерный поиск по сетке, что требует больших затрат времени и ресурсов. Мотивация к сложному поиску по сетке исходит от хорошего - желание хороших (или даже идеальных) гиперпараметров.

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

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

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

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

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

При точной настройке одной модели часто выполняется поиск по одному параметру за раз (максимум два). Это сокращает время выполнения, а также помогает развить интуицию относительно того, какое влияние изменение гиперпараметров окажет на производительность модели.

2. Слишком много функций

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

Это заблуждение возникло из-за фундаментального неправильного понимания глубокого обучения.

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

- не понимая полезного индуктивного смещения сверточных нейронных сетей
- не понимая проклятия размерности

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

3. Слишком много показателей.

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

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

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

  • средняя абсолютная ошибка,
  • средняя абсолютная ошибка в процентах,
  • среднеквадратичная ошибка.

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

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

4. Слишком много моделей.

Специалистам по данным повезло иметь доступ ко многим высококачественным реализациям моделей в пакетах с открытым исходным кодом, таких как scikit-learn.

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

Довольно часто я вижу, как новый специалист по данным тренирует линейную модель, SVM и случайный лес. Опытный специалист по данным просто обучит ансамбль на основе дерева (случайный лес или XGBoost) и сосредоточится на использовании важности функций для разработки или удаления функций.

Почему древовидные ансамбли являются хорошей первой моделью? По нескольким причинам:

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

3. Слишком высокая скорость обучения.

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

Установка слишком высокой скорости обучения сделает обучение нейронных сетей нестабильным. Скорость обучения интуитивно понятна - более высокая скорость обучения означает более быстрое обучение.

Второй по важности параметр для нейронных сетей - это размер партии.

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

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

4. Не думать о том, откуда взялась ошибка.

Три источника ошибок в статистике:

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

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

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

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

- с независимой выборкой (без смещения выборки),
- с одинаковым распределением (без выборки или ошибки измерения).

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

5. Непонимание предвзятости и дисперсии

Ошибка прогнозирования модели контролируемого обучения состоит из трех компонентов - смещения, дисперсии и шума:

  • Смещение - это отсутствие сигнала: модель не видит взаимосвязей, которые можно использовать для прогнозирования цели. Это не подходит. Смещение можно уменьшить, увеличив емкость модели (за счет большего количества слоев / деревьев, другой архитектуры или большего количества функций).
  • Дисперсия - это непонятный шум для сигнала - закономерности в обучающих данных, которые не будут отображаться в данных во время тестирования. Это переоснащение. Дисперсию можно уменьшить, добавив обучающие данные.
  • Шум невозможно контролировать - лучшее, что может сделать модель, - это его избежать.

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

Три основных рычага, которыми может воспользоваться специалист по анализу данных, чтобы обменивать предвзятость на дисперсию (или наоборот):

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

Больше данных не повлияет на систематическую ошибку.

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

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

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

Зацикленность на архитектуре полностью связанных нейронных сетей сопровождается процессом их построения. Построение нейронной сети требует определения архитектуры - ведь это важно?

Но когда дело доходит до полносвязных нейронных сетей, архитектура не так уж и важна.

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

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

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

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

7. Не обращать внимания на PEP 8

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

Abelson & Sussman - Структура и интерпретация компьютерных программ

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

После пяти лет программирования я теперь знаю, откуда они взялись.

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

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

8. Не уронить цель

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

Все мы делаем это однажды.

9. Отсутствие масштабирования цели или функций.

Это совет, который я давал чаще всего при отладке проектов машинного обучения. Всякий раз, когда я вижу большие потери (более высокие, чем, скажем, 2 или 3), это явный признак того, что цель не была масштабирована до разумного диапазона.

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

Под масштабированием я подразумеваю либо стандартизацию:

Или нормализация:

Обратите внимание на отсутствие согласованности между тем, что эти вещи называются - нормализацию также часто называют масштабированием от минимума до максимума или даже стандартизацией!

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

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

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

10. Не работать с образцом данных во время разработки.

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

Вы можете работать с образцом своих данных примерно с помощью целочисленного индекса:

pandas позволяет загружать только подмножество данных за раз (избегая извлечения всего набора данных в память):

Контроль отладки

Простой способ управлять этим - переменная - это то, что вы бы сделали в Jupyter Notebook:

Или точнее с аргументом командной строки:

Что можно контролировать при запуске скрипта data.py:

11. Запись поверх необработанных данных

Необработанные данные святы - их никогда нельзя перезаписывать. Это верно как внутри программы, так и на диске.

12. Не использовать $ HOME для хранения данных

Это не ошибка, но такая модель резко упростила мою жизнь.

Управление путями в Python может быть непростым. Есть несколько вещей, которые могут изменить работу Python по поиску путей:

- где пользователь клонирует исходный код
- где виртуальная среда устанавливает этот исходный код
- из какого каталога пользователь запускает скрипт

Некоторые из проблем, которые возникают из-за этих изменений:

- os.path.realpath изменится в зависимости от того, где виртуальная среда устанавливает ваш пакет
- os.getcwd изменится в зависимости от того, где пользователь запускает интерпретатор Python

Размещение данных в фиксированном и единообразном месте позволяет избежать этих проблем - вам никогда не нужно получать каталог относительно чего-либо, кроме каталога пользователя `$ HOME`.

Решение состоит в том, чтобы создать папку в каталоге $HOME пользователя и использовать ее для хранения данных:

Это означает, что ваша работа переносима - как для ваших коллег, так и на удаленные машины.

Спасибо за прочтение!

Если вам понравился этот пост, подпишитесь на меня на Medium или подключитесь к LinkedIn.

Обязательно ознакомьтесь с некоторыми из моих других сообщений:





Первоначально опубликовано на https://adgefficiency.com 14 сентября 2019 г.