Вопрос или проблема
Я создал биологический набор данных, который состоит из микробных данных с 15 географически близких местоположений, и для каждого из них у меня есть 100 временных точек, всего 1500 точек данных. Для этого я пытаюсь предсказать присутствие или отсутствие определенной бактерии на основе других бактерий. Таким образом, мои 1200 объясняющих переменных – это виды бактерий, и они находятся в диапазоне от 0 до 1 (например, если бактерия составляет 50% обнаруженных бактерий в тот день, это будет соответствовать 0.5). Бактерия, которую я ищу, присутствует только летом, поэтому в моем наборе данных 1420 случаев отсутствия и 80 случаев присутствия, из которых 80 случаев присутствия находятся в группе в середине моего годового набора данных.
Я хотел бы создать ряд временных задержек, чтобы увидеть, смогу ли я точно предсказать, будет ли этот вид бактерий присутствовать в какое-то время в будущем (бинарная зависимая переменная), учитывая, что микробное сообщество выглядит определенным образом в прошлом. Для этой цели я использовал множество регрессионных моделей, в основном метод случайного леса с кросс-валидацией, который работает довольно хорошо, но я считаю, что это связано с тем, что мои данные нестационарны. В теории мои данные должны были бы быть стационарными в течение нескольких лет, но у меня только один год. Я справился с дисбалансом классов, используя SMOTE, и когда я рандомизирую присутствие/отсутствие бактерий, модели работают плохо.
Я ожидал, что модель исключит некоторые временные точки из прошлого, например, 12 временных точек – это будет 6 недель назад в каждом месте, так что вряд ли это сработает (я думаю, что микробное сообщество со середины апреля не должно предсказывать присутствие этой бактерии в начале июня), но матрица ошибок для тестового набора данных все еще выглядит так: истинно отрицательные: 257, ложно отрицательные: 4, ложно положительные: 9, истинно положительные: 12.
Не является ли мой подход использования RF для временных задержек в этом контексте в корне ошибочным? Будет ли LSTM более подходящим?
Ответ или решение
Ваша задача предсказания наличия или отсутствия определённой бактерии на основе микробных сообществ с использованием временных лагов представляет собой интересный вызов, особенно учитывая нестационарный характер ваших данных и сильный дисбаланс классов. Вы уже применили несколько моделей, включая случайный лес (RF), и используете SMOTE для борьбы с дисбалансом классов. Давайте рассмотрим подходы, которые могут улучшить вашу модель.
1. Подход с временными лагами
Использование временных лагов — разумный выбор для вашей задачи, так как позволяет учитывать временные зависимости в данных. Убедитесь, что вы правильно определили временные лаги, то есть следует учитывать, что присутствие бактерии в различные периоды может зависеть от комбинации разных видов за определённые временные интервалы (например, 1 неделя назад, 2 недели назад и так далее).
2. Выбор модели
Вы уже отметили успешное применение случайного леса, но действительно, он может иметь свои ограничения при работе с временными рядами. Логистическая регрессия, модели на основе градиентного бустинга (например, XGBoost) или LSTM (долгосрочная краткосрочная память) могут быть также полезны.
-
Случайный лес (RF): Подходит для ваших целей, но, возможно, недостаточно использовать только его для прогнозирования временных зависимостей. Вы можете попробовать добавлять более сложные функции (например, инженерия признаков) или улучшить гиперпараметры.
-
LSTM: Данная архитектура отлично справляется с предсказаниями последовательных данных, однако требует большой объем данных для обучения. Вам нужно будет проверить, подходит ли ваша выборка для обучения LSTM.
3. Учет дисбаланса классов
Методы, которые вы уже используете, такие как SMOTE, могут действительно помочь в улучшении результатов. Однако вы можете также рассмотреть использование взвешенных функций потерь или адаптивных методов выборки, таких как адаптивный бутстрап, которые помогут улучшить распознавание редких классов.
4. Проверка временной структуры
Поскольку ваши данные могут быть нестационарными, время года может существенно влиять на присутствие бактерий. Попробуйте сегментировать данные по сезонам или использовать методы скользящего окна для проверки точности модели.
5. Валидация модели
Используйте не только кросс-валидацию, но и временные разбиения (например, обучающие и тестовые наборы, основанные на времени), чтобы ваша модель не «заглядывала в будущее» и не использовала данные из будущего для предсказания.
6. Оценка результатов
С учетом ваших прежних результатов из матрицы неточностей, хорошая идея — детально проанализировать предсказания как с точки зрения истинно положительных, так и истинно отрицательных результатов. Вы можете попробовать и визуализировать, чтобы понять, где ваша модель ошибается.
Заключение
Ваш подход вполне правомерен, но можно рассмотреть комбинацию модификаций и альтернативных моделей, таких как LSTM и XGBoost, для улучшения диагноза. Не забудьте тщательно исследовать наличие и структуру временной зависимости в ваших данных, а также испытать методы предобработки для решения проблем с дисбалансом классов.
Подведение итогов и выбор метода зависит от особенностей ваших данных и ресурсов, доступных для их обработки. Проверьте различные комбинации моделей и стратегий обработки данных, чтобы найти наилучший подход для вашей задачи.