[PYTHON] [Note] Détection des anomalies de marché à l'aide du déterminant de covariance minimale

Comparaison de détection d'anomalies par matrice de covariance obtenue par le déterminant de covariance minimale ou MLE

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()

Anomaly.png

Recommended Posts

[Note] Détection des anomalies de marché à l'aide du déterminant de covariance minimale
Détection d'anomalies à l'aide de MNIST par Autoencoder (PyTorch)