Простой алгоритм прогнозирования регрессии в JavaScript

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

введите здесь описание изображения

Моими фактическими данными будут дата и прибыль, и они будут увеличиваться и уменьшаться, а не непрерывно увеличиваться. Я понял, что описанный выше метод работает для выборочных данных, которые продолжают увеличиваться, поскольку прогноз достаточно точен. Однако, когда я изменил данные на те, что на скриншоте, которые безумно увеличиваются и уменьшаются, прогноз уже не так точен.

Просто интересно, есть ли способ повысить точность регрессии, поскольку мои данные будут увеличиваться и уменьшаться.

Спасибо!


person BlackMamba    schedule 23.10.2017    source источник


Ответы (1)


Когда вы выполняете регрессию, вы подгоняете модель к данным. Другими словами, вы говорите: «Вот уравнение, которое примерно описывает, как ведут себя данные». В случае линейной регрессии модель/уравнение:

y = a * x + b

Где x — это вход, а y — это выход. Выполняя линейную регрессию, вы говорите: «Мои данные следуют прямой линии, вот мои данные, какие параметры a и b лучше всего соответствуют данным?».

Очевидно, что если ваши данные не следуют прямой линии, это будет работать плохо. Например, посмотрите на это изображение, которое я нашел на изображениях Google.

Отчетливо видно, что данные имеют какую-то сложную волнистую форму — они идут вверх и вниз, а затем снова вверх. Линейная модель недостаточно сложна, чтобы выразить эту форму (она может создавать только прямые линии). Так что не подходит.

Поскольку вам нужна более сложная модель, вы должны выбрать одну. Есть десятки стандартных, и вы можете составить свой собственный. Вся модель представляет собой уравнение с некоторыми фиксированными параметрами, которые можно настроить так, чтобы уравнение соответствовало вашим данным.

Я предлагаю вам поиграть с параметрами линии тренда в Excel или Google Sheets, чтобы почувствовать это. См. раздел «Типы тренда» здесь для некоторых общие модели.

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

Однако вам не нужна слишком выразительная модель, в противном случае вы переобучите данные (по сути, она увидит закономерности в шуме).

person Timmmm    schedule 24.10.2017
comment
Эй, как вы думаете, может ли кубическая регрессия предсказать волнистый узор? Я сослался на эту тему: stackoverflow .com/questions/22319605/ Я помещаю некоторые тестовые данные, которые идут вверх и вниз, тогда распечатанные прогнозные данные довольно близки к фактическим данным (так что я думаю, что это правильно?). Я не уверен, что прогноз в этом случае точен, поскольку я не уверен, как на самом деле работает прогноз. :( - person BlackMamba; 25.10.2017
comment
Кроме того, формула кубической регрессии: y = ax^3 + bx^2 + cx + d, она правильная? Я понял проблему: когда я использую кубическую регрессию, прогнозируемые данные растут точно в форме «половины дуги». В любом случае, чтобы прогнозируемое значение увеличивалось и уменьшалось? - person BlackMamba; 25.10.2017
comment
Без кубической регрессии не получится. Он может увеличиваться и уменьшаться только один раз — ваши данные увеличиваются и уменьшаются каждый год. Я думаю, вам нужно понимать, что вы делаете. - person Timmmm; 25.10.2017