Ga naar hoofdinhoud

Facebook Prophet: een moderne aanpak voor tijdreeksvoorspelling

Begrijp hoe Facebook Prophet trends, seizoensinvloeden en speciale gebeurtenissen modelleert voor nauwkeurige en interpreteerbare voorspellingen.
· 10 min lezen

Verken met AI

Bedrijven zijn afhankelijk van het voorspellen van toekomstige trends om strategische keuzes te maken, zoals het voorspellen van productverkopen of het inschatten van vraagvariatie. Een manier om effectieve voorspellingen te doen is tijdreeksvoorspelling. Een belangrijk principe van tijdreeksvoorspelling is de afhankelijkheid van historische datapunten om toekomstige resultaten te voorspellen. Dat vraagt om aandacht voor data, omdat praktijkdata vaak ruis bevat of ontbreekt, en dus lastig te voorspellen is.

Hoewel er veel tools zijn voor tijdreeksvoorspellingen, is Facebook Prophet specifiek ontworpen om om te gaan met realistische complexiteit, variërend van niet-lineaire trends en seizoensinvloeden tot de impact van speciale gebeurtenissen zoals feestdagen en marketingcampagnes of verkeerspieken. Als je helemaal niet bekend bent met tijdreeksvoorspellen, raad ik onze cursus Time Series Analysis in Python en/of onze cursus Forecasting in R aan.

Wat is Facebook Prophet?

Prophet is een open-sourcelibrary voor voorspellingen, ontwikkeld door Facebook’s Core Data Science-team. Het is beschikbaar in zowel Python als R. Een deel van de reden waarom data-analisten en data scientists het graag gebruiken, is dat het veel van de saaie stappen in traditionele voorspelmethoden automatiseert. Met die flexibiliteit helpt het gebruikers snel interpreteerbare en goede voorspellingen te maken.

De kern van Facebook Prophet’s modelleringskader

De modelleringsaanpak van Facebook Prophet is gestructureerd maar flexibel. Het decomponeert een tijdreeks in vier belangrijke componenten: trend, seizoensinvloed, feestdagen en fout. Die derde component, die ik de feestdagcomponent noemde, is minder standaard. Klassieke en STL-decompositie specificeren drie delen: trend, seizoensinvloed en fout.

Door te verduidelijken hoe trend, seizoensinvloed en feestdagen bijdragen aan de uiteindelijke voorspelling, helpt de decompositie om de redenering van het model te valideren terwijl we weloverwogen beslissingen proberen te nemen.

Decompositie van tijdreeksen

Prophet gebruikt een additief model waarin de tijdreeks y(t) als volgt wordt weergegeven:

Facebook Prophet tijdreeksdecompositie-vergelijking

Waarbij 

  • Trend (g(t)) staat voor langetermijngroei of -daling.

  • Seizoensinvloed (s(t)) omvat terugkerende patronen zoals wekelijkse, maandelijkse of jaarlijkse fluctuaties.

  • Feestdageneffecten (h(t)) houden rekening met onregelmatige maar voorspelbare gebeurtenissen, zoals Black Friday of nationale feestdagen.

  • Fout (et) is de residuele ruis die niet door de andere componenten wordt verklaard.

Naast interpretatie door te laten zien welke factoren de voorspellingen aansturen, automatiseert het ook het grootste deel van het tijdreeksvoorspelproces, zoals het detecteren van seizoensinvloeden en het behandelen van ontbrekende waarden.

Door deze complexe voorbewerkingen af te handelen, verlaagt Prophet de behoefte aan uitgebreide statistische expertise, zoals vaak vereist is bij conventionele statistische methoden. ARIMA vereist bijvoorbeeld dat stationariteitsaannames gelden en houdt officieel geen rekening met externe factoren, terwijl Prophet seizoensinvloeden en feestdagimpact expliciet modelleert, waardoor het als makkelijker wordt gezien voor zakelijke voorspellingen.

Specificatie van de trendcomponent

Prophet heeft twee trendmodellen:

  1. Het logistische groeimodel is nuttig wanneer een tijdreeks verzadigt op een maximale capaciteit, vergelijkbaar met wat gebeurt bij gebruikersadoptie van een nieuwe app.
  2. Het stukgewijs lineaire model verdeelt de trend in segmenten met kantelpunten (changepoints), wat het eenvoudig maakt om plotselinge veranderingen in groei te modelleren.

Seizoensinvloeden modelleren

Seizoensinvloed wordt gemodelleerd met een Fourierreeks die vloeiende periodieke functies in tijdreeksdata mogelijk maakt. Er zijn twee hoofdvormen van seizoensgedrag:

  • Additieve seizoensinvloed is gewenst wanneer seizoensvariaties in grootte consistent blijven in de tijd.
  • Multiplicatieve seizoensinvloed is passend wanneer seizoensfluctuaties met de trend meegroeien, zoals een stijgend verkoopvolume bij algemene marktgroei.

Daarnaast kunnen gebruikers ook aangepaste seizoensinvloeden definiëren om unieke, domeinspecifieke patronen vast te leggen, bijvoorbeeld kwartaalpromoties.

Integratie van feestdagen en events

Prophet biedt ook de mogelijkheid om zowel vooraf gedefinieerde feestdagen als willekeurige lijsten met events op te nemen. Dit is vooral voordelig bij het modelleren van conjunctuurcycli, culturele feestdagen of eenmalige events zoals productlanceringen. Je kunt onverwachte gebeurtenissen zoals COVID-19 ook toevoegen als extra regressoren om voorspellingen dynamisch bij te werken. Het expliciet modelleren van zulke events verbetert de nauwkeurigheid en geeft inzicht in de impact van speciale data op onderliggende trends.

Omgaan met ruis en uitschieters

Echte data bevat vaak ruis en uitschieters, wat kan leiden tot vertekende modelvoorspellingen. Prophet heeft robuuste verliesfuncties en niet-parametrische trendcomponenten die de voorspellingen sterker maken tegen uitschieters in de data.

Om de stabiliteit van voorspellingen verder te verbeteren, is het handig om residudiagrammen te analyseren en data voor te bewerken door te winsoriseren of anomalieën te verwijderen. Zo leert het model de werkelijke trends, in plaats van willekeurige ruis.

Wanneer Facebook Prophet gebruiken (en wanneer niet)

Zoals de meeste machinelearningmodellen en -technieken is Prophet geen one-size-fits-alloplossing. Begrijpen waar het in uitblinkt en waar niet, is cruciaal om het effectief te gebruiken.

Sterke punten en ideale scenario’s

Prophet is vooral effectief wanneer:

  • Data duidelijke dagelijkse, wekelijkse of jaarlijkse seizoensinvloeden heeft.
  • Datasets incompleet zijn en geautomatiseerde afhandeling van ontbrekende waarden en uitschieters nodig hebben.
  • Gebruikers snel verkennende analyses en eerste modelontwikkeling nodig hebben.

De eenvoud maakt het toegankelijk voor gebruikers met beperkte statistische expertise, terwijl de interpreteerbaarheid analisten en data scientists helpt om resultaten effectief te communiceren aan niet-technische stakeholders.

Beperkingen en valkuilen

Prophet is mogelijk minder geschikt in de volgende scenario’s:

  • Zeer volatiele of niet-seizoensgebonden data, waar geen regelmatige periodieke patronen zijn.
  • Langetermijnvoorspellingen wanneer trends onvoorspelbaar zijn.
  • Niet-lineaire trends die niet worden vastgelegd door de stukgewijs lineaire of logistische modellen.

Een gouden regel bij het gebruik van Prophet, of elk voorspelmodel, is om het niet blindelings te adopteren. Zonder goede validatie kunnen modellen gemakkelijk te zelfverzekerde of misleidende voorspellingen produceren, zoals ook te zien is in diverse communitydiscussies en spraakmakende voorspelmissers.

Werken met Prophet in Python

Stap 1: Libraries importeren

Laad eerst alle vereiste Python-packages:

  • pandas voor datamanipulatie

  • prophet om het voorspelmodel te bouwen

  • matplotlib voor visualisatie

  • sklearn.metrics – om MAPE, de foutmaat, te berekenen

import pandas as pd
from prophet import Prophet
import matplotlib.pyplot as plt
from sklearn.metrics import mean_absolute_percentage_error

Stap 2:  Dataset laden

Vervolgens lezen we ons CSV-bestand in met historische goudfuturesprijzen. Hier is een link naar de Kaggle-dataset die ik gebruik.

file_path = "future-gc00-daily-prices.csv"
gold_ts = pd.read_csv(file_path)

Stap 3: Data opschonen

Nu moeten we de data opschonen. Dat betekent dat we:

  • Komma’s uit numerieke kolommen verwijderen en ze omzetten naar floats.

  • De kolom Date converteren van stringformaat naar datetime.

Dit zorgt ervoor dat Prophet datums correct kan begrijpen en ordenen.

for col in ["Open", "High", "Low", "Close"]:
    gold_ts[col] = gold_ts[col].str.replace(",", "").astype(float)
gold_ts["Date"] = pd.to_datetime(gold_ts["Date"], format="%m/%d/%Y")

Stap 4: Sorteren op datum

We zetten de data in chronologische volgorde. Dit is een belangrijke stap die makkelijk gemist wordt.

gold_ts = gold_ts.sort_values("Date")

Stap 5: Data voorbereiden voor Prophet

We moeten de data ook voorbereiden voor Prophet, dat verwacht dat de invoerkolommen als volgt heten:

  • ds → datestamp

  • y → waarde om te voorspellen (hier de Close-prijs)

gold_ts = gold_ts[["Date", "Close"]].rename(columns={"Date": "ds", "Close": "y"})

Stap 6: Opsplitsen in train- en testsets

We splitsen de data nu op in een trainings- en testversie. 

  • Bewaar het grootste deel van de data voor training.
  • Reserveer de laatste 180 rijen (of 10% als het minder is) om de nauwkeurigheid van het model te testen.
test_size = min(180, len(gold_ts) // 10)
train = gold_ts.iloc[:-test_size]
test = gold_ts.iloc[-test_size:]

Stap 7: Het Prophet-model fitten

Train Prophet op de historische data met zowel dagelijkse als jaarlijkse seizoenscomponenten ingeschakeld.

model = Prophet(daily_seasonality=True, yearly_seasonality=True)
model.fit(train)

Stap 8: Toekomstige waarden voorspellen

We voorspellen voor evenveel dagen als in de testset.

De voorspelling bevat kolommen zoals yhat (voorspeld), yhat_lower en yhat_upper.

future = model.make_future_dataframe(periods=test_size)
forecast = model.predict(future)

Stap 9: Voorspellingen uitlijnen met werkelijkheden

Voeg werkelijke slotkoersen samen met modelvoorspellingen op overeenkomende datums om ze direct te vergelijken.

merged = pd.merge(test, forecast[["ds", "yhat"]], on="ds", how="inner")

Stap 10: MAPE berekenen

We meten nu hoe nauwkeurig de voorspelling is. Als er geen overlap in datums is, krijg je een waarschuwing in plaats van een crash.

if merged.empty:
    print("No overlapping dates between forecast and test set.")
else:
    mape = mean_absolute_percentage_error(merged["y"], merged["yhat"]) * 100
    print(f"Mean Absolute Percentage Error (MAPE): {mape:.2f}%")

Hier is de mean absolute percentage error (MAPE): 5,83%

MAPE-vergelijking

Stap 11: De voorspelling plotten

We visualiseren de voorspelling, betrouwbaarheidsintervallen en de werkelijke historie.

fig1 = model.plot(forecast)
plt.title("Gold Futures (GC00) - Close Price Forecast")
plt.xlabel("Date")
plt.ylabel("Close Price")
plt.show()

Facebook Prophet voorspellingsresultaat

Stap 12: Seizoenscomponenten plotten

Het is nuttig om te laten zien hoe trend, dagelijkse en jaarlijkse seizoenspatronen bijdragen aan de voorspelling.

fig2 = model.plot_components(forecast)
plt.show()

Facebook Prophet seizoensdecompositie

Stap 13: Voorspellingssamples bekijken

Geef de laatste voorspelde waarden en hun onzekerheidsmarges weer.

print(forecast[["ds", "yhat", "yhat_lower", "yhat_upper"]].tail(10))

Voorbeeld van voorspelde waarden:

             ds         yhat   yhat_lower   yhat_upper
3714 2023-11-09  1834.568081  1743.127873  1922.791205
3715 2023-11-10  1833.323500  1749.265678  1937.246093
3716 2023-11-11  1832.818196  1740.941278  1921.772611
3717 2023-11-12  1832.370884  1745.285047  1925.012684
3718 2023-11-13  1832.644350  1736.792708  1919.057042
3719 2023-11-14  1832.017761  1736.229502  1929.786669
3720 2023-11-15  1831.650906  1743.190077  1924.851936
3721 2023-11-16  1831.566521  1738.181184  1933.026740
3722 2023-11-17  1830.427713  1736.038529  1919.505155
3723 2023-11-18  1830.029816  1737.022754  1922.118728

Valideren en testen van Facebook Prophet

Validatiemethodologie

Tijdreeks-crossvalidatie is vereist om realistische voorspel­scenario’s te simuleren. Het is belangrijk om de modelprestatie te evalueren op meerdere, opeenvolgende validatiesets. Dat helpt niet alleen om lookahead bias te vermijden, maar biedt ook generaliseerbaarheid naar toekomstige, ongeziene data.

Enkele standaard evaluatiematen zijn:

  • Mean absolute error (MAE) meet de gemiddelde grootte van fouten, zonder richting mee te nemen.
  • Mean absolute percentage error (MAPE) meet het gemiddelde absolute procentuele verschil. Het is gemakkelijk te interpreteren over verschillende schalen. Dit is degene die we in ons Python-voorbeeld bekeken.

Vergelijkende analyse

Vergeleken met ARIMA of LSTM is Prophet goed in:

  • Omgaan met onregelmatige seizoensinvloeden en feestdageneffecten
  • Robuustheid tonen tegen ontbrekende data, uitschieters en zakelijke onregelmatigheden

Toch kan Prophet minder presteren in scenario’s met sterk niet-lineaire patronen of datasets met zwakke seizoensinvloeden. 

Praktische toepassingen en beperkingen

Praktijkcases

Prophet is breed toegepast in verschillende sectoren voor use-cases zoals:

  • Retail-voorspellingen voor verkoop, vraaginschatting en voorraadbeheer
  • Voorspellen van webverkeer om gebruikersbetrokkenheid te begrijpen
  • Vraagvoorspelling voor energie om aanbod en verbruik efficiënt in balans te brengen.

Ondanks de voordelen zijn er momenten geweest waarop historische patronen faalden door onverwachte verstoringen, zoals tijdens de pandemie. 

Schaalbaarheidsbeperkingen

Prophet kan matig grote datasets aan, wat passend is voor de meeste zakelijke en operationele voorspeltaken. Het gebruik met extreem grote datasets of hoogfrequente tijdreeksen is echter rekenintensief vanwege het onderliggende Bayesiaanse modelleringskader. Om dit te verlichten, wordt aangeraden om meerdere tijdreeksen parallel te voorspellen. Een andere praktische aanpak is het aggregeren of downsamplen van data. Dat verlaagt het geheugen- en rekentijdverbruik zonder waardevolle temporele patronen te verliezen.

Belangrijkste beperkingen

Prophet gaat uit van één doelvariabele en modelleert de trend met stukgewijs lineaire of logistische groeicurves. Zulke aannames beperken de flexibiliteit voor multivariate of problemen waar de trend niet domineert. Daarom is het nodig om domeinkennis toe te voegen aan Prophet’s voorspellingen, samen met externe validatie om betrouwbaarheid te waarborgen.

Mislukkingen en kritiek in de praktijk

Spraakmakende voorspelmissers, zoals de ineenstorting van de huizenmarktvoorspellingen bij Zillow, benadrukken de risico’s van overmatige afhankelijkheid van geautomatiseerde voorspelsoftware. Te veel vertrouwen op modeluitvoer zonder menselijke review kan tot kostbare fouten leiden. Daarom wordt aangeraden om grondige validatie en scenarioplanning uit te voeren bij het interpreteren van voorspelresultaten.

Aarzel niet om elk model en elke trend te bevragen. Stimuleer een cultuur die kritisch denken bevordert en teams in staat stelt de status quo uit te dagen. Ik heb zulke teams consequent robuuste voorspeloplossingen zien bouwen. 

Tot slot raad ik sterk aan om een "vertrouwen maar verifiëren"-mentaliteit aan te nemen en een extra laag van je domeinkennis toe te voegen om de resultaten op gezond verstand te toetsen. 

Toekomstige ontwikkelrichting

Prophet blijft zich ontwikkelen door onderzoek en communitybijdragen. Doorlopende verbeteringen in Prophet omvatten:

  • Multivariate ondersteuning
  • Verbeterde schaalbaarheid voor grote datasets
  • Community-gedreven extensies

Actief onderzoek richt zich op het integreren van nieuwe statistische methoden en het verbeteren van prestaties in complexe, hoogfrequente datasets.

Conclusie

Facebook Prophet is een krachtig hulpmiddel voor tijdreeksvoorspelling, met automatisering, interpreteerbaarheid en flexibiliteit. Het presteert goed voor verkennende voorspellingen in het bedrijfsleven en andere domeinen met sterke seizoensinvloeden of speciale gebeurtenissen.

Maar dat maakt het nog geen plug-and-playoplossing. Om betrouwbare voorspellingen te doen, moeten gebruikers zorgen voor zorgvuldige validatie, parameterafstelling en domeinkennis. Door de automatisering van Prophet te balanceren met doordacht menselijk oordeel kunnen analisten bruikbare inzichten ontwikkelen en veelvoorkomende valkuilen vermijden.

Voor hands-on learning vind je hier onze cursussen en skill tracks:

Vidhi Chugh

Auteur

Vidhi Chugh

Ik ben een AI-strateeg en -ethicus die op het snijvlak van data science, product en engineering werkt aan schaalbare machinelearningsystemen. Genoteerd als een van de "Top 200 Business and Technology Innovators" ter wereld, heb ik als missie machine learning te democratiseren en het jargon te doorbreken, zodat iedereen deel kan uitmaken van deze transformatie.

Veelgestelde vragen

Waarvoor wordt Facebook Prophet gebruikt?

Facebook Prophet wordt gebruikt voor tijdreeksvoorspellingen en helpt trends, seizoensinvloeden en eventeffecten in data zoals verkoop, vraag of webverkeer te voorspellen.

Hoe gaat Prophet om met feestdagen en speciale events?

Prophet maakt het mogelijk om vooraf gedefinieerde of aangepaste events aan het model toe te voegen, wat rekening houdt met onregelmatige pieken of dalen in de tijdreeks.

Waarom is Prophet populair voor zakelijke voorspellingen?

Prophet is geautomatiseerd, interpreteerbaar en robuust tegen ontbrekende data en uitschieters, waardoor het ideaal is voor snelle en betrouwbare voorspellingen.

Wanneer moet je Facebook Prophet vermijden?

Je kunt Prophet beter vermijden bij zeer volatiele of niet-seizoensgebonden data, of wanneer trends te onvoorspelbaar zijn.

Wat zijn de belangrijkste voordelen van Prophet ten opzichte van ARIMA?

In tegenstelling tot ARIMA vereist Prophet geen strikte stationariteit, gaat het om met ontbrekende data en detecteert het automatisch kantelpunten.

Onderwerpen

Gerelateerd