Ist es eine Methode, die mit Marktdaten kompatibel ist, um nicht durch den übersprungenen Wert in Mitleidenschaft gezogen zu werden?
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
from sklearn.covariance import EmpiricalCovariance, MinCovDet
from sklearn.covariance import EmpiricalCovariance
warnings.filterwarnings('ignore')
plt.style.use('seaborn-darkgrid')
plt.rcParams['axes.xmargin'] = 0.01
plt.rcParams['axes.ymargin'] = 0.01
Wöchentliche Marktrenditen bei ReadDF (Börse, Aktien, Anleihen usw.)
#Lookback Berechnet anhand der Renditen der letzten 50 Wochen
ts_out = pd.DataFrame()
for date in ReadDF.dropna(axis=0)[50:].index:
x = ReadDF[:date][-50:]
x = (x/x.std()).dropna(axis=0)
mcd.fit(x[:-1])
anomaly_score_mcd = mcd.mahalanobis(x[-1:])
mle.fit(x[:-1])
anomaly_score_mle = mle.mahalanobis(x[-1:])
out = pd.DataFrame([anomaly_score_mcd, anomaly_score_mle]).T
out.columns = ['mcd', 'mle']
out.index = [date]
ts_out = pd.concat([ts_out, out], axis=0)
fig = plt.figure(figsize=(15, 10), dpi=80)
out = pd.DataFrame(ts_out/ts_out.std()) #Standardisierung
sns.set_palette("hls", len(out.columns))
ax1 = fig.add_subplot(1, 1, 1)
ax1.plot(out, alpha=0.6)
plt.legend(out.columns)
plt.show()