TVTower / TVTower

A tribute to Mad TV. Written in BlitzMax, Lua and a bit of C.
http://www.tvtower.org
Other
108 stars 36 forks source link

KI: Zuschauervorhersage für Nachfolgeblock des aktuell gesendeten #547

Closed nittka closed 2 years ago

nittka commented 2 years ago

Wenn man sich in der Debugansicht die von der KI geratenen Zuschauerzahlen anschaut, sieht man dass es immer wieder aber eben nicht immer zu Ausreißern bei der Vorhersage kommt. Besonders dramatisch fallen diese beim jeweiligen Folgeblock eines laufenden Programms aus, d.h. vor der Ausstrahlung passen die die vorhergesagten Werte zusammen, wenn dann der erste Block gesendet wird und dessen Zuschauerzahl feststeht, wird für den zweiten Block die Vorhersage plötzlich deutlich angehoben (manchmal um über 200%).

[08:35:09] 04:01 -     guess hour 4 Block 1 Title Kurz nach Mitternacht auf der Reeperbahn 2693
[08:35:09] 04:01 -     guess hour 5 Block 2 Title Kurz nach Mitternacht auf der Reeperbahn 3149
...
[08:35:10] 04:11 -   Job JobAdSchedule started.
[08:35:10] 04:11 -     guess hour 5 Block 2 Title Kurz nach Mitternacht auf der Reeperbahn 9025

Zunächst werden für den zweiten Block 3000 Zuschauer vorhergesagt, wenig später plötzlich 9000. wobei die tatsächliche Zuschauerzahl um 4:05 4400 Zuschauer beträgt. Selbst wenn man die Vorhersage für Block zwei anhand der tatsächlichen Zuschauerzahl hochrechnet, kommt man nicht in die Nähe von 9000.

Man kann nun in TaskSchedule:PredictAudience um Zeile 1107 previousBroadcastAttraction auf Null setzen, wenn es sich nicht um den ersten Block handelt. Die Ausreißer verschwinden dann, aber die Vorhersage wird eben auch nicht aufgrund der nun bekannten Werte angepasst (eine erwünschte Korrektur nach oben oder unten findet somit nicht statt).

Die für die Belegung von previousBroadcastAttraction um Zeile 1086 verwendeten Werte der Vorstunde werden scheinbar durch BusinessStats:ReadStats() unmittelbar zu beginn der Ausstrahlung gesetzt.

Für mich sieht es so aus, als wäre API-seitig alles in Ordnung, aber die Berechnung innerhalb von broadcast.GetAudienceAttraction(hour, block, previousBroadcastAttraction, previousNewsBroadcastAttraction... für block>1 gefüttert mit der tatsächlichen previousBroadcastAttraction liefert dann aber in Kombination mit dem predictor ein unrealistisches Ergebnis. Unklar ist mir, ob sich previousBroadcastAttraction auf den vorigen Block oder auf das zuvor gesendete Programm bezieht. Im letzteren Fall wäre nämlich der übergebene Parameter doch falsch, da ja die Attraktivität des Vorgängerblocks desselben Programms übergeben wird.

Wenn ich den Code richtig interpretiere, funktioniert die Vorhersage im Debug-Screen ähnlich, aber mit einem entscheidenden Unterschied. Für das Vorgängerprogramm wird nicht die tatsächliche Attraktivität wie bei der KI verwendet, sondern eine analog vorhergesagte Attraktivität "ohne" weitere Parameter.

Ich gehe davon aus, dass broadcast.GetAudienceAttraction nicht nur für solche Vorhersagen verwendet wird, sondern auch zur Ermittlung der tatsächlichen Zuschauerzahlen, so dass Änderungen in der Berechnung nicht wirklich in Frage kommen. Ein möglicher Ansatz wäre, die für das Vorprogramm vorhergesagten Werte mit den tatsächlichen in Relation zu setzen und dann die Vorhersage des Nachfolgeblocks entsprechend anzupassen. Ein anderer Ansatz wäre, wie oben beschrieben bei Nachfolgeblöcken das Vorprogramm einfach auf null zu setzen.

Meine Hypothese ist, dass sich die negativen Auswirkungen des einfachen Ansatzes in Grenzen halten. Wenn die Vorhersage nicht angehoben wird, wird ggf. eine schlechtere Werbung gesendet. Wird allerdings aufgrund der überhöhten Vorhersage eine nicht erfüllbare Werbung eingestellt, fällt ein kompletter Werbeblock aus.

nittka commented 2 years ago

Als erster Fix wird ab Block 2 für das Vorgängerprogramm keine Attraktivität mitgegeben.