Создание фрейма данных
Эта модель предназначена для использования Департаментом лицензий и инспекций Филадельфии в качестве инструмента для определения приоритетности зданий для исследования после подачи разрешения на строительство. В частности, я хотел выяснить, какие здания, скорее всего, будут признаны небезопасными и чрезвычайно опасными — где необходимо принять немедленные меры. Менее техническое резюме, а также мои мотивы и причины выбора этой проблемы см. в моей предыдущей статье.
Необработанные наборы данных
Для этой модели я использовал данные Департамента лицензий и инспекций города Филадельфия. Я сосредоточился на зданиях с разрешением, поданным до июня 2019 года, чтобы данные были управляемыми; Я также хотел собрать дополнительные 6+ месяцев данных о нарушении кода/небезопасном статусе после даты последнего разрешения — наличие одной и той же даты прекращения разрешения и отключения статуса небезопасности может привести к ошибочным данным.
Данные L&I были встроены в фрейм данных, состоящий из нескольких наборов данных, которые включают данные о разрешениях, проверках, нарушениях кодекса и небезопасных нарушениях. Четыре отдельных источника данных приведены ниже:
*Разрешения: данные о разрешениях на строительство/использование/обновление зданий.
*Проверки: данные о проверках L&I и последующих мерах по соблюдению/несоответствию.
*Нарушения: данные и описания каждого нарушения строительных норм и уровня риска.
*Небезопасные нарушения: данные и описания небезопасных нарушений строительных норм и правил.
На приведенной ниже диаграмме показано распределение общего количества зданий по каждому типу данных. Есть около 80 000 зданий с поданными разрешениями и (к счастью) относительно мало небезопасных зданий.
Обработка данных
При агрегировании и объединении этих массивных наборов данных я должен был соблюдать осторожность, чтобы не включить будущие проверки и нарушения после даты подачи разрешения, а также другие данные, которые могли просочиться в модель и повлиять на нее.
Кроме того, мне нужно было обобщить наборы данных на нескольких уровнях и, в конечном итоге, соединить их с уровнем разрешения/адреса — обе части заняли большую часть моего времени в этом проекте из-за огромного размера данных, а также ошибок и беспорядка. в данных.
Чтобы связать данные, я сначала объединил наборы данных разрешений и проверок по уникальному идентификатору (ключу адреса), который используется для уникальной комбинации адреса/владельца. После этого я очистил данные и удалил ошибочные записи, странные данные и объединил устаревшую сегментацию L&I.
После создания чистого агрегированного файла для данных о разрешениях и проверках я перешел к очистке, агрегированию и объединению данных о нарушениях правил, а затем то же самое с данными о небезопасных зданиях.
Я надеялся добавить данные о жалобах на собственность и сборах за нарушения, но (вероятно, по уважительной причине) жалобы на здания и сборы обобщаются как уличные кварталы, а не фактические адреса. Тем не менее, это не помешало мне попытаться связать наборы данных, используя координаты GPS и различные даты нарушения/решения дела. Однако в конечном итоге я потерпел неудачу (опять же, наверное, к лучшему).
Разработка функций
В реальном мире улучшение моделей с помощью разработки признаков может иметь решающее значение — разработка признаков часто может повысить точность и превратить среднюю модель во что-то стоящее. Для этой проблемы я вручную создал новые атрибуты, которые, как я полагал, будут предсказывать небезопасный статус здания. В одном случае я использовал систему пометок вместе с очисткой данных, чтобы создать новую переменную, которая указывала, когда строитель занимался подрядчиком или был ли ответственен домовладелец или другое лицо.
Я также изучил группировку описаний распространенных нарушений по ключевым словам с высоким рейтингом и рассчитал время между подачей разрешения и последней датой проверки здания. Ниже приведены ранжированные диаграммы функций, отсортированные по важности.
Категориальные переменные
Создание фиктивных переменных значительно увеличило количество функций в моем наборе данных, поэтому для прогнозирования необходимо выбирать важные функции и отбрасывать второстепенные. При первоначальном изучении набора данных я обнаружил одну категорию «группировка разрешений», которая привела к 180 фиктивным переменным.
Я считаю важными две категории: 1) тип разрешенной работы и 2) описание разрешения. Разрешение на работы имело такие категории, как «электрика» или «сантехника», а описание разрешения содержало более подробные сведения о том, какой тип строительства будет происходить.
В следующем посте, посвященном процессу моделирования, будет рассмотрено сокращение функций и выбор модели.