← Все записи

Когда тестовые годы оказались теплее: что случилось с моими SST-базовыми методами

7 ноября 2026 г.

Прежде чем сравнивать с простыми базовыми методами любую обучаемую модель, я хотел узнать, насколько трудно их превзойти, на примере ежедневной температуры поверхности океана (SST). Рейтинг методов, который я увидел на валидационных годах (2016-2019), не сохранился на тестовых (2020-2025). Эта статья о том, что изменилось, что я могу и чего не могу сказать о причине, и о небольшой LSTM, которую я добавил позже.

Все числа взяты из README и файлов results/ репозитория sst-baselines. Это исследование базовых методов и их оценки, а не оперативная система прогноза.

Постановка

  • Данные: ежедневная SST NOAA OISST v2.1, с 1982-01-01 по 2025-12-31, 16,071 ежедневных полей на район, сетка 40x40. В агрегации ERDDAP не хватало 1,194 дней на район; я заполнил их из NOAA PSL, проверив, что два источника совпадают на всех пересекающихся днях.
  • Районы: два участка 10°×10° в северной части Тихого океана. Район Куросио с высокой изменчивостью (30.125-39.875°N, 145.125-154.875°E) и субтропический район с низкой изменчивостью (15.125-24.875°N, 150.125-159.875°E).
  • Разбиение: обучение 1982-2015, валидация 2016-2019, тест 2020-2025. Заблаговременность 1, 7 и 30 дней.
  • Шесть базовых методов: персистентность, климатология, персистентность аномалии, затухающая персистентность, 10-летняя ежедневная климатология (OCN) и Ridge-регрессия для каждой точки сетки.
  • Протокол: зафиксирован до того, как я посмотрел оценки на валидации или тесте. Тестовый период оценивался один раз, после того как я заморозил конфигурацию и пометил её тегом pre-test-freeze; иначе код отказывается запускать тест.

Каждый метод я оцениваю через скилл относительно персистентности аномалии, то есть «климатология на целевой день плюс сегодняшняя аномалия». Скилл равен 1 − RMSE/RMSE_reference, поэтому значение выше 0 означает лучше персистентности аномалии, ниже 0 — хуже. Персистентность аномалии оказалась планкой, которую надо превзойти, особенно на 1 день.

Что случилось в тестовые годы

Ridge и затухающая персистентность оба сдвигают прогноз к климатологии 1982-2015. На валидации они опережали персистентность аномалии на большинстве заблаговременностей. На тесте они потеряли большую часть или всё это преимущество. Скилл относительно персистентности аномалии на 1, 7 и 30 дней:

Метод, район Валидация (2016-2019) Тест (2020-2025)
Ridge, Куросио +0.041, +0.077, +0.176 +0.025, +0.007, +0.088
Ridge, субтропики +0.022, +0.056, +0.090 −0.049, −0.049, +0.006
Затухающая персистентность, Куросио +0.010, +0.067, +0.164 −0.017, −0.012, +0.058
Затухающая персистентность, субтропики −0.004, −0.017, +0.028 −0.109, −0.178, −0.091

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

Возможное объяснение, но не доказанное

Валидационные и тестовые годы теплее климатологии 1982-2015, причём тестовые — сильнее. Среднее смещение прогноза по климатологии меняется с −0.500 °C (Куросио) и −0.539 °C (субтропики) на валидации до −0.827 °C и −0.656 °C на тесте. Смещение 30-дневного прогноза затухающей персистентности меняется с −0.324 и −0.325 °C до −0.527 и −0.392 °C. Метод, который тянется к более старой климатологии, платит больше, когда море теплее этой климатологии, так что это согласуется.

Но репозиторий не показывает, что причина именно в потеплении. Я не проверял никакие альтернативные объяснения, поэтому не могу ни ранжировать их, ни исключить. Могу перечислить применимые ограничения: я не убирал тренд (вместо этого включён OCN), разбиение одно и фиксированное, без кросс-валидации по временным блокам, шесть тестовых лет — короткий ряд, а Ridge обучается отдельно в каждой точке сетки и игнорирует пространственную структуру. Я ещё изучаю океанографию, поэтому считаю это описанием, а не физическим объяснением.

Небольшая LSTM и почему я не делаю из неё общих выводов

Когда базовые методы были готовы, я добавил небольшую LSTM. Она видит ту же информацию, что и Ridge, то есть последние 30 дней аномалии в одной точке сетки, с 1 слоем и размером скрытого состояния 64, выбранным на валидации. Я обучил 3 запуска на район и привожу среднее по запускам, без выбора лучшего и без ансамбля. Протокол я написал и пометил тегом pre-lstm-test до загрузки тестового периода, а затем запустил тест один раз.

Скилл относительно Ridge на тесте на 1, 7 и 30 дней:

  • Субтропики: +0.029, +0.025, +0.022. LSTM превзошла Ridge на всех заблаговременностях.
  • Куросио: −0.061, −0.017, −0.001. Ridge она не превзошла. На валидации значения на 7 и 30 дней были слегка положительными (+0.006, +0.014), и это преимущество не сохранилось.

Субтропический результат слабее, чем кажется. Ridge сам хуже персистентности аномалии на 1 и 7 дней в этом районе, и LSTM там тоже отстаёт от персистентности аномалии (−0.018 и −0.023). Кроме того, LSTM получает полную 30-дневную последовательность и день года, а Ridge — меньше входов, поэтому часть выигрыша может быть от входов, а не от модели. Я этого не проверял. Два района дали разные ответы, и единственное, что я из этого выношу: не стоит строить историю на одном результате в одном районе.

Что я из этого вынес

  • Прежде чем верить рейтингу с валидации, проверь, держится ли он на более позднем периоде.
  • Прямо говори, какое объяснение согласуется с данными, а какое доказано.
  • Обучаемая модель, которая выигрывает в одном районе и проигрывает в другом, — это не результат про глубокое обучение.

Ограничения: два небольших района и один продукт (OISST), только простые статистические базовые методы и нет доверительных интервалов. Код открыт, так что каждое число в этой статье можно сверить с results/test_all.json, results/val_all.json и results/lstm_test.json.

Код написан с помощью Claude Code; методология, решения и проверка результатов — мои.