Przejdź do treści

Prognoza stopy bezrobocia na 2017-2018

Jakie będzie bezrobocie za dwa lata?

A właściwie – jak wyznaczyć przyszłe dane na podstawie historii?

Dzisiaj zajmiemy się prostą (automatyczną) predykcją szeregów czasowych.

Co to jest szereg czasowy? Ano, zbiór danych przypisanych do kolejnych dat (chwil w czasie – będąc bardziej precyzyjnym). Może to być wartość akcji dzień po dniu, może to być temperatura (czy dowolne inne wartości opisujące pogodę) lub cokolwiek innego, co ma swoje wartości w kolejnych momentach czasu. My zajmiemy się stopą bezrobocia w Polsce.

Skorzystamy z miesięcznych danych publikowanych przez GUS. Dane są w ładnej tabelce na stronie, można więc je łatwo z niej wyciągnąć.

Mając przygotowane dane możemy je sobie prosto narysować:

Dodałem dodatkowo czerwoną linię ze średnią ruchomą z 12-okresów.

Rozłóżmy ten szereg na składowe – zobaczymy czy jest sezonowy i jak wygląda trend:

Co tutaj widać? Przede wszystkim trend jest analogiczny do ruchomej średniej narysowanej wcześniej. Ale ważniejsza jest sezonowość.

Wybierzmy kawałek danych (głównie ze względu na sporą rozpiętość stopy bezrobocia w całości danych) i zobaczmy jak to wygląda w poszczególnych miesiącach:

Bezrobocie jest wyraźnie sezonowe – w wakacje spada, w ciągu roku najwyższe jest w lutym/marcu. Powyższy wykres obrazuje raczej różnicę rok do roku, a tutaj

widzimy już wyraźnie różnice miesiąc do miesiąca (poziome kreski; linie to zmiana w poszczególnych miesiącach na przestrzeni lat).

Dobrze, czas na wróźenie z fusów. To znaczy z historii. Bo na tym się skupimy – nasze modele będą próbowały przewidzień przyszłość jedynie na podstawie analizy przeszłości i tego jak jest ona złożona.

Na sam początek podzielimy dane na okres treningowy (na którym zbudujemy model) i testowy (na którym sprawdzimy trafność przewidywań modelu). Za punkt rozdzielający niech posłuży koniec roku 2011.

Model ARIMA

czyli Autoregressive integrated moving average – modele oparte na autoregresji średniej ruchomej. Dość dużo na ten temat można znaleźć w literaturze (ze sporą dawką matematyki), polecam też online’ową książkę. Z polskich materiałów bardzo dobrą książką prowadzącą krok po kroku w świat szeregów czasowych i ich analizy jest Analiza i prognozowanie szeregów czasowych

Bez wchodzenia w szczegóły – wykorzystamy funkcję, która wyznaczy odpowiednie współczynniki modelu samodzielnie. Czasem może się jednak okazać, że te wartości nie są zadowalające, wówczas warto poświęcić czas i spróbować wyznaczyć je samodzielnie. Jak? O tym w wymienionej literaturze.

Mając wyznaczone współczynniki, a właściwie już cały model – zaprognozujmy wartości. Najpierw na podstawie (linijka kodu wyżej) modelu zbudowanego o dane treningowe sprawdzimy jak celne są przewidywania dla okresu danych testowych:

Co tutaj widać? Czarna falowana linia to dane rzeczywiste w okresie treningowym. Linia czerwona – dane rzeczywiste w okresie testowym. Gruba niebieska – to predykcja. Te mniej i bardziej szare pola to zakres dla 80% i 95% pewności przewidywania.

Jak widać predykcja jest dość trafna (niebieska linia blisko czerwonej). Możemy uznać, że model jest całkiem niezły.

Możemy sprawdzić jeszcze “rozjazd oczekiwań z rzeczywistością” – dobrą miarą jest błąd średniokwadratowy RMSE (czyli pierwiastek ze średniej kwadratów odchyleń) 0.2397 – ale uwaga, jest to błąd mierzony na próbce treningowej! Błędy na próbkach testowych zobaczymy za chwilę.

Model ETS

Dokładnie to samo co w przypadku ARIMA zrobimy teraz z użyciem modelu innej klasy: ETS – wygładzanie wykładnicze.

Tutaj mamy rozjazd nieco większy (błąd RMSE to 0.2574), ale wciąż trzyma się to w zakresie 80% pewności. Mniej więcej w podobnym momencie w obu predykcjach wartości prognozowane zaczynają odjeżdżać od rzeczywistych.

Porównanie modeli

Oprócz RMSE jest jeszcze kilka innych współczynników, które możemy porównać:

Tutaj widać m.in. RMSE dla próbek testowych – w przypadku ETS jest to 2.4, dla ARIMA – 1.5. Inne współczynniki też przemawiają na korzyść ARIMA (im niższe tym lepiej).

Teraz – mając już opracowane modele spróbujmy rzeczywiście przewidzieć przyszłość, a nie tylko sprawdzić przewidywania z tym co już wiemy.

Jaka będzie stopa bezrobocia za dwa lata?

Zamiast danych treningowych użyjemy pełnej historii i prognozujemy kolejne dwa lata (24 miesięczne okresy):

Czerwoną linią zaznaczyłem ostatnią znaną wartość stopy bezrobocia (8.1% za marzec 2017).

Być może nie widać tego dokładnie – powiększy tylko kawałek prognozowany:

Widzimy zachowanie “górki” w początku roku 2018 i 2019. Dobrze to wróży.

Wygląda z naszej prognozy, że w lutym 2019 stopa bezrobocia będzie na poziomie 3.9%, co wydaje mi się nierealne. Za rok, w lutym 2018, byłoby to według naszego prostego modelu 6.1%, co jest zdecydowanie bardziej prawdopodobne.

Wydłużając prognozę na 240 okresy (czyli 20 lat) zerowe bezrobocie osiągniemy w maju 2021 roku. Co jest oczywistą bzdurą. Dlatego do prognozowania tego typu danych należy przede wszystkim użyć innych modeli (biorących pod uwagę wiele czynników, a nie tylko historię) i nie prognozować na tak długi okres. Rok to już według mnie wróżenie z fusów.

Jeśli chcemy oprzeć się na historii – branie do modelu zakresu dłuższego niż 10 lat w przypadku tak zmiennych danych nie ma sensu.

Spróbujmy więc przewidzieć stopę bezrobocia w najbliższym roku na podstawie danych z ostatnich 5 lat.

Korzystając (z jak dotychczas “lepszego”) modelu ARIMA:

W modelu klasy ETS:

ETS jak widać daje węższy zakres niepewności. Zielona linia to predykcja z modelu ARIMA. W modelu ETS zachowana została “wiosenna” górka, której brak w prognozie według ARIMA.

Czy którykolwiek z modeli się sprawdzi? Na to trzeba niestety poczekać.

6 komentarzy do “Prognoza stopy bezrobocia na 2017-2018”

  1. Pingback: Nowe pojazdy w Polsce po 2010 roku | Łukasz Prokulski

  2. Mamy wyniki za kwiecień7,7%

    Zgodnie z przewidywaniami opisanymi w poście – stopa bezrobocia za kwiecień miała wynosić:

    • wg modelu ARIMA 7,72 (przedział ufności 80% – 7,45-7,99, ufność 95% – 7,31-8,13)
    • wg modelu ETS 7,78 (80%: 7,71-7,85, 95%: 7,67-7,88)

    Aby to sprawdzić trzeba wypisać wyniki, czyli po prostu w konsoli wpisać na sam koniec: bezrobocie_ts_arima_forecast i bezrobocie_ts_ets_forecast

  3. Super analiza! :) Łukasz, dwie rzeczy:
    1. Bardzo przyjemnie się czyta. Idealne do popołudniowej kawy podczas urlopu.
    2. Dużo można się z Twoich analiz nauczyć. Jestem pełen podziwu za profesjonalne podejście i drobiazgowość.

    Chapeau bas! :)

  4. Pingback: Bezrobocie spada, bo wszyscy wyjechali? | Łukasz Prokulski

  5. Lukasz, swietne artykuly na bardzo wysokim poziomie technicznym i merytorycznym. Mysle, ze aby tak dalej a niebawem ktos rozsadny zauwazy Twoja profesjonalna wiedze w tym temacie i bedziesz niczym SPIN DOCTOR INTELIGENCE pomagal wielkim partjom czy korporacjom analizowac i co wazne przewidywac przyszlosc. Wielki szacunek za dzielenie sie takimi ciekawymi tematami. Wsrod tego calego szumu informacyjnego dzis w sieci niewielu jest takich jak Ty. A znane jest przeciez powiedzenie: „W starożytności władzę miał ten kto miał dostęp do informacji, dziś władzę ma ten kto wie jakie informacje ignorować –
    YUVAL NOAH HARARI” Czekam na jakis Twoj poradnik dla poczatkujacych „Krok po kroku” jak od strony programistycznej rozpoczac nauke tworzenia takich analiz, w szczegolnosci agregowania tresci roznego typu. Pozdrawiam

Skomentuj Łukasz Anuluj pisanie odpowiedzi

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *