Найти тему
Oracle APEX

Сплайн-аппроксимация низкими порядками полинома

Возможно ли получить аппроксимацию псевдо-сплайнами на иных базах данных, нежели Oracle Database?

Это третья заметка цикла, посвященного псевдо-сплайн аппроксимации зашумленных данных в рамках сервера баз данных. Повторим вновь и вновь: база данных - это не просто таблицы, а весь цикл обработки данных.

Первая заметка, "Визуализация тренда с помощью псевдо-сплайна и Oracle APEX", рассматривает постановку задачи и обзор ее решения. Вторая заметка, "Под капотом кубической сплайн-аппроксимации", показывает довольно сложные внутренние решения. Естественным образом возник вопрос: есть ли возможность организовать сплайн-аппроксимацию на иных, нежели Oracle Database, базах данных? можно ли обойтись оконными аппроксимациями низких порядков? Позиция автора по первому вопросу достаточно хорошо известна: "Если база - то Oracle"; по второму вопросу попробуем разобраться.

Построим оконные аппроксимации полиномами 3-го (гипербола), 2-го (парабола), 1-го (прямая) и 0-го (скаляр, значение) порядков - и просто посмотрим на них глазами.

Сплайн полиномами 3-го порядка.
Сплайн полиномами 3-го порядка.

Наложим на график сплайн-аппроксимацию полиномами 2-го порядка:

Сплайны полиномами 3-го и 2-го порядков.
Сплайны полиномами 3-го и 2-го порядков.

Мы видим, что они практически полностью совпадают везде, кроме краев данных:

Расхождение аппроксимаций 3-го и 2-го порядков на правом краю (текущая дата) диапазона.
Расхождение аппроксимаций 3-го и 2-го порядков на правом краю (текущая дата) диапазона.

Соответственно, если важна историческая аппроксимация, а текущий момент не очень важен, можно позволить снижение порядка аппроксимации с 3 до 2 - правда, это лишь количественное, но не качественное изменение, поскольку по-прежнему нужна пользовательская агрегатная функция. Точность потеряли, облегчения не ощутили. Слабое решение.

А если опуститься до порядка 1? Порядок 1 - это просто прямая, просто линейный тренд. Кстати, встроенный в Oracle:

a0: regr_intercept(y, x)
a1: regr_slope(y, x)

Посмотрим глазами:

Сплайны полиномами 3-го, 2-го и 1-го порядков.
Сплайны полиномами 3-го, 2-го и 1-го порядков.

Увеличив график, мы видим, что полином 1-го порядка просто "утюжит, как грейдер" локальные колебания процесса:

Полином 1-го порядка игнорирует локальные аномалии.
Полином 1-го порядка игнорирует локальные аномалии.

Увеличим еще больше:

Качественное различие между полиномами 2-го и 3-го и 1-го порядка.
Качественное различие между полиномами 2-го и 3-го и 1-го порядка.

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

И вот теперь наступает финитный момент: что мы получим, если используем аппроксимацию 0-го порядка, т.е. просто средние, avg()?? Смотрим:

Полиномы 1-го и 0-го порядков - различий практически нет.
Полиномы 1-го и 0-го порядков - различий практически нет.

На всем внутреннем диапазоне зашумленных данных мы вновь получили практически полное совпадение аппроксимаций прямыми и средними, кроме, опять же, краев диапазона:

Аппроксимация прямыми и средними на краю.
Аппроксимация прямыми и средними на краю.

Следует понимать, что аппроксимация средними, полином 0-го порядка, просто "тупо игнорирует" само понятие тренда; соответственно, на краю она идет "ровно по горизонту", поскольку иначе принципиально не может:

Аппроксимация 0-порядка игнорирует сам факт тренда.
Аппроксимация 0-порядка игнорирует сам факт тренда.

Итак, мы имеем следующие наблюдения:

  • Аппроксимация полиномами 3-го порядка. Дает хорошее покрытие первичных данных, но требует аппарата пользовательских агрегатных функций. Иногда, поскольку используются 6-е степени аргумента, может привести к переполнению разрядной сетки сервера (!!), но школьный курс математики напоминает нам о логарифмировании и потенцировании.
  • Аппроксимация полиномами 2-го порядка по-прежнему требует пользовательских агрегатных функций, ничего особенно не дает, кроме неспособности повернуть два раза по сравнению со случаем 3-го порядка. Не годится, холостой залп.
  • Аппроксимация полиномами 1-го порядка может быть записана без встроенных возможностей Oracle, но резко игнорирует процессы внутри интервала аппроксимации, сохраняя более-менее правдоподобный тренд. Типичный вариант для "импортозамещения": внешне похоже, но главное осталось за кадром.
  • Аппроксимация полиномами 0-го порядка дает тот же результат, что и аппроксимация 1-го порядка, но игнорирует само понятие тренда на краях диапазона.

Наука
7 млн интересуются