Induktion von Beobachtungen auf ein allgemeines Gesetz, das zur Prognose verwendet werden kann:
Bisher sind alle Raben, die wir beobachtet haben, schwarz.
Probleme der induktiven Vorgehensweise:
Aus diesen Gründen verwendet man heute meist Wahrscheinlichkeitsaussagen:
Die Wahrscheinlichkeit, dass es morgen regnet, beträgt 50%.
Probleme der wahrscheinlichkeitsbasierten Vorgehensweise:
→ Wir behaupten zur Zeit, alles mit "Wahrscheinlichkeit" zu wissen.
→ Leider können diese Behauptungen nur im Unendlichen und somit gar nicht objektiv überprüft werden!
Beispiel: Heimvorteil beim Fußball
Nach jeder Sequenz von T=256 Spielen war die Rate gewonnener Spiele der Heimmannschaft größer als die der Auswärtsmannschaft.
Die Wahrheit dieser Aussage ist bis jetzt DiV=55,63 mal bestätigt.
data,_,_=loaddata('soccer',True,1)
aktlaw=LLaws(data,'df.gewonnen_h',x='df.gewonnen_a',bed_y='df.C',bed_x='df.C')
aktlaw.PlotLaws('ct')
display(aktlaw.DescribeLaw()[['Target','Bench','Bed_y','R','Bed_x','TU_ct','Div(TU_ct)','Min(TU_ct)','Max(TU_ct)']])
Beispiel: Peer-to-Peer Kredite der Plattform "LendingClub"
Kreditportfolioauswahlregeln mit nach jeder Sequenz von 512 Krediten unterschiedlicher Rendite.
Eine Auswahl von Portfoliokonstruktionsstrategien auf Basis von Sharp-Ratio oder RAROC würde zur Wahl der von allen anderen dominierten Strategie führen.
res=knowledge.evalnet(3426,'y_rend',select_obj="minT",MinT=4000)
display(res)
Emergente Gesetze lösen das Problem, dass man nur selten bisher immer wahre Aussagen findet.
Wir haben bereits Milliarden von empirischen Gesetzen über die relative Performance von Handlungsregeln aus den unterschiedlichsten Bereichen gefunden.
Weiterhin erfüllen die so konstruierten Objekte die Anforderungen an Elemente zur Konstruktion einer Menge, auf die sich die Theoreme der Mengenlehre anwenden lassen:
So wird es zum ersten Mal möglich, empirisch eindeutig Mengen zu bestimmen, die bisher immer einen zutreffenden Anwendungsfall für die Mengenlehre und somit der Mathematik darstellen.
Es bleibt die Frage, ob die bei obigem Beispiel zu beobachtende gute Performance von Prognosen mit emergenten Gesetzen ein systematisches Phänomen ist.
Kann man das Konstruktionsprinzip emergenter Gesetze auch auf die Prognosen mit emergenten Gesetzen anwenden?
Lerner suchen ab einem beliebigen Zeitpunkt nach Gesetzen über die relative Performance von Portfolioselektionsstrategien in den LendingClub-Daten.
Sie prognostizeren, dass die bis zum Zeitpunkt t in Fenstern der Größe T DiV-mal immer beobachtete Relation zwischen den Renditen der Strategien auch im Fenster t+T gilt.
Bei der Evaluierung der Prognosen ergeben sich die folgenden Zeitpfade der empirisch beobachteten Raten richtiger Prognosen (Rel) in Abhängigkeit von DiV:
knowledge.plotrel("lendingclub_rendite","0_3_C2b",10000,True,0)
Betrachtet man viele Prognoseprobleme, so kann man z. B. die folgenden emergenten Meta-Gesetze finden:
knowledge.show_overview_MetaLaws_1(Rels=["0.6","0.7","0.8","0.9","0.99","0.999"])
Beispiel für eine Klasse emergenter Meta-Gesetze:
Wenn eine Aussage A DiV-mal bestätigt wurde, dann gehört die Prognose, dass A beim nächsten Mal wieder auftreten wird, zu einer Kategorie von Prognosen, für die gilt:
In jeder Sequenz von Prognosen der Länge T>=TU war der Anteil wahrer Prognosen >=Rel.
Über einer Menge aus europäischen Aktienindizes soll eine Regel zur Zusammenstellung eines performanten Portfolios gefunden werden.
Beipiel für die Ergebnisfunktion einer elementaren Auswahlstrategie:
logrend(df['EURO_df.C_10_.std()_max']).shift(-1)
Wähle immer das Asset (aus Gruppe Euro
), das in den letzten 10 Handelstagen (C_10
) die höchste (_max
) Standardabweichung (.std()
) hatte und berechne die stetige Rendite des nächsten Tages (logrend().shift(-1)
).
data,frame,Endo=loaddata_assets('EURO',False,0.9)
BisT=int(len(data)*0.9)
print()
print()
print('Beispiele für einige verwendete Elemetarstrategien')
display(Endo[37:42])
Beispiel für ein Gesetz über die relative Performance von Elementarstrategien:
Die Summe der Renditen des Index mit der niedrigsten Volatilität der vorherigen 10 Tage war nach 3422 Handelstagen immmer größer als die Summe der Renditen des Index mit der höchsten 10 Tages-Volatilität (immer negative Risikoprämie).
Außerdem war die Summe der Renditen des Index mit niedrigster Volatilität nach 3422 Tagen immer größer als Null.
LLaws(data,"logrend(df['EURO_df.C_10_.std()_max']).shift(-1)",x="logrend(df['EURO_df.C_10_.std()_min']).shift(-1)",bed_x='df.C',bed_y='df.C').PlotLaws()
Gesucht werden Gesetze über die Performance der oben beschriebenen Handlungsregeln:
BisT=len(df)//10*9
lawdf,LawsForT=find_laws(df,Endo,2600,BisT)
display(LawsForT.loc[LawsForT['T']==2548,FieldList].sort_values('Mean(TG)',ascending=False))
Was wäre passiert, wenn man immer der Meta-Auswahlregel "Wähle immer die bis zum Zeitpunkt t nach dem Kriterium Mittelwert beste Anlagestrategie" gefolgt wäre?
Der Zeitpfad der erzielten Renditen bei Verwendung dieser "Follow-the-Leader Strategie" führt zu schlechteren Ergebnissen als die ex-post beste Strategie.
Ex-Ante ist die Ex-Post beste Strategie leider nicht bekannt.
a_1,b_1=follow_the_leader(data,Endo[0:],None,'Test')
plt.figure(figsize=(12,8))
plt.plot(data['Date'],logrend(data['DAX_Close']).expanding().sum(),label='DAX')
plt.plot(data['Date'],logrend(data['EURO_df.C_125_.mean()_max']).expanding().sum(),label='Ex-Post Best')
plt.plot(data['Date'],a_1.expanding().sum(),label='Follow the Leader')
plt.legend()
plt.show()
Die Strategie "Tue immer das, was bisher insgesamt das Beste war" ist aber nicht die einzig mögliche Verhaltensstrategie.
Auch Grundstrategien wie:
scheinen durchaus plausibel.
Einen Hinweis darauf, welche Verhaltensstrategien auf Assetmärkten erfolgreich sein könnten, liefert der Vergleich der Rate wahrer Prognosen (Reliability) bei unterschiedlichen Arten von Prognoseproblemen:
Probleme mit naturwissenschaftlichem Charakter (z.B. relative Größe der Luftfeuchtigkeit in Washington DC)
knowledge.plotrel("hum","0_3_C2b",3000,True,0)
Probleme der Prognose der relativen Vorteilhaftigkeit von Handlungsheuristiken bei konstanter Lerngeschwindigkeit (Fussballwetten)
knowledge.plotrel("soccer_wgaus","0_3_C2b",1250,True,0)
Probleme der Prognose der relativen Vorteilhaftigkeit von Handlungsheuristiken bei variabler Lerngeschwindigkeit (Assetmärkte)
knowledge.plotrel("C_SU","0_3_C2b",1250,True,0)
→ Es ist Aufgabe herauszufinden, wie lange man auf die Konstanz von Mustern vertrauen kann und was bei Falsifikation normalerweise geschieht.
→ Wir nennen Handlungsheuristiken, die Muster der Reaktion von Gegenspielern berücksichtigen "Spielstrategien".
→ Man kann zwischen Spielstrategien bei konstanter und variabler Lerngeschwindigkeit unterscheiden.
Man kann versuchen, empirisch die Regeln zu finden, nach denen die Marktteilnehmer an den Börsen derzeit spielen. Dazu verwenden wir vier grundsätzlich verschiedene Spielstrategien zur Auswahl von elementaren Handelsstrategien zu einem Zeitpunkt t in Abhängigkeit von Performancemustern in der unmittelbaren Vergangenheit:
Tue immer das, was aktuell in Fenstern der Länge T1 Div1-mal und vorher in Fenstern der Länge T2 Div2-mal funktioniert hat (kontinuierliche Regeln, Long_Long_T1_T2_Div1_Div2
, Short_Short_T1_T2_Div1_Div2
).
Tue immer das, was aktuell in Fenstern der Länge T1 Div1 nicht immer, aber vorher in Fenstern der Länge T2 Div2-mal funktioniert hat (früher gültige Regel aktuell falsch, NichtLong_Long_T1_T2_Div1_Div2
, NichtShort_Short_T1_T2_Div1_Div2
).
Tue immer das, was aktuell in Fenstern der Länge T1 Div1 nicht ins Gegenteil dreht, aber vorher in Fenstern der Länge T2 Div2-mal funktioniert hat (früher gültige Regel aktuell nicht das Gegenteil wahr, NichtShort_Long_T1_T2_Div1_Div2
, NichtLong_Short_T1_T2_Div1_Div2
).
Tue immer das, was aktuell in Fenstern der Länge T1 Div1 immer und vorher in Fenstern der Länge T2 Div2-mal nicht funktioniert hat (Gegenteil einer früher gültigen Regel, Long_Short_T1_T2_Div1_Div2
, Short_Long_T1_T2_Div1_Div2
).
Alle gefundenen Elementarstrategien mit Mustern gleicher Art werden zu einem gleichgewichteten Portfolio kombiniert.
Mit den Parametern T1=4, T2=8, Div1=1 und Div2=2 ergibt sich folgender Renditeverlauf für die einzelnen Spielstrategien:
a=calc_div_t(df,Endo,4,8,1,2,'Test_')
Auf dieser Basis kann man alle Strategien auswählen, die bis zum Zeitpunkt t in T-Fenstern die folgenden Eigenschaften haben:
Für den Anlagezeitraum T=2524 (ca. 10 Jahre) findet man die folgenden 20 Strategien:
with open("./EURO_Laws_for_T.p","rb") as f:
Strategies=pickle.load(f)
with open("./EURO_datenframe.p","rb") as f:
data_s=pickle.load(f)
domstrategies_2524=Strategies.loc[(Strategies['T']==2524)].loc[(Strategies['Max(T)']>=Strategies['Min(T)'].max())].loc[(Strategies['Min_Vola(T)']<=Strategies['Max_Vola(T)'].min())].sort_values('Div(TU_ot)',ascending=False)
display(domstrategies_2524.loc[:,FieldList])
Kombiniert man die nicht dominierten Strategien zu einem gleichgewichteten Portfolio, so erhält man die folgenden Out-of-Sample Evaluierungsergebnisse (in den letzten 10% der Daten):
ges_rend,ges_rend_lev,ges_anz=makeportfolio(data_s,domstrategies_2524,logrend(data_s.DAX_Close.shift(1)),BisT,MinLev=1,Filter='_')