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

Вопрос или проблема

Я сразу перейду к делу. У меня есть довольно большой набор данных (100K наблюдений) с непрерывными и категориальными предикторами, которые меняются со временем. Категориальные предикторы, на самом деле, обычно не меняются, однако непрерывные меняются каждый день. Еще один уровень сложности – тот, с которым я сталкиваюсь – это то, что данные сгруппированы на нескольких уровнях (измерения, полученные от одного и того же человека с течением времени, с несколькими людьми в наборе данных).

Так что у меня есть что-то вроде:

id | день | cont_predictor | cat_predictor | daily_outcome
1  | 1   | 1.4            | 1             | 0
1  | 2   | 1.7            | 1             | 0
1  | 3   | 1.9            | 1             | 0
1  | 4   | 2.9            | 1             | 1
2  | 1   | 4.0            | 0             | 0
2  | 2   | 4.1            | 0             | 0
3  | 1   | 5.7            | 0             | 0
3  | 2   | 4.2            | 0             | 0
3  | 3   | 3.5            | 0             | 1

Я ищу советы о том, какой алгоритм лучше всего подходит для моделирования daily_outcome. Эта переменная значительно несбалансирована (30:1), но также наблюдения меняются со временем и сгруппированы на индивидуальном уровне (id). Я мог бы работать с этими данными, используя модель смешанных эффектов для долгосрочной логистической регрессии. Однако мне больше всего интересно оптимизировать прогнозы, поэтому я действительно хотел бы использовать подход машинного обучения.

Пока что я пробовал логистическую регрессию и случайный лес, чтобы начать, однако они не работают хорошо при прогнозировании daily_outcome = 1, даже после сбалансированных и оверсэмплинговых техник, включая SMOTE. Я предполагаю, что это потому, что эти модели не учитывают структуру данных, где наблюдения, полученные от одного человека, сильно коррелированы (я их проверял – очень высокая внутриклассовая корреляция).

Какие алгоритмы машинного обучения работали для вас в прошлом? Ищу советы от людей, которые работали с такого рода данными (кажется, что это довольно распространенная проблема, но это мой первый опыт работы с ней).

Большое спасибо заранее!

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

Подготовка/очистка данных:

  1. вы можете попробовать больше методов для балансировки, таких как понижающее дискретизирование (это обычно лучше, чем повышающее, поскольку используемые вами данные были реальными, а не синтетическими). SMOTE тоже неплох, но может быть немного сложнее использовать правильно
  2. вы можете попробовать использовать функцию весов в своей модели, чтобы придать большее значение меньшинству, если вы считаете, что ошибка в прогнозировании этого значения более важна или более затратна, чем ошибка в чаще, или просто хотите сбалансировать свои прогнозы между классами
  3. Вы можете использовать PCA, SVD или LDA, чтобы удалить некоторые корреляции между вашими признаками
  4. Нормализуйте данные, так как некоторые алгоритмы все еще плохо справляются с большими различиями в признаках (например: среднее значение первого признака 0.001 против среднего значения второго признака 1000). Это хорошая практика в любом моделировании.
  5. Ищите выбросы. Иногда выбросы могут вызвать проблемы. Ищите значения, которые не имеют смысла или находятся слишком далеко от нормального диапазона.

Метрика для использования:

  1. Я обычно использую ROC_AUC, чтобы понять, какая модель лучше всего прогнозирует как большинство, так и меньшинство классов.
  2. Чувствительность и специфичность также являются двумя хорошими метриками, которые можно использовать, чтобы увидеть, насколько хороша ваша модель в прогнозировании каждого класса

Ответ или решение

Подбор Машинного Обучения для Моделирования Кластеризованного Временного Двуичичного Результата

Введение

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

Основные Проблемы
  1. Временные Изменения: Ваши предикторы изменяются со временем. Это подразумевает, что необходимо учитывать временные зависимости в модели.
  2. Кластеризация Данных: Наблюдения сгруппированы по идентификатору индивидуума (id), что ведет к высокой корреляции между данными внутри одних и тех же групп.
  3. Несбалансированность Классов: Распределение переменной результата (обычно 30:1) требует специальных подходов для корректной интерпретации и прогнозирования.
Подходящие Алгоритмы
  1. Модели Смешанных Эффектов (Mixed Effects Models):

    • Регрессионные модели с случайными эффектами позволяют учесть межгрупповые различия и зависимость повторяющихся наблюдений. Эти модели являются отличной отправной точкой, хотя и не являются чисто "механистичным" методом.
  2. Глубокое Обучение:

    • Рекуррентные Нейронные Сети (RNN): Подходят для обработки временных рядов, учитывая предыдущие наблюдения. Они могут составить мощный инструмент для анализа временных зависимостей.
    • Сети с Долгосрочной Памятью (LSTM): Специфическая форма RNN, способная эффективно сохранять информацию о прошлом, что очень полезно для временных последовательностей.
  3. Модели Бустинга:

    • XGBoost или LightGBM: Эти алгоритмы отлично справляются с несбалансированными данными, и их можно настроить с использованием весов для классов или специальных метрик потерь.
  4. Случайные Леса:

    • Данный метод, хотя и был вами опробован, можно улучшить. Используйте параметры class_weight для учета несбалансированности классов. Также рассмотрите возможность применения "глубоких" деревьев (max_depth), чтобы повысить его предсказательную силу.
  5. Методы Усовершенствованного Балансирования:

    • SMOTE и его Производные: Они способны генерировать дополнительные примеры для меньшего класса. Применение SMOTE в сочетании с упрощенным ансамблевым методом может значительно улучшить производительность.
Подготовка Данных

Корректная подготовка данных критически важна. Вот несколько рекомендаций:

  • Устранение Корреляции: Используйте методы понижения размерности, такие как PCA, чтобы предотвратить мультиколлинеарность.
  • Нормализация Данных: Обеспечьте стандартный масштаб данных (например, с помощью z-оценки), чтобы улучшить производительность алгоритмов, чувствительных к масштабу.
  • Взвешивание Классов: Применение весов в ваших моделях для уменьшения эффекта несбалансированности классов. Многие библиотеки машинного обучения предлагают встроенные возможности для работы с весами.
Оценка Модели

При оценке качества моделей важно использовать корректные метрики:

  • ROC AUC: Имеет смысл для анализа качества предсказаний обеих классов.
  • Чувствительность и Специфичность: Эти показатели помогут вам яснее понять, насколько хорошо модель предсказывает различные классы.
Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...