Принципиальным этапом создания системы машинного обучения является гибкий подход к созданию признаковой базы. Так, зачастую важная информация скрывается в описании текстовых полей и для ее извлечения требуется прибегать к такому трюку, как парсинг.
Одним из возможных подходов поделюсь на примере модели оценки стоимости квартир, которая принципиально зависит от возможного наличия капитального ремонта в ней.
Например, я скачал набор объявлений о продаже недвижимости в одном из регионов нашей страны, имеющий следующий вид (название df, всего 22 столбца):
Информации о наличии ремонта в данной таблице не имеется. В то же время присутствует поле с описанием самого объявления (desc), в котором продавцы указывают соответствующие сведения. Учитывая это, можно сформировать индикаторный столбец, который будет для строк, содержащих определенные фразы, указывать на наличие ремонта (значение True), а для остальных - на его отсутствие (False).
Однако в силу богатства русского языка для обозначения факта наличия хорошего ремонта используются разнообразные сочетания слов. Чтобы изучить все возможные описания, можно воспользоваться следующей командой:
Однако так читать не удобно, так как слово "ремонт" теряется в дебрях десятков тысяч записей и проще, используя мощь регулярных выражений, выводить только его окружение:
Следует отметить, что описание приводимых выше трюков при работе с библиотекой Pandas я описывал ранее.
Теперь для формирования индикаторного столбца можно выполнить следующую последовательность действий:
- создать набор слов, "окружающих" слово "ремонт"
- создать финальный индикаторный столбец (ind_final)
- для каждого слова проверять его наличие как слева, так и справа от слова "ремонт", в случае успеха хотя бы в одном случае корректировать индикаторный столбец для данного слова (ind_temp)
- с учетом текущего значения ind_temp корректировать ind_final