Перейти к основному содержимому Перейти к дополнительному содержимому

Преобразование типов данных

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

Как правило, в машинном обучении все, что относится к типу данных Float или Double, считается числовым значением, а все, что является строковым типом данных (String), — категориальным значением. Однако эта интерпретация не всегда может быть верной, как видно из следующих примеров.

Примеры основаны на наборе данных, агрегированных для решения задачи: «Купит ли пользователь еще раз какой-либо продукт в течение 30 дней с даты первой покупки?» Набор данных содержит столбцы с различными типами данных, такими как String, Double, Integer, Boolean и Date.

Столбцы и типы данных

Таблица с именами столбцов и типами данных.

Строки

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

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

Образцы данных для столбцов PersonID, MarketingSource и SourceCostPerAquisition

Таблица с образцами данных.

В таких ситуациях рекомендуется создать две отдельные конфигурации с разными вариантами классификации признаков. Эти эксперименты будут выполняться по отдельности. Первая конфигурация будет создана для оригинального строкового представления. Во второй конфигурации дается числовое соответствие различных значений путем преобразования столбца в тип данных Double, например, «Low» (низкая) = 1,0, «Medium» (средняя) = 2,0, «High» (высокая) = 3,0. После настройки каждой конфигурации появляется более глубокое понимание того, какая из них работает лучше в том или ином сценарии использования. В одних случаях имеет смысл использовать строковое представление, а в других разумнее выбрать числовое представление.

Числа

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

Иногда набор данных может содержать числовое значение, которое не поддается измерению, так как является значением словаря или инкрементным значением, например, идентификатором. В данном примере значения в столбце PersonID можно было бы ошибочно принять за числовые, если бы они не начинались с «Person_». Рассматривая идентификаторы как числовые значения, мы получили бы неточное представление разницы между строками этого столбца. В таких случаях лучше всего представлять идентификатор в столбце с типом данных String. Перед использованием набора данных, возможно, вам нужно будет определить, следует ли преобразовать какой-либо из числовых столбцов в категориальный.

Даты

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

Например, дату можно разбить на дни недели. Она может быть представлена в виде числового значения (от 1 до 7) или строкового значения (с «воскресенья» по «субботу»).

Дни недели в виде числовых и строковых значений

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

Существует несколько проблем с представлением дня недели в виде числового значения. Когда начинается неделя: в понедельник или в воскресенье? Кроме того, даже если день начала недели имеет значение, он может быть скрыт в циклическом тренде.

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

График 1: средний объем продаж за день недели, когда неделя начинается в понедельник

График продаж по дням недели с четкой линией тренда.

График 2 представляет те же данные, что и график 1, но со сдвигом на один день, так, чтобы неделя начиналась в воскресенье. Здесь значимость данных гораздо ниже.

График 2: средний объем продаж за день недели, когда неделя начинается в воскресенье

График продаж по дням недели без четкой линии тренда.

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

График 3: средний объем продаж за день недели, где пик продаж приходится на середину недели

График продаж по дням недели с циклическим трендом, который достигает пика в середине недели.

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

Разница в датах

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

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

Помогла ли вам эта страница?

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