Codeprojekt: Newsletter-Optimierung

Yeah! Seit einiger Zeit versuche ich mittels Codeacademy, das Programmieren mit Python zu lernen. Gerade habe ich zum ersten Mal eine eigene Datenanalyse in Python gemacht.

Es geht um meinen Newsletter für den Blog hier. Der funktioniert so, dass er jeden Tag zu einer bestimmten Uhrzeit prüft, ob ein neuer Beitrag auf cendt.de vorhanden ist. Wenn ja, schickt er eine Mail an alle Abonnenten. Diese Uhrzeit ist jeden Tag gleich, lässt sich aber frei wählen.

Meine Frage war nun: Wann ist die ideale Zeit für den Newsletter-Versand? Ziel ist dabei, die Leser möglichst schnell zu informieren. Die Wartezeit zwischen Erscheinen des neuen Beitrags und Versenden des Newsletters soll also minimal sein.

Zuerst habe ich mir angesehen, zu welchen Zeiten ich hier so poste. Dazu habe ich aus WordPress die Daten zu allen 128 bisher veröffentlichten Beiträgen exportiert. Das war wesentlich schwieriger als gedacht: WordPress stellt nur einen XML-Export zur Verfügung (es gibt eine Menge Plug-Ins, die angeblich CSV-Export ermöglichen, bei mir hat aber kein einziges funktioniert). Dabei erhält man eine Datei, die Metadaten UND Inhalt zu allen Beiträgen enthält. Die Zeile, die mich dabei jeweils interessiert, sieht so aus:
2015-02-13 07:39:58
Es war erstmal ein ziemliches Gefrickel, nur diese Zeilen au den 8000 Zeilen XLM-Code rauszufiltern – Notepad++ hat dazu aber ein paar gute Funktionen. Mit Calc, dem Excel-Klon von OpenOffice (ich weiß, alle echten Statistiker hören jetzt auf zu lesen), habe ich daraus jeweils die Stunde ausgelesen und durchgezählt. Es entsteht folgende Verteilung:

posttime

Blogposts nach Uhrzeit. Jeweils abgerundet auf volle Stunden. 22 bedeutet also 22:00 bis 22:59 Uhr.

Ich blogge also vor allem abends, mit einem Peak zwischen 22 und 23 Uhr. Morgens zwischen acht und elf gibt es eine zweite Hochphase. Noch nie gebloggt habe ich demnach zwischen ein und 4 Uhr nachts und zwischen elf und zwölf Uhr vormittags.

Intuitiv würde man jetzt sagen, dass ein Newsletter so um null oder ein Uhr wahrscheinlich am meisten Sinn macht. Ich wollte es aber genau wissen und habe ein Skript geschrieben, um die ideale Zeit zu bestimmen. Das bekommt als Input die Stundendaten aller bisherigen Posts:

[4,21,21,22,22,22,23,23,23,23,23,23,23,23,23,23,22,23,19,21,10,17,22,20,20,23,21,0,9,12,12,8,15,12,5,21,20,22,12,20,20,19,0,15,18,21,4,17,12,9,9,21,18,17,9,22,14,0,21,9,15,18,17,7,8,21,16,22,21,10,14,20,22,14,21,23,8,20,5,8,21,22,22,18,22,17,20,0,8,23,22,10,19,8,10,18,22,17,22,17,18,22,9,18,7,8,9,9,4,6,6,6,20,12,21,12,10,10,20,0,16,17,22,20,9,16,13,7]

Dann fängt es an, 24 Möglichkeiten für den Versand-Zeitpunkt durchzuspielen (jede volle Stunde). Für jede Möglichkeit rechnet mein Programm die Verzögerung gegenüber den Posts aus und merkt sich, welcher Zeitpunkt der beste war. So sieht der Code aus:

postdata = [4,21,21,22,22,22,23,23,23,23,23,23,23,23,23,23,22,23,19,21,10,17,22,20,20,23,21,0,9,12,12,8,15,12,5,21,20,22,12,20,20,19,0,15,18,21,4,17,12,9,9,21,18,17,9,22,14,0,21,9,15,18,17,7,8,21,16,22,21,10,14,20,22,14,21,23,8,20,5,8,21,22,22,18,22,17,20,0,8,23,22,10,19,8,10,18,22,17,22,17,18,22,9,18,7,8,9,9,4,6,6,6,20,12,21,12,10,10,20,0,16,17,22,20,9,16,13,7]
postcount = len(postdata)
def delaycalc(testtime):
    delay = 0
    for i in range(postcount):
        dist = testtime - postdata[i]
        if dist>=0:
            delay = delay + dist
        else:
            delay = delay + 24 + dist
    return delay
totaldelay = delaycalc(0)
newstime = 0
for testtime in range (1,23):
    testdelay = delaycalc(testtime)
    if testdelay < totaldelay:
        totaldelay = testdelay
        newstime = testtime
    else:
    totaldelay = totaldelay
avrgdelay = totaldelay/postcount
print ("Ideale Zeit: ",newstime,". Gesamtverzoegerung: ",totaldelay,". Im Durschnitt: ",avrgdelay)

Und so das Ergebnis im Compiler:

>>>
Ideale Zeit: 0 . Gesamtverzoegerung: 954 . Im Durschnitt: 7.453125
>>>

Tatsächlich sollte und werde ich meinen Newsletter zukünftig um Mitternacht verschicken. Im Durchschnitt geht der dann 7,5 Stunden nach Erscheinen des Beitrags raus.

Da ich mit dem Professor für Optimierung an  meiner Uni nicht klar gekommen bin, habe ich das leider nie gelernt und weiß nicht, ob mein einfaches Vergleichen der Verzögerungs-Summen mathematisch die beste Lösung ist. Wenn da jemand eine bessere Idee hat, gerne melden. Mir ging es in erster Linie ums Programmieren.

Nachtrag zu Ölpreis-Prognosen

In der Facebook-Diskussion zu meinem Beitrag von gestern argumentieren mehrere Leute, warum die Prognosen Annahmen der IEA zur Ölpreis-Entwicklung vielleicht schon ganz gut hinhauen könnten. Hauptargumente sind das Fracking in den USA und der saudische Staatshaushalt. Beides macht Sinn. Trotzdem kann es auch ganz anders kommen. Ein Aufstand in Saudi-Arabien, ein Fracking-Verbot in den USA – das sind unwahrscheinliche, aber denkbare Szenarien.

Für meine Abschlussarbeit an der Uni habe ich mir die Klimaprognosen des Intergovernmental Panel on Climate Change (IPCC) angesehen. Die sind ziemlich gewagt und ziemlich umstritten. Gegen den Ölpreis-Prognosen-Annahmen der IEA haben sie aber zwei entscheidende Vorteile:

1) Die (u.a. politischen) Unwägbarkeiten werden vom IPCC dadurch berücksichtigt, dass es verschiedene Szenarien gibt. Szenario A1FI beispielsweise geht davon aus, dass weiterhin hauptsächlich fossile Energien zum Einsatz kommen, während B1 den verstärkten Einsatz regenerativer Quellen annimmt. Je nach Szenario ergibt sich eine ganz andere Entwicklung der CO2-Emissionen und somit des Weltklimas. Und für jedes Szenario wird nicht nur der wahrscheinlichste Pfad angegeben, sondern auch ein Toleranzbereich außenrum, der die Unsicherheit der Vorhersage ausdrückt.

2) In der Klimaforschung ist die absolute Mindestanforderung an ein Modell, dass es die Vergangenheit richtig reproduzieren kann. Da kann man also nicht nach einem unerwarteten Sprung (siehe Post von gestern) einfach von vorn anfangen. Sondern muss die Gleichungen so anpassen, dass der Sprung im Ergebnis enthalten ist.

Das wären mal zwei Kriterien, in denen sich eine „Annahme“ von einer wirklichen Prognose unterscheidet. Ein interessantes Buch dazu ist „The Signal and the Noise“ von Nate Silver, der in Amerika immer sehr erfolgreich Wahlergebnisse vorhersagt. Habe bisher aber nur reingelesen.

Kann man den Ölpreis vorhersagen?

Öl bleibt jetzt für immer billig, schreibt die FAZ. Woher wollen die das wissen?

„Die Ölpreise werden weiter niedrig bleiben“ lautet eine Überschrift im Wirtschaftsteil der Frankfurter Allgemeinen Zeitung von gestern (nicht online). Das lässt viel Raum für Interpretation: Was bedeutet niedrig, und wie lange ist „weiter“? Deutlicher ist der erste Satz des Artikels: „Ölpreise von mehr als 100 Dollar gehören der Vergangenheit an.“

„Prognosen sind schwierig, besonders wenn sie die Zukunft betreffen“ soll Niels Bohr gesagt haben. Bohr war Physiker, in seiner Welt lassen sich manche Dinge relativ gut vorhersagen, Sonnenfinsternisse zum Beispiel. Das Wetter ist schon komplizierter, obwohl es prinzipiell auch den Gesetzen der Physik folgt. Aber der Ölpreis? Um den vernünftig vorherzusagen, müsste man den Lauf der Weltkonjunktur, verschiedenste regionale Konflikte, den Dollarkurs, technische Entwicklungen der Fördertechnik, den Fortschritt bei regenerativen Energiequellen, die Launen der saudischen Prinzen und hundert andere Dinge kennen. Woher weiß die FAZ das alles?

Tatsächlich beruft sich der Artikel auf einen aktuellen Bericht der Internationalen Energieagentur. Blöd nur, dass die IEA darin gar keine Preisprognosen abgibt. Der Bericht enthält umfangreiche Analysen zur Entwicklung von Angebot und Nachfrage von Öl für verschiedene Weltregionen. Die Organisation traut sich aber nicht zu, daraus Vorhersagen für den Preis abzuleiten. In der Zusammenfassung (PDF; den ganzen Bericht verkaufen sie für 80 Euro) steht:

As with previous editions of this Report, the price assumptions (not forecasts) used as modelling input
are derived from the futures curve.

„Not forecasts“. Ausdrücklich keine Vorhersagen. Die Annahmen der IEA werden aus den Kursen für Termingeschäfte abgeleitet. Also aus Geschäften, bei denen die Lieferung von Öl zu einem bestimmten Zeitpunkt in der Zukunft vereinbart wird. Diese Kurse spiegeln in etwa die kollektiven Preiserwartungen der Analysen und Händler wieder. Sie geben also bestimmt eine gewisse Orientierung, wohin die Reise gehen könnte. Aber Vorhersagen sind das nicht.

Die sind auch kaum möglich. So hat sich der Ölpreis seit 1946 entwickelt (inflationsbereinigt):

1946-2013

Die größten Ausreißer sind die Ökrise der 1970er-Jahre und die Finanzkrise seit 2008. Aber auch dazwischen macht der Kurs was er will. Und das sind jetzt schon die jährlichen Durchschnittswerte – im Tagesverlauf geht es noch viel wilder zu.

Diese Prognosen Annahmen über den Ölpreis gibt die IEA seit 2009 heraus. Zumindest für ein paar Jahre kann man also schon sehen, wie gut das mit der realen Preisentwicklung zusammenpasst.

2009-2014Die fette schwarze Linie ist der Ölpreis, jeweils als jährlicher Durchschnitt. Die anderen Linien sind die Schätzungen aus den jeweiligen IEA-Berichten. Den Sprung von 80 Dollar 2010 zu 110 Dollar ein Jahr später haben sie also nicht kommen sehen. Danach war der Kurs relativ brav, da hauen auch die Prognosen Annahmen ganz gut hin.

Letztes Jahr ist ja nochmal einiges passiert. Das zeigt sich im Jahres-Durchschnitt für 2014 nicht so krass, aber der Ölpreis ging von 112 Dollar im Juni auf nur noch 62 Dollar im Dezember runter. Das ist der aktuelle Preisverfall, der geopolitisch für einigen Wirbel sorgt – die USA finden’s super, ihre Feinde (Iran, Venezuela, Russland) haben große Probleme dadurch. Das ist der aktuelle Preisvefall, auf dem die Jubel-Überschrift der FAZ basiert.

Aber: Auch den hat die IEA vorher nicht abgesehen. Die Prognosen Annahmen, die bis einschließlich 2014 erstellt wurden, zeigen zwar eine Tendenz nach unten – aber längst nicht so krass, wie es letztes Jahr tatsächlich passiert ist. Der aktuelle Bericht von dieser Woche beinhaltet den Kurseinbruch – da war er ja schon passiert.

THE_CHARTBis 2020 prognostiziert nimmt die IEA jetzt einen moderaten Wieder-Anstieg des Ölpreises an. Kein Mensch weiß, ob es nicht nochmal zu unerwarteten, drastischen Ausschlägen nach oben oder unten kommt. Verursacht durch was auch immer. Und für die Zeit nach 2020 gibt es überhaupt gar keine Aussage. Der Satz in der FAZ – ein Ölpreis über 100 Dollar gehöre der Vergangenheit an – ist also unseriös.

Quellen: IEA, BP, Statista. Spreadsheet mit meinen Rohdaten. Die IEA-Berichte enthalten keine Tabellen mit den Zahlen. Die Diagramme sind manchmal beschriftet, manchmal nicht. In diesem Fall habe ich die Werte mit dem Tool Plot Digitizer ermittelt.

Nachtrag: Ein kurzer methodischer Vergleich der IEA-Annahmen mit den Klimaprognosen des IPCC

How much is the rich?

Ständig heißt es, die Reichen hätten zuviel Geld. Dabei weiß gar niemand, wie viel sie eigentlich haben. Jetzt haben zwei Forscher eine neue Statistik-Methode entwickelt.

„Die X reichsten Deutschen haben Y Prozent des Vermögens.“ Solche Sätze lesen wir ständig, wenn es um soziale Ungleichheit und die Schere zwischen Arm und Reich geht. Der Witz ist: Eigentlich weiß keiner, wieviel Geld die Reichen hier im Land haben.

Geht es um Ungleichheit, muss man erstmal zwischen zwei verschiedenen Dingen unterscheiden: Einkommen und Vermögen. Die Verteilung des Einkommens lässt sich relativ gut abschätzen. Es gibt in Deutschland eine Einkommenssteuer, die (prinzipiell) auch reiche Leute bezahlen müssen. Also weiß der Staat aus den Steuererklärungen seiner Bürger in etwa, wer wie viel verdient.

Beim Vermögen ist das schwieriger. Da die Vermögenssteuer in Deutschland 1997 abgeschafft wurde, muss niemand offenlegen, wieviel er hat [1].

Studien, in denen die Vermögensverteilung ermittelt werden (in Deutschland vor allem das Sozio-ökonomische Panel, SOEP), stützen sich daher auf Befragungen. Die rufen bei Leuten an und fragen, wie viel Geld sie haben. Die Wahrscheinlichkeit, da einen Milliardär zu erwischen ist ziemlich klein – bei den elftausend Befragten des SOEP etwa 1,6 Prozent [2]. Noch unwahrscheinlicher ist, dass der Auskunft gibt.

Nun tut es Diskussionen aller Art in der Regel gut, wenn sie auf der Grundlage von Fakten stattfinden. Noch besser ist es, wenn diese Fakten auch stimmen. Ganz besonders gilt das für Themen wie soziale Gerechtigkeit. Zum Glück erscheint heute eine Studie von Markus Grabka und Christian Westermeier, in der die beiden DIW-Forscher mit neuen Methoden die Vermögensstatistik verbessern möchten.

Bildquelle: DIW

Grabka und Westermeier verwenden dazu die Forbes-Liste aller Milliardäre der Welt. Das ist natürlich keine besonders verlässliche Quelle (u.a. weil sie total intransparent ist, Quellen und Methodik werden nicht veröffentlicht) – aber eine bessere konnten die Forscher nicht finden. Die Liste enthält 1645 Menschen mit einem Vermögen über einer Milliarde US-Dollar, darunter 85 Deutsche. Im Jahr 2012, auf das sich die Studie bezieht, waren es 55 [3].

Diese Zahl verwenden Grabka und Westermeier, um mittels eines statistischen Verfahrens die bisherigen Zahlen zur Vermögensverteilung zu korrigieren. Sie nehmen dazu eine Pareto-Verteilung an und ersetzen für das obere Ende der Skala die empirischen Befragungsdaten mit den Ergebnissen ihrer Simulation. Die Parameter der Verteilung schätzen sie aus den Forbes-Daten. Wenn man sich für Stastistik interessiert, sind die Ausführungen zur Methodik interessant.

Diese Vorgehensweise ist ziemlich wild. Grabka und Westermeier nehmen daher hohe Fehlertoleranzen an. In jedem Fall ergeben ihre Ergebnisse jedoch eine deutlich stärkere Konzentration des Reichtums als bisher angenommen. Die Süddeutsche schreibt:

So gehören den 0,1 Prozent der reichsten deutschen Haushalte 14 bis 16 Prozent des Gesamtvermögens. Das ist dreimal so viel wie jene fünf Prozent, von denen die Statistiker bisher ausgingen. Der Anteil des reichsten Prozents der Deutschen steigt von bisher angenommenen 18 Prozent auf 31 bis 34 Prozent; ihnen gehört also ein Drittel des Gesamtvermögens. Und die reichsten zehn Prozent der deutschen Haushalte vereinigen sogar 63 bis 74 Prozent des Gesamtvermögens auf sich, ermittelten die DIW-Forscher; bisher war man von lediglich 60 Prozent ausgegangen.

Kein Wunder, dass das inzwischen den Milliardären selbst unheimlich wird.

Was mich und meinen Gesprächspartner in der Cafeteria übrigens gewundert hat: Vermögen sind nicht steuerpflichtig, durchaus aber Kapitalerträge, also Zinsen, Mieteinnahmen etc. Sind dazu Daten verfügbar? Lassen sich daraus keine Rückschlüsse ziehen? Wer was weiß oder eine Theorie hat, gerne in die Kommentare schreiben.

Update (17. Februar 2015): Auf Nachfrage schreibt mir Christian Westermeier per E-Mail:

Man könnte von den Kapitalerträgen sicherlich Rückschlüsse auf das zugrunde liegende Vermögen schließen (wenn auch nur unter sehr großem Aufwand). Seit der Einführung der Abgeltungssteuer als Quellensteuer sind die Kapitalerträge größtenteils aber nicht mehr einzelnen Personen oder Haushalten zuzuordnen, da sie seitdem direkt von der Bank bspw. an das zuständige Finanzamt abgeführt werden. Es ist nur noch bekannt, wie groß das gesamte Steueraufkommen ist. Auch hier ergibt sich so leider keine nützliche Datenquelle.

Fußnoten:

[1] Es ist auch nicht  ganz klar, was man unter Vermögen versteht. Ansprüche an die gesetzliche Rentenversicherung werden in der Regel nicht berücksichtigt; dabei machen die in Deutschland einen großen Teil aus (in Griechenland weniger, was der Bild-Zeitung schon für einige Hetz-Schlagzeilen diente). Auch Hausrat (einschließlich Autos) bleibt häufig außen vor. Bei der Wertermittlung von Immobilien gibt es große Unterschiede.

[2] Mathematisch handelt es sich um ein Bernoulli-Problem. Laut Forbes gibt es in Deutschland 55 Milliardäre. Das Statistische Bundesamt zählte 2013 insgesamt 39,933 Millionen Haushalte. Die Wahrscheinlichkeit, dass in einem zufällig ausgewählten Haushalt ein Milliardär wohnt, beträgt damit 55/39933000=0,00014 Prozent (Trefferwahrscheinlichkeit). Bei der SOEP-Studie werden 11.447 Haushalte befragt (Anzahl der Versuche). Nehmen wir an, diese werden komplett zufällig unter allen Haushalten in Deutschland ausgewählt (was nicht ganz stimmt). Dann beträgt die Wahrscheinlichkeit, dass in mindestens einem dieser Haushalte ein Milliardär wohnt, 1,6 Prozent. Mit 98,4 Prozent Wahrscheinlichkeit erreicht die SOEP-Umfrage also keinen einzigen Milliardär (Berechnung im Spreadsheet). Den SEOP-Leuten ist das Problem bewusst. Sie führen daher eine gesonderte Befragung durch mit dem Ziel, mehr über reiche Leute zu erfahren. Diese fand zuletzt 2002 statt; es wurden 1.224 Haushalte mit einem monatlichen Einkommen über 4.500 Euro befragt.

[3] Eine andere Liste des Manager-Magazins kommt auf 135 deutsche Euro-Milliardäre. Grabka und Westermeier halten jedoch Forbes für die besssere Quelle.

Balkan Safari Ice Cream Index (BSICI)

In Dubrovnik zahlt man 30 Prozent Touri-Aufschlag.

In Dubrovnik zahlt man 30 Prozent Touri-Aufschlag.

Im September reisten Max und ich mit dem Rucksack durch Südosteuropa. Da es einerseits Sommer war, wir andererseits jedoch mit sehr geringem Budget unterwegs waren, haben wir relativ oft geschaut, ob wir uns eine Kugel Eis leisten könnenwollen. Irgendwann fing ich an, die Preise in mein Notizbuch zu schreiben. Und irgendwann erhielt das Projekt einen Namen: Balkan Safari Ice Cream Index. Kurz: BSICI. Als Nebenprojekt entstand der BSCBI, Balkan Safari Canned Beer Index.

Zurück von der Reise, habe ich die Daten mal in eine Tabelle geschrieben. Hatten wir aus einem Land mehrere Preise, ist der jeweils billigste in den Index eingeflossen, um Aufschläge für Touri-Hotspots (wie Dubrovnik) zu eliminieren.

Land Kugel Eis (EUR) 0,5l Bier (EUR) BIP pro Kopf (EUR)
HR 0,92 1,44 10.806,41
ME 0,50 1,00 5.691,54
AL 0,29 0,72 3.715,55
GR 1,50 1,09 17.499,52

Dann habe ich zu jedem Land das Bruttoinlandsprodukt pro Kopf rausgesucht, und Google den Korrelationskoeffizient berechnen lassen. Das Ergebnis ist einigermaßen erstaunlich:

Zwischen unseren Eis-Preisen und dem BIP pro Kopf gibt es eine Korrelation von 0,999.

Wir haben ja keine auch nur annähernd wissenschaftliche Erhebung gemacht, wir sind einfach durch die Straßen geschlendert und haben ab und an geschaut, was das Eis so kostet. Aus Kroatien, Montenegro und Albanien hatten wir je zwei Werte. Am Ende wurden wir nachlässig, aus Griechenland gibt es nur eine Zahl (Athen).

Mit dem Dosenbier funktioniert es nicht so gut: Das korreliert nur mit 0,535 mit dem BIP pro Kopf. Eis und Bier korrelieren untereinander mit 0,541. Ein befreundeter Volkswirt hatte dafür auch sofort eine plausible Erklärung: „Dosenbier ist ja ein Suchtmittel, da kann man einkommensunabhängigere Preise setzen.“bsici_chart

Natürlich ist das totaler Quatsch. Natürlich lässt sich aus vier Datenpaaren keine brauchbare Statistik basteln. Lustig ist es trotzdem. Naja, nerd-lustig zumindest.