Найти в Дзене
Властелин машин

Как формировать индикаторные признаки путем парсинга текстовых данных

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

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

Одним из возможных подходов поделюсь на примере модели оценки стоимости квартир, которая принципиально зависит от возможного наличия капитального ремонта в ней.

Например, я скачал набор объявлений о продаже недвижимости в одном из регионов нашей страны, имеющий следующий вид (название df, всего 22 столбца):

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

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

-2

Однако так читать не удобно, так как слово "ремонт" теряется в дебрях десятков тысяч записей и проще, используя мощь регулярных выражений, выводить только его окружение:

-3

Следует отметить, что описание приводимых выше трюков при работе с библиотекой Pandas я описывал ранее.

Теперь для формирования индикаторного столбца можно выполнить следующую последовательность действий:

  • создать набор слов, "окружающих" слово "ремонт"
  • создать финальный индикаторный столбец (ind_final)
  • для каждого слова проверять его наличие как слева, так и справа от слова "ремонт", в случае успеха хотя бы в одном случае корректировать индикаторный столбец для данного слова (ind_temp)
  • с учетом текущего значения ind_temp корректировать ind_final
-4

-5