Архитектура и методы для нейросетевого классификатора
Подскажите ответ на вопрос:
Вводные: Есть многомерный набор данных, использующийся как вход для сети. Есть бинарный выход - 1 или 0.
Проблема: В наборе данных не у всех есть зависимость выхода от входа. Что я имею в виду: в датасете есть строки, у которых выход +- стабилен при том же входе, а есть те, у которых выход - рандомный. В качестве примера: прогнозируем погоду. Имеем много фичей на вход, и, например, один выход - будет ли шторм в море, или нет. Дело в том, что при определенных стечениях вводных параметров шторм почти всегда будет/не будет. Например, если ветер больше 10 м/с, его направление - Юго-западное, погода пасмурная. В остальных случаях четкой зависимости нет, иначе говоря, если на входе другие значения - результат не предсказуем. И требуется найти именно те вводные данные, при которых результат прогнозируется.
Вопрос 1: Как это сделать? Есть ли способ заставить сеть обучаться таким образом, чтобы условно-похожие данные с условно-похожим результатом давали ответ, а рандомные данные - нет?
Вопрос 2: Самый простой вариант - просто запустить обучаться сеть и надеяться, что она сама сможет выцепить нужные ей параметры. Но здесь есть серьезная проблема: сеть, пытаясь минимизировать ошибку, обучается в соответствии с данным ей в обучении выходом. Иными словами - если в Y при обучении единиц больше, чем нулей - она начинает всегда выдавать единицу, и наоборот (что кажется логичным, ведь задача сети минимизировать ошибку, так что она просто подгоняет ответ в зависимости от распределения результата). Такое происходит и в обычной сети из Dense слоев, и в градиентом бустинге CatBoost. Пробовал с разными функциями активации, и все мимо. Как этого избежать? Какую архитектуру лучше использовать (все данные цифровые)?
Заранее спасибо за ответ.
UPD: Картинка ко второму вопросу - вот такой результат выдает сеть:
Вместо частокола она просто выдает всегда единицу, хотя соотношение 0 и 1 там примерно 60 на 40.