Ситуация такова: есть исторические данные по некоему процессу. Данные просты до безобразия: один месяц — одно число. Имеются эти самые числа за все 12 месяцев для лет с 1997 по 2003 (т.е. 7 полных комплектов данных) и за первые 6 месяцев 2004-го. Задача — спрогнозировать эти самые числа на вторую половину 2004-го года и, скажем, на 2005 год. Какой алгоритм вы бы посоветовали бы применить, учитывая что профиль графика изменения измеряемого значения за год меняется мало (от года к году)?
В качестве иллюстрации — см. график. По горизонтали — месяцы года, по вертикали — числовое значение. Один год — одна кривая. Толстая синяя линия — 2004 год.
Здравствуйте, Firstborn, Вы писали:
F> Какой алгоритм вы бы посоветовали бы применить, учитывая что профиль графика изменения измеряемого значения за год меняется мало (от года к году)?
это называется экстраполяция вроде.
так ее и ищи...
например вот тут вроде чтото есть
Здравствуйте, mogadanez, Вы писали:
M>Здравствуйте, Firstborn, Вы писали:
F>> Какой алгоритм вы бы посоветовали бы применить, учитывая что профиль графика изменения измеряемого значения за год меняется мало (от года к году)?
M>это называется экстраполяция вроде. M>так ее и ищи... M>например вот тут вроде чтото есть
Спасибо!
Однако алгоритмов экстраполяции существует миллион и я в них слабо ориентируюсь, потому и интересуюсь — какой лучше выбрать для моего случая?
Здравствуйте, Firstborn, Вы писали:
F>Спасибо! F>Однако алгоритмов экстраполяции существует миллион и я в них слабо ориентируюсь, потому и интересуюсь — какой лучше выбрать для моего случая?
Здравствуйте, mogadanez, Вы писали:
M>Здравствуйте, Firstborn, Вы писали:
F>>Спасибо! F>>Однако алгоритмов экстраполяции существует миллион и я в них слабо ориентируюсь, потому и интересуюсь — какой лучше выбрать для моего случая?
M>самый простой =)
а если серьезно — построй интерполирующий многочлен, и возьми следующую точку у полученой функции
Здравствуйте, mogadanez, Вы писали:
F>>>Спасибо! F>>>Однако алгоритмов экстраполяции существует миллион и я в них слабо ориентируюсь, потому и интересуюсь — какой лучше выбрать для моего случая?
M>>самый простой =)
M>а если серьезно — построй интерполирующий многочлен, и возьми следующую точку у полученой функции
У него функция периодичная... так что лучше периодичными функциями экстраполировать. Например синусами да косинусами.
Здравствуйте, Tan4ik, Вы писали:
T>У него функция периодичная... так что лучше периодичными функциями экстраполировать. Например синусами да косинусами.
Вообще — чистое ИМХО:
функция меняется в двух направлениях... в каждой точке по Y и в целом по X
поэтому надо для каждой точки определить ф-ю Fi() — изменения по вертикали, и эти функции подставлять в выражения полинома либо синусно-косинусной ф-ии... это вторично.
Здравствуйте, Firstborn, Вы писали:
F>Ситуация такова: есть исторические данные по некоему процессу. Данные просты до безобразия: один месяц — одно число. Имеются эти самые числа за все 12 месяцев для лет с 1997 по 2003 (т.е. 7 полных комплектов данных) и за первые 6 месяцев 2004-го. Задача — спрогнозировать эти самые числа на вторую половину 2004-го года и, скажем, на 2005 год. Какой алгоритм вы бы посоветовали бы применить, учитывая что профиль графика изменения измеряемого значения за год меняется мало (от года к году)?
F>В качестве иллюстрации — см. график. По горизонтали — месяцы года, по вертикали — числовое значение. Один год — одна кривая. Толстая синяя линия — 2004 год.
F>
F>Спасибо за помощь!
Усредняем графики за последние несколько лет — это и будет экстраполяция.
Здравствуйте, mogadanez, Вы писали:
M>Здравствуйте, Socrat, Вы писали:
S>>Усредняем графики за последние несколько лет — это и будет экстраполяция.
M>при таком варианте картинки — может это и верно, M>но в случае если заметна тенденция "поднятия" кривой с каждым годом — это юудет ИМХО неверно....
Значит, надо экстраполировать не всю функцию, а по конкретной дате. Правда, тут еще могут быть колебания вроде дней недели...
Здравствуйте, Firstborn, Вы писали:
F>Ситуация такова: есть исторические данные по некоему процессу. Данные просты до безобразия: один месяц — одно число. Имеются эти самые числа за все 12 месяцев для лет с 1997 по 2003 (т.е. 7 полных комплектов данных) и за первые 6 месяцев 2004-го. Задача — спрогнозировать эти самые числа на вторую половину 2004-го года и, скажем, на 2005 год. Какой алгоритм вы бы посоветовали бы применить, учитывая что профиль графика изменения измеряемого значения за год меняется мало (от года к году)?
Тут надо определится что мы видим на графике:
1. Один и тот же процесс, повторяющийся из года в год и просто подверженный случайным изменениям. Т.е. а приори нет закономерных изменений из года в год, а только случайная погрешность измерений.
2. Один "долгий" процесс на протяжении всех этих лет. Т.е. имеются изменения не только в течение года, но и медленная тенденция по годам.
В первом случае я бы выбрал рад "похожих" функций и прогнал бы их методом наименьших квадратов, а затем выбрал лучшую. Во вотором случае все сложнее, грубой аппроксимацией можно потерять "тихое" изменение из года в год. Можно сделать так: исходя из данных каждого года подобрать функцию для изменения в течение года, добавить к ней параметр(ы), отвечающий за изменение по годам и аппроксимировать по всем годам.
Здравствуйте, AMogil, Вы писали:
AM>Тут надо определится что мы видим на графике:
AM>1. Один и тот же процесс, повторяющийся из года в год и просто подверженный случайным изменениям. Т.е. а приори нет закономерных изменений из года в год, а только случайная погрешность измерений. AM>2. Один "долгий" процесс на протяжении всех этих лет. Т.е. имеются изменения не только в течение года, но и медленная тенденция по годам.
AM>В первом случае я бы выбрал рад "похожих" функций и прогнал бы их методом наименьших квадратов, а затем выбрал лучшую. Во вотором случае все сложнее, грубой аппроксимацией можно потерять "тихое" изменение из года в год. Можно сделать так: исходя из данных каждого года подобрать функцию для изменения в течение года, добавить к ней параметр(ы), отвечающий за изменение по годам и аппроксимировать по всем годам.
Это есть случай №2.
Интересно, а можно ли вопринимать эти данные не как N (по числу лет) наборов схожих функций от одной переменной (номера месяца), а как одну функцию от двух переменных (года и месяца)? Упростится ли задача в этом случае?
Здравствуйте, Firstborn, Вы писали:
F>Это есть случай №2. F>Интересно, а можно ли вопринимать эти данные не как N (по числу лет) наборов схожих функций от одной переменной (номера месяца), а как одну функцию от двух переменных (года и месяца)? Упростится ли задача в этом случае?
Имхо, гораздо лучше тогда от номера месяца с начала исчесления.
X = 12*(Год — ГодНачала) + Месяц...
т.е. во втором году будут месяца 13-24 и. т.д т.е. будет не несколько графиков как у тебя, а один длииииииинннныыыййй....
потом его нарезаешь кусками по 12 и выводишь....
Здравствуйте, Firstborn, Вы писали:
F>Ситуация такова: есть исторические данные по некоему процессу. Данные просты до безобразия: один месяц — одно число. Имеются эти самые числа за все 12 месяцев для лет с 1997 по 2003 (т.е. 7 полных комплектов данных) и за первые 6 месяцев 2004-го. Задача — спрогнозировать эти самые числа на вторую половину 2004-го года и, скажем, на 2005 год. Какой алгоритм вы бы посоветовали бы применить, учитывая что профиль графика изменения измеряемого значения за год меняется мало (от года к году)?
F>В качестве иллюстрации — см. график. По горизонтали — месяцы года, по вертикали — числовое значение. Один год — одна кривая. Толстая синяя линия — 2004 год.
Здесь надо полагаться не на математические методы, а на методы, принятые в экономике.
Все просто. У тебя выражен сезонный фактор, определяющий вид кривой за один год. Есть метод под названием "анализ сезонной волны". Поищи его описание.
Вообще, тебе надо делать раздельный прогноз внутри года и общегодовой. Можно сделать по простому, например, так:
а) Сумма значений функции за один год рассматривается как временной ряд по годам (если физический смысл величины допускает осмысленное суммирование, например, если это деньги). Анализируем на цикличность. Для прогноза используем предположения о цикличности или (при их отсутствии) интерполяцию (линейную, квадратичную, экспоненциальную — зависит от природы процесса. Например, цена акций компаний по годам при отсутствии кризисов растет экспоненциально. При отсутствии предположений используем линейную).
б) Распределение внутри года считаем используя сезонное распределение, полученное, например, усреднением значений для распределений для каждого отдельного года.
Здравствуйте, Firstborn, Вы писали:
F>Это есть случай №2. F>Интересно, а можно ли вопринимать эти данные не как N (по числу лет) наборов схожих функций от одной переменной (номера месяца), а как одну функцию от двух переменных (года и месяца)? Упростится ли задача в этом случае?
Можно, так проще получается, но если изменения из года в год слабые, то есть опасность, что полученная функция их не заметит.
Здравствуйте, mogadanez, Вы писали:
M>Здравствуйте, Firstborn, Вы писали:
F>>Это есть случай №2. F>>Интересно, а можно ли вопринимать эти данные не как N (по числу лет) наборов схожих функций от одной переменной (номера месяца), а как одну функцию от двух переменных (года и месяца)? Упростится ли задача в этом случае?
M>Имхо, гораздо лучше тогда от номера месяца с начала исчесления. M>X = 12*(Год — ГодНачала) + Месяц... M>т.е. во втором году будут месяца 13-24 и. т.д т.е. будет не несколько графиков как у тебя, а один длииииииинннныыыййй.... M>потом его нарезаешь кусками по 12 и выводишь....
В принцыпе, если брать одну функцию на все года, то так и надо сделать. Функция должна быть переодичной, но вот чинусоиду нелья брать, нужно что-то такое — VVVV.
Здравствуйте, AMogil, Вы писали:
AM>Здравствуйте, Firstborn, Вы писали:
F>>Это есть случай №2. F>>Интересно, а можно ли вопринимать эти данные не как N (по числу лет) наборов схожих функций от одной переменной (номера месяца), а как одну функцию от двух переменных (года и месяца)? Упростится ли задача в этом случае?
AM>Можно, так проще получается, но если изменения из года в год слабые, то есть опасность, что полученная функция их не заметит.
А если рассматривать не саму функцию, а отклонение от усредненной?