{"id":14276,"url":"\/distributions\/14276\/click?bit=1&hash=721b78297d313f451e61a17537482715c74771bae8c8ce438ed30c5ac3bb4196","title":"\u0418\u043d\u0432\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u043b\u044e\u0431\u043e\u0439 \u0442\u043e\u0432\u0430\u0440 \u0438\u043b\u0438 \u0443\u0441\u043b\u0443\u0433\u0443 \u0431\u0435\u0437 \u0431\u0438\u0440\u0436\u0438","buttonText":"","imageUuid":""}

Через тернии к звёздам или анализ данных в делах небесных

Data Science. Казалось бы, уже каждый слышал об этом много раз. Но сегодня мы отправимся туда, где услышать что-то о нём — невозможно, по совершенно объективной причине —отсутствию атмосферы. Но даже там есть то, что можно подвергнуть анализу. Just for fun.

Пока мы сидим в офисе, попивая горячий чай, где-то там на просторах космоса происходит что-то действительно важное. То, что приковывает взгляды астрономов и исследователей со всего мира, завораживает, интригует, а может и пугает тех, кто знает об этом чуть больше, чем мы. Рождаются новые Галактики, летает Тесла Илона Маска под песни бессмертного Дэвида Боуи, в общем, красота.

Но вернёмся на время на Землю. Так уж получилось, что анализ данных – потребность кросснаучная. И тем привлекательная. Поскольку исследовано может быть всё, от недр Земли до бескрайнего космоса.

Хочу рассказать о подобном опыте, а именно об участии в международной олимпиаде по анализу данных IDAO 2019, которую уже третий год подряд проводит мой родной университет ­­­­– НИУ ВШЭ.

Задача сводилась к предотвращению и детекции «космических ДТП», когда спутники на орбите при неоптимальных траекториях движения врезаются друг в друга, превращаясь в космический мусор, который на космических скоростях вполне может стать причиной ещё нескольких аварий, потери нескольких миллионов долларов и нескольких вызовов на ковёр где-нибудь в NASA или Роскосмосе. Почему так случилось? Очевидно, виноваты звёзды. Или нет, давайте разбираться. К слову, статистика по количеству космических объектов земного происхождения, летающих на околоземной орбите, приведена ниже.

Из неё видно, что количество космического мусора увеличивается год от года. Итак, здесь я постараюсь рассказать, как мы смогли занять 22 место из 302.

Для начала рассмотрим исходные данные, которые выглядят следующим образом.

Где , y,z – координаты объекта в трёхмерном пространстве, а Vx, Vy, Vz ­– скорости. Также присутствуют симуляционные данные, полученные алгоритмом GPT-4 с префиксом _sim, которые мы использовать не будем.

Для начала построим простейшую визуализацию, это поможет понять, как устроены данные. Я использовал plotly. Если рассматривать данные в двухмерной системе координат, то они выглядят следующим образом. Ниже отображены данные по оси y седьмого спутника. Больше графиков, которые можно повертеть мышкой и поскалить и при этом с пользой провести время, в. ipynb на Github.

При проведении EDA (Explorative Data Analyze) было замечено, что в данных присутствуют наблюдения, отличающиеся по времени на одну секунду. Их необходимо удалить, чтобы сохранить сезонность. Скорее всего один и тот же объект был детектирован в одной и той же точке дважды.

Если кратко, данный временной ряд явно имеет линейный тренд и сезонность, равную 24, т. е. спутник совершает оборот вокруг Земли за 24 наблюдения. Это поможет в дальнейшем выбрать оптимальный алгоритм.

Теперь напишем функцию, которая будет предсказывать значения временного ряда, используя алгоритм sarima (была использована реализация из пакета statsmodels), при этом оптимизируя параметры модели и выбирая лучшую с минимальным значением критерия Акаике. Он показывает, насколько модель усложнена параметрами и «переобучена». Формула приведена ниже.

Конечный вывод выглядел следующим образом:

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

Метрикой качества была SMAPE ­­ симметричная средняя процентная ошибка.

Финальная формула выглядела следующим образом:

В конечном итоге мы получили кучи исписанных не очень хорошим кодом. ipynb тетрадок, csv файлов с абсолютно алогичными названиями, бессонных ночей, тысячи обновлений лидерборда, десятки упавших сабмитов и прочих прелестей ML хакатонов, ну и 22 место из 302 команд на приватном лидерборде, т.е. попали в ТОП 7%.

В качестве идей для оптимизации решения предлагается попробовать углубиться в EDA, чтобы понять данные на более низком уровне, попробовать использовать другие предсказательные алгоритмы. Более подробный анализ в репозитории. Любите ML и stay tuned.

0
Комментарии
-3 комментариев
Раскрывать всегда