Многофункциональное моделирование на основе одной двоичной функции, которая редко 1

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

Определение проблемы:

Подготовлено или не подготовлено, чтобы избежать вспышки заболевания, а стоимость вспышки составляет 20 раз подготовки

стоимость каждого дня: стоимость =20* вспышка *! подготовлено + подготовлено

Модель: готовиться к вспышке, на какие дни?

Вопросов:

  • Создать модель для прогнозирования вспышек?

  • Отчет об оценке стоимости за каждый год

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

1 ответ

Вы описываете классовый дисбаланс.

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

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

Мои предложения:

Контролируемый подход

  • SMOTE для передискретизации
  • Xgboost путем настройки scale_pos_weight
  • воспроизвести класс меньшинства, например:10 раз
  • Попробуйте использовать алгоритмы ансамблевого дерева, попытка создания линейной поверхности для вашего случая рискованна.
  • Поскольку ваши данные являются временными рядами, вы можете генерировать дни с классом меньшинства непосредственно перед тем, как произошло настоящее заболевание. Например, у вас есть класс меньшинства в 2010-07-20. Последние наблюдения до этого времени -27.06.2010. Вы можете генерировать наблюдения, слегка изменяя дисперсию, например, 2010-07-15, 2010-07-18 и т. Д.

Неконтролируемый подход

  • Попробуйте алгоритмы обнаружения аномалий. Такие какIsolationForest (попробуйте также расширенную версию).
  • Кластер ваших наблюдений проверяет, класс меньшинства становится кластером или нет. В случае успеха вы можете пометить свои данные именами кластеров (cluster1, cluster2, cluster3 и т. Д.), А затем обучите дерево решений, чтобы увидеть шаблоны разделения. (Kmeans + DecisionTreeClassifier)

Оценка модели

Настройте матрицу затрат. Не используйте напрямую точность матрицы ошибок и т. Д. Вы можете найти дополнительную информацию о матрице затрат здесь: http://mlwiki.org/index.php/Cost_Matrix

Заметка:

Согласно вопросу OP в комментариях groupby год можно было бы сделать так:

df["date"] = pd.to_datetime(df["date"])
df.groupby(df["date"].dt.year).mean()

Вы также можете использовать другие агрегаторы (среднее, сумма, количество и т. Д.)

Другие вопросы по тегам