В предыдущем посте мы говорили о путях картирования сырых данных в подходящие вектора свойств, но это только часть работы. Мы должны разобраться с тем какие типы значений на самом деле делают полезными свойства внутри этих векторов свойств.
Избегайте редко используемые отдельные значения свойств
Полезные значения свойства должны появляться более 5 раз в наборе данных. Применение такого подхода позволяет модели обучиться тому, как это значение свойства относится к метке. Таким образом, наличие многих примеров с таким же дискретным значением дает модели шанс увидеть свойство при других настройках, и в свою очередь, определить, когда оно является хорошим предсказателем для метки. Например, свойство house_type с большой вероятностью будет содержать много примеров, в которых его значение будет "викторианский":
#Это правильно
house_type: victorian
Противоположно, если значение свойства появляется только однажды, либо очень редко, тогда модель не сможет делать предсказания, основанные на этом свойстве. Например, unique_house_id - это плохое свойство, потому что каждое значение будет использовано только однажды, таким образом модель не сможет обучиться чему-либо из этого:
#Это пример уникального значения. Следует избегать использования такого свойства
unique_house_id: 8SK982ZZ1242Z
Предпочтительны ясные и очевидные значения
Каждое свойство должно иметь ясное и очевидное значение. Например, предположим следующее значение свойства для возраста дома, которое мгновенно узнаваемо как возраст в годах:
#Пример ясного значения
house_age: 27
Напротив, значение следующего свойства непонятно никому, кроме инженера, который создал его:
#Пример неясного значения, которое следует избегать
house_age: 851472000
В некоторых случаях "шумовые" данные (скорее чем плохие инженерные решения) служат причиной неясных значений. Например, следующее значение свойства user_age пришло из источника, который не проверял подходящие значения:
#Пример "шумовых"/плохих данных, который следует избегать
user_age: 277
Не смешивайте "магические" значения с реальными данными
Хорошие нецельночисловые свойства не содержат необычных не входящих в диапазон или "магических" значений. Например, предположим, свойство содержит нецельночисловое значение между 0 и 1. Тогда значения, как следующие, будут правильными:
quality_rating: 0.82
quality_rating: 0.37
Однако, если пользователь не ввел quality_rating, возможно набор данных представит отсуствующие значения как следующее "магическое" значение:
# Пример "магического" значения, которое следует избегать
quality_rating: -1
Обходной путь для "магических" значений - преобразование одного свойства в два свойства:
- Одно свойство хранит только качественный рейтинг, без "магических" значений
- Другое свойство хранит булево значение, обозначающее был ли предоставлен quality_rating. Дайте этому булеву свойству название is_quality_rating_defined.
Учитывайте исходящую нестабильность
Определение свойства не должно меняться с течением времени. Например, следующее значение правильное, поскольку название города вероятно не изменится. (Следует отметить, что все равно необходимо преобразовывать строку типа "br/sao_paulo" в одноразовый вектор)
city_id: "br/sao_paulo"
Но прием значения выведенного другой моделью несет дополнительные расходы. Возможно значение "219" на данный момент представляет Сан Паулу, но такое представление может легко измениться в будущем при использовании другой модели:
# Пример значения, которое может измениться и которое следует избегать
inferred_city_cluster: "219"