Ontwikkel een Geavanceerd Schema voor Tijdreeksen Preprocessing
description
Met deze prompt kan de gebruiker een specifiek en geavanceerd preprocessing schema voor tijdreeksdata ontwikkelen, wat leidt tot verbeterde datakwaliteit en betere modellering. Het biedt oplossingen voor unieke uitdagingen in tijdreeksdata zoals trend- en seizoenscorrecties en ontbrekende waarden, waardoor het relevanter is dan algemene preprocessing prompts.
prompt
Help me bij het ontwikkelen van een geavanceerd preprocessing schema gericht op tijdreeksdata. Beschrijving Dataset: <geef een korte beschrijving van je dataset> Frequentie van Tijdreeksen: <specificeer de tijdsinterval, bijvoorbeeld dagelijks, wekelijks, maandelijks> Vereiste Preprocessing Stappen: <noem ...
try_prompt
generate_helper
disclaimerOnPageApi
tags
ai_answers
provider: openai
model: gpt-4.1-nano
no_answer_for_language
error: Generation failed [openai] prompt_id=3688 locale=nl err=OpenAI connection/timeout | Generation failed [openai] prompt_id=3688 locale=en err=OpenAI connection/timeout | Generation failed [openai] prompt_id=3688 locale=de err=OpenAI connection/timeout | Generation failed [openai] prompt_id=3688 locale=fr err=OpenAI connection/timeout | Generation failed [openai] prompt_id=3688 locale=pt err=OpenAI connection/timeout | Generation failed [openai] prompt_id=3688 locale=es err=OpenAI connection/timeout | Generation failed [openai] prompt_id=3688 locale=zh err=OpenAI connection/timeout
provider: deepseek
model: deepseek-chat
Zeker, hier is een geavanceerd preprocessing schema voor uw tijdreeksdata, specifiek ontworpen voor ARIMA-modellering met lage latentie eisen.
### **Geavanceerd Preprocessing Schema voor Retail Verkoopdata**
**Kernprincipe:** Pipeline-ontwerp voor realtime verwerking met focus op herbruikbaarheid en lage latentie.
---
#### **1. Data Acquisition & Initial Checks (Realtime Ingestion)**
```python
# Pseudocode voor realtime data-ingang
def stream_data_point(new_daily_sale):
# Valideer binnenkomend datapunt (bv. niet-negatief, realistisch bereik)
if not validate_point(new_daily_sale):
log_error("Ongeldig datapunt ontvangen")
return None
# Voeg direct toe aan rolling buffer (bijv. laatste 30 dagen in cache)
add_to_rolling_buffer(new_daily_sale)
# Activeer preprocessing pipeline
return preprocess_point(new_daily_sale)
```
#### **2. Ontbrekende Waarden Interpolatie (Realtime)**
**Strategie:** Gebruik **gewogen seizoensgebonden interpolatie** voor lage latentie.
```python
def interpolate_missing(value_buffer):
# value_buffer = rolling window van laatste N dagen (bijv. 30 dagen)
if None not in value_buffer:
return value_buffer[-1] # Geen actie nodig
# Seizoensindex (zelfde dag vorige week heeft hoog gewicht)
season_idx = -7 # week seizoenspatroon
weights = [0.1, 0.1, 0.2, 0.6] # gewichten: [t-3, t-2, t-1, seizoen]
# Bereken gewogen gemiddelde uit recente en seizoenswaarden
valid_vals = [
value_buffer[-4] if value_buffer[-4] is not None else 0,
value_buffer[-3] if value_buffer[-3] is not None else 0,
value_buffer[-2] if value_buffer[-2] is not None else 0,
value_buffer[season_idx] if value_buffer[season_idx] is not None else 0
]
# Gewogen interpolatie
interpolated = sum(val * weight for val, weight in zip(valid_vals, weights))
return interpolated
```
#### **3. Seizoenscomponent Verwijderen (Realtime STL Decompositie)**
**Strategie:** **Rolling STL (Seasonal-Trend decomposition using Loess)** met geoptimaliseerde window grootte.
```python
# Initialisatie (eens uitvoeren bij startup)
from statsmodels.tsa.seasonal import STL
import numpy as np
seasonal_window = 30 # rolling window voor seizoensschatting
def initialize_seasonal_component(initial_data):
# Bereken initieel seizoenspatroon op historische data
stl = STL(initial_data, period=7, seasonal=13) # period=7 voor weekly seizoen
res = stl.fit()
return res.seasonal[-7:] # retourneer laatste 7 dagen als basispatroon
# Realtime seizoensverwijdering
def remove_seasonality(new_point, current_seasonal_pattern):
# Bepaal dag van de week (0=maandag, 6=zondag)
day_of_week = datetime.now().weekday()
# Verwijder seizoenscomponent
deseasoned_point = new_point - current_seasonal_pattern[day_of_week]
return deseasoned_point
```
#### **4. Stationarity Check & Transformation (Rolling Basis)**
**Strategie:** **Automatische differencing** met ADF test in rolling window.
```python
from statsmodels.tsa.stattools import adfuller
def check_stationarity(data_window):
# Voer Augmented Dickey-Fuller test uit op rolling window
result = adfuller(data_window)
return result[1] < 0.05 # p-value < 0.05 = stationair
def make_stationary(data_buffer):
# Controleer stationariteit
if check_stationarity(data_buffer):
return data_buffer[-1], 0 # Geen differencing nodig
# Pas eerste-order differencing toe (standaard voor ARIMA)
stationary_value = data_buffer[-1] - data_buffer[-2]
return stationary_value, 1 # retourneer waarde + differencing order
```
#### **5. Complete Realtime Processing Pipeline**
```python
class RealtimeSalesPreprocessor:
def __init__(self, historical_data):
self.buffer = list(historical_data[-30:]) # rolling buffer
self.seasonal_pattern = initialize_seasonal_component(historical_data)
self.diff_order = 0
def process_new_point(self, new_sale):
# Stap 1: Interpolatie indien nodig
if new_sale is None:
new_sale = interpolate_missing(self.buffer)
# Stap 2: Update buffer
self.buffer.pop(0)
self.buffer.append(new_sale)
# Stap 3: Seizoensverwijdering
deseasoned = remove_seasonality(new_sale, self.seasonal_pattern)
# Stap 4: Maak stationair
stationary, self.diff_order = make_stationary(self.buffer)
return stationary
```
---
### **Optimalisaties voor Lage Latentie:**
1. **Pre-allocated Buffers:** Vaste array grootte i.p.v. dynamische lists
2. **Cached Seizoenspatroon:** Wekelijkse update i.p.v. realtime berekening
3. **Parallel Processing:** Multithreading voor STL decompositie
4. **Incremental ADF:** Benaderende stationariteitstests i.p.v. volledige ADF
### **Implementatie Advies:**
```python
# Gebruiksvoorbeeld
preprocessor = RealtimeSalesPreprocessor(historical_sales_data)
# Voor elke nieuwe realtime meting:
processed_value = preprocessor.process_new_point(daily_sales_today)
# processed_value is klaar voor ARIMA voorspelling met latentie < 100ms
```
Dit schema balanceert nauwkeurigheid met performance voor realtime toepassingen, en produceert stationaire data die direct bruikbaar is voor ARIMA-modellering.