вторник, 21 августа 2018 г.

Представление: качества хороших свойств

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

Избегайте редко используемые отдельные значения свойств

Полезные значения свойства должны появляться более 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"