Knoten festlegen

Funktionsweise des knots-Arguments

Meridian verwendet einen zeitvariablen Intercept-Ansatz für die Modellierung von Zeiteffekten (Spline (Mathematik), Wikipedia. Ng, Wang und Dai. 2021). Bei diesem Ansatz werden Zeiteffekte \(\mu = [\mu_1, \dots, \mu_T]\) für jeden der \(T\) Zeiträume modelliert. Ein dreijähriges MMM auf Wochenebene hat \(52 \times 3\) Zeiträume. Die \(T\) Zeiteffekte werden mit möglicherweise weniger als \(T\) Parametern anhand der Beziehung modelliert:

\[\mu = W \ast b\]

Dabei gilt:

  • \(\mu\) ist \(1 \times T\) und repräsentiert die Wirkung des einzelnen Zeitraums \(t=1, \dots ,T\), \(W\) ist eine \(T \times K\) deterministische Gewichtsmatrix.

  • \(b\) (in Meridian knot_values genannt) ist \(K \times 1\) , wobei \(K \leq T\)ist.

Die bayessche Posterior-Inferenz wird für \(b\)durchgeführt und gemäß der Gewichtsmatrix \(W\)in\(\mu\) umgewandelt. Die Anzahl der Knoten \(K\) wird durch die Nutzereingabe bestimmt. Die Gewichtsmatrix \(W\) wird durch die L1-Distanz eines Zeitraums zu den beiden benachbarten Knoten bestimmt.

Um zu verdeutlichen, wie die Gewichtsmatrix anhand der L1-Distanz bestimmt wird, betrachten wir den Zeitraum \(9\), in dem sich die beiden benachbarten Knoten bei \(6\) und \(11\)befinden. Die L1-Distanz zwischen dem Zeitraum \(9\) und dem Knoten \(11\) beträgt \(2\). Die L1-Distanz zwischen dem Zeitraum \(9\) und dem Knoten \(6\) beträgt \(3\). Der Knoten bei \(6\) erhält also das Gewicht \(0.4 = 1 - \frac{3}{2+3} \) und der Knoten bei \(11\) das Gewicht \(0.6 = 1 - \frac{2}{2+3} \). Der Wert von \(\mu_9\)wird durch das gewichtete Mittel der beiden benachbarten Knoten bestimmt.

Bei knots < n_times wird die Dimensionalität teilweise reduziert. Die n_times Zeiträume werden mit weniger als n_times Parametern modelliert. Mit der Gewichtungsfunktion wird festgelegt, wie die Zeiträume kombiniert werden.

Standardeinstellungen für Knoten in Meridian

Standardmäßig ist das knots-Argument in ModelSpec auf None und enable_aks auf False festgelegt. Bei knots = None legt Meridian die Anzahl der Knoten automatisch fest, je nachdem, ob Sie ein Modell auf geografischer oder Länderebene ausführen:

  • Die Standardeinstellung für Modelle auf geografischer Ebene ist knots = n_times: Bei Modellen auf geografischer Ebene gibt es für jeden Zeitraum mehrere Beobachtungen (eine pro geografischer Einheit). Daher ist die Einstellung von knots = n_times mathematisch identifizierbar. So hat das Modell maximale Flexibilität, um zeitbasierte Störfaktoren zu berücksichtigen, was den Bias bei kausalen Schätzungen minimiert. Wenn Sie eine inakzeptabel hohe Varianz beobachten, können Sie die Anzahl der Knoten manuell reduzieren oder die Funktion zur automatischen Auswahl von Knoten (Automatic Knot Selection, AKS) verwenden.
  • Die Standardeinstellung für Modelle auf Länderebene ist knots = 1: Modelle auf Länderebene haben nur eine Beobachtung pro Zeitraum. Ein Modell mit knots = n_times wäre vollständig gesättigt und nicht identifizierbar. Durch das Festlegen von knots = 1 werden Zeiteffekte auf einen einzelnen konstanten Intercept beschränkt, der als saubere Baseline mit geringer Varianz dient. Sie können die Anzahl der Knoten schrittweise erhöhen, um die Saisonalität zu erfassen, sofern die Anzahl der Freiheitsgrade dies zulässt.

Automatische Auswahl von Knoten (Automatic Knot Selection, AKS)

Die Auswahl von Knoten kann eine Herausforderung sein, da sie eine Abwägung zwischen Bias und Varianz für eine zuverlässige kausale Inferenz erfordert. Außerdem muss der geschäftliche Kontext einbezogen werden, um den Einfluss der Zeit auf Media und KPIs genau abzubilden. Darüber hinaus sind auch Versuch und Irrtum Teil des iterativen Prozesses zur Modelloptimierung.

Um dies zu meistern, bietet Meridian die Funktion zur automatischen Auswahl von Knoten (Automatic Knot Selection, AKS). Wir empfehlen, für die meisten Anwendungsfälle mit AKS zu beginnen, da sie den Prozess der Knotenauswahl automatisiert und somit Spekulationen überflüssig macht.

Automatische Auswahl von Knoten verwenden

Wenn Sie AKS in Ihrem Meridian-Modell aktivieren möchten, setzen Sie den Parameter enable_aks in ModelSpec auf True.

from meridian.model import model
from meridian.model import spec

# `data` is an `InputData` object
model_spec = spec.ModelSpec(enable_aks=True)
mmm = model.Meridian(input_data=data, model_spec=model_spec)

Sobald AKS in ModelSpec aktiviert ist, können Sie die Liste der Knoten abrufen, die von Meridian ausgewählt wurden.

knot_info = mmm.knot_info
selected_knots = knot_info.knot_locations

Nachdem Sie AKS in ModelSpec aktiviert haben, empfiehlt es sich, die ausgewählten Knoten zu überprüfen, um sicherzustellen, dass diese im Kontext Ihrer Daten plausibel sind.

Funktionsweise von AKS

Diese Funktion basiert auf der Methodik in Spline Regression with Automatic Knot Selection, enthält aber mehrere Meridian-spezifische Verbesserungen. Im Kern verwendet der Algorithmus die lineare Spline-Basis, um die Beziehung zwischen der Zeit (Knoten) und der skalierten Zielvariablen zu modellieren. Dabei wird ein Verfahren zur Rückwärtselimination verwendet, das mit einer vollständigen Menge potenzieller Knoten beginnt und sequenziell diejenigen entfernt, die die Modellanpassung nicht verbessern. Die Anpassung wird mithilfe einer Regularisierungsmethode bewertet, bei der das Modell für unnötige Komplexität (d. h. Anzahl der Knoten) bestraft wird. Eine wesentliche Anpassung in der Version von Meridian ist eine geografiebezogene Strafe, die mehr Knoten begünstigt, wenn die Anzahl der geografischen Einheiten in den Daten zunimmt. Das liegt daran, dass mit mehr geografischen Einheiten mehr Daten für jeden Zeitraum verfügbar sind. Die endgültige optimale Menge an Knoten wird anhand des Akaike-Informationskriteriums (Akaike Information Criterion, AIC) bestimmt, um sicherzustellen, dass das Modell Trend- und Saisonalitätsmuster genau erfasst.

Erweitert: AKS-Strafparameter anpassen

Gelegentlich wählt der AKS-Algorithmus eine große Anzahl von Knoten aus. Dies kann für nationale Modelle oder Modelle mit einer geringen Anzahl geografischer Einheiten problematisch sein, da für jeden Zeitraum nur begrenzt Daten zur Verfügung stehen. Wenn Sie in solchen Fällen eine ungewöhnlich hohe Anzahl von Knoten beobachten, können Sie die Funktion automatic_knot_selection() aufrufen, um den Algorithmus anzupassen und weniger Knoten zu verwenden.

Sie können das Argument base_penalty zu automatic_knot_selection ändern, um den Suchbereich für die Regularisierungsstrafe zu definieren. Standardmäßig ist sie auf np.geomspace(0.1, 100, 100) festgelegt. Der Standardsuchbereich der Strafe liegt also zwischen 0.1 und 100. Sie können eine eigene Liste mit Strafparametern angeben. Wenn Sie den Strafparameter erhöhen, wird eine stärkere Regularisierung angewendet, wodurch sich die Anzahl der ausgewählten Knoten verringert. So können Sie beispielsweise den Suchbereich mit np.geomspace(10, 200, 100) auf einen Wert zwischen 10 und 200 festlegen.

Mit den Argumenten min_internal_knots und max_internal_knots können Sie auch den Bereich für die Anzahl der Knoten festlegen, die berücksichtigt werden.

import numpy as np
from meridian.model import knots
from meridian.model import model
from meridian.model import spec

# `data` is an `InputData` object; same as what will be passed to
# `model.Meridian`
aks = knots.AKS(data)
# Modify `base_penalty`, `min_internal_knots`, `max_internal_knots`
# arguments to encourage fewer knots
base_penalty = np.geomspace(10, 200, 100)
knot_locations = aks.automatic_knot_selection(base_penalty=base_penalty,
                                              min_internal_knots=2,
                                              max_internal_knots=10).knots

# You must use the 'knots' argument and NOT set 'enable_aks=True'.
model_spec = spec.ModelSpec(knots=knot_locations)
# `input_data` argument is the same `data` passed to `knots.AKS(data)`
mmm = model.Meridian(input_data=data, model_spec=model_spec)

Erweitert: Hybride Auswahl von Knoten

Sie können AKS mit Ihrem eigenen Fachwissen kombinieren, um einen hybriden Ansatz zu verwenden. So können Sie bekannte Geschäftslogik (z. B. Feiertage oder Modellupdates) vorgeben, während der AKS-Algorithmus die übrigen erforderlichen Knoten ermittelt.

Es gibt zwei wesentliche Möglichkeiten, einen hybriden Ansatz zu implementieren:

  1. Ausgewählte Knoten manuell anpassen: Führen Sie AKS aus, prüfen Sie die ausgewählten Knoten und fügen Sie dann manuell Knoten hinzu oder entfernen Sie welche, bevor Sie das endgültige Modell ausführen.
  2. Erforderliche Knoten angeben: Übergeben Sie eine Liste mit obligatorischen Knoten an den AKS-Algorithmus. So kann er automatisch alle zusätzlich erforderlichen Knoten auswählen.

Ausgewählte Knoten manuell anpassen

Sie können Knoten manuell hinzufügen oder entfernen, um sie an Ihren geschäftlichen Kontext anzupassen. So lassen sich beispielsweise während der Festtagssaison Knoten hinzufügen, um den Bias in Ihren Schätzungen zu reduzieren, oder in der Nebensaison einige Knoten entfernen, um die Varianz zu verringern. Weitere Informationen zu manuellen Knotenanpassungen finden Sie unter Kompromiss zwischen Bias und Varianz.

Das folgende Code-Snippet zeigt ein Beispiel dafür, wie Sie die ausgewählten Knoten abrufen, einen neuen Knoten am Zeitpunkt 52 hinzufügen und diesen verwenden, um eine neue ModelSpec zu definieren.

import numpy as np
from meridian.model import model
from meridian.model import spec

# `data` is an `InputData` object
model_spec_with_aks = spec.ModelSpec(enable_aks=True)
mmm_with_aks = model.Meridian(input_data=data, model_spec=model_spec_with_aks)

# Retrieve selected knots from a model run with enable_aks=True
selected_knots = mmm_with_aks.knot_info.knot_locations

# Add a knot at time point 52
modified_knots = np.append(selected_knots, 52)
model_spec = spec.ModelSpec(knots=modified_knots)
mmm = model.Meridian(input_data=data, model_spec=model_spec)

Erforderliche Knoten für AKS angeben

Sie können AKS mit Ihrem eigenen Fachwissen kombinieren, indem Sie die erforderlichen Knotenpositionen direkt für den Algorithmus angeben. Rufen Sie dazu die Methode automatic_knot_selection() auf und übergeben Sie ein iterables Objekt mit required_knots. Der Algorithmus berücksichtigt sie und wählt automatisch alle zusätzlichen Knoten aus, die erforderlich sind, um Zeiteffekte bestmöglich zu erklären und gleichzeitig zwischen Modellanpassung und Modellkomplexität abzuwägen.

Dieser Ansatz ist von Vorteil, wenn Sie die Knotenplatzierung an bestimmten bekannten Zeitpunkten erzwingen und den Rest AKS überlassen möchten. Beispiele:

  • „Ich weiß, dass der Juli für mein Unternehmen immer eine besondere Zeit ist. Deshalb möchte ich für alle Juliwochen eines jeden Jahres Knoten setzen. AKS erledigt den Rest.“
  • „Ich weiß, dass die erste Woche jedes Monats eine besondere Zeit für mein Unternehmen ist. Deshalb möchte ich in jeder ersten Woche des Monats Knoten setzen. Den Rest überlasse ich AKS. Die Funktion ermittelt, ob innerhalb der einzelnen Monate noch weitere Knoten nötig sind.“
import numpy as np
from meridian.model import knots
from meridian.model import model
from meridian.model import spec

# `data` is an `InputData` object; same as what will be passed to
# `model.Meridian`
aks = knots.AKS(data)
# Require knots at specific time periods and automatically select the rest
required_knots = np.array([10, 20, 30])
knot_locations = aks.automatic_knot_selection(
    required_knots=required_knots
).knots

# You must use the 'knots' argument and NOT set 'enable_aks=True'.
model_spec = spec.ModelSpec(knots=knot_locations)
# `input_data` argument is the same `data` passed to `knots.AKS(data)`
mmm = model.Meridian(input_data=data, model_spec=model_spec)

Modellaktualisierung mit hybrider Auswahl von Knoten

Wenn Sie ein vorhandenes Modell mit neuen Zeitreihendaten aktualisieren (z. B. die Daten des letzten Quartals zu einem mehrjährigen Dataset hinzufügen), empfiehlt es sich, die Knotenpositionen des ursprünglichen Modells beizubehalten, um einen konsistenten Baseline-Trend für diesen ursprünglichen Zeitraum sicherzustellen. Es kann jedoch sinnvoll sein, AKS weiterhin zusätzliche Knoten für die neu angehängten Daten auswählen zu lassen.

Dazu übergeben Sie beim Aufrufen von automatic_knot_selection() die Knotenpositionen aus dem ursprünglichen Modell als required_knots und legen restrict_to_right_of_required_knots=True fest. So wird dafür gesorgt, dass AKS zusätzliche Knoten nur für die Zeiträume nach den ursprünglichen Daten hinzufügt.

import numpy as np
from meridian.model import knots
from meridian.model import model
from meridian.model import spec

# `data` is an `InputData` object; same as what will be passed to
# `model.Meridian`
aks = knots.AKS(data)
# Use knots selected from a previous model run as required knots and
# automatically select knots located after the last knot
previous_knots = np.array([10, 30, 50, 70, 90])
knot_locations = aks.automatic_knot_selection(
    required_knots=previous_knots,
    restrict_to_right_of_required_knots=True
).knots

# You must use the 'knots' argument and NOT set 'enable_aks=True'.
model_spec = spec.ModelSpec(knots=knot_locations)
# `input_data` argument is the same `data` passed to `knots.AKS(data)`
mmm = model.Meridian(input_data=data, model_spec=model_spec)

Knoten manuell auswählen

In bestimmten Fällen kann es vorteilhaft sein, Knoten für das MMM manuell festzulegen. Dieser Abschnitt enthält grundlegende Informationen zur manuellen Auswahl von Knotenpositionen.

Wenn Sie überlegen, wie Sie knots von ModelSpec manuell festlegen, ist es hilfreich, sich die beiden Extreme vor Augen zu führen: Die Anzahl der Knoten kann zwischen eins und der Anzahl der Zeiträume (n_times) liegen. Bei knots = n_times findet keine Dimensionalitätsreduktion statt und jeder Zeitraum erhält einen eigenen Parameter. Bei einem Modell auf geografischer Ebene ist die Verwendung von so vielen Knoten wie Zeiträumen identifizierbar, da es pro Zeitraum mehrere geografische Einheiten und damit mehrere Beobachtungen gibt. Bei knots = 1 werden alle Zeiträume mit einem einzigen Parameter analysiert. Hier hat die Zeit keine Bedeutung. Dieser fehlende Effekt wird zu einem gemeinsamen Intercept für alle Zeiträume.

Bei 1 < knots < n_times liegt die Anzahl der Knoten genau zwischen diesen beiden Extremen. Sie können einen Bereich von Werten ausprobieren, der den zulässigen Bereich abdeckt. Informationen dazu, wie Sie den Mittelweg zwischen diesen beiden Extremen finden, sind unter Kompromiss zwischen Bias und Varianz verfügbar.

Wir empfehlen Folgendes:

  • Bei Modellen auf geografischer Ebene sollten Sie mit der Standardeinstellung (knots = n_times) beginnen. Wenn Sie feststellen, dass die Überanpassung extrem ist oder die Schätzungen der Media-Effekte unrealistisch sind, sollten Sie die Anzahl der Knoten reduzieren. Die Notwendigkeit, die Anzahl der Knoten zu reduzieren, nimmt mit abnehmender Anzahl der geografischen Einheiten pro Zeitpunkt zu.

  • Bei Modellen auf nationaler Ebene sollten Sie standardmäßig mit 1 Knoten beginnen und die Anzahl der Knoten dann erhöhen. Erhöhen Sie die Anzahl so lange, bis die Überanpassung extrem wird oder die Schätzungen der Media-Effekte unrealistisch werden.

  • Eine ähnliche Anzahl von Knoten kann ähnliche Ergebnisse liefern, z. B. knots = 10 und knots = 11. Daher kann es hilfreich sein, die Werte in größeren Abständen zu wählen.

Wenn Sie beispielsweise 10 gleichmäßig verteilte Knoten manuell festlegen möchten, gehen Sie so vor:

from meridian.model import model
from meridian.model import spec

model_spec = spec.ModelSpec(knots=10)
mmm = model.Meridian(input_data=data, model_spec=model_spec)

Alternativ können Sie die genauen Positionen der Knoten manuell angeben:

from meridian.model import model
from meridian.model import spec

model_spec = spec.ModelSpec(knots=[7, 14, 30, 37, 44, 60, 67, 74, 90])
mmm = model.Meridian(input_data=data, model_spec=model_spec)

Kompromiss zwischen Bias und Varianz

Die Anzahl der Knoten kann als Kompromiss zwischen Bias und Varianz betrachtet werden. Bei knots = n_times erhält jeder Zeitraum einen eigenen Parameter. Der Effekt eines bestimmten Zeitraums wird also nur anhand der Daten aus diesem Zeitraum geschätzt. knots = n_times weist jedoch eine hohe Varianz auf, da in einem bestimmten Zeitraum weniger Datenpunkte verfügbar sind.

Bei knots < n_times wird jeder Knoten anhand der Daten der benachbarten Zeiträume geschätzt. Dabei werden Zeiträume, die näher liegen, stärker gewichtet. Weil die beiden nächstgelegenen Knoten die Inferenz für einen bestimmten Zeitraum bestimmen, wird die Auswirkung eines bestimmten Zeitraums anhand der Daten dieses und der benachbarten Zeiträume geschätzt. Je weniger Knoten vorhanden sind, desto stärker wirken sich benachbarten Zeiträume auf die Inferenz für einen bestimmten Zeitraum aus. Dabei werden die nächstgelegenen Zeiträume stärker gewichtet. Dadurch wird die Varianz verringert, da immer mehr Zeiträume zur Schätzung der Auswirkungen eines bestimmten Zeitraums verwendet werden. Die Daten stammen jedoch nicht aus dem entsprechenden Zeitraum, was den Bias erhöht.

Zusammenfassend lässt sich sagen, dass mehr Knoten den Bias bei Schätzungen der Zeiteffekte verringern, während weniger Knoten die Varianz bei entsprechenden Schätzungen verringern. Als Analyst können Sie festlegen, welchen Kompromiss Sie im Hinblick auf Bias und Varianz eingehen möchten. Wenn die Zeit ein wichtiger Störfaktor zwischen Media und KPI ist, führt der Kompromiss zwischen Bias und Varianz bei der Schätzung der Zeiteffekte zu einem Kompromiss zwischen Bias und Varianz bei der Schätzung der kausalen Effekte von Media.

Außerdem können Sie für verschiedene Zeiträume unterschiedliche Kompromisse zwischen Bias und Varianz festlegen. Dazu legen Sie knots auf eine Liste fest, die Knotenpositionen angibt. Knoten können in Bereichen mit geringem Bias der Schätzungen (z. B. in der Festtagssaison) dicht und in Bereichen mit geringer Varianz der Schätzungen (z. B. in der Vor- und Nachsaison) spärlich verteilt sein.

Wann sollten weniger Knoten verwendet werden?

Wenn Sie die Anzahl der Knoten festlegen, kann es auch hilfreich sein, darüber nachzudenken, wie sich der Zeitraum auf die Media-Ausführung auswirkt. Kontrollvariablen sollten Störvariablen sein, die sich sowohl auf die Media-Ausführung als auch auf den KPI auswirken. Weitere Informationen zu Kontrollvariablen

Eine ähnliche Logik gilt für die Zeit. Wenn der Zeitraum kein Faktor für die Media-Ausführung ist, ist er keine echte Störvariable. Es ist dann nicht nötig, zu viele Freiheitsgrade für die Modellierung der Zeit mit vielen Knoten zu verwenden. Werbetreibende müssen überlegen, ob der Zeitraum bei der Planung der Media-Ausführung eine Rolle spielt. So hängt die Mediaplanung eines Reiseunternehmens wahrscheinlich vom Zeitraum ab. Eine Snackmarke hat dagegen möglicherweise eine konsistentere Mediaplanung über verschiedene Zeiträume hinweg. Überlegen Sie auch, ob die Zeit wirklich eine wichtige Störvariable ist oder ein Proxy für eine andere Variable, die direkt modelliert werden kann, wahrscheinlich mit weniger Freiheitsgraden. War Zeit wirklich die Störvariable, die die Media-Ausführung beeinflusst hat? Oder lag es an der Anzahl der COVID-19-Fälle landesweit? Werbetreibende kennen ihre eigene Strategie für die Mediaplanung und haben Einblick in diese Themen.

Wann Sie knots < n_times verwenden müssen

In bestimmten Fällen müssen Sie knots < n_times festlegen, z. B. in einem Modell auf nationaler Ebene, in dem Sie nicht mehrere Beobachtungen pro Zeitraum haben und für jeden Zeitraum nicht genügend Freiheitsgrade für einen eigenen Parameter vorhanden sind. Beachten Sie, dass eine gewisse Reduzierung der Dimensionalität erforderlich ist.

Ein weiteres Beispiel ist, wenn Sie eine Media- oder Kontrollvariable auf nationaler Ebene angeben müssen. Variablen auf nationaler Ebene ändern sich im Zeitverlauf, aber nicht geografisch. Eine solche Variable ist perfekt kollinear mit der Zeit und daher redundant mit einem Modell, das einen Parameter für jeden Zeitraum hat. Wenn Sie knots nahe an n_times festlegen, können Sie technisch gesehen ein identifizierbares Modell haben. Es kann jedoch sein, dass es nur schwer identifizierbar ist und zu Problemen führt. Angesichts der Schwierigkeiten bei der Schätzung von Zeiteffekten in einem nationalen Modell sind hochwertige Kontrollvariablen dort noch wichtiger als in einem geografischen Modell. Weitere Informationen

Andere Ansätze zur Modellierung von Zeiteffekten: binäre Indikatoren und periodische Funktionen

Sie können binäre Indikatoren oder periodische Funktionen als Kontrollvariablen erstellen und eingeben, um Zeiteffekte in Meridian zu modellieren. Beide bieten je nach Fall Vorteile.

Meridian empfiehlt, Kontrollvariablen einzubeziehen, die Störvariablen sind, also Variablen, die sowohl die Media-Ausführung als auch den KPI ursächlich beeinflussen. Kontrollvariablen im Zusammenhang mit Zeiteffekten sind davon nicht ausgenommen. Weitere Informationen

Binäre Indikatoren

Ein binärer Indikator hat den Wert 1, wenn eine Bedingung erfüllt ist, und andernfalls den Wert 0. Beispiel: Der Wert 1 für alle Zeiträume im Dezember und der Wert 0 für alle anderen Zeiträume. In Meridian können binäre Indikatoren als Kontrollvariablen verwendet werden, um Zeiteffekte zu modellieren, die über eine Reihe von Zeiträumen hinweg konsistent sind und optional nach geografischer Einheit variieren. Knoten und binäre Indikatoren können zusammen verwendet werden. Achten Sie jedoch auf die Gesamtzahl der Parameter, die zur Modellierung von Zeiteffekten verwendet werden.

Konsistente Effekte

Ein binärer Indikator kann mehrere Zeiträume abdecken. Dabei wird davon ausgegangen, dass der KPI-Effekt (pro Kopf in einem geografischen Modell) über alle Zeiträume hinweg konsistent ist. Bei einem binären Indikator werden mehrere Zeiträume verwendet, um einen konsistenten Effekt zu schätzen. Dadurch werden die Schätzungen verbessert und die Freiheitsgrade effizient genutzt, sofern die Annahme eines konsistenten Effekts ungefähr zutrifft.

Der Indikator hat keine Auswirkungen auf Zeiträume außerhalb der angegebenen, während sich das Platzieren eines Knotens in einem bestimmten Zeitraum auf die benachbarten Zeiträume bis zum nächsten angrenzenden Knoten auswirkt.

Die Modellierung von Zeiteffekten als konsistent über einen Satz von Zeiträumen hinweg kann für ein nationales Modell sinnvoll sein, weil die Struktur dazu beitragen kann, Schätzungen zu stabilisieren. Bei einem geografischen Modell wird oft die Flexibilität bevorzugt, die sich durch die Verwendung vieler Knoten ergibt.

Geografische Variation

Wenn ein binärer Indikator als Kontrollvariable in einem Modell auf geografischer Ebene verwendet wird, wird er mit einem geografisch abhängigen Effekt geschätzt. Das ist ideal für Ereignisse, bei denen Sie erwarten, dass die Auswirkungen regional variieren, z. B. wenn der Super Bowl in der Gastgeberstadt eine größere Wirkung hat. Im Gegensatz dazu werden mit Knoten Zeiteffekte geschätzt, die nicht geografisch abhängig sind. Mithilfe von Knoten wird eine flexible Spline-Funktion erstellt, um zeitbasierte Muster zu erfassen, die für alle geografischen Einheiten gelten. Sie sind parameterfreundlicher, wenn Sie keine geografisch abhängigen Zeiteffekte erwarten.

Geografische Variation für einen binären Indikator deaktivieren

Es kann sinnvoll sein, einen binären Indikator zu verwenden, der nicht von ortsspezifischen Zeiteffekten beeinflusst wird. Dazu können Sie den Prior für die hierarchische Varianz xi_c auf eine Punktmasse bei „0“ setzen. In diesem Fall sind alle geografiespezifischen Koeffizienten für den binären Indikator identisch. Wenn Sie geografische Effekte für alle Kontrollvariablen deaktivieren möchten, legen Sie den entsprechenden Varianz-Prior auf den deterministischen Wert „0“ fest:

xi_c = tfp.distributions.Deterministic(0)

Wenn Sie den geografischen Effekt nur für eine bestimmte Kontrollvariable deaktivieren möchten, können Sie den scale-Wert des entsprechenden Priors auf „0“ setzen. Wenn Sie beispielsweise vier Kontrollvariablen haben und den ortsabhängigen Effekt für die erste deaktivieren möchte:

xi_c = tfp.distributions.HalfNormal(scale=[0, 5, 5, 5])

Risiko der Multikollinearität

Binäre Indikatoren können ein hohes Risiko für Multikollinearität mit Variablen für die Media-Ausführung bergen. Daher ist es wichtig, sich der Multikollinearität bewusst zu sein und nur binäre Indikatoren einzubeziehen, die tatsächlich Störfaktoren sind.

Periodische Funktionen

Eine weitere Option ist, eine periodische Funktion wie eine Fourierreihe als Kontrollvariable hinzuzufügen. Periodische Funktionen können eine attraktive Alternative zu Knoten sein, insbesondere in nationalen Modellen.

Periodische Funktionen modellieren die Zeiteffekte als glattes und zyklisches Muster für den KPI (im Fall eines geografischen Modells: KPI pro Kopf). Periodische Funktionen sind eine starke parametrische Annahme darüber, wie sich die Zeit auf den KPI auswirkt. Das kann für ein nationales Modell sinnvoll sein, weil die Struktur dazu beitragen kann, eine stabile Schätzung der Saisonalität zu erhalten. Bei einem geografischen Modell wird die Flexibilität, viele Knoten zu verwenden, oft bevorzugt, weil sie kein glattes und zyklisches Muster für den KPI erzwingt.

Praktische Empfehlungen

Die Empfehlungen hängen davon ab, ob es sich um ein geografisches oder ein nationales Modell handelt.

Geografische Modelle

Binäre Indikatoren können in geografischen Modellen verwendet werden, um geografisch abhängige Zeiteffekte zu modellieren. Knoten und binäre Indikatoren können zusammen genutzt werden. Achten Sie jedoch auf die Gesamtzahl der Parameter, die zur Modellierung von Zeiteffekten verwendet werden. Es empfiehlt sich nicht, binäre Indikatoren gemeinsam mit vollständigen Knoten einzusetzen.

  • Nutzen Sie Knoten für Zeiteffekte, die nicht geografisch abhängig sind: Wenn Sie ein zeitliches Muster modellieren möchten, das in allen geografischen Einheiten konsistent ist, bieten Knoten Flexibilität, ohne dass das Risiko einer übermäßigen Parametrisierung besteht.
  • Verwenden Sie für Zeiteffekte, die geografisch abhängig sind, einen binären Indikator: Wenn Sie eine starke Hypothese haben, dass die Auswirkungen eines Ereignisses je nach geografischer Einheit variieren, ist ein binärer Indikator als Kontrollvariable das richtige Tool.

Nationale Modelle

Bei nationalen Modellen ist Parsimonie besonders wichtig. Sie kann durch binäre Indikatoren, periodische Funktionen oder einige gut platzierte Knoten erreicht werden. Diese können zusammen verwendet werden, aber achten Sie besonders auf die Gesamtzahl der Parameter, da Parsimonie bei einem nationalen Modell wichtig ist. Jede dieser Optionen verbessert die Schätzungen und nutzt die Freiheitsgrade effizient, sofern die Annahme ungefähr zutrifft. Im Folgenden werden die Annahmen für die einzelnen Punkte zusammengefasst:

  • Mit periodischen Funktionen werden die Zeiteffekte als glattes und zyklisches Muster für den KPI modelliert.
  • Bei binären Indikatoren werden Zeiteffekte für alle betroffenen Zeiträume als konsistent modelliert.
  • Knoten modellieren Zeiteffekte als abschnittsweisen linearen Trend im Zeitverlauf.