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

Этот процесс будет состоять из трех шагов: сначала мы разработаем план лечения, на втором этапе мы смоделируем план, а на последнем этапе мы подгоним план лечения.

Наш набор данных WIDS 2020 содержит огромное количество переменных, многие из которых являются категориальными переменными, что может привести к переобучению, поэтому мы разделим данные на три набора данных: обучающие данные, набор данных калибровки/проверки и набор тестовых данных. .

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

библиотека(tidyverse)
библиотека(муррр)

wids %›%
map_df(function(x) sum(is.na(x))) %›%
collect(feature, num_nulls) %›%
print(n = 187)

Как мы видим, для многих переменных пропущено более 70 000 значений.

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

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

К обучающим данным применяется план обработки, так что все такие проблемы с данными удаляются, как описано выше, и обработанные данные улучшают соответствие модели.

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

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

Итак, сначала мы разделяем данные на три части: обучаем, проверяем и тестируем, а также определяем, какие из них являются зависимыми, а какие независимыми. Затем в список переменных входят все столбцы за вычетом этих трех столбцов, и мы загружаем пакет vtreat(), а затем устанавливаем план лечения на основе отсутствия данных и обрабатываем данные таким образом. После обработки мы увидим, что в данных нет пустых столбцов, поскольку основная цель плана обработки — получить новые данные, которые будут чистыми и надежными, прежде чем мы применим модели, чтобы соответствовать им. Наше разделение находится в соотношении 80%, 10% и 10%, но мы также можем изменить это на 40%, 50% и 10%, если у нас есть достаточно большие данные, и это будет работать намного лучше в подгонке модели. а также, так как у него будет больше данных для калибровки модели.

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

Это исходный фрейм данных и его значения, которые находятся в исходном фрейме данных widsTrain.

После того, как план лечения используется, он создает дополнительные новые столбцы, некоторые из них выделяются.

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

needSplit сообщает use, что переменная скрывает дополнительную информацию, которую можно оценить с помощью методов перекрестной проверки, а код сообщает, какое преобразование используется для создания этой новой переменной, где clean и is_Bad — новые производные переменные.

Как мы видим, например, для возраста есть две производные переменные, в которых возраст не имеет нулевых значений, в то время как для age_isBad сообщается, какие значения исходной переменной имели пропущенные значения.

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

Первоначально у нас было 186 переменных, и после запуска vtreat у нас не осталось 400 переменных, которые, по мнению пакета vtreat, выявят наибольший сигнал в модели после обработки исходных переменных.

Мы должны использовать widsTrain для плана обработки данных, а widsCal следует использовать для обучения модели, и мы должны разделить данные с планом обработки 40%, обучением модели 50% и тестированием 10%), как это предлагается в справочнике ниже. .

Мы можем безопасно использовать одни и те же данные для плана лечения, а также для обучения модели, используя статистически эффективные методы, такие как mkCrossFrameCExperiment, который использует те же данные для плана лечения и моделирования, но действует таким образом, что модель не знает, были ли данные использовалось ранее, а также показано ниже: -

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

Когда мы запускаем прогнозы и оцениваем модель, мы видим, что в модели есть некоторая нелинейность, поскольку sd. составляет 0,0112, что не так уж важно, и нам может потребоваться запустить некоторые расширенные модели вместо линейных моделей, как мы сделали здесь.

Как мы видим снизу,

Приведенные выше результаты могут быть полезны, так как мы видим, что модель идентифицировала переменную Hospital_death довольно справедливо, то есть 503/767, что составляет около 65,58%.

Мы можем улучшить эту модель, используя также некоторые нелинейные подходы, такие как модели на основе дерева, такие как случайные леса, повышение, SVM или (GAN) обобщенные аддитивные модели.

Использованная литература:







CRAN — Package vtreat
Процессор/обработчик данных «data.frame
, который подготавливает реальные данные для прогнозного моделирования в статистически достоверном…cran.r- проект.орг»