Est-ce une méthode compatible avec les données de marché afin d'éviter d'être traîné par la valeur sautée?
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
Rendements hebdomadaires du marché sur ReadDF (bourse, actions, obligations, etc.)
#Lookback Calculé à partir des retours des 50 dernières semaines
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()) #Standardisation
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()