timoochin (timoochin) wrote,
timoochin
timoochin

Category:

К вопросу об очистке статистических данных от сезонных колебаний.

Есть в статистическом анализе такая задача - очищать статистику от сезонных колебаний. Чтобы пытаться анализировать динамику электропотребления с точки зрения долгосрочного роста потребности в электричестве, нужно иметь ввиду и как-то учитывать тот факт, что зимой, а также в сильную жару летом электропотребление всегда увеличивается. Зимой народ включает обогреватели, летом - кондиционеры. А потом, когда температура нормализуется - всё это выключается обратно. И чтобы отследить динамику долгосрочного спроса в течение года, надо эти зимние и летние пики как-то удалить.

Другой пример. Есть в Росстате такой показатель - индекс промышленного производства. Рассчитывается он следующим образом. Если сильно упростить, представим себе, что вся промышленность выпускает только один товар. Индекс промышленного производства (ИПП) считается, как отношение выпуска в текущем месяце к выпуску прошлого месяца. Например, в мае выпущено 324 единицы продукции, а в апреле - 286 единиц. Это значит, что ИПП в мае составил 324/286*100 = 113,3%.

Так вот, если мы построим график ИПП месяцам года, то мы увидим, что всегда ИПП очень маленький в январе и феврале, а в марте и декабре - очень большой. Причины:
- в январе и феврале очень мало рабочих дней,
- март по сравнению с февралем всегда выглядит сильно, т.к. рабочих дней намного больше,
- в декабре у многих предприятий подходит годовой контракт, и хотя продукция могла делаться до этого несколько месяцев, учитывается она только в декабре,
- и так далее.

Собственно, причины сезонности не всегда важны. А вот подобрать адекватный способ избавиться от сезонности - задача важная и нужная. Наиболее распространенным методом избавления от сезонности стал расчет ИПП не март к февралю, а март 2009 к марту 2008. Назовем такой индекс ИППг. В принципе, такойй метод исключения сезонности работает. Но у него есть ограничение, о котором мало кто говорит.

Рассмотрим условный график объема выпуска продукции, выраженной в штуках, за четыре года.


Этот график есть сумма трех составляющий. Первая - это тренд, прямая линия с уравнением Y=0,6236*Х+101. Вторая составляющая - это обыкновенный синус с размахом (-2;+2). Из-за него в начале года фактическое производство выше тренда, а во второй половине года - ниже тренда. Наконец, третья составляющая - это ряд случайных чисел, значения которых лежат в пределах (-1;+1). Ряд случайных чисел вносит искажения, и колебания реального производства вокруг тренда из-за этого не являются гладкими.

Этот график я смастерил сам. Составляющие играют следующие роли:
тренд - поступательное развитие промышленности
синус - сезонные колебания
случайные числа - отражают случайные явления, имеющие место в промышленности. У кого-то произошла авария, где-то резко запустили простаивавшее до этого производство, кому-то не подвезли комплектующие и производство встало. Ну или просто вдруг разразился кризис, заказов нет - и производство резко сократилось. Чем не случайный фактор?

Формулировка задачи - убрать сезонность, не зная заранее, какая у неё форма, а имея в наличии только ряд значений суммарной производственной функции за четыре года (Y1, Y2,... Y48). Исходим из предположения, что сезонные колебания из года в год меняются очень слабо и этим изменением можно пренебречь.

1) По имеющемуся ряду рассчитываем уравнение линейного тренда по методу наименьших квадратов. Получаем Y= 0,6013*X + 100,79. Это несколько отличается от истинного тренда, но не сильно.
2) Вычисляем ряд значений тренда в наших точках-месяцах, получаем ряд (Т1, T2,... T48).
3) Вычисляем очищенный от тренда ряд (Y1-T1, Y2-T2,... Y48-T48). С большой степенью точности эти значения представляют собой сумму синуса со случайным рядом. Вот график этого ряда:

Уже видно, что он слегка похож на синус, только сильно избитый. Кроме того, за счет погрешности в вычислении тренда и за счет ненулевой суммы случайного ряда, у нас появилось отклонение среднего от нуля (дрейф нуля)

4) Избавляемся от дрейфа нуля. Это просто - из каждого члена ряда п. 3 вычитаем значение дрейфа (в данном случае - около 0,6). Полученный ряд для сокращения назовем (R1, R2,... R48).

5) Але-гоп, избавляемся от случайного ряда. Для этого высчитываем 12 значений сезонности, по следующей формуле:
S1= (R1+R13+R25+R37)/4
S2= (R2+R14+R26+R38)/4
...
S12 = (R12+R24+R36+R48)/4

Что нам это дает? А очень просто. Значение сезонности, по определению, в апреле каждого года одинаково. А вот значение случайного ряда пляшет туда-сюда вокруг нуля. Поэтому разброс среднего из четырех случайных чисел будет намного меньше (то есть, ближе к нулю), чем разброс одного случайного числа. Иными словами, чем больше случайных чисел мы усредним, тем ближе к нулю у нас будет их среднее значение.

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


Теперь строим искомый ряд, очищенный от сезонности. Заодно покажем на графике:
- как выглядит фактический ряд без сезонности (то есть как выглядит идеальное решение задачи),
- то, что мы получим по упомянутому в начале рассказа методу - по расчету "месяц этого года к месяцу прошлого",
- фактические значения случайного ряда.



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

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

Уважаемый мною товарищ alexsword пошел несколько дальше. Он в своем анализе промышленности (тут) строит график, рассчитывая следующие ряды значений:
январь 2006 к январю 2005
январь 2007 к январю опять 2005
январь 2008 к январю опять 2005
январь 2009 к январю опять 2005.

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

В нашей условной задаче уровень случайных колебаний достаточно низкий, и недостаток выпер со всей контрастностью. В реальности уровень случайностей намного больше, и "лесенку" сразу не увидеть. Вот что получается при обработке реальных данных о промышленном производстве в России:


На первый взгляд кривые в целом похожи. Однако это не совсем так. Во-первых, по изложенной методике за уровень 100% принимается январь 2005 года, а по методике Алекса каждый месяц 2005 года является уровнем в 100% для всех таких месяцев в остальных годах. В результате кривая Алекса проходит ниже.
Кроме того, по некоторым месяцам наблюдается расхождение по знаку изменения, так как и в сравнении с методом "месяц текущего года к месяцу прошлого года". Правда в случае в реальными стат. данными у нас нет истинных значений, поэтому и достоверно проверить - кто более прав? - не представляется возможным. Хотя, учитывая усреднение формы по четырем годам в моей методике, я склонен больше доверять ей.

На реальных данных вроде бы незаметен "эффект лесенки", полученный по методу Алекса на модельной задаче. Однако он есть, просто замаскирован высоким уровнем случайных колебаний. Если построить трендовые линии к каждому году в отдельности, то "лесенка" появится снова (здесь для 2008 года я взял отрезок только до августа - дальше там кризисный переполох):


Розовые кривульки - мои, черные - Алекса. Месяцы внизу цифрами оставил, поленился - ночь уже, спать хочу. Если кому охота проверять расчеты - вот файлик с таблицами, графиками и пр.: timatkov.pisem.su/flashcard/stat.xls

Вот такая вот фигня, малятки. Всех приглашаю к обсуждению.


Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 9 comments