Sådan opbygges eksponentielle udjævningsmodeller ved hjælp af Python: Simpel eksponentiel udjævning, Holt og Holt-Vinter

Hvor mange iPhone XS sælges i de første 12 måneder? Hvad er efterspørgselstendensen for Tesla, efter at Elon-moskus ryger ukrudt på et live-show? Blir denne vinter varm? (Jeg bor i Canada.) Hvis du er nysgerrig efter disse problemer, løfter eksponentiel udjævning dig muligheden for at kigge ind i fremtiden ved at bygge modeller.

Eksponentielle udjævningsmetoder tildeler eksponentielt faldende vægte til tidligere observationer. Jo nyere observationen opnås, desto højere vægt tildeles. For eksempel er det rimeligt at knytte større vægt til observationer fra sidste måned end til observationer fra 12 måneder siden.

Eksponentiel udjævningsvægt fra fortid til nu

Denne artikel illustrerer, hvordan man bygger Simple Exponential Smoothing, Holt og Holt-Winters modeller ved hjælp af Python og Statsmodeller. For hver model er demonstrationen organiseret på følgende måde,

Statsmodels er et Python-modul, der giver klasser og funktioner til implementering af mange forskellige statistiske modeller. Vi er nødt til at importere den til Python-kode som følger.

fra statsmodels.tsa.api import ExponentialSmoothing, SimpleExpSmoothing, Holt

Kildedatasæt i vores eksempler indeholder antallet af ejendomssalg i en amerikansk by, der dækker perioden 2007-01 til 2017-12.

Kildedatasæt for ejendomssalg

Brug linjeplan, som vi kan se datavariation over år.

df.plot.line (x = 'YEAR_MONTH_SALE_DATE',
             y = 'COUNT_YEAR_MONTH_SALE_SAMPLE')
plt.show ()

Vi vil forudsige ejendomssalg i 2017 ved hjælp af de 10-årige historiske data (2007-2016).

Simpel eksponentiel udjævning (SES)

SES er et godt valg til prognosedata uden nogen klar tendens eller sæsonmønster. Prognoser beregnes ved hjælp af vægtede gennemsnit, hvilket betyder, at de største vægte er forbundet med de seneste observationer, mens de mindste vægte er forbundet med de ældste observationer:

hvor 0≤ α ≤1 er udjævningsparameteren.

Vægtenes reduktionshastighed styres af udjævningsparameteren α. Hvis a er stort (dvs. tæt på 1), tildeles mere vægt til de nyere observationer. Der er 2 ekstreme tilfælde:

  • α = 0: prognoserne for alle fremtidige værdier er lig med gennemsnittet (eller "middelværdien") af de historiske data, der kaldes Gennemsnitlig metode.
  • α = 1: Indstil blot alle prognoser til at være værdien af ​​den sidste observation, der kaldes Naiv-metode i statistikker.

Her kører vi tre varianter af enkel eksponentiel udjævning:

  1. I fit1 giver vi eksplicit modellen udjævningsparameteren α = 0,2
  2. I fit2 vælger vi en α = 0,6
  3. I fit3 bruger vi den autooptimering, der tillader statsmodeller automatisk at finde en optimeret værdi for os. Dette er den anbefalede tilgang.
# Simpel eksponentiel udjævning
fit1 = SimpleExpSmoothing (saledata) .fit (smoothing_level = 0,2, optimeret = False)
fcast1 = fit1.forecast (12) .rename (r '$ \ alpha = 0,2 $')
# grund
fcast1.plot (markør = 'o', farve = 'blå', legende = sandt)
fit1.fittedvalues.plot (markør = 'o', farve = 'blå')



fit2 = SimpleExpSmoothing (saledata) .fit (smoothing_level = 0,6, optimeret = False)
fcast2 = fit2.forecast (12) .rename (r '$ \ alpha = 0,6 $')
# grund
fcast2.plot (markør = 'o', farve = 'rød', legende = sandt)
fit2.fittedvalues.plot (markør = 'o', farve = 'rød')


fit3 = SimpleExpSmoothing (saledata) .fit ()
fcast3 = fit3.forecast (12) .rename (r '$ \ alpha =% s $'% fit3.model.params ['smoothing_level'])
# grund
fcast3.plot (markør = 'o', farve = 'grøn', legende = sandt)
fit3.fittedvalues.plot (markør = 'o', farve = 'grøn')

plt.show ()

Prognosering af ejendomssalg med SES for perioden 2017-01 til 2017-12.

Prognoser med enkel eksponentiel udjævning

Holts metode

Holt udvidede enkel eksponentiel udjævning (løsning på data uden klar tendens eller sæsonbestemmelse) for at muliggøre forudsigelse af data med tendenser i 1957. Holts metode involverer en prognose ligning og to udjævnings ligninger (en for niveauet og en for trenden):

hvor 0≤ α ≤1 er niveauudjævningsparameteren, og 0≤ β * ≤1 er trendudjævningsparameteren.

Ved langsigtet prognose vil prognoser med Holts metode stige eller falde på ubestemt tid fremover. I dette tilfælde bruger vi den dæmpede trendmetode, der har en dæmpningsparameter 0 <ϕ <1 for at forhindre, at prognosen “går vild”.

Igen, her kører vi tre varianter af Halts metode:

  1. I fit1 giver vi eksplicit modellen udjævningsparameteren α = 0,8, β * = 0,2.
  2. I fit2 bruger vi en eksponentiel model snarere end en Holts additivmodel (som er standard).
  3. I fit3 bruger vi en dæmpet version af Holts additive model, men tillader, at dæmpningsparameteren ϕ optimeres, mens værdierne for α = 0,8, β * = 0,2 fastlægges.
fit1 = Holt (saledata). fit (smoothing_level = 0,8, smoothing_slope = 0,2, optimeret = Falsk)
fcast1 = fit1.forecast (12) .rename ("Holts lineære trend")

fit2 = Holt (saledata, eksponentielt = sandt). fit (smoothing_level = 0,8, smoothing_slope = 0,2, optimeret = Falsk)
fcast2 = fit2.forecast (12) .rename ("Eksponentiel tendens")

fit3 = Holt (saledata, dæmpet = sand). fit (smoothing_level = 0,8, smoothing_slope = 0,2)
fcast3 = fit3.forecast (12) .rename ("Additiv dæmpet trend")


fit1.fittedvalues.plot (markør = "o", farve = 'blå')
fcast1.plot (farve = 'blå', markør = "o", legende = sandt)
fit2.fittedvalues.plot (markør = "o", farve = 'rød')
fcast2.plot (farve = 'rød', markør = "o", legende = sandt)
fit3.fittedvalues.plot (markør = "o", farve = 'grøn')
fcast3.plot (farve = 'grøn', markør = "o", legende = sandt)

plt.show ()
Prognoser med Halts metode

Holt-Winters 'metode

(Peter Winters var en studerende af Holt. Holt-Winters 'metode blev først foreslået af Peter, og så arbejdede de på den sammen. Hvilken smuk og fantastisk forbindelse. Ligesom Platon mødte Socrates.)

Holt-Winters 'metode er velegnet til data med trends og sæsonbestemmelser, der inkluderer en sæsonmæssig udjævningsparameter γ. Der er to variationer til denne metode:

  • Tilsætningsmetode: sæsonvariationerne er stort set konstante gennem serien.
  • Multiplikatorisk metode: sæsonvariationerne ændrer sig proportionalt med niveauet for serien.

Her kører vi fuld Holt-Winters metode, herunder en trendkomponent og en sæsonbestemt komponent. Statsmodeller tillader alle kombinationer, herunder som vist i eksemplerne nedenfor:

  1. I fit1 bruger vi additiv trend, additiv sæsonbestemte periode sæson_længde = 4 og en Box-Cox-transformation.
  2. I fit2 bruger vi additiv tendens, multiplikativ sæsonperiode af periode sæsonlængde = 4 og en Box-Cox-transformation.
  3. I fit3 bruger vi additiv dæmpet tendens, additiv sæsonbestemte periode sæson_længde = 4 og en Box-Cox transformation.
  4. I fit4 bruger vi additiv dæmpet trend, multiplikativ sæsonperiode af periode sæsonlængde = 4 og en Box-Cox-transformation.
fit1 = ExponentialSmoothing (saledata, seasonal_periods = 4, trend = 'add', seasonal = 'add'). fit (use_boxcox = True)
fit2 = ExponentialSmoothing (saledata, seasonal_periods = 4, trend = 'add', seasonal = 'mul'). fit (use_boxcox = True)
fit3 = ExponentialSmoothing (saledata, seasonal_periods = 4, trend = 'add', seasonal = 'add', damped = True) .fit (use_boxcox = True)
fit4 = ExponentialSmoothing (saledata, seasonal_periods = 4, trend = 'add', seasonal = 'mul', dæmpet = True) .fit (use_boxcox = True)
fit1.fittedvalues.plot (stil = '-', farve = 'rød')
fit2.fittedvalues.plot (style = '-', color = 'green')

fit1.forecast (12) .plot (stil = '-', markør = 'o', farve = 'rød', legende = sandt)
fit2.forecast (12) .plot (style = '-', markør = 'o', farve = 'green', legend = True)

plt.show ()
print ("Forudsigelse af salg af ejendomme ved hjælp af Holt-Winters-metoden med både additiv og multiplikativ sæsonbestemmelse.")
Prognoser salg af ejendomme ved hjælp af Holt-Winters metode med både additiv og multiplikativ sæsonbestemmelse

For at opsummere gennemgik vi mekanik og pythonkode til 3 eksponentielle udjævningsmodeller. Som nedenstående tabel viser, giver jeg en metode til valg af en passende model til dit datasæt.

Metodologi til eksponentiel udjævning

En oversigt over udjævningsparametre for forskellige komponentformer af eksponentielle udjævningsmetoder.

Udjævningsparametre

Eksponentiel udjævning er en af ​​de mest anvendte og vellykkede prognosemetoder i branchen i dag. Hvordan kan man forudsige detailsalg, turisters ankomst, elefterspørgsel eller omsætningsvækst? Eksponentiel udjævning er en af ​​de supermagter, du har brug for for at afsløre fremtiden foran dig.