K-Shapeを用いた時系列データのクラスタリング分析をPythonで実装
K-Shapeを用いた時系列データのクラスタリング分析をPythonで実装
K-Shapeとは?
K-Shapeとは、時系列データのクラスタリングを時系列の形状でクラスタリングを行う分析手法です。K-Shapeの特徴としては、
- 時系列データの形状に着目したshape-basedクラスタリング
- データ間の距離尺度として、Shape-based distance(SBD)と呼ばれる、2つの時系列データの相関関係の最大値を用いている
- 高効率かつ高精度で、幅広いでデータに適用できる
時系列データでは、比較する時系列データの位相が異なったり、その時間軸の長さが異なったりする場合があります。K-Shapeではそれらを補正し、スケーリングの相違についてはz正規化した上で相関関係の距離を測定しています。
Pythonでの実装_ライブラリのインポート
下記、コードを参考にライブラリのインポートを行います。
!pip install kshape
!pip install tslearn
!pip install hdbscan
from kshape.core import kshape, zscore
import tslearn
from tslearn.utils import to_time_series_dataset
from tslearn.clustering import KShape
from tslearn.clustering import TimeSeriesKMeans
import hdbscan
Pythonでの実装_学習と出力
今回はクラスター数を3に設定し実行しています。DataFrameのデータを分析する場合、1行のデータが一つの時系列として扱われます。例えば、10×100のDataFrameを学習させた場合、時系列数は10個と認識しクラスタリングを行います。
ks = KShape(n_clusters=3, random_state=42)
ks.fit(nua_df.T)
preds=ks.predict(nua_df.T)
出力結果の例
出力結果の例を下記に示します。
print(pred)
—
#[0 1 0 2 2 0 2 1 0 1]
K-Shapeに関するハイパーパラメータは他にもあるため下記サイトを参考にしてみてください。
tslearn.clustering.KShape