Данные могут быть важнее модели
При любом машинном обучении большая кривая обучения для тех, кто переходит от академического образования к практике, — это понимание того, где возникает большая часть трудностей, когда дело доходит до построения модели. Как правило, теория фокусируется на самом легком для изучения компоненте — моделях. Мы понимаем, когда мы хотим использовать классификацию или регрессию, является ли наша проблема линейно разделимой или нет, и как мы можем проверить соответствие или переоснащение. Однако я объясню несколько ключевых идей, которые помогут вам улучшить ваши модели. Я также покажу, почему не существует «быстрого и простого» решения.
Очистка данных
Эту концепцию должен знать каждый, и это первый шаг в решении почти любой проблемы. Модели машинного обучения требуют информации для построения каких бы то ни было выводов. Надежный прогноз довольно сложно сделать, если модель не имеет надежного набора данных. Модель сделает все возможное, чтобы понять шум и объяснить его, что очень навредит ей. Кроме того, это заставит модель попытаться найти отношения, которые не должны существовать между целевой переменной (которая может быть неправильно помечена и, следовательно, навязывать неверные отношения) или иметь неправильные входные данные (что может привести к тому, что модель не будет строить точное представление о отношения). Очистка набора данных должна быть одной из первых отправных точек построения абсолютно любой модели. Один профессор однажды пошутил: «80% ярлыков, которые дал бы человек, верны, а остальные 20% неверны». Такая высокая степень неточности является неожиданностью. Однако, когда этикетки сделаны не экспертами в предметной области, обладающими исключительными знаниями в этой области, некоторые из этих ошибок легко объяснить. Люди тоже не машины, поэтому иногда мы действуем немного недетерминированно. Например, если кто-то устал, он мог быстро поставить неправильный ярлык для какого-то примера, даже если он мог посмотреть на него завтра снова и понять, что это была глупая ошибка. Поэтому я рекомендую, где это возможно (что может быть только в нескольких редких случаях), использовать постфактумную информацию для маркировки данных. Как правило, это любая информация, которая будет интересующим нас результатом и генерируется путем ожидания немного дольше.
Например, если бы мы определяли, уйдет ли клиент и не вернется ли он в следующий период. Если вы подождете до конца периода, выяснить, ушел ли клиент, довольно тривиально. Тем не менее, постфактум информация не всегда вариант. Следовательно, может быть необходимо исследование исходных данных с помощью графиков, вырезая крайние выбросы и ряды информации, которые, кажется, нарушают все предположения. Примером крайнего исключения может быть покупка 10000 единиц одной и той же единицы, когда средний покупатель покупает только 5, а верхние десять процентов клиентов покупают максимум 100 единиц. Как правило, вы хотели бы предсказать типичный, повседневный случай, а не такие экстремальные аномалии, однако эта информация также может быть полезной. Поэтому лучшим советом будет повторение.
Разработка функций
Часто исходные данные, которые у нас есть, не могут построить модели, которые могут точно работать с нашими данными. Поэтому мы используем разработку признаков, чтобы помочь модели. Например, часто очень желательно иметь линейно разделимую задачу. В этой задаче мы можем провести прямую линию между нашими классами, чтобы разделить их. Подобные задачи желательны, поскольку они обычно позволяют нам использовать более простые модели и работать очень хорошо. Тем не менее, реальный мир не часто позволяет нам иметь необработанные данные, которые позволяют провести прямую линию между нашими классами или прямую линию, которая точно предсказывает цель в каждой точке — например, регрессию. Разработка признаков может позволить нам создать эти «отдельные» линии для нашей задачи. Это также может позволить нам объяснить ситуацию более кратко и ясно для нашей модели. Примером разработки признаков может быть умножение двух переменных (например, x1 и x2) или деление одной переменной на другую (например, x1, деленное на x3). В случае данных временных рядов это можно сделать и другими способами, представляя изменение переменной во времени, например. процентное изменение переменной x1в периоде 2по сравнению с периодом 1. В этом случае инженерных особенностей данных временного ряда требуется быть очень осторожным. При работе с данными временных рядов существует много возможностей для утечки данных. Утечка данных — это когда мы предоставляем информацию, к которой модель не должна иметь доступа при прогнозировании, например. информация о периоде 3 передается данным за период 2, что означает, что модель теперь имеет некоторые знания о периоде 3, которые были бы невозможны в реальности.
Итерация
После первоначальной очистки ваших данных и выполнения некоторых функций вы, вероятно, получите более высокую производительность. Однако это не означает, что это будет лучшая производительность. Поэтому стоит помнить, что очистка данных и разработка признаков — это итерационные процессы. Конечно, вы никогда не получите набор данных на 100% чистым, поэтому, вероятно, лучше всего сосредоточиться на разработке функций после определенного момента. В этом случае разработка признаков — это навык (а часто и искусство), поэтому вам потребуется попрактиковаться, чтобы выяснить, какие признаки подходят для конкретных задач, таких как коэффициенты вариации, экспоненциально взвешенное скользящее среднее, изменение средних значений при каждом временной шаг или метаданные, такие как максимальные значения, минуты или продолжительность использования. Не расстраивайтесь, если это не принесет немедленного результата, поэтому продолжайте итерации, и ваши навыки разработки функций должны постепенно улучшаться.