[PYTHON] [Dernière méthode] Visualisation des données de séries chronologiques et extraction de modèles fréquents à l'aide du profil Pan-Matrix

Aperçu

J'ai les données chronologiques suivantes. 合成時系列データ.png Pour les données de séries chronologiques comme indiqué ci-dessus, ** Profil Pan-Matrix ** est le suivant.

無題.jpg La carte thermique en bas est ** Profil Pan-Matrix **, l'axe horizontal est le temps et l'axe vertical est la longueur de la série temporelle partielle. En vous référant au sommet (?) Indiqué par ★, vous pouvez voir en un coup d'œil la position d'apparition (axe horizontal) et sa longueur (axe vertical) des motifs fréquents inhérents à la série chronologique.

Qu'est-ce que le profil Pan-Matrix?

Dernière fois a présenté ** Matrix Profile ** en tant que technologie innovante pour l'analyse des données de séries chronologiques. ** Pan-Matrix Profile (PMP) ** est simplement une matrice de la longueur partielle de la série temporelle $ m $ de ** MatrixProfile ** examinée dans une certaine plage.

Jetons un œil à l'image d'exemple ci-dessus.

無題1.jpg

Décrit ce que signifie chaque élément de la matrice ** Profil Pan-Matrix **. À titre d'exemple, considérons l'élément (504,80). Comme mentionné précédemment, l'axe horizontal représente le temps et l'axe vertical représente la longueur de la série chronologique partielle. Premièrement, pour la série chronologique partielle du 504e point au 504 + 80e point de la série chronologique (le côté gauche de la série chronologique partielle bleue dans la figure supérieure), la partie de la même longueur qui est la plus similaire à cette série chronologique partielle. Calculez la distance par rapport à la série chronologique (figure du haut, bleu, droite). Ici, l'échelle de distance utilise la ** distance euclidienne normalisée Z **. Maintenant que la valeur de distance est 0,95, l'élément (504,80) contiendra 0,95.

Au fait, si vous essayez de créer cette matrice par une recherche forcée, cela prend beaucoup de temps de calcul tel que $ O (n ^ 4) $ (cependant, $ n $ est la longueur de la série chronologique), mais dans Reference [1], diverses techniques d'accélération Réduit à $ O (n ^ 2r) $ (où $ r $ est le nombre de candidats pour la longueur de la série chronologique partielle).

Bibliothèque pour le profil Pan-Matrix "matrixprofile"

Il existe de nombreuses bibliothèques pour matrixprofile, donc je suis confus, mais cette fois j'utiliserai une bibliothèque pour Python appelée matrixprofile. C'est vrai.

pip install matrixprofile

Exemple d'implémentation (1): Application aux données artificielles

Tout d'abord, implémentons des données de séries chronologiques fournies en standard avec la bibliothèque sous forme de données artificielles synthétiques.

from matplotlib import pyplot as plt
import numpy as np
import matrixprofile as mp

#Lire les données
dataset = mp.datasets.load('motifs-discords-small')
X = dataset['data']

#Visualisation de données
plt.figure(figsize=(18.0, 6.0))
plt.plot(np.arange(len(X)), X, color="k")
plt.xlim(0, len(X))
plt.title('Synthetic Time Series')

合成時系列データ.png

Le code pour créer et visualiser le profil Pan-Matrix ressemble à ceci:

#Pan-Profil matriciel et autres analyses
profile, figures = mp.analyze(X)

#Affichage PMP
figures[0]

ダウンロード.png Vous pouvez facilement créer un PMP avec mp.analyze (X). En plus de la matrice PMP, le «profil» contient la matrice d'index (PMPI) de la série temporelle partielle la plus proche pour chaque série temporelle partielle requise lors de la création d'un PMP, des informations d'analyse telles que Motif et Discord, etc.

Et, "figures" contient une image qui visualise l'analyse, et l'affichage est exécuté au moment de l'exécution de "mp.analyze (X)", mais seule la partie PMP est affichée avec "les chiffres [0]". Vous pouvez.

Exemple d'implémentation (2): Application à la séquence d'ADN mitochondrial

Ensuite, appliquons-le aux données réelles. Il est appliqué à la séquence d'ADN des mitochondries introduite dans l'article original [1]. (Strictement parlant, ce n'est pas une série ** chronologique ** ...)

Les données peuvent être obtenues au format mat sur ici.

#Lecture des données partie 2
import scipy.io as sio

dataset = sio.loadmat('termite_DNA_circular_shift')
X = dataset['t2'].reshape((-1,))

#Visualisation de données
plt.figure(figsize=(18.0, 6.0))
plt.plot(np.arange(len(X)), X, color="k")
plt.xlim(0, len(X))
plt.title('Mitochondrial DNA Sequence')

ダウンロード (1).png Créons un profil Pan-Matrix. Cette fois, cela prendra quelques minutes.

#Pan-Profil matriciel et autre analyse partie 2
profile, figures = mp.analyze(X)

#Affichage PMP partie 2
figures[0]

ダウンロード (2).png Je pense que PMP est inutilement grand. En fait, mp.analyze a un paramètre de seuil seuil, et vous pouvez ajuster la plage de recherche de la valeur limite supérieure de la longueur de la série temporelle partielle en l'ajustant. Je me demande où est allé le libellé sans paramètre, mais il semble qu'il n'est pas aussi sensible que la longueur de la série chronologique partielle $ m $.

Exemple de mise en œuvre ③: Application à l'électrocardiogramme (EOG)

Il s'agit également des données EOG utilisées dans le document original [1].

#Lecture des données 3
dataset = sio.loadmat('eog_multiple_scale_example')
X = dataset['testdata'].reshape((-1,))

#Visualisation de données
plt.figure(figsize=(18.0, 6.0))
plt.plot(np.arange(len(X)), X, color="k")
plt.xlim(0, len(X))
plt.title('EOG')

ダウンロード (3).png Si vous le visualisez avec les paramètres par défaut, ce sera comme suit.

#Pan-Profil matriciel et autres analyses # 3
profile, figures = mp.analyze(X)

#Affichage PMP partie 3
figures[0]

ダウンロード (4).png À propos, cette fois, il s'agit d'un PMP avec une très petite largeur verticale. Agrandissez et retirez Motif de manière appropriée. 無2題.jpg

Eh bien, le motif le plus long ressemble à ceci. Le motif de ces données présentées dans l'article original aurait dû être plus long. Quel est le problème?

Tout d'abord, si vous regardez le code dans la partie visualisation de la bibliothèque matrixprofile, tout ce qui a une distance de 1 ou plus dans PMP est rempli avec 1. En d'autres termes, dans l'image PMP, toutes les parties jaunes sont 1. Est-ce que je peux faire quelque chose comme ça?

Intuitivement, il semble que la distance entre les séries chronologiques partielles tend à augmenter à mesure que la longueur de la série chronologique partielle augmente. En d'autres termes, vous ne pouvez pas récupérer un long Motif avec cette méthode.

À propos, selon l'article original, la méthode d'extraction de Top-k Motif (je ne sais pas si je le comprends) semble extraire celui avec une petite valeur PMP. C'est ce que fait le code d'extrait Motif pour la bibliothèque matrixprofile. Dans ce cas, je pense que plus le Motif est court, plus il est surestimé.

Résumé

Donc, cette fois, j'ai présenté la dernière méthode ** Profil Pan-Matrix ** pour l'analyse des données de séries chronologiques. Il semble que la fin de la question demeure, mais j'aimerais travailler à résoudre cette question bientôt.

Les références

Recommended Posts

[Dernière méthode] Visualisation des données de séries chronologiques et extraction de modèles fréquents à l'aide du profil Pan-Matrix
Lissage des séries temporelles et des données de forme d'onde 3 méthodes (lissage)
Comment visualiser les données par variable explicative et variable objective
Méthode de visualisation de données utilisant matplotlib (1)
Méthode de visualisation de données utilisant matplotlib (2)
Graphique des données de séries chronologiques en Python à l'aide de pandas et matplotlib
Comparaison de la prédiction des données de séries chronologiques entre le modèle SARIMA et le modèle Prophet
Méthode de visualisation de données utilisant matplotlib (+ pandas) (3)
À propos des données de séries chronologiques et du surentraînement
Différenciation des données de séries chronologiques (discrètes)
Analyse des séries chronologiques 3 Prétraitement des données des séries chronologiques
Méthode de visualisation de données utilisant matplotlib (+ pandas) (4)
[Pour les débutants] Script dans les 10 lignes (5. Rééchantillonnage des données de séries chronologiques à l'aide de pandas)
Visualisation des données de coordonnées de latitude / longitude (en supposant des données météorologiques) à l'aide de cartopy et matplotlib
Essayez d'utiliser PHATE, une méthode de réduction et de visualisation des données biologiques
[Kaggle] J'ai essayé l'ingénierie de quantité de caractéristiques de données de séries chronologiques multidimensionnelles à l'aide de tsfresh
Lecture des données de séries chronologiques OpenFOAM et des ensembles de données
Résumé de la méthode Kaggle's Kernel [Table time series data]
Acquisition de données chronologiques (quotidiennes) des cours des actions
Voir les détails des données de séries chronologiques dans Remotte
Implémentation de la méthode de clustering k-shape pour les données de séries chronologiques [Apprentissage non supervisé avec python Chapitre 13]
Analyse des données financières par pandas et leur visualisation (2)
Analyse des données financières par pandas et leur visualisation (1)
Détection d'anomalies des données de séries chronologiques par LSTM (Keras)
Vue d'ensemble et astuces de Seaborn avec visualisation de données statistiques
Histoire de l'analyse d'image du fichier PDF et de l'extraction de données
Méthode d'extraction de données par lots à l'aide d'expressions régulières de Series
"Analyse des séries chronologiques de mesure des données économiques et financières" Résolution du problème de fin de chapitre avec Python