Model multiplikatywny/addytywny Wintersa

Jest to model który używany jest w przypadku gdy w szeregu czasowym pojawia się: trend, wahania sezonowe (addytywne lub multiplikatywne) oraz wahania przypadkowe. Dla osób zainteresowanych tylko programem można go pobrać tutaj:

metoda-wintersa-wersja-1-2

 

(Program działa na systemach operacyjnych windows 7+)

 


Metod Wintersa jest pełną metodą wykorzystującą w prognozie wahania losowe, trend(liniowy) oraz sezonowość(addytywną lub multiplikatywną). Wygładzaniu ulegają zatem trzy elementy:

  • Poziom zmiennej, reprezentowany przez parametr α (alfa) wygładza wahania przypadkowe, α∈<0,1>
  • Przyrost, reprezentowany przez parametr β  (beta) wygładza trend, β∈<0,1>
  • Sezonowość, reprezentowany przez parametr γ  (gamma) wygładza trend, γ ∈<0,1>

Jeśli chodzi o sezonowość możemy wybrać dwa warianty:

Wariant addytywny- wykorzystywany gdy efekt danego sezonu jest stały w czasie

winters_1Wariant multiplikatywny – gdy udział efektów sezonowości jest stały w wartości zmiennej

winters_2Za wartość

winters_33

 

 

 

Zaczynamy standardowo od utworzenia nowego projektu. Elementy do lozlokowania podaje poniżej:

Rodzaj elementu Nazwa elementu ustawienia
Form ModelBrowna Name: ModelBrowna
Text: Model Browna
Size: 1081; 716
DataGridView dgv_dane Name: dgv_dane
AllowUserToAddRows: False
AllowUserToDeleteRows: False
AllowUserToOrderColumn: True
AllowUserToResizeColumns: False
AllowUserToResizeRows: False
AutoSizeColumnsMode: Fill
Size: 566; 320
Location: 12; 29
label ie Text: „0”
Location: 105;380
Name: ie
label SumaRoznic Text: „0”
Location: 105;407
Name: SumaRoznic
label SumaKwadratow Text: „0”
Location: 105;435
Name: SumaKwadratow
label Prognoza Text: „0”
Location: 105;380
Name: Prognoza
label Mape Text: „0”
Location: 293;380
Name: Mape
label Mse Text: „0”
Location: 293;409
Name: Mse
label Rmse Text: „0”
Location: 293;436
Name: Rmse
label WspTheila Text: „0”
Location: 293;460
Name: WspTheila
label me_ Text: „0”
Location: 293;484
Name: me_
label Rmspe Text: „0”
Location: 293;508
Name: Rmspe
label MAE Text: „0”
Location: 293; 547
Name: MAE
label MPE Text: „0”
Location: 240; 572
Name: MPE
MenuStrip1 MenuStrip1 Name: MenuStrip1Dodano w menu:
Dane
– Dodaj dane
– Zakończ
Textbox FilePath Name: FilePath
Location: 123;3
Size: 560;20
Button Odswiez Name: Odswiez
Location: 108; 630
Size: 75; 37
Enabled: false
Chart Wykres1 Name: Wykres1
Location: 785; 35
Size: 268; 187
Ilość serii danych: 2
OpenFileDialog WczytajDane Name: WczytajDane
Chart wykres2 Name: Wykres2
Location: 587; 228
Size: 466; 280
Ilość serii: 2
Chart wykres3 Name: Wykres3
Location: 587; 514
Size: 466; 153
Ilość serii: 2
label Mape_dla_prognozy Text: „0”
Location: 411; 630
Name: Mape_dla_prognozy
TextBox Beta Name: Beta
Location: 58; 539
Size: 43; 20
TextBox Alfa Name: Alfa
Location: 56; 498
Size: 43; 20
TextBox Gamma Name: Gamma
Location: 58; 575
Size: 43; 20
TextBox DlugoscCyklu Name: DlugoscCyklu
Location: 54; 639
Size: 43; 20
RadioButton MultiplikatywnyRB Name: MultiplikatywnyRB
Location: 414; 447
Text: Multiplikatywny
RadioButton AddytywnyRB Name: AddytywnyRB
Location: 414; 471
Text: Addytywny

Po rozłożeniu wszystkich elementów na formę powinna ona wyglądać tak:

metoda_wintersa1

Rozłożenie opisów zostawiam wam do zrobienia. Po dodaniu opisów forma powinna wyglądać tak jak na obrazku:

metoda_wintersa2

Należy pamiętać aby nasze dwa wykresy miały ustawione dwie serie danych, aby to zrobić wybieramy nasz wykres i w jego właściwościach znajdujemy „Series”:

mtbrowna2

Stronę graficzną mamy już z głowy. Zajmijmy się stroną techniczną. Na początek importujemy wymagane elementy i inicjujemy stałe zmienne:

Stworzymy teraz sobie obsługę przycisku wczytującego dane do programu z pliku *.txt, *.csv

 

Teraz należy nasze załadowane dane przenieść do tablicy „dane” robimy to za pomocą metody:

Teraz Stworzymy sobie kod naszej metody:

Teraz dodamy metodę tworzącą wykresy naszego modelu:

Następnie dodajemy funkcjonalność naszego przycisku „Odśwież”, dodałem tu taką właściwość przycisku, że jeśli do textboxa zostaną wpisane inne cyfry/litery niż te należące do zestawu liczb całkowitych dodatnich program wyświetli komunikat i ustawi tą wartość standardowo na 4:

Teraz dodamy sobie funkcjonalność klawiszy góra, dół  które będą nam w zależności od textboxa w którym się znajdujemy zmieniać wartości alfa, beta, gamma o +0,01 albo -0,01.:

Następnie musimy dodać tylko obsługę RadioButtonów i wszystko będziemy mieli gotowe. Pierwszy RadioButton który przełącza na model multiplikatywny musi mieć dodaną dodatkową pętle if, ponieważ jego obsługa może być realizowana tylko wtedy gdy wykres jest już załadowany.

To na tyle. Większość informacji tak jak widać udzieliłem w samym kodzie. Filmik z programem prezentuje poniżej:

Plik z kodem:  Metoda_winters

Plik z danymi: multiplikatywny

Permalink do tego artykułu: https://visualmonsters.cba.pl/model-multiplikatywnyaddytywny-wintersa/

2 Komentarze

    • michał on 24 stycznia 2017 at 12:27
    • Odpowiedz

    Dlaczego jak np wybiorę wartość dla r=5 ft liczone jest dopiero od dla 6 t .. Z tego co pamiętam i zawsze liczyłem dla np r=5 to Ft5 jest średnią średniej Ft1-5 ? czy robiłem to w sposób nieprawidłowy

    1. Witam Pana, dziękuje za komentarz. Projekt umieszczony na stronie jest dosyć stary, dlatego może zawierać jakieś błędy. Nie do końca rozumiem w czym jest problem, ale jeśli jest Pan zainteresowany tylko programem do obliczania tej metody, to zapraszam na stronę:
      https://visualmonsters.cba.pl/index.php/model-multiplikatywnyaddytywny-wintersa2/
      W której dostępny jest program działający poprawnie. Jeśli dobrze zrozumiałem w czym jest problem, to jeśli model zaczynał by się tak jak Pan napisał wtedy nie został by wygenerowany pierwszy element Ct i nie dało by się wtedy obliczyć:
      Ft = α *(yt-Ct-r)+(1-α)(Ft-1+St-1) // ponieważ dla C(1-1) element nie istnieje. Również dalsze elementy Ct były by niemożliwe do obliczenia, ponieważ nie istniałby by element C(1-1).
      Z tego co zauważyłem to program opisany na stronie liczy źle ponieważ dla r=1 występuje błąd. Jednakże wszystko opisane jest w programie i łatwo można zmienić tą opcję.
      Sprawdzę i poprawię wpis, dziękuje za czujność i komentarz.

Dodaj komentarz

Twój adres email nie będzie publikowany.