Возможно ли получить аппроксимацию псевдо-сплайнами на иных базах данных, нежели Oracle Database?
Это третья заметка цикла, посвященного псевдо-сплайн аппроксимации зашумленных данных в рамках сервера баз данных. Повторим вновь и вновь: база данных - это не просто таблицы, а весь цикл обработки данных.
Первая заметка, "Визуализация тренда с помощью псевдо-сплайна и Oracle APEX", рассматривает постановку задачи и обзор ее решения. Вторая заметка, "Под капотом кубической сплайн-аппроксимации", показывает довольно сложные внутренние решения. Естественным образом возник вопрос: есть ли возможность организовать сплайн-аппроксимацию на иных, нежели Oracle Database, базах данных? можно ли обойтись оконными аппроксимациями низких порядков? Позиция автора по первому вопросу достаточно хорошо известна: "Если база - то Oracle"; по второму вопросу попробуем разобраться.
Построим оконные аппроксимации полиномами 3-го (гипербола), 2-го (парабола), 1-го (прямая) и 0-го (скаляр, значение) порядков - и просто посмотрим на них глазами.
Наложим на график сплайн-аппроксимацию полиномами 2-го порядка:
Мы видим, что они практически полностью совпадают везде, кроме краев данных:
Соответственно, если важна историческая аппроксимация, а текущий момент не очень важен, можно позволить снижение порядка аппроксимации с 3 до 2 - правда, это лишь количественное, но не качественное изменение, поскольку по-прежнему нужна пользовательская агрегатная функция. Точность потеряли, облегчения не ощутили. Слабое решение.
А если опуститься до порядка 1? Порядок 1 - это просто прямая, просто линейный тренд. Кстати, встроенный в Oracle:
a0: regr_intercept(y, x)
a1: regr_slope(y, x)
Посмотрим глазами:
Увеличив график, мы видим, что полином 1-го порядка просто "утюжит, как грейдер" локальные колебания процесса:
Увеличим еще больше:
Мы приходим к выводу, что если мы вынуждены использовать усеченную в возможностях базу и перейти к линейной оконной аппроксимации (а она программируется на уровне школьной математики), то мы можем со спокойной душой попрощаться с локальными особенностями процесса - мы их больше не увидим, но тренд посмотреть сможем.
И вот теперь наступает финитный момент: что мы получим, если используем аппроксимацию 0-го порядка, т.е. просто средние, avg()?? Смотрим:
На всем внутреннем диапазоне зашумленных данных мы вновь получили практически полное совпадение аппроксимаций прямыми и средними, кроме, опять же, краев диапазона:
Следует понимать, что аппроксимация средними, полином 0-го порядка, просто "тупо игнорирует" само понятие тренда; соответственно, на краю она идет "ровно по горизонту", поскольку иначе принципиально не может:
Итак, мы имеем следующие наблюдения:
- Аппроксимация полиномами 3-го порядка. Дает хорошее покрытие первичных данных, но требует аппарата пользовательских агрегатных функций. Иногда, поскольку используются 6-е степени аргумента, может привести к переполнению разрядной сетки сервера (!!), но школьный курс математики напоминает нам о логарифмировании и потенцировании.
- Аппроксимация полиномами 2-го порядка по-прежнему требует пользовательских агрегатных функций, ничего особенно не дает, кроме неспособности повернуть два раза по сравнению со случаем 3-го порядка. Не годится, холостой залп.
- Аппроксимация полиномами 1-го порядка может быть записана без встроенных возможностей Oracle, но резко игнорирует процессы внутри интервала аппроксимации, сохраняя более-менее правдоподобный тренд. Типичный вариант для "импортозамещения": внешне похоже, но главное осталось за кадром.
- Аппроксимация полиномами 0-го порядка дает тот же результат, что и аппроксимация 1-го порядка, но игнорирует само понятие тренда на краях диапазона.